Grundlagen

Turingmaschine

Ein Band, ein Kopf, eine Tabelle mit Regeln – mehr braucht es nicht, um alles zu berechnen, was ein Computer je berechnen kann. Wie Alan Turing 1936 das Rechnen auf das Wesentliche reduzierte, und warum dieses Spielzeug bis heute der Maßstab ist.

Lesestand

Eine Turingmaschine besteht aus einem unendlich langen Band mit Feldern, einem Kopf, der ein Feld lesen und beschreiben und sich nach links oder rechts bewegen kann, und einer endlichen Regeltabelle: „Im Zustand q, wenn du x liest: schreibe y, gehe nach links oder rechts, wechsle in Zustand p.“ Das ist alles.

Der Unterschied zum endlichen Automaten ist das Band: unbegrenzter Speicher, den die Maschine beliebig oft lesen und überschreiben kann. Damit kann sie – so die Church-Turing-These – alles berechnen, was überhaupt berechenbar ist. Jeder Computer, jede Programmiersprache kann nicht mehr; sie sind nur unvergleichlich schneller und bequemer.

Turings Idee

Alan Turing suchte 1936 eine Antwort auf eine Frage des Mathematikers David Hilbert: Gibt es ein mechanisches Verfahren, das für jede mathematische Aussage entscheidet, ob sie beweisbar ist? Dazu musste er erst einmal festlegen, was „mechanisches Verfahren“ überhaupt heißt. Er stellte sich einen Menschen vor, der mit Bleistift auf kariertem Papier rechnet – und strich alles weg, was nicht nötig ist:

Papier

Das Band

Zweidimensionales Papier ist nicht nötig, eine lange Reihe von Feldern reicht. Jedes Feld enthält ein Zeichen aus einem endlichen Alphabet – oder ist leer.

Blick

Der Kopf

Der Rechner sieht immer nur ein Feld zugleich. Er kann es überschreiben und einen Schritt nach links oder rechts gehen.

Gedanken

Die Zustände

Der Rechner hat nur endlich viele „Geisteszustände“ – etwa „ich trage gerade eine 1 über“. Was er sich darüber hinaus merken muss, schreibt er aufs Band.

Das Ergebnis ist eine Maschine, die so einfach ist, dass man über sie mathematisch exakte Aussagen beweisen kann – und gleichzeitig so mächtig, dass niemand seither ein Verfahren gefunden hat, das sie nicht nachbilden könnte.

Eine Turingmaschine zum Mitklicken

Drei kleine Programme. Gelesen wird immer das hervorgehobene Feld unter dem Kopf; in der Tabelle ist die Regel markiert, die als Nächstes greift.

Band, Kopf, Regeln
▼ Kopf

Bei aⁿbⁿ sieht man den Unterschied zum endlichen Automaten: Der Automat scheiterte, weil er nicht beliebig weit zählen kann. Die Turingmaschine zählt gar nicht – sie markiert auf dem Band: ein a abhaken, das passende b suchen und abhaken, zurück, von vorn. Der Speicher wächst mit der Eingabe.

Einfach, aber langsam

Der Preis für die Einfachheit: Der Kopf muss ständig hin- und herlaufen. Für aⁿbⁿ braucht die Maschine ungefähr 2n² Schritte – ein Java-Programm mit einem Zähler käme mit einem Durchlauf aus:

Schritte für aⁿbⁿ
n

Das ist kein Mangel des Modells, sondern Absicht: Für die Frage, ob etwas berechenbar ist, spielt die Geschwindigkeit keine Rolle. Und für die Frage, wie schnell, gilt eine beruhigende Tatsache: Turingmaschine und echter Rechner simulieren einander mit höchstens polynomiellem Mehraufwand. Ein Problem, das auf dem einen in Polynomialzeit lösbar ist, ist es auch auf dem anderen – deshalb kann die Komplexitätstheorie die Klasse P mit der Turingmaschine definieren.

Die Church-Turing-These

Fast gleichzeitig mit Turing entwickelte Alonzo Church den Lambda-Kalkül – ein Modell ganz ohne Band und Kopf, nur aus Funktionen, die Funktionen anwenden. Kurt Gödel und andere hatten die rekursiven Funktionen definiert. Es stellte sich heraus: Alle diese Modelle können genau dasselbe berechnen. Später kamen weitere hinzu, mit demselben Ergebnis:

