MULT | Chandler@Berlin

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

となった.