我正在尝试减少beta的操作,但是我仍然坚持如何减少此问题:
(λx((λy.x)(λx.x))x)y
最外面的λx
显然将被y
取代,但是我是否应该继续简化((λy.x)(λx.x))
呢?我在这里想念什么?
答案 0 :(得分:0)
我正在尝试减少beta的操作,但是我仍然坚持如何减少此问题:
(λx((λy.x)(λx.x))x)y
要执行第一个β约简,您必须查看由外部x
约束的变量λx
,
(λx((λy.x)(λx.x))x)y
^ ^
请注意,内部λx.x
会遮盖外部lambda,因为它使用相同的变量名。因此,此处绑定的x
绑定到此内部lambda,而不是外部lambda。
另一个问题是,如果用y
中的x
代替λy.x
,则y
被外部lambda捕获。那不可能发生,因此您需要在λy.x
上执行α转换(重新命名),以避免捕获。
所以首先是α转换,即β还原
(λx((λy.x)(λx.x))x)y
→ (λx((λz.x)(λx.x))x)y
→ ((λz.y)(λx.x))y
如果您想继续,那么λz.y
会为所有输入返回y
((λz.y)(λx.x))y
→ yy
请注意,λ演算未设置归约策略,它仅建立了项之间的等价关系。因此,您可以选择另一个减少订单。例如,您可以先β-减少内部β-redex(λy.x)(λx.x)
。
(λx((λy.x)(λx.x))x)y
→ (λx(xx)y
→ yy
这样可以避免α转换。