Noch nie hat eine Religion, weder mittelbar noch unmittelbar, weder als Dogma noch als Gleichnis, eine Wahrheit enthalten.

Willkommen auf meiner Netzseite

Wer auf diesen Seiten tiefschürfende Erkenntnisse, Weltverbesserungsvorschläge oder doch wieder nur Bilder siebenachtelnackter Kopulationszielpersonen sucht, der wird leider enttäuscht werden. Meine Seite ist momentan nur dazu da, mir einen Teil meiner Verweisliste virtuell hinterherzutragen. Nein, nicht wie Mutti früher die Stullenbüchse in die Schule zur Freude der gesamten Klasse, sondern viel cooler (Das sagte man früher so.).
Sollten Sie zufällig ähnliche Männerhobbys sinnvolle Interessen haben, sich zum Beispiel für Geschichte, Rechentechnik, Photographie, lange Sätze oder alte Kraftfahrzeuge interessieren, und hier den ein oder anderen Verweis finden, der dazu führt, daß Sie den Abend vor dem Rechner und nicht mit Ihrer besseren Hälfte verbringen, so tut es mir Leid. Natürlich war das alles überhaupt nicht so gewollt.

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

  1. Hilberts Liste von 23 mathematischen Problemen
  2. Hilbert's Program
  3. Gödels Unvollständigkeitssatz
  4. Halteproblem
  5. Church-Turing-These
  6. The Alan Turing Home Page von A. Hodges
  7. Turing Digital Archive
  8. Kurzbiographie: Wilhelm Ackermann (eng)
  9. Kurzbiographie: Alonzo Church (eng)
  10. Kurzbiographie: Kurt Gödel (eng)
  11. Kurzbiographie: David Hilbert (eng)
  12. 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:

JFLAP-Darstellung des Basisautomaten Bild 1.1: JFLAP-Darstellung des Basisautomaten

In tabellarischer Schreibweise (neuer Zustand, Kopfbewegung, geschriebenes Zeichen):

Zustand01
q0=1reject(1,R,0)(2,R,1)
q1=2reject(4,R,0)(3,R,0)
q2=3reject(4,R,0)(2,R,1)
q3=4accept

Kodierung als Eingabe für die UTM

Die Kodierung für die UTM erfolgt über folgende Regeln:

  1. Die Transitionen des Finalzustandes ("accept") werden mit dem Symbol "0" kodiert.
  2. Die Transition "reject" wird mit dem Symbol "0" kodiert.
  3. 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.
  4. Jede Transition wird durch ein "C" eingeleitet. Transitionen werden von oben nach unten und von links nach rechts gelesen.
  5. Zustände werden von einem "C" eingeleitet.
  6. Dem ersten Zustand wird ein zusätzliches "C" vorangestellt.
  7. 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:

  1. Ersetze das dritte "C" von links durch seine Markierung (="c").
  2. 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:

CCc0C1R0C11R1CC0C1111R0C111R0CC0C1111R0C11R1CC0C0C0CCCi111110◊

Die UTM

Die Turingmaschine:

JFLAP-Darstellung der UTM Bild 1.2: Die universelle Turingmaschine nach Hopcroft und Ullman

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).

(124kB)

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:

JFLAP-Darstellung des Basisautomaten Bild 2.1: JFLAP-Darstellung des Basisautomaten

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)
0000R
0111R
10110S
11100R
100110S
10111R
110110S
111111S

Die fortlaufende Numerierung auf der linken Seite kann weggelassen werden. Die rechte Seite ergibt von oben nach unten folgende Zeichenkette:

00R11R110S100R110S11R110S111S

Jedes 00 kann weggelassen werden, 01 wird als 1 kodiert. Weiterhin gelten folgende Darstellungen:

0für 0 oder 0
10für 1 oder 1
110für R
1110für L
11110für S

Wir erhalten das Zwischenergebnis:

110 1010 110 10100 11110 1000 110 10100 11110 1010 110 10100 11110 101010 11110

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:

m = 10101101010011110100011010100111101010110101001111010101011

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:

(44kB)

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:

10101101010011110100011010100111101010110101001111010101011 111110 1111110 12

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.

(1,3MB) (64kB) (Ja ich weiß, daß die Knöpfe nicht synchronisieren. ;))

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:

a1a3a3a3
a2a3
a3halt

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.

JFLAP-Darstellung des Basisautomaten Bild 3.1: JFLAP-Darstellung des Basisautomaten

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:

AijAij(aijaij)mBijBij(bijbij)n

