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 である
また、加算は以下のように定義できる。
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)
いかがだろうか.
では調子に乗って 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)
いかがだろうか.