lambda演算如何与以下表达式一起工作:(Ly.Lt.yt)zx?

时间:2014-06-15 15:55:05

标签: lambda-calculus

我不明白如何解决这个lambda演算表达式:

(Lx.yx)((Ly.Lt.yt)zx)

我不明白zx是如何传递和评估的。 是传递给Ly还是Lt? 你能救我吗?

编辑: 这就是我试图解决的问题:

(Lx.yx)((Ly.Lt.yt)zx)我首先将zx视为2个参数并将Ly应用于z:

->(Lx.yx)((Lt.zt)x)然后我将Lt应用于x,我得到:

->(Lx.yx)(zx)现在我将Lx应用于(zx):

->(y(zx))

应该是对的,但我不清楚这种情况下的角色是什么:((Ly.Lt.yt)zx)。申请什么,何时申请以及如何申请。 你能帮帮我吗?

2 个答案:

答案 0 :(得分:0)

您总是会Beta减少最左侧的beta减少量,而这样做是对的。应用时,将整个lambda项替换为函数的主体,但必须使用参数替换所有出现的函数变量。

示例:

(Lx.Ly.x)(La.Lb.ab)(La.Lb.ba)
[^left most redex^]
(Ly.(La.Lb.ab))(La.Lb.ba)
[^^^^left most redex^^^^]
(Ly.(La.Lb.ab))

(no more beta redexes, done evaluating)

答案 1 :(得分:0)

规则是:

  • Lx.Ly.M的意思是(Lx.(Ly.M))
  • MNP的意思是((MN)P)

所以((Ly.Lt.yt)zx)(((Ly.(Lt.yt))z)x)。因此,这里第一个可用的redex是(Ly.(Lt.yt))z,您的所有步骤都是正确的。干得好!