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