Städtisches Labenwolf-Gymnasium Nürnberg Kollegstufe 2001/2003 Schuljahr 2002/2003 Facharbeit aus dem Fach Mathematik Thema: Die Turingmaschine Verfasser: Stefan Thomas Schorsch Kursleiter: Hans Gaab Abgabetermin: 3.Februrar 2003 Wertung: Erzielte Punktzahl (einfache Wertung): in Worten: ....... ............................................................... ................................................................................................................................... Kursleiter Hans Gaab 1. Einleitung Seite 03 2. 2.1. 2.1.1. 2.1.2. 2.1.3. 2.2. 2.3. Das Prinzip Das Prinzip allgemein Turingmaschine als Blackbox Das Turingband Der Lese- bzw. Schreibkopf Möglicher mechanischer Aufbau Mathematische Definition Seite 04 Seite 04 Seite 04 Seite 05 Seite 05 Seite 05 Seite 06 3. 3.1. 3.2. 3.3. 3.4. Beispielanwendungen Schreibweise für Turingprogramme Addition unärer Zahlen Verdopplung einer unären Zahl Multiplikationsprogramm Seite 07 Seite 07 Seite 10 Seite 13 Seite 16 4. 4.1. 4.2. 4.3. 4.4. 4.4.1. 4.4.2. Theorie zur Turingmaschine Mehrbändige Turingmaschinen Größe des Bandalphabetes Berechenbarkeitstheorie Formale Bedeutung der Turingmaschine Turingmaschine als Generator Turingmaschine als Akzeptor Seite 21 Seite 21 Seite 21 Seite 22 Seite 22 Seite 22 Seite 22 5. Das Busy-Beaver-Problem Seite 23 6. 6.1. 6.2. 6.3. Turingsimulatoren „Freeware-Turing-Maschine“ „Facharbeitsturingmaschine“ „Visual Turing“ Seite 25 Seite 25 Seite 25 Seite 26 7. 7.1. 7.2. 7.3. Schluss und Quellenangabe Bilder(Quellennachweis) Sonstige Quellen Abschlusserklärung Seite 27 Seite 27 Seite 28 Seite 30 - Seite 3 - 1. Einleitung Alan Mathison Turing ist einer der bedeutendsten Mathematiker des 20. Jahrhunderts, berühmt für seine Grundlagenarbeit auf dem Gebiet der Mathematik und Informatik. Zu Lebzeiten genoss er kein hohes Ansehen und beendete sein Leben schließlich durch Selbstmord; erst nach seinem Tod erkannte man das volle Ausmaß seiner Leistungen und die Auswirkungen seiner Arbeiten. Geboren am 23. Juni 1912 in Paddington (London), als zweites Kind von Julius Mathison and Ethel Sara Turing, ging vom Elternhaus zunächst wenig Interesse an Forschungsarbeiten aus; einzig sein Onkel, der irische Physiker George Johnstone Stoney (1826-1911), könnte einen Einfluss auf ihn gehabt haben. Turings Kindheit verlief in ruhigen Bahnen. Obwohl er zu diesem Zeitpunkt in keiner Weise gefördert wurde, erwachte sein Interesse an der Wissenschaft und äußerte sich schon in einigen simplen Chemieversuchen. Er besuchte die "Sherborne School“, deren Direktor folgenden Satz gesagt haben soll: "If he is to be solely a Scientific Specialist, he is wasting his time at a Public School“ (Der Schuldirektor der Sherborne School über Alan Turing, gefunden auf Hodges, Abbildung 1 Andrew „Alan Turing: a short biography“, Internetseite http://www.truing.org.uk/bio/part1.html von 1995, aufgerufen am 30.12.2002) „Wenn er ausschließlich ein Wissenschaftsexperte werden wird, verschwendet er seine Zeit an öffentlichen Schulen“. Damit lag der Schulleiter erstaunlich nahe an der Zukunft. Von 1931 an war Turing Student am „Kings College“ in Cambridge, wo sich ihm mehr denkerische Freiheiten eröffneten. Hier arbeitete er erfolgreich an verschiedenen Projekten und gewann sogar einige Preise, bis er sich entschied, eine andere Richtung zu beschreiten. Die damals aktuelle Diskussion über nicht beweisbare Axiome und besonders das vom deutschen Mathematiker David Hilbert gestellte Entscheidungsproblem vereinnahmten ihn: "Could there exist, at least in principle, a definite method or process by which it could be decided whether any given mathematical assertion was provable?“ (Das „Entscheidungsproblem“, gefunden auf Hodges, Andrew „Alan Turing: a short biography“, Internetseite http://www.truing.org.uk/bio/part2.html von 1995, aufgerufen am 30.12.2002); „Existiert, zumindest im Prinzip, eine sichere Methode oder ein sicheres Verfahren, durch welches man entscheiden könnte, ob ein beliebiger mathematischer Ausdruck beweisbar wäre?“. Diese Fragestellung führte schließlich zur Turingmaschine: Turing analysierte den Denkprozess eines Menschen und versuchte ihn derart zu vereinfachen, dass eine theoretisch physikalisch konstruierbare Maschine den Denkprozess nachvollziehen könnte. Der Erfinder konnte ebenfalls beweisen, dass diese Maschine alles berechnen konnte, was in der Mathematik fortan als „bestimmter Algorithmus“ definiert war. Damit ließ sich nun auch Hilberts Fragestellung sehr schnell mit „nein“ beantworten: eine solche Methode kann nicht existieren. Mit dieser Turingmaschine beschäftigt sich nun die Facharbeit. - Seite 4 Natürlich war dies nicht die letzte Arbeit von Alan Turing: von großer Bedeutung waren noch seine Arbeiten zur Entschlüsselung der deutschen EngimaVerschlüsselungsmaschine und zu den Themen neuronale Netze und künstliche Intelligenz. Später erhielt er unter anderem einen Posten an der Universität von Manchester, wo er für die Elektronikentwicklung der britischen Atombombe eingesetzt wurde. Es folgten einige nicht weniger bedeutsame Werke, auf die jedoch nicht näher eingegangen werden soll. Im weiteren Verlauf wurde Turing vom Glück verlassen. In der damalig vorherrschenden Zeitströmung, bedingt durch den Kalten Krieg und den amerikanischen Einfluss, verlor Turing nicht nur seine Sicherheitsfreigaben der britischen Regierung, sondern sollte sogar für seine homosexuellen Neigungen eingesperrt werden. Dies alles führte vermutlich am 7. Juni 1954 zu seinem durch Zyanid herbeigeführten Selbstmord. Erst Jahre nach seinem Tod erhielten seine Arbeiten die Anerkennung, die ihm ungerechterweise zu Lebzeiten verwehrt blieb. Auch heute, mehr als 60 Jahre nach der Erfindung der Turingmaschine, ist sie noch Lehrstoff der meisten Informatikstudiengänge. Es existiert bis dato kein besseres Modell, um mit der Berechenbarkeitstheorie zu arbeiten. Was ist also eigentlich eine Turingmaschine? 2. Das Prinzip der Turingmaschine Zunächst ist es wichtig, hervorzuheben, dass eine Turingmaschine keinesfalls mit einem heute gebräuchlichen PC vergleichbar ist, sondern vielmehr ein Gedankenmodell bzw. die Konkretisierung eines solchen darstellt. Darüber hinaus muss auch sorgfältig zwischen Hard- und Software unterschieden werden. Ein möglicher mechanischer Aufbau wird in Kapitel 2.2 vorgestellt. Hier zunächst eine allgemeine Einführung in die Turingmaschine. 2.1. Das Prinzip allgemein Eine Turingmaschine besteht stets aus den gleichen elementaren Bestandteilen: - Ein Steuermechanismus (Kapitel 2.1.1.) Das Turingband (Kapitel 2.1.2.) Der Lese- und Schreibkopf (Kapitel 2.1.3.) 2.1.1. Turingmaschine als Blackbox Der Steuermechanismus der Turingmaschine kann auch als Blackbox verstanden werden. Es ist für den Anwender nicht wesentlich, wie die Turingmaschine ihre Berechnungen intern durchführt, er muss nur wissen, welche Eingaben möglich, und welche Ausgaben zu erwarten sind (= Blackboxprinzip). Insofern hat der mechanische innere Aufbau auch keine große Bedeutung. Der Steuermechanismus muss lediglich dazu in der Lage sein, die Eingabe aufzunehmen und entsprechend darauf einen Befehl - Seite 5 für die Ausgabe (in Form des zu schreibenden Symbols und der Bewegungsrichtung des Bandes) abzusetzen. Darüber hinaus muss in dieser Blackbox auch noch festgelegt sein, wie die Turingmaschine auf bestimmte Eingaben reagieren soll (im Normalfall gespeichert in sogenannten Registern). 2.1.2. Das Turingband Das sog. Turingband ist der Speicherort der Turingmaschine. Das Band ist in einzelne Zellen eingeteilt, die jeweils ein Zeichen aufnehmen und speichern können. Für die Berechenbarkeitstheorie relevant ist die Tatsache, dass dieses Band per Definition unendlich lang sein muss (um eine Funktion nicht einfach aufgrund mangelnder Speicherkapazität nicht berechnen zu können). Praktisch lässt sich ein unendlich langes Band natürlich mit keinem bisher bekannten Verfahren simulieren. Das Band lässt sich sowohl nach links als auch nach rechts bewegen, so dass eine entsprechende Lesevorrichtung jedes Bandfeld erfassen bzw. beschreiben kann. 2.1.3. Der Lese- bzw. Schreibkopf Der Lese-/Schreibkopf ist das Datenerfassungs- und Ausgabeelement der Turingmaschine. Er kann ein Zeichen vom Turingband einlesen, es an den Steuerungsmechanismus weiterleiten. Dieser verarbeitet das gesendete Symbol und gibt an den Schreibkopf die Anweisung für das neu in die gleiche Zelle zu schreibende Zeichen. Darüber hinaus erhält er die Anweisung, in welche Richtung das Turingband nun zu bewegen ist. 2.2. Möglicher mechanischer Aufbau Wie bereits erwähnt, ist die Turingmaschine nicht dafür prädestiniert, real nachgebaut zu werden; ihre Leistung und Benutzerfreundlichkeit würden keinen gebräuchlichen Standards entsprechen. Trotzdem ist es sehr viel anschaulicher und nachvollziehbarer, wenn man ein mögliches physisches Abbild betrachtet: Abbildung 2 - Seite 6 Deutlich erkennbar ist das Turingband. Der Doppelpfeil deutet an, dass das Band sowohl nach links als auch nach rechts verschoben werden kann. Der Lese/Schreibkopf sitzt über dem Band und empfängt/übermittelt die Informationen aus der Blackbox. Diese kann entweder gestartet oder zurückgesetzt werden. Ein Eingriff in eine laufende Berechnung ist also nicht möglich. Softwareseitige Simulationen sind in Kapitel 6 aufgelistet. 2.3. Mathematische Definition Um der Tatsache gerecht zu werden, ein mathematisches Denkmodell darzustellen, muss die Turingmaschine auch mathematisch definiert sein. Zunächst sollten einige grundsätzliche Begrifflichkeiten geklärt werden: - Der Buchstabe M steht stellvertretend für die Turingmaschine M hat einen fest definierten Startzustand S ist das Bandalphabet x ist die Zeichenkette auf dem Band vor der Berechnung und kann als Eingabe angesehen werden y ist die Zeichenkette auf dem Band nach der Berechung und kann als Ausgabe angesehen werden Der Lese-/Schreibkopf ist vor der Berechung über das linke äußere Ende von x zu bewegen S* stellt die Menge aller Zeichenketten über S dar Das Bandalphabet Σ kann dabei aus jeder erdenklichen Zusammenstellung von Zeichen bestehen. M muss nicht bei jeder möglichen Zeichenkette x auch anhalten, daher berechnet x korrekterweise nur eine Teilfunktion. Da für eine Turingmaschine ihr mechanischer Aufbau kaum eine Bedeutung spielt, ist sie im wesentlichen dasselbe wie Ihr Programm. Damit steht M also nicht nur für die Turingmaschine, sondern auch für das Turingprogramm. Dieses ist formal eine Menge von Quintupeln der Form (q, s, q’, s’, d) Mit folgenden Bedeutungen: - q ist der aktuelle Zustand s das vom Lesekopf gelesene Zeichen q’ der auf den Berechnungsschritt folgende neue einzunehmende Zustand s’ das an die Stelle von s zu schreibende Zeichen d die Bewegungsrichtung des Lese-/Schreibkopfes, in die das Band nach dem Berechnungsschritt zu bewegen ist Wobei sowohl q und q’, als auch s und s’ nicht unterschiedlich sein müssen. Die Inhalte setzen sich so zusammen: - Seite 7 - die Zustände kommen aus einer endlichen Menge von Zuständen Q, die zusammen M ergeben s bzw. s’, also die Zeichen, kommen aus dem Bandalphabet S d kann nur ein Element aus D = {links, rechts, halt}sein Diese Definition macht zwei besondere Zustände q ∈ Q nötig: Einen Anfangszustand q0, der immer der erste Zustand zu Beginn einer Berechnung ist, in dem sich M befindet. Der zweite benötigte Zustand ist ein Haltezustand: Falls d = „halt“ erreicht wird, muss M in einen Haltezustand übergehen: −>q ' f : x q → y Dieses spezielle „ q’ “ darf dabei natürlich nie der Anfangszustand q0 sein, da in diesem Fall keine Berechnung erfolgen würde. Die zu dem Zeitpunkt des Erreichens eines Haltezustandes auf dem Band befindliche Zeichenkette wird demnach als Ausgabe y von M angesehen. 3. Beispielanwendungen Um die Funktionsweise einer Tuningmaschine besser verstehen zu können, empfiehlt es sich, einige simple Beispiele näher zu betrachten. Bevor dies geschehen kann, muss aber noch die Notation noch definiert werden. 3.1. Schreibweisen für Turingprogramme Aus der mathematischen Definition in Kapitel 2 ging hervor, dass ein Turingprogramm einer einbändigen Turingmaschine aus einer Menge von Quintupeln der Form (q, s, q’, s’, d) besteht. Um bei längeren Programmen den Programminhalt übersichtlich verstehen zu können, soll nun folgende Form für diese Ausdrucksweise (fortan als Registerschreibweise bezeichnet) verwendet werden: q s s’ d q’ Abbildung 3 Und konkret an einem Beispiel: 1. 1 1R 1 + 1R 2 Abbildung 4 Die linke „1“ ist also der aktuelle Zustand, dann wird unterschieden: die obere Zeile tritt in Kraft, wenn eine „1“ auf dem Band gelesen wurde; die untere Zeile, wenn ein „+“ erfasst wurde. - Seite 8 In beiden Fällen soll wieder eine „1“ auf das Band geschrieben und der Lese- bzw. Schreibkopf nach rechts bewegt werden. In der ersten Zeile soll der Zustand 1 beibehalten werden, in der zweiten Zeile soll ein Übergang in den Zustand 2 erfolgen. Für d gibt es in dieser Notationsform drei mögliche Zeichen: - R steht für eine Bewegung nach rechts - L steht für eine Bewegung nach links - S steht für Stop, also das Anhalten des Vorgangs als Symbol der abgeschlosse nen Berechnung (Haltezustand) Der Startzustand in dieser Schreibform ist per Definition immer der Zustand mit der Zahl „1“ Bei einem längeren Bandalphabet entstehen häufig Situationen, bei denen, korrekte Bandbeschriftung zu Beginn vorausgesetzt, viele Zeichen für bestimmte Zustände gar nicht vorkommen können. Als Beispiel eignet sich hier etwa ein Multiplikationsprogramm (siehe 3.4.). Falls das Zeichen, welches das Ende der Zeichenkette und das Startfeld für das Notieren des Ergebnisses repräsentieren soll, schon vor dem Trennzeichen zwischen den beiden zu multiplizierenden unären Zahlen eingelesen wird, kann die Bandbeschriftung nicht korrekt sein. In diesem Fall müsste das Programm derart gestaltet sein, dass es automatisch in den Haltezustand übergeht, ohne aber die Berechung abgeschlossen zu haben. Dies soll verhindern, dass die Turingmaschine in einer Schleife niemals in einen Haltezustand übergeht. Um sich die unnötige Schreibarbeit zu sparen, können diese Zustände, die eine vorzeitige Stopanweisung für den Fall einer inkorrekten Eingabe enthalten, auch einfach weggelassen werden. Die Summe aller einzelnen Register wird auch Übergangsdiagramm genannt. Vor allem bei längeren Programmen kann es trotz dieser Simplifizierungen passieren, dass die eigentliche Funktion bzw. der Zweck der Berechnung nicht mehr klar ersichtlich sind. Um diesem Problem entgegen zu wirken, existiert auch eine Definition für eine visuelle Darstellung (natürlich sind die Symbole und Formen frei definierbar; um die Arbeit mit dem PC-Programm „Visual Turing“ zu erleichtern, soll hier aber dessen Symbolik verwendet werden. Mehr zu Visual Turing siehe Kapitel 6). Diese Darstellung unterscheidet sich teilweise wesentlich von der Registerschreibweise und lässt sich auch schwerer auf die mathematische Definition anwenden, bietet dafür aber einen besseren Überblick. - Seite 9 - Bewege den Lese-/Schreibkopf nach links Bewege den Lese-/Schreibkopf nach rechts Schreibe ein „#“ auf das Band Schreibe ein „e“ auf das Band, analog für jedes andere Zeichen des Bandalphabets Zeichen für eine Haltezustand (= Breakpoint) Der Pfeil definiert diesen Befehl als den Startbefehl Abbildung 5 (Anweisungssymbole) - Seite 10 - Bewege den Lese-/Schreibkopf so lange nach links, wie du b einliest (Schleife) Wenn du ein b einliest, bewege den Kopf nach links Ohne an eine Bedingung gekoppelt zu sein, soll das Programm den Lese-/Schreibkopf nach links bewegen Eine Kombination der beiden Bedingungen: solange ein „b“ gelesen wird, soll der Lese-/Schreibkopf nach links bewegt werden. Wird ein „a“ erfasst, soll der Kopf nach rechts bewegt werden. Abbildung 6 ( Bedingungssymbole) - Seite 11 Das Programm „Visual Turing“ bietet darüber hinaus noch eine Reihe weiterer Optionen, auf die aber erst in Kapitel 6 näher eingegangen werden soll, da sie für die folgenden Beispiele keine Relevanz haben. Eine simple Anwendung, die einen einfachen Einstieg bietet, ist die Addition zweier unärer Zahlen: 3.2. Addition zweier unärer Zahlen Werden Zahlen in der unären Darstellungsform notiert, so gilt: Eine beliebige Zahl a ( a ∈ N 0 ) wird durch a aufeinanderfolgende „1“-en dargestellt, z.B.: 111 entspricht der „3“ im Dezimalsystem 11111 entspricht der „5“ (5 Einsen). Der genaue Wortlaut der Aufgabenstellung lautet: Zwei durch ein „+“ (bzw. „#“ für „Visual Turing“, da hier „+“ nicht als Symbol des Bandalphabets verwendet werden kann) getrennte beliebig große unäre Zahlen sollen addiert werden, so dass das Ergebnis am Ende als unäre Zahl auf dem Turingband steht. Der Lese-/Schreibkopf soll/muss dazu vor der Berechnung über dem äußersten linken Ende der Zeichenkette stehen. Das externe Bandalphabet muss zur Erfüllung dieser Aufgabe nicht mehr als 2 Zeichen beinhalten, einmal die „1“ und einen Platzhalter (z.B. „+“ ). Somit ergibt sich E = {1;+} Da in diesem Beispiel das Bandalphabet nur zwei Zeichen umfasst, existieren auch nur zwei mögliche Eingangszeichen und folglich auch nur zwei zu schreibende mögliche neue Zeichen. Für die Addition zweier unärer Zahlen werden 5 Register benötigt. Zustandstabelle/Übergangsdiagramm: 1. 1 1R 1 + 1R 2 2. 1 1R 2 + +L 3 3. 1 +L 4 + +S 3 4. 1 1L 4 + +R 5 5. 1 1S 5 + +S 5 Abbildung - Seite 12 Per Definition (3.1.) ist der Startzustand der Maschine „1.“ Damit die Anzahl der Schritte noch übersichtlich klein bleibt, sollen die beiden „kleinen“ Zahlen „2“ und „3“ addiert werden, das Turingband hat demnach diesen Inhalt: L + + 1 1 + 1 1 1 + + + + + + + + + + + + Abbildung 8 Wobei sich das Band natürlich sowohl nach links als auch nach rechts unendlich fortsetzen kann. Der Schreibkopf befindet sich, wie schon erwähnt, über der linken Eins. Die beiden linken Einser repräsentieren die Zahl „2“, die drei rechten Einsen die Zahl „3“. Zustand 1 besagt: Wenn eine „1“ auf dem Band gefunden wurde, schreibe eine „1“ und bewege den Kopf nach rechts, bleibe im Zustand 1. Dies geschieht zweimal, danach liegt ein Freizeichen auf dem Band vor, d.h.: es wurde ein „+“ gelesen, schreibe eine „1“, bewege den Kopf nach rechts, wechsle in den Zustand 2. Die obere Zeile von Zustand 2 ist der des ersten sehr ähnlich, nur, dass am Ende der zweite und nicht der erste Zustand beibehalten wird. Auf diesem Weg tastet sich die Turingmaschine bis an das Ende der zweiten Zahl. Sobald ein Freizeichen gefunden wurde, tritt die untere Befehlszeile in Kraft: Wenn ein „+“ gelesen wurde, schreibe ein „+“, bewege den Kopf nach links und wechsle in den Zustand 3. Der Lesekopf erkennt nun eine „1“, der 3. Zustand besagt: wenn du eine „1“ gelesen hast, schreibe ein „+“, bewege den Kopf nach links und gehe in den 4. Zustand über. Im 4. Zustand wird nun, solange eine „1“ eingelesen wird, diese auch wieder geschrieben und der Lesekopf bis ans linke Ende der Zeichenkette bewegt. Sobald dies erreicht ist, wird ein „+“ eingelesen. Dies bewirkt das Wenden des Kopfes nach rechts und den Übergang in den letzten, den 5. Zustand. Hier wird nun die äußerste linke „1“ der Zeichenkette gelesen und auch wieder auf das Band geschrieben, die Maschine hält an (S) und der Berechnungszyklus ist beendet. Für die Addition von „2“ und „3“ werden auf diesem Weg immerhin 15 Taktzyklen benötigt, und das, obwohl die Addition hier durch einen simplen Trick geschieht: Das Freizeichen in der Mitte wird entfernt und stattdessen die äußerste rechte „1“ durch ein „+“ ersetzt. Trotzdem wurden die beiden Zahlen korrekt addiert, man erhält am Ende diese Zeichenfolge auf dem Band: L + + 1 1 1 1 1 + + + + + + + + + + + + + Abbildung 9 5 mal das Zeichen „1“ entspricht tatsächlich der Zahl 5 ( 2 + 3 = 5 ) Die Aufgabenstellung, umgesetzt mit Hilfe von „Visual Turing“, sieht so aus: - Seite 13 Der Programmcode: Abbildung 10 Bedingt durch das verwendete Programm, ist das mögliche Bandalphabet nicht mehr frei wählbar. Hier entspricht die Raute ( # ) dem Freizeichen ( + ) und das kleine „a“ der „1“. Das Band sieht hier demnach so aus: Abbildung 11 Im Gegensatz zum vorangegangenen Modell befindet sich hier der Kopf zu Beginn noch über einem Freizeichen links der Zeichenkette, wird aber durch eine Schleife gleich bis zum ersten „a“ auf dem Band bewegt. 3.3. Verdoppelung einer unären Zahl Ein etwas komplexeres Beispiel ist die Verdoppelung einer beliebig langen unären Zahl. Sowohl die Notation als auch das verwendete Alphabet bleiben dabei gleich, die möglichen Zustände unterscheiden sich natürlich hingegen. Die Definition der Aufgabenstellung lautet: verdopple eine zusammenhängende Zeichenkette, die eine unäre Zahl repräsentiert, so dass am Ende die verdoppelte unäre Zahl auf dem Band steht. Die Verdopplung kann auch als Multiplikation mit Zwei verstanden werden. Für die Verdoppelung werden 7 Zustände benötigt, der Lese- bzw. Schreibkopf setzt wieder am linken äußeren Ende der Zeichenkette an. - Seite 14 Zustandstabelle/Übergangsdiagramm: 1. 1 +R 2 + +R 7 2. 1 1R 2 + +R 3 3. 1 1R 3 + 1R 4 4. 1 1S 4 + 1L 5 5. 1 1L + +L 6. 1 1L 6 + +R 1 7. 1 1S 7 + +S 7 5 6 Abbildung 12 Verwendet man diese Zustandstabellen, wird die Zahl der nötigen Takte bei größeren Zahlen recht schnell unüberschaubar groß. Daher wird hier nur das Beispiel mit der Zahl 2 „durchgespielt“, aber auch dieser Vorgang benötigt schon 22 Takte. Das Band sieht zu Beginn also so aus: L + + 1 1 + + + + + + + + + + + + + + + + Abbildung 13 Der Lesekopf befindet sich über der linken der beiden Einsen. Es wird der erste Zustand aufgerufen: Wenn eine Eins gelesen wurde, schreibe ein „+“, bewege den Kopf nach rechts und gehe in den Zustand 2 über. Hier wird erneut eine „1“ gelesen, im 2. Zustand auch wieder eine „1“ aufs Band geschrieben, der Kopf erneut nach rechts bewegt, der Zustand beibehalten. Jetzt findet der Lesekopf ein „+“ auf dem Band, es wird auch wieder ein „+“ auf das Band geschrieben, der Kopf bewegt sich abermals nach rechts und die Turingmaschine geht in den 3. Zustand über. Dieser veranlasst die Turingmaschine, da ein „+“ gelesen wurde, eine „1“ aufs Band zu schreiben, den Lesekopf nach rechts zu bewegen und in den 4. Zustand zu wechseln. - Seite 15 Das Band sieht dabei so aus: L + + 1 + 1 + + + + + + + + + + + + + + + Abbildung 14 Hier wird nun ein „+“ erkannt, der 4. Zustand besagt: Wenn ein „+“ gelesen wurde, schreibe eine „1“, bewege den Kopf nach links und gehe in den 5. Zustand über. Nun erkennt die Maschine eine „1“, schreibt diese auch wieder auf das Band und bewegt den Kopf nach links, unter Beibehaltung des aktuellen 5. Zustands. Nun wird ein „+“ eingelesen, dieses wird auch wieder aufs Band geschrieben, der Kopf nach links bewegt, aber dafür der 6. Zustand geladen. Das Band schaut im Moment so aus: L + + 1 + 1 1 + + + + + + + + + + + + + + Abbildung 15 Zunächst bleibt die Turingmaschine in diesem Zustand, da eine „1“ auf dem Band gefunden und beibehalten wurde; der Lesekopf wird nach links bewegt. Jetzt wird ein „+“ gelesen, dieses wird erneut auf das Band geschrieben, der Kopf wird jedoch zurück nach rechts bewegt und die Maschine geht wieder in den 1. Zustand über. Von diesem Zeitpunkt an wiederholt sich der Vorgang für jede weitere „1“ der Ursprungszahl, in diesem Beispiel also noch ein weiteres Mal. Sobald die Maschine wieder den 6. Zustand erreicht hat, sieht das Band so aus: L + + 1 1 1 1 + + + + + + + + + + + + + + Abbildung 16 Die Maschine geht gemäß der Definition des 6. Zustands wieder in den ersten über. Im Gegensatz zu den vorangegangen Durchgängen findet die Maschine aber keine „1“ mehr auf dem Band vor, daher wird nun das „+“ wieder auf das Band geschrieben, die Maschine wechselt jedoch in den 7. Zustand. Dieser enthält nun den Befehl, stehen zu bleiben, die Berechnung ist beendet und der Lesekopf steht wieder über der äußersten linken „1“ der Zeichenkette. Bei diesem Beispiel wird also jede „1“ der Ursprungszahl eingelesen, durch ein Freizeichen ersetzt und am rechten Ende der gedachten Zeichenkette wieder zweimal auf das Band geschrieben. Auch diese Anwendung lässt sich visualisieren und erleichtert damit das Verständnis: - Seite 16 Das Programm: Abbildung 17 3.4. Multiplikationsprogramm Eine sogar real sinnvolle Anwendung würde ein Multiplikationsprogramm darstellen. Um die Anzahl der benötigten Register klein und auch die Übersichtlichkeit der Anwendung zu erhalten , wird für diese Anwendung das Bandalphabet ein wenig erweitert. E = {+;a;b;x;e} Mit folgenden Bedeutungen: + bleibt weiterhin das Freizeichen a stellt ebenso weiterhin einen Teil einer unären Zahl dar b fungiert als Platzhalter und soll nach der Berechnung nicht mehr auf dem Band stehen x trennt die beiden zu multiplizierenden unären Zahlen e entspricht dem „=“ (e wie Ergebnis) Die genau Formulierung der Aufgabenstellung: Multipliziere 2 unäre Zahlen, die durch ein x getrennt auf dem Turingband (ohne Unterbrechungen der Zeichenkette) stehen. Schreibe das Ergebnis rechts der Zeichenkette hinter ein „e“ (welches das rechte Ende der Zeichenkette markiert) auf das Band und bewege den Lesekopf anschließend zurück zur Ursprungsposition links der Zeichenkette. - Seite 17 Zunächst die Zustandstabellen/das Übergangsdiagramm: 1. + + R a b R 1 2 2. + a e x S R S R 2 2 2 3 3. e e S a b R 3 4 4. a a R e e R 4 5 5. + a L a a R 6 5 6. a a L e e L 6 7 7. a a L b b R 7 8 8. a b R e e L 4 9 9. b a L x x L 9 10 10. a a L 10 b b R 11 11. a b R 2 b b R 11 x x L 12 12. + + S 12 b a L 12 + a e x Abbildung 18 Hier wurde zum erstenmal von der unter 3.1. erwähnten Simplifizierung Gebrauch gemacht und einige nur durch „nicht korrekte Eingabe“ mögliche Anweisungen weggelassen. - Seite 18 Das Band vor der Berechnung (am Beispiel 2 x 3): L + + a a x a a a e + + + + + + + + + + + Abbildung 19 Der Lesekopf ist am linken äußeren Ende der Zeichenkette. Da der Lesekopf sofort ein "a" einliest, muss er nicht erst nach rechts bis zum Beginn der Zeichenkette bewegt werden. Die Turingmaschine schreib also an die Stelle des ersten „a“s ein „b“ und geht gleich in den 2. Zustand über. Die Möglichkeit, ein „+“ einzulesen, darf eigentlich nicht bestehen, da ansonsten die Zeichenkette nicht, wie in der Aufgabenstellung vereinbart, auf dem Band stünde, gleiches gilt für das „e“. Der Kopf wird nun solange nach rechts bewegt, wie das Zeichen „a“ eingelesen wird. Sobald die Turingmaschine auf das „x“ (als Multiplikationszeichen) stößt, wird dieses auf dem Band belassen, der Lese- bzw. Schreibkopf nach rechts bewegt und zum 3. Zustand gewechselt. Falls hier gleich ein „e“ eingelesen wird, hält die Turingmaschine natürlich an, da die Multiplikation mit „0“ (es existieren hinter dem „x“ keine zu einer unären Zahl gehörenden Zeichen mehr auf dem Band) kein Ergebnis liefert. Im Normalfall wird nun ein „a“ eingelesen, durch ein „b“ ersetzt, der Lese-/Schreibkopf nach rechts bewegt und die Maschine geht in den 4. Zustand über. Dieser besagt: solange ein „a“ eingelesen wird, schreibe ein „a“ auf das Band, bewege den Kopf nach rechts und bleibe in diesem Zustand. Sobald das „e“ gelesen wird, behalte es so auf dem Band, bewege den Kopf noch ein Feld nach rechts und gehe in den 5. Zustand über. Das Band hat nun folgende Beschriftung: L + +b a x b a A e + + + + + + + + + + + Abbildung 10 Im 5. Zustand soll nun für den Fall, dass ein „a“ gelesen wird, der Kopf solange nach rechts bewegt werden (und der Zustand nicht gewechselt werden), bis ein Freizeichen in Form eines „+“ gelesen wird. Dieses wird ersetzt durch ein „a“ und der Kopf ändert seine Richtung nach links. Der anzunehmende neue Zustand ist 6. Solange ein „a“ gelesen wird, bewegt sich der Kopf nach links; stößt die Maschine auf das „e“, muss der Kopf um noch ein weiteres Feld nach links bewegt werden und der 7. Zustand geladen werden. Falls ein „a“ gelesen wird, soll dieses auch wieder auf das Band geschrieben werden und der Kopf nach links bewegt werden. Stößt der Lesekopf hingegen auf ein „b“, soll der Kopf, ohne das „b“ durch ein anderes Zeichen zu ersetzen, sich nach rechts bewegen und die Maschine in den 8. Zustand übergehen. Dieser nimmt nun eine Unterscheidung vor: wird ein „e“ gelesen, bedeutet dies, dass auf dem Band rechts des Multiplikationszeichens und noch vor dem Zeichen „e“ nur noch das Zeichen „b“ steht, die Zahl also schon komplett abgearbeitet wurde. Ist dies nicht der Fall, findet die Turingmaschine ein „a“ vor, wird dieses durch ein „b“ ersetzt und die Maschine geht zurück in den 4. Zustand, der Ablauf wird analog vorangegangener Schilderung also für jedes „a“ der zweiten unären Zahl wiederholt. - Seite 19 Sobald nur noch „b's" rechts des Multiplikationszeichens auf dem Band stehen, schaut es so aus: L + +b a x b b b e a a a + + + + + + + + Abbildung 21 Die durch „b“ substituierten „a“s müssen wieder zurückgewandelt werden, dafür ist der 9. Zustand zuständig. Solange ein „b“ gelesen wird, ist dieses durch „a“ zu ersetzen. Sobald das „x“ auftaucht, geht die Maschine in den 10. Zustand über, der Kopf wird weiterhin nach links bewegt. Dieser Zustand besagt: solange ein „a“ gelesen wird, schreibe ein „a“ auf das Band, bewege den Kopf nach links und bleibe in diesem Register. Sobald ein „b“ gelesen wird, schreibe das „b“ wieder auf das Band und wechsle in den 11. Zustand und bewege vorher den Kopf nach rechts. Das nun folgende Schema folgt dem Muster der zweiten unären Zahl in Bezug auf die Prüfung der Vollständigkeit der Substitution der „a“s durch „b's“. Wird sofort nach der Rechts-Bewegung nur noch das „x“-Zeichen gelesen, heißt das, es gibt keine „a“s mehr auf der linken Seite des Multiplikationszeichens und folglich wurde die ganze linke Zahl schon abgearbeitet. Ist dies nicht der Fall, wird das gelesene „a“ durch ein „b“ ersetzt und die Maschine geht zurück in den 2. Zustand. Dieser Prozess wird also für alle „a“s der ersten unären Zahl wiederholt. Sobald die erste Zahl komplett ersetzt wurde, sieht das Band so aus: L + +b b x a a a e a a a a a a + + + + + Abbildung 22 Nun muss diese Substitution nur noch rückgängig gemacht werden. Dies geschieht im 12. Zustand, in dem, solange ein „b“ gelesen wird, dieses durch ein „a“ ersetzt wird und der Kopf sich weiter nach links bewegt. Sobald ein Freizeichen ( + ) erscheint, geht die Maschine in einen Haltezustand über, die Berechnung ist abgeschlossen und alle Substitutionen sind rückgängig gemacht worden: L + +a a x a a b e a a a a a a + + + + + Abbildung 23 - Seite 20 Das Programm in visueller Darstellung: Abbildung 24 Besonders auffallend sind die 3 Breakpoints; die oberen beiden dienen zur Vermeidung von Programmfehlern durch 0-Eingabe, der untere Breakpoint stellt den normalen Endpunkt der Berechnung dar. Das Programm schreibt also für jedes „a“ der linken Zahl zunächst ein „b“ als Platzhalter, geht dann zur rechten Zahl, liest dort alle „a“s ein (ersetzt die dabei kurzzeitig durch „b“s), schreibt die ersetzten „a“s rechts des „e“s wieder auf das Band, verwandelt die substituierten „b“s der rechten Zahl wieder in „a“s und geht zurück zur linken Zahl. Der Vorgang wird für jedes „a“ der linken Seite wiederholt und am Ende werden die „b“s dieser Zahl auch wieder zurück in „a“s verwandelt. Der Lesekopf ist wieder links der Zeichenkette und das Ergebnis rechts vom „e“-Zeichen. Das Band am Anfang: Abbildung 25 Das Band am Ende: Abbildung 26 Man kann leicht erkennen, dass der Aufwand schon bedeutend größer ist als noch bei der einfachen Addition. Je komplexer die Aufgabenstellungen werden, desto umfangreicher werden auch die Programme. - Seite 21 Um die Grenzen solcher Programme ausfindig machen zu können, und deren Bedeutung für die Mathematik- und Computerwissenschaft zu verstehen, bedarf es genauerer Überlegungen. Mehr dazu im nächsten Kapitel, in welchem die Berechenbarkeitstheorie näher vorgestellt wird. 4. Theorie zur Turingmaschine 4.1. Mehrbändige Turingmaschinen Eine der interessantesten Eigenschaften von Turingmaschinen ist ihre hohe Flexibilität. So sind tiefgreifende Veränderungen möglich, ohne ihre Berechnungsfähigkeit nachhaltig zu beeinflussen. Eine Möglichkeit der Veränderung ist die Variierung der Anzahl der Turingbänder. Es existieren auch Modelle von Maschinen mit mehr als einem Band (und entsprechend auch mit mehr als einem Lese-/Schreibkopf). Der Vorteil solcher Maschinen lässt sich durch das Kapitel 3.4. gut demonstrieren. Während für die Multiplikation das Symbol „b“ als Platzhalter zur Kennzeichnung bereits eingelesener Teile der unären Zahl diente, könnte man mit einer zweibändigen Maschine das zweite Band als temporären Speicherort verwenden und dabei vermutlich auch einige Registerzustände einsparen. Die Darstellung einer mehrbändigen Turingmaschine weicht dabei natürlich von der Einbändigen ab. Während in Kapitel 3.1. noch Quintupeln der Form (q, s, q’, s’, d) verwendet wurden, muss eine mehrbändige Turingmaschine auch mehr Angaben erhalten. Dies geschieht in folgender Form: (q, s1, s2..., sn, q’, s1’, s2’..., sn’, d1, d2...dn) Lediglich q und q’ bleiben von der Veränderung unberührt, alle anderen Werte müssen n-mal angegeben werden (wobei n die Anzahl der Bänder repräsentiert). Daher besteht eine Turingmaschine in der allgemein Form aus (2 + 3*n)-Tupeln. Die Bedeutung der einzelnen Symbole hat sich nicht verändert: q, der aktuelle Zustand besagt: wenn s1, s2..., sn auf den entsprechenden Bändern gelesen wurden, schreibe s1’, s2’..., sn’ auf die passenden Bänder, bewege deren Leseköpfe nach d1, d2...dn und gehe in den Zustand q’ über. 4.2. Größe des Bandalphabetes Neben der Bänderanzahl kann man auch die Größe des Bandalphabetes verändern. In Kapitel 3.4. hatte die Vergrößerung des Bandalphabetes nur kosmetischen Charakter und half, die Anzahl der benötigten Übergangszustände in einem erträglichen Rahmen zu halten. Es existieren bereits Beweise, dass eine Turingmaschine mit einem Alphabet von nur 2 Zeichen ebenfalls alles berechnen kann, was eine Maschine mit einem beliebig großen Alphabet berechnen könnte. Natürlich besteht dabei aber auch ein Zusammenhang zwischen der Größe der Übergangsdiagramme und der entsprechenden Alphabete. Sei Q eine Turingmaschine mit Σq = {x1, x2...xn} und n Zuständen und P eine Turingmaschine mit Σp >> Σq und m Zuständen, so kann für die gleiche Aufgabenstellung (entsprechend etwas komplexer) angenommen werden, dass m << n gilt . - Seite 22 4.3. Berechenbarkeitstheorie Der eigentliche Grund für die Entwicklung der Turingmaschine war die Hoffnung, einen Apparat zu finden, der auf möglichst einfache Weise entscheiden konnte, ob ein beliebiger mathematischer Ausdruck berechenbar wäre oder nicht. Die Definition dieser Berechenbarkeit: eine Funktion f: Nk Æ N heißt turingberechenbar, falls es eine (deterministische) Turingmaschine M gib, so dass für alle n1, .......,nk, m ∈ N gilt: f(n1, .......,nk) = m genau dann, wenn: z0bin(n1)#bin(n2)#...#bin(nk) ... zebin(m) ... wobei ze ∈ E (Nachweis/Definition entnommen aus Schöning, Uwe: Theoretische Informatik kurzgefasst, Ulm, Verlag Spektrum (akademischer Verlag), 1995 Seite 89,90,91) bin(n) ist dabei die Binärdarstellung der Zahl n ∈ N ohne führende Null. Äquivalent dazu kann n auch in unärer Form dargestellt werden. Ebenfalls deckt diese Definition alle Wörter ab, da sich jeder Buchstabe problemlos in eine Ganzzahl konvertieren lässt (z.B. durch die ASCII-Kodierung, die jeden Buchstaben per Binärsystem darstellen kann) und auch eine eindeutige Rückwandlung möglich ist. Es gilt dadurch folgende Definition (mit all ihren Folgen): „Alles was berechenbar ist, ist durch eine Turingmaschine berechenbar!“ Und auch der Kehrsatz wurde akzeptiert: „Alles was nicht durch eine Turingmaschine berechnet werden kann, ist überhaupt nicht berechenbar!“ Der letzte Satz wird für das 5. Kapitel von Bedeutung sein. 4.4. Formale Bedeutung der Turingmaschine Dieses Kapitel soll nur ein kurzer Ausblick auf die weitere Bedeutung der Turingmaschine sein und wird sich auch nicht genauer mit Beweisen oder Beispielen beschäftigen. 4.4.1. Turingmaschine als Generator Eine Turingmaschine kann eine formale Sprache aufzählen. Dazu werden alle Bestandteile der Sprache nacheinander auf das Band geschrieben und durch ein spezielles Symbol getrennt. Daher sind Turingmaschinen auch Generatoren für formale Sprachen. Unendliche Sprachen werden auch unendliche lange auf das unendlich lange Turingband geschrieben. Trotzdem kann für ein bestimmtes Zeichen ein fester Zeitpunkt angegeben werden, an dem es auf dem Band geschrieben steht. 4.4.2. Turingmaschine als Akzeptor Eine Turingmaschine kann unterscheiden, ob ein auf das Band geschriebenes Wort zu einer formalen Sprache gehört. Die Unterscheidung erfolgt über die Auswertung des - Seite 23 Verhaltens der Turingmaschine: nimmt diese einen Haltezustand ein, gilt das Wort als akzeptiert. 5. Das „Busy-Beaver-Problem“ Eine interessante Aufgabenstellung, die auch heute noch aktuell ist und dabei selbst modernste Rechenzentren auslastet, wenn nicht sogar überfordert, ist das sog. BusyBeaver-Problem. Wie lautet diese Aufgabe, die mehr als 60 Jahre nach der Einführung der Turingmaschine den Mathematikern noch Kopfzerbrechen bereiten kann? Gegeben ist ein leeres Turingband (auf dem also nur das Zeichen „0“ steht), ein aus 2 Zeichen bestehendes Bandalphabet Σ = {0; 1} und eine Turingmaschine mit n = Anzahl der möglichen Zustände. Gesucht sind die Zustände, die bei einem vorgegeben n die größtmögliche Anzahl von „1“en auf das Band schreiben kann, bevor die Turingmaschine in einen Haltezustand übergeht. Diese Zahl (Σ(n)) muss existieren, da die Anzahl der Turingmaschinen auch endlich ist und somit Σ(n) nicht unendlich groß werden kann. Formuliert wurde die Aufgabe 1962 von Tibor Rado. Die eigentliche Schwierigkeit des Busy-Beaver besteht darin, dass die Busy-BeaverFunktion schneller ansteigt als jede berechenbare Funktion. Beweis: Die Busy-Beaver-Maschine Bn besitzt n Zustände und gibt Σ(n) „1“en aus. Ihr gegenüber steht eine Turingmaschine, die aus wiederum aus drei einzelnen Turingmaschinen zusammen gesetzt sein soll. Ihre Ein- und Ausgabe erfolgt binär. Sie besteht im einzelnen aus folgenden Bestandteilen: - Die mit „C“ bezeichnete Turingmaschine wandelt eine binäre in eine unäre Zahl um. Dazu benötigt sie eine feste Anzahl r von Zuständen. Die zentrale Turingmaschine: - Die „B“ genannte Turingmaschine, welche die Busy-Beaver-Funktion berechnet. Liest B die Zahl n ein, gibt sie Σ(n) wieder aus. Dazu benötigt sie ebenfalls eine feste Anzahl von q Zuständen Und schließlich die zweite „Hilfsmaschine“: - Die mit dem Buchstaben „A“ bezeichnete Turingmaschine, welche n auf ein leeres Band in Binärform schreiben kann. Sie benötigt nur log(n) Zustände. Zusammen ergeben die drei Einzelmaschinen die Busy-Beaver-Maschine ABC. Nun kann man ABC mit Bn vergleichen: Unter der Bedingung n ∈ N und n > log(n) + q + r kann ABC ebenso viele „1“en auf das Turingband schreiben wie Bn, benötigt dazu aber offensichtlich weniger Zustande. Die Teilmaschinen A und C lassen sich leicht konstruieren und da es außer Frage steht, dass es sie wirklich gibt, kann B mit q Zuständen nicht existieren. Daher ist Σ(n) keine berechenbare Funktion. - Seite 24 Da die Aufgabenstellung mittlerweile ein regelrechtes „Wettrennen“ um die besten Übergangsdiagramme geworden ist, verwendet man allgemein eine gemeinsame Notationsform Diese weicht natürlich nicht von der Definition in Kapitel 2 ab, liest sich aber ein wenig anders als die Schreibweise für die Beispiele im 3. Kapitel, da hier das Bandalphabet nur auf 2 Zeichen beschränkt wurde. Als Beispiel für einen Busy-Beaver soll der 5er-Biber dienen: A0 --> B1L B0 --> C1R C0 --> A1L D0 --> A1L E0 --> H1R A1 --> A1L B1 --> B1R C1 --> D1R D1 --> E1R E1 --> C0R Abbildung 27 A ist der Anfangszustand. Wird eine „0“ auf dem Band gelesen, schreibt die Turingmaschine eine „1“ auf das Band, bewegt den Kopf nach links und geht in den Zustand B über. Die Schreibweise ähneltähnelt der Notationsform aus dem Kapitel 3. Die folgenden Tabelle über den aktuellen Wissenstand der Berechnungen stammt vom Juni 2002: n Σ(n) S(n) Quelle 1 1 1 Lin and Rado 2 4 6 Lin and Rado 3 6 21 Lin and Rado 4 13 5 107 Brady >= 4098 >= 47,176,870 Marxen and Buntrock 6 > 1.29*10865 > 3*101730 Marxen and Buntrock Abbildung 28 S(n) ist dabei die Anzahl der benötigten Schritte, bis Σ(n) „1“en auf dem Band stehen. Zwei Besonderheiten fallen an der Tabelle auf: Zum einen die enormen Sprünge bei n = 5 und n = 6 und zum anderen, dass für n ∈ {1; 2; 3; 4} nachweislich das Gleichheitszeichen verwendet werden kann (es ist bewiesen, dass für diese Anzahl von n Zuständen nicht ein größeres Σ(n) existieren kann), für n = 5 jedoch nur ein „>=“ – Zeichen angebracht ist und für n = 6 schließlich nur noch ein „>“-Zeichen Berechtigung hat. Natürlich fällt ein Nachweis bei derart großen Zahlen sehr schwer, obgleich vermutet wird, bis n = 6 sei Σ(n) noch nachweisbar. Dass es wenig Sinn macht, auf einem handelsüblichen Heim-PC derartige Berechnungen durchzuführen, wird sehr schnell am Beispiel von n = 6 klar: Nimmt man an, der verwendete PC würde mit einer Taktrate von 1,8 GHz betrieben und das Simulationsprogramm würde für die Aufrechterhaltung des Systems nur etwa 1% der Leistung benötigen, stünden ca. 1,782 * 1012 Berechungsschritte/Sekunde zur Verfügung. Wollte man damit die 3*101730 nötigen Schritte durchführen, benötigte man 1,74 * 101718 Sekunden (5,5 * 101711 Jahre). Ein unvorstellbar großer Wert! Selbst modernste Hochleistungsrechenzentren könnten die Dauer nur unwesentlich verkürzen. - Seite 25 Daher werden diese Berechnungen auch nur über Abschätzungen und Ungleichungen näherungsweise berechnet. Σ(n) steigt also schneller an, als jede berechenbare Funktion f(n) anwachsen könnte ( Î Σ(n) ist nicht deterministisch berechenbar). So gilt für ein entsprechend großes n stets: I. Σ(n) >= f(n) ( z.B. Σ(5) >= e5 ) Ein wesentlich bedeutenderes Ergebnis erhält man aber durch diese Überlegung: II. f(Σ(n)) < Σ(n+1) für unendlich viele Werte von n m Für die f-Funktion kann man z.B. verwenden: f(m) = mm Dies funktioniert für jede feste Anzahl an Potenzierungen (in diesem Beispiel 2). Das ändert jedoch nichts an der Gleichung I. Damit erhält man diese Formel: Σ(n) III. Σ(n+1) > Σ(n) Σ(n) für unendliche viele Werte von n 6. Turingsimulatoren Eine Vielzahl an Programmen, geschrieben in den unterschiedlichsten Programmiersprachen, beschäftigen sich mit dem Thema „Turingmaschine“ und versuchen, ein möglichst komfortables Arbeiten mit diesem Gedankenmodell zur Verfügung zu stellen. Eine eher simple Anwendung ist die „Freeware-Turing-Maschine“. 6.1. „Freeware-Turing-Maschine“ Dieses Programm eignet sich nur bedingt für die Simulation von Programmabläufen, da zum einen das Bandalphabet auf 2 Zeichen beschränkt ist (und sich auch nicht ereitern lässt) und zum anderen die Anzahl der möglichen Register auf 100 limitiert ist. Dies mag zwar für simple Aufgabenstellungen genügen, kann jedoch zusammen mit dem extrem beschränkten Alphabet schnell zum Engpass werden. Hersteller & Informationen: Copyright (c) 2002 fb-software, Osterode. Alle Rechte vorbehalten. fb-software - Branntweinstein 50 - 37520 Osterode am Harz – Telefon + 049 5522 - 91 92 04 Fax: + 049 5522 - 91 92 05 6.2. „Facharbeitsturingmaschine“ Um den Mängeln des oben genannten Programms entgegenzuwirken, entstand die sog. Facharbeitsturingmaschine. Das Programm ist in der Interpretersprache „Hypertext Preprocessor“ (= „PHP“; ab Version 4.x bis Version 4.2 und ab hier nur noch mit der Einstellung register_globals = „on“) geschrieben und ist unter allen Betriebssystemen lauffähig, für die es einen entsprechenden Interpreter gibt (was wohl mehrheitlich bei allen für Desktop oder Servereinsatz gebräuchlichen Systemen gegeben sein sollte). - Seite 26 Eine funktionierende Demoversion ist unter http://schorschium.net/turing/ abrufbar. Die Anwendung erlaubt es dem Benutzer, beliebige Alphabete (aufgrund der ASCII-Definition aber nur Zeichen aus einem vorgegebenen Array) zu erstellen, Bänder damit zu beschriften und entsprechende Übergangsdiagramme zu programmieren. Das Kernstück der Anwendung, der Simulator an sich, schreibt die Bandausgabe Schritt für Schritt untereinander. Aufgrund der Unzulänglichkeit der Hypertextmarkuplanguage ist das Symbol für den Lesekopf nicht über dem Feld, sondern jeweils links davon, rot unterlegt. Das Programm umfasst dabei knapp 1000 Zeilen Code (der eigentliche Simulator kommt allerdings nur auf 89 Zeilen), und lief im Rahmen dieser Facharbeit für alle in Kapitel 3. genannten Beispiele ohne Probleme (z.B. die Addition unärer Zahlen): Hersteller & Informationen: Copyright (c) 2002 Stefan Schorsch, Nürnberg. Alle Rechte vorbehalten. Das GUI ist dabei noch sehr einfach gehalten und nur funktional. Abbildung 11 6.3. „Visual-Turing“ Eine Besonderheit unter den Simulationsprogrammen stellt „Visual-Turing“ dar. Anders als bei den meisten Simulatoren arbeitet die Anwendung nicht mit Registertabellen, sondern erlaubt es dem Benutzer, seine Programme regelrecht zu zeichnen, angelehnt an die IDEs von namenhaften Herstellern wie Microsoft und deren Visual-Studios (z.B. für C++, Java, uvm). Eine kurze Einführung in die Symbolik befindet sich in Kapitel 3.1. Mit Hilfe der Arbeit von Christian Cheran können auch komplexe Anwendungen sehr schnell umgesetzt werden, Korrektur- und Wartungsarbeiten am Quellcode sind leicht durchzuführen. Darüber hinaus beherrscht das Programm noch eine Reihe weiterer Optionen, Einstellungsmöglichkeiten und Arbeitstechniken, die allerdings über den Rahmen der Facharbeit weit hinausgehen. Eine gute Dokumentation für diese Features ist ebenfalls enthalten. Hersteller & Informationen: Copyright (c) 1997 Christian Cheran Email: [email protected] Homepage: http://apolo.cs.pub.ro/~cheran/vturing/ - Seite 27 Das Programm ist kostenlos erhältlich und darf bei kostenloser Weitergabe auch publiziert werden. Leider scheint die Homepage des Programmierers nicht mehr erreichbar zu sein. 7. Schluss & Quellenangaben 7.1 Bilder (Quellennachweis): 1. Abbildung von Alan Turing (1954) Entnommen von Internetseite „Turing Maschine-Simulator“ Systems Architecture and Software Group Department of Information Technology University of Zurich http://www.ifi.unizh.ch/groups/richter/achatz/turing.jpg vom 10.4.1996, besucht am 30.12.2002 2. Modell einer Turingmaschine Entnommen aus Dewdney, A:K:: Der Turing Omnibus, The University of Western Ontario Kanada, Verlag Springer, 1995 Seite 222 3. Modell eines Übergangsdiagramms Erstellt mit „Microsoft Excel 2000“, 2002 4. Modell eines Übergangsdiagramms Erstellt mit „Microsoft Excel 2000“, 2002 5. Liste von Symbolen für die Programmierung in „Visual Turing“ Erstellt als Screenshot aus „Visual Turing“ (siehe 6.3.), 2002 6. Liste von Symbolen für die Programmierung in „Visual Turing“ Erstellt als Screenshot aus „Visual Turing“ (siehe 6.3.), 2002 7. Beispielprogramm 1 Erstellt mit „Microsoft Excel 2000“, 2002 8. Band zu Beispielprogramm 1 Erstellt mit „Microsoft Excel 2000“, 2002 9. Band zu Beispielprogramm 1 Erstellt mit „Microsoft Excel 2000“, 2002. 10. Beispielprogramm 1 in „Visual Turing“ Erstellt als Screenshot aus „Visual Turing“ (siehe 6.3.), 2002 11. Turingband zu Beispielprogramm 1 aus „Visual Turing“ Erstellt als Screenshot aus „Visual Turing“ (siehe 6.3.), 2002 12. Beispielprogramm 2 Erstellt mit „Microsoft Excel 2000“, 2002 13. Turingband zu Beispielprogramm 2 Erstellt mit „Microsoft Excel 2000“, 2002 14. Turingband zu Beispielprogramm 2 Erstellt mit „Microsoft Excel 2000“, 2002 15. Turingband zu Beispielprogramm 2 Erstellt mit „Microsoft Excel 2000“, 2002 16. Turingband zu Beispielprogramm 2 Erstellt mit „Microsoft Excel 2000“, 2002 17. Beispielprogramm 2 in „Visual Turing“ Erstellt als Screenshot aus „Visual Turing“ (siehe 6.3.), 2002 - Seite 28 18. Beispielprogramm 3 Erstellt mit „Microsoft Excel 2000“, 2002 19. Turingband zu Beispielprogramm 3 Erstellt mit „Microsoft Excel 2000“, 2002 20. Turingband zu Beispielprogramm 3 Erstellt mit „Microsoft Excel 2000“, 2002 21. Turingband zu Beispielprogramm 3 Erstellt mit „Microsoft Excel 2000“, 2002 22. Turingband zu Beispielprogramm 3 Erstellt mit „Microsoft Excel 2000“, 2002 23. Turingband zu Beispielprogramm 3 Erstellt mit „Microsoft Excel 2000“, 2002 24. Beispielprogramm 3 in „Visual Turing“ Erstellt als Screenshot aus „Visual Turing“ (siehe 6.3.), 2002 25. Turingband zu Beispielprogramm 3 in „Visual Turing“ Erstellt als Screenshot aus „Visual Turing“ (siehe 6.3.), 2002 26. Turingband zu Beispielprogramm 3 in „Visual Turing“ Erstellt als Screenshot aus „Visual Turing“ (siehe 6.3.), 2002 27. Übergangsdiagramm eines 5er-Biber (Least-step-champion) Marxen, Heiner: „Attacking the Busy-Beaver 5“, Internetseite http://www.drb.insel.de/~heiner/BB/mabo90.html vom 14.4.2002, aufgerufen am 30.12.2002 28. Busy-Beaver-Rekorde Marxen, Heiner: „Busy Beaver“, Internetseite http://www.drb.insel.de/~heiner/BB/index.html vom 24.6.2002, aufgerufen am 30.12.2002 29. Ausgabe des „Facharbeitsturingmaschine“ Screenshot aus der „Facharbeitsturingmaschine“ (siehe 6.2.) Zum Erstellen der Bilder (Screenshots) wurde Windows XP Professional (Version 2002 © Microsoft 1997-2002, alle Rechte vorbehalten) und Corel Photopaint ™ 8 (Version 8.232 © 1988-1997 Corel Corporation, alle Rechte vorbehalten) benutzt. 7.2. Sonstige Quellen, sortiert nach Kapiteln: Æ Kapitel 1: Hodges, Andrew „Alan Turing: a short biography“, Internetseiten http://www.truing.org.uk/bio/part1.html http://www.truing.org.uk/bio/part2.html http://www.truing.org.uk/bio/part3.html http://www.truing.org.uk/bio/part4.html http://www.truing.org.uk/bio/part5.html http://www.truing.org.uk/bio/part6.html http://www.truing.org.uk/bio/part7.html von 1995, aufgerufen am 30.12.2002 Æ Kapitel 2: Dewdney, A:K:: Der Turing Omnibus, The University of Western Ontario Kanada, Verlag Springer, 1995 diverse Kapitel - Seite 29 Æ Kapitel 3: Dewdney, A:K:: Der Turing Omnibus, The University of Western Ontario Kanada, Verlag Springer, 1995 diverse Kapitel Beispielprogramme: Übergangsdiagramme für Programme 1&2 aus „Freeware-TuringMaschine“ (siehe 6.1.) Übergangsdiagramm für Programm 3 selber entwickelt „Visual-Turing-Diagramme“ für Programme 1,2 und 3 selber entwickelt (siehe 6.3.) Alle verwendeten Simulatorprogramme sind auf die beiliegende CD gebrannt. Æ Kapitel 4: Dewdney, A:K:: Der Turing Omnibus, The University of Western Ontario Kanada, Verlag Springer, 1995, diverse Kapitel Schöning, Uwe: Theoretische Informatik – kurzgefasst, Ulm, Verlag Spektrum (akademischer Verlag), 1995 Æ Kapitel 5: Dewdney, A:K:: Der Turing Omnibus, The University of Western Ontario Kanada, Verlag Springer, 1995, diverse Kapitel Marxen, Heiner: „Attacking the Busy-Beaver 5“, Internetseite http://www.drb.insel.de/~heiner/BB/mabo90.html http://www.drb.insel.de/~heiner/BB/index.html vom 24.6.2002, aufgerufen am 30.12.2002 Michael Bertol, Holger Petersen und Horst Prote „fleißige Biber“, Internetseite http://www.informatik.uni-stuttgart.de/ifi/ti/projects/beaver/bbb.html vom 12.8.1996, aufgerufen am 30.12.2002 - Seite 30 7.3. Abschlusserklärung: „Ich erkläre hiermit, dass ich die vorliegende Facharbeit ohne fremde Hilfe angefertigt und nur die im Literaturverzeichnis angeführten Quellen und Hilfsmittel benutzt habe.“ Nürnberg, den 01.01.2003 ............................................................ Stefan Thomas Schorsch