减少此lambda表达式

时间:2018-12-08 08:48:43

标签: lambda-calculus

我正在尝试减少beta的操作,但是我仍然坚持如何减少此问题:

(λx((λy.x)(λx.x))x)y

最外面的λx显然将被y取代,但是我是否应该继续简化((λy.x)(λx.x))呢?我在这里想念什么?

1 个答案:

答案 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

这样可以避免α转换。

相关问题