0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

コンビネータ論理:Exercise 2.34(a)ペア生成コンビネータ もう一つの解

Last updated at Posted at 2025-05-18

コンビネータ論理の問題。

Lambda-Calculus and Combinators: An Introduction
Hindley & Seldin より

以前のブログで一つの解答を示したが、実はもう一つ解答があるので、それを紹介する。

Exercise 2.34(a)

ペア生成コンビネータ$D$と次の条件を満たす二つの射影$D_1, D_2$を作成せよ。
$$D_1(Dxy)\ \triangleright_\omega\ x\quad(1)$$

$$D_2(Dxy)\ \triangleright_\omega\ y\quad(2)$$

もう一つの解答

$$D\equiv [x,y,z].z(Ky)x$$とする。$\overline{n}$をチャーチ数とすると、
$$D_1\equiv\lambda x.x\overline{0},\quad
D_2\equiv\lambda x.x\overline{1}$$とすると(1)と(2)が成り立つ。
実際にそうなるかを検証する。

Dについて

$D\equiv[x,y,z].z(Ky)x\equiv[x].([y].([z].z(Ky)x)))$なので

zでの抽象化

$[z].z(Ky)x\equiv S([z].z(Ky))([z].x)$
$\equiv S(S([z].z)([z].Ky))(Kx)$
$\equiv S(SI(K(Ky)))(Kx)$
従って
$$[z].z(Ky)x\equiv S(SI(K(Ky)))(Kx)$$

上式の検証:
$S(SI(K(Ky)))(Kx) z\equiv (SI(K(Ky)))z((Kx)z)$
$Iz((K(Ky))z) x\equiv z(Ky) x$ Q.E.D$\quad(3)$

更にyでの抽象化

$[y].([z].z(Ky)x)\equiv [y].S(SI(K(Ky)))(Kx)$
$\equiv S([y].S(SI(K(Ky))))([y].Kx)$
ここで、
$[y].S(SI(K(Ky)))
\equiv S([y].S)([y].SI(K(Ky)))$
$\equiv S(KS)(S([y].SI)([y].K(Ky)))$
$\equiv S(KS)(S(K(SI))(S([y].K)([y].Ky)))$
$\equiv S(KS)(S(K(SI))(S(KK)K))$
それを元の式に代入して
$$[y].([z].z(Ky)x)$$

$$\equiv S(S(KS)(S(K(SI))(S(KK)K)))(K(Kx))$$となる。

上式を検証:
$S (S(KS) (S(K(SI)) (S(KK)K))) (K(Kx)) y$
$\equiv S(KS) (S(K(SI))(S(KK)K)) y ((K(Kx)) y)$
$\equiv (KS) y (S (K(SI)) (S(KK)K) y) (Kx)$
$\equiv S ((K(SI)) y (S(KK)K y)) (Kx)$
$\equiv S (SI ((KK)y (Ky))) (Kx)$
$\equiv S (SI (K (Ky))) (Kx) $Q.E.D.$\quad(4)$

更にxでの抽象化

$[x].([y].([z].z(Ky)x)))$
$\equiv[x].S (S(KS)(S(K(SI))(S(KK)K))) (K(Kx))$
$\equiv S([x].S(S(KS)(S(K(SI))(S(KK)K)))) ([x].K(Kx))$
この時$[x].K(Kx)\equiv S(KK)Kなので$
$\equiv S (K(S(S(KS)(S(K(SI))(S(KK)K))))) (S(KK)K)$

従って、
$$D\equiv
[x].([y].([z].z(Ky)x)))$$

$$\equiv S (K(S(S(KS)(S(K(SI))(S(KK)K))))) (S(KK)K)$$

上式を検証:
$S (K(S(S(KS)(S(K(SI))(S(KK)K))))) (S(KK)K) x$
$\equiv (K(S(KS)(S(K(SI))(S(KK)K))))) x ((S(KK)K) x)$
$\equiv S(S(KS)(S(K(SI))(S(KK)K))) ((KK)x (Kx))$
$\equiv S(S(KS)(S(K(SI))(S(KK)K))) (K (Kx))\quad$Q.E.D.$\quad(5)$

