停止問題・決定不能とは?どんなプログラムでも『止まるか無限ループか』を見分ける万能ツールは作れないと

公開: 更新: カテゴリ: テクノロジ系

30秒で結論

停止問題とは(全体像)

停止問題は、「あるプログラムを動かしたら、いつか止まるか、それとも永遠に動き続ける(無限ループ)か」を判定する問題のこと。

これに対するチューリングの答えは、「どんなプログラムでも判定できる万能ツールは作れない」だった。つまり、コンピュータには原理的に解けない問題があることを示したのだ。

ここで大事なのは、特定のプログラムなら止まるか分かることもあるということ。判定できないのは「どんなプログラムでも見分けられる万能ツール」のほうで、個別に調べれば分かる場合はある。「一つひとつは分かることもあるが、ぜんぶに効く万能判定は作れない」と整理するとよい。


詳しく:決定不能の意味とNP困難との違いだけ覚えれば戦える

ここが記事の心臓部。まず決定不能の意味を押さえよう。

停止問題と決定不能

言葉意味
停止問題プログラムが止まるか無限ループかを判定する問題
決定不能どんな入力にも有限時間で答えを出すアルゴリズムが存在しないこと
チューリングの結論停止問題を判定する万能アルゴリズムは存在しない

よく混同されるのがNP困難との違い。NP困難は「解くのにとても時間がかかる」という難しさだが、停止問題はそれ以上で、「そもそも解くアルゴリズムが存在しない」という別格の難しさだ。

NP困難との違い

NP困難決定不能(停止問題)
難しさ解けるが、とても時間がかかるそもそも解く方法が存在しない
アルゴリズムある(ただし遅い)ない

つまり、NP困難は「遅い」、決定不能は「不可能」。停止問題は後者で、どんなに速い計算機を使っても万能判定は作れない、というわけだね。

この事実は現実にも効いてくる。たとえば「このプログラムにバグがないか」を完璧に判定するツールは作れない。だからテストや人の目によるチェックが必要になる。

わかりやすく言い換えると

要するに、停止問題は「ぜんぶに効く万能の停止判定は作れない」という話だ。

停止問題 … プログラムが止まるか・無限ループかを見分ける問題

結論 … どんなプログラムでも見分ける万能ツールは作れない(決定不能)

NP困難との違い … NP困難は「遅いけど解ける」、決定不能は「そもそも解けない」

「特定のものは分かることもあるが、万能判定は不可能」と覚えるのがコツ。


試験のツボ

🔴 一番出る:万能の停止判定は作れない

①任意のプログラムが止まるか見分ける万能ツールは存在しない

②これを示したのがチューリング

🔴 次に出る:決定不能の意味

①どんな入力にも有限時間で答えを出すアルゴリズムがない

②NP困難(遅いが解ける)よりさらに手ごわい

🟡 押さえると安定:特定と任意の違い・現実への影響

①特定のプログラムは判定できることもある

②完璧なバグ検出ツールは作れない


よくある間違い

「停止問題はNP困難と同じ難しさ」→ ✗  NP困難は遅いが解ける。停止問題は解く方法そのものが存在しない(決定不能)。

「どんなプログラムも、止まるか絶対に分からない」→ ✗  特定のプログラムなら分かることもある。作れないのは万能の判定ツール。

「停止問題はいつか高性能な計算機で解ける」→ ✗  計算機の速さの問題ではなく、原理的に万能判定が存在しない。


試験での出題パターン

実際の問題でたしかめてみよう。

オリジナル問題1(停止問題の結論)

📝 オリジナル問題 1 停止問題の結論

停止問題に関する次の記述のうち、正しいものはどれか。

  1. どんなプログラムでも止まるか無限ループかを見分ける万能ツールは必ず作れる
  2. 任意のプログラムが止まるか無限ループかを見分ける万能なツールは存在しない
  3. 停止問題は計算機が遅いせいで解けないだけで、速い計算機があれば解けるものだ
  4. 停止問題とは、プログラムをどれだけ速く止められるかを競うための問題のことだ
オーエスペン
オーエスペン 解答・解説

解答は 2 だよ。

停止問題の結論は「任意のプログラムが止まるか無限ループかを見分ける万能ツールは存在しない」なんだ。チューリングが示した有名な定理だよ。

選択肢1の「必ず作れる」、選択肢3の「速い計算機なら解ける」、選択肢4の「速く止める競争」はどれも誤りだよ。

選択肢判定理由
1万能ツールは作れない
2万能判定は存在しない
3速さの問題ではない
4止まるか否かの判定の問題

オリジナル問題2(NP困難との違い)

📝 オリジナル問題 2 NP困難との違い

決定不能とNP困難の違いに関する次の記述のうち、正しいものはどれか。

  1. NP困難は解く方法が存在せず、決定不能は遅いが解けるという、逆の関係である
  2. 決定不能もNP困難もまったく同じ意味で、両者には少しの違いも存在していない
  3. NP困難は遅いが解ける、決定不能はそもそも解く方法が存在しないという違いがある
  4. 決定不能もNP困難も、どちらも速い計算機さえあればすぐに解けるものとされている
オーエスペン
オーエスペン 解答・解説

解答は 3 だよ。

NP困難は遅いが解ける、決定不能はそもそも解く方法が存在しないんだ。停止問題は決定不能のほうで、別格の難しさだよ。

選択肢1は関係が逆。選択肢2の「同じ意味」、選択肢4の「速い計算機なら解ける」はどちらも誤りだよ。

選択肢判定理由
1遅いが解けるのがNP困難
2意味が異なる
3NP困難=遅い・決定不能=不可能
4決定不能は速さの問題ではない

オリジナル問題3(特定と任意の違い)

📝 オリジナル問題 3 特定と任意の違い

停止問題における特定と任意の違いに関する次の記述のうち、正しいものはどれか。

  1. 特定のプログラムなら止まるか分かることもあるが、万能の判定ツールは作れない
  2. どんなプログラムも、止まるか無限ループかは絶対に判定できないものとされている
  3. 万能の判定ツールは作れるが、特定のプログラムだけはなぜか判定できないものだ
  4. 停止問題は特定のプログラムにも任意のプログラムにも、いっさい関係のない話だ
オーエスペン
オーエスペン 解答・解説

解答は 1 だよ。

特定のプログラムなら止まるか分かることもあるけど、どんなプログラムにも効く万能の判定ツールは作れないんだ。ここを取り違えやすいよ。

選択肢2の「絶対に判定できない」、選択肢3の「万能は作れる」、選択肢4の「関係ない」はどれも誤りだよ。

選択肢判定理由
1特定は可・万能は不可
2特定なら分かることもある
3万能ツールは作れない
4まさにその関係を扱う問題

まとめ

押さえどころ

次に学ぶ


執筆: SikakuQuest編集部

勉強は、クエストになった。

資格の勉強を、冒険に変えるRPG学習アプリ

App Storeで見る