Universelle Turing-Maschinen
Inhalt
Einleitung
Die Geschichte der universellen Turing-Maschine beginnt im Jahre 1900, als David Hilbert in Paris seine 23 mathematischen Probleme vortrug [Hil00]. Diese Liste umfaßte die wichtigsten offenen Fragen der Mathematik dieser Zeit und war später die Grundlage des sogenannten "Hilbertprogramms", der Suche nach einem vollständigen und widerspruchsfreien Axiomensystem, als Basis für Mathematik und Logik, um sämtliche mathematischen Sätze beweisen zu können. Zusammen mit Wilhelm Ackermann veröffentlichte Hilbert 1928 das Entscheidungsproblem [Hil28], also die Frage, ob es einen Algorithmus gibt, der in einer endlichen Anzahl von Schritten den Wahrheitsgehalt einer FOL-Formel bestimmen kann.
1930/31 erschütterte Kurt Gödel [Goe31; Prop. 8, 11] mit seinem Unvollständigkeitssatz die Mathematiker um Hilbert. Er zeigte nämlich, daß jedes hinreichend mächtige formale System entweder widersprüchlich oder unvollständig und damit auch das hohe gesteckte Ziel des Hilbertprogramms nicht erreichbar ist. Dies führte dazu, daß das Entscheidungsproblem das Interesse vieler Mathematiker weckte, die sich dem Problem auf verschiedenen Wegen näherten.
Kurz nach Alonzo Church [Chu36] zeigte auch Alan Mathison Turing [Tur36], daß das Entscheidungsproblem keine Lösung haben kann. Turing ging dabei einen recht ungewöhnlichen Weg. Er näherte seine Betrachtungen der mechanischen Abarbeitung einer Maschine an und führte das Entscheidungsproblem auf das Halteproblem zurück: "Sei M eine Rechenmaschine (computing machine) und S eine Folge des Eingabealphabets. Gibt es eine Rechenmaschine, die entscheiden kann, ob M mit der Eingabe S hält?". Über einen Widerspruchsbeweis zeigte er dann die Unentscheidbarkeit dieses Problems. Turings "computing machines" gingen später als "Turing-Maschinen" in die Mathematikgeschichte ein.
Ich möchte hier drei universelle Maschinen vorstellen, die nicht nur einfache Berechnungen durchführen, sondern beliebige Programme (Konfigurationen von Turing-Maschinen) und Eingaben einlesen können und daraufhin die Programmausgabe bzw. das Ergebnis berechnen. Turing selbst beschrieb in seiner Arbeit eine erste solche "universal computing machine".
Weiterführende Verweise
- Hilberts Liste von 23 mathematischen Problemen
- Hilbert's Program
- Gödels Unvollständigkeitssatz
- Halteproblem
- Church-Turing-These
- The Alan Turing Home Page von A. Hodges
- Turing Digital Archive
- Kurzbiographie: Wilhelm Ackermann (eng)
- Kurzbiographie: Alonzo Church (eng)
- Kurzbiographie: Kurt Gödel (eng)
- Kurzbiographie: David Hilbert (eng)
- Kurzbiographie: Alan Turing (eng)
UTM von Hopcroft und Ullman
Das erste Beispiel ist die UTM von Hopcroft&Ullman [HU69] in einer von Mark L. Irons korrigierten Fassung.
Als Beispiel für ein Eingabeprogramm dient jedesmal folgender Automat, wenn auch manchmal in leicht abgewandelter Form, der in einer Zeichenkette aus lauter Einsen jedes zweite Vorkommen durch eine Null ersetzt, bis er auf eine Null trifft:
In tabellarischer Schreibweise (neuer Zustand, Kopfbewegung, geschriebenes Zeichen):
Zustand | ◊ | 0 | 1 |
---|---|---|---|
q0=1 | reject | (1,R,0) | (2,R,1) |
q1=2 | reject | (4,R,0) | (3,R,0) |
q2=3 | reject | (4,R,0) | (2,R,1) |
q3=4 | accept |
Kodierung als Eingabe für die UTM
Die Kodierung für die UTM erfolgt über folgende Regeln:
- Die Transitionen des Finalzustandes ("accept") werden mit dem Symbol "0" kodiert.
- Die Transition "reject" wird mit dem Symbol "0" kodiert.
- Alle anderen Transitionen werden kodiert, indem man den Folgezustand durch die entsprechende Anzahl Einsen ersetzt, ein "R" oder "L" anhängt und mit dem jeweiligen Schreibsymbol endet.
- Jede Transition wird durch ein "C" eingeleitet. Transitionen werden von oben nach unten und von links nach rechts gelesen.
- Zustände werden von einem "C" eingeleitet.
- Dem ersten Zustand wird ein zusätzliches "C" vorangestellt.
- Der Datenteil folgt unverzüglich der Maschinendefinition und wird von einem "CCC" eingeleitet. Er besteht aus einer Folge von Nullen und Einsen und wird durch ein "◊" beendet (◊ (Blank) bei JFLAP autom. gegeben.).
Wenn wir die Regeln auf unseren Basisautomaten anwenden, erhalten wir folgende Zeichenkette:
CCC0C1R0C11R1 CC0C1111R0C111R0 CC0C1111R0C11R1 CC0C0C0 CCC 1111110 ◊ ||| | | | | | | | | | | | +--Zustand 1+ +---Zustand 2--+ +--Zustand 3--+ +-Z 4-+ | +Daten+ | ||| | +- Datenende ||+- Transitionsbeginn +- Trennung zum Datenteil |+- neuer Zustand +- erster Zustand
Wir wenden noch zwei Initialisierungsregeln an:
- Ersetze das dritte "C" von links durch seine Markierung (="c").
- Ersetze das erste Symbol des Datenbereichs durch seine Markierung (M("0")="o", M("1")="i", M("◊")="b").
und vervollständigen damit unsere Eingabe für die universelle Turingmaschine:
Die UTM
Die Turingmaschine:
und die zugehörige Transitionstabelle:
Zorg | Zneu | Eingabebandsymbole | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | C | L | R | b | m0 | m1 | mC | m◊ | ||
0 | 1 | C | L | R | ◊ | o | i | c | b | ||
A | q0 | q0,0,R | q0,1,R | q0,C,R | q0,L,R | q0,R,R | q1,c,R | ||||
B | q1 | q1,0,R | q1,1,R | q1,C,R | q1,L,R | q1,R,R | q3,o,L | q4,i,L | q2,b,L | ||
C◊ | q2 | q2,0,L | q2,1,L | q2,C,L | q2,L,L | q2,R,L | q5,C,R | ||||
C0 | q3 | q3,0,L | q3,1,L | q3,C,L | q3,L,L | q3,R,L | q6,C,R | ||||
C1 | q4 | q4,0,L | q4,1,L | q4,C,L | q4,L,L | q4,R,L | q7,C,R | ||||
D◊ | q5 | q31,0,L | q8,i,L | ||||||||
D0 | q6 | q6,0,R | q6,1,R | q5,C,R | q6,L,R | q6,R,R | |||||
D1 | q7 | q7,0,R | q7,1,R | q6,C,R | q7,L,R | q7,R,R | |||||
E | q8 | q8,0,L | q8,1,L | q9,C,L | q8,L,L | q8,R,L | |||||
F | q9 | q8,0,L | q8,1,L | q10,C,L | q8,L,L | q8,R,L | |||||
G | q10 | q8,0,L | q8,1,L | q11,C,R | q8,L,L | q8,R,L | |||||
H | q11 | q12,C,R | |||||||||
I | q12 | q13,c,R | |||||||||
J | q13 | q13,0,R | q13,1,R | q13,C,R | q13,L,R | q13,R,R | q14,1,R | ||||
KL | q14 | q15,i,L | q24,L,R | q25,R,R | |||||||
ML | q15 | q15,0,L | q15,1,L | q15,C,L | q15,L,L | q15,R,L | q16,C,R | ||||
NL | q16 | q16,0,R | q16,1,R | q17,C,R | q16,L,R | q16,R,R | q21,i,R | ||||
PL | q17 | q16,0,R | q16,1,R | q18,c,R | q16,L,R | q16,R,R | q21,i,R | ||||
SL | q18 | q18,0,R | q18,1,R | q18,C,R | q18,L,R | q18,R,R | q14,1,R | ||||
KR | q19 | q20,i,R | q24,L,R | q25,R,R | |||||||
MR | q20 | q20,0,R | q20,1,R | q20,C,R | q20,L,R | q20,R,R | q21,C,R | ||||
NR | q21 | q21,0,R | q21,1,R | q22,C,R | q21,L,R | q21,R,R | |||||
PR | q22 | q21,0,R | q21,1,R | q23,c,L | q21,L,R | q21,R,R | |||||
SR | q23 | q23,0,L | q23,1,L | q23,C,L | q23,L,L | q23,R,L | q19,1,R | ||||
TL | q24 | q26,0,R | q27,1,R | ||||||||
TR | q25 | q28,0,R | q29,1,R | ||||||||
TL-0 | q26 | q26,0,R | q26,1,R | q26,C,R | q26,L,R | q26,R,R | q30,0,L | q30,0,L | q26,c,R | q30,0,L | |
TL-1 | q27 | q27,0,R | q27,1,R | q27,C,R | q27,L,R | q27,R,R | q30,1,L | q30,1,L | q27,c,R | q30,1,L | |
TR-0 | q28 | q28,0,R | q28,1,R | q28,C,R | q28,L,R | q28,R,R | q30,0,R | q30,0,R | q28,c,R | q30,0,R | |
TR-1 | q29 | q29,0,R | q29,1,R | q29,C,R | q29,L,R | q29,R,R | q30,1,R | q30,1,R | q29,c,R | q30,1,R | |
U | q30 | q3,o,L | q4,i,L | q2,b,L | |||||||
V | q31 | q31,0,L | q31,1,L | q32,C,L | q31,L,L | q31,R,L | |||||
W | q32 | q31,0,L | q31,1,L | q33,C,R | q31,L,L | q31,R,L | |||||
X1 | q33 | q34,C,R | |||||||||
X2 | q34 | q35,0,R | |||||||||
X3 | q35 | q36,C,R | |||||||||
X4 | q36 | q37,0,R | |||||||||
X5 | q37 | q38,C,R | |||||||||
X6 | q38 | q39,0,R | |||||||||
Y | q39 |
Die Abarbeitung der Eingabe
Wenden wir die UTM auf unsere Zeichenkette an, kann man die Arbeitsweise anhand der Kopfposition (rot) nachvollziehen. Die UTM terminiert mit dem korrekten Ergebnis (blau).
Die zugehörige JFLAP-Datei.
UTM von Roger Penrose
Die zweite UTM ist dem Buch von Roger Penrose [Pen91] entnommen. Die Grundidee hierbei ist, daß jeder Turing-Maschine eine sogenannte Turingzahl zugeordnet werden kann.
Als Beispiel dient wieder unser Automat, der in einer Zeichenkette aus lauter Einsen jedes zweite Vorkommen durch eine Null ersetzt, bis er auf eine Null trifft:
Kodierung als Eingabe für die UTM
Die zugehörigen Transitionen mit den Zustandsnummern in Binärdarstellung:(Zustandsnummer(2))(gelesenes Zeichen) → (Zustandsnummer(2))(geschriebenes Zeichen)(Kopfbewegung)
00 | → | 00R |
01 | → | 11R |
10 | → | 110S |
11 | → | 100R |
100 | → | 110S |
101 | → | 11R |
110 | → | 110S |
111 | → | 111S |
Die fortlaufende Numerierung auf der linken Seite kann weggelassen werden. Die rechte Seite ergibt von oben nach unten folgende Zeichenkette:
Jedes 00 kann weggelassen werden, 01 wird als 1 kodiert. Weiterhin gelten folgende Darstellungen:
0 | für 0 oder 0 |
10 | für 1 oder 1 |
110 | für R |
1110 | für L |
11110 | für S |
Wir erhalten das Zwischenergebnis:
Ebenso wird angenommen, daß die Transition 00 → 00R jedem Automaten immanent ist (0 fungiert hier ebenso als Blank; also gehe bis zum Wortanfang). Da jede Transition mit R, L oder S aufhört, kann die Folge "110" am Anfang und am Ende gestrichen werden. Die resultierende Zeichkette stellt dann die Turingzahl in Binärdarstellung dar:
Bzw. in Dezimaldarstellung: m = 390258686802173611.
Die UTM
Eine solche Turingmaschine Tm angewandt auf eine Zahl n ergibt eine Zahl p: Tm(n)=p. Eine universelle Turingmaschine U nimmt als Eingaben die Zahlen m, n und berechnet daraus p: U(m,n)=p. Penrose gibt folgende universelle Turingmaschine an:
U = 724485533533931757719839503961571123795236067255655963110814479 6606505059404241090310483613632359365644443458382226883278767626556 1446928141177150178425517075540856576897533463569424784885970469347 2573998858228382779529468346052106116983594593879188554632644092552 5505820555989451890716537414896033096753020431553625034984529832320 6515830476641421307088193297172341510569802627346864299218381721573 3348282307345371342147505974034518437235959309064002432107734217885 1492760797597634415123079586396354492269159479654614711345700145048 1673375621725734645227310544829807849651269887889645697609066342044 7798902191443793283001949357096392170390483327088259620130177372720 2718625919914428275437422351355675134084222299889374410534305471044 3686958764051781280194375308138706399427728231564252892375145654438 9905278079324114482614235728619311833261065612275553181020751108533 7633806031082361675045635852164214869542347187426437544428790062485 8270912404220765387542644541334517485662915742999095026230097337381 3772416217274772361020678685400289356608569682262014198248621698902 6091309402985706001743006700868967590344734174127874255812015493663 9389969058177385916540553567040928213322216314109787108145997866959 9704509681841906299443656015145490488092208448003482249207730403043 1884298993931352668823496621019471619107014619685231928474820344958 9770955356110702758174873332729667899879847328409819076485127263100 1740166787363477605857245036964434897992034489997455662402937487668 8397514044516657077500605138839916688140725455446652220507242623923 7921152531816251253630509317286314220040645713052758023076651833519 95689139748137504926429605010013651980186945639498
Die Dekodierung führt zu folgender Transitionstabelle1:
Als Trennung zwischen eingegebener Turingmaschinenzahl m und dem Argument n dient die Folge "111110", außerdem wird von ungeraden n die letzte "1" gestrichen und jedes n mit "1" abgeschlossen. Wir erhalten für n=1111110 die UTM-Eingabe:
1 Die Transitionstabelle für JFLAP wurde um einen Zustand "201" erweitert, der den Endzustand darstellt, da JFLAP mit finalem 0-Zustand keinen Schritt auf dem Band macht.
2 JFLAP muss links und rechts genügend "Reservenullen" als Eingabe erhalten, da die Null ebenfalls als Blank fungiert. Benutzen Sie daher die erste Zeile der Ausgabe als Eingabe.
Die Abarbeitung der Eingabe
Auch bei dieser Abarbeitung ist die Kopfposition der TM wieder rot und das Ergebnis blau dargestellt.
Die zugehörige JFLAP-Datei.
UTM von Marvin Minsky
Die beiden letzten UTMs zeichneten sich entweder durch ein großes Arbeitsalphabet oder durch eine große Anzahl von Zuständen aus. Marvin Minsky suchte Anfang der 60er Jahre eine Möglichkeit, eine universelle Turingmaschine mit kleinem Eingabealphabet und niedriger Zustandszahl zu konstruieren. 1962 veröffentlichte er seine Lösung ([Min62], auch beschrieben in [Min67]), eine (7,4)-UTM mit sieben Zuständen und vier Symbolen. In den vergangenen Jahren folgten weitere Veröffentlichungen, ua. von Rogozhin (zB. [Rog96]) mit (2,24), (3,10), (4,7), (5,5), (6,4), (10,3) und (18,2) oder Baiocchi (zB. [Bai01]) mit (7,4), (10,3) und (19,2)-Varianten.
Aktualisierung: Im Herbst 2007 ist es Alex Smith gelungen [Smi07], den Nachweis zu führen, daß eine von Stephen Wolfram gefundene Turingmaschine mit nur drei Farben und zwei Zuständen universell ist.
Die gemeinsame Grundidee dieser Maschinen sind die sogen. Tag-Systeme. Ein Tag-System besteht aus einer Menge A = {a1,a2...an} von Zeichen, dem Alphabet, und einer Menge W von Wörtern über A. Für jedes 1 ≤ i ≤ n gibt es ein solches Wort Wi ∈ W, sofern es kein Haltesymbol ist. Weiterhin ist zu jedem Tag-System eine Eliminierungszahl P festgelegt.
Beispiel
Gegeben sei ein Tag-System mit P=2 und den Produktionen ai → Wi:
a1 | → | a3a3a3 |
a2 | → | a3 |
a3 | → | halt |
Bei der Abarbeitung eines Startwortes s = aiajW werden die ersten P Zeichen gelöscht und an das Wortende die rechte Seite der Produktion von ai → Wi angehangen: s' = WWi für P=2. Dies wird wiederholt, bis das erste Zeichen ein Haltesymbol ist. Bei einem Startwort a1a2a2 ergibt das für unser Beispiel: a1a2a2 → a2a3a3a3 → a3a3a3.
Turing-Maschine → Tag-System
Cocke und Minsky wiesen 1964 [CoMi64] die Universalität von Tag-Systemen mit P=2 nach. Wir werden uns daher auf P=2 beschränken und uns weiterhin an einer leicht abgewandelten Form von Minskys UTM halten, die Raphael M. Robinson in [Rob91] beschrieben hat. Ebenfalls in dieser Arbeit ist ein Algorithmus zur Reduzierung einer n-Symbol-TM zu einer 2-Symbol-TM enthalten. Für unseren Beispielautomaten, der wieder jede zweite "1" in eine "0" umwandelt, bis er auf eine Null trifft, ist dies aber nicht notwendig.
Wie funktioniert nun die Umwandlung unserer Turingmaschine in ein Tag-System? Zuerst benötigen wir eine Darstellung des Arbeitsbandes. Wir nehmen dazu an, der Kopf der Turingmaschine befindet sich über c0 und die linke und rechte Seite des Bandes stellen nat. Zahlen in Binärdarstellung dar:
<---m--- --n--> ... c-3c-2c-1c0c1c2c3 ...
mit
j | = | c0 |
m | = | c-1 + 2c-2 + 4c-3 + 8c-4 + ... |
n | = | c1 + 2c2 + 4c3 + 8c4 + ... |
Von der üblichen Quintupeldarstellung für Transitionen ausgehend (qi,sj,sk,D,ql) = (Ist-Zustand, gelesenes Zeichen, geschriebenes Zeichen, Kopfbewegung, Nachfolgezustand), können wir den Zustand unserer Turingmaschine jetzt als Quadrupel (i,j,m,n) beschreiben. Für unser Band wählen wir deshalb die Darstellung:
Um unsere Transitionen (qi,sj,sk,D,ql) in Produktionen umzuwandeln benutzen wir folgende Regeln:
1. Produktionen für (qi,sj,sk,R,ql)
Aij | → | CijCij(cijcij)k |
aij | → | (cijcij)2 |
Bij | → | Dij |
bij | → | dij |
2. Produktionen für (qi,sj,sk,L,ql)
Aij | → | Cij |
aij | → | cij |
Bij | → | DijDij(dijdij)k |
bij | → | (dijdij)2 |
3. Produktionen für beide Varianten
Cij | → | El1El0 |
cij | → | el1el0 |
Dij | → | Fl1Fl0 |
dij | → | fl1fl0 |
4. Produktionen unabhängig von der Transition
Ei0 | → | Ai0Ai0Ai0 |
Ei1 | → | Ai1Ai1 |
eij | → | aijaij |
Fij | → | BijBij |
fij | → | bijbij |
Besitzt ein Zustand keine wegführenden Transitionen (im Beispiel q2), können wir die entspr. Cij, cij, Dij und dij aus unserem Alphabet streichen. Des Weiteren verlieren die jeweiligen Aij, aij und bij ihre Indizes, so daß A unser einziges Haltesymbol ist (a, b und Bij sind "virtuelle Haltesymbole").
Wenden wir die Regeln auf unseren Basisautomaten an, erhalten wir folgende Produktionen (A20 = A21 = A, a20 = a21 = a, b20 = b21 = b, doppelte Produktionen wurden weggelassen):
A | → | halt |
A00 | → | C00C00 |
a00 | → | c00c00c00c00 |
B00 | → | D00 |
b00 | → | d00 |
C00 | → | E21E20 |
c00 | → | e21e20 |
D00 | → | F21F20 |
d00 | → | f21f20 |
E00 | → | A00A00A00 |
E01 | → | A01A01 |
e00 | → | a00a00 |
F00 | → | B00B00 |
f00 | → | b00b00 |
A01 | → | C01C01c01c01 |
a01 | → | c01c01c01c01 |
B01 | → | D01 |
b01 | → | d01 |
C01 | → | E11E10 |
c01 | → | e11e10 |
D01 | → | F11F10 |
d01 | → | f11f10 |
e01 | → | a01a01 |
F01 | → | B01B01 |
f01 | → | b01b01 |
A10 | → | C10C10 |
a10 | → | c10c10c10c10 |
B10 | → | D10 |
b10 | → | d10 |
C10 | → | E21E20 |
c10 | → | e21e20 |
D10 | → | F21F20 |
d10 | → | f21f20 |
E10 | → | A10A10A10 |
E11 | → | A11A11 |
e10 | → | a10a10 |
F10 | → | B10B10 |
f10 | → | b10b10 |
A11 | → | C11C11 |
a11 | → | c11c11c11c11 |
B11 | → | D11 |
b11 | → | d11 |
C11 | → | E01E00 |
c11 | → | e01e00 |
D11 | → | F01F00 |
d11 | → | f01f00 |
e11 | → | a11a11 |
F11 | → | B11B11 |
f11 | → | b11b11 |
E20 | → | AAA |
E21 | → | AA |
e20 | → | aa |
F20 | → | B20B20 |
f20 | → | bb |
e21 | → | aa |
F21 | → | B21B21 |
f21 | → | bb |
B20 | → | halt |
B21 | → | halt |
a | → | halt |
b | → | halt |
Die Abarbeitung des Tag-Systems
Wir überprüfen die Abarbeitung des Tag-Systems. Als Startkonfiguration wählen wir die Zeichenkette "1111", der Automat befindet sich im Zustand q0 und liest die erste "1". Alle anderen Felder des Eingabebandes sind mit "0" belegt. In unserer Tag-Darstellung mit der beschriebenen TM-Abstraktion erhalten wir das Wort:
<---m--- ---n---> ... 000011110000 ...
Wir dekodieren das Ergebnis:
m = 20 = 10100(2)
halten also im Zustand 2, über einer Null, mit dem Ergebnis: "10100". Unser Tag-System verhält sich also genau wie unser Basisautomat.
Kodierung als Eingabe für die UTM
Um unser Tag-System als Eingabe für die UTM aufzubereiten, gehen wir von einem Alphabet a0, a1, a2 ... ap mit den zugehörigen Produktionen ai → ai1ai2 ... aini aus1.
Für jedes 0 ≤ i ≤ p definieren wir ein Ni mit:
wobei ni = 0, falls ai ein Haltesymbol ist.
Die rechte Seite einer Produktion wird mit Hilfe der eben berechneten Ni kodiert:
und kann zusammen mit den anderen Produktionen auf dem Eingabeband dargestellt werden2:
Uns fehlt nur noch die Kodierung des Startwortes S = aras ... az:
Beachten Sie, daß a0, das Haltesymbol, als leere Zeichenkette kodiert wird. Ein Tag-Wort a0a0a1a1 würde also als "33232" dargestellt werden.
Für unser Beispiel und folgender Numerierung ergeben sich dann die ni, Ni und Pi:
i | ai | ni | Ni | Pi |
0 | A | 0 | 0 | - |
1 | A00 | 2 | 1 | 1 013 01 013 01 |
2 | a00 | 4 | 4 | 1 016 01 016 01 016 01 016 01 |
3 | B00 | 1 | 9 | 1 019 01 |
4 | b00 | 1 | 11 | 1 022 01 |
5 | C00 | 2 | 13 | 1 0149 01 0153 01 |
6 | c00 | 2 | 16 | 1 0156 01 0165 01 |
7 | D00 | 2 | 19 | 1 0159 01 0168 01 |
8 | d00 | 2 | 22 | 1 0162 01 0171 01 |
9 | E00 | 3 | 25 | 1 01 01 01 01 01 01 |
10 | E01 | 2 | 29 | 1 041 01 041 01 |
11 | e00 | 2 | 32 | 1 04 01 04 01 |
12 | F00 | 2 | 35 | 1 09 01 09 01 |
13 | f00 | 2 | 38 | 1 011 01 011 01 |
14 | A01 | 4 | 41 | 1 058 01 058 01 055 01 055 01 |
15 | a01 | 4 | 46 | 1 058 01 058 01 058 01 058 01 |
16 | B01 | 1 | 51 | 1 061 01 |
17 | b01 | 1 | 53 | 1 064 01 |
18 | C01 | 2 | 55 | 1 0100 01 0104 01 |
19 | c01 | 2 | 58 | 1 0107 01 0140 01 |
20 | D01 | 2 | 61 | 1 0110 01 0143 01 |
21 | d01 | 2 | 64 | 1 0113 01 0146 01 |
22 | e01 | 2 | 67 | 1 046 01 046 01 |
23 | F01 | 2 | 70 | 1 051 01 051 01 |
24 | f01 | 2 | 73 | 1 053 01 053 01 |
25 | A10 | 2 | 76 | 1 088 01 088 01 |
26 | a10 | 4 | 79 | 1 091 01 091 01 091 01 091 01 |
27 | B10 | 1 | 84 | 1 094 01 |
28 | b10 | 1 | 86 | 1 097 01 |
29 | C10 | 2 | 88 | 1 0149 01 0153 01 |
30 | c10 | 2 | 91 | 1 0156 01 0165 01 |
31 | D10 | 2 | 94 | 1 0159 01 0168 01 |
32 | d10 | 2 | 97 | 1 0162 01 0171 01 |
33 | E10 | 3 | 100 | 1 076 01 076 01 076 01 |
34 | E11 | 2 | 104 | 1 0116 01 0116 01 |
35 | e10 | 2 | 107 | 1 079 01 079 01 |
36 | F10 | 2 | 110 | 1 084 01 084 01 |
37 | f10 | 2 | 113 | 1 086 01 086 01 |
38 | A11 | 2 | 116 | 1 0128 01 0128 01 |
39 | a11 | 4 | 119 | 1 0131 01 0131 01 0131 01 0131 01 |
40 | B11 | 1 | 124 | 1 0134 01 |
41 | b11 | 1 | 126 | 1 0137 01 |
42 | C11 | 2 | 128 | 1 025 01 029 01 |
43 | c11 | 2 | 131 | 1 032 01 067 01 |
44 | D11 | 2 | 134 | 1 035 01 070 01 |
45 | d11 | 2 | 137 | 1 038 01 073 01 |
46 | e11 | 2 | 140 | 1 0119 01 0119 01 |
47 | F11 | 2 | 143 | 1 0124 01 0124 01 |
48 | f11 | 2 | 146 | 1 0126 01 0126 01 |
49 | E20 | 3 | 149 | 1 00 01 00 01 00 01 |
50 | E21 | 2 | 153 | 1 00 01 00 01 |
51 | e20 | 2 | 156 | 1 0176 01 0176 01 |
52 | F20 | 2 | 159 | 1 0174 01 0174 01 |
53 | f20 | 2 | 162 | 1 0177 01 0177 01 |
54 | e21 | 2 | 165 | 1 0176 01 0176 01 |
55 | F21 | 2 | 168 | 1 0175 01 0175 01 |
56 | f21 | 2 | 171 | 1 0177 01 0177 01 |
57 | B20 | 0 | 174 | 101 |
58 | B21 | 0 | 175 | 101 |
59 | a | 0 | 176 | 101 |
60 | b | 0 | 177 | 101 |
und für die oben gewählte Startkonfiguration:
1 Sollte nicht für jedes Symbol eine Produktion vorhanden sein, wird das entsprechende ai als "virtuelles Haltesymbol" definiert.
2 Zwischen den Pi uns S befindet sich mindestens eine Null. Der Exponent n meint immer die n-fache Wiederholung des Basissymbols.
Die UTM
Unsere universelle Turingmaschine besitzt 27 Transitionen. Die Tripel in den Zellen sind (sk,D,ql): zB. befinden wir uns im Zustand q2, lesen eine "0", schreiben eine "2", bewegen den Kopf nach links und gehen in den Zustand q4 über.
Zustand | 0 | 1 | 2 | 3 |
q0 | (2,R,0) | (3,R,0) | (0,L,1) | (2,L,4) |
q1 | (0,L,1) | (3,R,0) | (0,L,1) | (1,L,1) |
q2 | (2,L,4) | (3,R,2) | (2,R,2) | (1,R,2) |
q3 | (3,L,4) | (3,R,3) | (2,R,3) | (1,R,3) |
q4 | - | (3,L,4) | (2,L,4) | (1,L,5) |
q5 | (2,R,2) | (1,L,6) | (2,L,5) | (1,L,5) |
q6 | (2,R,3) | (1,R,6) | (0,R,6) | (0,R,0) |
Die Abarbeitung
Die Abarbeitung beginnt die UTM im Zustand q0 über dem ersten Zeichen von S. Wir müssen den Automaten daher wieder an JFLAP anpassen und auch die Eingabe wieder mit genügend Reservenullen ("0" dient wieder als Blank) versehen. Wir empfehlen allerdings, in diesem Fall eine selbstgeschriebene kleine Turingmaschine mit geeigneten Datenstrukturen zu verwenden. Dies würde auch die Ergebnisdekodierung vereinfachen.
Leider verbietet sich eine vernünftige Darstellung der Ausgabe. Der geneigte Leser möge sich den Speicherbedarf einer vierfarbigen {0,1,2,3} Grafik mit einer Breite von 41.714 Pixeln (Arbeitsband am Ende der Abarbeitung mit jeweils zwei Blanks links und rechts) und einer Höhe von 1.592.723.815 Pixeln (Anzahl der Iterationen), gegebenfalls mit geeigneter Komprimierung (die UTM hierbei nicht vergessen ;)), überlegen.
Wir beschränken uns daher auf den wesentlichen Teil:
Serg = 2 0 3 2 0 3 2176 3 2176 3 2176 3 2176 3 2176 3 2176 3 2176 3 2176 3 2176 3 2176 3 2176 3 2176 3 2176 3 2176 3 2176 3 2176 3 2176 3 2176 3 2176 3 2176 3 2176 3 2176 3 2176 3 2176 3 2176 3 2176 3 2176 3 2176 3 2176 3 2176 3 2176 3 2176 3 2176 3 2176 3 2176 3 2176 3 2176 3 2176 3 2176 3 2176 3 2174 3 2174
Ergebnisdekodierung
Leider hat die Maschine einen kleinen Schönheitsfehler. Die erste "3" (blau) wird immer durch eine "2" ersetzt. Vor dem Dekodieren muß man dies erst wieder rückgängig machen. In vereinfachter Schreibweise:
und mit Hilfe der obigen Tabelle dekodiert:
Wir erhalten also genau das erwartete und oben bereits hergeleitete Ergebnis.
Die zugehörige JFLAP-Datei.
Weiterführende Verweise
- Brainfuck: Nachweis der Turing-Vollständigkeit über eine Tag-System-UTM
- Wolfram: A New Kind Of Science: Universality in Turing Machines and Other Systems
- Marvin Minsky: Netzseite
Literatur
- [Bai01]
- Baiocchi, Claudio: Three Small Universal Turing Machines, LNCS 2055, 2001.
- [Chu36]
- Church, Alonzo: An unsolvable problem of elementary number theory. American Journal of Mathematics/58, 1936.
- [CoMi64]
- Cocke, John; Minsky, Marvin: Universality of Tag Systems With P=2, ACM Vol. 11, 1964.
- [Goe31]
- Gödel, Kurt: Über formal unentscheidbare Sätze der Principia Mathematica und verwandter Systeme I, 1931.
- [Hil00]
- Hilbert, David: Mathematische Probleme: Vortrag zum Mathematiker-Kongreß zu Paris, 1900. (Netzversion)
- [Hil28]
- Hilbert, David; Ackerman, Wilhelm: Grundzüge der theoretischen Logik, 1928.
- [HU69]
- Hopcroft, Ullman: Formal Languages and Their Relation to Automata, 1969.
- [Min62]
- Minsky, Marvin: Size and structure of universal Turing machines using tag systems, Proceedings of Symposia in Pure Mathematics, Vol. 5, AMS, 1962.
- [Min67]
- Minsky, Marvin: Computation: Finite And Infinite Machines, Prentice Hall, 1967.
- [Pen91]
- Penrose, Roger: Computerdenken, Spektrum der Wissenschaft Verlagsgesellschaft, Heidelberg 1991.
- [Rob91]
- Robinson, Raphael M.: Minsky's Small Universal Turing Machine, IJM Vol. 2 No. 5, 1991.
- [Rog96]
- Rogozhin, Yurii: Small universal Turing machines, TCS 168, 1996.
- [Smi07]
- Smith, Alex: Universality of Wolfram's 2, 3 Turing Machine. (Netzversion)
- [Tur36]
- Turing, Alan Mathison: On Computable Numbers, with an application to the Entscheidungsproblem, 1936. (Netzversion)