Bisher habe ich Themen aus den Gebieten der Grundlagen-Informatik, der technischen Informatik, der (hardwarenahen) Programmierung und der Algorithmen besprochen; nicht erwähnt wurde aber (unter anderem) die theoretische Informatik; diesen Missstand möchte ich heute beseitigen und das Wunschthema von Leser Michael beantworten: er hat eine kurze Abhandlung über die Turing-Vollständigkeit erbeten. Nun denn, auf geht’s.

Um die Turing-Vollständigkeit zu klären, muss vorher ein neues Konzept eingeführt werden, welches auch ein zentraler Bestandteil der theoretischen Informatik ist: das der Turingmaschine (benannt nach Alan Turing). Eine Turingmaschine ist (entgegen ihrem Namen) ein rein hypothetisches Modell und keine echte Maschine; sie kann auch nicht nachgebaut werden – warum, werden wir gleich sehen. Das Konzept der Turingmaschine lässt sich sowohl informell als auch formell relativ gut beschreiben; der Einfachheit halber folgt hier zuerst die informelle Beschreibung und dann – damit es komplett ist – die formale.

Eine Turingmaschine besteht im Kern aus zwei wichtigen Elementen: einem in einzelne Zellen unterteilten Speicherband, bei welchem jede Zelle ein beliebiges Zeichen aus einer Menge definierter Zeichen speichern kann, und einem Schreib-/Lesekopf, der sich auf diesem Band nach rechts und links bewegen, den Inhalt einer Zelle lesen und mit einem neuen Inhalt überschreiben kann. Für das Speicherband wird angenommen, dass es unendlich lang ist – daher die Unmöglichkeit, eine derartige Maschine zu bauen. Die auf das Band schreibbaren Zeichen können beliebige Zeichen sein, die lediglich bei der Definition der Turingmaschine als Menge, dem sogenannten Alphabet, angegeben werden müssen. Ein immer schreibbares Zeichen ist das leere Zeichen (welches einfach “nichts” repräsentiert). Eine entsprechende grafische Darstellung einer Turingmaschine könnte etwa so aussehen (Quelle: Wikipedia):

i-0945cfa57335242b218d867b81c9c451-301px-Turingmaschine.svg.png

Eine Turingmaschine arbeitet folgendermaßen: zu Beginn befindet sich auf dem Band eine zu verarbeitende Eingabe, das sogenannte Eingabewort, welches einfach aus einer Folge von Zeichen in aufeinanderfolgenden Zellen besteht (die möglichen Eingabezeichen sind eine Teilmenge des Alphabetes der Maschine); der Schreib-/Lesekopf befindet sich am Anfang des Eingabewortes. Im weiteren folgt eine feste Abfolge von Aktionen: der Schreib-/Lesekopf liest das Zeichen an seiner aktuellen Position, überschreibt es mit einem neuen Zeichen (welches auch das alte sein kann) und bewegt sich eine Stelle nach links oder rechts. Welches Zeichen geschrieben und in welche Richtung sich der Schreib-/Lesekopf bewegt, hängt vom internen Zustand der Turingmaschine ab. Der Zustand der Turingmaschine ist am besten vergleichbar mit dem Zustand eines technischen Gerätes, etwa eines Brotbackautomaten. Der kennt auch verschiedene Zustände, wie zum Beispiel “kneten”, “gehen lassen”, “backen” und ähnliches, zwischen denen er nach einem bestimmten Muster – dem Programm – wechselt. Eine Turingmaschine kann ganz analog verschiedene Zustände annehmen; abhängig vom aktuellen Zustand und dem aktuell gelesenen Zeichen wird dann wie bereits beschriebe ein neues Zeichen geschrieben und der Schreib-/Lesekopf nach rechts oder links bewegt. Gleichzeitig geht die Turingmaschine in einen neuen Zustand über (welcher auch dem alten entsprechen kann). Die Turingmaschine beginnt ihre Arbeit immer in einem Anfangszustand und endet, sobald ein vorher festgelegter Endzustand erreicht wird. Durch die Angabe, welches Zeichen bei einer bestimmten Eingabe geschrieben, wohin sich der Kopf bewegen und in welchen Zustand gewechselt werden soll, lässt sich ein beliebiges Verhalten der Maschine beschreiben. Bei geeigneter Wahl des Alphabetes kann man – mit einiger Vorstellungskraft – jedes beliebige Problem lösen (ein kleines Beispiel folgt nach der formalen Definition).

Ich hoffe, die Erklärung war jetzt einigermaßen verständlich, da nun die formale Definition der Maschine folgt. Eine Turingmaschine lässt sich als 7-Tupel, also als Zusammenschluss von 7 verschiedenen Elementen darstellen. Eine mögliche Darstellung sieht etwa so aus (bitte nicht ob der vielen seltsamen Zeichen erschrecken, eine Erklärung folgt gleich):

