Theoretische Informatik
Berechenbarkeit: Turingmaschine und Halteproblem
Gibt es Aufgaben, die kein Computer jemals lösen kann? Die Antwort ist ja, und sie ist beweisbar.
Benötigte Grundlagen
Dieses Vorwissen brauchst du für das Kapitel. Schau kurz nach, wenn dir etwas davon nicht mehr präsent ist, sonst leg direkt los.
Einführung
Rechner werden schneller, Speicher größer, Verfahren besser. Es liegt nahe zu denken, dass am Ende alles nur eine Frage von genug Rechenzeit ist.
Das ist falsch, und zwar nicht ein bisschen, sondern grundsätzlich. Es gibt klar formulierte, völlig eindeutige Aufgaben, für die kein Programm existiert. Nicht heute keines, sondern nie eines, gleich mit welcher Sprache, auf welcher Maschine, mit wie viel Zeit.
Dieses Kapitel zeigt zwei Dinge: wie man überhaupt beweisen kann, was alle Programme können, und wie der Beweis für eine solche unlösbare Aufgabe aussieht. Er passt auf eine halbe Seite und gehört zu den bemerkenswertesten Ergebnissen der Informatik.
Das kannst du nach diesem Kapitel
erklären, warum man für Aussagen über alle ein präzises Maschinenmodell braucht.
Aufbau und Arbeitsweise einer Turingmaschine beschreiben (Vertiefung).
die Church-Turing-These wiedergeben und ihren Status als These einordnen.
den Begriff berechenbar verwenden und begründen, dass es nicht berechenbare Probleme gibt.
den Beweis der Unentscheidbarkeit des Halteproblems nachvollziehen.
Kurz aufgefrischt
Vorausgesetzt wird der Algorithmusbegriff aus Was ist ein Algorithmus? mit seinen Merkmalen Eindeutigkeit, Ausführbarkeit, Endlichkeit und Terminierung, dazu die Formalisierung aus Formale Sprachen.
Neu ist die Umkehrung der Fragerichtung: Bisher hieß es „wie löse ich dieses Problem?". Jetzt heißt es „gibt es überhaupt eine Lösung?".
Das Problem mit dem Wort „Algorithmus“
Das Problem mit dem Wort „Algorithmus"
Die Definition aus Klasse 9 ist für die Praxis völlig ausreichend: eine endliche Folge eindeutiger, ausführbarer Schritte. Für einen Beweis reicht sie nicht, und der Grund ist entscheidend.
Angenommen, du willst zeigen: „Für dieses Problem gibt es keinen ." Dann musst du eine Aussage über alle Algorithmen treffen, auch über die, an die noch niemand gedacht hat. Dafür brauchst du eine mathematisch exakte Fassung des Begriffs, sonst kannst du über die Gesamtheit gar nicht argumentieren.
🔴 Halte den Unterschied fest: „Ich habe keinen gefunden" ist eine Aussage über dich. „Es gibt keinen" ist eine Aussage über alle. Nur die zweite ist ein Ergebnis, und sie verlangt ein präzises Modell.
Vertiefung: die Turingmaschine
Dieser Abschnitt gehört zum erhöhten Anforderungsniveau.
Alan Turing schlug 1936 ein Modell vor, das absichtlich so einfach wie möglich ist:
- Ein Band, unendlich lang, in Felder eingeteilt, in jedem Feld ein Zeichen.
- Ein Schreib-Lese-Kopf, der genau ein Feld sieht.
- Eine endliche Menge von , dazu ein Startzustand.
- Eine : Aus (Zustand, gelesenes Zeichen) folgt (neuer Zustand, zu schreibendes Zeichen, Bewegung des Kopfes: links, rechts oder stehen bleiben).
Das ist alles. Es gibt keine , keine , keine .
Du erkennst darin den endlichen Automaten wieder, allerdings mit einem entscheidenden Zusatz: Die Turingmaschine kann schreiben und sich in beide Richtungen bewegen. Genau daran scheiterte der endliche Automat im vorigen Kapitel; er konnte sich nur seinen Zustand merken, und davon gibt es endlich viele. Das Band ist unbegrenzt und ersetzt den fehlenden Speicher.
Beispielhafte Arbeitsweise einer Maschine, die eine Folge von Einsen um eine verlängert:
| Zustand | gelesen | schreibe | bewege | neuer Zustand |
|---|---|---|---|---|
| 1 | 1 | rechts | ||
| leer | 1 | stehen |
Die Maschine läuft über alle Einsen nach rechts, findet das erste leere Feld, schreibt dort eine Eins und hält an. So mühsam das aussieht: Auf diese Weise lässt sich jede Berechnung ausdrücken, die ein heutiger Rechner ausführt.
Die Maschine beginnt
Das ist die ganze Maschine: ein Band, ein Kopf, ein . Keine , keine , keine . Die Regelzeile darunter liest sich so: Steht die Maschine in und liest eine , dann schreibt sie eine (also nichts Neues), geht ein Feld nach rechts und bleibt in . Beachte die gestrichelten Enden, das Band ist unbegrenzt, und genau darin liegt der Unterschied zum endlichen des vorigen Kapitels. Der konnte sich nur seinen Zustand merken, und davon gibt es endlich viele; hier ersetzt das Band den fehlenden Speicher.
Die zweite Regel greift
Dieselbe Maschine, drei Schritte später. Am Band hat sich nichts geändert, nur der Kopf ist gewandert, die erste Regel schrieb ja bloß dieselbe zurück. Jetzt liest er ein leeres Feld, und dafür gilt die andere Zeile der : schreibe , bleib stehen, geh nach . Danach steht auf dem Band , und die Maschine hält. Achte auf das Leerzeichen ␣: Es ist ein eigenes Zeichen des Bandalphabets, nicht die Ziffer 0. Stünde dort eine 0, griffe eine andere Regel: oder gar keine. So mühsam das wirkt: Auf genau diese Weise lässt sich jede Berechnung ausdrücken, die ein heutiger Rechner ausführt.
Die Church-Turing-These
Nun die zentrale Behauptung:
Church-Turing-These: Alles, was im intuitiven Sinn „ berechenbar" ist, lässt sich von einer Turingmaschine berechnen.
🔴 Beachte das Wort These. Es ist kein Satz, und es kann keiner sein. Auf der einen Seite steht ein mathematisch exakter Begriff (Turingmaschine), auf der anderen ein umgangssprachlicher („was man ausrechnen kann"). Zwischen einem exakten und einem unscharfen Begriff kann es keine bewiesene Gleichheit geben.
Was es dafür gibt, ist außerordentlich starke Evidenz: Mehrere unabhängig entwickelte Modelle, darunter Turings Maschine, Churchs Lambda-Kalkül und die Funktionen, stellten sich alle als gleich mächtig heraus. Verschiedene Menschen mit verschiedenen Ansätzen landeten bei genau derselben Grenze. Seit 1936 wurde kein Verfahren gefunden, das mehr kann.
Der praktische Nutzen der These ist groß: Wenn man zeigt, dass eine Turingmaschine etwas nicht kann, dann kann es kein Rechner und keine Programmiersprache. Deshalb sind alle üblichen Sprachen im Kern gleich mächtig; sie unterscheiden sich in Bequemlichkeit, nicht in der Menge lösbarer Probleme. Man nennt das turingvollständig.
Berechenbar und nicht berechenbar
Ein Problem heißt berechenbar, wenn es einen gibt, der für jede Eingabe nach endlich vielen Schritten das richtige Ergebnis liefert. Bei Ja-Nein-Fragen sagt man auch entscheidbar.
Dass es nicht berechenbare Probleme geben muss, lässt sich schon durch Abzählen einsehen:
Programme sind abzählbar. Jedes Programm ist ein endlicher Text über einem endlichen Zeichenvorrat. Man kann alle solchen Texte der Länge nach ordnen und durchnummerieren. Es gibt also „nur" abzählbar unendlich viele Programme.
Probleme sind überabzählbar. Eine Ja-Nein-Frage über allen möglichen Eingaben ist im Kern eine Funktion von den natürlichen Zahlen nach . Von diesen gibt es überabzählbar viele, wie Cantors Diagonalargument zeigt.
Folgerung: Es gibt echt mehr Probleme als Programme. Also müssen Probleme ohne Programm existieren, und zwar unvergleichlich viel mehr als lösbare.
Dieses Argument ist elegant, aber unbefriedigend: Es sagt, dass es solche Probleme gibt, ohne eines zu nennen. Turing lieferte ein konkretes.
Zwei Unendlichkeiten, nicht gleich groß
Beide Spalten sagen „unendlich“, und trotzdem ist die rechte echt größer. Das ist der überraschende Teil, und er ist reines Abzählen: Programme lassen sich durchnummerieren, Ja-Nein-Fragen über allen Eingaben nicht. Daraus folgt zwingend, dass es Probleme geben muss, für die kein Programm existiert, ohne dass man ein einziges davon kennen müsste. Genau das ist die Schwäche dieses Arguments: Es ist elegant und unbefriedigend, weil es nichts benennt. Turing lieferte deshalb ein konkretes Beispiel, und das steht im nächsten Abschnitt.
Das Halteproblem
Halteproblem: Gibt es ein Programm , das für ein beliebiges Programm und eine beliebige Eingabe zuverlässig entscheidet, ob bei Eingabe anhält oder ewig läuft?
Die Frage ist alles andere als akademisch. Ein solches Programm wäre das perfekte Werkzeug gegen Endlosschleifen, und jede Entwicklungsumgebung hätte es eingebaut.
Turings Antwort: Ein solches kann es nicht geben. Der Beweis:
Annahme: existiere und liefere immer nach endlicher Zeit „hält" oder „hält nicht".
Schritt 1: Konstruktion: Wir bauen daraus ein neues Programm , das genau eine Eingabe nimmt, nämlich ein Programm :
T(P):
wenn H(P, P) sagt "hält":
wiederhole endlos // T läuft absichtlich ewig
sonst:
halte an // T hält absichtlich sofort
tut also immer das Gegenteil dessen, was für mit sich selbst als Eingabe vorhersagt. Beachte: ist erlaubt, denn ein Programm ist ein Text und darf als Eingabe dienen. Genau das tut jeder Übersetzer, der Quelltext liest.
Schritt 2: Selbstanwendung: Was macht , wenn man ihm selbst gibt, also ?
Fall 1: sagt „hält". Dann geht nach Konstruktion in die Endlosschleife, hält also nicht. hat falsch vorhergesagt.
Fall 2: sagt „hält nicht". Dann hält nach Konstruktion sofort an. hat wieder falsch vorhergesagt.
Schritt 3: Widerspruch: In beiden Fällen irrt , obwohl es nach Annahme immer richtig liegt. Die Annahme ist also falsch.
Ergebnis: Das Halteproblem ist unentscheidbar. Ein allgemeiner Endlosschleifen-Prüfer kann nicht existieren.
Das Programm T, gebaut aus H
Dieses kleine Diagramm ist der ganze Beweis. Angenommen, es gäbe , das für jedes Programm und jede Eingabe zuverlässig sagt, ob es hält, dann könnte man daraus dieses bauen: Es fragt und tut dann das Gegenteil. Und nun gib sich selbst als Eingabe. Sagt „hält“, geht nach dem linken Weg in die Endlosschleife und hält also nicht. Sagt „hält nicht“, hält nach dem rechten Weg sofort. In beiden Fällen irrt , obwohl es nach Annahme nie irrt. Also gibt es nicht: Ein allgemeiner Endlosschleifen-Prüfer ist nicht bloß schwer zu bauen, sondern beweisbar unmöglich.
Was das bedeutet, und was nicht
Was folgt nicht: dass man nie erkennen kann, ob ein Programm hält. Für viele einzelne Programme ist das leicht. Eine von 1 bis 100 hält offensichtlich.
Was folgt: Es gibt kein Verfahren, das das für jedes Programm richtig entscheidet. Die Aussage betrifft die Allgemeinheit, nicht den Einzelfall.
Daraus ergibt sich der Alltag der Softwarewerkzeuge. Ein Übersetzer, der vor möglichen Endlosschleifen warnt, arbeitet zwangsläufig unvollständig: Er meldet manche Fälle und übersieht andere, oder er warnt gelegentlich zu Unrecht. Beides ist keine Schlamperei, sondern die einzige Möglichkeit. Dasselbe gilt für Virenscanner, statische Codeprüfer und automatische Programmverifikation. Wer ein Werkzeug verspricht, das „alle Fehler dieser Art zuverlässig findet", verspricht etwas beweisbar Unmögliches.
Eine Turingmaschine Schritt für Schritt
Die Maschine mit den (Start) und und der Tabelle aus dem Theorieteil bekommt das Band mit dem Kopf auf dem ersten Feld. Führe sie aus.
- 1
Tabelle zur Hand nehmen:
Zustand gelesen schreibe bewege neuer Zustand 1 1 rechts leer 1 stehen - 2
Schritt 1: Zustand , gelesen . Also: schreiben (nichts ändert sich), nach rechts, bleibt . Band , Kopf auf Feld 2.
- 3
Schritt 2: Zustand , gelesen . Dasselbe noch einmal. Band unverändert, Kopf auf Feld 3.
- 4
Schritt 3: Zustand , gelesen leer. Zweite Zeile greift: schreiben, stehen bleiben, Zustand .
- 5
Band jetzt , Zustand . Die Maschine hält, weil für keine Zeile existiert.
- 6
Was hat sie geleistet? Aus zwei Einsen wurden drei, also . Sie zählt eins hinzu. Das wirkt lächerlich aufwendig, und genau darin liegt der Punkt: Weil das Modell so wenig kann, ist eine Aussage über alles, was es kann, überhaupt erst beweisbar.
Band , Halt in . Die Maschine berechnet die Nachfolgerfunktion.
Den Halteproblem-Beweis nachvollziehen
Warum genügt es, mit sich selbst aufzurufen, um zu widerlegen?
- 1
Was nach Annahme leistet: Für jedes Paar liefert es nach endlicher Zeit die richtige Antwort. Das ist eine sehr starke Zusage, und genau sie soll widerlegt werden.
- 2
Was tut: fragt und macht dann das Gegenteil. Sagt „hält", läuft ewig; sagt „hält nicht", hält an.
- 3
Warum erlaubt ist: Ein Programm ist ein Text und darf als Eingabe dienen. Übersetzer, Virenscanner und Editoren lesen ständig Programmtexte als . als Eingabe für ist also nichts Exotisches.
- 4
Fall 1: sagt „hält". Dann geht in die Endlosschleife, hält also nicht. Die Vorhersage war falsch.
- 5
Fall 2: sagt „hält nicht". Dann hält sofort. Wieder falsch.
- 6
Warum es keinen dritten Fall gibt: liefert nach Annahme immer eine der beiden Antworten. Es darf weder schweigen noch selbst ewig laufen. Damit sind die Fälle vollständig.
- 7
Schluss: Aus der Annahme folgt, dass sich irrt, obwohl es sich nach Annahme nie irrt. Ein Widerspruch, also war die Annahme falsch: existiert nicht.
Die Selbstanwendung erzeugt einen Fall, in dem jede mögliche Antwort von sich selbst widerlegt. Deshalb kann nicht existieren.
Typischer Fehler
„Das Halteproblem heißt, dass man bei einem Programm nie wissen kann, ob es anhält."
Das ist eine deutliche Übertreibung, und sie verwechselt „für alle" mit „für jedes einzelne".
Bei sehr vielen Programmen ist die Frage leicht zu beantworten. Eine von 1 bis 100 hält, das sieht man sofort. Ein Programm, das nur aus Zuweisungen besteht, hält immer. Und hält offensichtlich nie.
Bewiesen ist etwas anderes: Es gibt kein einziges Verfahren, das die Frage für jedes beliebige Programm richtig beantwortet. Die Unmöglichkeit steckt in der Allgemeinheit, nicht im Einzelfall.
Der Unterschied ist derselbe wie bei der Aussage „es gibt keine Formel, die alle Primzahlen erzeugt" gegenüber „man kann nicht wissen, ob 17 prim ist". Die erste ist ein Ergebnis, die zweite ist unsinnig.
Praktisch heißt das: Werkzeuge, die vor Endlosschleifen warnen, sind sinnvoll und nützlich. Sie können nur nicht vollständig und immer korrekt zugleich sein. Entweder übersehen sie Fälle oder sie warnen manchmal zu Unrecht, und diese Lücke ist beweisbar unvermeidlich.
Übung 1
leichta) Nenne die vier Bestandteile einer Turingmaschine. b) Was unterscheidet sie von einem endlichen ? c) Warum ist die Church-Turing-These eine These und kein Satz?
Tipp anzeigen
Zu b): Was konnte der endliche Automat im vorigen Kapitel nicht?
Lösung anzeigen
a) Ein unbegrenztes Band mit Feldern, ein Schreib-Lese-Kopf, endlich viele und eine Übergangstabelle, die aus Zustand und gelesenem Zeichen den neuen Zustand, das zu schreibende Zeichen und die Kopfbewegung bestimmt.
b) Zwei Dinge: Die Turingmaschine kann schreiben und sie kann sich in beide Richtungen bewegen. Damit hat sie unbegrenzten Speicher. Der endliche Automat merkt sich nur seinen Zustand, und davon gibt es endlich viele; genau daran scheiterte er bei .
c) Weil sie einen mathematisch exakten Begriff (turingberechenbar) mit einem umgangssprachlichen Begriff (intuitiv berechenbar) gleichsetzt. Ein Beweis verlangt auf beiden Seiten exakte Begriffe. Für die These spricht sehr starke Evidenz, weil mehrere unabhängig entwickelte Modelle sich als gleich mächtig erwiesen haben.
Detaillierte Schritterklärung anzeigen
Hier wird jeder Schritt einzeln erklärt, vor allem, warum er gemacht wird.
✦ Empfohlen: Standard – Die normale Erklärungstiefe passt zum Einstieg.
- 1
a) Die vier Bestandteile und was jeder leistet
Ein unbegrenztes Band mit Feldern (der Speicher), ein Schreib-Lese-Kopf (der Zugriff), endlich viele Zustände (das Gedächtnis fester Größe) und eine Übergangstabelle, die aus Zustand und gelesenem Zeichen den neuen Zustand, das zu schreibende Zeichen und die Kopfbewegung bestimmt.
- 2
b) Der Unterschied zum endlichen Automaten: schreiben und zurückgehen
Zwei Dinge: Die Turingmaschine kann schreiben, und sie kann sich in beide Richtungen bewegen. Damit hat sie unbegrenzten Speicher. Der endliche Automat merkt sich nur seinen Zustand, und davon gibt es endlich viele, genau daran scheiterte er bei .
- 3
c) Warum die Church-Turing-These eine These bleibt
Weil sie einen mathematisch exakten Begriff (turingberechenbar) mit einem umgangssprachlichen gleichsetzt (intuitiv berechenbar). Ein Beweis verlangt auf beiden Seiten exakte Begriffe. Hier ist eine Seite unscharf, also ist ein Beweis unmöglich.
Übung 2
mittela) Erkläre in eigenen Worten, was das Halteproblem fragt. b) Warum ist es zulässig, ein Programm als Eingabe für ein Programm zu verwenden? c) Führe den Widerspruch für beide Fälle vor. d) Ein Anbieter wirbt: „Unser Werkzeug findet garantiert jede Endlosschleife in Ihrem Quelltext." Beurteile das.
Tipp anzeigen
Zu d): Was müsste das Werkzeug leisten, wenn man ihm ein beliebiges Programm gibt?
Lösung anzeigen
a) Es fragt, ob es ein Programm gibt, das für jedes Programm und jede Eingabe zuverlässig und nach endlicher Zeit entscheidet, ob bei anhält oder ewig läuft.
b) Weil ein Programm nichts anderes ist als ein endlicher Text. Als Text lässt es sich einlesen und verarbeiten wie jede andere Zeichenfolge. Genau das tun Übersetzer, Editoren und Virenscanner täglich.
c) Sei das Programm, das befragt und dann das Gegenteil tut. Betrachte : Fall 1: „hält". Dann geht in die Endlosschleife, hält also nicht → irrt. Fall 2: „hält nicht". Dann hält an → irrt. Weitere Fälle gibt es nicht, weil nach Annahme immer eine der beiden Antworten liefert. Also irrt in jedem Fall, im Widerspruch zur Annahme.
d) Die Werbung verspricht etwas beweisbar Unmögliches, sofern „garantiert jede" wörtlich gemeint ist. Ein solches Werkzeug wäre genau das aus dem Beweis. Sinnvolle Werkzeuge dieser Art arbeiten deshalb notwendig unvollständig: Sie erkennen bestimmte Muster zuverlässig, übersehen andere oder melden gelegentlich einen Fall, der in Wahrheit keiner ist. Das ist keine Schwäche des Anbieters, sondern eine Grenze des Möglichen, und eine ehrliche Formulierung wäre „erkennt die häufigsten Muster".
Detaillierte Schritterklärung anzeigen
Hier wird jeder Schritt einzeln erklärt, vor allem, warum er gemacht wird.
✦ Empfohlen: Standard – Die normale Erklärungstiefe passt zum Einstieg.
- 1
Teil a): Die Quantoren richtig setzen
Die entscheidenden Wörter sind jedes Programm und jede Eingabe. Ohne sie beschreibt man ein triviales Problem, denn für einzelne Programme ist die Frage oft leicht.
Zwischenergebnis
Gefordert ist ein Verfahren für alle Paare .
Zusätzlich muss selbst immer anhalten. Ein , das bei schwierigen Fällen einfach ewig rechnet, wäre wertlos und entginge dem Beweis nur scheinbar.
- 2
Teil b): Programm als Text
Ein Programm liegt als Zeichenfolge vor. Alles, was Zeichenfolgen verarbeiten kann, kann daher auch Programme verarbeiten.
Zwischenergebnis
ist eine gewöhnliche Eingabe, kein Trick.
- 3
Teil c): Beide Fälle vollständig durchführen
Man setzt selbst als Eingabe ein und geht die zwei möglichen Antworten von durch. In beiden entsteht das Gegenteil der Vorhersage.
H(T,T) = \text{„hält"} ;\Rightarrow; T(T) \text{ hält nicht}
Zwischenergebnis
Beide Antworten widerlegen sich selbst.
- 4
Teil d): Werbung gegen den Satz halten
Man prüft, ob das Versprechen genau die widerlegte Zusage macht: für jedes Programm zuverlässig entscheiden. Tut es das, ist es unhaltbar.
Zwischenergebnis
„Garantiert jede" = das unmögliche .
Vorsicht vor der Gegenübertreibung. Werkzeuge dieser Art sind trotzdem nützlich; sie müssen nur entweder Fälle übersehen oder gelegentlich falschen Alarm geben.
Übung 3
schwera) Begründe mit einem Abzählargument, dass es nicht berechenbare Probleme geben muss. b) Warum ist dieses Argument allein unbefriedigend? c) Eine Programmiersprache verbietet Endlosschleifen, indem jede eine feste Obergrenze für die Durchläufe angeben muss. Was gewinnt man, was verliert man? d) Erkläre, warum aus der Church-Turing-These folgt, dass eine neue Programmiersprache das Halteproblem nicht lösen kann.
Tipp anzeigen
Zu c): Terminiert jetzt jedes Programm? Und was heißt das für das Halteproblem in dieser Sprache?
Lösung anzeigen
a) Jedes Programm ist ein endlicher Text über einem endlichen Zeichenvorrat. Man kann alle solchen Texte nach Länge und innerhalb gleicher Länge alphabetisch ordnen und durchnummerieren; es gibt also abzählbar unendlich viele Programme. Ein Ja-Nein-Problem über allen Eingaben entspricht dagegen einer Funktion von den natürlichen Zahlen nach , und von diesen gibt es nach Cantors Diagonalargument überabzählbar viele. Da es echt mehr Probleme als Programme gibt, kann nicht jedes Problem ein Programm haben.
b) Weil es ein reines Existenzargument ist. Es zeigt, dass es unlösbare Probleme gibt, benennt aber kein einziges. Für die Informatik ist das wenig wert, denn interessant sind konkrete Fragen. Turings Beitrag ist gerade, ein konkretes, praktisch bedeutsames Problem anzugeben, nämlich das Halteproblem.
c) Gewonnen: In dieser Sprache hält jedes Programm, denn jede Schleife endet spätestens nach der angegebenen Obergrenze. Das Halteproblem ist damit trivial entscheidbar; die Antwort lautet immer „hält". Das ist für sicherheitskritische Bereiche durchaus erwünscht.
Verloren: Die Sprache ist nicht mehr turingvollständig. Es gibt berechenbare Probleme, die sie nicht mehr ausdrücken kann, denn manche Verfahren brauchen eine Schleife, deren Durchlaufzahl sich vorher nicht angeben lässt. Ein einfaches Beispiel ist „lies Eingaben, bis der Benutzer aufhört". Die Beschränkung ist also kein geschickter Ausweg um den Satz herum, sondern ein Tausch: Sicherheit gegen Ausdrucksstärke. Genau deshalb bleibt der Satz unberührt, denn er handelt von Sprachen, die alles Berechenbare ausdrücken können.
d) Die These besagt, dass alles intuitiv Berechenbare turingberechenbar ist. Eine neue Sprache, deren Programme im üblichen Sinn ausführbar sind, kann daher nichts berechnen, was eine Turingmaschine nicht berechnet. Da das Halteproblem für Turingmaschinen unentscheidbar ist, ist es auch in der neuen Sprache unentscheidbar. Der Beweis selbst kommt sogar ohne die These aus: Er benutzt nur, dass sich aus konstruieren lässt, und das ginge in jeder Sprache, in der überhaupt schreibbar wäre.
Detaillierte Schritterklärung anzeigen
Hier wird jeder Schritt einzeln erklärt, vor allem, warum er gemacht wird.
✦ Empfohlen: Standard – Die normale Erklärungstiefe passt zum Einstieg.
- 1
a) Zwei Unendlichkeiten vergleichen: Programme gegen Probleme
Jedes Programm ist ein endlicher Text über einem endlichen Zeichenvorrat. Man kann alle solchen Texte nach Länge und innerhalb gleicher Länge alphabetisch ordnen und durchnummerieren. Es gibt also abzählbar unendlich viele Programme. Ein Ja-Nein-Problem entspricht dagegen einer Funktion von den natürlichen Zahlen nach , und davon gibt es nach Cantors Diagonalargument überabzählbar viele.
- 2
b) Warum das Abzählargument allein unbefriedigend ist
Weil es ein reines Existenzargument ist. Es zeigt, dass es unlösbare Probleme gibt, benennt aber kein einziges. Für die Informatik ist das wenig wert, denn interessant sind konkrete Fragen.
- 3
c) Was eine Sprache ohne Endlosschleifen gewinnt
Gewonnen: In dieser Sprache hält jedes Programm, denn jede Schleife endet spätestens nach der angegebenen Obergrenze. Das Halteproblem ist damit trivial entscheidbar, die Antwort lautet immer „hält“. Für sicherheitskritische Bereiche ist das durchaus erwünscht.
- 4
c) Was sie verliert: Turingvollständigkeit
Verloren: Die Sprache ist nicht mehr turingvollständig. Es gibt berechenbare Probleme, die sie nicht mehr ausdrücken kann, denn manche Verfahren brauchen eine Schleife, deren Durchlaufzahl sich vorher nicht angeben lässt, etwa „lies Eingaben, bis der Benutzer aufhört“.
- 5
d) Warum keine neue Sprache das Halteproblem lösen kann
Die Church-Turing-These besagt, dass alles intuitiv Berechenbare turingberechenbar ist. Eine neue Sprache, deren Programme im üblichen Sinn ausführbar sind, kann daher nichts berechnen, was eine Turingmaschine nicht berechnet. Da das Halteproblem für Turingmaschinen unentscheidbar ist, ist es auch in der neuen Sprache unentscheidbar.
Zusammenfassung
Um zu beweisen, dass ein Problem von keinem gelöst wird, braucht man eine exakte Fassung des Algorithmusbegriffs; die Turingmaschine aus Band, Kopf, endlichen und leistet das, indem sie gegenüber dem endlichen Automaten Schreiben und Rückwärtsbewegung erlaubt. Die Church-Turing-These setzt intuitive und turingmäßige Berechenbarkeit gleich; sie bleibt eine These, weil ein umgangssprachlicher Begriff beteiligt ist, wird aber dadurch gestützt, dass mehrere unabhängig entwickelte Modelle sich als gleich mächtig erwiesen. Ein Abzählargument zeigt bereits, dass es überabzählbar viele Probleme, aber nur abzählbar viele Programme gibt, benennt jedoch kein konkretes unlösbares Problem. Turing lieferte eines: Das Halteproblem ist unentscheidbar, bewiesen durch ein Programm, das das Gegenteil der eigenen Vorhersage tut und auf sich selbst angewendet wird. Daraus folgt nicht, dass man bei einem einzelnen Programm nichts über das Halten wüsste, wohl aber, dass jedes Werkzeug zur automatischen Fehlersuche notwendig unvollständig bleibt.


