● コンピュータにできることとできないこと

  本誌の読者のみなさんに,今さら「コンピュータって何?」っていうのも妙な話ですが,いきがかり上,ここではそういう話をします.

 コンピュータを発明したのはいったい誰だったのかというのは難しい問題らしくて,ENIACが最初のコンピュータで,なんていう一昔前の知識でものをいっていてはいけないようですが,コンピュータの数学的な原理を考え出した研究者ならはっきりしています.アラン・チューリングという人です.

 最近翻訳が出たニール・スティーヴンスンの暗号SF『クリプトノミコン』(図3)にも登場するこのチューリング(それどころか,翻訳第1巻のサブタイトルが『チューリング』だったりするのだが),機械の知性を判定するチューリング・テストやACMのチューリング賞など,計算機科学関連のさまざまなところに名前を遺しています.

〔図3〕クリプトノミコン(1)――チューリング――
ニール・スティーヴンスン著,中原尚哉訳,早川書房

 その一つが,今ではチューリングマシンと呼ばれる仮想的な機械です.チューリングがこの機械を考案したのは1930年代のことです.これが,今に至るまでコンピュータの理論的基礎を与えているものなのです.

 チューリングマシンは,マス目の中に記号が書かれた無限に長いテープとそのテープの上を動くヘッドとで構成されます.ヘッドは“内部状態”をもっており,テープ上の記号を読み取って,それに応じて“内部状態”を変えたり,テープの上をひとマス動いたり,ヘッド位置のテープに書かれた記号を書き換えたり,あるいは条件が整えば停止したり,といった動作をします.できることはそれだけ.これはテープに書かれた記号にしたがって,決められた動作を粛々とこなすだけの自動機械にすぎません.ひとことでいえば,記号を操作する機械です.

チューリングマシン

 では,そんなチューリングマシンには何ができるのでしょうか.じつはこの機械で「計算」ができます.それだけなら,そんなものかなぁ,という感じでしょうが,じゃあ,どんな計算ができるのかというと,これが何とあらゆる計算ができるのです.というと実はレトリックがすぎるのですが…….

 世の中には「計算可能」なものと「計算不可能」なものがあって,チューリングマシンによって“有限回の操作”で行えるもののことを「計算可能」と定義するんですね.この定義にしたがえば,チューリングマシンであらゆる計算ができます.ずるいですか? でも,ほかにもいくつかの「計算可能性」の定義はあるのですが,それらはすべて同等であることが証明されているので,これでいいのです.

 たしかに,足し算,掛け算とか開平計算とか,「計算」といわれてぱっと思いつくようなものは,規則どおりに数字を操作していくだけですから,テープとヘッドでもできてしまいそうですよね.人間が計算するときも,知性を使っているというよりは,小脳とか脊髄とかでやっている気もしないでもないですし.ただし,それが計算のすべてではありません.チューリングマシンでできるものすべてが「計算」なのですから.

 もちろん,特定のチューリングマシンであらゆる計算ができるとは限りません.どの程度複雑な記号操作がこなせるかは,ヘッドがどういう規則で動くかで決まります.規則の設定のしかたによっては,足し算しかできない“ヒトツオボエ”のチューリングマシンだって作成できてしまいます.複雑なことをさせたければ,ヘッドがある程度複雑な規則を知らなくてはならないでしょう.

 では,どの程度複雑なことができるのか.ここで,“万能チューリングマシン”というものが登場します.これは名前のとおり,チューリングマシンの一種なのですが,なんと他のあらゆるチューリングマシンの動作を模倣できるチューリングマシン――いわば「メタマシン」なのです.つまり,この万能チューリングマシンさえあれば,文字どおりあらゆる計算ができるものなのですね.足し算だけをさせたければ,“ヒトツオボエ”チューリングマシンを模倣させればいいのです.

