This article ("Quantum Test Found For Mathematical Undecidability") reminded me of the liar's paradox: "This statement is a lie."

Is this proposition undecidable?

How do my logic agents handle it?

What is the smallest number of axioms necessary to determine its decidability?

To get my bots to answer both yes and no to the question, "is this statement false?", I found I needed four propositions

and an if-then rule (which implies an understanding of material implication). Modus Ponens and the Reductio Ad Absurdum

method of proof are also necessary; these are built into the programs.

This exercise shows that my program has some notion of undecidability, and is able to deal with paradoxes without crashing.

% ruby controlbot.rb Hello > This statement is a lie. Okay, This statement is a lie. > This statement is "this statement is a lie" Okay, This statement is this statement is a lie. > "This statement is a lie" is this statement Okay, This statement is a lie is this statement. [The program can't handle pronouns yet so you have to be very explicit. Note that the "is" relation is not symmetric. I really want to use an equivalence relational operator such as "=", but that part of the program is not yet working when the input contains quotation marks.] > a lie is false Okay, a lie is false. [This axiomatic proposition allows you to say the same thing two different ways, i.e. "This statement is false" is treated the same as "This statement is a lie".] > Is "this statement" "a lie"? Yes, this statement is a lie. [The program checks the graph in which all propositions are stored, returning true as soon as it finds that "this statement" is linked to "a lie" by an edge labeled "is". The quotation marks are necessary because I haven't yet robustly incorporated a chunker to separate the two noun phrases.] [Now I activate the "Reductio ad absurdum" part of the program:] > Assume this statement is a lie. Okay, I will assume this statement is a lie. > If "this statement is a lie is false", then this statement is not a lie. Okay [This is an "axiomatic rule" of the system. The relation between the two statements is material implication (->).] > is "this statement is a lie" "false"? Yes, this statement is a lie is false. [Since "this statement is a lie" is "this statement", and since "a lie is false", "this statement is a lie" is false. Hence the second part of the if-then statement is true by Modus Ponens.] > But "this statement is not a lie" is absurd! Therefore, It is not the case that this statement is a lie.

The absurdity is that you have proved the opposite of the initial assumption, which is a contradiction, which means (by the Law of Non-Contradiction) that the assumption was wrong.

The Wikipedia article on the liar paradox has a simpler formulation, which I can replicate with the Aristotelian syllogism agent (gagent) alone:

% ruby gagentbot.rb Hello I have loaded /controlbot/gagent/gagent-api.yaml. > A is "A is false" Okay, A is A is false. > "A is false" is not-A Okay, A is false is not-A. > is A not-A? Yes, A is not-A. > why is A not-A? A is not-A because: a is a is false, and a is false is not-a >

Another take on the logical formulation of the liar paradox.