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); }); })
);
}
JavaScript に Y コンビネータが存在することは、すべての JavaScript 関数が不動点を持つことを意味するはずです ( for every function g
, Y(g)
andg(Y(g))
は等しい必要があるため)。
ただし、違反する不動点のない関数を考え出すことは難しくありませんY(g) = g(Y(g))
(こちらを参照)。特定の汎関数でさえ不動点を持たない (こちらを参照)。
すべての関数が不動点を持つという証明は、与えられた反例とどのように調和しますか? Y(g) = g(Y(g))
JavaScript は、証明が適用される型指定されていないラムダ計算ではありませんか?