评估lambda演算-或False TRUE

时间:2019-11-11 08:23:32

标签: lambda-calculus

TRUE =λxy。 x

FALSE =λxy。 y

IF =λbtf。 b t f

AND =λxy。如果x y为假

OR =λxy。如果x是y

NOT =λx。如果x假为真

如何使用lambda演算来beta减少表达式或FALSE TRUE?我不确定从哪里开始。我的讲师没有通过。这是我的尝试

(\xy.IF x TRUE y)(\xy.y)(\xy.x)
= (\xy.IF x TRUE y)[x := (\xy.y))(\xy.x)
= (\y. IF (\xy.y) TRUE y)(\xy.x)
= (IF (\xy.y) TRUE y)[y := (\xy.x))
= IF (\xy.y) TRUE (\xy.x)

1 个答案:

答案 0 :(得分:1)

在使用Church-encodings时,我认为最好保持尽可能抽象,即,您不应该展开TRUEFALSEIF和{{1 }}渴望,但只有在需要的时候。

相反,您首先想证明有关其行为的基本结果,这也有助于进行健全性检查。 对于NOT,您要检查IFIF TRUE t f = t

IF FALSE t f = f

IF TRUE t f = TRUE t f (IF returns its arguments directly) = t (TRUE returns its first argument) 相同。

现在

IF FALSE

并且通过应用您已经证明的身份,您应该可以得出结论。