Lambda演算减少了函数

时间:2012-07-04 02:18:10

标签: lambda-calculus

我对lambda演算很新,当我阅读教程时,遇到了这个问题。 这是我的等式。

Y = ƛf.( ƛx.f(xx)) ( ƛx.f(xx))

现在如果我们应用另一个术语,让我们说F(YF),那么我们怎样才能减少这个。如果我根据beta减少是正确的,我们可以替换 f >(ƛx.f(xx))由(ƛx.f(xx)),这是正确的,如果是这样,我们怎么能这样做。

由于

1 个答案:

答案 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)