コンピュータは計算の意味を知っている?—自己参照プログラムから考える自己問題—

理学部 数理科学科 三好 博之 教授

自己参照プログラムから考える自己問題

 みなさんも「私とは何だろう」「考えるとはどういうことだろう」という疑問を抱いたことが少なからずあると思います。このような問題は「自己問題」と呼ばれ哲学の分野では古くから議論されてきました。しかし、この問題は堂々巡りのような深みにはまってしまい、なかなか明確な答えに至りません。この難問に「計算とは何か」という切り口から挑む三好博之先生に、コンピュータ科学を通した「自己問題」へのアプローチを教えていただきました。

「計算する」とはどういうことだろう?

 私たちは普段あまり深く考えずに「コンピュータに計算させる」「コンピュータが計算する」という言い方を使っています。コンピュータとは計算をする機械のことですから、別段おかしな言い方ではないように感じます。ところが、「計算」とはいったいどういうことなのか、考え始めると、そこに深く大きな問題が潜んでいることが分かります。

 たとえば、次のような状況を思い浮かべてみてください。1)人が暗算する。2)人が紙と鉛筆を使って計算する。3)人が電卓を使って計算する。4)Aさんに頼んで計算してもらう。

 このうち、どれが「計算」で、どれが「計算」ではないのか、明確に答えを出すことができるでしょうか?紙に描いた式は「紙が計算した」とは言いませんが、Aさんに頼んだ場合は「Aさんが計算した」と言えそうです。では、電卓は計算をしたのでしょうか?

 「電卓を使う程度の計算であれば紙と同じだから、電卓が計算したとは言わない」というのも一つの意見ですが、近年の電卓は高度な機能を備えたものもあり、関数計算なども行えます。さらに、電卓を現代のコンピュータに置き換えてみると、事情はもっと複雑になってきます。なぜなら、コンピュータが行う「計算」には、文字や画像を表示すること、音楽を奏でること、必要な情報を探し出すこと、一定の条件下で未来を予測すること、など非常に多岐にわたり、紙と同じだと断言するにはあまりにも高度なことが行われているからです。

 ここまで話をすると読者の中には「コンピュータがどんなに複雑なことをしていても、コンピュータ自身に“計算をしている”という自覚がないから、計算をしているとは言えない」と考える人もいるかもしれません。確かに、私たちは暗算であれ紙と鉛筆を使う場合であれ、計算をするときには「計算をしている」という自己認識があります。そのように考えると、「自分自身で計算をしていると分かっているかどうか」は「計算とは何か」を考える場合の重要なポイントになりそうです。

プログラムの意味論

 それでは「計算をしていると分かっている」とはいったいどういう状態を指しているのでしょう。ここで問題になってくるのが「意味論」です。自分が何をしているか分かるということは意味が分かっているということですから、その計算が何を意味しているのかを定義できるかどうかが最初の手掛かりになりそうです。

 コンピュータにとって「意味」とは「どのような動作を行うか」ということです。画面に表示する、プリンタに出力する、データを送信する、言葉を検索する、などコンピュータが行う動作はたくさんあり、それらは厳密に定義されているように思われます。

 ところが、ここで困ったことが起きます。コンピュータの動作を記述するのはプログラムによって行われますが、記述されたプログラムの動作についての意味がさらに問われることになり、その意味を記述するのもまたプログラムで、その意味が求められ、その意味をプログラムで……と延々と終わらない無限後退に陥ってしまいます。

 このように続く意味の記述の無限後退は、実際には適当なレベルで妥協されています。これは数学の教科書が日本語で書かれているのと同じで、どこかのレベルで諦めることで、使いやすさや分かりやすさを得ているということです。

自己参照するプログラム