M = ( Q, Γ, Σ, b, δ, q0, qf )

Und hier die versprochene Erklärung der Zeichen:

  • M: bezeichnet die Turingmaschine selber
  • Q: die Menge aller Zustände; jedem Zustand wird ein Symbol oder eine Bezeichnung zugeordnet, damit er später eindeutig identifiziert werden kann
  • Γ: das Alphabet aller möglichen Zeichen, die auf das Band geschrieben werden können
  • Σ: das Alphabet der möglichen Eingabezeichen; es gilt Σ ⊆ Γ \ {b}
  • b: das leere Zeichen; es gilt b ∈ Γ
  • δ: die Überführungsfunktion; formal gilt: δ: ( Q \ { qf } ) × Γ → Q × Γ × { L, 0, R }
  • q0: der Anfangszustand der Programmabarbeitung; es gilt q0 ∈ Q
  • qf: der Endzustand, bei welchem die Programmabarbeitung abbricht; es gilt qf ∈ Q

Das einzige Mysterium dürfte eigentlich nur (für die Nichtmathematiker unter den Lesern) die Überführungsfunktion δ sein. Im Detail besagt sie aber nur, dass ein Tupel bestehend aus dem (aktuellen) Zustand und dem (aktuell gelesenen) Zeichen abgebildet werden soll auf ein Tupel bestehend aus einem Zustand (in welchen gewechselt werden soll), einem Zeichen (welches an der aktuellen Position geschrieben werden soll) und einer Richtung (in welche sich der Schreib-/Lesekopf bewegen soll).

1 / 2 / 3 / Auf einer Seite lesen

