我不明白如何解决这个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)。申请什么,何时申请以及如何申请。 你能帮帮我吗?
答案 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
,您的所有步骤都是正确的。干得好!