Informatik · Klasse 12–13 · aktualisiert
Halteproblem: Unentscheidbarkeit verstehen
Du lernst, warum kein Algorithmus für alle Programme vorhersagen kann, ob sie anhalten, und wie der Widerspruchsbeweis dazu funktioniert.
0 von 10 Aufgaben gelöst
Kurz gesagt
Das Halteproblem fragt: Hält ein Algorithmus mit einer Eingabe irgendwann an oder läuft er endlos weiter? Alan Turing bewies, dass es keinen Algorithmus gibt, der das für alle Algorithmen und beliebige Eingaben beantwortet. Für viele einzelne Programme ist die Frage trotzdem leicht zu beantworten.
Stell dir vor, dein Programm läuft und läuft. Ist es nur langsam, oder hängt es für immer? Ein Werkzeug, das das für jedes Programm sicher vorhersagt, wäre extrem nützlich. Hier erfährst du, warum es ein solches Werkzeug nicht geben kann und was das genau bedeutet.
Deine Lernziele
Hake ab, was du schon kannst. Löst du alle Aufgaben eines Abschnitts, hakt Mela das Ziel für dich ab.
4 Abschnitte
Ein Algorithmus ist eine Berechnungsvorschrift: mehrere Rechenschritte nach festen Regeln. In der theoretischen Informatik führt man Algorithmen auf abstrakten Maschinen aus. Eine typische abstrakte Maschine ist die Turingmaschine.
Das Halteproblem fragt, ob die Ausführung eines Algorithmus zu einem Ende gelangt. Genauer: Eine Maschine H soll für jede Maschine T mit jeder Eingabe w entscheiden, ob T irgendwann anhält oder endlos weiterläuft. Das ist eine Ja-Nein-Frage. H bekäme dafür eine codierte Beschreibung b(T) von T und die Eingabe w. Formal ist das Halteproblem eine Eigenschaft von Paaren aus Algorithmus und Eingabe: Der Algorithmus terminiert für die Eingabe, er rechnet also nur endlich lange.
Bei vielen Programmen ist leicht zu sehen, ob sie irgendwann anhalten. Es gibt aber auch Programme, bei denen das nach dem gegenwärtigen Wissensstand noch nicht vorhergesagt werden kann. Ein Beispiel ist das Collatz-Programm unten.
Definition
Halteproblem
Das Halteproblem ist die Frage, ob ein Algorithmus mit einer Eingabe zu einem Ende kommt. Die Antwort ist „ja, er hält an“ oder „nein, er läuft endlos weiter“.
Beispiel: Das Collatz-Programm
- 1wiederhole
- 2 falls n gerade: n := n / 2
- 3 sonst: n := (3 · n) + 1
- 4bis n = 1
- 5Ausgedachte Eingabe n = 4: 4 ist gerade, also n = 2. 2 ist gerade, also n = 1. Jetzt gilt n = 1, das Programm hält.
- 6Die Collatz-Vermutung ist bisher unbewiesen. Wenn sie richtig ist, hält das Programm für jede Eingabe n mit n > 0 und n aus den natürlichen Zahlen.
Merke: Das Halteproblem ist eine Ja-Nein-Frage über ein Paar aus Algorithmus und Eingabe: Hält er irgendwann an oder läuft er endlos weiter?
Teste dich
Eine Eigenschaft heißt entscheidbar, wenn es ein Entscheidungsverfahren für sie gibt. Das ist ein Algorithmus, der für jedes Element der Menge beantworten kann, ob es die Eigenschaft hat oder nicht. Gibt es kein solches Verfahren, heißt die Eigenschaft unentscheidbar. Beispiele für entscheidbare Mengen sind alle endlichen Mengen, die Menge aller geraden Zahlen und die Menge aller Primzahlen. Zu jeder entscheidbaren Menge ist auch ihr Komplement entscheidbar.
Bei einer semi-entscheidbaren Menge wird nur für „ja“ gefordert, dass die Berechnung in endlicher Zeit anhält. Für „nein“ darf der Algorithmus ewig weiterlaufen. Semi-entscheidbare Mengen heißen auch rekursiv aufzählbar und bilden eine allgemeinere Klasse als die entscheidbaren Mengen.
Das Komplement des Halteproblems ist die Gegenfrage: Hält T mit w nicht an? Eine Maschine G, die diese Gegenfrage semi-entscheiden soll, gibt 1 aus, wenn T mit w nicht hält. Hält T mit w, dann hält G selbst nicht.
Das Halteproblem ist semi-entscheidbar, weil die Antwort „ja“ immer durch Laufenlassen des Programms gegeben werden kann. Sein Komplement ist jedoch nicht semi-entscheidbar. Und es gilt: Ist sowohl eine Menge als auch ihr Komplement semi-entscheidbar, dann ist die Menge entscheidbar. Beim Halteproblem fehlt eine der beiden Hälften.
Definition
Entscheidbar
Eine Eigenschaft ist entscheidbar, wenn ein Algorithmus für jedes Element der Menge beantworten kann, ob es die Eigenschaft hat oder nicht.
| Begriff | Was der Algorithmus leisten muss | Beispiel |
|---|---|---|
| entscheidbar | Für jedes Element „ja“ oder „nein“ beantworten | Menge aller geraden Zahlen |
| semi-entscheidbar | Nur bei „ja“ in endlicher Zeit anhalten | Halteproblem |
Merke: Menge und Komplement semi-entscheidbar: dann ist die Menge entscheidbar. Das Halteproblem ist semi-entscheidbar, sein Komplement nicht.
Teste dich
Alan Turing bewies, dass eine Maschine H, die das Halteproblem für alle Maschinen und Eingaben entscheidet, nicht existieren kann. Der Beweis wurde für Turingmaschinen geführt. Er ist indirekt: Man nimmt zuerst das Gegenteil an und führt es zu einem Widerspruch.
Schritt 1: Selbstanwendung und Umkehrung. Die Diagonalsprache ist die Menge aller Turingmaschinen, die nicht halten, wenn sie ihre eigene Kodierung als Eingabe bekommen. Das ist die Selbstanwendung: Eine Maschine bekommt ihre eigene Beschreibung als Eingabe. Angenommen, es gäbe eine Maschine F, die bei Eingabe b(T) eine 1 ausgibt, wenn T mit b(T) nicht hält, und selbst nicht hält, wenn T mit b(T) hält. Setzt du für T die Maschine F selbst ein, kehrt sich die Aussage um: F müsste bei b(F) halten, wenn F bei b(F) nicht hält, und nicht halten, wenn F bei b(F) hält. Das ist ein Widerspruch. Eine solche Maschine F kann nicht existieren.
Schritt 2: Angenommen, es gäbe eine Maschine G, die das Komplement des Halteproblems semi-entscheidet. Daraus ließe sich F bauen: F startet G einfach mit der Beschreibung b(T) doppelt hintereinander, getrennt durch ein Trennzeichen. Diese Konstruktion ist sicher möglich. F gibt es aber nicht, also kann es auch G nicht geben.
Schritt 3: Angenommen, es gäbe eine Maschine H, die 0 ausgibt, wenn T mit w nicht hält (0 = hält nicht), und 1, wenn T mit w hält (1 = hält). Daraus baut man G: Gibt H eine 0 aus, gibt G eine 1 aus. Gibt H eine 1 aus, geht G in eine Endlosschleife. Diese Konstruktion ist sicher möglich. G gibt es nicht, also kann es auch H nicht geben.
Beispiel: Die Maschine F bekommt ihre eigene Beschreibung
- 1Annahme: Es gibt eine Maschine F. Bei Eingabe b(T) gibt sie 1 aus, wenn T mit b(T) nicht hält. Hält T mit b(T), dann hält F nicht.
- 2Selbstanwendung: Für T setzen wir F selbst ein. Die Eingabe ist b(F).
- 3Fall A: F hält mit b(F) nicht. Dann müsste F halten und 1 ausgeben.
- 4Fall B: F hält mit b(F). Dann müsste F nicht halten.
- 5Beide Fälle widersprechen sich. Also kann F nicht existieren.
Merke: Die Beweiskette lautet: F gibt es nicht, also gibt es G nicht, also gibt es H nicht. So zeigt der Widerspruchsbeweis, dass das Halteproblem nicht entscheidbar ist.
Teste dich
Das Halteproblem ist für alle möglichen Algorithmen und beliebige Eingaben zusammen nicht entscheidbar. Es gibt keinen Algorithmus, der diese Frage für alle beantwortet. Für viele einzelne Algorithmen ist die Frage aber leicht zu beantworten. Auch das gleichmäßige Halteproblem ist unentscheidbar: Hält ein Algorithmus für jede Eingabe?
Das hat eine Folge: Es ist generell nicht möglich, automatisiert festzustellen, welche Programme jemals zu einem Ende finden (Terminierungsbeweis). Für bestimmte Klassen von Turingmaschinen ist das Halteproblem jedoch entscheidbar, zum Beispiel für Programme ohne Schleifen. Das gilt auch für viele schwächere Berechnungsmodelle, etwa linear beschränkte Turingmaschinen. Viele Programme in der Praxis sind außerdem so gebaut, dass man ihre Terminierung automatisch beweisen kann.
Bewiesen ist die Unentscheidbarkeit für Turingmaschinen. Mit „Algorithmus“ ist, wenn nichts anderes gesagt wird, die Turingmaschine oder ein gleichwertiges Modell gemeint. Dass sie für jeden intuitiv denkbaren Algorithmus gilt, folgt nur, wenn die Church-Turing-These wahr ist.
Unentscheidbarkeit besagt nur, dass eine Eigenschaft nicht durch einen Algorithmus berechnet werden kann. Sie darf nicht verwechselt werden mit der praktischen oder fundamentalen Unmöglichkeit, einer Aussage einen Wahrheitswert zuzuordnen. Eine einzelne Aussage ist immer entscheidbar, auch wenn ihr Wahrheitswert noch ungeklärt ist. Auch andere Fragen sind im Allgemeinen unentscheidbar, etwa ob zwei Programme dieselbe Funktion berechnen. Das folgt nach dem Satz von Rice.
Definition
Church-Turing-These
Die Church-Turing-These besagt, dass alles, was intuitiv berechenbar ist, auch von einer Turingmaschine berechenbar ist. Wenn diese Aussage wahr ist, kann das Halteproblem grundsätzlich nicht algorithmisch entschieden werden.
Merke: Nicht entscheidbar ist die Frage für alle Algorithmen und beliebige Eingaben zusammen. Für viele einzelne Programme und für bestimmte Klassen, zum Beispiel Programme ohne Schleifen, gibt es Antworten.
Teste dich
Alles auf einen Blick
Halteproblem
Halteproblem
Hält T mit der Eingabe w irgendwann an oder läuft T endlos weiter? Das ist eine Ja-Nein-Frage.
Entscheidbar
Ein Algorithmus beantwortet für jedes Element „ja“ oder „nein“.
Semi-entscheidbar
Nur bei „ja“ muss die Berechnung in endlicher Zeit anhalten.
Beweis
Annahme, Selbstanwendung und Umkehrung führen zum Widerspruch. Also gibt es F, G und H nicht.
Geltungsbereich
Unentscheidbar ist die Frage für alle Algorithmen und Eingaben zusammen, für bestimmte Klassen nicht.
Musteraufgabe · Schritt für Schritt
Drei Probleme einordnen (ausgedachte Aufgabe)
- 1Aufgabe: Ordne ein. (a) Ist eine Zahl eine Primzahl? (b) Hält T mit Eingabe w an? (c) Hält T mit Eingabe w nicht an?
- 2(a) Die Menge aller Primzahlen ist entscheidbar. Ein Algorithmus beantwortet für jede Zahl „ja“ oder „nein“.
- 3(b) Die Antwort „ja“ lässt sich durch Laufenlassen geben, also ist (b) semi-entscheidbar. Ein Entscheidungsverfahren gibt es nicht, (b) ist unentscheidbar.
- 4(c) Das ist das Komplement des Halteproblems. Es ist nicht semi-entscheidbar.
- 5Probe: Wären (b) und (c) beide semi-entscheidbar, wäre das Halteproblem entscheidbar. (c) ist es nicht, also bleibt (b) nur semi-entscheidbar.
Fehler finden
Prüfe die Aussagen zur Unentscheidbarkeit In einer Zeile steckt ein Fehler. Tippe sie an.
Fehler in Zeile 4Die Aussage verallgemeinert zu stark. Richtig: Unentscheidbar ist die Frage nur für alle Algorithmen und beliebige Eingaben zusammen. Für viele einzelne Programme ist sie leicht zu beantworten.
Lückentext
Wähl in jeder Lücke das passende Wort und prüf dann deine Antworten.
Eine Eigenschaft heißt , wenn es einen Algorithmus gibt, der für jedes Element beantwortet, ob es die Eigenschaft hat oder nicht. Bei einer semi-entscheidbaren Menge wird nur für „“ gefordert, dass die Berechnung in endlicher Zeit anhält. Die Diagonalsprache ist die Menge aller Turingmaschinen, die , wenn sie ihre eigene Kodierung als Eingabe bekommen.
Karteikasten
Erst selbst überlegen, dann umdrehen.
Übung mit Feedback