Il Wikipedia article on the Y combinator fornisce la seguente implementazione JavaScript del combinatore Y:Y Combinator: Alcune funzioni non hanno punti fissi
function Y(f) {
return (
(function (x) {
return f(function (v) { return x(x)(v); }); })
(function (x) {
return f(function (v) { return x(x)(v); }); })
);
}
L'esistenza di un combinatore Y in JavaScript dovrebbe implicare che ogni funzione JavaScript ha un punto fisso (poiché per ogni funzione g
, Y(g)
e g(Y(g))
dovrebbe essere uguale).
Tuttavia, non è difficile trovare funzioni senza punti fissi che violano lo Y(g) = g(Y(g))
(vedere here). Anche alcuni funzionali non hanno punti fissi (vedi here).
In che modo la dimostrazione che ogni funzione ha un punto fisso si concilia con i contro-esempi indicati? JavaScript non è un calcolo lambda non tipizzato in cui è valida la prova che si applica Y(g) = g(Y(g))
?
Vorrei modificare il tuo ultimo paragrafo. Solo perché | D^D | > | D | in un senso set-teorico non significa che il calcolo lambda non ha modelli. Vedi http://mathoverflow.net/questions/16752/scott-on-the-consistency-of-the-lambda-calculus –