Chandler@Berlin -55ページ目

Chandler@Berlin

ベルリン在住

English version

乗算は以下の様に定義される.

MULT := λ m n f . m (n f)

2 := λ f x. f (f x)
3 := λ f x. f (f (f x))

より,

MULT 2 3 := (λ m n f . m (n f)) (λ f x. f (f x)) (λ f x. f (f (f x)))

= (λ n f . (λ f x. f (f x)) (n f)) (λ f x. f (f (f x)))

f の数だけ (n f) がコピーされる


= (λ n f . (λ x. (n f) ((n f) x))) (λ f x. f (f (f x)))


最初の数の分(= 2)コピーされた (n f) の n に次の数(= 3)が入る.

= (λ f . (λ x. ((λ f x. f (f (f x))) f) (((λ f x. f (f (f x))) f) x)))

= (λ f . (λ x. (λ x. f (f (f x))) (((λ x. f (f (f x)))) x)))

= (λ f . (λ x. f (f (f (((λ x. f (f (f x)))) x) x))))

= (λ f . (λ x. f (f (f (f (f (f x))) x))))

= (λ f . f (f (f (f (f (f x))))))

= 6


乗算の例はもう一つある.


MULT := λ m n. m (PLUS n) 0

ここでの 0 はチャーチ数の 0 であるが,これは初心者には不親切な気がする.私は数字の 0 と思ってしまった.

MULT 2 3 := (λ m n. m (PLUS n) (λ f x. x)) (λ f x. f (f x)) (λ f x. f (f (f x)))

= (λ n. (λ f x. f (f x)) (PLUS n) (λ f x. x)) (λ f x. f (f (f x)))

ここでも似たパターンである.(PLUS n) が最初の数分コピーされる.

= (λ n. (λ x. (PLUS n) ((PLUS n) x)) (λ f x. x)) (λ f x. f (f (f x)))

= (λ n. (PLUS n) ((PLUS n) (λ f x. x))) (λ f x. f (f (f x)))

= (PLUS (λ f x. f (f (f x)))) ((PLUS (λ f x. f (f (f x)))) (λ f x. x))

下線部分,PLUS 3 0 は (= 3 + 0) 3 であるから

= (PLUS (λ f x. f (f (f x)))) (λ f x. f (f (f x)))

これは 3 + 3 である.したがって,

= 6

となった.

English version

また、加算は以下のように定義できる。

PLUS := λ m n f x. m f (n f x)

1 + 2 を計算してみよう。

1 と 2 はそれぞれ

1 := λ f x. f x
2 := λ f x. f (f x)

であった.

m n f x. m f (n f x)) (λ f x. f x)(λ f x. f (f x))

= (λ n f x. (λ f x. f x) f (n f x)) (λ f x. f (f x))

= (λ n f x. (λ x. f x) (n f x)) (λ f x. f (f x))

= (λ n f x. f (n f x)) (λ f x. f (f x))

= (λ f x. f ((λ f x. f (f x)) f x))

= (λ f x. f ((λ x. f (f x)) x))

= (λ f x. f (f (f x)))

= λ f x. f (f (f x))

= 3

したがって、1 + 2 = PLUS 1 2 = 3 である.魔法のように思うかもしれないが、原理は Pop1 のところで説明したものと同じである。ある意味、f の数が数を示すので,二つの数を継げることで加算をするのだ。

つまり、1 = f で 2 = ff ならば、1 + 2 = f + ff = fff である.他の例を挙げると,3 + 4 = fff + ffff = fffffff = 7 である

English version

では調子に乗って SUCC 1 を計算してみよう.

SUCC 1
= (λ n f x. f (n f x))(λ f x. f x)

= (λ f x. f ((λ f x. f x) f x))

= (λ f x. f ((λ x. f x) x))

= (λ f x. f (f x))

= λ f x. f (f x)

= 2

下線部分が置き替わっていくところである。

SUCC 1 は 2 である.

((λ f x. f x) f x))

がわかりにくい場合にはまた変数名を変えておこう.

((λ f x. f x) f x)) は ((λ f x. f x) f x)) と同じである。

((λ g h. g h) f x)) ... f を g に代入
((λ h. f h) x)) ... h を x に代入
(f x)

いかがだろうか.