为什么lambda演算表达式(( (λf.λx.f(f(f(x)))) (λg.λy.g(g(y))) ) (λz.z + 1)) (0)结果为8
Lambda演算表达式推演过程
核心错误原因
你之前的推导混淆了邱奇数的应用逻辑:邱奇数之间的应用运算本质是函数幂次的嵌套,而非次数的乘法。n m(邱奇数n应用到邱奇数m上)的结果不是n*m,而是m^n,对应函数复合次数为m的n次方。
逐步β归约过程
我们对原表达式(( (λf.λx.f(f(f(x)))) (λg.λy.g(g(y))) ) (λz.z+1)) (0)做分步归约:
- 首先定义几个中间函数方便指代:
F3 = λf.λx.f(f(f(x))):邱奇数3,语义是将输入函数f对输入参数x重复应用3次F2 = λg.λy.g(g(y)):邱奇数2,语义是将输入函数g对输入参数y重复应用2次succ = λz.z+1:加1函数
- 第一步归约:将
F2作为参数代入F3的f参数
得到结果:λx. F2(F2(F2(x)))
这里的x是后续要传入的函数,不是数值参数,这是你之前推导错误的核心节点:你误以为这里的f是直接作用在数值上,实际这里f作用的对象是函数 - 第二步归约:将
succ作为参数代入上式的x参数,即计算F2(F2(F2(succ))):- 最内层计算:
F2(succ) = λy. succ(succ(y))→ 等价于加2函数 - 中间层计算:
F2(F2(succ)) = λy. (F2(succ))(F2(succ)(y))→ 加2函数重复2次,等价于加4函数 - 最外层计算:
F2(F2(F2(succ))) = λy. (F2(F2(succ)))(F2(F2(succ))(y))→ 加4函数重复2次,等价于加8函数
- 最内层计算:
- 第三步归约:将0代入最终得到的加8函数,结果为
0+8=8
规则验证
邱奇数的应用运算满足规则:对任意邱奇数m、n,n m = m^n,本次计算中就是3 2 = 2^3 =8,和归约结果完全一致。
内容的提问来源于stack exchange,提问作者A-P
相关产品推荐
相关产品推荐