図1
図2
図3

 ところが、私たちは日本語で書かれた数学の教科書を読んで数学を理解することができます。「数学を理解している」という自覚も持っています。これはいったいどういうことなのでしょうか。

 コンピュータが自分自身を計算に含める「リフレクション」を詳しく見てみることが、この問題の理解を助けてくれるかもしれません。

 コンピュータには「自分自身の電源を切るプログラム」や「自分自身の優先順位を下げるプログラム」といった自分自身に言及するプログラムがごく当たり前に使われています。このように自分自身に言及することをリフレクションと呼びます。実は「自己言及命題」は論理学の分野では長年議論されてきたことですが、計算における自己言及は単なる(無時間的な)命題ではなく、(時間の経過を伴う)計算の進行の途中で起こるため、より深刻な問題を引き起こします。

 ここでは、リフレクションの極端な例としてメタ・サーキュラ・インタプリタ(MCI)を取り上げます。インタプリタとは人間が書いたプログラム(ソース・プログラムと言います)をステップバイステップでコンピュータが理解できる記号列に翻訳して実行するプログラムのことです。そして、MCIとは、翻訳の定義そのものをインタプリタによって記述するインタプリタのことです。例えるならば、暗号解読の手引きがその暗号で書かれているようなものです。

 このようなインタプリタをコンピュータで動かすとどうなるか図を使って考えてみましょう。図1は、コンピュータのプロセッサ( 演算処理装置)とプログラムとを模式的に描いたものです。プロセッサはプログラムを読み込んで計算を行います。

 ところで、MCIは、プログラムの意味が書かれたものですから、プログラムとプロセッサを含めたすべての挙動を計算することになります。つまりプロセッサが計算しているのはプログラムを含めた自分自身ということです。このことを図に表すと図2のようになります。

 さらに、プロセッサが自分自身を計算しているということは、その計算されている自分自身は、“自分自身の自分自身”を計算している状態にあるはずです。このように続けていくと、無限に入れ子構造が続くことが分かります。(図3)

 プログラムの意味論が無限後退することは先ほど確認しましたから、それを実装したものもまた無限後退するのは想像に難くないことですが、先ほどとの違いは、プログラムの意味論がいかにも形式的な議論であったのに対して、MCIのようなプログラムは実際に存在していて、コンピュータでの実行が可能というところです。

 ということはさらにMCIに、そのプログラム自身を操作するメカニズムを取り入れることによって実行時にプログラムにとっての自己操作が可能になります。

 これがリフレクションと呼ばれるものです。もちろん、実際には無限に自己操作ができるわけではなく、どこかで何らかのリソース的な歯止めがかけられます。私たちが使う言語や論理で「自己問題」を扱う場合も本質的には同様なことが起こります。

 哲学は長らく「自己とは何か」「考えるとはどういうことか」という問題と格闘してきました。私はコンピュータ科学の切り口によって、これらの問題に対する重要なヒントを提供していきたいと考えています

雲に潜む巨大な計算

 クラウド・コンピューティングが実用的な技術として、さまざまなところで活用されるようになりました。アイデア自体は古く、20年ほど前からあったものですが、コンピュータの性能やネットワーク技術の向上によってようやく現実のものになっています。現代の高度情報社会では、無限とも思えるほどの計算があまねく存在しています。このような環境ではクラウドという技術はむしろ自然なものだと言えるでしょう。クラウドを見ていて興味深いのは「計算がハードウェアを超えて存在する」ところです。ネットワークにつながっているたくさんのコンピュータは古くなれば交換されますが、ユーザにはコンピュータの交換も関係なくクラウド越しに計算結果が提供されます。ハードウェアがどんどん入れ替えられてもソフトウェアがそのまま動いているのです。まるで細胞が代謝しても存続する生命のようにも感じられます。このことからコンピュータ科学を生物学に応用することが可能ではないかと考えています。

※ ネットワーク上のサービスをサーバの存在を意識せず利用できる仕組み

理学部 数理科学科 三好 博之 教授

プロフィール

博士(理学)。専攻は理論コンピュータ科学、圏論など。日本では数少ない数学としての圏論の専門家として、専門書の翻訳も手がける。大学時代に実験がつまらないという理由から選んだコンピュータ科学だが、その後、日本で初めてのインターネット構築に立ち会い、慶応義塾大学・湘南藤沢キャンパス立ち上げ時に情報環境の構築に関わるなど、 常にコンピュータ科学の最前線で研究を重ねてきた。他に計算の哲学プロジェクトを率いており、計而上学、時間論、音楽論と研究対象は多岐にわたる。大阪府立北野高校OB。

PAGE TOP