Ich studiere den Beweis des folgenden Satzes:
Angesichts der Sprache
ist eine Turingmaschine und ist regulär
ist unentscheidbar.
Der in Sipser gegebene Beweis zeigt, dass wir, wenn wir bereits eine Maschine , die entscheidet , eine Maschine können, die das entscheidet:
Ich habe Probleme, den Beweis zu verstehen. So verstehe ich es:
Wenn (eine beliebige Turingmaschine) und (eine beliebige Zeichenfolge) der Maschine zugeführt werden , konstruieren wir eine Maschine , die eine Zeichenfolge als Eingabe verwendet, aber zuerst Maschine auf . Erster Fall, wenn , dann akzeptiert einfach x. Das ist in diesem Fall - dh eine reguläre Sprache. Andernfalls lehnt zweiten Fall , dann prüft , ob die Eingabe die Form , und akzeptiert, ob dies der Fall ist - dh ist keine reguläre Sprache. In gibt in beiden Fällen, wenn wir auf ausführen, das entsprechende Ergebnis zurück, das direkt zurückgeben kann.
Der Fall, über den ich verwirrt bin, der dritte Fall ist, wenn nicht auf bleibt . Dann ist , was eine reguläre Sprache ist, und gibt daher ACCEPT zurück , was nicht direkt als . Aber die Beschreibung der Lösung klingt für mich wie kehrt ACCEPT auch in diesem Fall (Pseudo - Code unten). Also, was mache ich falsch? Es gibt wahrscheinlich eine sehr grundlegende Idee, die mir fehlt. Hier ist der Pseudo-Code für die Maschine , und im Innern , wie Sie sehen können, gibt es die Maschine dass schafft.
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