Chandler@Berlin -62ページ目

Chandler@Berlin

ベルリン在住

English version

前回は Pop1 が実行できる命令を示した.Pop1 のプログラムは実は固定されていて,変更することができない.サイバネティクス社はプログラムを最重要機密として,社内の人間でも自由に見ることはできない.実はプログラムを開発しているプログラマーも開発しているプログラムを見ることができない.しかし,プログラムを実行させてみると Pop1 がどの命令を実行しているのか教えてくれるので,それを書いてみたのが図 a である.ここで (a), (b), (c) は前回のblogの図を参照のこと.Pop1 には実は命令は3つしかないことに気がついただろうか.

マービン「こんな計算機に3つも命令があるとは無駄なことを.」もちろんいかなる計算機も一つの命令があれば,現存するいかなる計算機ともチューリング等価であることは知られているが,人間には理解というものが必要ということをマービンは忘れている.(いくつかの種類はあるが,私の好きな例は,Computer Architecture: a Quantitative Approach という本にある例である.)


1 (a) 入力コピー
2 (b) 頭尾消去
3 (a) 入力コピー
4 (b) 頭尾消去
5 (c) 頭尾追加
図 a Pop1 プログラム

プログラムを書いたことがない方はこれがプログラム? と思うかもしれないが,これがそうである.結婚式のプログラムでもオリンピックのプログラムでもテレビのプログラムでもある種の小さな手続きの集りであるように,Pop1 プログラムもこのようにできている.

実行の手順を図 b に示す.ここではAnimation が表示されるはずだが,もし上手くいかない場合のために図 (1) から 図 (9) を示す.これは図 (b) と同じである.



Chandler@Berlin-Pop1 (animation)

図b Pop1 procedure execution (Click on the image to see the animation gif)



Chandler@Berlin-Pop1 (1)
図1 initial state

Chandler@Berlin-Pop1 (2)
図2 1. copy the input


Chandler@Berlin-Pop1 (3)

図3 2. delete head and tail


Chandler@Berlin-Pop1 (4)

図4 2. delete head and tail result


Chandler@Berlin-Pop1 (5)

図5 3. copy input


Chandler@Berlin-Pop1 (6)

図6 4. delete head and tail


Chandler@Berlin-Pop1 (7)

図7 4. delete head and tail result


Chandler@Berlin-Pop1 (8)

図8 5. add head and tail


Chandler@Berlin-Pop1 (9)

図9 5. add head and tail result, done.


さて,このプログラムはいったい何をするのか? 別に「人間にとって」意味などない手続きでも良かったのであるが,ここではある計算を考えた.Pop は2つの入力 A, B をとり,一つの出力 C を返す.ここで A, B, C は変数である.もしかしたら変数って何? と思う方もいるかもしれないので,これは覚えていたら後で説明してみよう.

Pop1(A, B) -> C

ここで A を 1, B を 2 とすると,

Pop1(1, 2) -> 3

となる.これは数字 1, 2 をとり,3 を返している.実は,次のような関係がある.

Pop1(0, 0) -> 0
Pop1(0, 1) -> 1
Pop1(0, 2) -> 2

Pop1(1, 0) -> 1
Pop1(1, 1) -> 2
Pop1(1, 2) -> 3

Pop1(2, 0) -> 2
Pop1(2, 1) -> 3
Pop1(2, 2) -> 4

Pop1 の正体がわかっただろうか? これは加算 (Plus operation) である.ついでに何故 Pop という名前なのかもわかっただろう.もちろん名前は人間のためであって,Lambda1 でも Machine1 でも Hokuspokus1 でもかまわない.これは個人的な趣味である.(佐藤・桜井の本に習った)

見慣れた記法に書き直してみよう.

Pop1(0, 0) -> 0 : 0 + 0 = 0
Pop1(0, 1) -> 1 : 0 + 1 = 1
Pop1(0, 2) -> 2 : 0 + 2 = 2

Pop1(1, 0) -> 1 : 1 + 0 = 1
Pop1(1, 1) -> 2 : 1 + 1 = 2
Pop1(1, 2) -> 3 : 1 + 2 = 3

Pop1(2, 0) -> 2 : 2 + 0 = 2
Pop1(2, 1) -> 3 : 2 + 1 = 3
Pop1(2, 2) -> 4 : 2 + 2 = 4

ついに計算機ができた.計算機とは計算をする機械のことである.昔はコンピュータという職業があり,多くは女性だったそうである.この計算機は入力を間違えると怒るほど賢いくせに,数がは何かということは人間のようにはわかっていない.単に教えた手順を実行するだけである.しかし,結果として計算しているように見える.この「見える」というのが重要である.現在の計算機も人間のように数を理解しているわけではない.ある手順を機械的に実行すると,それが計算したように見えるだけである.

見掛けと内容,名前と意味はそれぞれ異なるものである.しかし,formarization というのは見掛けが同じならば内容も同じとする考えである.浅い考えと言うなかれ.完全なコピーであれば,それは同じものと考えることができるのである.例えば,ソフトウェアはコピーであるがその機能はまったく同じである.これは工業的には重要なことだ.もちろん,人間の感情とかいうものまで完全にコピーするのは気持が悪いが,私は二台のコンピュータや,映画の DVDdisk には個性は求めない.それらを違う店で買っても同じものが入手できることを期待する.違っていたら逆に嫌である.

