Liar Paradox Revisited

A well-known brain­teaser asks about the truth of the state­ment “this state­ment is false”. My pre­vi­ous ar­ti­cle on this topic, out­lined com­mon ap­proaches to this prob­lem and then ar­gued that we should con­ceive of two dis­tinct kinds of truth:

  • State­ments about the world, where as per Tarski there is a nat­u­ral in­ter­pre­ta­tion: “Snow is white” is true iff and only iff “Snow is white”

  • Log­i­cal/​Math­e­mat­i­cal state­ments, where the no­tion truth is con­structed to give us a con­ve­nient way of talk­ing about our rules of in­fer­ence within a par­tic­u­lar sys­tem that nor­mally ex­cludes self-refer­en­tial statements

I should add that some state­ments can only be defined us­ing a com­bined no­tion of truth, ie. “The car is red and 1+1=2”.

My point was that if we chose to ex­tent log­i­cal/​math­e­mat­i­cal state­ments out­side of their usual bound, we shouldn’t be sur­prised that it breaks down and that if we choose to patch it, there will be mul­ti­ple pos­si­ble ways of achiev­ing this.

Patch­ing with INFINITE-LOOP

So let’s con­sider how we might at­tempt to patch it. Sup­pose we fol­low the For­mal­ists (ht Cous­inIt) and in­sist that “true” or “false” or only ap­plied to sen­tences that can be eval­u­ated by run­ning a finite com­pu­ta­tion pro­cess. Let’s add a third pos­si­ble “truth” value: INFINITE-LOOP.

Con­sider the fol­low­ing sen­tence:

The truth value of this sen­tence is not INFINITE-LOOP

This seems to be a con­tra­dic­tion be­cause the sen­tence is in­finitely re­cur­sive, but at the same time de­nies this.

In or­der to un­der­stand what is hap­pen­ing, we need to make our al­gorithm for as­sign­ing truth val­ues more ex­plicit:

if ex­pan­sion ter­mi­nates:
Re­solve truth value nor­mal­ly
As­sign INFINITE-LOOPif ex­pan­sion ter­mi­nates:

What we see here is that if the sen­tence is not able to be ex­panded with­out end­ing up in an in­finite loop, it is as­signed the truth value INFINITE-LOOP with­out any re­gard to what the sen­tence as­serts. So there isn’t ac­tu­ally an in­con­sis­tency, at most, this sys­tem for as­sign­ing truth val­ues just isn’t be­hav­ing how we’d want.

In fact con­sider the fol­low­ing:

A: This sen­tence is false
B: Sen­tence A has a truth value of INFINITE-LOOP

Ac­cord­ing to the above al­gorithm, as­sign­ing INFINITE-LOOP to B is cor­rect, when it seems like it should be FALSE. Fur­ther, this sys­tem as­signs INFINITE-LOOP to:

1+1=2 or this sen­tence is false­

when per­haps it’d be bet­ter to as­sign it a value of TRUE.

Patch­ing with an oracle

Be­ing able to talk about whether or not sen­tences end up in an in­finite loop seems use­ful. So we can imag­ine that we have a proof or­a­cle that can de­ter­mine whether sen­tence will end up in a loop or not.

for refer­ence in sen­tence:
if or­a­cle re­turns INFINITE-LOOP:
Eval­u­ate the clause given the value INFINITE-LOOP as the truth value of the refer­ence
Ex­pand nor­mal­ly

How­ever, our or­a­cle still doesn’t de­mys­tify:

The truth value of this sen­tence is not INFINITE-LOOP

As our al­gorithm would re­place the first clause with INFINITE-LOOP and hence evaluate


to FALSE. But then:


so we would ex­pect it to also be TRUE.

So per­haps we should define our or­a­cle to only work with sen­tences that don’t con­tain refer­ences to INFINITE-LOOPS. Con­sider the fol­low­ing situ­a­tion:

A: This sen­tence is false
B: Sen­tence A has a truth-value of INFINITE-LOOP
C: Sen­tence B is true
D: Sen­tence C is true

B would be TRUE (even though it refers to INFINITE-LOOP, the or­a­cle only has to work with the refer­ence “Sen­tence A”). How­ever, C would be un­defined.

We could fix this by al­low­ing the or­a­cle to re­turn TERMINATES for sen­tences that can be eval­u­ated af­ter one level of ex­pan­sion with our ini­tial defi­ni­tion of an or­a­cle. We can then al­low sen­tence D to be true by al­low­ing the or­a­cle to re­turn TERMINATES for any sen­tence that can be eval­u­ated af­ter two lev­els of ex­pan­sion and we can re­cur­sively ex­tend this defi­ni­tion un­til in­finity.

This also re­solves cases like:

1+1=2 or this sen­tence is false

The sec­ond clause eval­u­ates to INFINITE-LOOP and since this is a truth value, rather than ac­tu­ally in­finitely loop­ing, (TRUE OR INFINITE-LOOP) should give true.

Patch­ing with ORACLE-LOOP

We still haven’t figured out how to han­dle cases like:

The truth value of this sen­tence is not INFINITE-LOOP

I would sug­gest that we might want to re­peat our first move and say that the truth value is ORACLE-LOOP when­ever an or­a­cle fails to re­solve it (even if we ex­pand it an in­finite num­ber of times, we still end up with a sen­tence con­tain­ing INFINITE-LOOP). We can then stack meta-lev­els and fur­ther met­alevels on top of this.

Fi­nal Note

I’ll finish by not­ing that we could also define an­other no­tion of truth whether a state­ment is true when there is a sin­gle fixed point. This would re­sult in state­ments like:

This sen­tence is true

Be­ing set to true in­stead of INFINITE-LOOP.

In any case, the way that we ex­tend the con­cept of truth to ap­ply to these de­gen­er­ate cases is purely up to what we find con­ve­nient.