【ていしもんだい】

停止問題 とは?

最終更新:
💡 すべてのプログラムの「終わる?」は決められない

プログラムと入力を受け取り、その実行が停止するかを判定する問題。あらゆる組み合わせに対し、必ず有限時間で正解する汎用アルゴリズムは存在しない。

📌 このページのポイント
停止問題:万能な判定器を仮定すると…Hは、D(D)が停止するか判定Dは、その予測と逆に動く「停止する」「停止しない」Dは無限に続ける予測に反するDは停止する予測に反するどちらの答えでも、矛盾すべてに正解するHは作れない個別のプログラムは、調べられる場合もある
D(x)はH(x,x)が停止と答えれば無限に続け、そうでなければ停止します。D自身を入力した場合の矛盾です。
ひよこ ひよこ
終わるかどうか、実行すれば分からない?
ペンギン先生 ペンギン先生
実際に停止すれば、その実行は停止すると分かるよ。でも、まだ動いている場合は「もう少しで終わる」のか「永遠に続く」のか、待っているだけでは区別できないんだ。
ひよこ ひよこ
どんなプログラムでも判定する道具は作れない?
ペンギン先生 ペンギン先生
すべてのプログラムと入力について、判定器自身も必ず有限時間で答え、答えが正しいという道具は作れないよ。計算機を速くすれば解決する、という限界ではないんだ。
ひよこ ひよこ
どうして作れないと分かるの?
ペンギン先生 ペンギン先生
万能な判定器Hがあると仮定するよ。Dは、入力xをプログラムとしてH(x,x)に尋ね、停止すると言われたら無限に続け、停止しないと言われたら停止する。DにD自身を渡すと、どちらの予測にも反するので矛盾するんだ。
ひよこ ひよこ
では、プログラムを調べる意味はない?
ペンギン先生 ペンギン先生
個別の例や条件を限ったプログラムでは、停止を確かめられるよ。自動解析も役立つ。ただし一般のプログラムの性質をすべて完全に決められるとは限らず、解析では不明や誤検出などをどう扱うかが大切なんだ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「停止問題」って出てきたら「すべてのプログラムが終わるかを万能には判定できない問題」と思えばだいたいOK!
📖 おまけ:英語の意味
「Halting Problem」 = 実行が停止するかを判定する問題
💬 haltは実行が止まること。特定のプログラムを止める操作ではなく、止まるかを調べる問題だよ。

参考資料

← 用語集にもどる