Algorithmen und Datenstrukturen I - Maschinenmodelle -

Ähnliche Dokumente
Algorithmen und Datenstrukturen 1 Kapitel 4.1

Mächtigkeit von WHILE-Programmen

Theoretische Grundlagen der Informatik. Vorlesung am 07. November INSTITUT FÜR THEORETISCHE INFORMATIK

Berechenbarkeit und Komplexität: Probleme, Sprachen, Maschinen

Algorithmen und Datenstrukturen 1 Kapitel 4.2

Registermaschine (RAM), Church-Turing-These. Prof. Dr. Berthold Vöcking Lehrstuhl Informatik 1 Algorithmen und Komplexität RWTH Aachen

1 Einführung. 2 Typ-0- und Typ-1-Sprachen. 3 Berechnungsmodelle. 4 Unentscheidbarkeit. 5 Unentscheidbare Probleme. 6 Komplexitätstheorie

Registermaschine (RAM), Church-Turing-These

1 Einführung. 2 Typ-0- und Typ-1-Sprachen. 3 Berechnungsmodelle. 4 Unentscheidbarkeit. 5 Unentscheidbare Probleme. 6 Komplexitätstheorie

Einführung in die Theoretische Informatik

Formale Sprachen und endliche Automaten

VL-05: Unentscheidbarkeit I. (Berechenbarkeit und Komplexität, WS 2017) Gerhard Woeginger

Rekursive Funktionen Basisfunktionen

3. RAM als Rechnermodell

Grundlagen der Theoretischen Informatik: Übung 10

c) {abcde, abcfg, bcade, bcafg} d) {ade, afg, bcde, bcfg} c) {abcabc} d) {abcbc, abc, a} c) {aa, ab, ba, bb} d) {{aa}, {ab}, {ba}, {bb}}

Dank. Theoretische Informatik II. Teil II. Registermaschinen. Vorlesung

Random Access Machine (RAM) Berechenbarkeit und Komplexität Random Access Machines

Formale Grundlagen der Informatik 1 Kapitel 5 Abschlusseigenschaften

Algorithmen und Programmierung

Algorithmen mit konstantem Platzbedarf: Die Klasse REG

ADS-EI 5.2 Struktur einer Turing-Maschine 120/451 ľernst W. Mayr

Algorithmen und Datenstrukturen I - Exkurs Formale Sprachen -

Theoretische Informatik 1

Einführung in die Programmierung

Algorithmen und Datenstrukturen I - Exkurs Formale Sprachen -

Berechenbarkeit und Komplexität Vorlesung 3

Endliche Automaten Jörg Roth 101

Finite-State Technology

Algorithmen und Datenstrukturen I - Maschinenmodelle -

Theoretische Informatik für Wirtschaftsinformatik und Lehramt

Formale Systeme. Endliche Automaten. Prof. Dr. Bernhard Beckert WS 2009/2010 KIT INSTITUT FÜR THEORETISCHE INFORMATIK

Reguläre Sprachen und endliche Automaten

Berechenbarkeit und Komplexität Vorlesung 11

Theoretische Informatik. Berechenbarkeit

Frank Heitmann 2/47. 1 Ein PDA beginnt im Startzustand z 0 und mit im Keller. 2 Ist der Automat

Grundlagen der theoretischen Informatik

Das Halteproblem für Turingmaschinen

Grundlagen der Theoretischen Informatik / Einführung in die Theoretische Informatik I

Formale Sprachen und Automaten

Theorie der Informatik

Algorithmen und Datenstrukturen - Maschinenmodelle -

ALP I Turing-Maschine

Einführung in die Informatik. Programming Languages

Mächtigkeit von WHILE-Programmen

Theoretische Grundlagen der Informatik

Formale Systeme. Büchi-Automaten. Prof. Dr. Bernhard Beckert WS 2009/2010 KIT INSTITUT FÜR THEORETISCHE INFORMATIK

Theoretische Grundlagen der Informatik

Grundlagen der theoretischen Informatik

Informatik III. Christian Schindelhauer Wintersemester 2006/07 3. Vorlesung

Kurz-Skript zur Theoretischen Informatik I

Deterministische und nichtdeterministische Turing-Maschinen, Typ1- und Typ0-Sprachen

Einführung in die Theoretische Informatik

Proseminar Komplexitätstheorie P versus NP Wintersemester 2006/07. Nichtdeterministische Turingmaschinen und NP

Theoretische Informatik I

Informatik 12 Kapitel 3 - Funktionsweise eines Rechners

Theoretische Informatik 1

. Die obige Beschreibung der Laufzeit für ein bestimmtes k können wir also erweitern und erhalten die folgende Gleichung für den mittleren Fall:

WS06/07 Referentin: Katharina Blinova. Formale Sprachen. Hauptseminar Intelligente Systeme Dozent: Prof. Dr. J. Rolshoven

Formale Systeme. Endliche Automaten. Prof. Dr. Bernhard Beckert, WS 2015/ KIT I NSTITUT F U R T HEORETISCHE I NFORMATIK

Ist eine algorithmische Problemstellung lösbar und wenn ja, mit welchen Mitteln? was ist eine algorithmische Problemstellung?

Theoretische Informatik I

Theoretische Informatik 1

Software Engineering Ergänzung zur Vorlesung

Formale Systeme Prof. Dr. Bernhard Beckert, WS 2016/2017

Grundlagen der Informatik II

Algorithmen II Vorlesung am

LOOP-Programme: Syntaktische Komponenten

Die Nerode-Relation und der Index einer Sprache L

1.5 Turing-Berechenbarkeit

3. Vorlesung: Endliche Automaten Markus Kr otzsch Lehrstuhl Wissensbasierte Systeme

Grundlagen der Theoretischen Informatik

1.5 Turing-Berechenbarkeit

Klausur zur Vorlesung Grundbegriffe der Informatik 5. März 2014

7 Endliche Automaten. 7.1 Deterministische endliche Automaten

