English version
λ計算でもう一つ重要なのは函数は引数を一つしかとらないことである.引数というのは函数の入力のことである.二つ以上の入力がある場合の話はすぐ後にしよう.
引数の具体的な値が決まったら,つまり入力が決まったら,それを右に書いて函数の「適用」ということをする.入力が決まるというのは,自動販売機で言えば,お金を入れた状態である.自動販売機はお金が入ってくるのを待っており,ひとたび入力が決まれば,出力を計算する.函数も多くの場合,それ自体では計算はせず,何か入力があって計算を開始する.
「適用」というとおおげさな気もするが,とりあえずは函数に値を代入すると考えておいてもいいだろう.あとで値でないものを代入する場合があったり,値をどうこうするというよりも,函数そのものがどういう役割なのかということを考える方が面白くなってくるので,おいおい「函数を適用する」という言い方の方がしっくりくるようになるだろう.
具体的な函数の適用の例を見てみよう.
f(x) := 2x
λ x. 2 x
これらは同じ函数である.最初のものは通常の書き方,二番目のものはλ式である.これに 3 を代入する,あるいは 3 に適用する場合を書いてみると次のようになる.
f(3) := 2 x
= 2 * 3
= 6
(λ x. 2 x) 3
= (λ 3. 2 3)
= 2 * 3
= 6
同じ結果になった.両方とも入力を二倍する函数なので3を入れれば 6 になる.
λ計算では函数はいつも一つの値しかとらない.では f(x,y) := x-y のようなものはどうするかと言うと,一つの値をとって一つの値をとる函数を返すようにする.
λ y. (λ x. x - y)
ここで λ x. x - y は,x を引数にとり,x - y を出力にする函数である.これを 3 に適用すると,
(λ x. x - y) 3
= 3 - y
が返ってくる.それでこれを y の函数とすると,
λ y. 3 - y
である.ここで y = 1 にすれば,
(λ y. 3 - y) 1 = 3 - 1 = 2
となって,3 - 2 が計算できた.一回の適用で一つ引数が決まるので,これを繰り返していけば引数がいくつあっても問題はない.
値でないものが返ってくるのは多少気持が悪いかもしれないが,これは強力な道具になる.
シリウスサイバネティクス社の自動販売機には,自動販売機を売る自動販売機がある.シリウスサイバネティクス社は「なんでも売る自動販売機gensym3141! これ一つであなたもコンツェルンの経営者」とか宣伝しているが,マービンに言わせれば「そんなものが不可能なことは地球人にだってわかる.ああ気が滅入る」ということになるらしい.しかし,こういうふうに何かをする機能のものを取り出す機能というものをλ計算では普通に考えることにする.それも入力をとって出力を返すものだから,やっぱり函数であって,λなのである.
English version
λ計算の続きである.何らか入力に対してその二倍を出力するという函数をλ式で書いてみる.
λ x . 2 x
前回のブログの図1 を見るとこの函数は入力が x で出力は 2x であるので,これは入力を二倍する函数である.
しかし本当はこれは正確ではない.ここにはごまかしがある.函数とは何かを考えるのに,既にかけ算という函数は何なのか知っている.何を考える時にはもっと基本となる仮定から始めなくてはいけない.それにここでは数まで何かわかっていることになっているが,λ計算ではこのような数は何かについては規定していないので使ってはいけないのである.機械に計算をさせたいというのがλ計算を学ぶ私の動機の一つであった.人間には易しいことであっても,機械には難しいことは多数ある.たとえばかけ算などはまだ定義されていない.
しかし,我々には既にチャーチ数がある.後でチャーチ数を使う方法に戻ることにして,まずは函数についてもう少し話をすすめてみよう.
この函数(λx.2x)は,私が習った方法で書けば,f(x) := 2x であるが, g(x):= 2x でも良いわけで,ここでの f と g とかいう名前は役所の順番待ちの番号札の番号みたいなものである.(ここで := というふうに '=' にコロン':' がついているのは定義するという意味である)名前は通常非常に重要なものであるけれども,それが本質かというとそうではないこともある.λ式の書き方では,λを函数と考えれば, λx. 2 x は ``x を引数にとる函数で,それは 2 x'' というふうに読んでも良いだろう.こうすると f とか g という名前を書く必要がない.
函数をλと呼ぶのには多分名前が本質ではないことも関係している.函数の正体が重要なので,別に a でも b でもλでも良いことを示したいのだ.函数とは何かということを真面目に考える人達がいて,その人達は「名前は何でもいいのだ,本体がいったい何なのかをもっと研究したい.」と思ったのだろうと思う.
λ計算の続きである.何らか入力に対してその二倍を出力するという函数をλ式で書いてみる.
λ x . 2 x
前回のブログの図1 を見るとこの函数は入力が x で出力は 2x であるので,これは入力を二倍する函数である.
しかし本当はこれは正確ではない.ここにはごまかしがある.函数とは何かを考えるのに,既にかけ算という函数は何なのか知っている.何を考える時にはもっと基本となる仮定から始めなくてはいけない.それにここでは数まで何かわかっていることになっているが,λ計算ではこのような数は何かについては規定していないので使ってはいけないのである.機械に計算をさせたいというのがλ計算を学ぶ私の動機の一つであった.人間には易しいことであっても,機械には難しいことは多数ある.たとえばかけ算などはまだ定義されていない.
しかし,我々には既にチャーチ数がある.後でチャーチ数を使う方法に戻ることにして,まずは函数についてもう少し話をすすめてみよう.
この函数(λx.2x)は,私が習った方法で書けば,f(x) := 2x であるが, g(x):= 2x でも良いわけで,ここでの f と g とかいう名前は役所の順番待ちの番号札の番号みたいなものである.(ここで := というふうに '=' にコロン':' がついているのは定義するという意味である)名前は通常非常に重要なものであるけれども,それが本質かというとそうではないこともある.λ式の書き方では,λを函数と考えれば, λx. 2 x は ``x を引数にとる函数で,それは 2 x'' というふうに読んでも良いだろう.こうすると f とか g という名前を書く必要がない.
函数をλと呼ぶのには多分名前が本質ではないことも関係している.函数の正体が重要なので,別に a でも b でもλでも良いことを示したいのだ.函数とは何かということを真面目に考える人達がいて,その人達は「名前は何でもいいのだ,本体がいったい何なのかをもっと研究したい.」と思ったのだろうと思う.
English version
もう一度この入力と出力に使われている○について話をしよう.○というのは「何か」を示している.
マービン: また「何か」...疲れた.
「何か」って何だ? と言う意見はもっともである.「何か」とはたとえば「お金」を示しているとしよう.「お金」を入れたら「(同じ)お金」が出てくるというのが,「λ○.○」である.増えたりも減ったりもしない.入れた分だけ出てくるのである.だから,100アルタイルドルならば100アルタイルドル出てくるわけである.200アルタイルドルならば200アルタイルドル.(何らかの)アルタイルドルならば(正確に同じ何らかの)アルタイルドルが出てくる.「何か」というのはこういう意味での「何か」である.具体例を言ってしまっては,表現が制限されるので,「何か」というのだ.これは抽象化された考えである.学校ではそういうものを総称して X とする.というふうに習っているので,X と言った方がいいかもしれない.X を入れると X 出てくる.
それならば,「λ□.□」も同じ意味である.□を入れたら□が出てくる.同様に「λx.x」「λy.y」もまったく同じ函数を示している.ただ,λ計算の人達は慣習的に「λx.x」と書くことが多い.「何か」を入れたら「何か」が出てくるというのはそういう意味である.ここで「何か」って何だ? と聞かれても「だからそれは『何か』です」と数学者は答えるだろう.これはあなたをからかっているのではない.図にλ式の構造を示しておこう.
自動販売機のたとえに戻ろう.100アルタイルドルを入れた時だけ,100アルタイルドル分のシリウス行きの切符を売る自動販売機は簡単である.これは行き先も値段も固定されている自動販売機である.このような機械で古いものとしてはアレキサンドラのヘロンの記述がある.
しかし,もし150アルタイルドルを入れたら,150アルタイルドル分のオリオン行きの切符を売ることもできる自動販売機だともっと便利である.そして,クレジットカードを入れたら,宇宙の果てのレストラン行き予約のチケットが出たり,あるいは Kreuzberg のコンサートまで手配できればもっと便利である.つまり「何か」の範囲が広い方が便利だということは賛成してもらえるだろうか.ここでは最初入力の「何か」は100アルタイルドルだった,それがどんな値段でも良いアルタイルドルになり,クレジットカードになった.出力の「何か」はシリウス行きのチケットだけだったが,オリオン行き,レストラン,コンサートと広がった.そういう「何か」を本当に「何か」全てとして考えようというのが,函数という考えなのである.
「何かって何だ?」「何かです.」の意味がわかってもらえたらこの節の目的は達成された.最後にマービンのコメントを聞こう.
M「私を設計した技術者は,一般両替機の開発をしていました.普通の両替機と違うのは入力に物を入れるとそれと同等の価値の何かを出すところです.あなたが3ヶ月かかって書いたソフトウェアを入れたら冷や飯とタクアンが出てきたやつです.」
I:「あの機械(函数)は壊れていたと聞いているが」
M:「確かに,私はタクアンが付くのはおかしいと思っていました.」
I:「...」
もう一度この入力と出力に使われている○について話をしよう.○というのは「何か」を示している.
マービン: また「何か」...疲れた.
「何か」って何だ? と言う意見はもっともである.「何か」とはたとえば「お金」を示しているとしよう.「お金」を入れたら「(同じ)お金」が出てくるというのが,「λ○.○」である.増えたりも減ったりもしない.入れた分だけ出てくるのである.だから,100アルタイルドルならば100アルタイルドル出てくるわけである.200アルタイルドルならば200アルタイルドル.(何らかの)アルタイルドルならば(正確に同じ何らかの)アルタイルドルが出てくる.「何か」というのはこういう意味での「何か」である.具体例を言ってしまっては,表現が制限されるので,「何か」というのだ.これは抽象化された考えである.学校ではそういうものを総称して X とする.というふうに習っているので,X と言った方がいいかもしれない.X を入れると X 出てくる.
それならば,「λ□.□」も同じ意味である.□を入れたら□が出てくる.同様に「λx.x」「λy.y」もまったく同じ函数を示している.ただ,λ計算の人達は慣習的に「λx.x」と書くことが多い.「何か」を入れたら「何か」が出てくるというのはそういう意味である.ここで「何か」って何だ? と聞かれても「だからそれは『何か』です」と数学者は答えるだろう.これはあなたをからかっているのではない.図にλ式の構造を示しておこう.
自動販売機のたとえに戻ろう.100アルタイルドルを入れた時だけ,100アルタイルドル分のシリウス行きの切符を売る自動販売機は簡単である.これは行き先も値段も固定されている自動販売機である.このような機械で古いものとしてはアレキサンドラのヘロンの記述がある.
しかし,もし150アルタイルドルを入れたら,150アルタイルドル分のオリオン行きの切符を売ることもできる自動販売機だともっと便利である.そして,クレジットカードを入れたら,宇宙の果てのレストラン行き予約のチケットが出たり,あるいは Kreuzberg のコンサートまで手配できればもっと便利である.つまり「何か」の範囲が広い方が便利だということは賛成してもらえるだろうか.ここでは最初入力の「何か」は100アルタイルドルだった,それがどんな値段でも良いアルタイルドルになり,クレジットカードになった.出力の「何か」はシリウス行きのチケットだけだったが,オリオン行き,レストラン,コンサートと広がった.そういう「何か」を本当に「何か」全てとして考えようというのが,函数という考えなのである.
「何かって何だ?」「何かです.」の意味がわかってもらえたらこの節の目的は達成された.最後にマービンのコメントを聞こう.
M「私を設計した技術者は,一般両替機の開発をしていました.普通の両替機と違うのは入力に物を入れるとそれと同等の価値の何かを出すところです.あなたが3ヶ月かかって書いたソフトウェアを入れたら冷や飯とタクアンが出てきたやつです.」
I:「あの機械(函数)は壊れていたと聞いているが」
M:「確かに,私はタクアンが付くのはおかしいと思っていました.」
I:「...」