Dxyについて

$Dxy$
$\equiv S (K(S(S(KS)(S(K(SI))(S(KK)K))))) (S(KK)K) x y$
$\equiv S(S(KS)(S(K(SI))(S(KK)K))) (K (Kx)) y\quad$ by$(5)$
$\equiv S (SI (K (Ky)))\quad$by$(4)$

D1とD2について

$$D_1\equiv\lambda x.x\overline{0},\quad
D_2\equiv\lambda x.x\overline{1}$$とはどんな式になるだろうか。

チャーチ数

チャーチ数についてはこちらを参照。
チャーチ数$\overline{0},\overline{1}$は以下の通りになる。
$\overline{0}\equiv\lambda ab.b\quad\equiv\lambda fx.x$とも書かれる。
$\overline{1}\equiv\lambda ab.ab\quad\equiv\lambda fx.f(x)$とも書かれる。
どちらも同じ意味である。ちなみに$\overline{2}$は、
$\overline{2}\equiv\lambda ab.aab\quad\equiv\lambda fx.f(f(x))$
$\overline{0},\overline{1}$のコンビネータ式は、
$\overline{0}\equiv\lambda ab.b\equiv[a,b].b\equiv[a].([b].b)\equiv[a].I\equiv KI$
$\overline{1}\equiv\lambda ab.ab\equiv[a,b].ab\equiv[a].([b].ab)\equiv[a].a\equiv I$

D1(Dxy),D2(Dxy)を求める

$D_1(Dxy)$は
$D_1(Dxy)\equiv(\lambda x.x\overline{0})(Dxy)
\equiv(Dxy)\overline{0}$
$\equiv S (SI(K(Ky))) (Kx) \overline{0}$
$\equiv SI(K(Ky))\overline{0} ((Kx) \overline{0})$
$\equiv I\overline{0} (K(Ky)\overline{0}) (x)\equiv \overline{0} (Ky) x$
$\equiv(\lambda ab.b)(Ky)x\equiv x$

よって$$D_1(Dxy)\ \triangleright_\omega\ x$$

一方、$D_2(Dxy)$は、
$D_2(Dxy)\equiv(\lambda x.x\overline{1})(Dxy)
\equiv(Dxy)\overline{1}$
$\equiv S (SI(K(Ky))) (Kx) \overline{1}$
$\equiv SI(K(Ky))\overline{0} ((Kx) \overline{1})$
$\equiv I\overline{1} (K(Ky)\overline{1}) (x)\equiv \overline{1} (Ky) x$
$\equiv(\lambda ab.ab)(Ky)x\equiv (Ky)x\equiv x$

よって$$D_2(Dxy)\ \triangleright_\omega\ y$$

よって条件を満たすことが分かった。

$n\geq1$の一般のチャーチ数$\overline{n}\equiv\lambda ab.a^n b$についても
$D_{n+1}(Dxy)\equiv(\lambda x.x\overline{n})(Dxy)
\equiv(Dxy)\overline{n}$
$\equiv S (SI(K(Ky))) (Kx) \overline{n}$
$\equiv\overline{n} (Ky) x$
$\equiv(\lambda ab.a^n b)(Ky)x\equiv (Ky)^n x$
$\equiv(Ky)((Ky)((Ky)(\cdots((Ky)((Ky)x))\cdots)))$
$\equiv(Ky)((Ky)((Ky)(\cdots(y)\cdots)))\equiv(Ky)y\equiv y$
つまり、
$D_0(Dxy)\ \triangleright_\omega\ x$ if $n=0$
$D_{n+1}(Dxy)\ \triangleright_\omega\ y$ if $n\geq 1$

もう一つ別の解が見つかった。チャーチ数というのは不思議なふるまいをするんだねえ。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?