我有以下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 ))
答案 0 :(得分:1)
为避免混淆,我建议对alpha重命名。
因此,您可能会在"范围"中看到x
和z
(他们不受你的任何λ
约束),最好确定你是否指的是这些。
我会像这样改写你的术语:
(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
。