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
となった.