Berechenbarkeit und Komplexit¨at Vorlesung 3
Prof. Dr. Wolfgang Thomas Lehrstuhl Informatik 7
RWTH Aachen
22. November 2014
Alan Turing (1912 - 1954)
Definition der Turingmaschine (TM)
Komponenten einer TM
Q, die endliche Zustandsmenge Σ, das endliche Eingabealphabet Γ⊃Σ, das endliche Bandalphabet B ∈Γ\Σ, das Leerzeichen (Blank) q0∈Q, der Anfangszustand
¯
q ∈Q, der Endzustand
δ : (Q\ {¯q})×Γ→Q×Γ× {R,L,N}, die Zustands¨uberf¨uhrungsfunktion
Eine TM ist definiert durch das 7-Tupel (Q,Σ,Γ,B,q0,¯q, δ).
Beispiel
Entscheidungs-TM f¨ur die SpracheL={w1|w ∈ {0,1}∗} M = (Q,Σ,Γ,B,q0,q¯, δ) mit
Q ={q0,q1,q}¯ Σ ={0,1}
Γ ={0,1,B}
δ gem¨aß Tabelle
δ 0 1 B
q0 (q0,B,R) (q1,B,R) reject q1 (q0,B,R) (q1,B,R) accept
”accept“ steht als Abk¨urzung f¨ur (¯q,1,N).
”reject“ steht als Abk¨urzung f¨ur (¯q,0,N).
Die Tabellendarstellung vonδ heißt auchTuringtafel.
Laufzeit und Speicherplatz
F¨ur eine terminierende Rechnung einer TM vereinbaren wir Laufzeit = Anzahl der Schritte bis zur Terminierung Speicherplatz = Anzahl der Bandzellen, die w¨ahrend der Rechnung besucht werden
Techniken zur Programmierung von TMen
Trick 1: Speicher im Zustandsraum
F¨ur die Unterscheidung endlich vieler F¨alle vergr¨oßert man den Zu- standsraum:
F¨urk >0 verwende den Zustandsraum Qneu :=Q× {1, . . . ,k}
Dies rechtfertigt die Redeweise:
“Die TM merkt sich ein Datumd [eines von endlich vielen] und verf¨ahrt entsprechend.”
Beispiel: Kopieren
Wir geben eine TM an f¨ur den ¨Ubergangqw ⊢∗q′wBw mit w ∈ {0,1}+
Die TM arbeitet aufw =a1. . .ak so:
1 Unterstreiche den aktuellen Buchstaben, merke ihn und gehe nach rechts auf das Feld vor dem zweiten auftretenden Blank.
Konfiguration im 1. Durchlauf:a1a2. . .akB[(q)a1]B
2 Drucke gemerkten Buchstaben, gehe nach links bis auf den unterstrichenen Buchstaben, wandle in zur¨uck (inai) und gehe ein Feld nach rechts.
Konfiguration im 1. Durchlauf:a1(q)a2. . .anBa1
3 Falls aktueller Buchstabe =B, gehe nach links auf das n¨achste B, ein Feld nach rechts, und terminiere in q′. Ansonsten weiter bei 1.
Techniken zur Programmierung von TMen
Trick 2: Mehrspurmaschinen
Eine k-spurige TM ist eine TM, ber der das Band in k Spuren eingeteilt ist.
In jeder Bandzelle stehenk Zeichen, die der Kopf gleichzeitig einle- sen kann.
Formal: Das Bandalphabet enth¨alt Buchstabenvektoren:
Γneu := Σ∪ {B} ∪Γk .
Beispiel: Addition mittels 3-spuriger TM
Eingabebin(i1)#bin(i2). Ausgabe bin(i1+i2).
Wir verwenden eine 3-spurige TM mit den Alphabeten Σ ={0,1,#} und
Γ =
0,1,#,
0 0 0
,
0 0 1
,
0 1 0
, . . . ,
1 1 1
,B
.
Beispiel: Addition mittels 3-spuriger TM
Schritt 1: Kopiere die beiden Eingabew¨orter in die erste und zweite Spur rechtsb¨undig ¨ubereinander.
Aus der Eingabe 0011#0110 wird beispielsweise . . .BB
0 0 0
0 1 0
1 1 0
1 0 0
BB. . . .
Schritt 2: Addition nach der Schulmethode:
Kopf l¨auft von rechts nach links, ¨Ubertr¨age werden im Zustand gespeichert. Ergebnis:
. . .BB
0 0 1
0 1 0
1 1 0
1 0 1
BB. . . .
Schritt 3: R¨ucktransformation von Spur 3 ins Einspur-Format:
Ausgabe 1001.
Weitere Techniken der Programmierung
Standardtechniken aus der Programmierung k¨onnen auch auf TMen implementiert werden.
Schleifenhaben wir bereits im Beispiel gesehen.
Variablen k¨onnen realisiert werden, indem wir pro Variable eine Spur reservieren und dort die Werte eintragen.
Felder (Arrays) k¨onnen ebenfalls auf einer Spur abgespeichert werden (etwa mit # als Trennsymbol).
Unterprogramme k¨onnen implementiert werden indem wir eine Spur des Bandes als Prozedurstack verwenden.
So k¨onnen bekannte Algorithmen z.B. zum Sortieren von Daten auf der TM ausgef¨uhrt werden.
Turingmaschinen mit mehreren B¨andern
k-Band TM
Eine k-Band-TM verf¨ugt ¨uber k Arbeitsb¨ander mit jeweils einen unabh¨angigen Kopf. Die Zustands¨ubergangfunktion ist entsprechend von der Form
δ:Q×Γk →Q×Γk × {L,R,N}k .
Band 1 fungiert als Ein-/Ausgabeband wie bei der (1-Band) TM.
Die B¨ander 2, . . . ,k sind initial mitB beschrieben.
Simulation k -Band TM durch 1-Band TM
Satz:
Eine k-Band TM M, die f¨ur Eingabel¨ange n in Zeit t(n) terminiert und Platz s(n) ben¨otigt, kann von einer (1-Band) TM M′ mit in ZeitO(t2(n)) und Platz O(s(n)) simuliert werden.
Beweis:Die TM M′ verwendet 2k Spuren. Nach Simulation des i-ten Schrittes f¨ur 0≤i ≤t(n) gilt
Die ungeraden Spuren 1,3, . . . ,2k−1 enthalten den Inhalt der B¨ander 1, . . . ,k von M.
Auf den geraden Spuren 2, . . . ,2k ist die jeweilige Kopfposition durch das Zeichen # markiert.
Initialisierung im Zustand q
0Gegebene 2-Band TM
· · · B B B 0 0 1 0 1 B B B · · ·
· · · B B B B B B B B B B B · · ·
Simulierende 4-Spur-TM
· · · B B B 0 0 1 0 1 B B B · · ·
· · · B B B # B B B B B B B · · ·
· · · B B B B B B B B B B B · · ·
· · · B B B # B B B B B B B · · ·
Simulation k -Band TM durch 1-Band-TM
Gegebene 2-Band TM
· · · B 1 c a B 0 1 c c B B · · ·
· · · B B B 0 1 1 c c a B B · · ·
Simulierende 4-Spur-TM
· · · B 1 c a B 0 1 c c B B · · ·
· · · B B B B B B B # B B B · · ·
· · · B B B 0 1 1 c c a B B · · ·
· · · B B # B B B B B B B B · · ·
Simulation k -Band TM durch 1-Band-TM – Details
Jeder Rechenschritt vonM wird durchM′ wie folgt simuliert.
Am Anfang steht der Kopf von M′ auf dem linkesten Vektor mit einem oder mehreren #.
IstM im Zustandq, so hatM′ einen Zustand, derq kodiert.
Der Kopf vonM′ l¨auft nach rechts bis zum rechtesten (zum k-ten) #.
Dabei werden die auftretenden #-Zeichen bisk gez¨ahlt und es wird dask-Tupel der Buchstaben gespeichert, die ¨uber den #-Zeichen stehen.
Bei Erreichen desk-ten # R¨uckkehr (durch erneutes Z¨ahlen bisk) zum Vektor mit dem ersten #
Bei jedem # ¨Anderung des dar¨uber stehenden Buchstabens gem¨aß Turingtafel vonM und gegebenenfalls Verschiebung von #
bei Erreichen der ersten Position mit einem #: ¨Ubergang in neuen Zustand gem¨aß Turingtafel von M
Simulation k -Band TM durch 1-Band-TM – Laufzeit
Laufzeitanalyse(f¨ur gegebene TMM mit Laufzeitt(n)):
Nach i Schritten k¨onnen die #-markierten Felder h¨ochstens 2i Positionen auseinanderliegen.
Der maximale Abstand zwischen den #-Zeichen ist durch O(t(n)) beschr¨ankt.
Somit ist auch die Laufzeit zur Simulation eines Schrittes durch O(t(n)) beschr¨ankt.
Insgesamt ergibt das zur Simulation von t(n) Schritten eine
Laufzeitschranke vonO(t(n)2).
Weitere TM-Varianten
Transitionen f¨ur Buchstabendrucken und Kopfbewegung getrennt
Linksbeschr¨anktes Rechenband
Rechnung auf “zweidimensionalem Papier”, Kopfbewegungen nach links, rechts, oben, unten (und N).
Registermaschinen (RAM) ¨uber N
Programm
b Befehlsz¨ahler
✻
❄
c(0) Akkumulator
✲
✛ c(1)c(2)c(3)c(4) · · · unbeschr¨ankter Speicher
Funktionsweise der RAM
Der Speicher der RAM ist unbeschr¨ankt und besteht aus den Registern c(0),c(1),c(2),c(3), . . .
Die Inhalte der Register sind nat¨urliche Zahlen, die beliebig groß sein k¨onnen.
Die Eingabe sind nat¨urliche Zahlen, die initial in den ersten Registern abgespeichert sind.
Der Befehlsz¨ahler startet mit dem Wert 1. Ausgef¨uhrt wird jeweils der Befehl in derjenigen Zeile auf den der Befehlsz¨ahler verweist.
Die Rechnung stoppt sobald der Befehl END erreicht ist.
Die Ausgabe befindet sich nach dem Stoppen ebenfalls in den ersten Registern.
Zur Subtraktion und Division ¨uber N
Wir verwendenN als Grundbereich.
Es gibt eine nat¨urliche Korrespondenz zum Bereich Σ∗ Wir m¨ussen die Subtraktion einschr¨anken auf Werte in N: Dies geschieht durch Verwendung der Funktion .− (“monus”):
m−. n=m−n, falls m≥n, ansonsten m−n˙ = 0 Wir wollen das Ph¨anomen der Nichttermination nicht im Bereich der elementaren Anweisungen zulassen.
Daher definieren wir hiern/0 := 0
Erl¨auterung von RAM-Befehlen
LOAD i:c(0) :=c(i),b :=b+ 1;
INDLOAD i:c(0) :=c(c(i)),b :=b+ 1;
CLOADi:c(0) :=i,b :=b+ 1;
STOREi:c(i) :=c(0), b:=b+ 1;
INDSTOREi:c(c(i)) :=c(0), b:=b+ 1;
ADDi:c(0) :=c(0) +c(i),b :=b+ 1;
CADD i:c(0) :=c(0) +i,b :=b+ 1;
INDADD i:c(0) :=c(0) +c(c(i)), b:=b+ 1;
...
DIV i:c(0) :=⌊c(0)/c(i)⌋,b:=b+ 1;
CDIVi:c(0) :=⌊c(0)/i⌋,b:=b+ 1;
INDIV i:c(0) :=⌊c(0)/c(c(i))⌋,b :=b+ 1;
GOTO j:b:=j
IF c(0) =x GOTO j:b:=j fallsc(0) =x, sonst b:=b+ 1;
END.
Beispielprogramm f¨ur die RAM: Potenzierung
Eingabe:Zahl m∈N in Register 1, Zahlk ∈Nin Register 2 Ausgabe:Zahlmk in Register 3 (genannterg)
1: CLOAD 1 akku := 1
2: STORE 3 erg :=akku
3: LOAD 2 akku :=reg2
4: If c(0) = 0 THEN GOTO 11 falls akku= 0 dann END
5: CSUB 1 akku :=akku−1
6: STORE 2 reg2 :=akku
7: LOAD 3 akku :=erg
8: MULT 1 akku :=akku·reg1
9: STORE 3 erg :=akku
10: GOTO 3 zur¨uck zu Zeile 3
11: END erg enth¨alt nun mk
Disclaimer:Wir behaupten nicht, dieses Programm sei effizient.
Bemerkungen zur RAM
Auf einer RAM k¨onnen wir offensichtlich alle Befehle wie beispielsweise Schleifen und Rekursionen, die wir von h¨oheren Programmiersprachen gewohnt sind, realisieren.
Modelle f¨ur die Rechenzeit
Uniformes Kostenmaß:Jeder Schritt z¨ahlt eine Zeiteinheit.
Logarithmisches Kostenmaß: Die Laufzeitkosten eines Schrittes sind proportional zur bin¨aren L¨ange der Zahlen in den angesprochenen Registern.
Simulation RAM durch TM
Satz:
Jede im logarithmischen Kostenmaß t(n)-zeitbeschr¨ankte RAM kann f¨ur ein Polynomq durch eine O(q(n+t(n)))-zeitbeschr¨ankte TM simuliert werden.
URM-Programme
Auch f¨ur die RAM kann man gem¨aß Turings Analyse nach einem
“kleinstm¨oglichen” Formalismus fragen.
DieURM-Programme(f¨ur “unbeschr¨ankte Registermaschine”) bilden einen solchen Formalismus.
Definition (URM-Programme)
Ein URM-Programm benutzt VariablenX1,X2, . . .mit Werten in N; es hat die Form
1.instr1,2.instr2, . . . ,k−1.instrk−1,k.end
wobei jede Instruktioninstrj f¨ur j = 1, . . . ,k−1 die Form INC(Xi) (f¨urXi :=Xi+ 1), DEC(Xi) (f¨urXi :=Xi−1)˙ oder IFXi = 0 GOTOℓ(mit 1≤ℓ≤k)
hat.