<前回の記事>
(λx.x) 2
= (λx.x) 2
(λ .x) 2
^
= (λx.x) 2
(λ .x) 2
(λ .2)
^ ^
= (λx.x) 2
(λ .x) 2
(λ .2)
= 2
^^ ^ ^
「 I Combinator なんか計算しても おもんないぜ☆」
(λxy.x) 2 7
= (λxy.x) 2 7
(λ y.2) 7
^ ^ ^
= (λxy.x) 2 7
(λ y.2) 7
(λ .2)
^ ^
= (λxy.x) 2 7
(λ y.2) 7
(λ .2)
= 2
^^ ^ ^
(λxy.x) (λy.y+1) 5
「 y が 衝突(collision) しそうだから、α変換しましょう」
= (λxy.x) (λy.y+1) 5
(λxy.x) (λz.z+1) 5
^ ^
= (λxy. x ) (λy.y+1) 5
(λxy. x ) (λz.z+1) 5
(λ y.(λz.z+1)) 5
^ ^^^^^^^^ ^^^^^^^^
= (λxy. x ) (λy.y+1) 5
(λxy. x ) (λz.z+1) 5
(λ y.(λz.z+1)) 5
(λ .(λz.z+1))
^ ^
「 ↑もう1回 β簡約。yはどこにも使われていないから 5 と一緒に消えるだけね」
= (λxy . x ) (λy.y+1) 5
(λxy . x ) (λz.z+1) 5
(λ y .(λz.z+1)) 5
(λ .(λz.z+1))
= (λ z.z+1 )
^^^ ^
「 ↑実引数が空っぽの (λ .)
が1個浮いているから消しちゃいましょう」
「 これ以上 β簡約 できないから、 ベータ正規形(beta normal form) よ」
「 仮引数 z を消すには、実引数が 1個 足りなかったな☆
設問を作ったやつが あんぽんたん だったんだぜ☆」
「 K Combinator なんか計算しても おもんないぜ☆」
(λxyz.xz(yz)) (λx.x+1) (λy.y-1) 3 5 7
「 x と y が 衝突(collision) しまくりそうだから、α変換しましょう」
= (λxyz.xz(yz)) (λx.x+1) (λy.y-1) 3 5 7
= (λxyz.xz(yz)) (λv.v+1) (λw.w-1) 3 5 7
^ ^ ^ ^
「 片方の x を v に、 片方の y を w に α変換 して……」
= (λxyz. xz(yz)) (λx.x+1) (λy.y-1) 3 5 7
= (λxyz. xz(yz)) (λv.v+1) (λw.w-1) 3 5 7
= (λ yz.(λv.v+1)z(yz)) (λw.w-1) 3 5 7
^ ^^^^^^^^ ^^^^^^^^
= (λxyz. xz( yz)) (λx.x+1) (λy.y-1) 3 5 7
= (λxyz. xz( yz)) (λv.v+1) (λw.w-1) 3 5 7
= (λ yz.(λv.v+1)z( yz)) (λw.w-1) 3 5 7
= (λ z.(λv.v+1)z((λw.w-1)z)) 3 5 7
^ ^^^^^^^^ ^^^^^^^^ ^^^^^^^^
= (λxyz. xz( yz)) (λx.x+1) (λy.y-1) 3 5 7
= (λxyz. xz( yz)) (λv.v+1) (λw.w-1) 3 5 7
= (λ yz.(λv.v+1)z( yz)) (λw.w-1) 3 5 7
= (λ z.(λv.v+1)z((λw.w-1)z)) 3 5 7
(λ .(λv.v+1)3((λw.w-1)3)) 5 7
^ ^ ^ ^
= (λv.v+1)3((λw.w-1)3) 5 7
^^ ^ ^
「 ↑次に z が β簡約。
実引数が空っぽになったから ラムダ式 が1個消えるわよ」
= (λxyz. xz( yz)) (λx.x+1) (λy.y-1) 3 5 7
= (λxyz. xz( yz)) (λv.v+1) (λw.w-1) 3 5 7
= (λ yz.(λv.v+1)z( yz)) (λw.w-1) 3 5 7
= (λ z.(λv.v+1)z((λw.w-1)z)) 3 5 7
(λ .(λv.v+1)3((λw.w-1)3)) 5 7
= (λv.v+1)3((λw.w-1)3) 5 7
= (λ .3+1) ((λw.w-1)3) 5 7
^ ^ ^
= (λ . 4) ((λw.w-1)3) 5 7
= 4 ((λw.w-1)3) 5 7
「 ↑次に v を β簡約。
あらっ、ラムダ式が消えて 4 になったわよ? 左結合できないんじゃないの?」
(λxyz.xz(yz)) (λx.x+1) (λy.y-1) (λz.z*2) 5 7
「 じゃあ これでやり直しで☆ × は x と見間違えるので * とするぜ☆」
「 x と y と z が 衝突(collision) しまくりそうだから、α変換しましょう」
= (λxyz.xz(yz)) (λx.x+1) (λy.y-1) (λz.z*2) 5 7
= (λxyz.xz(yz)) (λu.u+1) (λv.v-1) (λw.w*2) 5 7
^ ^ ^ ^ ^ ^
「 片方の x を u に、 片方の y を v に、 片方の z を w に α変換 して……」
= (λxyz. xz(yz)) (λx.x+1) (λy.y-1) (λz.z*2) 5 7
= (λxyz. xz(yz)) (λu.u+1) (λv.v-1) (λw.w*2) 5 7
= (λ yz.(λu.u+1)z(yz)) (λv.v-1) (λw.w*2) 5 7
^ ^^^^^^^^ ^^^^^^^^
= (λxyz. xz( yz)) (λx.x+1) (λy.y-1) (λz.z*2) 5 7
= (λxyz. xz( yz)) (λu.u+1) (λv.v-1) (λw.w*2) 5 7
= (λ yz.(λu.u+1)z( yz)) (λv.v-1) (λw.w*2) 5 7
= (λ z.(λu.u+1)z((λv.v-1)z)) (λw.w*2) 5 7
^ ^^^^^^^^ ^^^^^^^^
= (λxyz. x z( y z)) (λx.x+1) (λy.y-1) (λz.z*2) 5 7
= (λxyz. x z( y z)) (λu.u+1) (λv.v-1) (λw.w*2) 5 7
= (λ yz.(λu.u+1) z( y z)) (λv.v-1) (λw.w*2) 5 7
= (λ z.(λu.u+1) z((λv.v-1) z)) (λw.w*2) 5 7
(λ .(λu.u+1)(λw.w*2)((λv.v-1)(λw.w*2))) 5 7
^ ^^^^^^^^ ^^^^^^^^ ^^^^^^^^
= (λu.u+1)(λw.w*2)((λv.v-1)(λw.w*2)) 5 7
^^ ^ ^
「 ↑次に z が β簡約。
実引数が無くなったから ラムダ式が1個消えるわよ」
= (λxyz. x z( y z)) (λx.x+1) (λy.y-1) (λz.z*2) 5 7
= (λxyz. x z( y z)) (λu.u+1) (λv.v-1) (λw.w*2) 5 7
= (λ yz.(λu. u +1) z( y z)) (λv.v-1) (λw.w*2) 5 7
= (λ z.(λu. u +1) z((λv.v-1) z)) (λw.w*2) 5 7
(λ .(λu. u +1)(λw.w*2)((λv.v-1)(λw.w*2))) 5 7
= (λu. u +1)(λw.w*2)((λv.v-1)(λw.w*2)) 5 7
(λ .(λw.w*2)+1) ((λv.v-1)(λw.w*2)) 5 7
^ ^^^^^^^^ ^^^^^^^^
= (λw.w*2)+1 ((λv.v-1)(λw.w*2)) 5 7
^^ ^ ^
「 ↑左結合だから とりあえず 次に u を β簡約 しましょう。
実引数が無くなったから ラムダ式が1個消えるわよ」
= (λxyz. x z( y z)) (λx.x+1) (λy.y-1) (λz.z*2) 5 7
= (λxyz. x z( y z)) (λu.u+1) (λv.v-1) (λw.w*2) 5 7
= (λ yz.(λu. u +1) z( y z)) (λv.v-1) (λw.w*2) 5 7
= (λ z.(λu. u +1) z((λv.v-1) z)) (λw.w*2) 5 7
(λ .(λu. u +1)(λw.w*2)((λv.v-1)(λw.w*2))) 5 7
= (λu. u +1)(λw.w*2)((λv.v-1)(λw.w*2)) 5 7
(λ .(λw.w*2)+1) ((λv.v-1)(λw.w*2)) 5 7
(λw.w*2)+1 ((λv.v-1)(λw.w*2)) 5 7
= (λw.w*2 +1) ((λv.v-1)(λw.w*2)) 5 7
^ ^
「 アブストラクション が丸かっこの中に入るようにしましょう」
「 あらっ?! w が collision しそうな気がするけど。 どこで分裂したのかしら?」
= (λxyz. x z( y z)) (λx.x+1) (λy.y-1) (λz.z*2) 5 7
= (λxyz. x z( y z)) (λu.u+1) (λv.v-1) (λw.w*2) 5 7
= (λ yz.(λu. u +1) z( y z)) (λv.v-1) (λw.w*2) 5 7
= (λ z.(λu. u +1) z((λv.v-1) z)) (λw.w*2) 5 7
(λ .(λu. u +1)(λw.w*2)((λv.v-1)(λw.w*2))) 5 7
= (λu. u +1)(λw.w*2)((λv.v-1)(λw.w*2)) 5 7
(λ .(λw.w*2)+1) ((λv.v-1)(λw.w*2)) 5 7
(λw.w*2)+1 ((λv.v-1)(λw.w*2)) 5 7
= (λw.w*2 +1) ((λv.v-1)(λw.w*2)) 5 7
= (λw.w*2 +1) ((λv.v-1)(λt.t*2)) 5 7
^ ^
= (λxyz. x z( y z)) (λx.x+1) (λy.y-1) (λz.z*2) 5 7
= (λxyz. x z( y z)) (λu.u+1) (λv.v-1) (λw.w*2) 5 7
= (λ yz.(λu. u +1) z( y z)) (λv.v-1) (λw.w*2) 5 7
= (λ z.(λu. u +1) z((λv.v-1) z)) (λw.w*2) 5 7
(λ .(λu. u +1)(λw.w*2)((λv.v-1)(λw.w*2))) 5 7
= (λu. u +1)(λw.w*2)((λv.v-1)(λw.w*2)) 5 7
(λ .(λw. w*2)+1) ((λv.v-1)(λw.w*2)) 5 7
(λw. w*2)+1 ((λv.v-1)(λw.w*2)) 5 7
= (λw. w*2 +1) ((λv.v-1)(λw.w*2)) 5 7
= (λw. w*2 +1) ((λv.v-1)(λt.t*2)) 5 7
(λ .((λv.v-1)(λt.t*2))*2 +1) 5 7
^ ^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^
= (λxyz. x z( y z)) (λx.x+1) (λy.y-1) (λz.z*2) 5 7
= (λxyz. x z( y z)) (λu.u+1) (λv.v-1) (λw.w*2) 5 7
= (λ yz.(λu. u +1) z( y z)) (λv.v-1) (λw.w*2) 5 7
= (λ z.(λu. u +1) z((λv.v-1) z)) (λw.w*2) 5 7
(λ .(λu. u +1)(λw.w*2)((λv.v-1)(λw.w*2))) 5 7
= (λu. u +1)(λw.w*2)((λv.v-1)(λw.w*2)) 5 7
(λ .(λw. w*2)+1) ((λv.v-1)(λw.w*2)) 5 7
(λw. w*2)+1 ((λv.v-1)(λw.w*2)) 5 7
= (λw. w*2 +1) ((λv.v-1)(λw.w*2)) 5 7
= (λw. w*2 +1) ((λv.v-1)(λt.t*2)) 5 7
(λ .((λv.v-1)(λt.t*2))*2 +1) 5 7
((λv.v-1)(λt.t*2))*2 +1 5 7
^^ ^ ^
? (((λv.v-1)(λt.t*2))*2 +1) 5 7
^ ^
「 ↑ 仮引数の無くなった (λ.)
を消そうにも、+1 が飛び出て うまく収まんないわねぇ」
「 丸かっこの内側のラムダ式の アブストラクション と うまく くっつかないかだぜ☆?」
「 手順前後だったのでは☆ どんな手順に入れ替えてもいいのが チャーチ・ロッサー性 なのに……☆」
= (λxyz. x z( y z)) (λx.x+1) (λy.y-1) (λz.z*2) 5 7
= (λxyz. x z( y z)) (λu.u+1) (λv.v-1) (λw.w*2) 5 7
= (λ yz.(λu. u +1) z( y z)) (λv.v-1) (λw.w*2) 5 7
= (λ z.(λu. u +1) z((λv.v-1) z)) (λw.w*2) 5 7
(λ .(λu. u +1)(λw.w*2)((λv.v-1)(λw.w*2))) 5 7
= (λu. u +1)(λw.w*2)((λv.v-1)(λw.w*2)) 5 7
(λ .(λw. w*2)+1) ((λv.v-1)(λw.w*2)) 5 7
(λw. w*2)+1 ((λv.v-1)(λw.w*2)) 5 7
= (λw. w*2 +1) ((λv.v-1)(λw.w*2)) 5 7
= (λw. w*2 +1) ((λv.v-1)(λt.t*2)) 5 7
(λ .((λv. v-1)(λt.t*2))*2 +1) 5 7
((λv. v-1)(λt.t*2))*2 +1 5 7
? (((λv. v-1)(λt.t*2))*2 +1) 5 7
(((λ .(λt. t*2)-1) )*2 +1) 5 7
^ ^^^^^^^^^^ ^^^^^^^^
= (λt.((t*2 -1) *2 +1)) 5 7
^^^^ ^ ^^ ^ ^ ^
「 ↑ v を β簡約 しましょう。
かっこをうまく動かせないわねぇ」
「 かなり うさんくさく かっこ を移動したりしていたが、まあいいだろう見逃そう☆」
= (λxyz. x z( y z)) (λx.x+1) (λy.y-1) (λz.z*2) 5 7
= (λxyz. x z( y z)) (λu.u+1) (λv.v-1) (λw.w*2) 5 7
= (λ yz.(λu. u +1) z( y z)) (λv.v-1) (λw.w*2) 5 7
= (λ z.(λu. u +1) z((λv.v-1) z)) (λw.w*2) 5 7
(λ .(λu. u +1)(λw.w*2)((λv.v-1)(λw.w*2))) 5 7
= (λu. u +1)(λw.w*2)((λv.v-1)(λw.w*2)) 5 7
(λ .(λw. w*2)+1) ((λv.v-1)(λw.w*2)) 5 7
(λw. w*2)+1 ((λv.v-1)(λw.w*2)) 5 7
= (λw. w*2 +1) ((λv.v-1)(λw.w*2)) 5 7
= (λw. w*2 +1) ((λv.v-1)(λt.t*2)) 5 7
(λ .((λv. v-1)(λt.t*2))*2 +1) 5 7
((λv. v-1)(λt.t*2))*2 +1 5 7
? (((λv. v-1)(λt.t*2))*2 +1) 5 7
(((λ .(λt. t*2)-1) )*2 +1) 5 7
= (λt.((t*2 -1) *2 +1)) 5 7
(λ .((5*2 -1) *2 +1)) 7
^ ^ ^
(λ .(( 9) *2 +1)) 7
(λ . 19 ) 7
? 19 7
(λxyz.xz(yz))
「 一番左に 仮引数を3つもった ラムダ式があるということは……☆」
(λxyz.xz(yz)) u v w
(λxyz.xz(yz)) u v w 7
「 S Combinator なんか計算しても おもんないぜ☆」
「 さっきの式の答えは ほんとうに 19 なのか検算しておくかだぜ☆」
(λxyz.xz(yz)) (λx.x+1) (λy.y-1) (λz.z*2) 5
= (λxyz.xz(yz)) (λx. x+1) (λy. y-1) (λz.z*2) 5
? (λxy .x (y )) (λ .(λz.z*2)+1) (λ .(λz.z*2)-1) 5
^ ^ ^ ^ ^^^^^^^^ ^ ^^^^^^^^ ^^^^^^^^
(λxy .x (y )) (λ z.z*2 +1) (λ z.z*2 -1) 5
^^^ ^ ^^^ ^
= (λxyz.xz(yz)) (λx. x+1) (λy. y-1) (λz.z*2) 5
? (λxy .x (y )) (λ .(λz.z *2)+1) (λ .(λz.z*2)-1) 5
(λxy .x (y )) (λ z.z *2 +1) (λ z.z*2 -1) 5
? (λx .x ) (λ .(λz.z*2 -1)*2 +1) 5
^ ^^^^ ^ ^^^^^^^^^^^ ^^^^^^^^^^^^^^^
「 またまた 自分流でやられると、目が追い付いていかないぜ☆」
= (λxyz.xz(yz)) (λx. x+1) (λy. y-1) (λz.z*2) 5
? (λxy .x (y )) (λ .(λ z. z *2)+1) (λ .(λz.z*2)-1) 5
(λxy .x (y )) (λ z. z *2 +1) (λ z.z*2 -1) 5
? (λx .x ) (λ .(λz. z*2 -1)*2 +1) 5
? (λ .(λz. z*2 -1)*2 +1) 5
(λ z.(z*2 -1)*2 +1) 5
^^^^^^^^^^^^^ ^^^ ^
「 ↑計算順序を無視して (λx.x) を消してしまおうぜ☆ 丸かっこも整理☆」
= (λxyz.xz(yz)) (λx. x+1) (λy. y-1) (λz.z*2) 5
? (λxy .x (y )) (λ .(λ z. z *2)+1) (λ .(λz.z*2)-1) 5
(λxy .x (y )) (λ z. z *2 +1) (λ z.z*2 -1) 5
? (λx .x ) (λ .(λz. z*2 -1)*2 +1) 5
? (λ .(λz. z*2 -1)*2 +1) 5
(λ z.(z*2 -1)*2 +1) 5
? (λ .(5*2 -1)*2 +1)
^ ^ ^
(λ .( 9)*2 +1)
(λ . 19)
19
「 ↑zに5を入れてみようぜ☆
19 になってそうだけどな☆」
「 しかし 計算順序を ぐちゃぐちゃ にして出したものは 答えと言えるのか……☆?」
「 計算順序を ぐちゃぐちゃ にしても 結果が合流するのが 強味なんだけどな☆」
<次の記事へ>
Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。
また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!
こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?
コメント