4
固定小数点コンビネーター(Yコンビネーター)の明確で直感的な派生?
(型なし)ラムダ計算()の固定小数点コンビネータFIX(別名Yコンビネータ)は次のように定義されます:λλ\lambda FIX≜λf.(λx.f (λy.x x y)) (λx.f (λy.x x y))≜λf.(λx.f (λy.x x y)) (λx.f (λy.x x y))\triangleq \lambda f.(\lambda x. f~(\lambda y. x~x~y))~(\lambda x. f~(\lambda y. x~x~y)) 私はその目的を理解しており、アプリケーションの実行を完全にトレースできます。最初の原理からFIXを導き出す方法を理解したいです。 ここに私がそれを自分で導き出そうとしたときに得られる限りです: FIXは関数です:FIX ≜λ…≜λ…\triangleq \lambda_\ldots FIXは、別の関数fffを使用して再帰的にします。FIX ≜λf.…≜λf.…\triangleq \lambda f._\ldots 関数fの最初の引数は、関数fffの「名前」であり、再帰的アプリケーションが意図されている場合に使用されます。したがって、fの最初の引数の出現はすべてfff関数で置き換えられる必要があり、この関数はfの残りの引数を期待する必要がありますfff(fffが1つの引数を取ると仮定しましょう):FIX ≜λf.…f (λy.…y)≜λf.…f (λy.…y)\triangleq \lambda f._\ldots f~(\lambda y. _\ldots y) これは、推論の「一歩を踏み出す」方法がわからない場所です。小さな楕円は、FIXがどこに欠けているかを示します(ただし、それを「実際の」FIXと比較することによってしか知ることができません)。 私は既にタイプとプログラミング言語を読んでいますが、それは直接派生しようとせず、代わりに派生物についてリトルスキーマーを読者に紹介しています。私もそれを読みましたが、その「派生」はあまり役に立ちませんでした。さらに、直接的な派生ではなく、非常に具体的な例の使用と、\ lambdaに適切な再帰関数を記述するためのアドホックな試みλλ\lambdaです。