8.3
停止性問題
271
という問題は決定不能のように見えます。なぜなら、プッシュダウン・オートマトンをRubyで直接シ
ミュレーションすると、永久にループして答えが出ない可能性があるのを目の当たりにしたためです。
ところが、特定のプッシュダウン・オートマトンが所定の長さの入力文字列を受理もしくは拒否するの
に、シミュレーションのステップ数がどれくらい必要になるかを正確に計算する方法があります
†
。した
がって、この問題は最終的には決定可能になります。必要なステップ数を計算して、そのステップ数
だけシミュレーションを実行し、入力が受理されたかどうかをチェックすればよいのです。
では、これは常に可能なのでしょうか。問題をうまく逃れて、有限時間内で問題を解くことを保証し
た機械やプログラムを実装する方法を見つけるような、賢い方法は必ずあるのでしょうか。
いいえ、残念ながらありません。決定問題は無限にありますが、それらの多くは決定不能であるこ
とがわかっています。そうした問題を解くための、停止することが保証されたアルゴリズムというのは
存在しません。これらの問題が決定不能なのは、適切なアルゴリズムがまだ見つかっていないためで
はありません。これは、問題自体が一部の入力について根本的に解けないためです。適切なアルゴリ
ズムが見つからないことを証明することさえできるのです。
8.3
停止性問題
決定不能な問題の多くは、実行中の機械とプログラムの振る舞いに関係しています。なかでも最も
有名なのが停止性問題です。これはある ...