Berechenbarkeit und Komplexität: Mächtigkeit von Programmiersprachen: WHILE- und LOOP-Programme

FORMALE SYSTEME. 3. Vorlesung: Endliche Automaten. TU Dresden, 17. Oktober Markus Krötzsch

Lösungen zur Vorlesung Berechenbarkeit und Komplexität

Grundlagen Theoretischer Informatik 2 WiSe 2011/12 in Trier. Henning Fernau Universität Trier

Kapitel 7: Kellerautomaten und kontextfreie Sprachen

VL-11: LOOP und WHILE Programme I. (Berechenbarkeit und Komplexität, WS 2017) Gerhard Woeginger

Kontextsensitive und Typ 0 Sprachen Slide 2. Die Turingmaschine

Suche nach einem solchen Kreis. Endlichkeitstest. Vereinigung und Durchschnitt. Abschlusseigenschaften

Unentscheidbarkeitssätze der Logik

5. Algorithmen. K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16

Wiederholung. Organisatorisches. VL-11: LOOP und WHILE Programme I. (Berechenbarkeit und Komplexität, WS 2017) Gerhard Woeginger

1 Σ endliches Terminalalphabet, 2 V endliche Menge von Variablen (mit V Σ = ), 3 P (V (Σ ΣV )) {(S, ε)} endliche Menge von Regeln,

11. Übungsblatt. x y(top(push(x, y)) = y)

Lösung zur Klausur. Grundlagen der Theoretischen Informatik im WiSe 2003/2004

Klausur: Berechenbarkeit und Komplexität (Niedermeier/Chen/Froese/Sorge, Sommersemester 2016)

Sei Σ ein endliches Alphabet. Eine Sprache L Σ ist genau dann regulär, wenn sie von einem regulären Ausdruck beschrieben werden kann.

Theoretische Grundlagen der Informatik

Einführung in die Theoretische Informatik

Theoretische Informatik I

Die mathematische Seite

Kapitel: Die Chomsky Hierarchie. Die Chomsky Hierarchie 1 / 14

Transkript:

Algorithmen und Datenstrukturen I - Maschinenmodelle - Thies Pfeiffer Technische Fakultät tpfeiffe@techfak.uni-bielefeld.de Vorlesung, Universität Bielefeld, Winter 2012/2013 1 / 93

Kapitel 3 - Maschinenmodelle 1 Preamble 2 Registermaschinen 3 Invarianten 4 Endliche Automaten 5 Zusammenfassung 2 / 93

Preamble [Dieses Kapitel hält sich eng an das empfohlene Buch von Saake/Sattler] Zuerst haben wir uns bei Formeln und Gleichungen eng an der Mathematik gehalten. Danach haben wir uns am Beispiel der Musik eine Formalisierung überlegt, die sehr leicht von uns Menschen verstanden werden kann, also sehr nahe an unserem Verständnis der Modellwelt ist. Die Berechnungen hätten wir dabei auch selbst noch leicht ausführen können. Eine Rechenmaschine, die direkt mit Formeln und Gleichungen rechnen kann, gibt es nicht. Wirkliche Rechner sind viel einfacher aufgebaut, und brauchen viele Operationen, um z.b. eine Gleichung einmal anzuwenden. Dies ist die in Kapitel 1 erwähnte semantische Lücke, die durch Programmiersprachen und ihre Übersetzer geschlossen wird. Wir begeben uns nun auf die Maschinenseite der semantischen Lücke. 3 / 93

Ziele des Kapitels In diesem Kapitel lernen wir zwei, sehr verschiedene Modelle einer Rechenmaschine kennen. Registermaschinen ähneln realen Prozessoren. An ihnen lernen wir Begriffe wie Befehlszyklus, Konfiguration, Maschinenfunktion, partielle und totale Korrektheit kennen. Endliche Automaten sind ein abstraktes und viel einfacheres Rechnermodell. Sie verarbeiten Zeichenreichen und haben zahlreiche Anwendungen in der Textverarbeitung. Endliche Automaten können nur sehr einfache Aufgaben lösen, Registermaschien dagegen können im Prinzip (wenn auch mit einigen Verrenkungen) alle Aufgaben lösen, die überhaupt ein Rechner lösen kann. Zwischen diesen beiden Extremen gibt es noch weitere Rechnenmodelle mit unterschiedlicher Leistung, die in der theoretischen Informatik untersucht werden. 4 / 93

Registermaschinen 1 Preamble 2 Registermaschinen Einführung Begriffe Befehle Rechnen Semantik Beobachtungen Erweiterung zur Indirekten Adressierung 3 Invarianten 4 Endliche Automaten 5 Zusammenfassung 5 / 93

Einführung Einführung Eine Registermaschine ist eine formal definierte Rechenmaschine 6 / 93

Einführung Einführung Eine Registermaschine ist eine formal definierte Rechenmaschine relativ ähnlich zu wirklicher Hardware (insbesondere der frühen Jahre) 7 / 93

Einführung Komponenten der Registermaschine Programm speicher b 1 b 2 b 3 b n B Zentrale Recheneinheit C + * = Recheneinheit Steuer einheit 0 Arbeits speicher C1 C 2 C 3 C 4 b 1... b n : B C 0 C1, C2,... +,, * = : : : : Programm ( n Befehle) Befehlszähler Akkumulator (Arbeitsregister) Arbeitsspeicher (Register) Rechenwerke Wir verwenden als Beispiel eine Registermaschine, die nur zwei Datentypen kennt natürliche Zahlen und Befehle. 8 / 93

Begriffe Befehlszyklus Die Registermaschine iteriert einen Befehlszyklus: Programm speicher b 1 b 2 b 3 b n b 1... b n : B : C 0 : C1, C2,... : +,, * = : B Zentrale Recheneinheit C0 + * = Recheneinheit Steuer einheit Programm ( n Befehle) Befehlszähler Akkumulator (Arbeitsregister) Arbeitsspeicher (Register) Rechenwerke Arbeits speicher C1 C 2 C 3 C 4 Sei i der Inhalt von B. Lade b i aus dem Programmspeicher in die Steuereinheit. Erhöhe B auf i + 1. Decodiere b i und führe ihn aus durch Laden von Operanden Durchführung von Rechenoperationen Abspeichern des Ergebnisses Veränderung des Kontrollflusses Die Ausführung hängt natürlich im Einzelnen von dem konkreten Befehl ab. 9 / 93

