在lambda演算中,如何在输入为标识函数时编写一个返回true的函数?

时间:2013-10-28 00:27:19

标签: lambda-calculus

在lambda演算中,如何在输入为标识函数时编写一个返回true的函数?

假设true为某些教会编码的值为true。

看起来这应该是一个简单的函数来编写。但是对于我想到的每一个测试,一个棘手的输入可以超越它。这不可能吗?

1 个答案:

答案 0 :(得分:0)

I := λx.x
0 := λf.λx.x
1 := λf.λx.f x
TRUE := λx.λy.x
FALSE := λx.λy.y
PRED := λn.λf.λx.n (λg.λh.h (g f)) (λu.x) (λu.u)
ISZERO := λn.n (λx.FALSE) TRUE

身份函数λx.x是Eta,相当于教会数字1 λf.λx.f x。对于在通过谓词函数传递后未评估为教会数字零(FALSE)的任何函数,下面的Fn将返回λf.λx.x

λx.(ISZERO (PRED x)) TRUE FALSE

可能存在一个行为如此的函数BAD:

λx.(ISZERO (PRED x)) TRUE FALSE BAD := TRUE
BAD != I