Das Halteproblem

Aus Einführung in die Theoretische Informatik und in die Mathematische Logik
Wechseln zu: Navigation, Suche

Wie schon bei der universellen Registermaschine gesehen, kann man Programme schreiben, die wiederum Dinge mit anderen Programmen machen, zum Beispiel sie auszuführen. Man könnte sie aber auch anderweitig analysieren.

Nun ist ein wichtiges Problem bei solchen Maschinen, ob sie jemals halten werden, also jemals eine End-Anweisung erreichen. Alan Turing stellte sich die Frage, ob man dies im Allgemeinen lösen könnte. Das Problem nennt sich Halteproblem.

Formaler ist die Frage, ob es ein Programm $M$ mit Eingaben $R_1$ und $R_2$ gibt, sodass in $R_1$ ein codierter Programmcode steht (wie vorhin bei der universellen Registermaschine), und in $R_2$ eine codierte Folge von Registern als Eingabe (ebenfalls analog zur universellen Registermaschine), sodass $M$ genau dann $R_3$ auf $0$ gesetzt lässt, wenn dieses Programm mit den gegebenen Eingaben terminiert.

Nehmen wir an, ein solches Programm $M$ würde existieren. Wir können daraus ein Programm $N$ generieren, das folgendes tut:

   "führe M aus"
   if R[3] == 0 then goto Loop
   End
   Loop: goto Loop

Dieses Programm würde genau dann terminieren, wenn das in $R_1$ codierte Programm mit den in $R_2$ codierten Registerbelegungen nicht terminiert. Nun modifizieren wir das Programm erneut, und erhalten das Programm $O$:

   "setze R[2] auf <R[1]>"
   "führe M aus"
   if R[3] == 0 then goto Loop
   End
   Loop: goto Loop

$O$ terminiert genau dann, wenn das in $R_1$ codierte Programm mit sich selbst als Eingabe terminiert. Man nennt solche Programme self-accepting. Sei nun $O$ codiert durch $o$. Dann können wir $O(o)$ berechnen, also $O$ mit $R_1=o$. Die Frage ist nun, ob $O(o)$ terminiert.

Angenommen, $O(o)$ terminiert. Das bedeutet, dass in $O$ nach der Ausführung von $M$ gilt $R_3=0$. Also würde $O(o)$ nicht terminieren. Widerspruch.

Angenommen, $O(o)$ terminiert nicht. Das bedeutet, dass in $O$ nach der Ausführung von $M$ gilt $R_3\neq 0$. Also würde $O(o)$ terminieren. Widerspruch.

Beide möglichen Fälle sind widersprüchlich. Das bedeutet, dass es ein solches Programm $M$ nicht geben kann. Das Halteproblem ist nicht lösbar.