一方で友人から手紙をもらう時には直筆のものの方が嬉しかったりする.数学の中に永遠に不変の真実を求める一方で限りある命を愛しく思うことは一見矛盾しているように見えるかもしれない.宇宙を5回も見てきたマービンは多分違った意見を持っていることだろう.

English version

前回,次の数を生み出す計算機を考えてみた.ここで示された手順は「数を一つ増やす」という手順であるが,手順に意味をつけているのは人間であって.機械は意味を理解することなしに何かを出力することができる.「意味」とは,「理解」とは何かということを考えるのはここでは難しすぎるし,意味のあるような複雑な機構も単純な機構の組合せによって作成可能であるという仮説もある(参照 Marvin Minsky,心の社会 ,おすすめ)が,SUCC1 ほど単純な機械には知能はないとしてもさしつかえないだろう.(ところで,Marvin 先生とロボットの Marvin に関係があるのかどうかはわからない.)これから,意味があるような行動をとれる機械であれば意味が理解されていると考える考え方もある.もちろん通常は人間に意味のあるものの方が望まれるのであるが,機械にはそんなことは関係がない.手順を実行することが計算になったのである.計算とは何かを理解することは計算すること自体には必要がないのである.

まあこれが発達した機械の問題であることはよく SF に書かれる通りである.機械は単に命令を実行するだけであり,何かを理解しているわけではないので命令がなくなるまで手順を実行することになる.モラルがない人間であれば殺人機械を作ることもあるだろう(Cordwainer Smith の The Instrumentality of Mankind(人類補完機構)から Terminator まで).どういう機械を作るかの決定にはモラルが必要である.Philip K. Dick の Variant 2 などは私の好きな例であるが,モラルの話はここで論じるには大きすぎるテーマなので,λ計算の話に戻ろう.

次の機械は POP1 (P-operation 1)である(図1).POP1 は3つの命令を実行することができる.Chandler@Berlin
図(1) POP1


(a) 入力コピー: 入力を出力テーブルにコピーする (図(a))
(b) 頭尾消去: コピーされた数字の頭(Head)と尾(Tail)を取り除く (図(b))
(c) 頭尾追加: 記号全体に頭(Head)と尾(Tail)を加える (図(c))
Chandler@Berlin

Chandler@Berlin

Chandler@Berlin

これらはチャーチ数が入力であれば常に実行できる.チャーチ数でない場合,例えば,頭も尾もない場合に命令(b)の頭尾消去を実行するとエラーになるとしよう.エラーの場合にはPop1は怒って記号を投げつけてくるので,プログラムを実行する前にはヘルメットの着用することがサイバネティクス社のマニュアルには書かれている.

次回はこの命令を使って Pop1 のプログラムを書いてみよう.
English version

しばらく前,友人が Berlin を訪ねてきた時のことです.λ計算に関連した話の最中に計算ということとその意味の話になりました.λ計算では,人間の考える「意味」というものを考えることなしに,計算というものを手順のみで定義するという目的がありました.とはいえ,何を計算しているのかという意味は日常生活では,大きな関心事です.興味深いことに,私の場合,意味を考えないということを深く考えることで初めて計算の意味についてよりよく考えるようになった気がします.なくなってはじめてわかる有り難さのようなものでしょうか.

Paper moon という映画 があります.この中での詐欺の手法は計算自体はあっているのですが,その意味をとり違えてしまう好例になっています.同じ手法が「壺算(以前の記事でへっつい盗人と間違えておりました.Suzukiさん,どうも御指摘ありがとうございます.)」という落語にもあったかと記憶しています.また,Surely You're Joking, Mr. Feynman! という本(邦訳:御冗談でしょうファインマンさん)には物理学者が計算と(物理的)意味をいかに強く結びつけているかという興味深い話があります.

このレストランの三人の客は有名な話ですが,私の友人 (計算機学者) ですら,かなりの時間頭を悩ませたものです.ちょっと考えてみて下さい.

あるレストランに三人の客がいた.彼等はコースの食事をすませ支払いをすると,三人で 3000円であった.客が去った直後に,丁度店主が「今日は開店記念の日なので,コースは 2500円だ」と言った.ウェイターは客を追いかけて 500 円を返そうとしたが,500円は 3人で割るには半端であり,「開店記念なので,300円引きです」と300円を客に返した.客は割引があったことを知らせてもらって満足そうであった.ウェイターは 200 円をチップとして誤魔化してちょっと良心が痛んだが,忘れることにした.しかし,ウェイターが考えてみたら,変なことに気がついた.客はそれぞれ 900 円づつ支払いをしたので合計 2700円をレストランに支払った.ウェイターが客から誤魔化したのは,200 円である.2700 円に 200 円を足すと 2900円であり,100 円足りない.いったい100円はどこに消えたのだろうか.

実は私はこれは日本語だから上手くいくのかと思っていたのですが,英語でも上手くいきます.また,今回友人と話してわかったのは,ドイツ語でも上手くいくということです.何がおかしいかわかったとしても納得の行く説明は簡単ではないかと思います.もしこの話をしらなかった方は考えてみて下さい.