Preamble

Endliche Automaten

Registermaschinen

Invarianten

Zusammenfassung

Algorithmen und Datenstrukturen - Maschinenmodelle Alexander Sczyrba Technische Fakultät [email protected]

Vorlesung, Universität Bielefeld, Winter 2014/2015

1 / 90

Preamble

Endliche Automaten

Registermaschinen

Invarianten

Zusammenfassung

Kapitel 3 - Maschinenmodelle

1

Preamble

2

Endliche Automaten

3

Registermaschinen

4

Invarianten

5

Zusammenfassung

2 / 90

Preamble

Endliche Automaten

Registermaschinen

Invarianten

Zusammenfassung

Preamble 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 / 90

Preamble

Endliche Automaten

Registermaschinen

Invarianten

Zusammenfassung

Ziele des Kapitels In diesem Kapitel lernen wir zwei, sehr verschiedene Modelle einer Rechenmaschine kennen: Endliche Automaten sind ein abstraktes und sehr einfaches Rechnermodell. Sie verarbeiten Zeichenreichen und haben zahlreiche Anwendungen in der Textverarbeitung. Registermaschinen ähneln realen Prozessoren. An ihnen lernen wir Begriffe wie Befehlszyklus, Konfiguration, Maschinenfunktion, partielle und totale Korrektheit kennen. 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 / 90

Preamble

Endliche Automaten

Registermaschinen

Invarianten

Zusammenfassung

Endliche Automaten 1

Preamble

2

Endliche Automaten Einführung Beispiel Formale Sprachen Operationen auf endlichen Automaten Nicht-deterministische endliche Automaten (NEA) Anwendung

3

Registermaschinen

4

Invarianten

5

Zusammenfassung 5 / 90

Preamble

Endliche Automaten

Registermaschinen

Invarianten

Zusammenfassung

Einführung

Einordnung

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, die wir später kennen lernen werden.

6 / 90

Preamble

Endliche Automaten

Registermaschinen

Invarianten

Zusammenfassung

Einführung

Definition

Definition Ein Alphabet ist ein endlicher Zeichenvorrat. Eine Zeichenreihe über Alphabet A ist eine Folge a1 a2 . . . an mit ai ∈ A, n ≥ 0. Für die leere Zeichenreihe (n = 0) schreibt man ε. A∗ ist die Menge aller Zeichenreihen über A.

7 / 90

Preamble

Endliche Automaten

Registermaschinen

Invarianten

Zusammenfassung

Einführung

Definition Ein endlicher Automat besteht aus einem Alphabet A einer endlichen Zustandsmenge S einem Startzustand s0 ∈ 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 s0 = 0.

8 / 90

Preamble

Endliche Automaten

Registermaschinen

Invarianten

Zusammenfassung

Beispiel

Beispiel EA1

Zustandsübergangsfunktion a∈A δ(s, a) a b s∈S 0 1 2 1 3 0 2 0 3 3 3 3

Automat EA1 A S s0 F

= = = =

{a, b} {0, 1, 2, 3} 0 {0}

9 / 90

Preamble

Endliche Automaten

Registermaschinen

Invarianten

Zusammenfassung

Beispiel

Berechnete Funktion des endlichen Automaten

Definition Automatenfunktion Die Automatenfunktion des Automaten A = (A, S, s0 , δ, F) ist δA : A∗ → S mit δA (x) = δ ∗ (s0 , x) δ ∗ (s, ε) = s δ ∗ (s, ax) = δ ∗ (δ(s, a), x)

Die Automatenfunktion rechnet also genau n + 1 Schritte für eine Zeichenreihe der Länge n.

10 / 90

Preamble

Endliche Automaten

Registermaschinen

Invarianten

Zusammenfassung

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.

11 / 90

Preamble

Endliche Automaten

Registermaschinen

Invarianten

Zusammenfassung

Beispiel

Betrachtung zu EA1

Akzeptierte Wörter: Zurückgewiesene Wörter:

ε, ab, ba, abab, abba, . . . 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

12 / 90

Preamble

Endliche Automaten

Registermaschinen

Invarianten

Zusammenfassung

Beispiel

Übergangsdiagramm zu endlichen Automaten Die Funktion δ wird grafisch dargestellt: Beispiel EA1 1

a

a a,b

b 3

0 b a

2

b

Zustände f ∈ F bekommen einen doppelten Kreis.

13 / 90

Preamble

Endliche Automaten

Registermaschinen

Invarianten

Zusammenfassung

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

a

δ(s, a) 0 1 2

b 0 b a

a 1 – 0

