How to prove “1 not True == False” in Lambda Calculus

lambda-calculus

I have to prove "1 not True == False" in Lambda Calculus which is (left side of eq):

(λs.λz.s z) (λx.x (λt.λf.f)(λt.λf.t))(λt.λf.t)

I come to this step: (which I know is still correct, just brackets could be wrong but I would not know how do get further with different brackets as well)

λf.(λt.λf.f) (λt.λf.t)

So how does one come from here to λt.λf.f (False)?

As far as I know there are no special rules that let me shorten anything like that…

Best Answer

Let's write $T:=\lambda t.\, \lambda f.\,t$ and $F:=\lambda t. \,\lambda f.\,f$, and $N$ for the middle part: $N:=\lambda x.\,x\,F\,T$.

Then our term looks like $$(\lambda s.\,\lambda z.\,s\,z)\,N\,T$$ and $\beta$-reduction leads it to $N\,T$ since it substitutes $N$ for $s$ and $T$ for $z$ while removing their $\lambda$-prefix.

Writing it further, $$N\,T\ =\ (\lambda x.\,x\,F\,T)\,T\ \overset\beta\leadsto\ T\,F\,T\ =$$ $$=\ (\lambda t.\,\lambda f.\,t)\,F\,T\ \overset\beta\leadsto\ F$$ where the last step (trickily) substitutes $F$ for $t$ and $T$ for $f$.

Related Question