Wikipedia article on the Y combinator обеспечивают следующую реализацию JavaScript в Y Combinator:Y комбинатор: Некоторые функции не имеют неподвижные точки
function Y(f) {
return (
(function (x) {
return f(function (v) { return x(x)(v); }); })
(function (x) {
return f(function (v) { return x(x)(v); }); })
);
}
Существование Y Combinator в JavaScript должен подразумевать, что каждая функция JavaScript имеет неподвижную точку (поскольку для каждой функции g
, Y(g)
и g(Y(g))
должны быть равны).
Однако нетрудно придумать функции без фиксированных точек, которые нарушают Y(g) = g(Y(g))
(см. here). Даже некоторые функционалы не имеют фиксированных точек (см. here).
Как доказательство того, что каждая функция имеет фиксированную точку, согласуется с данными контр-примерами? Является ли JavaScript не нетипизированным лямбда-исчислением, в котором применяется доказательство того, что применяется Y(g) = g(Y(g))
?
Я бы поправлю ваш последний абзац. Просто потому, что | D^D | > | D | в теоретическом смысле не означает, что лямбда-исчисление не имеет моделей. См. Http://mathoverflow.net/questions/16752/scott-on-the-consistency-of-the-lambda-calculus –