万能チューリングマシン

 今,われわれがコンピュータと呼んでいるものは,万能チューリングマシンを実現しようとして努力した結果だと思っておけばいいでしょう.ヘッドがCPU,テープがメモリに対応します.

 そして大事なのは,コンピュータではプログラムもデータも区別なくメモリ上に蓄えられるという点です.われわれは「このプログラムにこのデータを食わせてやって」などと考えますが,コンピュータの中ではどちらもメモリ上の記号にすぎません.実際,実行中にプログラム自身を書き換えてゆくようなプログラムも作れますから,本当にプログラムとデータには区別がないのです.チューリングマシンのテープ上に書かれた記号と同じです.

 PCのデスクトップアクセサリとして「電卓」プログラムをよくみかけますが,これなどはまさに万能チューリングマシンの上で単機能のチューリングマシンを模倣しているようなものですね.

 というわけで,コンピュータには何ができるのかという質問に対しては,「計算」ができるというのが答です.そんなこといったって,computeってそもそも英語で「計算」のことじゃないか,と思うかもしれませんが,英語のcalculateも日本語にすれば「計算」ですよね.電卓とコンピュータの違いはcalculateとcomputeの違いです.そして,computeとは上で述べた意味での「計算」なのです.うーん,紛らわしいからcalculateのことは「勘定」くらいにしておいたほうがいいのかもしれません.

 もっとも,メモリサイズや計算時間の制限があるので,現実のコンピュータで本当に“ありとあらゆる”計算ができるというわけではないですけどね.

 チューリングマシンが単純なcalculate以上のことをやれるのは,条件分岐や同じ操作の繰り返しなどを記号操作として実装できるからです.たとえば,途中結果に応じてその先の計算内容を変えたいという場合に条件分岐(普通のプログラムならif)を使いますが,同じことを電卓でやろうとすると,この条件分岐は人間が自分でやらなくてはなりませんよね.計算途中のメモもとらないといけないでしょうし…….

 計算の手順のことをアルゴリズムと呼びますが,要するに,(万能)チューリングマシンは任意のアルゴリズムを与えて計算させることができるわけです.結局これが,世界を構築できる理由になります.原理的には「電卓+人間+メモ用紙」というシステムでも世界を構築できるはずですが,たぶんそれは誰もやりたくないでしょう.

 さて,結局はチューリングマシンですから,コンピュータにできることも記号操作だけです.“計算する”というと数字を扱っているようですが,別にコンピュータが数字の意味を知っているわけではありません.数字を記号で表現して,その記号を規則どおりに操作しているだけです.コンピュータに“1+1は”と聞けば“2”と答えるでしょうが,だからといってコンピュータが“この場合の1はバナナの個数だ”とか考えているわけではありません.

 ところで,整数を記号であらわす方法はいろいろ思いつくからいいとして,実数は記号で書けるのでしょうか.たとえば,√2は10進小数で書けば1.41421356…と数字が無限に続きます.ということは,記号を無限個使わないと書けません.無限個の記号を読むだけでも無限のステップが必要ですから,実数を含む計算は計算可能ではありません.つまり,コンピュータは実数を扱えないのです.もっとも,人間も実数を本当に扱えているのかどうかも突き詰めて考えると疑問ですけれど…….

 たとえば,「円周率を計算しなさい」という問題は,計算不可能です.あれ?,だって円周率は10億桁以上求められているじゃないかと思うかもしれませんね.円周率を計算するアルゴリズムはいろいろと知られていますし,実際に「円周率の10億桁目を求めなさい」という問題は計算可能です.必ず有限のステップで答が出ますから.でも「円周率を計算しなさい」はだめなんです.

 コンピュータ内部では実数を「浮動小数点形式」などで表現しますが,これは実数を適当な桁で打ち切った近似であって,有限の記号で表現されています.本当の意味で実数を扱っているわけではありません.

 また,無限大や無限小も扱えませんから,コンピュータでは微分や積分ができません.微分も積分も無限小の極限で定義されるからです.「数値微分」というものがあるじゃないか,と思うかもしれませんが,あれは引き算と割り算で微分を近似したものです.こういうのを「差分」と呼びます.差分はあくまでも近似であって,微分そのものではありません.同じように「数値積分」というのも,積分を足し算とかけ算で近似したものですね.

 実数や無限小を扱えないことをまとめていうと,コンピュータは「連続」を扱えないのです.なぜなら,記号は連続的には変えられないし,チューリングマシンのテープのマス目も連続ではないし,ヘッドの内部状態も連続ではない(つまり,どの状態も完全に区別がつく)からです.そういう機械に有限回の操作をさせても,“連続”は現れてくれません.

実数や無限は扱えない…… ぶちぶち

 というわけで,まとめると,

・できること:計算(記号操作)
・できないこと:連続を扱うこと(実数・微分・積分)

ということになります.

 われわれの世界は連続です.空間は(たぶん)連続だし,時間も(たぶん)連続です.それをいかにして記号操作でうまく表現してやるか.コンピュータ・シミュレーションを行うに際して考えるべき問題とは,結局はそれに尽きてしまいます.

 われわれは,今やコンピュータの中に世界を構築できるようになりました.しかし,その世界は有限の記号だけで構成されています.いわばテレビの画面のように,近づいてみると“ぶちぶち”と点が集まっているだけなのです.遠くから見てもその“ぶちぶち”がわかってしまうのが下手なシミュレーション,よほど近づかなければ“ぶちぶち”であることに気づかないのが上手なシミュレーション,といってもいいかもしれません.

 もっとも,その“ぶちぶち”を逆手にとって,積極的に利用するシミュレーションもあったりしますが…….

以降の内容は本誌を参照ください

インデックス
 ◆シミュレーション・シミュレーション
 ◆コンピュータ・シミュレーション
 ◆コンピュータにできることとできないこと

今月号特集トップページへ戻る


Copyright 2002 菊池 誠