Kコンビネータは定数関数であることを思い出してください。常に最初の引数を返します。
Kxy = x for all y
「モッキンバードをモックする」という本の中で、著者は話す鳥を含む魔法の森の例を示しています。鳥には行動があります:
鳥AとBがあれば、BからAの名前を呼び出すと、Aはあなたに鳥の名前を呼び出すことで応答します。この鳥はABによって指定されます。
森がA、B、Cの3羽の鳥で構成されているとします。少なくとも1羽の鳥がKコンビネータのように振る舞うことは可能ですか?
以下は、魔法の森の鳥の可能な行動のセットを示す表です。最初の列には、森の中の各鳥の名前があります。一番上の行には、各鳥に呼び出される可能性のある名前があります。体は名前に対する鳥の反応です。たとえば、鳥AにAの名前を呼び出すと、鳥AはCで応答します(行2、列2を参照)。簡潔に言えば、AA =Cです。鳥AにBの名前を呼び出すと、鳥AはBで応答します(行2、列3を参照)。簡潔に言えば、AB = Bです。ACの空のスロットにはどのような値を入れる必要がありますか?
| A B C
------------------
A | C B
B | B B B
C | A A A
鳥AをKコンビネータのように動作させることができるかどうかを見てみましょう。上記の値のセットは有望に見えます:
すべてのyについてAA=CおよびCy=A。つまり、すべてのyに対して(AA)y=Aです。
すべてのyについてAB=BおよびBy=B。つまり、すべてのyに対して(AB)y=Bです。
空のスロット(AC)にはどのような値を配置する必要がありますか?すべての場合を考慮してください:
AC = Aの場合、Ayの値はすべてのyに対してCでなければなりませんが、これは明らかに誤りです。したがって、Aを空のスロットの正しい値にすることはできません。
AC = Bの場合、Byの値はすべてのyに対してCでなければならず、これは明らかに誤りです。したがって、Bを空のスロットの正しい値にすることはできません。
AC = Cの場合、Cyの値はすべてのyに対してCでなければなりませんが、これは明らかに誤りです。したがって、Cを空のスロットの正しい値にすることはできません。
したがって、すべてのyについて、条件(AC)y=Cを満たすために空のスロットに値を配置することはできません。
私の知る限り、鳥をKコンビネータのように振る舞わせることは不可能です。あなたが私を間違っていると証明してくれることを願っています。