コンビネータ論理
確かに、(C I x y)は(y x)に簡約される。
その動機は、BとCは限定されたSであるということである。 Sは値を取り両方のアプリカンドを置き換えて適用を行う一方。Cはアプリカンドのみ、Bは引数のみを置き換える。 そのコンビネータのための近代的な名前は、ハスケル・カリーの1930年の博士論文による(B,C,K,Wシステムを参照)。モイセイ・シェインフィンケリ(ロシア語版、英語版)のもとの論文では、今S, K, I, B,Cと呼んでいるものはそれぞれS, C, I, Z, Tと呼ばれていた。 新しい変換の規則によるコンビネータのサイズの短縮はBとCを用いなくても、この論文の節3.2のように達成できる。
CLKとCLI算法
この記事で述べているCLK算法とCLI算法は区別されなければならない。これらの区別は、λKとλI算法に対応する。λK算法と違い、λI算法は抽象を以下のように制限する。
λx.E where x has at least one free occurrence in E.
λx.Eにおいて、xはEの中で少なくとも一つは自由に出現している。
結果として、KはλIにもCLIにも与えられない。CLIの定数は、I, B, C,Sであり、CLIのすべての項が合成される。λKからCLKへの変換と似たようなルールに合わせ、すべてのλIの項は、等しいCLIに変換される。Barendregt (1984)の第9章を参照されたい。
SとKに加え、モイセイ・シェインフィンケリ(ロシア語版、英語版)の論文ではBとCと呼ばれる、以下のような簡約をするコンビネータを含めた。
彼は、どのようにしてSとKだけを用いてこれらを表現できるかを説明した。 これらのコンビネータは述語論理やラムダ計算をコンビネータ式にする際に非常に有用である。これらはハスケル・カリーと、だいぶ後に計算機における用法と関連付けたデビッド・ターナーによって使われた。これらを使って、以下のように変換のルールを拡張できる。
T[x] => x
T[(E1 E2)] => (T[E1] T[E2])
T[λx.E] => (K T[E]) (if x is not free in E)
T[λx.x] => I
T[λx.λy.E] => T[λx.T[λy.E]] (if x is free in E)
T[λx.(E1 E2)] => (S T[λx.E1] T[λx.E2]) (if x is free in both E1 and E2)
T[λx.(E1 E2)] => (C T[λx.E1] T[E2]) (if x is free in E1 but not E2)
T[λx.(E1 E2)] => (B T[E1] T[λx.E2]) (if x is free in E2 but not E1)
BとCコンビネータを使うと、λx.λy.(y x)の変換はこのようになる。