Es fällt mir schwer, Turings Lösung für das Halteproblem als Logiker und nicht als Ingenieur zu sehen.
Hier ist mein Verständnis des Halteproblems:
Sei die Menge aller Turingmaschinen.
Lassen für alle die Turing - Maschinen in die Menge aller Eingänge sein .
Sei jedes Element in ein Element in .
Die booleschen Werte und seien Elemente in .
Sei eine Funktion, die zurückgibt:
- wenn und nur wenn anhält
- genau dann, wenn nicht anhält
Sei eine Turingmaschine in , die:
- ruft
- wird genau dann angehalten, wenn zurückgibt
- hört nicht genau dann auf, wenn zurückkehrt
Was passiert, wenn wir anrufen? durch Vorbeigehen zu sich selbst, ?
Der Teil, mit dem ich Probleme habe, ist die Implementierung damit es nicht aufhört wann ist . Mein Bauch versteht diesen Ansatz wie folgt:
Eine Methode gegeben das funktioniert und eine Methode entworfen, um zu brechen Wenn wir diese Methoden kombinieren, um eine Maschine zu bauen, ist diese Maschine kaputt.
Ich verstehe, dass Beweis durch Widerspruch ein gültiger Ansatz zur Problemlösung in der formalen Logik ist, aber diese spezielle Anwendung von Beweis durch Widerspruch scheint irgendwie fehlerhaft zu sein.
Was vermisse ich?
quelle
Antworten:
Im Folgenden werde ich eine Maschine unterscheidenM aus seiner Beschreibung, die die Beschreibung von bezeichnet M durch ⟨M⟩ .
Spezifikation des Stopp-Tester-Programms,H.
Angenommen, es gibt eine solche MaschineH. , wir können benutzen H. als Unterprogramm zum Erstellen eines Programms P. wie folgt:
Spezifikation des "perversen" ProgrammsP.
Der Schlüssel zu diesem Argument ist, wenn wir eine Maschine definieren könnenH. dass satiffies die Spezifikation oben, dann können wir eine Maschine bauenP. das erfüllt die zweite Spezifikation.
Jedoch,P. wenn gegeben ⟨ P⟩ zeigt unmögliches Verhalten,
DamitP. erfüllt nicht seine zweite Anforderung an mindestens einen Eingang und folglich muss es der Fall sein, dassH. kann seine Anforderung nicht erfüllen, daher können wir folglich nicht machen H. wie angegeben.
JetztH. kann sich sehr gut so verhalten, wie es bei vielen Eingaben angegeben ist ( ⟨ M⟩ , I ) Der Punkt ist jedoch, dass kein Stopp-Tester erstellt werden kann, der mit allen möglichen Eingaben funktioniert .
quelle
So könnte ein Logiker das Problem angehen:
quelle
Du sagst:
Das Problem ist, dassp() ist NICHT zum Brechen ausgelegt h() ist es konzipiert, um zu verwenden h() - und die Nutzung ist gültig UND funktioniert! Außer, es funktioniert nicht, wenn die Eingabe istp() , was beweist, dass es nicht für alle Eingaben funktioniert .
Was bedeutet, dassh() existiert bestenfalls nicht hminus() existiert. Das ist nicht wichtigp() ist kaputt, wichtig ist das h() existiert nicht.
Wenn jemand sagt, dass er geschrieben hath() Sie wissen, dass sie sich irren oder lügen, wenn sie daran arbeiten wollen h() Sie verschwenden dein Geld und so weiter.
Es legt Grenzen für das fest, was entschieden werden kann und was nicht und welche Ressourcen dafür benötigt werden.
Wenn jemand die Frage stellt: Können wir feststellen, obp() hält bei dieser Eingabe an? Die möglichen Antworten darauf sind: (a) ja - es tut, (b) ja - es tut nicht (c) ja - aber wir wissen derzeit nicht, ob es tut oder nicht und schließlich (d) nein - es ist unmöglich, den einen oder anderen Weg zu beweisen.
Es kann äußerst nützlich sein, schnell feststellen zu können, ob die Antwort (c) oder (d) lautet. Denken Sie daran, Halting sagt nicht, dass wir ein bestimmtes nicht beweisen könnenp() Halting, Halting sagt, wir können keine allgemeine Lösung haben, die für jede Eingabe funktioniert. Beschränken Sie entwederp() oder die Eingabe und die Antwort ist ziemlich häufig ja, das ist trivial.
quelle
Sie sollten nicht mit "Zerbrochenheit" darüber nachdenken, da es eine Vielzahl von absolut legitimen Programmen gibt, die für immer ausgeführt werden sollen. Daher ist es nicht unbedingt "kaputt", für immer zu laufen.
p
ist der folgende einfache Algorithmus, vorausgesetzt, wir haben bereits eine Funktionh(X,Y)
, die zurückgibt,true
wenn die MaschineX
mit der Eingabe anhält,Y
und zurückgibt,false
wenn dies nicht der Fall ist.quelle
h()
Soll "die Projektanforderungen erfüllen" (dh das Stoppproblem entscheiden). Wir gehen davon aus, dass dieses Programm existiert und funktioniert.p()
ist etwas, das einer Ihrer Programmierer geschrieben hat, während er in seiner Mittagspause herumgespielt hat. Es ist nicht so, dass es "die Projektanforderungen nicht erfüllt", es ist so, dass es ein unmögliches Programm ist: Wenn es nicht anhält, stoppt es; Wenn es anhält, hört es nicht an. Da die Annahme, dieh()
existiert und funktioniert, zu einer unmöglichen Situation geführt hat, müssen wir zu dem Schluss kommen, dassh()
es keine gibt.Es gibt einen weiteren Beweis durch Widerspruch, den Sie vielleicht besser mögen, nach dem Vorbild von Berrys Paradoxon. Für eine TuringmaschineT , Lassen N(T) die Ausgabe der Turing-Maschine sein, wenn sie auf einem leeren Band ausgeführt wird, interpretiert als Zahl; möglicherweiseN(T) ist undefiniert, wenn die Maschine nie anhält. LassenXn sei die kleinste Zahl, die von einer Turingmaschine höchstens nicht produziert werden kann n Zustände (eine solche Anzahl existiert, da es endlich viele solcher Turingmaschinen gibt). Angenommen, das Halteproblem wäre lösbar. Dann könnten wir eine Turing-Maschine konstruieren, die den folgenden Algorithmus implementiert:
Die letzten beiden Stufen können unter Verwendung einer festen Turingmaschine mit implementiert werdenC Staaten, und die erste mit einem Extra log2n Zustände. Insgesamt erhalten wir eine Turingmaschine mitlog2n+C Zustände, die berechnen Xn . Wannn groß genug ist, erreichen wir seitdem einen Widerspruch log2n+C≤n : Auf der einen Seite, Xn sollte nicht mit einer Turing-Maschine berechenbar sein n Zustände; Auf der anderen Seite berechnet die obige Maschine dies nur mitlog2n+C≤n Zustände.
Ich habe diesen Beweis von Ran Raz gehört .
quelle
Der Punkt des Halteproblems besteht darin, dass es mit einem Algorithmus unmöglich ist, zu entscheiden, ob ein gegebener Algorithmus anhält. Natürlich können Sie Algorithmen angeben, die immer anhalten (für alle gegebenen Eingaben). Sie können dies jedoch nicht für alle Algorithmen entscheiden (z. B.)p ) mit einem Algorithmus, daher kein Algorithmus h kann existieren.
Gegebenp ( p ( A ) ) ) für einen gegebenen Algorithmus EIN . Wennh sagt Ihnen EIN hält an, dann das innere p wird nicht und die äußere p wird false zurückgeben. WennM. hält das Innere nicht auf p wird nicht aufhören, sondern die äußere p wird false zurückgeben. Daher kann h nicht entscheiden, ob p anhalten wird.
quelle