Betrachten Sie das Problem, eine Eingabe-Turing-Maschine zu nehmen und festzustellen, ob die endgültige Zelle a ist oder nach der Berechnung wird angehalten. In Fällen, in denen etwas anderes geschrieben wird oder nicht angehalten wird, dürfen Sie eine Antwort geben (aber Sie müssen anhalten und auf alle Eingaben eine Antwort geben).
Ist dieses Problem unentscheidbar? Mein Bauch sagt, dass es sein sollte, aber ich kann keine Reduzierung des Halteproblems finden. Bei einer Turing-Maschine, die möglicherweise anhält oder nicht, können wir die Maschine so einrichten, dass sie mit a endet für den Fall, dass es anhält, aber im ununterbrochenen Fall mit nichts fertig werden kann, könnte das Orakel einfach sagen in diesem Fall, ohne herausfinden zu müssen, ob die Maschine tatsächlich anhält.
Beachten Sie, dass eine Reduzierung in die andere Richtung einfach ist. Wenn Sie das Problem des Anhaltens lösen können, geben Sie ein TM ein, das entweder mit endet oder ersetzen wir die -Schreibschritt mit einer Endlosschleife zum Erstellen eines neuen TM. Wenn das neue TM anhält, sagen wir "es schreibt a"und wenn es nicht aufhört, sagen wir", schreibt es a ". Diese Antwort ist garantiert richtig, solange das TM tatsächlich mit a anhält oder , damit wir das ursprüngliche Problem lösen können.
quelle
haltify
kann das Ergebnis von auswählengood()
und ist in beiden Fällen selbstkonsistent, kehrt aber trotzdem zurück, weil (durch Voodoo-Magie)haltify(good)
angehalten wird, so dass es sich nicht um eine Endlosschleife handelt, sondern vielmehr um eine Einschränkung des Antworten. (In Wirklichkeit besteht der Weg zur Implementierunghaltify
nur darin, das Argument auszuführen. In diesem Fall werden beidegood
undevil
durch Divergenz vor Widersprüchen bewahrt, aber dann müssen wir natürlich zulassenhaltify
, dass wir auseinander gehen, was den PunktNaN
zufriedenstellendx == !x
?not float('nan')
als falsch ausgewertet.not
ist auch einer der Operatoren, die Sie nicht überladen können. es gibt immer einen Bool zurück. (Sie können eine benutzerdefinierte Konvertierung in Bool definieren, der Interpreter überprüft jedoch, ob Sie tatsächlich einen Bool zurückgegeben haben.) Selbst wenn es einen hackigen Weg gibt, einex
Python- Version zu erstellen, die zufriedenstellend istx == not x
, sollte das Beispiel nur pädagogisch korrekt und nicht pedantisch korrekt sein.Nehme an, dassM ist eine Maschine, die dieses Problem löst; Ich nehme das anM akzeptiert eine Turing-Maschine und eine Eingabe, aber Sie können festlegen, dass eine Turing-Maschine nur akzeptiert wird, wenn Sie dies bevorzugen. Wir bauen eine andere MaschineT das funktioniert wie folgt. Bei Eingabex , es läuft M an der Maschine x und Eingabe x , zeichnet die Ausgabe als auf b und schreibt 1−b in der Anfangszelle. Jetzt rennT auf sich selbst einen Widerspruch zu erreichen.
quelle
Ihre Reduzierung auf das Halteproblem ist logischerweise unkompliziert. Wenn Ihre Maschine anhält, muss sie aufgrund einer primitiven Konstruktion ihrer Eingabe in einiger Zeit T anhalten. Wenn das Halteproblem nicht lösbar ist, muss die Konstruktion verlustbehaftet sein. Daher gibt es eine Maschine, für die sie falsch vermutet und anhält, ohne vollständig bewertet zu werden, und eine lange Kette von XOR erzwingt eine vollständige Bewertung, um die richtige Antwort zu erhalten. Daher gibt es eine Maschine, für die sie die falsche Antwort liefert.
Tatsächlich reduziert sich jedes nicht triviale Problem, das nicht anhaltende Maschinen nicht als Eingabe ausschließt, auf diese Weise auf das Stoppproblem. Ref: https://en.wikipedia.org/wiki/Rice's_theorem
quelle