284
8
章 不可能なプログラム
8.7
計算不能性に対処する
プログラムを書く上で大事なことは、コンピュータを役立てることです。プログラムが正しく動くか
チェックするという問題が解決不能なこの世界において、プログラマはどのように対処すればよいので
しょうか。
拒絶というのは魅力的な反応です。すべての問題を無視しましょう。プログラムの振る舞いを自動
的に検証できればいいのですが、それは不可能です。ですから、ただうまくいくことを願いましょう。
プログラムが正しく仕事をしているか、チェックしようとしてはいけません。
これは過剰な反応です。というのも、状況はそれほどひどくはありません。ライスの定理はプログラ
ムの解析が不可能だとは言っていません。必ず停止して正しい答えを生成するような、自明でない分
析器を書くことはできない、と言っているだけです。「8.3.1 停止性チェッカーの構築」で見たよう
に、間違った答えを返したり、何も返さずに永久にループするプログラムが存在しても構わなければ、
いくつかのプログラムに対して正しい答えを返すようなツールを書くことは可能です。
以下に、決定不能性にもかかわらず、プログラムの振る舞いを分析して予測する実践的な方法を挙
げておきます。
●
決定不能な質問をしてみて、答えが見つからなければあきらめましょう。たとえば、プログラム
が特定の文字列をプリントするかどうかチェックするため、プログラムを実行してただ待つこと
も可能です。もしプログラムがある期間内、たとえば10 秒以内に文字列を