English version
函数も結局名前はどうでも良いのであって,そのものが何かが重要である.そういうわけで,函数自身は,函数であることさえわかれば良い.λは函数ということを示すだけである.ただ,名前は重要視されていないので,それが何かということを直接書くのが重要だ.名前をつけたければあとで適当に名前との対応をつければ良い.(これを bind するとか束縛するとか言う.)
以前,函数の説明で自動販売機のアナロジを使ったのは,函数は何かを入れると何かが出てくるものであるからだ.自動販売機はお金を入れると商品が出てくる.最も簡単な函数は,入れたものがそのまま出てくるものだろう.そんな自動販売機ならば私にも作れそうだ.そういう函数は「何か」を入れたら「何かそのもの」が出てくるものだ.○を入れたら○が出てくるわけである.そういう函数を「λ○.○」と書こう.ここで最初の○は入力を,後の○は出力を示すとしよう.
なんでこう書くのかというのをちょっと考えてみよう.いきなりこう書こうと言われても,数学者じゃなければ「何で?」と思うのは普通である.数学者はこういうのはゲームのルールと同じであることを知っているので,「これがルールだ」と言うだけで納得してくれる.とはいっても一応数学者なりに便利なルールを作っているのが普通であるのでちょっと説明してみよう.
まず,最初の「λ」はこれが函数であることを示す記号である.函数だとわかればなんでもいいので,「これから私は函数を書くぞ」と書いても良い.その場合には,「これから私は函数を書くぞ ○.○」となる.「.」より前の「○」は入力を示し,最後の○は出力を示す.これも定義だから他の方法でも良い.例えば逆に書いても良い.あるいは入力と出力を明確にするために,「入力は」と「出力は」という言葉を補っても良い.その場合,「これから私は函数を書くぞ 入力は○.出力は○」となる.
「これから私は函数を書くぞ」と毎回書くのは面倒なので.それをλと書くと,「λ入力は○.出力は○」となる.ここで面倒だからλと書くというのは冗談ではなく,極めて真面目である.「入力は」「出力は」というのも順番を決めておけば必要ない.結局ルールさえ決めておけば「λ○.○」で十分である.ただ何でλなのかは正直言って私も知らない.でもそれは何故函数は函数と書くのですかという質問と同じである.あるいは 1 を 1 と書くのは何故かとか,滝はなぜ滝というのかというのを考えるのは面白いだろうが,それでは話が進まないのでここで打ち切ろう.ところで,マーク・トゥウェインさんは滝についてはアイデアがあるようだ.
もし,○を入れたら△が出てくるのであれば,「λ○.△」であるのだが,これでは○と△の関係がわからない.「λ○.○」の関係はわかり易い.なぜならば同じということがわかるからだ.自動販売機のアナロジを思い出して欲しい.「λ○.○」では,10ユーロ入れたら,10ユーロそのままが出力される.5ユーロを入れたら5ユーロがそのまま出力される.
「λ○.△」の場合,□を入れたら何が出てくるのだろうか.この場合,λ計算ではやっぱり△が出てくるのである.つまり「λ○.△」と「λ□.△」は同じ意味であることに注意が必要である.もっと言えば,「λ○.△」は何を入れようが△を出す自動販売機である.「λ○.○」とは,同じものが出てくるという意味であって,実際に○を入れるわけではないのだ.うーむ難しいなあ.変数を御存知の場合には,○は変数であると言えば良いのだが,それでは不親切であろうから次にもう少し説明してみる.
English version
数学では函数の名前として f とか g などを使っていた.その理由は函数が2つ以上あったときにどちらかを区別することができるからである.また英語という言語では函数を function と言うので函数の名前として f を使うようだ.しかし考えてみるとよほど特殊な函数でない限り,どんな函数でもf:= ...と書いている.f(x):= x だったり,f(x):= x^{2} だったり,f(x):= sin(x) だったりする.
函数が違っても常に f:= ... と書くのであれば,別に f にする必要はない.重要なのは ...の部分であって,f は函数についた荷札のようなものである.荷物を受けとることができれば,荷札は別になんでもかまわない.
政府というものを持っている星にはどこにでも役所があるし,貨幣というものを持っている所では銀行というものがある.そういう所では法律によって人はある程度以上待たなくてはならないことに決まっている.人を待たせずに仕事をしては逮捕されてしまうのだ.あなたの星でもそうかもしれない.多くの星では順番待ちの際に番号を配布するが,函数の名前はそういう番号札程度の意味しかない.
私は名前で呼ばれたいが,順番が早くまわってくるのであれば,「次,何番の方どうそ」でもかまわない.「何番」が何を指しているかということが本質的である.たとえば 10番が私を指しているのであれば,私は 10 番でいいわけだ.「10番さん」どうぞ,でいっこうにかまわない.別に私は 10 番が好きなわけではないし,番号札が10番でなければ受けとらないというわけでもない.だから,「番号」と「私」の間の対応が私には重要であって,番号は 10 番とか 42 番でも 156 番でもかまわない.
名前は二の次であるということを繰り返してきたが,名前と実体間の対応は重要である.名前は対応のためにあると言っても良いだろう.あるものを一まとめにして名前をつけてそれを呼ぶというのは偉大な抽象化の一歩である.
しかしあえて名前を避けることによって本体を明らかにしようというのがλの目的である.無機質で名前のように思えない「λ」を「函数」の意味で使うのはそういうわけである.一方で理解のためには名前ほど重要なものはないのだが,こんなことを言うと..
マービン「矛盾だ.名前はどうでも良いのに重要とは.ああ,気が滅入る.」
対応こそが重要であり,それは名前で決まるので「人間には」名前が重要になるのだが,名前そのものは 10 番とかのような「人間にわかりにくい」ものでもかまわない.わかりにくいだろうか.
コンピュータは,英語ではコンピュータ,日本語では計算機,ドイツ語では
Rechner という名前である.しかし,実際のハードウェアをどう呼ぶかとそのハードウェアの名前という違いがある.1 が英語では one, ドイツ語では Eins,日本語では ichi と呼ばれているが,しかし,それは 1 なのである.「薔薇はどの名で呼ばれようとも甘く香る.」のように,1 を呼ぶ呼びかたは幾通りもあるが,1 という概念そのものの方が本質である.しかし,人間は名前を通じてしか理解しないのでその意味では名前が重要なのである.これを哲学的問題と思う人もいるようだが,scheme のような計算機言語ではlambda とその名前を変数に bindするという機械的な操作を行う.これは機械に可能な手順であって,人生とは何かというような問題のようには難しくないと思う.もちろん良い名前を考えるというのは十分哲学的な難しさがあるとは思う.(ここでは哲学= 難しいもの,というステレオタイプを用いている)
数学では函数の名前として f とか g などを使っていた.その理由は函数が2つ以上あったときにどちらかを区別することができるからである.また英語という言語では函数を function と言うので函数の名前として f を使うようだ.しかし考えてみるとよほど特殊な函数でない限り,どんな函数でもf:= ...と書いている.f(x):= x だったり,f(x):= x^{2} だったり,f(x):= sin(x) だったりする.
函数が違っても常に f:= ... と書くのであれば,別に f にする必要はない.重要なのは ...の部分であって,f は函数についた荷札のようなものである.荷物を受けとることができれば,荷札は別になんでもかまわない.
政府というものを持っている星にはどこにでも役所があるし,貨幣というものを持っている所では銀行というものがある.そういう所では法律によって人はある程度以上待たなくてはならないことに決まっている.人を待たせずに仕事をしては逮捕されてしまうのだ.あなたの星でもそうかもしれない.多くの星では順番待ちの際に番号を配布するが,函数の名前はそういう番号札程度の意味しかない.
私は名前で呼ばれたいが,順番が早くまわってくるのであれば,「次,何番の方どうそ」でもかまわない.「何番」が何を指しているかということが本質的である.たとえば 10番が私を指しているのであれば,私は 10 番でいいわけだ.「10番さん」どうぞ,でいっこうにかまわない.別に私は 10 番が好きなわけではないし,番号札が10番でなければ受けとらないというわけでもない.だから,「番号」と「私」の間の対応が私には重要であって,番号は 10 番とか 42 番でも 156 番でもかまわない.
名前は二の次であるということを繰り返してきたが,名前と実体間の対応は重要である.名前は対応のためにあると言っても良いだろう.あるものを一まとめにして名前をつけてそれを呼ぶというのは偉大な抽象化の一歩である.
しかしあえて名前を避けることによって本体を明らかにしようというのがλの目的である.無機質で名前のように思えない「λ」を「函数」の意味で使うのはそういうわけである.一方で理解のためには名前ほど重要なものはないのだが,こんなことを言うと..
マービン「矛盾だ.名前はどうでも良いのに重要とは.ああ,気が滅入る.」
対応こそが重要であり,それは名前で決まるので「人間には」名前が重要になるのだが,名前そのものは 10 番とかのような「人間にわかりにくい」ものでもかまわない.わかりにくいだろうか.
コンピュータは,英語ではコンピュータ,日本語では計算機,ドイツ語では
Rechner という名前である.しかし,実際のハードウェアをどう呼ぶかとそのハードウェアの名前という違いがある.1 が英語では one, ドイツ語では Eins,日本語では ichi と呼ばれているが,しかし,それは 1 なのである.「薔薇はどの名で呼ばれようとも甘く香る.」のように,1 を呼ぶ呼びかたは幾通りもあるが,1 という概念そのものの方が本質である.しかし,人間は名前を通じてしか理解しないのでその意味では名前が重要なのである.これを哲学的問題と思う人もいるようだが,scheme のような計算機言語ではlambda とその名前を変数に bindするという機械的な操作を行う.これは機械に可能な手順であって,人生とは何かというような問題のようには難しくないと思う.もちろん良い名前を考えるというのは十分哲学的な難しさがあるとは思う.(ここでは哲学= 難しいもの,というステレオタイプを用いている)
English version
λ計算で最初に私がとまどったのは函数がλしかないことであった.まあ,本当は函数をλと呼ぶためにλしかないのだ.λとは函数のことであるから,函数を「函数」と呼ぶのは当然なのだが,慣れないとどうも納得できないものだった.それまでの函数の概念と多少違う函数なので,そのまま函数と呼べば混乱を招くかもしれず,区別のために何か他の名前が必要だったのだろう.
とにかく函数というのはλである.何故記号「λ」が函数を表現するものとして選ばれたかは諸説あるが,ここでは立ち入らない.(logic で使われたから L のギリシャ文字λを使ったとか話はあるが,著者が知らないことなのでこう書いておくことにする.)
次に謎だと思ったのは calculus である.数学だとこういうものは Algebra ではないのかなと思っていた.記号論理学(symbolic logic)ではこういうものもcalculus と言うようだ.しかし,私は所詮素人なのでよくわかっていない.
λ計算で最初に私がとまどったのは函数がλしかないことであった.まあ,本当は函数をλと呼ぶためにλしかないのだ.λとは函数のことであるから,函数を「函数」と呼ぶのは当然なのだが,慣れないとどうも納得できないものだった.それまでの函数の概念と多少違う函数なので,そのまま函数と呼べば混乱を招くかもしれず,区別のために何か他の名前が必要だったのだろう.
とにかく函数というのはλである.何故記号「λ」が函数を表現するものとして選ばれたかは諸説あるが,ここでは立ち入らない.(logic で使われたから L のギリシャ文字λを使ったとか話はあるが,著者が知らないことなのでこう書いておくことにする.)
次に謎だと思ったのは calculus である.数学だとこういうものは Algebra ではないのかなと思っていた.記号論理学(symbolic logic)ではこういうものもcalculus と言うようだ.しかし,私は所詮素人なのでよくわかっていない.