さらに頑張ってみる
チャーチ数3を考える。その前に、
X`YZ s`kXYZ
となる。なぜか?
X`YZ kXZ`YZ s`kXYZ
これで内側の関数の引数を外に出すことができる。
というわけでチャーチ数3。
X`X`XY X(kXY`XY) X(s`kXXY) X(s`kXXY) X(ksX`kXXY) X(s`kskXXY) X(s`kskX`iXY) X(s(s`ksk)iXY)
はいここまで。えっと、まぁ書いてから気付いたけど、s(s`ksk)iというのは2のチャーチ数ですね。そもそも`X`X`XYは`X(2のチャーチ数を適用した戻り値)であるからして、私のしていることはものすごい無駄なことであると。
まぁせっかくだから続きを。(s(s`ksk)i)を2と置き換えて、
X(s(s`ksk)iXY) X(2XY) kXY(2XY) s`kX(2X)Y s`kX(2X)Y ksX`kX(2X)Y s`kskX(2X)Y s(s`ksk)2XY
ここで2を元に戻して
s(s`ksk)(s(s`ksk)i)XY
iはチャーチ数の1。ということは、
s(s`ksk)
はチャーチ数に適用すると、1だけ大きいチャーチ数を返す関数だと。
次に足し算。長いのでs(s`ksk)をAとして、3 + 3はつまりA(A(A(3のチャーチ数)))とすればいいので、M + Nは
M`s(s`ksk)N
だと。
追記:`X`X`XYが2のチャーチ数だなんてほざいていた部分を修正。