Halteproblem: Unentscheidbarkeit verstehen
Das Halteproblem fragt: Kann ein Algorithmus für jedes beliebige Programm und jede beliebige Eingabe korrekt entscheiden, ob die Ausführung irgendwann endet? Die Antwort lautet nein. Ein solcher universeller Halte-Entscheider kann nicht existieren.
Auf dieser Seite lernst du, warum bloßes Ausprobieren nicht genügt, wie der Widerspruchsbeweis funktioniert und was die Unentscheidbarkeit für praktische Programme bedeutet.
Hake ab, was du schon kannst — und komm am Ende hierher zurück!
Welche Frage stellt das Halteproblem?
Stell dir ein Prüfprogramm vor. Es erhält zwei Dinge:
- den Code eines beliebigen Programms $P$,
- eine konkrete Eingabe $w$ für dieses Programm.
Das Prüfprogramm soll immer nach endlich vielen Schritten eine korrekte Antwort geben:
- Ja: $P$ hält bei der Eingabe $w$.
- Nein: $P$ läuft bei dieser Eingabe unbegrenzt weiter.
Halteproblem
Das Halteproblem ist die Frage, ob ein beliebiges Programm bei einer vorgegebenen Eingabe irgendwann anhält. Ein Entscheider müsste jeden zulässigen Fall korrekt beantworten und dabei selbst immer halten.
Für Turingmaschinen kann die zugehörige Haltesprache so beschrieben werden:
$$K=\{b(T)*w\mid T\text{ hält bei Eingabe }w\}$$
Dabei bezeichnet $b(T)$ eine codierte Beschreibung der Turingmaschine $T$. Das Zeichen $*$ trennt die Maschinenbeschreibung von der Eingabe $w$.
Ein Programm zählt von 10 bis 0 herunter und beendet sich danach. Für dieses konkrete Programm lässt sich das Halten leicht erkennen.
Das Halteproblem verlangt jedoch viel mehr: Ein einziges Verfahren soll jedes mögliche Programm mit jeder möglichen Eingabe untersuchen. Genau diese allgemeine Forderung ist unerfüllbar.
Warum reicht eine Simulation nicht aus?
Man kann $P$ mit der Eingabe $w$ Schritt für Schritt simulieren. Hält $P$, beobachtet die Simulation dies nach endlich vielen Schritten. Der positive Fall ist damit allgemein erkennbar.
Läuft $P$ dagegen unbegrenzt, läuft auch die Simulation möglicherweise unbegrenzt. Zu keinem endlichen Zeitpunkt folgt allein aus dem bisherigen Verlauf, dass das Programm niemals mehr halten wird.
Semientscheidbarkeit
Ein Problem ist semientscheidbar, wenn ein Verfahren alle Ja-Fälle nach endlich vielen Schritten erkennt. Bei einem Nein-Fall darf das Verfahren unbegrenzt weiterlaufen. Das Halteproblem ist semientscheidbar, aber nicht entscheidbar.
Auch das Speichern schon beobachteter Zustände löst die allgemeine Aufgabe nicht. Wiederholt sich eine vollständige Konfiguration, wurde eine Schleife nachgewiesen. Zu einer Konfiguration gehören der Bandinhalt, die Position des Schreib-Lese-Kopfs und der Zustand der Turingmaschine.
Eine Turingmaschine kann jedoch immer neue Bandbereiche beschreiben. Sie kann daher unendlich laufen, ohne eine vollständige Konfiguration zu wiederholen.
Simulation bestätigt das Halten, sobald es geschieht. Aus einer bislang langen Laufzeit folgt aber nicht, dass das Programm niemals halten wird.
Wie entsteht der Widerspruch?
Der zentrale Beweis beginnt mit einer Annahme: Es gebe einen universellen Entscheider HALT(P, w). Er antworte immer korrekt und halte selbst stets an.
Aus diesem angeblichen Entscheider bauen wir ein Gegenprogramm GEGEN(P):
GEGENfragtHALT, ob das Programm $P$ bei Eingabe seines eigenen Codes $P$ hält.- Antwortet
HALTmit Nein, beendet sichGEGEN. - Antwortet
HALTmit Ja, läuftGEGENabsichtlich endlos.
Damit kehrt GEGEN die Vorhersage des Entscheiders um:
$$GEGEN(P)\text{ hält}\iff P(P)\text{ hält nicht}$$
Nun erhält GEGEN seinen eigenen Code als Eingabe. Wir betrachten also GEGEN(GEGEN).
Es gibt nur zwei mögliche Annahmen:
- `GEGEN(GEGEN)` hält. Dann müsste
HALTzuvor Nein gemeldet haben. Diese Meldung behauptet aber, dassGEGEN(GEGEN)nicht hält. - `GEGEN(GEGEN)` hält nicht. Dann müsste
HALTzuvor Ja gemeldet haben. Diese Meldung behauptet aber, dassGEGEN(GEGEN)hält.
In beiden Fällen widerspricht das tatsächliche Verhalten der angeblich korrekten Vorhersage. Das Gegenprogramm ist konstruierbar; falsch war daher die Ausgangsannahme, dass HALT existiert.
Die Beweisstruktur lautet: universellen Entscheider annehmen, ihn auf Selbstanwendung ansetzen, seine Vorhersage umkehren und dadurch einen Widerspruch erzeugen.
Was folgt aus der Unentscheidbarkeit?
Die Aussage betrifft den allgemeinen Fall. Sie bedeutet nicht, dass man bei keinem Programm etwas über die Terminierung sagen kann.
Für einzelne Programme oder eingeschränkte Programmklassen sind Terminierungsnachweise möglich. Ein Programm ohne Schleifen kann beispielsweise zu einer Klasse gehören, deren Halteverhalten entscheidbar ist. Auch eine erkannte Wiederholung einer vollständigen Konfiguration beweist eine konkrete Endlosschleife.
Compiler können außerdem syntaktische Fehler erkennen. Daraus folgt jedoch nicht, dass sie für jedes syntaktisch korrekte Programm entscheiden könnten, ob es bei jeder Eingabe hält.
Vertiefung: Halten auf leerem Band
Beim Null-Halteproblem startet eine Turingmaschine mit einem leeren Band. Diese Variante ist hinsichtlich der Entscheidbarkeit genauso schwer wie das allgemeine Halteproblem.
Zu einer Maschine $T$ und einer Eingabe $w$ lässt sich eine neue Maschine $T_w$ konstruieren:
- $T_w$ schreibt zuerst $w$ auf das leere Band.
- Danach verhält sich $T_w$ genauso wie $T$ bei der Eingabe $w$.
Daher gilt:
$$T_w\text{ hält auf leerem Band}\iff T\text{ hält bei Eingabe }w$$
Könnte man das Halten auf leerem Band allgemein entscheiden, könnte man damit auch das allgemeine Halteproblem entscheiden. Weil das unmöglich ist, ist auch das Null-Halteproblem unentscheidbar.
Karteikasten
Überlege zuerst selbst und drehe die Karte anschließend zum Prüfen um.
Alles auf einen Blick
- Halteproblem
- Fragestellung
- Hält ein beliebiges Programm bei einer konkreten Eingabe?
- Ein Entscheider müsste immer korrekt antworten und selbst halten.
- Simulation
- Haltende Ausführungen sind endlich erkennbar.
- Nichthalten ist nicht allgemein endlich erkennbar.
- Widerspruchsbeweis
- Universellen Entscheider annehmen.
- Eigenen Code als Eingabe verwenden.
- Vorhersage umkehren.
- Folgerung
- Das allgemeine Halteproblem ist unentscheidbar.
- Eingeschränkte Fälle können trotzdem analysierbar sein.
- Reduktion
- Eingabe in eine neue Maschine einbauen.
- Null-Halteproblem und allgemeines Halteproblem sind gleich schwer.
- Fragestellung
Abschluss-Check
Du hast das Lernziel erreicht, wenn du nicht nur sagen kannst, dass das Halteproblem unentscheidbar ist, sondern auch die Annahme, Selbstanwendung, Umkehrung und den entstehenden Widerspruch in eigenen Worten verbindest.
Mit Google fortfahren