b 2 0 –

2

Das Diagramm ist damit kleiner, und die δ-Funktion partiell.

14 / 90

Preamble

Endliche Automaten

Registermaschinen

Invarianten

Zusammenfassung

Beispiel

Varianten von EA1

EA2 a

1 b a 3

0 b

Was sind die fehlenden Übergänge/Fehlerzustände? Was ist Akz(EA2)?

b

2

a

15 / 90

Preamble

Endliche Automaten

Registermaschinen

Invarianten

Zusammenfassung

Beispiel

Varianten von EA1

EA2 a

1 b a 3

0 b

Was sind die fehlenden Übergänge/Fehlerzustände? Was ist Akz(EA2)?

b

2

a

Akz(EA2) = Akz(EA1) − {ε}

16 / 90

Preamble

Endliche Automaten

Registermaschinen

Invarianten

Zusammenfassung

Beispiel

EA3 a

a

1

Was sind die fehlenden Übergänge/Fehlerzustände?

b

3

0

b

2

Was ist Akz(EA3)?

a

b

17 / 90

Preamble

Endliche Automaten

Registermaschinen

Invarianten

Zusammenfassung

Beispiel

EA3 a

a

1

Was sind die fehlenden Übergänge/Fehlerzustände?

b

3

0

b

2

Was ist Akz(EA3)?

a

b

Akz(EA3) = {an ab, n ≥ 0} ∪ {bn ba, n ≥ 0}

18 / 90

Preamble

Endliche Automaten

Registermaschinen

Invarianten

Zusammenfassung

Beispiel

EA4

a

a

1 b

3

0

b

2

a,b

Hier gibt es keine Fehlerzustände, trotzdem ist Akz(EA4) 6= A∗

a

b

19 / 90

Preamble

Endliche Automaten

Registermaschinen

Invarianten

Zusammenfassung

Beispiel

EA4

a

a

1 b

3

0

b

2

a,b

Hier gibt es keine Fehlerzustände, trotzdem ist Akz(EA4) 6= A∗

a

b

Akz(EA4) = {xaby , xbay | x, y ∈ A∗ } In Worten: EA4 akzeptiert alle Zeichenreihen, die irgendwo ein ab oder ba enthalten.

20 / 90

Preamble

Endliche Automaten

Registermaschinen

Invarianten

Zusammenfassung

Beispiel

a

EA5 a

1

Welche Übergänge fehlen? Was ist Akz(EA5)?

0

b

2

b

21 / 90

Preamble

Endliche Automaten

Registermaschinen

Invarianten

Zusammenfassung

Beispiel

a

EA5 a

1

Welche Übergänge fehlen? Was ist Akz(EA5)?

0

b

2

b

Akz(EA5) = {an | n ≥ 0} ∪ {bn | n ≥ 0}

22 / 90

Preamble

Endliche Automaten

Registermaschinen

Invarianten

Zusammenfassung

Beispiel

Komplement von Wortproblemen

Beobachtung: Akz(EA5) = A∗ − Akz(EA4) Satz Die von endlichen Automaten akzeptierten Wortmengen sind abgeschlossen unter Komplementbildung in A∗ .

23 / 90

Preamble

Endliche Automaten

Registermaschinen

Invarianten

Zusammenfassung

Beispiel

Beweis: Sei

A = (A, S, s0 , δ, F). Wir setzen ¯ = (A, S, s0 , δ, S \ F). A

¯ = A∗ − Akz(A). Offensichtlich gilt Akz(A) Achtung, anhand der Diagramme ist dies erst offensichtlich, wenn man alle weggelassenen Zustände und Übergänge wieder ergänzt.

24 / 90

Preamble

Endliche Automaten

Registermaschinen

Invarianten

Zusammenfassung

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.

25 / 90

Preamble

Endliche Automaten

Registermaschinen

Invarianten

Zusammenfassung

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?

26 / 90

Preamble

Endliche Automaten

Registermaschinen

Invarianten

Zusammenfassung

Formale Sprachen

Gegenbeispiel Zur Widerlegung unserer Überlegung können wir ein einfaches Gegenbeispiel konstruieren.

27 / 90

Preamble

Endliche Automaten

Registermaschinen

Invarianten

Zusammenfassung

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.

28 / 90

Preamble

Endliche Automaten

Registermaschinen

Invarianten

Zusammenfassung

Formale Sprachen

Betrachte L = {am bm , m ≥ 0}

29 / 90

Preamble

Endliche Automaten

Registermaschinen

Invarianten

Zusammenfassung

Formale Sprachen

