提供: 有限会社 工房 知の匠
文責: 技術顧問 大場 充
公開: 2026年3月21日
18世紀末のイギリスに、数学者のチャールス・バッベージが生まれました。それは、イギリスの社会で産業革命が進んでいた時代です。そして、ドイツの大学で、哲学者のカントが活躍し始めた頃です。バッベージは、フランスの数学者、パスカルが作り、ドイツのライプニッツが改良した機械式の計算の仕組みを使って、今日のコンピュータの基になった考えを、実現しようとした人でした。その約100年後、アメリカのハーバード大学で、エイケンによって世界最初の電気で動くコンピュータが開発されました。そして、その同時代、ドイツ軍のエニグマ暗号を解いた、イギリス・ケンブリッジ大学の数学者、アラン・チューリングは、バッベージの機械を基にして、現代のコンピュータの基礎となったチューリング機械を考え出しました。
18世紀のイギリスに、数学者のチャールス・バッベージが生まれました。それは、イギリス社会に産業革命が進んでいた時代です。ケンブリッジ大学で数学の教員であったバッページは、フランスの数学者、パスカルが考え、ドイツの数学者・哲学者であったライプニッツが発展させた、歯車式計算機械を基に、現代のコンピュータに近い、プログラムに従って計算を行う、歯車式の計算機械を考え出しました。19世紀に入って、イギリスのビクトリア女王からの財政支援を受け、バッベージは、機械式コンピュータの試作に力を注ぎました。しかし、バッベージの機械は、当時の機械工作の限界から、歯車の摩擦(まさつ)問題を克服(こくふく)することができず、思ったように動くことはありませんでした。
バッベージの夢は、実現することができませんでしたが、その後、数学の分野では、イギリスのプールが、論理和や論理積などに基づく、新しいブール演算を考えだし、20世紀に入って、電磁石を使った計算機械を考える基礎が確立されました。そして、イギリスのケンブリッジ大学で計算のやり方を研究していた、数学者のチューリングは、バッベージの機械を抽象化し、数学的に計算を考えるための数学的なモデルである、チューリング機械を考案しました。そのチューリングは、第2次世界大戦中、連合軍を悩ませた、ドイツのエニグマ暗号を解読する計画に参加し、解読に成功しました。その時も。暗号を高速で解読するため、歯車式の計算機械を使っていました。チューリング機械は、入力をテープから読み込み、予め記憶させてあるプログラムに書かれている計算手順に従って、計算を進め、計算結果を出力テープに書き出します。計算の途中結果は、記憶装置の中の記憶セルに書き込まれ、後でその値を読み出すこともできます。
このような条件付きの判断や動作が可能になることで、以前の技術では、自動的に動く機械の場合には実現ができず、人間にしかできなかった作業を、人間の判断を仰(あお)ぐことなしに、機械だけでの実行が可能になります。チューリングは、そのような自律的に動く機械の可能性が出て来た状況を、「人間のように考えられる機械ができる。」と表現しました。このことは、コンピュータの処理速度が著しく向上し、利用できる記憶装置の容量も指数関数的に増加しつつある現在、チューリングの予言の半分程度が、現実のものとなっていると言えるでしょう。実際に囲碁や将棋などのゲームでは、人間にも勝てるプログラムが出現しつつあります。
しかし、「コンピュータが人間に近づいたか」と言うと、答えは「そうとは、言えない。」となります。それは、現代までのコンピュータは、人間が書く、プログラムの手順に従って、計算を行うだけで、プログラムに書かれていないことについては、「何もできない」か「間違った動作をする」だけです。例えば、銀行の超大型計算機で実行されている処理の場合、まれにコンピュータ・システムが故障したりします。そのような故障を起こす原因として、コンピュータの電気的な故障もありますが、しばしば、プログラムに書かれていない条件があり、プログラムの対応が指定されていないため、人間から見れば、「正しくない」動作をしたり、同じ計算を際限なく繰り返したりするのです。特に、プログラムに指定のない条件が発生すると、人間が外部から見ても、「コンピュータがなぜそのような動作をするのか」が分からないため、「原因不明の故障」に見えるのです。
計算方法の研究は、チューリング機械を利用した理論的研究が進み、20世紀の半ばまで、大きな進歩ありました。中でも、計算の「非決定性」に関する研究が進み、有限状態機械とチューリング機械での計算能力の違いなどが解明されました。非決定性とは、チューリング機械で利用できる記憶機構の、ランダム・アクセス・メモリでは、メモリへのデータの書き込みと、書き込まれたデータの読出し機能によって、同一のメモリからの読出しと、そのメモリへの新しい値の書き込みを行う、「更新」または「代入」によって、以前に書き込んだ値が上書きされることを言います。このチューリング機械の動作は、数学における「等号」の意味と、チューリング機械の「代入」が、本質的に異なることを意味しています。
このことは、チューリング機械では、同じ「変数」すなわち、同じ「メモリ」への操作でも、「いつ」そのメモリの値を読み出したかによって、得られる値が変わると言う問題を起こします。これが、銀行口座のオンライン処理などで、口座の残高に誤りが発生する問題の原因になります。つまり、同じ「変数」の参照でも、その前にどのような処理を実施しているかによって、計算結果が変わるのです。このようなことは、数学の式では起こりません。この副作用によって、同じアルゴリズムに基づくプログラムでも、いつプログラムの問題部分を実行したかで、その計算結果が変わります。同じプログラムの記述であるにもかかわらず、計算結果が異なる問題が出ることを、計算の答えが確定していないと言う意味で、非決定性と言います。
チューリング機械によって導入された「非決定性」問題によって、コンピュータを利用した計算が、期待通りでないとき、その原因を突き止めることは、しばしば、難しい問題になる例が出てきました。この問題に注目して、計算の理論を研究している専門家たちは、しばしば、非決定性の根源である「副作用」を排除した計算に限定することで、計算機械を利用した計算と、数学的な計算が一致するようにすべきであると主張するようになりました。そのような理論に基づいた、プログラムを記述するための言語、プログラミング言語のひとつに、関数型言語があります。
ただ、「副作用」を利用しない計算では、計算する機械のメモリを大きくしなければならないと言う、現実的な問題が起こります。それは、変数に新しい値を代入するたびに、変数の名前を、x1、x2、...、x100と言うように、変えなければならず、変数の数やメモリの数を多くしなければならないからです。