减少这个 lambda 表达式
Reducing this lambda expression
我正在尝试减少 beta 值,但我对如何减少这个问题感到困惑:
(λx((λy.x)(λx.x))x)y
最外层的λx
显然会被y
代替,但我还要继续减少((λy.x)(λx.x))
吗?我在这里错过了什么?
I’m trying to practice beta reduction but I’m stuck on how to reduce this problem:
(λx((λy.x)(λx.x))x)y
要执行第一个 β 归约,您必须查看受外部 λx
约束的变量 x
,它们是
(λx((λy.x)(λx.x))x)y
^ ^
请注意,在内部 λx.x
中隐藏了外部 lambda,因为它使用相同的变量名。所以这里的绑定 x
绑定到这个内部 lambda,而不是外部 lambda。
另一个问题是,如果您用 y
替换 λy.x
中的 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
returns y
对于任何输入,
((λz.y)(λx.x))y
→ yy
注意λ演算没有设置归约策略,它只是建立项之间的等价关系。所以你可以选择另一个减单。例如,您可以先 β-reduce 内部 β-redex (λy.x)(λx.x)
。
(λx((λy.x)(λx.x))x)y
→ (λx(xx)y
→ yy
这样可以避免 α 转换。
我正在尝试减少 beta 值,但我对如何减少这个问题感到困惑:
(λx((λy.x)(λx.x))x)y
最外层的λx
显然会被y
代替,但我还要继续减少((λy.x)(λx.x))
吗?我在这里错过了什么?
I’m trying to practice beta reduction but I’m stuck on how to reduce this problem:
(λx((λy.x)(λx.x))x)y
要执行第一个 β 归约,您必须查看受外部 λx
约束的变量 x
,它们是
(λx((λy.x)(λx.x))x)y
^ ^
请注意,在内部 λx.x
中隐藏了外部 lambda,因为它使用相同的变量名。所以这里的绑定 x
绑定到这个内部 lambda,而不是外部 lambda。
另一个问题是,如果您用 y
替换 λy.x
中的 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
returns y
对于任何输入,
((λz.y)(λx.x))y
→ yy
注意λ演算没有设置归约策略,它只是建立项之间的等价关系。所以你可以选择另一个减单。例如,您可以先 β-reduce 内部 β-redex (λy.x)(λx.x)
。
(λx((λy.x)(λx.x))x)y
→ (λx(xx)y
→ yy
这样可以避免 α 转换。