对于定点组合子Y,什么是\ x.f(xx)

时间:2014-01-01 20:17:13

标签: functional-programming computer-science theory lambda-calculus combinators

对于Y组合定理,

 For every function F there exists an X such that FX=X

这里的F是什么意思?什么是F(x) = x +1的固定点?我的理解是x+1=x没有解决方案?

以下证据:

For any function F, let W be the function λx.F(xx) and let X = WW.
    We claim that X is a fixed point of F. Demonstrated as follows

    X = WW
    X = λx.F(xx) W
    X = F(WW)
    X = FX 

λx.F(xx)如何定义?再次使用F(x) = x + 1作为示例,F(xx)是什么意思?

2 个答案:

答案 0 :(得分:2)

你是对的,因为x+1 = x是一个数字,等式x没有解决方案。这里发生的是x并不仅限于数字;它可以是函数的函数。

关于xx:一般来说,lambda演算f x是函数应用程序,因此xx是“x应用于x”或x(x)。注意x是如何应用的函数和传递给它的值。

因此,如果F(x) = x+1,您有F(xx) = x(x)+1W = λx.(x(x)+1)X=W(W)就是函数:

X = W(W) = (λx.(x(x)+1)) (λy.(y(y)+1))

这看起来很抽象,因为如果你尝试在任何具体值上扩展X,你会发现该过程永远不会结束。但是不要让那困扰你;尽管XF的固定点,因为

F(X) = F(W(W))             by definition of X = W(W)
     = (λx.F(x(x))) W      using the fact that (λt.f(t))x is f(x)
     = W(W)                by definition of W = λx.F(x(x))
     = X                   by definition of X = W(W).

答案 1 :(得分:2)

似乎有点混淆功能的固定点以及lambda演算符号。

第一个λx.F(xx)是一个函数,它接受一个参数x并将“x”应用于x,然后“然后”将“F”应用于结果,所以更像是function (x) { return F(x(x)); },但不是字面意思,因为在lambda演算中,它是关于参数的替换,并且没有你需要进行替换的顺序(我用于简化的是 applicative 顺序)。

因此,使用简单的文本重写语义将证明重写为类C语法(实际上是JavaScript,因为它具有第一类函数)看起来像:

var W = function (x) { return F(x(x)); }
var X = W(W);

W(W) => (function (x) { return F(x(x)); }(W))
     => return F(W(W))
     => return F(X)
     => F(X)

现在回到定点。你给出了一个固定点不存在的代数示例......对于函数来说,它更像是“找到ADD1(x) = x + 1的固定点”

var F = function (x) { return x + 1; }
var W = function (x) { return F(x(x)); }
      = function (x) { return function (x) { return x + 1; }(x(x)); }
var X = W(W);

W(W) => function (x) { return function (x) { return x + 1; }(x(x)); }(W)
     => return function (x) { return x + 1; }(W(W))
     => return W(W) + 1
     => W(W) + 1
     => X + 1
     => F(X)

我希望熟悉的语法使其不那么混乱而不是更多:)