lambda演算中的算术定义

lambda演算中的算术定义,lambda,Lambda,正如秘书长所说: 在lambda演算中,有几种可能的方法来定义自然数,但到目前为止,最常见的是Church数字,其定义如下: 我只知道0定义中的λx.x部分是恒等函数,数字与f重复多少次有关(在0f重复0次),但为什么这样定义,如何在一个容易理解的句子中解释λf.λx.x(0)和λf.λx.f(fx)(2)(尤其是f所代表的内容) 补充:关于定义有什么值得解释的吗?因为一切都是lambda项,在lambda演算中,您只能定义对其他lambda项“操作”的lambda项(函数)(只允许使用λ符号

正如秘书长所说:

在lambda演算中,有几种可能的方法来定义自然数,但到目前为止,最常见的是Church数字,其定义如下:

我只知道0定义中的
λx.x
部分是恒等函数,数字与f重复多少次有关(在0f重复0次),但为什么这样定义,如何在一个容易理解的句子中解释
λf.λx.x
(0)和
λf.λx.f(fx)
(2)(尤其是
f
所代表的内容)



补充:关于定义有什么值得解释的吗?

因为一切都是lambda项,在lambda演算中,您只能定义对其他lambda项“操作”的lambda项(函数)(只允许使用λ符号书写的“值”)

因此,如果我们想从理论的角度证明,lambda演算允许我们编写任何可计算函数,我们需要找到自然数的合适表示(编码,用技术术语来说)来定义可计算函数(请注意,使用Church编码,您是通过lambda术语表示的,而不是!)

将数字编码为lambda术语后,可以在“数字”上定义所有常用函数。例如,后续函数可以定义为:

SUCC := λn.λf.λx.f (n f x)
它取一个“数字”(即编码一个数字的lambda项)并返回其后继项(即编码该数字后继项的lambda项)。例如,
((SUCC)0)
β-减少为
1
(即
((λn.λf.λx.f(nfx))λf.λx.x)
是β-等价于
λf.λx.f x
),等等。从这一点开始,我们可以定义“数”上的所有其他函数,如和、乘、幂等

这种编码的用途是什么?当然,给出一种实用的编程语言来实现两个数字的求和是没有用的。但它允许研究这种形式主义,例如,提供一种表达Church Turing命题的方法,该命题断言任何可计算运算符(及其操作数)可以用Church编码表示

SUCC := λn.λf.λx.f (n f x)