私はこれをどこでも読んでいませんが、これはが導出された可能性があると信じている方法です:Y
おそらく、階乗などの再帰関数持ちましょう。非公式には、を擬似ラムダ項として定義します。ここで、は独自の定義で発生します。fff
f=…f…f…
最初に、再帰呼び出しをパラメーターとしてファクタリングできることを理解します。
f=(λr.(…r…r…))Mf
引数としてそれ自体に渡す方法しかなかった場合、を定義できます。もちろん、手元にがないため、これは不可能です。手元にあるのはです。はを定義するために必要なものがすべて含まれているため、代わりにを引数として渡し、後で内部からを再構築することができます。最初の試みは次のようになります。ffMMfMff
f=(λr.(…r…r…))M(λr.(…r…r…))M
ただし、これは完全に正しいわけではありません。以前、は内の代わりになりました。しかし、今では代わりにを渡します。を使用するすべての場所を何らかの方法で修正して、からを再構築する必要があります。実際、これはまったく難しくありませんであることがわかったので、を使用するすべての場所で、単に置き換えます。frMMrfMf=MMr(rr)
f=(λr.(…(rr)…(rr)…))M′(λr.(…(rr)…(rr)…))M′
この解決策は優れていますが、内部でを変更する必要がありました。これはあまり便利ではありません。に自身に適用される引数を送信する別のを導入することにより、を変更することなくこれをよりエレガントに行うことができます:をとして表現するMMλMM′λx.M(xx)
f=(λx.(λr.(…r…r…))M(xx))(λx.(λr.(…r…r…))M(xx))
このように、がに置換されると、がに置換されます。これは、等しい定義によります。これにより、有効なラムダ項として表される非再帰的な定義が得られます!MxMMrff
への移行が簡単になりました。代わりに任意のラムダ項を使用して、この手順を実行できます。したがって、を因数して定義することができますYMM
Y=λm.(λx.m(xx))(λx.m(xx))
実際、は定義した減少します。YMf
注:文献で定義されているとおり、を導出しました。あなたが説明してきたコンビネータはの変形である用のコールバイ値と呼ばれることもあり言語、。このウィキペディアの記事を参照してください。YYZ