Logik, Berechenbarkeit und Komplexität Sommersemester 2012 Hochschule RheinMain Prof. Dr. Steffen Reith 11. Übungsblatt 1. Ein Keller (engl. stack) ist eine bekannte Datenstruktur. Sei die Signatur S = {IsEmpty, nullstack, top, push, pop}, wobei IsEmpty ein einstelliges Prädikat und nullstack eine Konstante ist, top und pop einstellige Funktionen sind und push eine zweistellige Funktion ist. Man beschreibe die Operationen, die auf einem Keller erlaubt sind, durch eine Formel F L S, sodass jedes Modell I von F ein (abstrakter) Keller ist. Hinweis: Ein Bestandteil der Formel könnte z.b. sein. x y(top(push(x, y)) = y) 2. Die folgenden Tatsachen werden in der nächsten Zeit benötigt. Bitte wiederholen bzw. machen Sie sich mit den folgenden Begriffen vertraut: 1 Turingmaschinen Eine Turingmaschine (kurz TM) hat die folgenden Bestandteile: Mehrere (k 1) beidseitig unendliche, in Felder unterteilte Bänder. In jedem Feld steht ein Symbol (Buchstabe) aus einem endlichen Bandalphabet Σ. Das Leerzeichen Σ deutet an, dass in diesem Feld eigentlich nichts steht. Ein Lese- und Schreibkopf für jedes Band (kurz Kopf genannt), der sich von Feld zu Feld bewegen und den Inhalt des jeweils betrachteten Feldes lesen und ändern kann. Eine Steuereinheit, die sich in einem der Zustände aus einer endlichen Zustandsmenge Z befindet, Informationen über die von den Köpfen gelesenen Symbole bekommt und deren Aktivitäten steuert. Es gibt zwei besonders ausgezeichnete Zustände: den Startzustand und den Endzustand. Eine Turingmaschine arbeitet taktweise und kann in Abhängigkeit vom gegenwärtigen Zustand und von den durch die Köpfe gelesenen k Bandsymbole gleichzeitig
Steuereinheit Kopf 1 a 1 a 2 a 3 a n Kopf 3 Kopf 2 Band 1 Band 2 Band 3 Kopf k Band k Leersymbol Abbildung 1: Bestandteile einer Turingmaschine einen neuen Zustand annehmen die k gelesenen Bandsymbole verändern und jeden der Köpfe um maximal ein Feld bewegen. Das Verhalten einer Turingmaschine in einem Takt wird durch die (totale) Überführungfunktion δ : Z Σ k Z Σ k {L, N, R} k festgelegt. Für z Z, a 1,... a k Σ beschreibt δ(z, a 1,..., a k ) = (z, a 1,..., a k, σ 1,..., σ k ) das Verhalten der Turingmaschine im Zustand z, wenn sie auf dem Band i das Symbol a i gelesen hat und dann in den Zustand z übergegangen ist und auf Band i das Symbol a i geschrieben hat. Dannach wird der Kopf i nach links (L), nicht (N) oder rechts (R) bewegt. Der Startzustand ist z 0 und der Endzustand ist z 1. Die Turingmaschine beginnt ihre Arbeit immer im Zustand z 0 und findet die Eingabe auf dem ersten Band. Dabei befindet sich der Kopf fur die Eingabe immer ganz links auf der Eingabe. Die TM hält (stoppt), falls sie in den Zustand z 1 gelangt und schreibt die Ausgabe auch auf Band 1. Es ist folgende Aufgabe zu lösen: Erkenne ob die Eingabe ein Palindrom ist, d.h. ob die Buchstaben von links nach 2
rechts gelesen das gleiche Wort bilden, wie von rechts nach links gelesen. D.h. wir sollen ein Turing-Programm für die folgende Funktion angeben: Idee: { a, falls x ein Palindrom palindrom(x) = def b, sonst Merke Buchstabe links im Zustand und lösche ihn Vergleich mit Buchstaben rechts: Wenn die Buchstaben nicht übereinstimmen, dann alles löschen und b schreiben Bei Übereinstimmung letztes Zeichen löschen und ganz nach links wandern. Dann diesen Prozess wiederholen. Die Zustände haben die folgende Bedeutung: z a : Buchstabe a gemerkt z b : Buchstabe b gemerkt z a: Ein Schritt nach links und a testen z b : Ein Schritt nach links und b testen z 0 : Startzustand, d.h. Merkprozess starten z 1 : Endzustand z 2 : Test positiv, d.h. nach links laufen und Prozess wiederholen z 3 : Test negativ, alles löschen. Nun geben wir eine Turingmaschine M = (Σ, Z, f, z 0, z 1 ) an, die das Problem löst. Σ = {a, b, } Z = {z a, z b, z a, z b, z 0, z 1, z 2, z 3 } f Siehe Bild 2 z 0 Startzustand z 1 Endzustand 2 Random-Access-Maschinen Die Random-Access-Maschinen (kurz: RAM) sind ein mathematisches Modell für reale Rechner. Eine RAM besteht aus einer Steuereinheit, aus unendlich vielen durchnumerierten Registern R0, R1, R2,... und dem Befehlsregister BR. Jedes Register kann eine natürliche Zahl enthalten, wobei sich die n Eingaben am Anfang in den Registern R0,..., Rn befinden. Alle nicht benutzten Register enthalten zu Beginn 0. Das Ergebnis wird am Ende in Register R0 abgelegt. Folgende Befehle sind zulässig: 3
z 0 z 1 a N // leeres Wort z 0 a z a R // a merken nach rechts z 0 b z b R // b merken nach rechts z a a z a a R // nach rechts, a gemerkt z a b z a b R z a z a L // rechtes Ende gefunden z a a z 2 L // Vergleich positiv z a b z 3 L // Vergleich negativ z a z 1 a N // War Palindrom z b a z b a R // Nach rechts, b gemerkt z b b z b b R z b z b L // rechtes Ende gefunden z b b z 2 L // Vergleich positiv z b a z 3 L // Vergleich negativ z b z 1 a N // War Palindrom z 2 a z 2 a L // Nach links und z 2 b z 2 b L // neuen Vergleich starten z 2 z 0 R z 3 a z 3 L // Band löschen und nach links z 3 b z 3 L z 3 z 1 b N Abbildung 2: Ein Turingprogramm zum Erkennen von Palindromen 4
BR R0 R1 R2 Steuereinheit Abbildung 3: Bestandteile einer Random-Access-Maschine Befehl Wirkung Transportbefehle Ri Rj <Ri> := <Rj> <BR> := <BR> + 1 Ri RRj <Ri> := <R<Rj>> <BR> := <BR> + 1 RRi Rj <R<Ri>> := <Rj> <BR> := <BR> + 1 Arithmetische Befehle Ri k <Ri> := k <BR> := <BR> + 1 Ri Rj + Rk <Ri> := <Rj> + <Rk> <BR> := <BR> + 1 Ri Rj - Rk <Ri> := <Rj> - <Rk> <BR> := <BR> + 1 Sprungbefehle GOTO m <BR> := m IF Ri = 0 GOTO m <BR> := m falls <Ri> = 0 <BR> := <BR> + 1 IF Ri > 0 GOTO m <BR> := m falls <Ri> > 0 <BR> := <BR> + 1 Dabei bezeichnet <Ri> den Inhalt des Registers i. Gegeben sei die folgende RAM: 0 R3 1 1 IF R1 = 0 GOTO 5 falls <R1> > 0 führe Schleife durch 2 R2 R2 + R0 addiere x zu <R2> 3 R1 R1 - R3 dekrementiere R1 4 GOTO 1 5 R0 R2 Ergebnis nach R0 6 STOP 5
3 Aufgaben (a) Vollziehen Sie die Arbeitsweise der Turingmaschine nach, deren Überführungsfunktion in Abbildung 2 angegeben ist, wenn Sie mit Eingabe abaaba startet. (b) Entwickeln Sie eine Turingmaschine, die zu einer gegebenen Binärzahl 1 hinzuaddiert. Dabei befindet sich der Kopf zu Beginn auf der linken Seite der Binärzahl. (c) Simulieren Sie die Wirkungsweise des oben angegebenen RAM-Programms für die Eingaben x = 5 und y = 3. Geben Sie an, welche Funktion durch diese RAM berechnet wird. (d) Entwickeln Sie ein RAM-Programm, das die Funktion ggt(x,y) berechnet (ggt = größter gemeinsamer Teiler). Besprechnung in der Übung am 13. Juni 2012 6