Chandler@Berlin -56ページ目

Chandler@Berlin

ベルリン在住

English version

# しばらく留守にしていたので投稿は空いてしまったが,前回の続きです.

(λf x. x) f x



f x. x) f x ... f は束縛されていないので消える

x. x) x ... x を入れると x がでてくる.

より

x

であるから,

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



(λ f x. f (x))

である.() は優先順位を示すがこの場合にはつけてもあまり意味はないので,怠け者の数学者は

(λ f x. f x)

と書くかと思えば,甘い.まだ省略できる.

λ f x. f x

さて,これはチャーチ数で見ると,1 である.つまり SUCC 0 は 1 である.

ついに計算ができた! 次は SUCC 1 を計算してみよう.

English version

では,SUCC を具体的に計算してみよう.まず私は数を適用するというので,0 とか 1 を適用しようとして困った.まったくの素人なのでそういうことをする.ここでの数というのは Church 数であるので,0 は (λf x. x) である.

SUCC 0 := (λn f x. f (n f x)) (λf x. x)
(λ f x. f ((λf x. x) f x))

ところでこの中の下線部分,

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

だが,最初に何が f に入っても消えてしまう.1変数で

(λf. 3)

というような場合,

f(x) := 3

と同じなので,x が何になってもこの函数は 3 を返す.こういう x はλに束縛されていない自由な変数と呼ぶ.黄金の心号のマービンみたいなものである.何があっても別に関係がなかったり,ザップホッドには常に忘れれられてしまう.しかし,それならばいらないかというとマービンが出てこないヒッチハイクガイドのように,まったく面白くなくなってしまうので必要なのである.自動販売機gensym3141 ではクレジットカードを入れない限り,どんな入力も無効なのである.クレジットカードが入力されない限り,全ての変数は束縛されないのだ.そういう機能がλ函数にはある.

(λf x. x) f x は最初に f に f が入るがそれは束縛されていない.(このλ式の '.' のあとには x しかない)ので,消えてしまう.ここでは 2 つf があるのでわかりにくいという場合は,(λg x. x) f x でも同じである.gに f が入っても g は束縛されていないので f は消えてしまう.

すると,

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

となるが,x に x を代入すると,これは x になってしまう.どの x がどの xなのかわからない人もいるかもしれないので,λ式の変数の名前を変えてみよう

(λy. y) x

と書いても同じである.それは

f(x) := x
f(y) := y

が本質的には同じ函数であることと同じである.マービンは日本語ではマービンであり,英語では Marvin であるが,何語で呼んでもマービンはマービンである.ことわっておくが,変数の名前を変えても良いというのは (λx.x) を (λx.y)にしても良いということではない.何が何に対応しているかはきちんとしておかねばならない.そこまで規則をやぶってしまってはボゴン人だっておとなしくなってしまいかねない.

English version

函数を左結合で評価する,というような定義はスポーツのルールのようなものである.バスケットボールのルールではボールをドリブルしなくてはいけないが,なぜそうなのかというのはルールだからである.野球でボールをドリブルしても意味はなく,サッカーで手を使ったら反則である.同じボールを使ったゲームなのに何故かと聞かれてもルールであるから仕方がない.数学にはそういう一面がある.「何故左結合なのか? 」「定義だから.(ルールだから)」

この数学のルールを何か不変で唯一な真実というふうにどこかで教えられてしまうと不幸が初まる.1+1=2 というものを不変で唯一な真実だと教えられると後で数学を理解できない.たとえば,1+1=1 という数学で多くの計算機は動いている.多くの計算機は二進法であり,0 と 1 しかないので,一桁の計算では 2 というものがないからである.もちろん,1+1=2 は間違っているわけではないし,非常に有用であるが,不変で唯一な真実ではない.定義された後にそれは達成される.

ただし,スポーツにしろ数学にしろ関心は似た所にある.「そういうルール/定義があったら面白いゲームになるか?」である.実はそのルールや定義そのものは何かというのはあんまり興味がない.むしろ,そのルールの下でのゲームが面白いのだ.

足し算というルールを作ったら,何か面白いものがそのルールから出てくるだろうか? 足し算とかけ算だけで作った世界ではどんなものだろうか? というようなことを考える.蛇足であるが足し算と定数倍のかけ算一回だけの数学は線形代数という.

人について考えると「その人が何をしたか」の方が,その人そのもの(体重,身長,外見,名前など)よりも興味深い場合が多い.数学でもルールそのものが面白いこともあるかもしれないが,「そのルールで何ができるか」が通常面白い.時々私も「なんでそんなルールがあるんだ.」ということがわからずに,数学が嫌いになることがある.しかし,それは多分ちょっとずれた考えなんだろうと思う.でも,これを教えてくれた先生はいなかったなあ.なんでだろうね,マービン?

マービン「そんなあたりまえのことを今更教えるわけがないでしょう.」

わかっている人にはあたりまえなので気がつかないのかもしれない.しかしあたりまえということには用心しないといけないと思う.

SUCC 函数をもう一度見てみよう.

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

この書き方は,

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

の省略形である.``.'' から左は函数とわかっているので,3つのうち2つのλを省略しても意味が失なわわれることはない.もう少し詳しく言うと,カリー化に関係する.これは Haskell Curry に因んだ名前であるが,どうもカリーが最初に考えたのではないらしい(Moses Schoenfinkel と Gottlob Frege).カリー化とは,ある函数に対して,最初の変数を固定すると,残りの引数を使う函数を得る方法である.これによって複数の引数を持つ函数を単一の引数を持つ函数の組合せで書くことができる.つまり,単一の引数を持つ函数だけ考えれば残りはその組合せであるので,複数引数の函数は考えなくて良い.なんでこんなことを考えるのかというのは,複数引数の函数の方が単一引数函数よりも簡単であるからである.同じ効果が得られるのであれば,簡単なもののほうが理解しやすい.数学者の怠け癖はここにも見られる.