Kurzfassung: Die Ausgaben der Maschinen sind nicht korrekt oder falsch, sie sind nur widersprüchlich, was beweist, dass die ursprüngliche Maschine, die entscheidet, ob die Eingabemaschine an der angegebenen Zeichenfolge anhält oder nicht, nicht existieren kann.
Lange Version : Zuerst skizzieren wir den Beweis (oder mindestens eine Version davon - es gibt viele).
- Es sei angenommen , dass wir eine Turing Maschine , ob die Turing Maschine entscheidet M stoppt am Eingang x oder nicht.HALT(⟨M⟩,x)Mx
- Verwendung von konstruieren wir eine Maschine F L I P ( ⟨ M ⟩ , x ) , die verwendet H A L T zu überprüfen , ob M stoppt auf x oder nicht, dann das Gegenteil der Fall ist, das heißt , wenn M stoppt auf x , F L I P Schleifen, wenn M nicht bei x anhält , F L I P hält an.HALTFLIP(⟨M⟩,x)HALTMxMxFLIPMxFLIP
- Schließlich schaffen wir eine TM (I guten Namen lief), die die Beschreibung eines TM und läuft nimmt F L I P mit Eingang ( ⟨ M ⟩ , ⟨ M ⟩ ) , Ausgabe unabhängig F L I P Ausgänge.C(⟨M⟩)FLIP(⟨M⟩,⟨M⟩)FLIP
Es ist wichtig zu beachten, dass jeder dieser Schritte einfach zu implementieren ist, solange der Entscheider existiert. F L I P muss nur H A L T verwenden , um zu überprüfen, was zu tun ist, und C dupliziert nur seine Eingabe, um zu F L I P zu gelangen .HALTFLIPHALTCFLIP
Der Widerspruch entsteht , wenn wir sehen , was passiert , wenn wir laufen . Entweder wird C angehalten, wenn es selbst eingegeben wird, oder nicht. H A L T wird dies entscheiden:C(⟨C⟩)CHALT
- Wenn stoppt am Eingabe ⟨ C ⟩ , H A L T wird sagen , Y e s , aber dann F L I P wird Schleife, so C Schleife wird, im Widerspruch zu H A L T .C⟨C⟩HALTYesFLIPCHALT
- Wenn auf Eingangsschleifen ⟨ C ⟩ , H A L T wird sagen , N o , aber dann F L I P wird angehalten, so dass C wird auch halt, im Widerspruch zu H A L T .C⟨C⟩HALTNoFLIPCHALT
Da jeder Schritt in der Konstruktion eindeutig korrekt ist, können wir nur den Schluss ziehen, dass nicht existieren kann; wir haben einen Fall konstruiert , wo , egal was sie sagt, H A L T nicht möglich kann entscheiden , was zu Ausgang, dh das Problem unentscheidbar ist. Nur um wirklich ein bisschen auf den Punkt zu hämmern, H A L T kann nicht existieren - das heißt, es kann kein TM geben, das das Halteproblem entscheidet -, weil es mindestens einen Fall gibt, den wir explizit konstruiert haben, in dem es kein logisches gibt mögliche Antwort. Denken Sie daran, dass ein Entscheider nicht die falsche Antwort ausgeben darf und etwas ausgeben muss, aber in dem Fall, dass wir konstruiert haben, sind beide möglichen Antworten falsch.HALTHALTHALT
Sie sprechen über zwei verschiedene Bedeutungen von „Widerspruch“.
In Ihrer Analogie widersprechen sich die Maschine A und ihre gespiegelte Modifikation nur in dem Sinne, dass ihre Ausgaben immer unterschiedlich sind. (Zum Beispiel können sie zwei Testfunktionen für ganze Zahlen implementieren, " x ≤ 5?" Und " x > 5?") Das ist sicherlich eine Sache, die "Widerspruch" im alltäglichen Gebrauch bedeuten kann, aber es ist nicht das, was damit logisch gemeint ist Beweise.
In logischen Beweisen bedeutet es etwas Stärkeres: etwas, das einfach unmöglich ist. ZB eine Funktion, die bei allen Eingaben mehr als 5 "true" und bei allen Eingaben weniger als 10 "false" zurückgibt - das ist im engeren Sinne widersprüchlich, da bei beispielsweise 7 die Ausgabe beide "true" sein müsste. und "falsch", aber das ist nicht dasselbe. Turings Argumentation zeigt, dass das Stopp-Programm im engeren Sinne widersprüchlich ist: Unter der Annahme, dass es zu etwas führt, was unmöglich ist oder bereits als falsch bekannt ist.
quelle
Hier ist ein weiterer Beweis dafür, dass das Stopp-Problem nicht zu entscheiden ist. Wir sagen, dass ein Programm einen String x ausgibt, wenn es anhält und x ausgibt . (Wenn das Programm niemals anhält, gibt es keine Zeichenfolge aus.) Definieren Sie f ( n ) als die Länge der längsten Zeichenfolge, die von einem C-Programm mit einer Länge von höchstens n ausgegeben wird .x x f(n) n
Angenommen, das Halteproblem wäre entscheidend. Dann kann mit einem C-Programm berechnet werden:f(m)
Das bedeutet, dass wir für jedes ein Programm P m schreiben können , das f ( m ) + 1 Nullen ausgibt . Wie lang ist P m ? Es gibt eine feste C-Programmvorlage mit einem Platzhalter, der P m implementiert . Der Platzhalter sollte mit der Konstante m gefüllt sein . Angabe von m Takes | m | Zeichen (hier ist | m | die Länge der Dezimaldarstellung von m ), wobei | m | ≈ log 10m Pm f(m)+1 Pm Pm m m |m| |m| m . Die Vorlage nimmt einige feste Anzahl T von Zeichen, und so die Länge von P m ist T + log 10 m . Wenn wir m groß genugwählen( m = 2 T würdeausreichen), haben wir T + log 10 m ≤ m , und so ist f ( m ) mindestens die Größe der von P m ausgegebenen Zeichenkette, dh f ( m ) ≥ f ( m ) + 1|m|≈log10m T Pm T+log10m m m=2T T+log10m≤m f(m) Pm f(m)≥f(m)+1 . Wir haben einen Widerspruch erreicht.
quelle