Um unsere Transitionen (qi,sj,sk,D,ql) in Produktionen umzuwandeln benutzen wir folgende Regeln:

1. Produktionen für (qi,sj,sk,R,ql)

AijCijCij(cijcij)k
aij(cijcij)2
BijDij
bijdij

2. Produktionen für (qi,sj,sk,L,ql)

AijCij
aijcij
BijDijDij(dijdij)k
bij(dijdij)2

3. Produktionen für beide Varianten

CijEl1El0
cijel1el0
DijFl1Fl0
dijfl1fl0

4. Produktionen unabhängig von der Transition

Ei0Ai0Ai0Ai0
Ei1Ai1Ai1
eijaijaij
FijBijBij
fijbijbij

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 ...
A01A01B01B01(b01b01)7

Wir dekodieren das Ergebnis:

AAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaB20B20 = A20A20(a20a20)20B20B20
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:

Ni = (n0 + 1) + (n1 + 1) + ... + (ni-1 + 1)

wobei ni = 0, falls ai ein Haltesymbol ist.

N0 = 0, N1 = 1

Die rechte Seite einer Produktion wird mit Hilfe der eben berechneten Ni kodiert:

Pi = 1 0Nini 01 ... 01 0Ni2 01 0Ni1 01

und kann zusammen mit den anderen Produktionen auf dem Eingabeband dargestellt werden2:

... 0 0 1 Pm ... P2 P1 1 0 ... 0 S 0 0 ...

Uns fehlt nur noch die Kodierung des Startwortes S = aras ... az:

S = 2Nr 3 2Ns 3 ... 3 2Nz

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:

iainiNiPi
0A0 0-
1A002 11 013 01 013 01
2a004 41 016 01 016 01 016 01 016 01
3B001 91 019 01
4b001 111 022 01
5C002 131 0149 01 0153 01
6c002 161 0156 01 0165 01
7D002 191 0159 01 0168 01
8d002 221 0162 01 0171 01
9E003 251 01 01 01 01 01 01
10E012 291 041 01 041 01
11e002 321 04 01 04 01
12F002 351 09 01 09 01
13f002 381 011 01 011 01
14A014 411 058 01 058 01 055 01 055 01
15a014 461 058 01 058 01 058 01 058 01
16B011 511 061 01
17b011 531 064 01
18C012 551 0100 01 0104 01
19c012 581 0107 01 0140 01
20D012 611 0110 01 0143 01
21d012 641 0113 01 0146 01
22e012 671 046 01 046 01
23F012 701 051 01 051 01
24f012 731 053 01 053 01
25A102 761 088 01 088 01
26a104 791 091 01 091 01 091 01 091 01
27B101 841 094 01
28b101 861 097 01
29C102 881 0149 01 0153 01
30c102 911 0156 01 0165 01
31D102 941 0159 01 0168 01
32d102 971 0162 01 0171 01
33E1031001 076 01 076 01 076 01
34E1121041 0116 01 0116 01
35e1021071 079 01 079 01
36F1021101 084 01 084 01
37f1021131 086 01 086 01
38A1121161 0128 01 0128 01
39a1141191 0131 01 0131 01 0131 01 0131 01
40B1111241 0134 01
41b1111261 0137 01
42C1121281 025 01 029 01
43c1121311 032 01 067 01
44D1121341 035 01 070 01
45d1121371 038 01 073 01
46e1121401 0119 01 0119 01
47F1121431 0124 01 0124 01
48f1121461 0126 01 0126 01
49E2031491 00 01 00 01 00 01
50E2121531 00 01 00 01
51e2021561 0176 01 0176 01
52F2021591 0174 01 0174 01
53f2021621 0177 01 0177 01
54e2121651 0176 01 0176 01
55F2121681 0175 01 0175 01
56f2121711 0177 01 0177 01
57B200174101
58B210175101
59a0176101
60b0177101

und für die oben gewählte Startkonfiguration:

S = 241 3 241 3 251 3 251 (3 253 3 253)7

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.

Zustand0123
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:

Serg = 2N0 3 2N0 3 (2N176 3 2N176 3)20 2N174 3 2N174

und mit Hilfe der obigen Tabelle dekodiert:

Serg = AA(aa)20B20B20

Wir erhalten also genau das erwartete und oben bereits hergeleitete Ergebnis.

Die zugehörige JFLAP-Datei.

Weiterführende Verweise

  1. Brainfuck: Nachweis der Turing-Vollständigkeit über eine Tag-System-UTM
  2. Wolfram: A New Kind Of Science: Universality in Turing Machines and Other Systems
  3. 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)
Frank Busse Dresden 2005