Begriffe Programm Das Programm ist eine Folge von Befehlen b 1, b 2,..., b n Diese ist bei uns unveränderbar (im Unterschied zu realen Rechnern, wo Programme in den Programmspeicher geladen und verändert werden können). 10 / 93

Begriffe Programm Das Programm ist eine Folge von Befehlen b 1, b 2,..., b n Diese ist bei uns unveränderbar (im Unterschied zu realen Rechnern, wo Programme in den Programmspeicher geladen und verändert werden können). Offene Fragen Welche Befehle benötigen wir für unsere Registermaschine? Wie können wir diese Befehle genau beschreiben? 11 / 93

Begriffe Konfiguration Idee Wir beschreiben die Befehle über die durch sie verursachten Zustandsänderungen unserer Registermaschine. Eine vollständige Zustandsbeschreibung der Registermaschine nennen wir Konfiguration. Programm speicher b 1 b 2 b 3 b n b 1... b n B C 0 C1, C2,... +,, * = : : : : : B Zentrale Recheneinheit C0 + * = Recheneinheit Programm ( n Rechenwerke Steuer einheit Befehle) Befehlszähler Akkumulator (Arbeitsregister) Arbeitsspeicher (Register) Arbeits speicher C1 C 2 C 3 C 4 Enthält B die Zahl b, und C i die Zahl c i, 0 i, so heisst (b, c 0, c 1,... ) aktuelle Konfiguration der Registermaschine. Die Ausführung eines Befehls bewirkt einen Konfigurations-Übergang (b, c 0, c 1,... ) (b, c 0, c 1,... ) 12 / 93

Befehle Laden und Speichern Programm speicher b 1 b 2 b 3 b n B Zentrale Recheneinheit C + * = Recheneinheit Steuer einheit 0 Arbeits speicher C1 C 2 C 3 C 4 LOAD i, i N + b = b + 1 c 0 b 1... b = c i c j = c j für j 0 n : Programm ( n Befehle) CLOAD i, i N b = b + 1 c 0 B : Befehlszähler = i c j = c j für j 0 STORE C i, i 0 : N + Akkumulator b = b + 1(Arbeitsregister) c i = c 0 c j = c j für j i C, C,... Arbeitsspeicher (Register) 1, 2 : 13 / 93

