I am trying to learn lambda calculus, and I am currently tackling a few boolean logic questions. I have gotten to one that I am stuck on, and I am looking for a little help proceding. I need to prove that:
or false (not true)
evaluates to false, using lazy evaluation. I am given the following, where '\' is a lambda:
or = \v.\w.(v w v)
false = \x.\y.(y)
not = \v.\w.\x.(v x w)
true = \x.\y.(x)
So far I have gotten:
or false (not true)
= \v.\w.(v w v) false (not true)
= \w.((false(not true)) (false(not true)) w)
From here I am lost, I think my next step should be along the lines of:
\w.((\a.\b.(b)(not true)) false(not true) w)
But I feel like it is completely wrong. Is anyone able to help out? What would be the next step. How do I go about solving this problem? Since it is lazy evaluation, should I have done something more like:
\w.(false(false(not true) true w))
The above seems certainly wrong.
Please help
Thanks,
cjd
Best Answer
So I was going horribly wrong even from the beginning. I have finally figured this out. Here is the solution.