Статья Википедии о комбинаторе Y предоставляет следующую реализацию комбинатора Y на JavaScript:
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 в JavaScript должен подразумевать, что каждая функция JavaScript имеет фиксированную точку (поскольку для каждой функции g
, Y(g)
и g(Y(g))
должны быть равны)
Однако нетрудно найти функции без неподвижных точек, которые нарушают Y(g) = g(Y(g))
(см. здесь).Даже некоторые функционалы не имеют неподвижных точек (см. здесь).
Как доказательство того, что каждая функция имеет неподвижную точку, согласуется с приведенными контрпримерами? Разве JavaScript не нетипизированное лямбда-исчисление, в котором Доказательство того, что Y(g) = g(Y(g))
применимо?