ライスの定理
内容
部分計算可能関数のすべての非自明な意味論的性質 について、集合 は決定不可能である。
なぜ正しいのか?
この一つの定理は、「このプログラムはゼロ関数を計算するか」「このプログラムは全域関数を計算するか」「これら2つのプログラムは等価か」といった、プログラムの振る舞いに関する無数の自然な問いに対するアルゴリズムを、それぞれ別々の対角線論法なしに、一挙に排除する。
証明の概略
一般性を失うことなく、いかなる入力に対しても決して停止しないプログラムが計算する至る所未定義の関数 が性質 を持たないと仮定する——そうでなければ、 が決定可能であることとちょうど同値な補性質 で議論する。 は非自明なので、その関数 が性質 を持つプログラム を一つ固定する。
背理法で、 がある判定アルゴリズム によって決定可能であると仮定する(プログラム索引が与えられると、 は停止し、そのプログラムの関数が性質 を持つかどうかを正しく報告する)。 に停止問題を還元し、定理1と矛盾させる。
任意の組 に対し、実効的に(単純な文字列操作——クリーネの s-m-n 定理により)新しいプログラム を構成する。 は任意の入力 について:まずプログラム を入力 で実行するシミュレーションを行い、そのシミュレーションが停止したら、次にプログラム を入力 でシミュレーションしてその出力を出力する。
2つの場合を調べる。 が で停止する場合: を で実行するシミュレーションは終了するので、 はその後すべての入力で とまったく同じように振る舞う、すなわち ——これは性質 を持つ( は意味論的なので計算される関数のみに依存し、 は を持つ)。 が で停止しない場合: を で実行するシミュレーションは決して終わらないので、 はいかなる入力 についても のシミュレーション段階に決して到達しない。したがって は至る所未定義の関数 であり、仮定によりこれは性質 を持たない。
よって: が で停止する が性質 を持つ が「はい」と答える。 は計算可能なので、「 から を計算し、 を実行する」というアルゴリズムは停止問題を決定してしまう——定理1と矛盾する。したがってそのような は存在しない: は決定不可能である。
この定理を使うトピック
ステップごとの証明
この定理のステップごとの証明はまだありません。
参考文献
- Wikipedia contributors (2024). Halting problem
- Wikipedia contributors (2024). Rice's theorem
- Wikipedia contributors (2024). Ackermann function