如何用 lambda 项中的 Church 数字定义函数?

问题描述

如何用 lambda 项表达以下函数?

f(n) = T 如果 n != 0。 F 如果 n = 0。

n 代表教会数字。

我知道 0 := λf.λx.x 其中 λx.x 是恒等函数,所有其他自然数都可以用 n := λf.λx.f (f ... (fx)) 表示,其中包含fn 倍于 0 项。例如。 3 := λf.λx.f (f (f x)).

但是我怎样才能为上面的函数推导出一个有效的λ项呢?我想我也需要一个 y 来获得 T/F。因此我可以用λf.(λxy.fxy) 来表示数n,对吗?但是 F 和 T 呢?以下是上述函数的正确 λ 项吗? λf.(λxy.fxy(yFT)) 其中 T=λxy.x 和 F=λxy.y?

解决方法

不,您给了 n 这个词。这是一个需要两个参数的函数,一个 f 和一个 z

isZero n = n ( ;; f,a function,expecting x
               ;;       or the result of (f (f ... (f x) ...))
               λx.
               ;; but we know what we want it to return,always: it is:
                  F    ;; false,for n is _not_ 0
             )
             ( ;; the initial x,in case n is ......... 0!
               ;; so we know what we want it to be,in case n is 0:
               T       ;; true,for n _is_ 0
             )

因此

isZero = λn.n(λx.F)T

如果 n 为 0,isZero n 将返回 T;否则,F

{0}(λx.F)T = T
{1}(λx.F)T = (λx.F)T = F
{2}(λx.F)T = (λx.F)((λx.F)T) = F
{3}(λx.F)T = (λx.F)((λx.F)((λx.F)T)) = F
....

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...