El Wikipedia article on the Y combinator proporciona la siguiente implementación de JavaScript del combinador Y:Y Combinator: Algunas funciones no tienen puntos fijos
function Y(f) {
return (
(function (x) {
return f(function (v) { return x(x)(v); }); })
(function (x) {
return f(function (v) { return x(x)(v); }); })
);
}
La existencia de un combinador Y en JavaScript debe entender que cada función JavaScript tiene un punto fijo (dado que para cada función g
, Y(g)
y g(Y(g))
deben ser iguales).
Sin embargo, no es difícil encontrar funciones sin puntos fijos que violen Y(g) = g(Y(g))
(ver here). Incluso ciertos funcionales no tienen puntos fijos (vea here).
¿Cómo se compara la evidencia de que cada función tiene un punto fijo con los contraejemplos dados? ¿JavaScript no es un cálculo lambda sin tipo en el que se aplica la prueba de que Y(g) = g(Y(g))
?
Yo modificaría su último párrafo. Solo porque | D^D | > | D | en un sentido teórico de conjunto no significa que el cálculo lambda no tenga modelos. Ver http://mathoverflow.net/questions/16752/scott-on-the-consistency-of-the-lambda-calculus –