Betrachte L = {am bm , m ≥ 0} 0

a

a

1

2

b

2n

b

b

2n−1

n−1

a

n

b

b

n+2

b

n+1

30 / 90

Preamble

Endliche Automaten

Registermaschinen

Invarianten

Zusammenfassung

Formale Sprachen

Betrachte L = {am bm , m ≥ 0} a

0

a

1 b

2n

n−1

2 b

b

a

n

b

b

2n−1

n+2

b

n+1

Dieser Automat akzeptiert {am bm | 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?

31 / 90

Preamble

Endliche Automaten

Registermaschinen

Invarianten

Zusammenfassung

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

32 / 90

Preamble

Endliche Automaten

Registermaschinen

Invarianten

Zusammenfassung

Formale Sprachen

Praktische Bedeutung endlicher Automaten

Einfaches Programmiermodell für einfache Klasse von Wortproblemen. Viele wichtige Anwendungen Codierungsprobleme Übersetzung von Programmiersprachen Dokument-Verarbeitung

33 / 90

Preamble

Endliche Automaten

Registermaschinen

Invarianten

Zusammenfassung

Operationen auf endlichen Automaten

Verknüpfung endlicher Automaten

Konkatenation (auch Produkt genannt) 0

v

1

o

2

r

3

und

o

0

r

1

2

t

3

ergibt

0

v

1

o

2

r

3

o

4

r

5

t

6

34 / 90

Preamble

Endliche Automaten

Registermaschinen

Invarianten

Zusammenfassung

Operationen auf endlichen Automaten

Beliebige Wiederholung Aus b

0

l

1

2

a

3

wird b

0

l

1

2

a

35 / 90

Preamble

Endliche Automaten

Registermaschinen

Invarianten

Zusammenfassung

Operationen auf endlichen Automaten

Vereinigung Aus 0

v

o

1

r

2

und

3

0

o

1

r

2

t

3

wird v

1

o

2

0 o

4

r

5

r

t

3

(Zustände 3, 6 könnte man zusammenlegen) 6

. . . aber so einfach geht’s nicht immer.

36 / 90

Preamble

Endliche Automaten

Registermaschinen

Invarianten

Zusammenfassung

Operationen auf endlichen Automaten

Aus 0

t

o

1

r

2

und

3

0

t

1

o

2

t

3

wird t

1

t

4

o

2

0 o

5

r

t

3

das ist kein endlicher Automat. . . 6

37 / 90

Preamble

Endliche Automaten

Registermaschinen

Invarianten

Zusammenfassung

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.

38 / 90

Preamble

Endliche Automaten

Registermaschinen

Invarianten

Zusammenfassung

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.

39 / 90

Preamble

Endliche Automaten

Registermaschinen

Invarianten

Zusammenfassung

Nicht-deterministische endliche Automaten (NEA)

Satz (Konstruktion von Myhill)

Zu jedem NEA gibt es einen EA, der 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.

40 / 90

Preamble

Endliche Automaten

Registermaschinen

Invarianten

Zusammenfassung

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

41 / 90

Preamble

Endliche Automaten

Registermaschinen

Invarianten

Zusammenfassung

Anwendung

Bestandteile Regulärer Ausdrücke Symbol Zeichen [] () . ? + * {u,o}

’-’ etc.

Bedeutung das Zeichen selbst Auswahl Bereich (innerhalb von []) Klammerung eines Ausdrucks Beliebiges Zeichen Optional Mindestens einmaliges Vorkommen Beliebig oftes Vorkommen Beschränktes Vorkommen (untere und obere Grenze) Sonderzeichen escapen

Beispiel hallo h[ae]llo [a-zA-Z] (hallo) h.llo Barrack (Hussein)? Obama [1 − 0]+ 10∗ hal{1,2}o

Doppel\-Name 42 / 90

Preamble

Endliche Automaten

Registermaschinen

Invarianten

Zusammenfassung

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 = P a t t e r n . matches ( "a*b" , "aaaab" ) ;

sollte man bei häufigeren Tests daher 1 2 3

P a t t e r n p = P a t t e r n . compile ( "a*b" ) ; Matcher m = p . matcher ( "aaaab" ) ; boolean b = m. matches ( ) ;

verwenden. 43 / 90

Preamble

Endliche Automaten

Registermaschinen

Invarianten

Zusammenfassung

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:

Time to match a?n an against an http://swtch.com/~rsc/regexp/regexp1.html

44 / 90

Preamble

Endliche Automaten

Registermaschinen

Invarianten

Zusammenfassung

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:

Time to match a?n an against an http://swtch.com/~rsc/regexp/regexp1.html Wie ist die Situation heute?

45 / 90

Preamble

Endliche Automaten

Registermaschinen

Invarianten

Zusammenfassung

Registermaschinen 1

Preamble

2

Endliche Automaten

3

Registermaschinen Einführung Begriffe Befehle Rechnen Semantik Beobachtungen Erweiterung zur Indirekten Adressierung

4

Invarianten

5

Zusammenfassung 46 / 90

Preamble

Endliche Automaten

Registermaschinen

Invarianten

Zusammenfassung

Einführung

[Dieses Kapitel hält sich eng an das empfohlene Buch von Saake/Sattler]

47 / 90

Preamble

Endliche Automaten

Registermaschinen

Invarianten

Zusammenfassung

Einführung

Einführung

Eine Registermaschine ist eine formal definierte Rechenmaschine

48 / 90

Preamble

Endliche Automaten

Registermaschinen

Invarianten

Zusammenfassung

Einführung

Einführung

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

49 / 90

Preamble

Endliche Automaten

Registermaschinen

Invarianten

Zusammenfassung

Einführung

Komponenten der Registermaschine Programm− speicher

b1 b2 b3

Zentrale Recheneinheit Steuer− einheit

+ bn b1 ... bn B C0 C1, C2 , ... + ,*,=

C0

B

*

Arbeits− speicher

C1 C2 C3 C4

=

Recheneinheit

: : : : :

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.

50 / 90

Preamble

Endliche Automaten

Registermaschinen

Invarianten

Zusammenfassung

Begriffe

Befehlszyklus Die Registermaschine iteriert einen Befehlszyklus: Sei i der Inhalt von B. Programm− speicher

Zentrale Recheneinheit

b1 b2

Steuer− einheit

b3

+ bn b1 ... bn B C0 C1, C2 , ... + ,*,=

C0

B

*

=

Arbeits− speicher

C1 C2 C3 C4

Lade bi aus dem Programmspeicher in die Steuereinheit. Erhöhe B auf i + 1. Decodiere bi und führe ihn aus durch

Recheneinheit

: : : : :

Programm ( n Befehle) Befehlszähler Akkumulator (Arbeitsregister) Arbeitsspeicher (Register) Rechenwerke

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. 51 / 90

Preamble

Endliche Automaten

Registermaschinen

Invarianten

Zusammenfassung

Begriffe

Programm

Das Programm ist eine Folge von Befehlen b1 , b2 , . . . , bn Diese ist bei uns unveränderbar (im Unterschied zu realen Rechnern, wo Programme in den Programmspeicher geladen und verändert werden können).

52 / 90

Preamble

Endliche Automaten

Registermaschinen

Invarianten

Zusammenfassung

Begriffe

Programm

Das Programm ist eine Folge von Befehlen b1 , b2 , . . . , bn 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?

53 / 90

Preamble

Endliche Automaten

Registermaschinen

Invarianten

Zusammenfassung

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

b1 b2 b3

Zentrale Recheneinheit Steuer− einheit

+ bn b1 ... bn B C0 C1, C2 , ... + ,*,=

C0

B

*

=

Recheneinheit

: : : : :

Programm ( n Befehle) Befehlszähler Akkumulator (Arbeitsregister) Arbeitsspeicher (Register) Rechenwerke

Arbeits− speicher

C1 C2 C3 C4

Enthält B die Zahl b, und Ci die Zahl ci , 0 ≤ i, so heisst (b, c0 , c1 , . . . ) aktuelle Konfiguration der Registermaschine. Die Ausführung eines Befehls bewirkt einen Konfigurations-Übergang (b, c0 , c1 , . . . ) ` (b0 , c00 , c10 , . . . ) 54 / 90

Preamble

Endliche Automaten

Registermaschinen

Invarianten

Zusammenfassung

Befehle

Laden und Speichern Zentrale Recheneinheit

Programm− speicher

b1 b2 b3

Arbeits− speicher

C1 C2 C3 C4

Steuer− einheit

C0

B +

bn

=

*

Recheneinheit

i ∈ N+ b0 = b + 1 c00 = ci cj0 = cj b1 ... bn : Programm ( n Befehle) CLOAD i, i ∈ N b0 = b + 1 c00 = i cj0 = cj B : Befehlszähler STORE b0 = b + 1(Arbeitsregister) ci0 = c0 cj0 = cj C0 i, i ∈: N+Akkumulator C1, C2 , ... : Arbeitsspeicher (Register) + , * , = : Rechenwerke

LOAD i,

Preamble

Endliche Automaten

Registermaschinen

für

j 6= 0

für

j 6= 0

für

j 6= i 55 / 90

Invarianten

Zusammenfassung

Befehle

Arithmetische Befehle

ADD i,

i ∈ N+

b0 = b + 1

c00 = c0 + ci

cj0 = cj für j 6= 0

CADD i,

i ∈ N+

b0 = b + 1

c00 = c0 + i

cj0 = cj für j 6= 0

i ∈ N+

b0 = b + 1

c00 =



SUB i,

c0 − ci 0

für c0 ≥ ci sonst

cj0 = cj für j 6= 0



c0 − i 0

für c0 ≥ i sonst

cj0 = cj für j 6= 0

0

CSUB i,

i ∈ N+

b =b+1

c00

MULT i,

i ∈ N+

b0 = b + 1

c00 = c0 ∗ ci

cj0 = cj für j 6= 0

CMULT i

i ∈ N+

b0 = b + 1

c00 = c0 ∗ i

cj0 = cj für j 6= 0

DIV i,

i ∈ N+

b0 = b + 1

c00 = bc0 /ci c

cj0 = cj für j 6= 0

CDIV i,

i ∈ N+

b0 = b + 1

c00 = bc0 /ic

cj0 = cj für j 6= 0

=

56 / 90

Preamble

Endliche Automaten

Registermaschinen

Invarianten

Zusammenfassung

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)

57 / 90

Preamble

Endliche Automaten

Registermaschinen

Invarianten

Zusammenfassung

Befehle

Sprungbefehle

GOTO i,

i ∈ N+

b0 = i

IF c0 = 0 GOTO i,

i ∈ N+

b0 =

END



b0 = b

i b+1

falls c0 = 0 sonst

cj0 = cj

für

j ≥0

cj0 = cj

für

j ≥0

cj0 = cj

für

j ≥0

58 / 90

Preamble

Endliche Automaten

Registermaschinen

Invarianten

Zusammenfassung

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, x1 , . . . , xn , 0, 0, . . . ) xi sind die Eingabe-Parameter in den Registern c1 . . . cn .

59 / 90

Preamble

Endliche Automaten

Registermaschinen

Invarianten

Zusammenfassung

Rechnen

Berechnete Funktion

M berechnet Funktion fM : Nn → Nm mit (y1 , . . . , ym ) = fM (x1 , . . . , xn ), falls für alle x1 , . . . , xn ∈ N gilt (1, 0, x1 , . . . , xn , 0, 0, . . . ) ` · · · ` (e, c, y1 , . . . , ym , . . . ) und be ist ein END-Befehl.

60 / 90

Preamble

Endliche Automaten

Registermaschinen

Invarianten

Zusammenfassung

Rechnen

Beispiel 1 2 3 4

M+ LOAD ADD STORE END

1 2 3

(1, 0, a, b) ` · · · ` (4, a + b, a, b, a + b) FM+ (x1 , x2 ) = (x1 , x2 , x1 + x2 )

61 / 90

Preamble

Endliche Automaten

Registermaschinen

Invarianten

Zusammenfassung

Rechnen

Beispiel 1 2 3 4 5 6

Mfib LOAD ADD STORE SUB STORE END

1 2 2 1 1

(1, 0, a, b) ` · · · ` (6, b, b, a + b) Mfib berechnet einen Schritt der Fibonacci-Iteration. fMfib (x1 , x2 ) = (x2 , x2 , x1 + x2 )

62 / 90

Preamble

Endliche Automaten

Registermaschinen

Invarianten

Zusammenfassung

Rechnen

Beispiel M1

1 2 3 4 5 6 7 8

LOAD 1 DIV 2 MULT 2 STORE 3 LOAD 1 SUB 3 STORE 3 END

63 / 90

Preamble

Endliche Automaten

Registermaschinen

Invarianten

Zusammenfassung

Rechnen

Rechnung von M1

(1, 0, n, m, 0) ` ... `

... (8, r , n, m, r )

mit r = n − (n div m) ∗ m Berechnete Funktion: fM1 (x1 , x2 ) = (x1 , x2 , x1 mod x2 )

64 / 90

Preamble

Endliche Automaten

Registermaschinen

Invarianten

Zusammenfassung

Semantik

Semantik einfacher Programme

Beispiel 1

Mid END

Beispiel 1 2

fMid (x1 , . . . , xn ) = (x1 , . . . , xn )

Mundef GOTO 1 END

fMundef (x1 , . . . , xn ) =undefiniert

65 / 90

Preamble

Endliche Automaten

Registermaschinen

Invarianten

Zusammenfassung

Semantik

Beispiel 1 2 3 4

M3 LOAD 1 IF c0 = 0 GOTO 4 GOTO 2 END

Beispiel 1 2 3

M4 LOAD 1 IF c0 = 0 GOTO 1 END

fM3 (x1 )

= 0 falls x1 = 0 = undefiniert, sonst

fM4 (x1 )

= x1 falls x1 > 0 = undefiniert, sonst

66 / 90

Preamble

Endliche Automaten

Registermaschinen

Invarianten

Zusammenfassung

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.

67 / 90

Preamble

Endliche Automaten

Registermaschinen

Invarianten

Zusammenfassung

Erweiterung zur Indirekten Adressierung

Neue Problemstellung Es soll die Summe einer beliebig langen Zahlenkette gebildet werden. Ansatz: Zahlenkette beginnt ab c10 Ende mit ci = 0 gekennzeichnet. c1 hält unser aktuelles Zwischenergebnis.

1 2 3 4 5 6 7 8 9 10 11 12 13 ···

CLOAD 0 STORE 1 GOTO 5 END LOAD 10 IF C0 = 0 GOTO 4 ADD 1 STORE 1 LOAD 11 IF C0 = 0 GOTO 4 ADD 1 STORE 1 LOAD 12 ···

68 / 90

Preamble

Endliche Automaten

Registermaschinen

Invarianten

Zusammenfassung

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.

69 / 90

Preamble

Endliche Automaten

Registermaschinen

Invarianten

Zusammenfassung

Erweiterung zur Indirekten Adressierung

INDLOAD i,

i ∈ N+

b0 = b + 1

c00 = cci

cj0 = cj für j 6= 0

INDSTORE i,

i ∈ N+

b0 = b + 1

cc0 = c0

cj0 = cj für j 6= i

i

j ∈N ADD i,

i ∈ N+

b0 = b + 1

c00 = c0 + ci

cj0 = cj für j 6= 0

INDADD i,

i ∈ N+

b0 = b + 1

c00 = c0 + cci

cj0 = cj für j 6= 0

i ∈ N+

b0 = b + 1

c00 =



SUB i,

c0 − ci 0



c0 − cc i 0

0

für c0 ≥ ci sonst für c0 ≥ cci sonst

cj0 = cj für j 6= 0

INDSUB i,

i ∈ N+

b =b+1

c00

MULT i,

i ∈ N+

b0 = b + 1

c00 = c0 ∗ ci

cj0 = cj für j 6= 0

INDMULT i

i ∈ N+

b0 = b + 1

c00 = c0 ∗ cci

cj0 = cj für j 6= 0

DIV i,

i ∈ N+

b0 = b + 1

c00 = bc0 /ci c

cj0 = cj für j 6= 0

INDDIV i,

i ∈ N+

b0 = b + 1

c00 = bc0 /cci c

cj0 = cj für j 6= 0

=

cj0 = cj für j 6= 0

70 / 90

Preamble

Endliche Automaten

Registermaschinen

Invarianten

Zusammenfassung

Erweiterung zur Indirekten Adressierung

Summe einer Liste von Zahlen Es soll die Summe einer beliebig langen Zahlenkette gebildet werden. Ansatz:

1 2 3 4 5 6 7 8 9 10 11 12 13

Zahlenkette beginnt ab c10 Ende mit ci = 0 gekennzeichnet. c1 hält unser aktuelles Zwischenergebnis. c2 enthält unseren aktuellen Index.

CLOAD 0 STORE 1 CLOAD 10 STORE 2 INDLOAD 2 IF C0 = 0 GOTO 13 ADD 1 STORE 1 LOAD 2 CADD 1 STORE 2 GOTO 5 END

71 / 90

Preamble

Endliche Automaten

Registermaschinen

Invarianten

Zusammenfassung

Invarianten 1

Preamble

2

Endliche Automaten

3

Registermaschinen

4

Invarianten Definition Beispiele Komplexeres Beispiel Partielle vs. Totale Korrektheit

5

Zusammenfassung

72 / 90

Preamble

Endliche Automaten

Registermaschinen

Invarianten

Zusammenfassung

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: φbb0 (c0 , c1 , . . . ) gilt am Übergang von Befehl b zu b0 . φstart (c0 , c1 . . . ) gilt am Anfang, φend (c0 , c1 . . . ) am Ende.

73 / 90

Preamble

Endliche Automaten

Registermaschinen

Invarianten

Zusammenfassung

Beispiele

Invarianten zu M3 1

2

3

4

Beispiel 1 2 3 4

M3 LOAD 1 IF c0 = 0 GOTO 4 GOTO 2 END

φstart φ12 φ23 φ32 φ24 φend

(c0 (c0 (c0 (c0 (c0 (c0

= = = = = =

= 0, c1 = x ≥ 0) = c1 = x ≥ 0) = c1 = x > 0) = c1 = x > 0) = c1 = 0) = c1 = 0)

74 / 90

Preamble

Endliche Automaten

Registermaschinen

Invarianten

Zusammenfassung

Beispiele

Invarianten zu M3 Beispiel 1 2 3 4

1

2

M3 LOAD 1 IF c0 = 0 GOTO 4 GOTO 2 END

φstart = (c0 = 0, c1 = x ≥ 0) 3 φ12 = (c0 = c1 = x ≥ 0) φ23 = (c0 = c1 = x > 0) φ32 = (c0 = c1 = x > 0) φ24 = (c0 = c1 = 0) 4 φend = (c0 = c1 = 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. 75 / 90

Preamble

Endliche Automaten

Registermaschinen

Invarianten

Zusammenfassung

Beispiele

Invarianten zu M4

1

2

3

Beispiel 1 2 3

M4 LOAD 1 IF c0 = 0 GOTO 1 END

φstart φ12 φ23 φ21 φend

(c0 (c0 (c0 (c0 (c0

= = = = =

= 0, c1 = x ≥ 0) = c1 = x ≥ 0) = c1 = x > 0) = c1 = x = 0) = c1 = x > 0)

76 / 90

Preamble

Endliche Automaten

Registermaschinen

Invarianten

Zusammenfassung

Komplexeres Beispiel

Registermaschine M2 1 2 3 4 5 6 7 8 9 10 11 12

CLOAD 1 STORE 3 LOAD 2 IF c0 = 0 GOTO 12 LOAD 3 MULT 1 STORE 3 LOAD 2 CSUB 1 STORE 2 GOTO 4 END

77 / 90

Preamble

Endliche Automaten

Registermaschinen

Invarianten

Zusammenfassung

Komplexeres Beispiel

Programmflussdiagramm für M2 1 2 3 4 5 6 7 8 9 10 11 12

CLOAD 1 STORE 3 LOAD 2 IF c0 = 0 GOTO 12 LOAD 3 MULT 1 STORE 3 LOAD 2 CSUB 1 STORE 2 GOTO 4 END

1

2

3

4

5

12

6

7

8

11

10

9

φstart = (c1 = x, c2 = y ) Wir suchen φend , indem wir φstart durch das Diagramm propagieren. Das geht überall einfach, außer am “Schleifenkopf” 4.

78 / 90

Preamble

Endliche Automaten

Registermaschinen

Invarianten

Zusammenfassung

Komplexeres Beispiel

1 2 3 4 5 6 7 8 9 10 11 12

CLOAD 1 STORE 3 LOAD 2 IF c0 = 0 GOTO 12 LOAD 3 MULT 1 STORE 3 LOAD 2 CSUB 1 STORE 2 GOTO 4 END

φstart

=

(c0 = 0, c1 = x, c2 = y )

φ12

=

(c0 = 1, c1 = x, c2 = y )

φ23

=

(c0 = 1, c1 = x, c2 = y , c3 = 1)

φ34

=

(c0 = y , c1 = x, c2 = y , c3 = 1)

Hier entsteht nun das Problem, dass wir φ45 nicht allein aus φ34 und b4 bestimmen können, da es auch von φ11 4 abhängt, das wir noch nicht kennen.

79 / 90

Preamble

Endliche Automaten

Registermaschinen

Invarianten

Zusammenfassung

Komplexeres Beispiel

1 2 3 4 5 6 7 8 9 10 11 12

CLOAD 1 STORE 3 LOAD 2 IF c0 = 0 GOTO 12 LOAD 3 MULT 1 STORE 3 LOAD 2 CSUB 1 STORE 2 GOTO 4 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.

80 / 90

Preamble

Endliche Automaten

Registermaschinen

Invarianten

Zusammenfassung

Komplexeres Beispiel

1 2 3 4 5 6 7 8 9 10 11 12

CLOAD 1 STORE 3 LOAD 2 IF c0 = 0 GOTO 12 LOAD 3 MULT 1 STORE 3 LOAD 2 CSUB 1 STORE 2 GOTO 4 END

Sei φ4 = (c0 = a, c1 = x, c2 = b, c3 = d) mit Unbekannten a, b, d. φ45

=

(c0 = a > 0, c1 = x, c2 = b, c3 = d)

φ56

=

(c0 = d, a > 0, c1 = x, c2 = b, c3 = d)

φ67

=

(c0 = d · x, a > 0, c1 = x, c2 = b, c3 = d)

φ78

=

(c0 = d · x, a > 0, c1 = x, c2 = b, c3 = d · x)

81 / 90

Preamble

Endliche Automaten

Registermaschinen

Invarianten

Zusammenfassung

Komplexeres Beispiel

1 2 3 4 5 6 7 8 9 10 11 12

CLOAD 1 STORE 3 LOAD 2 IF c0 = 0 GOTO 12 LOAD 3 MULT 1 STORE 3 LOAD 2 CSUB 1 STORE 2 GOTO 4 END

φ89

=

(c0 = b, a > 0, c1 = x, c2 = b, c3 = d · x)

φ9 10

=

(c0 = b − 1, a > 0, c1 = x, c2 = b, c3 = d · x)

φ10 11

=

(c0 = b − 1, a > 0, c1 = x, c2 = b − 1, c3 = d · x)

φ11 4

= φ10 11

φ4 12

= φ4 ∧ c 2 = 0

82 / 90

Preamble

Endliche Automaten

Registermaschinen

Invarianten

Zusammenfassung

Komplexeres Beispiel

1 2 3 4 5 6 7 8 9 10 11 12

CLOAD 1 STORE 3 LOAD 2 IF c0 = 0 GOTO 12 LOAD 3 MULT 1 STORE 3 LOAD 2 CSUB 1 STORE 2 GOTO 4 END

Jetzt müssen wir φ4 herausfinden. Es muss gelten φ34 → φ4

φ11 4 → φ4

und

φ34 :

(c0 = y , c1 = x, c2 = y , c3 = 1)

φ11 4 :

(c0 = b − 1, c1 = x, c2 = b − 1, c3 = d · x, a > 0)

φ4 :

(c0 = a, c1 = x, c2 = b, c3 = d)

83 / 90

Preamble

Endliche Automaten

Registermaschinen

Invarianten

Zusammenfassung

Komplexeres Beispiel

Den Effekt eines Schleifendurchlaufs auf φ4 hält φ11 4 fest. Wir beobachten c1 ändert sich nicht, c0 , c2 und c3 ändern sich. Für φ11 4 wie für φ3 4 gilt invariant: c3 = x (y −c2 ) . Wir setzen als neue Invariante φˆ4 = (c0 = c2 , c1 = x, c3 = x (y −c2 ) ) Es gilt φ34 impliziert φˆ4 . Es gilt nach “Durchschieben” von φˆ4 durch die Schleife φˆ11 4 = (c0 = c2 , c1 = x, c3 = x (y −(c2 +1)) · x) = φˆ4

84 / 90

Preamble

Endliche Automaten

Registermaschinen

Invarianten

Zusammenfassung

Komplexeres Beispiel

Damit finden wir nun die Endkonfiguration φ4 12 φend

= (c0 = 0, c1 = x, c2 = c0 = 0, c3 = x y ) = φ4 12

Damit ist bewiesen, dass die Maschinenfunktion von M2 lautet fM2 (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.

85 / 90

Preamble

Endliche Automaten

Registermaschinen

Invarianten

Zusammenfassung

Partielle vs. Totale Korrektheit

Partielle versus Totale Korrektheit

Ein Maschinenprogramm M heisst partiell korrekt für eine Funktion f : Nn → Nm , falls fM (x1 , . . . , xn ) = f (x1 , . . . , xn ), sofern fM terminiert. M heisst total korrekt für f , falls gilt: Wenn f (x1 , . . . , xn ) definiert ist, so terminiert fM auf Eingabe x1 , . . . , xn mit dem Ergebnis f (x1 , . . . , xn ).

86 / 90

Preamble

Endliche Automaten

Registermaschinen

Invarianten

Zusammenfassung

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.

87 / 90

Preamble

Endliche Automaten

Registermaschinen

Invarianten

Zusammenfassung

Zusammenfassung

Endliche Automaten

88 / 90

Preamble

Endliche Automaten

Registermaschinen

Invarianten

Zusammenfassung

Zusammenfassung

Endliche Automaten Registermaschinen

89 / 90

Preamble

Endliche Automaten

Registermaschinen

Invarianten

Zusammenfassung

Zusammenfassung

Endliche Automaten Registermaschinen Analyse von Programmen mittels Invarianten

90 / 90