私は次の定理の証明を研究しています:
言語を考える
はチューリングマシンで、は通常の
は決定できません。
Sipserで与えられた証明は、を決定するマシンがすでにある場合、停止問題を決定するマシンを作成できることを示しています。
証明を理解できません。ここに私がそれを理解する方法があります:
場合(任意のチューリングマシン)および(任意の文字列)が機械に供給される、我々は、機械構成列かかる機械入力として、しかし最初のランに。最初のケースでは、場合、単にxを受け入れます。つまりつまり正規言語-この場合インチ それ以外の場合、2番目のケースでは、は拒否し、は入力が形式であるかどうかをチェックし、そうである場合は受け入れます-つまり は通常の言語ではありません。インサイド私たちが実行した場合、これらのケースの両方のためにの適切な結果を返す直接返すことができます。
3番目のケースで混乱しているのは、が停止しない場合です。次に正規言語であり、かつ、したがって、返されACCEPT、その直接的として返すことができない。しかし、ソリューションの説明は、がこの場合でもACCEPTを返すように聞こえます(以下の疑似コード)。だから私は何が間違っているのですか?おそらく私が見逃している非常に基本的な考えがあるでしょう。ここでは、マシンのための擬似コードだ、との内側に、あなたが見ることができるように、機械がありますことが作成します。
machine S(M, w):
// Construct an instance of machine M2 which uses M and w
machine M2(x):
r := M(w) // Might hang here
if r == ACCEPT:
return ACCEPT
else:
if x is of form 0^n.1^n:
return ACCEPT
else:
return REJECT
// Run R on M2 (always returns, never hangs)
r1 = R(M2)
if r1 == ACCEPT:
return ACCEPT
else:
return REJECT