Lambda Calculus beta减少

时间:2015-02-16 12:32:56

标签: lambda lambda-calculus

我有以下lambda演算:

( x ( λyz.xz ) ( λxy.zyx )) (( λyx.xyz ) ( λy.xz ))

我已经减少了:

alpha => ( x ( λyz.xz ) ( λxy.zyx )) (( λyx1.x1yz )) ( λy.xz ))
beta  => ( x ( λyz.xz ) ( λxy.zyx )) ( λx1.x1 ( λy.xz ) z )

我的问题:为什么以下减少错误?他们似乎简化了我的表达方式:

beta1 => ( x ( λyz.xz ) ( λxy.zyx )) ( λx1.x1 ( xz ))
beta2 => ( x ( λy.x ( λxy.zyx ))) ( λx1.x1 ( xz ))

1 个答案:

答案 0 :(得分:1)

为避免混淆,我建议对alpha重命名。 因此,您可能会在"范围"中看到xz (他们不受你的任何λ约束),最好确定你是否指的是这些。

我会像这样改写你的术语:

(x (λy1,z1. x z1) (λx2,y2. z y2 x2)) ((λy3,x3. x3 y3 z) (λy4. x z))

我在重命名方面走得很远(当然这是不必要的,但是像这样,我们确定哪个是哪个)。

这个术语beta减少到

(x (λy1,z1. x z1) (λx2,y2. z y2 x2)) ((λx3. x3 (λy4. x z) z))

然后

(x (λy1,z1. x z1) (λx2,y2. z y2 x2)) ((λx3. x3 (λy4. x z) z))

这确实与你所写的相同。 您要执行的操作是将(λy4. x z)应用于z。 这不是你应该如何阅读x3 (λy4. x z) z,也可以用更多括号写(x3 (λy4. x z)) z。 不知怎的,这个词被卡住了,因为它的头是一个变量。

您无法做到这一点,因为此术语也涉及您无法减少的应用程序。 也许您也可以通过eta-reduction将(λy1,z1. x z1)重写为(λy1. x)

因此,您无法获得(x (λyz.xz) (λxy.zyx)) (λx1.x1 (x z)),并且出于同样的原因,您无法将其降级为(x (λy.x (λxy.zyx))) (λx1.x1 (x z)),因为您的括号错误。

f x y从左到右阅读,您执行f并将其应用到x,然后将结果应用于y