The Liar's Paradox

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

> 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.

 [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
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.