在lambda演算中,如何在输入为标识函数时编写一个返回true的函数?
假设true为某些教会编码的值为true。
看起来这应该是一个简单的函数来编写。但是对于我想到的每一个测试,一个棘手的输入可以超越它。这不可能吗?
答案 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