如何评估lambda演算中使用β还原的表达式?

时间:2013-01-17 07:21:22

标签: lambda programming-languages lambda-calculus formal-languages reduction

我想评估以下表达式:

(λx.y)((λz.zz)(λw.w))

使用β减少

答案是:

(λx.y)((λz.zz)(λw.w)) ->
(λx.y)((λw.w)(λw.w)) ->
(λx.y)(λw.w) -> y

但我不明白第二阶段:

从这里开始:(λx.y)((λz.zz)(λw.w))到这里(λx.y)((λw.w)(λw.w))

我们在那做什么?根据我的理解,我需要使用α-equivalence 规则。

2 个答案:

答案 0 :(得分:3)

β减少允许项(λx.t)s减小到t [x:= s]。在你的问题步骤中,x是z,t是zz,s是λw.w.所以这里t [x:= s]是zz [z:=λw.w],即(λw.w)(λw.w)。

答案 1 :(得分:3)

您建议的减少量是按值减少。

 (λx.y) z -> y[x/z] IF z is a value.

您可以使用名称缩减

直接缩减为y
 (λx.y) z -> y[x/z].

回答你的问题:

(λx.y)((λz.zz)(λw.w)) -> (λx.y)((λw.w)(λw.w))  

因为

 ( (λz.zz)(λw.w) ) is not a value (as (λx.y)z is never a value.)

因为

  (zz)[z/(λw.w)] i.e.substitute every occurence of z with (λw.w) leads to 

  (λw.w)(λw.w)