Kommentare (20)

  1. #1 rolak
    Oktober 12, 2011

    So exotisch Turing-Maschinen zu sein scheinen – die Beschäftigung mit ihnen kann durchaus spaßig sein. Sich einen 5-zuständigen fleißigen Biber zu erprobieren kann suchtgefährdend sein 😉

  2. #2 Sven Türpe
    Oktober 12, 2011
  3. #3 Marcus Frenkel
    Oktober 12, 2011

    @Sven Türpe
    Netter Link, danke. Auch wenn er meiner Aussage, dass Turingmaschinen nicht umsetzbar sind, etwas widerspricht. Aber man kann ja anführen, dass das im Link keine echte Turingmaschine ist. 😉

  4. #4 Timmorn
    Oktober 12, 2011

    Das Paper zur Turingmaschine wurde übrigens ersteinmal abgelehnt – mit einer großartigen Begründung:
    https://www.fang.ece.ufl.edu/reject.html

  5. #5 Stefan W.
    Oktober 12, 2011

    wir wir wissen, wäre das Ergebnis hierfür “10”.

    Korrekturen: **wie** wir wissen wäre das Ergebnis hierfür **”1″**.

    Beim Komma bin ich mir nicht sicher. Aber weil es auch später wiederholt wird, dass das Ergebnis der Addition von 0 und 1 10 sei, wo ich immer den Eindruck hatte, dass das das Ergebnis der Addition von 1 und 1 sei, frage ich nochmal nach – vielleicht habe ich es ja nicht verstanden.

  6. #6 Sven Türpe
    Oktober 12, 2011

    Noch ein Tipp für Bücherfreunde: The Annotated Turing geht Satz für Satz durch Turings Paper und ergänzt es um Erläuterungen, Beispiele und historische Betrachtungen.

  7. #7 schlappohr
    Oktober 12, 2011

    Im Studium haben wir die ganze Berechenbarkeitstheorie anhand der “mü”-Rekursion aufgezogen. Die Klasse dieser Funktionen ist äquivalent zur Klasse der Turing-berechenbaren Funktionen, kommt aber ohne das theoretische Modell einer Maschine aus, sondern basiert auf einer handvoll (ich glaube 3 oder 4) Grundfunktionen. Irgendwie fand ich die u-Rekursivität griffiger als Turingmaschinen, aber das ist vermutlich Geschmackssache 🙂

  8. #8 Marcus Frenkel
    Oktober 12, 2011

    @Stefan W.
    Danke für den Hinweis; natürlich kommt “01” heraus und nicht “10”. Man sollte doch keine Artikel schreiben, wenn man nebenher eigentlich ganz andere Dinge macht. Ich habe es im Artikel einmal ohne weitere Markierung korrigiert (man vergebe mir), damit die Tabellen nicht ganz so wüst aussehen.

  9. #9 Stefan W.
    Oktober 13, 2011

    Ich habe es im Artikel einmal ohne weitere Markierung korrigiert (man vergebe mir),

    Keine Ursache. Flüchtigkeitsfehler gross zu dokumentieren bringt m.E. wenig.

  10. #10 BreitSide
    Oktober 13, 2011

    xxx

  11. #11 Gustav
    Oktober 14, 2011

    Das Band muß betreffs der Länge doch nur die Bedingung erfüllen, dass der Lese/Schreibkopf bei einer Berechnung nicht an das Ende stößt.

    Nur um zu zeigen, dass eine Turingmaschine eben nicht alle Probleme lösen kann, sondern nur alle Probleme einer bestimmten Klasse von berechenbare Funktionen (Turing-Berechenbarkeit), brauche ich ein endloses Band.

    Diese Probleme sind aber nur ein “Anwendungsgebiet” der Turingmaschine. Wenn ich damit nur zeigen will, dass eine Turingmaschine eine (Turing-) berechenbare Funktion lösen kann, benötige ich doch kein endloses Band (es muß nur solange sein, dass die Berechnung ungehindert ausgeführt wird).

    Oder irre ich da?

  12. #12 Gustav
    Oktober 14, 2011

    Ach ja, The LEGO Turing Machine: https://www.youtube.com/watch?v=cYw2ewoO6c4

    😉

  13. #13 rolak
    Oktober 14, 2011

    Leider in D-Land wg A-Team gesperrt, da war der militärische Geheimdienst schneller, Gustav 😉
    Da hinten gibt es die ganzen Daten und zum clip-Anschauen reicht es schon, den Hintern bedeckt zu lassen.

  14. #14 Marcus Frenkel
    Oktober 14, 2011

    @Gustav
    Im Prinzip ist das richtig – für das Lösen eines bestimmten Problems muss das Band nur so lang sein, dass das Problem “draufpasst”. Allerdings gibt es ja auch Probleme, die nicht gelöst werden können, oder deren Lösung “unendlich lange” dauert – z.B. die Berechnung von Pi. Für derartige Probleme wird ein unendlich langes Band (und unendlich viel Zeit) benötigt; möchte man zudem eine universelle Turingmaschine konstruieren, muss man auch diese Probleme berücksichtigen und benötigt daher auch dafür ein unendlich langes Band. Daher wird im Allgemeinen gleich die Aussage getroffen, dass man für Turingmaschinen “an sich” ein unendlich langes Band braucht; aber ja, für spezielle Maschinen ist natürlich kein unendlich langes notwendig.

  15. #15 7tupel
    Oktober 14, 2011

    Da fühlt man sich doch gleich wieder in die Theorie Vorlesung an der Uni zurückversetzt 😉
    Für den einen oder anderen ist es vielleicht noch interessant zu wissen, dass man ausgehend von der “normalen” Turingmaschine auch welche konstruieren kann, die mehr als eine Spur auf dem Band haben, d.h. man kann mehrere Zeichen parallel lesen/schreiben. Und natürlich noch die Mehrbandmaschinen, die mehrere Bänder und Schreib-Lese Köpfe haben. Nicht zu vergessen die nicht-deterministischen Maschinen…
    Gibt es dazu später noch einen Artikel? Denke das wäre eine interessante Erweiterung für die meisten Leser.

  16. #16 Marcus Frenkel
    Oktober 14, 2011

    @7tupel
    Wenn mir jemand eine Mail mit seinen Wünschen schreibt (so dass ich sie gut sichtbar im Posteingang belassen kann), dann kommt da bestimmt noch einmal etwas. 😉

  17. #17 Stefan W.
    Oktober 14, 2011

    Allerdings gibt es ja auch Probleme, die nicht gelöst werden können, oder deren Lösung “unendlich lange” dauert – z.B. die Berechnung von Pi.

    Interessanter aber, im Zusammenhang mit Turing, sind doch die Probleme, bei denen man vorher nicht weiß, ob sie terminieren werden. Dass die Pi-Berechnung nicht terminieren wird, dass weiß man ja vorher.

  18. #18 Marcus Frenkel
    Oktober 14, 2011

    @Stefan W.
    Richtig. Die Pi-Berechnung war jetzt auch nur ein Beispiel, wobei sie sich insofern von vielen der nicht-endenden Probleme unterscheidet, als dass immerhin bekannt ist, dass es eine Lösung gibt. Bei vielen Problemen, wo vorher nicht bekannt ist, ob sie terminieren, weiß man ja auch gar nicht, ob überhaupt eine Lösung existiert.

  19. #19 engywuck
    Oktober 14, 2011

    @Timmorn: dass der Text hinter deinem Link eine Satire ist weisst du?

  20. #20 rolak
    Oktober 14, 2011