对于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)
是什么意思?
答案 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)+1
,W = λx.(x(x)+1)
和X=W(W)
就是函数:
X = W(W) = (λx.(x(x)+1)) (λy.(y(y)+1))
这看起来很抽象,因为如果你尝试在任何具体值上扩展X,你会发现该过程永远不会结束。但是不要让那困扰你;尽管X
是F
的固定点,因为
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)
我希望熟悉的语法使其不那么混乱而不是更多:)