ModellIdeeGleich mächtig?
TuringmaschineBand, Kopf, Zuständeder Maßstab
Lambda-Kalkülnur Funktionen und ihre Anwendungja – Grundlage funktionaler Sprachen
Mehrere Bändermehrere Köpfe gleichzeitigja – nur schneller
Nichtdeterministischmehrere Regeln zugleich erlaubtja – ob auch gleich schnell, ist die P-NP-Frage
RegistermaschineSpeicherzellen mit Adressen, wie ein echter Rechnerja
Zwei StapelKellerautomat mit einem zweiten Stapelja – einer reicht nicht, zwei schon
Java, Python, C …jede übliche Programmierspracheja, bei unbegrenztem Speicher

Die These lautet: Alles, was intuitiv „berechenbar“ ist, kann eine Turingmaschine berechnen. Beweisen lässt sie sich nicht, weil „intuitiv berechenbar“ kein mathematischer Begriff ist. Aber in neunzig Jahren hat niemand ein Gegenbeispiel gefunden – auch Quantencomputer nicht: Sie können manche Probleme schneller lösen, aber keine, die eine Turingmaschine grundsätzlich nicht lösen kann.

Der fleißige Biber

Wie viel kann eine Maschine mit n Zuständen tun, bevor sie anhält? Die Frage klingt harmlos, aber ihre Antworten wachsen schneller als jede berechenbare Funktion. Gemeint sind Maschinen mit zwei Zeichen, die auf einem leeren Band starten und irgendwann anhalten – gezählt wird die größte erreichbare Schrittzahl:

ZuständeHöchste SchrittzahlBekannt seit
111962
261962 – der Biber im Simulator
3211965
41071983
547 176 8702024 – bewiesen von einer Online-Gemeinschaft, maschinell geprüft
6unbekannt – eine Zahl jenseits jeder gewöhnlichen Schreibweise mit Potenzenoffen

Dass diese Werte so schwer zu finden sind, ist kein Zufall: Man müsste für jede der Maschinen entscheiden, ob sie irgendwann anhält. Und genau das ist im Allgemeinen unmöglich – das Halteproblem, Thema von G4.

Für Entwickler übersetzt

Eine Turingmaschine in Java passt auf eine Bildschirmseite – das Band als Map, damit es in beide Richtungen wachsen kann:

record Regel(char schreibe, int richtung, String neu) {}   // richtung: -1 links, +1 rechts

class Turingmaschine {
    private final Map<String, Regel> regeln = new HashMap<>();   // Schlüssel: Zustand + gelesenes Zeichen

    void regel(String zustand, char lies, char schreibe, int richtung, String neu) {
        regeln.put(zustand + lies, new Regel(schreibe, richtung, neu));
    }

    String laufe(String eingabe, String start, Set<String> halt) {
        Map<Integer, Character> band = new HashMap<>();
        for (int i = 0; i < eingabe.length(); i++) band.put(i, eingabe.charAt(i));
        String z = start;
        int kopf = 0;
        while (!halt.contains(z)) {
            char c = band.getOrDefault(kopf, '_');
            Regel r = regeln.get(z + c);
            if (r == null) return "abgelehnt";          // keine Regel: Maschine bleibt stehen
            band.put(kopf, r.schreibe());
            kopf += r.richtung();
            z = r.neu();
        }
        return z;
    }
}

Bemerkenswert ist die Umkehrung: Diese Klasse ist eine Turingmaschine, die andere Turingmaschinen ausführt – die Regeln sind nur Daten. Das ist die Idee der universellen Maschine, Thema von G3. Und es zeigt, warum man von einer Sprache sagt, sie sei Turing-vollständig: wenn man darin eine Turingmaschine simulieren kann. Dafür genügt erstaunlich wenig – bedingte Sprünge und unbegrenzt erweiterbarer Speicher.

Häufige Irrtümer

„Die Turingmaschine war ein Bauplan für Computer.“ – Sie ist ein mathematisches Modell, um zu klären, was berechenbar ist. Echte Rechner folgen eher der Von-Neumann-Architektur, die allerdings stark von Turings Gedanken beeinflusst war.
„Moderne Computer können mehr als eine Turingmaschine.“ – Sie sind schneller, aber sie können nichts berechnen, was eine Turingmaschine nicht könnte. Streng genommen können sie sogar weniger, weil ihr Speicher endlich ist.
„Das unendliche Band ist unrealistisch.“ – Jede anhaltende Berechnung benutzt nur endlich viele Felder. „Unendlich“ heißt nur: Es gibt keine feste Obergrenze, man kann bei Bedarf immer noch ein Feld anhängen.
„Die Church-Turing-These ist bewiesen.“ – Sie ist eine sehr gut gestützte Annahme, kein Satz. Bewiesen ist nur, dass die bekannten Modelle untereinander gleichwertig sind.

Verwandte Begriffe