ただ、その問題取るチューリング度を超えている、停止オラクルの程度です。面では算術的階層、あなたは上にある問題たくΣ 0 1。このような問題の例(φ nがであるN、部分計算機能と番目のW N =は、{ K ∈ Nは、 | φ N(K ) に定義される }である、N番目computably可算集合):0』Σ01φんんWん= { K ∈ N | φん(k ) が定義されています}ん
- である Σ 0 2 -complete。{ N ∈ N | φん 有限数の入力で終了します }Σ02
- である Π 0 2 -complete。{ N ∈ N | φん 合計関数です }Π02
- である Σ 0 3 -complete。{n∈N∣Wn is a computable set}Σ03
これらのどれも、あなたがホールティングオラクルを持っている場合でも解決できません。例えば、第2の例を考え、「ある合計は?」nが与えられた場合、Oracleの停止は、nでエンコードされたTuringマシンがすべての入力で停止するかどうかを決定するのにどのように役立つでしょうか?φnnn
[2014年6月3日追加]これらすべての「実用的な」側面については、問題を考慮してください。プログラマーが関数void charge_credit_card(int card_number, int amount)
を記述していて、その関数がすべての入力で終了するかどうかを知りたいのです。一般にこれを自動的にチェックできるコンパイラを書くことは不可能です。さらに、コンパイラーに「charge_credit_card
入力が与えられたときに終了します(k,m)
か?」という形式の質問をさせても、まだ不可能です。