不可能なプログラム
253
8
章
不可能なプログラム
私が思うに、この世で最も慈悲深いことは、
人間が脳裏にあるものすべてを関連づけられずにいることだろう。
—— H. P. ラヴクラフト(H. P. Lovecraft)
†
これまで、さまざまなコンピュータとプログラミング言語のモデルについて調べてきました。抽象機
械にはいろいろな種類があり、一部の機械は他の機械よりも高い能力を備えていました。なかでも非
常に明らかな制限のある機械が2種類ありました。有限オートマトンには、文字列の括弧のバランスが
とれているかどうか判定するといった、無限の数え上げを必要とする問題を解くことができません。
プッシュダウン・オートマトンには、文字列が文字
a
、
b
、
c
を同じ数だけ含んでいるかどうか判定する
といった、情報を複数の場所で再利用する必要のある問題を扱うことができません。
これに対して、これまで見てきた最も高度な装置であるチューリングマシンは、必要なものをすべて
備えているように見えます。任意の順にアクセスできる無限のストレージ、任意のループ、条件分岐、
サブルーチンを備えています。6章で見た極めて最小限のプログラミング言語、ラムダ計算も驚くほど
強力でした。創意工夫することで、単純な値と複雑なデータ構造を純粋なコードとして表現でき、そ
れらの表現を操るための操作を実装することができます。また7章では、ラムダ計算をはじめとする単
純なシステムが、チューリングマシンと同じだけの万能な能力を持っていることを見ました。
こうしたシ