Lambda演算的Beta减少

时间:2013-04-04 06:01:04

标签: lambda-calculus

我知道这可能很简单,但我在弄清楚如何减少这个问题时遇到了问题。以下是我的等式。

(λx λy . y x) z

我只是想知道从哪里开始,因为我完全迷失了。

2 个答案:

答案 0 :(得分:3)

lambda表达式在语法上不正确,我想你打算写:

(λx.λy.y x) z 

(λxy.y x) z

这很重要,因为有效的lambda -exssion是λx.M而不是λxM,或者使用语法糖你可以写出λxy.M而不是λxλy.M而这个(λx.λy.yx)令人困惑因为它看起来像是一个应用程序。

我会减少(λx.λy.y x) z(λx.λy.yx) z

1)(λx.λy.y x) z
2)通过将x应用于(λx.λy.y x)来减少λx.λy.y,因此(λx.λy.y x) z缩减为λy.y z 3)通过将z应用于λy.y z来减少λy.y z,结果将为z。

如果你的意思是(λx.λy.yx) z

1)(λx.λy.yx) z 2)λx.(λy.yx) z 3)将z应用于第一次抽象:λy.yz 4)没有其他任何可以减少结果的是:λy.yz

我建议你看看lambda-calculus定义并理解应用程序,抽象和变量之间的区别。

同样在早期阶段最好使用()并总是以扩展方式编写lambda表达式,这样你就可以减少错误。

答案 1 :(得分:0)

你的lambda表达式可以有两个输入参数,但是只给出一个输入z。因此,这导致部分应用。

在您的情况下,这意味着参数x的值为z。因此,该表达式中所有出现的x都被替换为z。但是,参数y没有给出任何值,因为没有任何输入,所以参数y保持约束。

正如fsvieira所说,

λy.yz是正确的答案。