A Tutorial Introduction to the Lambda Calculus
本文介绍乘法函数
可以使用以下计算两个数字x和y的乘法 函数:
(λxyz.x(yz))
2乘2的乘积为:
(λxyz.x(yz))22 < / p>
减少到
(λz.2(2z))
读者可以通过进一步减少这个表达式来验证,我们可以得到预期的结果4。
我不知道怎么能(λz.2(2z))减少到4.有人能告诉我这个过程吗?
lambda函数中的2是λsz.s(s(z)),而4是λsz.s(s(s(s(z))))。
答案 0 :(得分:2)
您可以通过应用替换来正式获得结果,就像您之前引用的注释示例一样。
自:
2 ≡ λsz.s(s(z))
我们首先在(λz.2(2z))
中替换它的第二个实例(更改变量名以避免捕获自由变量):
(λz.2((λxy.x(x(y)))z))
等于(用x
代替z
):
(λz.2(λy.z(z(y))))
然后我们再次应用2的定义(使用新的变量重命名):
(λz.((λwu.w(w(u)))(λy.z(z(y))))))
等于(用w
代替λy.z(z(y))
):
(λz.(λu.(((λy.z(z(y)))((λy.z(z(y)))u)))))
现在我们可以在最严格的lambda中重复替换,用y
代替u
:
(λz.(λu.((λy.z(z(y)))(z(z(u))))))
最后我们可以应用最后一次替换,将y
替换为z(z(u)
:
(λz.(λu.z(z(z(z(u))))))
是4。
作为最后的评论,请注意,通过考虑数字 n 是一个带有两个参数的函数,可以确定定义的正确性,该参数应用第一个参数 n 次到第二次。因此,(λz.2(2z))
是应用两次函数2z
的函数,该函数应用两次z的函数,因此结果是应用四次z
的函数它的论点。