さらに頑張ってみる

チャーチ数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のチャーチ数だなんてほざいていた部分を修正。