Befehle Arithmetische Befehle ADD i, i N + b = b + 1 c 0 = c 0 + c i c j = c j für j 0 CADD i, i N + b = b + 1 c 0 = c 0 + i c j = c j für j 0 SUB i, i N + b = b + 1 c 0 = { c0 c i für c 0 c i 0 sonst CSUB i, i N + b = b + 1 c 0 = { c0 i für c 0 i 0 sonst c j = c j für j 0 c j = c j für j 0 MULT i, i N + b = b + 1 c 0 = c 0 c i c j = c j für j 0 CMULT i i N + b = b + 1 c 0 = c 0 i c j = c j für j 0 DIV i, i N + b = b + 1 c 0 = c 0/c i c j = c j für j 0 CDIV i, i N + b = b + 1 c 0 = c 0/i c j = c j für j 0 14 / 93

Befehle Bemerkung Arithmetik auf natürliche Zahlen beschränkt: statt negativer Differenz ist das Ergebnis 0. Division erfolgt ganzzahlig es gibt keinen Übertrag z.b. bei negativen Zahlen oder wenn das Register das Ergebnis nicht mehr abbilden kann (z.b. größte darstellbare Zahl + 1) 15 / 93

Befehle Sprungbefehle GOTO i, i N + b = i c j = c j für j 0 { IF c 0 = 0 GOTO i, i N + b i falls c0 = 0 = b + 1 sonst c j = c j für j 0 END b = b c j = c j für j 0 16 / 93

Rechnen Maschinen und Programmabläufe Registermaschinen unterscheiden sich durch ihr Programm. Verschiedene Programmabläufe unterscheiden sich durch die Start-Konfiguration (alles weitere ist ja festgelegt). Start-Konfiguration (1, 0, x 1,..., x n, 0, 0,... ) x i sind die Eingabe-Parameter in den Registern c 1... c n. 17 / 93

Rechnen Berechnete Funktion M berechnet Funktion f M : N n N m mit (y 1,..., y m ) = f M (x 1,..., x n ), falls für alle x 1,..., x n N gilt (1, 0, x 1,..., x n, 0, 0,... ) (e, c, y 1,..., y m,... ) und b e ist ein END-Befehl. 18 / 93

Rechnen Beispiel M + 1 LOAD 1 2 ADD 2 3 STORE 3 4 END (1, 0, a, b) (4, a + b, a, b, a + b) F M+ (x 1, x 2 ) = (x 1, x 2, x 1 + x 2 ) 19 / 93

Rechnen Beispiel M fib 1 LOAD 1 2 ADD 2 3 STORE 2 4 SUB 1 5 STORE 1 6 END (1, 0, a, b) (6, b, b, a + b) M fib berechnet einen Schritt der Fibonacci-Iteration. f Mfib (x 1, x 2 ) = (x 2, x 2, x 1 + x 2 ) 20 / 93

Rechnen Beispiel M 1 1 LOAD 1 2 DIV 2 3 MULT 2 4 STORE 3 5 LOAD 1 6 SUB 3 7 STORE 3 8 END 21 / 93

Rechnen Rechnung von M 1 mit r = n (n div m) m Berechnete Funktion: (1, 0, n, m, 0)...... (8, r, n, m, r) f M1 (x 1, x 2 ) = (x 1, x 2, x 1 mod x 2 ) 22 / 93

Semantik Semantik einfacher Programme Beispiel M id Beispiel M undef 1 END 1 GOTO 1 2 END f Mid (x 1,..., x n ) = (x 1,..., x n ) f Mundef (x 1,..., x n ) =undefiniert 23 / 93

Semantik Beispiel M 3 Beispiel M 4 1 LOAD 1 1 LOAD 1 2 IF c 0 = 0 GOTO 4 2 IF c 0 = 0 GOTO 1 3 GOTO 2 3 END 4 END f M3 (x 1 ) = 0 falls x 1 = 0 f M4 (x 1 ) = x 1 falls x 1 > 0 = undefiniert, sonst = undefiniert, sonst 24 / 93

Beobachtungen Beobachtungen zu unserer Registermaschine Die Anzahl der benutzten Register liegt statisch fest. Alle Adressen stehen explizit im Programm. Die Anzahl der Befehle bei Ausführung ist statisch nicht bestimmbar und hängt insbesondere von den (bedingten) Sprüngen ab. Programme ohne Schleifen kann man symbolisch ausführen und so die berechnete Funktion bestimmen. Bei Programmen mit Schleifen führt die symbolische Ausführung nicht zu einer Bestimmung der berechneten Funktion. Es entsteht eine unendlich große Formel. 25 / 93

Erweiterung zur Indirekten Adressierung Neue Problemstellung Es soll die Summe einer beliebig langen Zahlenkette gebildet werden. Ansatz: Zahlenkette beginnt ab c10 Ende mit c i = 0 gekennzeichnet. c 1 hält unser aktuelles Zwischenergebnis. 1 CLOAD 0 2 STORE 1 3 GOTO 5 4 END 5 LOAD 10 6 IF C 0 = 0 GOTO 4 7 ADD 1 8 STORE 1 9 LOAD 11 10 IF C 0 = 0 GOTO 4 11 ADD 1 12 STORE 1 13 LOAD 12 26 / 93

Erweiterung zur Indirekten Adressierung Erweiterung: Indirekte Adressierung Bislang waren alle Speicheradressen immer statisch im Programm festgelegt. Das Potential des gedachten unendlich großen Speichers lässt sich damit nicht effizient ausschöpfen. Zusätzlich zu konstanten (C-Befehle) und statisch adressierten Speicherzugriffen führt man daher noch indirekt adressierte Speicherzugriffe ein. Die Adresse der Ziel-Speicherzelle wird dabei erst aus einer statisch adressierten Speicherzelle ausgelesen. Unsere neuen Befehle lauten INDLOAD, INDSTORE, INDADD, INDSUB, INDMUL, INDDIV. 27 / 93

Erweiterung zur Indirekten Adressierung INDLOAD i, i N + b = b + 1 c 0 = cc i c j = c j für j 0 INDSTORE i, i N + b = b + 1 c c = c 0 i c j = c j für j i j N ADD i, i N + b = b + 1 c 0 = c 0 + c i c j = c j für j 0 INDADD i, i N + b = b + 1 c 0 = c 0 + c ci c j = c j für j 0 SUB i, i N + b = b + 1 c 0 = { c0 c i für c 0 c i 0 sonst c j = c j für j 0 INDSUB i, i N + b = b + 1 c 0 = { c0 c ci für c 0 c ci 0 sonst c j = c j für j 0 MULT i, i N + b = b + 1 c 0 = c 0 c i c j = c j für j 0 INDMULT i i N + b = b + 1 c 0 = c 0 c ci c j = c j für j 0 DIV i, i N + b = b + 1 c 0 = c 0/c i c j = c j für j 0 INDDIV i, i N + b = b + 1 c 0 = c 0/c ci c j = c j für j 0 28 / 93

Erweiterung zur Indirekten Adressierung Summe einer Liste von Zahlen Es soll die Summe einer beliebig langen Zahlenkette gebildet werden. Ansatz: Zahlenkette beginnt ab c10 Ende mit c i = 0 gekennzeichnet. c 1 hält unser aktuelles Zwischenergebnis. c 2 enthält unseren aktuellen Index. 1 CLOAD 0 2 STORE 1 3 CLOAD 10 4 STORE 2 5 INDLOAD 2 6 IF C 0 = 0 GOTO 13 7 ADD 1 8 STORE 1 9 LOAD 2 10 CADD 1 11 STORE 2 12 GOTO 5 13 END 29 / 93

Invarianten 1 Preamble 2 Registermaschinen 3 Invarianten Definition Beispiele Komplexeres Beispiel Partielle vs. Totale Korrektheit 4 Endliche Automaten 5 Zusammenfassung 30 / 93

Definition Invarianten Um die berechnete Funktion von Programmen mit Schleifen im Allgemeinen zu finden, benutzt man Invarianten. Diese sind Aussagen über Konfigurationen, die an gewissen Programmstellen immer erfüllt sind: φ bb (c 0, c 1,... ) gilt am Übergang von Befehl b zu b. φ start (c 0, c 1... ) gilt am Anfang, φ end (c 0, c 1... ) am Ende. 31 / 93

Beispiele Invarianten zu M 3 1 2 3 4 Beispiel M 3 1 LOAD 1 2 IF c 0 = 0 GOTO 4 3 GOTO 2 4 END φ start = (c 0 = 0, c 1 = x 0) φ 12 = (c 0 = c 1 = x 0) φ 23 = (c 0 = c 1 = x > 0) φ 32 = (c 0 = c 1 = x > 0) φ 24 = (c 0 = c 1 = 0) φ end = (c 0 = c 1 = 0) 32 / 93

Beispiele Invarianten zu M 3 1 2 Beispiel M 3 1 LOAD 1 2 IF c 0 = 0 GOTO 4 3 GOTO 2 4 END φ start = (c 0 = 0, c 1 = x 0) 3 φ 12 φ 23 = = (c 0 = c 1 = x 0) (c 0 = c 1 = x > 0) φ 32 = (c 0 = c 1 = x > 0) 4 φ 24 = (c 0 = c 1 = 0) φ end = (c 0 = c 1 = 0) Bei der ersten Ausführung von Befehl 2 gilt φ 12, bei eventuellen weiteren die stärkere Invariante φ 23 = φ 32. Wird also Punkt 3 einmal erreicht, liegt Endlosschleife vor. Punkt 4 wird erreicht genau dann, wenn x = 0. 33 / 93

Beispiele Invarianten zu M 4 1 2 3 Beispiel M 4 1 LOAD 1 2 IF c 0 = 0 GOTO 1 3 END φ start = (c 0 = 0, c 1 = x 0) φ 12 = (c 0 = c 1 = x 0) φ 23 = (c 0 = c 1 = x > 0) φ 21 = (c 0 = c 1 = x = 0) φ end = (c 0 = c 1 = x > 0) 34 / 93

Komplexeres Beispiel Registermaschine M 2 1 CLOAD 1 2 STORE 3 3 LOAD 2 4 IF c 0 = 0 GOTO 12 5 LOAD 3 6 MULT 1 7 STORE 3 8 LOAD 2 9 CSUB 1 10 STORE 2 11 GOTO 4 12 END 35 / 93

Komplexeres Beispiel Programmflussdiagramm für M 2 1 CLOAD 1 2 STORE 3 3 LOAD 2 4 IF c 0 = 0 GOTO 12 5 LOAD 3 6 MULT 1 7 STORE 3 8 LOAD 2 9 CSUB 1 10 STORE 2 11 GOTO 4 12 END 1 2 3 4 5 6 7 8 φ start = (c 1 = x, c 2 = y) 12 11 10 Wir suchen φ end, indem wir φ start durch das Diagramm propagieren. Das geht überall einfach, außer am Schleifenkopf 4. 9 36 / 93

Komplexeres Beispiel 1 CLOAD 1 2 STORE 3 3 LOAD 2 4 IF c 0 = 0 GOTO 12 5 LOAD 3 6 MULT 1 7 STORE 3 8 LOAD 2 9 CSUB 1 10 STORE 2 11 GOTO 4 12 END φ start = (c 0 = 0, c 1 = x, c 2 = y) φ 12 = (c 0 = 1, c 1 = x, c 2 = y) φ 23 = (c 0 = 1, c 1 = x, c 2 = y, c 3 = 1) φ 34 = (c 0 = y, c 1 = x, c 2 = y, c 3 = 1) Hier entsteht nun das Problem, dass wir φ 45 nicht allein aus φ 34 und b 4 bestimmen können, da es auch von φ 11 4 abhängt, das wir noch nicht kennen. 37 / 93

Komplexeres Beispiel 1 CLOAD 1 2 STORE 3 3 LOAD 2 4 IF c 0 = 0 GOTO 12 5 LOAD 3 6 MULT 1 7 STORE 3 8 LOAD 2 9 CSUB 1 10 STORE 2 11 GOTO 4 12 END Idee: Wir fügen eine neue, noch unbekannte Invariante φ 4 für den Schleifenkopf ein. Für sie muss gelten φ 34 oder φ 11 4 φ 4. Dabei hängt φ 11 4 natürlich von φ 4 ab. Mit dem noch unbekannten φ 4 rechnen wir weiter. 38 / 93

Komplexeres Beispiel 1 CLOAD 1 2 STORE 3 3 LOAD 2 4 IF c 0 = 0 GOTO 12 5 LOAD 3 6 MULT 1 7 STORE 3 8 LOAD 2 9 CSUB 1 10 STORE 2 11 GOTO 4 12 END Sei φ 4 = (c 0 = a, c 1 = x, c 2 = b, c 3 = d) mit Unbekannten a, b, d. φ 45 = (c 0 = a > 0, c 1 = x, c 2 = b, c 3 = d) φ 56 = (c 0 = d, a > 0, c 1 = x, c 2 = b, c 3 = d) φ 67 = (c 0 = d x, a > 0, c 1 = x, c 2 = b, c 3 = d) φ 78 = (c 0 = d x, a > 0, c 1 = x, c 2 = b, c 3 = d x) 39 / 93

Komplexeres Beispiel 1 CLOAD 1 2 STORE 3 3 LOAD 2 4 IF c 0 = 0 GOTO 12 5 LOAD 3 6 MULT 1 7 STORE 3 8 LOAD 2 9 CSUB 1 10 STORE 2 11 GOTO 4 12 END φ 89 = (c 0 = b, a > 0, c 1 = x, c 2 = b, c 3 = d x) φ 9 10 = (c 0 = b 1, a > 0, c 1 = x, c 2 = b, c 3 = d x) φ 10 11 = (c 0 = b 1, a > 0, c 1 = x, c 2 = b 1, c 3 = d x) φ 11 4 = φ 10 11 φ 4 12 = φ 4 c 2 = 0 40 / 93

Komplexeres Beispiel 1 CLOAD 1 2 STORE 3 3 LOAD 2 4 IF c 0 = 0 GOTO 12 5 LOAD 3 6 MULT 1 7 STORE 3 8 LOAD 2 9 CSUB 1 10 STORE 2 11 GOTO 4 12 END Jetzt müssen wir φ 4 herausfinden. Es muss gelten φ 34 φ 4 und φ 11 4 φ 4 φ 34 : (c 0 = y, c 1 = x, c 2 = y, c 3 = 1) φ 11 4 : (c 0 = b 1, c 1 = x, c 2 = b 1, c 3 = d x, a > 0) φ 4 : (c 0 = a, c 1 = x, c 2 = b, c 3 = d) 41 / 93

Komplexeres Beispiel Den Effekt eines Schleifendurchlaufs auf φ 4 hält φ 11 4 fest. Wir beobachten c 1 ändert sich nicht, c 0, c 2 und c 3 ändern sich. Für φ 11 4 wie für φ 3 4 gilt invariant: c 3 = x (y c 2). Wir setzen als neue Invariante Es gilt φ 34 impliziert ˆφ 4. ˆφ 4 = (c 0 = c 2, c 1 = x, c 3 = x (y c 2) ) Es gilt nach Durchschieben von ˆφ 4 durch die Schleife ˆφ 11 4 = (c 0 = c 2, c 1 = x, c 3 = x (y (c 2+1)) x) = ˆφ 4 42 / 93

Komplexeres Beispiel Damit finden wir nun die Endkonfiguration φ 4 12 = (c 0 = 0, c 1 = x, c 2 = c 0 = 0, c 3 = x y ) φ end = φ 4 12 Damit ist bewiesen, dass die Maschinenfunktion von M 2 lautet f M2 (x, y) = (x, 0, x y ) Allerdings gilt dies nur, wenn Punkt 12 erreicht wird. Im Beispiel dieser Maschine ist die Terminierung einfach zu zeigen, im allgemeinen aber schwer. 43 / 93

Partielle vs. Totale Korrektheit Partielle versus Totale Korrektheit Ein Maschinenprogramm M heisst partiell korrekt für eine Funktion f : N n N m, falls f M (x 1,..., x n ) = f (x 1,..., x n ), sofern f M terminiert. M heisst total korrekt für f, falls gilt: Wenn f (x 1,..., x n ) definiert ist, so terminiert f M auf Eingabe x 1,..., x n mit dem Ergebnis f (x 1,..., x n ). 44 / 93

Partielle vs. Totale Korrektheit Nachweis der Korrektheit Für Registermaschinenprogramme wie für alle imperativen Programme weist man partielle Korrektheit durch die Bestimmung der Invarianten nach. Anstelle der Terminierung zeigt man lieber eine stärkere Aussage: Man gibt an, nach wievielen Schritten eine Berechnung endet Kapitel Effizienzanalyse. 45 / 93

Endliche Automaten 1 Preamble 2 Registermaschinen 3 Invarianten 4 Endliche Automaten Einführung Beispiel Formale Sprachen Operationen auf endlichen Automaten Nicht-deterministische endliche Automaten (NEA) Anwendung 5 Zusammenfassung 46 / 93

Einführung Endliche Automaten Bei der Registermaschine haben wir Programme geschrieben und uns über die Belegung des Speichers Gedanken gemacht. 47 / 93

Einführung Endliche Automaten Bei der Registermaschine haben wir Programme geschrieben und uns über die Belegung des Speichers Gedanken gemacht. Um das Verhalten eines Programmes zu analysieren, haben wir die Programme Schritt für Schritt abgearbeitet, Graphen mit den Übergängen zwischen den Befehlen gezeichnet und uns die Invariaten bei den Konfigurationen, also den Zustandsbeschreibungen genau angesehen. 48 / 93

Einführung Endliche Automaten Bei der Registermaschine haben wir Programme geschrieben und uns über die Belegung des Speichers Gedanken gemacht. Um das Verhalten eines Programmes zu analysieren, haben wir die Programme Schritt für Schritt abgearbeitet, Graphen mit den Übergängen zwischen den Befehlen gezeichnet und uns die Invariaten bei den Konfigurationen, also den Zustandsbeschreibungen genau angesehen. Wir haben uns also das Verhalten der Programme mittels Zuständen und Zustandsübergängen erklärt. 49 / 93

Einführung Endliche Automaten Bei der Registermaschine haben wir Programme geschrieben und uns über die Belegung des Speichers Gedanken gemacht. Um das Verhalten eines Programmes zu analysieren, haben wir die Programme Schritt für Schritt abgearbeitet, Graphen mit den Übergängen zwischen den Befehlen gezeichnet und uns die Invariaten bei den Konfigurationen, also den Zustandsbeschreibungen genau angesehen. Wir haben uns also das Verhalten der Programme mittels Zuständen und Zustandsübergängen erklärt. Warum können wir nicht gleich unsere Programme auf dieser Ebene formulieren? 50 / 93

Einführung Einordnung Das geht zum Beispiel mit Endlichen Automaten. Automat Ein Automat ist eine abstrakte Maschine der Informatik. Er dient als Erklärungsmodell und vereinfacht den Vergleich von Algorithmen, ohne auf die Details der realen Umsetzung achten zu müssen. Ein Automat verarbeitet Zeichenketten und hat einen internen Zustand. Endlicher Automat Ein Endlicher Automat kann nur eine endliche Menge an internen Zuständen einnehmen. Er ist weniger mächtig als die unbeschränkte Registermaschine. 51 / 93

Einführung Definition Definition Ein Alphabet ist ein endlicher Zeichenvorrat. Eine Zeichenreihe über Alphabet A ist eine Folge a 1 a 2... a n mit a i A, n 0. Für die leere Zeichenreihe (n = 0) schreibt man ε. A ist die Menge aller Zeichenreihen über A. 52 / 93

Einführung Definition Ein endlicher Automat besteht aus einem Alphabet A einer endlichen Zustandsmenge S einem Startzustand s 0 S einer Zustandsübergangsfunktion δ : S A S einer Menge akzeptierender Zustände F Üblicherweise nimmt man als Zustandsmenge S mit S = m die Zahlen [0... m 1], und s 0 = 0. 53 / 93

Beispiel Beispiel EA1 Automat EA1 A = {a, b} S = {0, 1, 2, 3} s 0 = 0 F = {0} Zustandsübergangsfunktion a A δ(s, a) a b s S 0 1 2 1 3 0 2 0 3 3 3 3 54 / 93

Beispiel Berechnete Funktion des endlichen Automaten Definition Automatenfunktion Die Automatenfunktion des Automaten A = (A, S, s 0, δ, F) ist δ A : A S mit δ A (x) = δ (s 0, x) δ (s, ε) = s δ (s, ax) = δ (δ(s, a), x) Die Automatenfunktion rechnet also genau n + 1 Schritte für eine Zeichenreihe der Länge n. 55 / 93

Beispiel Endliche Automaten als Akzeptoren Definition: Akzeptierte Wortmenge Die von A akzeptierte Wortmenge Akz(A) A ist {w A δ A (w) F} Wörter aus A \ Akz(A) nennt man zurückgewiesene Wörter. 56 / 93

Beispiel Betrachtung zu EA1 Akzeptierte Wörter: ε, ab, ba, abab, abba,... Zurückgewiesene Wörter: a, b, aab, aabb,... Allgemeines Prinzip: Akzeptiert werden beliebig viele Auftreten der Zeichenpaare ab oder ba, einschließlich ε. Akz(EA1) = {ab, ba} n, n 0 57 / 93

Beispiel Übergangsdiagramm zu endlichen Automaten Die Funktion δ wird grafisch dargestellt: Beispiel EA1 a 1 a 0 b 3 a,b b a 2 b Zustände f F bekommen einen doppelten Kreis. 58 / 93

Beispiel Betrachtung zu EA1 (Fortsetzung) Aus Zustand 3 führt keine Folge von Übergängen in einen akzeptierenden Zustand. Solche Zustände nennt man Fehlerzustände und lässt sie weg: a 1 0 a b b 2 δ(s, a) a b 0 1 2 1 0 2 0 Das Diagramm ist damit kleiner, und die δ-funktion partiell. 59 / 93

Beispiel Varianten von EA1 EA2 0 a b 1 2 a b b a 3 Was sind die fehlenden Übergänge/Fehlerzustände? Was ist Akz(EA2)? 60 / 93

Beispiel Varianten von EA1 EA2 0 a b 1 2 a b b a 3 Was sind die fehlenden Übergänge/Fehlerzustände? Was ist Akz(EA2)? Akz(EA2) = Akz(EA1) {ε} 61 / 93

Beispiel EA3 a 0 a 1 b 3 Was sind die fehlenden Übergänge/Fehlerzustände? Was ist Akz(EA3)? b 2 a b 62 / 93

Beispiel EA3 a 0 a 1 b 3 Was sind die fehlenden Übergänge/Fehlerzustände? Was ist Akz(EA3)? b 2 a b Akz(EA3) = {a n ab, n 0} {b n ba, n 0} 63 / 93

Beispiel EA4 a a 1 b 0 3 a,b Hier gibt es keine Fehlerzustände, trotzdem ist Akz(EA4) A b 2 a b 64 / 93

Beispiel EA4 a a 1 b 0 3 a,b Hier gibt es keine Fehlerzustände, trotzdem ist Akz(EA4) A b 2 a b Akz(EA) = {xaby, xbay x, y A } In Worten: EA4 akzeptiert alle Zeichenreihen, die irgendwo ein ab oder ba enthalten. 65 / 93

Beispiel EA5 a a 1 0 Welche Übergänge fehlen? Was ist Akz(EA5)? b 2 b 66 / 93

Beispiel EA5 a a 1 0 Welche Übergänge fehlen? Was ist Akz(EA5)? b 2 b Akz(EA5) = {a n n 0} {b n n 0} 67 / 93

Beispiel Komplement von Wortproblemen Beobachtung: Akz(EA5) = A Akz(EA4) Satz Die von endlichen Automaten akzeptierten Wortmengen sind abgeschlossen unter Komplementbildung in A. 68 / 93

Beispiel Beweis: Sei A = (A, S, s 0, δ, F). Wir setzen Ā = (A, S, s 0, δ, S \ F). Offensichtlich gilt Akz(Ā) = A Akz(A). Achtung, anhand der Diagramme ist dies erst offensichtlich, wenn man alle weggelassenen Zustände und Übergänge wieder ergänzt. 69 / 93

Formale Sprachen Formale Sprachen Definition Eine formale Sprache über A ist eine beliebige Teilmenge L A. Damit ist für jeden endlichen Automaten A die Akzeptierte Wortmenge Akz(A) eine formale Sprache. 70 / 93

Formale Sprachen Formale Sprachen Definition Eine formale Sprache über A ist eine beliebige Teilmenge L A. Damit ist für jeden endlichen Automaten A die Akzeptierte Wortmenge Akz(A) eine formale Sprache. Überlegung Gibt es umgekehrt für jede formale Sprache L einen endlichen Automaten A mit Akz(A) = L? 71 / 93

Formale Sprachen Gegenbeispiel Zur Widerlegung unserer Überlegung können wir ein einfaches Gegenbeispiel konstruieren. 72 / 93

Formale Sprachen Gegenbeispiel Zur Widerlegung unserer Überlegung können wir ein einfaches Gegenbeispiel konstruieren. Idee Wir nutzen die Beschränkung auf endlich viele Zustände als Ansatzpunkt für unser Gegenbeispiel. 73 / 93

Formale Sprachen Betrachte L = {a m b m, m 0} 74 / 93

Formale Sprachen Betrachte L = {a m b m, m 0} 0 a a 1 2 n 1 a n b b b b 2n b 2n 1 b n+2 n+1 75 / 93

Formale Sprachen Betrachte L = {a m b m, m 0} 0 a a 1 2 n 1 a n b b b b 2n b 2n 1 b n+2 n+1 Dieser Automat akzeptiert {a m b m m n}, aber für alle m 0 bräuchte er eine unendliche Zustandsmenge. Dies ist nur eine Plausibilitätsüberlegung. Wie könnte man diese Tatsache beweisen? 76 / 93

Formale Sprachen Bedeutung endlicher Automaten Endliche Automaten bilden die kleinste Klasse einer Hierarchie gebildet durch Endliche Automaten Kellerautomaten (zusätzlich noch einen unendlichen Kellerspeicher) Linear beschränkte Automaten (wie Turing-Maschine, nur Band beschränkt auf Bereich des ursprünglichen Eingabewortes) Turing-Maschinen, Registermaschinen (unbeschränkter Speicher bzw. unbeschränktes Band) ( Mehr dazu in der Vorlesung Theoretische Informatik) Gute Effizienz und triviale Terminierung 77 / 93

Formale Sprachen Praktische Bedeutung endlicher Automaten Einfaches Programmiermodell für einfache Klasse von Wortproblemen. Viele wichtige Anwendungen Codierungsprobleme Übersetzung von Programmiersprachen Dokument-Verarbeitung 78 / 93

Operationen auf endlichen Automaten Verknüpfung endlicher Automaten Konkatenation (auch Produkt genannt) 0 v 1 o 2 r 3 und 0 o 1 r 2 t 3 ergibt 0 v 1 o 2 r 3 o 4 r 5 t 6 79 / 93

Operationen auf endlichen Automaten Beliebige Wiederholung Aus b l 0 1 2 a 3 wird 0 b 1 l 2 a 80 / 93

Operationen auf endlichen Automaten Vereinigung Aus 0 v 1 o 2 r 3 und 0 o 1 r 2 t 3 wird 0 v o 1 4 o r 2 5 r t 3 6 (Zustände 3, 6 könnte man zusammenlegen)... aber so einfach geht s nicht immer. 81 / 93

Operationen auf endlichen Automaten Aus 0 t 1 o 2 r 3 und 0 t 1 o 2 t 3 wird 0 t t 1 4 o o 2 5 r t 3 6 das ist kein endlicher Automat... 82 / 93

Nicht-deterministische endliche Automaten (NEA) Nicht-deterministische endliche Automaten (NEA) Der NEA erlaubt aus einem Zustand verschiedene Übergänge unter dem gleichen Eingabezeichen, hat nach n Schritten eine Menge möglicher Zustände, akzeptiert eine Zeichenreihe, wenn es eine mögliche Übergangsfolge gibt, die zu einem akzeptierenden Zustand führt. 83 / 93

Nicht-deterministische endliche Automaten (NEA) Nicht-deterministische endliche Automaten (NEA) Der NEA erlaubt aus einem Zustand verschiedene Übergänge unter dem gleichen Eingabezeichen, hat nach n Schritten eine Menge möglicher Zustände, akzeptiert eine Zeichenreihe, wenn es eine mögliche Übergangsfolge gibt, die zu einem akzeptierenden Zustand führt. Parallel-Universen? Man kann den nicht-deterministischen endlichen Automaten auch so auffassen, dass bei jeder nicht-deterministischen Verzweigung mehrere Paralleluniversen erzeugt werden, in denen jeweils eine Kopie des Automaten einen unterschiedlichen Pfad überprüft. Ein Wort wird dann vom NEA akzeptiert, wenn es in mindestens einem der Paralleluniversen akzeptiert wird. 84 / 93

Nicht-deterministische endliche Automaten (NEA) Satz (Konstruktion von Myhill) Zu jedem NEA gibt es einen EA, das die gleiche Wortmenge akzeptiert. Beweis-Idee: Im NEA ist für jede Eingabe nach jedem Schritt eine Menge von Zuständen erreichbar. Diese Zustandsmengen sind Zustände des EA. Eine solche Zustandsmenge ist akzeptierender Zustand des EA, wenn sie einen akzeptierenden Zustand des NEA enthält. Die Anzahl der Zustände des resultierenden EAs kann exponentiell größer sein als die des NEAs. 85 / 93

Anwendung Anwendungen von NEAs Reguläre Ausdrücke Für die Suche in und die Verarbeitung von Texten werden häufig reguläre Ausdrücke verwendet. Diese lassen sich auf NEAs abbilden. Da NEAs schnell und effizient Entscheidungen über die Zugehörigkeit einer Eingabe zur akzeptierten Wortmenge treffen können, werden in den Programmiertools die regulären Ausdrücke intern erst einmal in einen entsprechenden NEA konvertiert (kompiliert). 86 / 93

Anwendung Bestandteile Regulärer Ausdrücke Symbol Bedeutung Beispiel Zeichen das Zeichen selbst hallo [] Auswahl h[ae]llo - Bereich (innerhalb von []) [a-za-z] () Klammerung eines Ausdrucks (hallo). Beliebiges Zeichen h.llo? Optional Barrack (Hussein)? Obama + Mindestens einmaliges [1 0]+ Vorkommen * Beliebig oftes Vorkommen 10 {u,o} Beschränktes Vorkommen hal{1,2}o (untere und obere Grenze) - etc. Sonderzeichen escapen Doppel\-Name 87 / 93

Anwendung Beispiel Java Praktische Auswirkung In der Regel ist es effizienter, bei der Verwendung von regulären Ausdrücken die Konvertierung in den NEA nur einmal vorzunehmen und im Anschluss den bereits konvertierten NEA zu verwenden. Statt 1 boolean b = Pattern. matches ( "a*b", "aaaab" ) ; sollte man bei häufigeren Tests daher 1 Pattern p = Pattern. compile ( "a*b" ) ; 2 Matcher m = p. matcher ( "aaaab" ) ; 3 boolean b = m. matches ( ) ; verwenden. 88 / 93

Anwendung Verwendet Java heute NEAs? In 2007 hat Russ Cox einen Performanz-Test zwischen verschiedenen Implementierungen regulärer Ausdrücke und einer Implementierung basierend auf NEAs gemacht und ist zu folgendem Ergebnis gekommen: http://swtch.com/ rsc/regexp/regexp1.html 89 / 93

Anwendung Verwendet Java heute NEAs? In 2007 hat Russ Cox einen Performanz-Test zwischen verschiedenen Implementierungen regulärer Ausdrücke und einer Implementierung basierend auf NEAs gemacht und ist zu folgendem Ergebnis gekommen: http://swtch.com/ rsc/regexp/regexp1.html Wie ist die Situation heute? 90 / 93

Zusammenfassung Registermaschinen 91 / 93

Zusammenfassung Registermaschinen Analyse von Programmen mittels Invarianten 92 / 93

Zusammenfassung Registermaschinen Analyse von Programmen mittels Invarianten Endliche Automaten 93 / 93