我对lambda演算很新,当我阅读教程时,遇到了这个问题。 这是我的等式。
Y = ƛf.( ƛx.f(xx)) ( ƛx.f(xx))
现在如果我们应用另一个术语,让我们说F(YF),那么我们怎样才能减少这个。如果我根据beta减少是正确的,我们可以替换 f >(ƛx.f(xx))由(ƛx.f(xx)),这是正确的,如果是这样,我们怎么能这样做。
由于
答案 0 :(得分:0)
回复步骤:
Y = ƛf.( ƛx.f(xx)) ( ƛx.f(xx)) = ƛf.( f ( ƛx.f(xx) ƛx.f(xx) ) )
= ƛf.( f ( f (ƛx.f(xx) ƛx.f(xx))))
= ƛf.( f ( f ( f (ƛx.f(xx) ƛx.f(xx))))
= ƛf.( f ( f ( f ( f (ƛx.f(xx) ƛx.f(xx))))) = ...
所以这个Lambda术语进入无限循环......
<强>解释强>
让我们看看我们用( ƛx.f(xx) ƛx.f(xx) )
替换ƛx.f(xx)
的术语f'
,这意味着(f' f')
=&gt;激活术语f'
本身
这样看起来可能更容易:
( ƛy.f(yy) ƛx.f(xx) )
现在,当您激活ƛy.f(yy)
并提供输入(用y
代替ƛx.f(xx)
)时,结果为:f(ƛx.f(xx) ƛx.f(xx))
反过来,可以转过来同一个过程一次又一次,lambda表达式只会消耗......
的注:强>
这写错了:
Y = ƛf.( ƛx.f(xx)) ( ƛx.f(xx))
它应该是:
Y = ƛf.(ƛx.f(xx) ƛx.f(xx))
ƛx.f(xx)
和(ƛx.f(xx))
之间的区别在于后者是ƛx.f(xx)
的激活 - 因为我们需要(ƛx.f(xx))
,因此像x
一样激活它是没有意义的(输入)激活它。
的最后强>
Y = ƛf.( ƛx.f(xx)) ( ƛx.f(xx)) = ƛf.( f ( ƛx.f(xx) ƛx.f(xx) ) )
含义:
YF = ( ƛx.F(xx)) ( ƛx.F(xx)) = F(ƛx.F(xx)) ( ƛx.F(xx)) = F(YF)