Vコンビネータの導出

昨日はベッドの上で昼間わからなかった Vx = V の導出を考えていたらわかった
Ax = xとなるxはM(BAM)であることが割と簡単に証明できる。M(BAM) = (BAM)(BAM) = A(M(BAM))。Kx = xたるxはVであることは簡単に示せる。Kxy = x, Kxy = (Kx)y = xy. thus xy = x. で、あとはM = SIIとI = SKKまでは理解していたのでBをSから導出するだけ。


Sってとても便利で、いらない引数をくくりだすことができる。

1: xX = (I x)(KX x) = SI(KX)x
2: X(Yx) = (KX x)(Y x) = S(KX)Yx
3: XxY = (X x)(KY x) = SX(KY)x
4: Xx(Yx) = (X x)(Y x) = SXYx
Bxyz = x(yz)
= (Kx z)(y z)
= S(Kx)yz
= (KS x)(K x) yz
= S(KS)K xyz

よって

V = M(BKM)
= ( (S(KS)KK) (S(SKK)(SKK)) )( (S(KS)KK) (S(SKK)(SKK)) )
Vx = ( (S(KS)KK) (S(SKK)(SKK)) )( (S(KS)KK) (S(SKK)(SKK)) )x
= ( (KS)K (KK)(S(SKK)(SKK)) )...
= S (KK) (S(SKK)(SKK))  ( (S(KS)KK) (S(SKK)(SKK)) )x
= (KK)(...) ( (S(SKK)(SKK))  ( (S(KS)KK) (S(SKK)(SKK)) )) x
= K ( (S(SKK)(SKK))  ( (S(KS)KK) (S(SKK)(SKK)) )) x
= (S(SKK)(SKK))  ( (S(KS)KK) (S(SKK)(SKK)) ) # xが消えた!
= (SKK)( (S(KS)KK) (S(SKK)(SKK)) ) ((SKK)( (S(KS)KK) (S(SKK)(SKK)) ))
= K( (S(KS)KK) (S(SKK)(SKK)) ) (...) K( (S(KS)KK) (S(SKK)(SKK)) ) (...)
= ( (S(KS)KK) (S(SKK)(SKK)) )( (S(KS)KK) (S(SKK)(SKK)) ) # 元の形に戻った!

この感動を伝えきれていない自信がとてもある。