Modellierung und Analyse technischer Systeme Prof. Dr. W. Vogler Sommersemester 2015 1 INHALTSVERZEICHNIS i Inhaltsverzeichnis 1 Einleitung, formale Sprachen 1.1 Wörter . . . . . . . . . . . . 1.2 Sprachen . . . . . . . . . . . 1.3 Graphen . . . . . . . . . . . und Wörter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 Endliche Automaten 2.1 Endliche Automaten . . . . . . . . . . . . . . . . . . . 2.2 Pumping–Lemma . . . . . . . . . . . . . . . . . . . . . 2.3 Deterministische Automaten . . . . . . . . . . . . . . . 2.4 Abschlußeigenschaften, Entscheidbarkeitsprobleme und 2.5 Induktive Definition von Termen . . . . . . . . . . . . 2.6 Rationale Ausdrücke und der Satz von Kleene . . . . . 2.7 Lexikalische Analyse — (F)LEX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Simulation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1 4 5 6 6 9 11 14 18 20 23 3 Mealy-Automaten 26 4 Aussagenlogik 4.1 Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2 Semantik,Wahrheitstafeln . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 33 36 5 Beweismethoden für Aussagenlogik 5.1 Der Hilbert-Kalkül . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.2 Sequenzenkalkül . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.3 Resolution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 43 50 52 6 Temporale Logik 6.1 LTL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.2 CTL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.3 CTL-Model-Checking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 54 63 68 7 Ein Blick auf UML-State-Machines 72 Prof. Dr. W. Vogler Universität Augsburg Mod. und Analyse techn. Systeme 1 EINLEITUNG, FORMALE SPRACHEN UND WÖRTER 1 1 Einleitung, formale Sprachen und Wörter Diese Vorlesung befaßt sich mit formaler (mathematischer) Grundlagen-Informatik (Stichworte: korrekte Software, Verifikation), speziell mit Automaten und Logik. Endliche Automaten beschreiben präzise Zeichenketten, die einfache Bausteine in Programmiersprachen sein können (der Lexer bereitet die Compilation vor) oder z.B. Abläufe von Systemen. Sie spielen (in leicht abgewandelter Form) auch eine wichtige Rolle im Software- und Systementwurf (Zustandsmaschinen in UML – s. Kapitel???, Transitionssysteme). Wort: Sequenz von Zeichen aus einem gegebenen Zeichenvorrat (z.B. C-Programm) formale Sprache: Menge von Wörtern (z.B. der syntaktisch korrekten C-Programme) Ein Alphabet (Zeichenvorrat) Σ ist eine endliche Menge; ihre Elemente heißen Buchstaben (Zeichen). a,b,c,0,1 a,b,c 1 2 Abbildung 1: Beispiel 1.1. Der endliche Automat in Abb. 1 erkennt/akzeptiert genau die (formale Sprache der) Bezeichner über Σ = {0, 1, a, b, c}: notiere die Buchstaben auf einem Pfad vom Startzustand zum Endzustand, z.B. a00b, b, aber nicht 1ab. a- a+ b+ 0 b- x- a b+ ab a+ b x+ xa xab x- baxb Abbildung 2: Beispiel 1.2. Bei einem Und-Gatter seien die Eingangssignale a und b sowie das Ausgangssignal x auf 0. Gehen die Eingangssignale mit a+ und b+ auf 1, muss auch x mit x+ auf 1 gehen; geht dann ein Eingangssignal mit a− oder b− auf 0, muss auch x mit x− auf 0 gehen etc. Der endliche Automat in Abb. 2 erkennt/akzeptiert genau die Abläufe, die in einen stabilen Zustand führen, bei dem also keine fällige Änderung des Ausgangssignals fehlt, z.B. a+ b+ x+ b− x−, a+ a− b+ a+ x+ und a+ a− b+, aber nicht a+ x+, a+ b+ a− und a+ b+ x+ b−. 1.1 Wörter Wir legen zunächst einige Grundlagen: Prof. Dr. W. Vogler Universität Augsburg Mod. und Analyse techn. Systeme 1 EINLEITUNG, FORMALE SPRACHEN UND WÖRTER 2 Definition 1.3. Ein Alphabet (Zeichenvorrat) Σ ist eine endliche Menge; ihre Elemente heißen Buchstaben (Zeichen); oft ist zusätzlich eine totale Ordnung auf Σ gegeben. Eine Folge von Buchstaben w = a1 · · · an mit ai ∈ Σ heißt Wort oder Zeichenkette über Σ. |w| := n ist die Länge des Wortes. Für n = 0 heißt w das leere Wort und wird mit λ (oft auch ε) bezeichnet. Σn bezeichnet die Menge der Wörter mit Länge n. Wörter der Länge 1 sind einfach Buchstaben; also Σ1 = Σ und Σ0 = Σ+ = ∪ Σn Menge der nichtleeren Wörter n≥1 Σ∗ = ∪ ˙ Σn = Σ+ ∪{λ} Menge aller Wörter n≥0 Eine formale Sprache über Σ ist eine Teilmenge L ⊆ Σ∗ . Beispiele 1.4. • {abba, babba} und {aa, ab, ba, bb} sind Sprachen über {a, b}. • Die leere Sprache ∅ und die Sprache {λ}, die nur das leere Wort enthält, sind Sprachen über jedem Alphabet. • immer λ ∈ Σ∗ , speziell: ∅∗ ̸= ∅ Definition 1.5. Die Konkatenation der Wörter v = a1 · · · an ∈ Σn und w = b1 · · · bm ∈ Σm ist v · w = a1 · · · an b1 · · · bm ∈ Σn+m ; wir schreiben oft vw (in Java: +). Ein Präfix ist ein Anfangsstück eines Wortes (inkl. λ!), d.h. v ist Präfix von u, wenn es ein Wort w mit u = vw gibt. Die Konkatenation ist assoziativ (also (uv)w = u(vw) ) und λ ist das neutrale Element, d.h. es gilt λw = w = wλ für alle w ∈ Σn . Wir definieren noch eine parametrische Länge. Prof. Dr. W. Vogler Universität Augsburg Mod. und Analyse techn. Systeme 1 EINLEITUNG, FORMALE SPRACHEN UND WÖRTER 3 Definition 1.6. Ist A ⊆ Σ, so ist |w|A die Anzahl der Zeichen von w, die in A liegen; speziell ist also |w| = |w|Σ . Formaler definieren wir |w|A durch Induktion über die Wortlänge: |λ|A = |av|A = 0 { 1 + |v|A wenn a ∈ A |v|A sonst Beispiele 1.7. • Wörter mit gleich vielen a und b: |w|a = |w|b • Wörter gerader Länge: |w| mod 2 = 0 • Kommunikation eines Pufferspeichers: Hier soll e für eine Eingabe in den Puffer, a bzw. b für eine Ausgabe auf Kanal A bzw. B stehen. w ∈ {a, b, e}∗ ist ein korrektes Pufferverhalten, z.B. eaeeaeb (nicht aber eaeabe), wenn für jedes Präfix v von w gilt |v|{a,b} ≤ |v|e . Prof. Dr. W. Vogler Universität Augsburg Mod. und Analyse techn. Systeme 1 EINLEITUNG, FORMALE SPRACHEN UND WÖRTER 1.2 4 Sprachen Strukturen wie Σ∗ mit einer assoziativen Operation · und einem neutralen Element 1 gibt es häufiger, sie heißen Monoide. In Monoiden kann man natürlichzahlige Potenzen definieren: xn ist das Produkt von n x’en; formal: x0 = 1; xn+1 = x · xn Speziell für Σ∗ ist also wn die Konkatenation von n w’s und w0 = λ. Weiter ist z.B. (ab)3 = ababab, ab3 = abbb und a3 b3 = aaabbb – Potenzieren geht als „Rechenart höherer Stufe“ also vor. Es gelten in allen Monoiden die üblichen Rechenregeln für Potenzen: x1 = x; xn+m = xn · xm ; (xn )m = xnm Weiter verhält sich die Länge wie ein Logarithmus: |λ| = 0; |vw| = |v| + |w| ; |wn | = n · |w| Auch die Sprachen bilden ein Monoid. Definition 1.8. Für ein Alphabet Σ ist P(Σ∗ ) die Potenzmenge von Σ∗ , d.h. die Menge aller Sprachen über Σ. Die Konkatenation · wird auf P(Σ∗ ) erweitert: für K, L ⊆ Σ∗ ist K · L = {k · l | k ∈ K, l ∈ L}. Beispiele 1.9. {a, ab}2 = • In {a, b, c}∗ : {ab, ac} · {c, cb} = • In {0, 1, . . . , 9}∗ : {1, . . . , 9} · {0, 5} ist die Menge aller zweistelligen, durch 5 teilbaren Dezimalzahlen. Jetzt ist auch P(Σ∗ ) ein Monoid wegen · und {λ}.Ferner ist ∅ ein Nullelement, d.h. für alle Sprachen L gilt L · ∅ = ∅ = ∅ · L. Die n-te Potenz von Σ ∈ P(Σ∗ ) besteht aus allen Produkten von n Elementen von Σ, also allen Wörtern der Länge n – genau wie wir Σn oben bereits definiert haben. Wenn wir die Elemente von Σ als Aktionen eines Systems oder eines Programms auffassen, sind die Wörter Aktionsfolgen, d.h. Abläufe des Systems (vgl. Beispiel Kommunikation eines Pufferspeichers). Die möglichen Abläufe des Systems (die von den Eingangsdaten oder z.B. vom Benutzer beeinflußt werden können und daher nicht von vornherein eindeutig festliegen) bilden eine Sprache L. Ln ist dann die n-fache Iteration des Programms (for-Schleife); u.a. für beliebige (endliche) Iteration (terminierende while-Schleife) führen wir ein: ∪ L+ = Ln n≥1 ∗ L = ∪ ˙ Ln = L+ ∪{λ} n≥0 Für L = Σ entsprechen L+ und L∗ unseren obigen Festlegungen. Beispiel 1.10. {0, 1, . . . , 9}∗ · {0, 5} sind alle durch 5 teilbaren Dezimalzahlen (evtl. mit führenden Nullen). ohne führende Nullen: Prof. Dr. W. Vogler Universität Augsburg Mod. und Analyse techn. Systeme 1 EINLEITUNG, FORMALE SPRACHEN UND WÖRTER 1.3 5 Graphen Da endliche Automaten offenbar (Kanten-beschriftete) (gerichtete) Graphen sind, definieren wir: Definition 1.11. Ein Graph G = (V, E) besteht aus einer (in der Regel endlichen) Menge V von Ecken (vertex, vertices,Knoten) und einer Menge E ⊆ V ×V von Kanten (edges, Pfeilen); statt (v, w) ∈ E schreibt man bei Graphen meist vw ∈ E. Ein Pfad (von x0 nach xn ) (der Länge n) ist eine Folge x0 x1 . . . xn , n ≥ 0, mit (xi , xi+1 ) ∈ E für alle i < n. (Analog gibt es auch unendliche Pfade.) Der Pfad ist ein geschlossener Kantenzug, wenn x0 = xn ; ein solcher ist ein Kreis, wenn sonst alle xi verschieden sind. Ein Graph G ist ein Baum mit Wurzel u0 , wenn es für jedes v ∈ V genau einen Pfad von u0 nach v gibt. Gelegentlich betrachten wir auch unendliche Bäume. Ist G ein Baum und v ∈ V , so heißen die w ∈ V mit vw ∈ E die Kinder von v; gibt es einen Pfad von v nach w, so ist w ein Nachkomme von v. 2 Prof. Dr. W. Vogler Universität Augsburg Mod. und Analyse techn. Systeme 2 ENDLICHE AUTOMATEN 2 6 Endliche Automaten Literatur zu diesem Kapitel: Hopcroft, Motwani, Ullman: Introduction to Automata Theory, Languages and Computation. dtsch.: Einführung in die Automatentheorie, Formale Sprachen und Komplexitätstheorie Schöning: Theoretische Informatik kurz gefaßt. 5. Auflage 2.1 Endliche Automaten Ein endlicher Automat (finite automaton oder finite state machine) erkennt bzw. akzeptiert Wörter über einem Alphabet Σ; eine andere Sichtweise ist, dass er Wörter generiert. Wir verwenden meist die folgenden Bezeichnungen: • a, b, c ∈ Σ, α ∈ Σ ∪ {λ} • u, v, w ∈ Σ∗ Der endliche Automat liest bei einem Zustandsübergang ein Zeichen aus Σ oder macht einen spontanen Übergang ohne Lesen eines Zeichens. Er akzeptiert ein Wort, wenn er am Wortende in einen besonders ausgezeichneten Zustand gelangt. Definition 2.1. Ein (nichtdeterministischer) endlicher Automat (EA) über Σ ist ein Tupel A = (Q, Σ, δ, q0 , F ), wobei: • Q — endliche Menge von Zuständen • q0 ∈ Q — Startzustand • F ⊆ Q — Menge der (akzeptierenden oder) Endzustände • δ ⊆ Q × (Σ ∪ {λ}) × Q — Übergangsrelation Graphische Darstellung: Zustand q ∈ Q bzw. (p, α, q) ∈ δ q Endzustand q ∈ F bzw. Startzustand q0 p α q bzw. b λ a λ Beispiel 2.2. c a b d Prof. Dr. W. Vogler Universität Augsburg Mod. und Analyse techn. Systeme 2 ENDLICHE AUTOMATEN 7 Ein endlicher Automat ist also ein Kanten-beschrifteter gerichteter Graph mit ausgezeichneten Ecken; die Kanten / Pfeile werden als Tripel angegeben mit der Beschriftung in der Mitte. Es kann zwischen zwei Ecken mehrere („parallele“) Kanten mit verschiedenen Beschriftungen geben – meist malt man nur eine Kante und trennt die Beschriftungen durch ein Komma. Die Sprache L(A) ist die Menge der Beschriftungen von Pfaden von q0 zu einem Endzustand. Auf diesem Pfad dürfen weitere Endzustände liegen; z.B. abda ∈ L(A). Definition 2.3. Zum endlichen Automaten A sei δ ∗ ⊆ Q × Σ∗ × Q die kleinste 3-stellige Relation mit i) ∀p ∈ Q: (p, λ, p) ∈ δ ∗ ii) ∀p, q, q ′ ∈ Q, v ∈ Σ∗ , α ∈ Σ ∪ {λ} : (p, v, q ′ ) ∈ δ ∗ , (q ′ , α, q) ∈ δ =⇒ (p, vα, q) ∈ δ ∗ Also: (p, v, q) ∈ δ ∗ = b A kann v von p nach q lesen. Die akzeptierte (erkannte) Sprache eines endlichen Automaten A ist: L(A) = {w ∈ Σ∗ | ∃q ∈ F mit (q0 , w, q) ∈ δ ∗ } = {w1 · · · wn ∈ Σ∗ | n ≥ 0; ∃p0 = q0 , p1 , . . . , pn : pn ∈ F und ∀i = 1, . . . , n : wi ∈ Σ ∪ {λ} und (pi−1 , wi , pi ) ∈ δ (bzw. (p0 , w1 , p1 ), . . . , (pn−1 , wn , pn ) ∈ δ)} Solche Sprachen heißen regulär. Endliche Automaten A1 , A2 heißen äquivalent, wenn L(A1 ) = L(A2 ). 2 Ist speziell q0 ∈ F , so kann man oben n = 0 wählen und erhält λ ∈ L(A). Im obigen Beispiel gibt es . . . mit ab beschriftete Pfade von q0 aus, von denen nur einer in F endet. Nach 2.3 akzeptiert der Automat ab, d.h. er „rät“ richtig – im Gegensatz zu real existierenden Maschinen, die im Zweifel alles falsch machen; angelischer vs. dämonischer Nichtdeterminismus. Die Umsetzung in ein reales Programm zur Spracherkennung ist also nicht offensichtlich. a a b b b Abbildung 3: Beispiel 2.4. Für A aus Abb. 3: Der dritte Zustand (als Startzustand) charakterisiert die Wörter Der zweite Zustand charakterisiert die Wörter L(A) = . Oder: Zweiter Zustand weiß: bisher Dritter Zustand weiß: bisher Vierter Zustand weiß: bisher Beispiel 2.5. EA für {w ∈ {a, b}∗ | |w|b ist gerade}. Prof. Dr. W. Vogler Universität Augsburg Mod. und Analyse techn. Systeme 2 ENDLICHE AUTOMATEN 8 Als ersten Schritt zu einem „realistischeren“ Automatentyp zeigen wir, daß Automaten ohne spontane Übergänge nicht weniger können. Definition 2.6. Eine endlicher Automat heißt buchstabierend, wenn δ ⊆ Q × Σ × Q. Satz 2.7. Zu jedem endlichen Automaten A existiert effektiv ein äquivalenter buchstabierender endlicher Automat A′ . Hier bedeutet „effektiv“, dass ein Verfahren angegeben wird, das A′ (hier: aus A) konstruiert. Beweis. Wir müssen lediglich die λ–Kanten eliminieren: Wir setzen R(p) = {q ∈ Q | (p, λ, q) ∈ δ ∗ }. Dann sei • Q′ = Q, • q0′ = q0 , • δ ′ = {(p, a, q) ∈ Q × Σ × Q | ∃q ′ ∈ R(p) : (q ′ , a, q) ∈ δ} und • F ′ = {p ∈ Q | R(p) ∩ F ̸= ∅}. λ λ a a a a λ λ 2 Prof. Dr. W. Vogler Universität Augsburg Mod. und Analyse techn. Systeme 2 ENDLICHE AUTOMATEN 2.2 9 Pumping–Lemma für reguläre Sprachen oder: Das uvw–Theorem Um zu zeigen, daß eine Sprache regulär ist, muß man lediglich einen entsprechenden EA angeben. Wie aber zeigt man, daß eine Sprache nicht regulär ist? Hier ein wichtiges Hilfsmittel. Satz 2.8. Sei L regulär. Dann existiert ein n ∈ N, so daß es für alle z ∈ L mit |z| ≥ n eine Zerlegung z = uvw gibt, für die gilt: |uv| ≤ n, |v| ≥ 1 und ∀i ≥ 0 : uv i w ∈ L Beweis. Sei A ein buchstabierender endlicher Automat mit L = L(A). Wähle n = |Q|. Sei z = a1 · · · am ∈ L; m ≥ n, ai ∈ Σ. Dann in A: (q0 , a1 , q1 ), (q1 , a2 , q2 ), . . . , (qm−1 , am , qm ) ∈ δ und qm ∈ F . Nach Wahl von n tritt ein Zustand in der Folge q0 , . . . , qm – ja sogar in q0 , . . . , qn mehrfach auf, d.h. ∃0 ≤ j < k ≤ n mit qj = qk . Wir setzen u = a1 · · · aj , v = aj+1 . . . ak , w = ak+1 . . . am . Dann gilt |uv| = k ≤ n; |v| = k − j ≥ 1. Wir können von q0 aus u lesen und qj erreichen, dann beliebig oft v und qj = qk erreichen (auch 0–mal!), schließlich w und einen Endzustand erreichen; also gilt: ∀i ≥ 0 : uv i w ∈ L. 2 Der Satz gibt nur eine Folgerung, aber keine Charakterisierung für reguläre Sprachen an. Aus der Folgerung kann man schließen, daß reguläre Sprachen in einem gewisse Sinn ein lineares Wachstum haben, also nicht immer größer werdende Lücken; vgl. 2.10. Aber eigentlich ist die Folgerung für sich genommen nicht besonders interessant. Anwendung: Zeigen, daß L die Folgerung verletzt und daher nicht regulär sein kann. Beispiel 2.9. Das klassische Beispiel: L = {am bm | m ≥ 0} ist nicht regulär. Beweis. Annahme: L ist regulär. Dann gibt es ein n wie in 2.8. (Wir kennen n nicht, eventuell ist n sehr groß, abhängig von n dürfen wir jetzt aber ein beliebiges z ∈ L wählen.) Sei z = an bn ; dann gibt es uvw wie in 2.8. (Wir kennen uvw nicht, wir müssen in jedem Fall zum Widerspruch kommen.) Da |uv| ≤ n gilt uv = aj , j ≤ n, ferner ist v = ak , k ≥ 1. Für i = 0 ergibt 2.8: aj−k an−j bn = n−k a bn ∈ L mit n − k ̸= n. Widerspruch! (Wir haben gezeigt, dass ∀n ∃z ∀z = uvw gilt: ¬ |uv| ≤ n ∨ ¬ |v| ≥ 1 ∨ ¬∀i ≥ 0 : uv i w ∈ L bzw. |uv| ≤ n ∧ |v| ≥ 1 =⇒ ¬∀i ≥ 0 : uv i w ∈ L. — Um zu zeigen, dass ∀n∃k : n < k, gibt man einfach k = n + 1 an; analog haben wir z = an bn angegeben.) 2 Schlussfolgerung: • Endliche Automaten können „nicht zählen“. • Obiges L gehört zur Klasse der kontextfreien Sprachen; also ist nicht jede kontextfreie Sprache regulär. { 2 } Beispiel 2.10. L = am | m ≥ 0 ist nicht regulär. (Hat immer größere Lücken.) Beweis. Annahme: L ist regulär. Dann gibt es ein n wie in 2.8. (Wir dürfen wieder ein beliebiges, langes z ∈ L wählen.) 2 Sei z = an ; dann gibt es uvw wie in 2.8. (Wir kennen uvw nicht, wir müssen in jedem Fall zum Widerspruch kommen.) Prof. Dr. W. Vogler Universität Augsburg Mod. und Analyse techn. Systeme 2 ENDLICHE AUTOMATEN 10 Also ist uv 2 w ∈ L und wegen 1 ≤ |v| ≤ |uv| ≤ n gilt n2 = |uvw| < uv 2 w ≤ n2 + n < n2 + 2n + 1 = (n + 1)2 Also ist uv 2 w keine Quadratzahl – Widerspruch! 2 Prof. Dr. W. Vogler Universität Augsburg Mod. und Analyse techn. Systeme 2 ENDLICHE AUTOMATEN 2.3 11 Deterministische Automaten Realistische Maschinen/Programme raten nicht einfach richtig; wir geben jetzt eine realistische Automatenvariante, die man direkt in ein Programm übertragen kann. Definition 2.11. Ein buchstabierender endlicher Automat heißt deterministisch (ein DEA), wenn δ eine partielle Funktion Q × Σ 99K Q ist, d.h. wenn ∀q ∈ Q, a ∈ Σ höchstens ein Folgezustand q ′ ∈ Q mit (q, a, q ′ ) ∈ δ existiert. Ein DEA heißt vollständig, wenn δ eine (total definierte!) Funktion ist. Beispiel 2.12. Der endliche Automat in Abbildung 3 ist deterministisch, aber nicht vollständig. Kann ein DEA A „v von p nach q lesen“, so ist q eindeutig. Also ist δ ∗ eine partielle Funktion Q × Σ∗ 99K Q. Ein deterministischer endlicher Automat läßt sich leicht in ein Programm zur Worterkennung umwandeln; dies benötigt die Tabelle δ, den jeweils aktuellen Zustand (zunächst q0 ), das gerade gelesene Zeichen und F , also konstanten Platzbedarf; jedes Zeichen wird in konstanter Zeit verarbeitet, das Wort also in linearer Zeit gelesen (gemessen an der Wortlänge). Satz 2.13 (Hauptsatz über endliche Automaten). Zu jeder regulären Sprache L gibt es effektiv einen vollständigen (und daher deterministischen) endlichen Automaten A mit L(A) = L. Beweis. Potenzautomatenkonstruktion von Myhill : Nach 2.7 sei A′ ein buchstabierender endlicher Automat mit L(A′ ) = L. Idee: A merkt sich in jedem seiner Zustände alle Zustände von A′ , in die A′ beim Lesen einer gegebenen Eingabe geraten kann. Also: Q := P(Q′ ), q0 = {q0′ } , δ(P, a) = {q ∈ Q′ | ∃p ∈ P mit (p, a, q) ∈ δ ′ } Idee: Nach dem „bisher gelesenen v“ kann A′ in jedem p ∈ P sein; ist (p, a, q) ∈ δ ′ , kann A′ nach va in q sein. Offenbar ist A deterministisch und sogar vollständig. F = {P ⊆ Q′ | P ∩ F ′ ̸= ∅}. Idee: Ist A im „Superzustand“ P ∈ F , könnte A′ in p ∈ P ∩ F ′ sein und akzeptieren. Um zu zeigen, daß L(A) = L(A′ ), zeigen wir durch Induktion über |w|: { } (∗) (q0 , w, P ) ∈ δ ∗ ⇐⇒ P = q ∈ Q′ | (q0′ , w, q) ∈ δ ′∗ Variante 1: Induktionsanfang: |w| = 0, d.h. w = λ : (q0 , λ, P ) ∈ δ ∗ ⇐⇒ P = q0 = {q0′ } = {q ∈ Q′ | (q0′ , λ, q) ∈ δ ′∗ } rend!) (A und A′ sind buchstabie- Induktionsschritt: Sei w ∈ Σ∗ und a ∈ Σ, wobei w nach Ind.ann. (∗) erfüllt: (q0 , wa, P ) ∈ δ ∗ Def.δ ∗ ⇐⇒ (q0 , w, P ′ ) ∈ δ ∗ ∧ (P ′ , a, P ) ∈ δ (A buchst.) ⇐⇒ IAnn P ′ = {p ∈ Q′ | (q0′ , w, p) ∈ δ ′∗ } ∧ (P ′ , a, P ) ∈ δ ⇐⇒ ⇐⇒ Def.δ P ′ = . . . ∧ P = {q ∈ Q′ | ∃p ∈ P ′ : (p, a, q) ∈ δ ′ } P = {q ∈ Q′ | ∃p ∈ Q′ : (q0′ , w, p) ∈ δ ′∗ ∧ (p, a, q) ∈ δ ′ } ⇐⇒ P = {q ∈ Q′ | (q0′ , wa, q) ∈ δ ′∗ } (A′ buchst.) Def.δ ′∗ Prof. Dr. W. Vogler Universität Augsburg Mod. und Analyse techn. Systeme 2 ENDLICHE AUTOMATEN 12 { } (∗) δ ∗ (q0 , w) = q ∈ Q′ | (q0′ , w, q) ∈ δ ′∗ Variante 2: Induktionsanfang: |w| = 0, d.h. w = λ : δ ∗ (q0 , λ) = q0 = {q0′ } = {q ∈ Q′ | (q0′ , λ, q) ∈ δ ′∗ } (A und A′ sind buchstabierend!) Induktionsschritt: Sei w ∈ Σ∗ und a ∈ Σ, wobei w nach Ind.ann. (∗) erfüllt: δ ∗ (q0 , wa) Def.δ ∗ δ(δ ∗ (q0 , w), a) = δ({p ∈ Q′ | (q0′ , w, p) ∈ δ ′∗ } , a) Def.δ {q ∈ Q′ | ∃p ∈ Q′ : (q0′ , w, p) ∈ δ ′∗ ∧ (p, a, q) ∈ δ ′ } (∗) = = Def.δ ′∗ {q ∈ Q′ | (q0′ , wa, q) ∈ δ ′∗ } = Nun gilt für alle w ∈ Varianten 2 Σ∗ : (∗) w ∈ L(A) ⇐⇒ δ ∗ (q0 , w) ∈ F ⇐⇒ { } q ∈ Q′ | (q0′ , w, q) ∈ δ ′∗ ∩ F ′ ̸= ∅ Def. F (q0′ , w, q) ′ ⇐⇒ ∃q ∈ F mit ∈ δ ′∗ ⇐⇒ w ∈ L(A′ ) 2 a b a 1 λ A' c 7 6 2 a 3 4 a Beispiel 2.14. 8 b c 5 a a 1 b X 2 buchstabierend a a 3 c 7 6 a 4 8 b c 5 Da A exponentiell viele Zustände im Vergleich zu A′ haben kann, wollen wir im letzten, entscheidenden Schritt immer nur den erreichbaren Teil von A erzeugen; dabei kann hier Zustand 3 keine Rolle spielen. a a 1 b,c a,b,c {} a 4,6 c 2 b a,b 7,8 a c b,c A 2,5 b,c Fangzustand Der Fangzustand hat nur einlaufende Kanten, und insbesondere eine Schlinge für jedes Zeichen. Prof. Dr. W. Vogler Universität Augsburg Mod. und Analyse techn. Systeme 2 ENDLICHE AUTOMATEN 13 Wie macht man einen deterministischen Automaten vollständig? Prof. Dr. W. Vogler Universität Augsburg Mod. und Analyse techn. Systeme 2 ENDLICHE AUTOMATEN 2.4 14 Abschlußeigenschaften, Entscheidbarkeitsprobleme und Simulation Abschlußeigenschaften können nützlich sein um zu begründen, warum eine Sprache regulär ist (s. Beispiel 2.17), oder auch warum sie nicht regulär ist: Ist L1 regulär, L1 ∪ L2 aber nicht, so kann nach dem folgenden Satz auch L2 nicht regulär sein. Auch werden sich Abschlußeigenschaften im nächsten Abschnitt als sehr nützlich erweisen. Satz 2.15. Seien E ⊆ Σ∗ endlich und L1 , L2 ⊆ Σ∗ regulär. Dann sind (effektiv) regulär: i) E ii) L1 ∪ L2 iii) L1 · L2 iv) L∗1 Beweis. Nach Definition 2.3 existieren A1 , A2 zu L1 , L2 . i) E = {w1 , . . . , wn } ist regulär wegen {S → w1 , . . . , S → wn }. ii) Vereinige A1 , A2 disjunkt; füge neuen Startzustand q0 und λ-Kanten zu q01 und q02 hinzu. iii) Vereinige A1 , A2 disjunkt; setze iv) Nach derselben Idee könnten wir Dann fehlt aber evtl. Aber: Also: 2 Nach Definition sind auch die Sprachen ii)–iv) regulär. Man sagt: Die regulären Sprachen sind effektiv abgeschlossen unter (endlicher) Vereinigung, Konkatenation und Sternbildung. Satz 2.16. i) Die regulären Sprachen sind effektiv unter Komplementbildung abgeschlossen, d.h. ist L ⊆ Σ∗ regulär, so auch L := Σ∗ − L. ii) Die regulären Sprachen sind effektiv unter (endlichem) Durchschnitt abgeschlossen. Beweis. i) Sei nach Satz 2.13 A ein vollständiger endlicher Automat mit L(A) = L. Transformiere A in A′ mit F ′ = Q − F , man vertauscht also End- und Nicht-Endzustände. Da δ ∗ eine Funktion ist, gilt w ∈ L ⇐⇒ δ ∗ (q0 , w) ∈ F ⇐⇒ δ ′∗ (q0′ , w) ∈ / F ′ ⇐⇒ w ∈ / L(A′ ). ii) Folgt aus i) mit 2.15 ii) und L1 ∩ L2 = L1 ∪ L2 = Σ∗ − ((Σ∗ − L1 ) ∪ (Σ∗ − L2 )). 2 Prof. Dr. W. Vogler Universität Augsburg Mod. und Analyse techn. Systeme 2 ENDLICHE AUTOMATEN 15 Beispiel 2.17. i) Es läßt sich leicht ein EA (nicht so leicht aber ein DEA) finden zu L = {w ∈ {a, b}∗ | w enthält das zusammenhängende Teilwort aaba}. Daher ist auch L regulär; wie ein EA zu L aussieht, ist aber nicht so offensichtlich. ii) L = {w ∈ {a, b}∗ | |w|a = |w|b } ist nicht regulär; sonst wäre auch L ∩ {a}∗ {b}∗ = {an bn | n ≥ 0} regulär. Satz 2.18. Es ist entscheidbar, ob für i) einen gegebenen endlichen Automaten A L(A) leer bzw. = Σ∗ ist; ii) zwei gegebene endliche Automaten A1 , A2 mit demselben Alphabet Σ gilt: L(A1 ) ⊆ L(A2 ), bzw. A1 und A2 sind äquivalent. Beweis. i) Leerheit: Mit einem effizienten Graphenalgorithmus (Tiefen- oder Breitensuche, vgl. Informatik III) ermittelt man, ob es einen Pfad vom Start- zu einem Endzustand gibt. = Σ∗ : Wir berechnen den „Komplementautomaten“ wie im Beweis von Satz 2.16 i) – das ist aufwendig!! – und prüfen ihn auf Leerheit der Sprache. ii) Sind A1 , A2 gegeben, so können wir nach obigen Ergebnissen einen endlichen Automaten A3 konstruieren, mit L(A3 ) = L(A1 ) ∩ (Σ∗ − L(A2 )). Es ist L(A3 ) = ∅ genau dann, wenn L(A1 ) ⊆ L(A2 ); mit i) ist dies entscheidbar und damit auch L(A1 ) = L(A2 ) entscheidbar. 2 Wir wollen noch eine Methode behandeln, mit der man die Frage angehen kann, ob L(A1 ) ⊆ L(A2 ). Diese Methode ist vor allem auch für Transitionssysteme geeignet; ein Transitionssystem entspricht weitgehend einem endlichen Automaten, es kann aber auch unendlich sein; dann sind die Verfahren aus obigem Beweis natürlich nicht anwendbar. Außerdem hat es nur Endzustände. (Deswegen muß man einfach kein F angeben.) Sind Transitionssysteme systematisch gegeben, kann man evtl. auch im unendlichen Fall eine Simulation (s.u.) finden und damit die Sprachinklusion nachweisen. Sprachinklusion läßt sich so interpretieren, daß System A1 nur Verhalten zeigt, das auch bei A2 erlaubt ist, so daß wir A1 als Implementierung der Spezifikation A2 ansehen können, s.u. Definition 2.19. Eine Simulation für endliche Automaten A1 und A2 mit demselben Alphabet Σ ist eine Relation S ⊆ Q1 × Q2 mit folgenden Eigenschaften: i) (q01 , q02 ) ∈ S ii) Ist (q1 , q2 ) ∈ S und (q1 , α, p1 ) ∈ δ1 (also α ∈ Σ∪{λ}), so gibt es p2 ∈ Q2 mit (q2 , α, p2 ) ∈ δ2∗ (!) und (p1 , p2 ) ∈ S. iii) Ist (q1 , q2 ) ∈ S und q1 ∈ F1 , so auch q2 ∈ F2 . (kann bei Transitionssystemen wegfallen) Satz 2.20. Ist S eine Simulation für endliche Automaten A1 und A2 , so gilt L(A1 ) ⊆ L(A2 ). Prof. Dr. W. Vogler Universität Augsburg Mod. und Analyse techn. Systeme 2 ENDLICHE AUTOMATEN 16 Beweis. Ist w ∈ L(A1 ), so gibt es (q01 , α1 , q11 ), (q11 , α2 , q21 ), . . . , (q(m−1) 1 , αm , qm1 ) ∈ δ1 mit αi ∈ Σ ∪ {λ}, w = α1 · · · αm und qm1 ∈ F1 . Nach Definition 2.19 i) ist (q01 , q02 ) ∈ S; also gibt es mit wiederholter Anwendung von ii) (q02 , α1 , q12 ), (q12 , α2 , q22 ), . . . , (q(m−1) 2 , αm , qm2 ) ∈ δ2∗ – also (q02 , w, qm2 ) ∈ δ2∗ – mit (qm1 , qm2 ) ∈ S; nach iii) ist also auch qm2 ein Endzustand, und damit w ∈ L(A2 ). 2 1 A1 a 2 a 1 A'1 a λ 23 3 c b 4 1 A2 5 b 4 2 c λ b 3 4 c 5 c b 5 1 A'2 4 5 Abbildung 4: Abbildung 4 zeigt zwei sprachäquivalente Automaten A1 und A2 ; eine Simulation für diese ist S = {(1, 1), (2, 23), (3, 23), (4, 4), (5, 5)}. Für A2 und A1 gibt es aber keine Simulation, denn 23 hat eine b- und eine c-Kante, für einen simulierenden Zustand müßte das auch gelten – aber einen solchen Zustand hat A1 nicht. Ähnlich können sich A′1 und A′2 aber gegenseitig simulieren. Die Methode ist also korrekt, aber nicht vollständig. Das wesentliche Problem dabei ist der Nichtdeterminismus. Weiter beschränken wir A1 in Satz 2.21 auf den Fall, daß von jedem Zustand ein Weg zu einem Endzustand führt; das ist keine wesentliche Einschränkung, da andere Zustände für die Sprache von A1 irrelevant sind. Prof. Dr. W. Vogler Universität Augsburg Mod. und Analyse techn. Systeme 2 ENDLICHE AUTOMATEN 17 Satz 2.21. Seien A1 und A2 endliche Automaten mit demselben Alphabet Σ; in A1 gebe es von jedem Zustand einen Weg zu einem Endzustand, und A2 sei deterministisch. Ist L(A1 ) ⊆ L(A2 ), so gibt es eine Simulation S für A1 und A2 . Beweis. Wir setzen S = {(q1 , q2 ) | ∃w ∈ Σ∗ : (q01 , w, q1 ) ∈ δ1∗ ∧ (q02 , w, q2 ) ∈ δ2∗ }. Beachte, daß q2 durch w eindeutig bestimmt ist, da A2 deterministisch ist. Für den Fall w = λ ergibt sich (q01 , q02 ) ∈ S. Ist (q1 , q2 ) ∈ S und q1 ∈ F1 , so ist w ∈ L(A1 ), also auch w ∈ L(A2 ), und wegen der Eindeutigkeit von q2 muß q2 ∈ F2 sein. Sei nun (q1 , q2 ) ∈ S wegen w und (q1 , α, p1 ) ∈ δ1 ; nach Voraussetzung gibt es v mit (p1 , v, p) ∈ δ1∗ und p ∈ F1 , d.h. wαv ∈ L(A1 ). Da nun auch wαv ∈ L(A2 ), gibt es einen wαv-beschrifteten Weg von q02 zu einem Endzustand, der wegen der Eindeutigkeit über q2 und ein p2 führen muß mit (q2 , α, p2 ) ∈ δ2∗ . (Entweder ist α ∈ Σ und (q2 , α, p2 ) ∈ δ2 oder α = λ und q2 = p2 .) Jetzt ist (q01 , wα, p1 ) ∈ δ1∗ ∧ (q02 , wα, p2 ) ∈ δ2∗ , also (p1 , p2 ) ∈ S. 2 Prof. Dr. W. Vogler Universität Augsburg Mod. und Analyse techn. Systeme 2 ENDLICHE AUTOMATEN 2.5 18 Induktive Definition von Termen Der nächste Abschnitt verbindet die endlichen Automaten mit einer Term-Darstellung von formalen Sprachen. Dazu befassen wir uns zunächst etwas formaler mit sehr einfachen Termen – auch als Vorbereitung auf die Logik in Kapitel 4 – und geben eine induktive AufbauDefinition: Definition 2.22. Die Menge der (besonders) einfachen Terme SimT ist die (bzgl. ⊆) kleinste Menge mit i) a, b, c, d ∈ SimT ii) Sind v, w ∈ SimT , so auch (v + w) ∈ SimT . iii) Sind v, w ∈ SimT , so auch (v − w) ∈ SimT . Z.B. sind a, (b − c), ((b + c) − (c + a)) ∈ SimT . „kleinste Menge“ bedeutet, dass Wörter nur dann in SimT sind, wenn dies aufgrund der Regeln i)-iii) zwingend ist. Nur nach diesen Regeln aufgebaute Objekte sind einfachen Terme (e.T.), man kann also für jeden e.T. eine Herleitung angeben. Z.B. sind Herleitungen von (b + c) und (c + a), jeweils der Länge 3: • b wg. i), c wg. i) und (b + c) wg. ii). • . Systematisch bekommen wir dann folgende Herleitung von ((b + c) − (c + a)) (es geht aber auch kürzer): b wg. i), c wg. i), (b + c) wg. ii), . Wir erkennen an diesem Beispiel: Jede Herleitung für einen e.T. außer a, b, c und d enthält Herleitungen für die beiden unmittelbaren Teilterme. Definition 2.22 entspricht einer Induktion über die Herleitungslänge: Hier gewinnt man mit i) alle e.T. der Herleitungslänge 1 – es könnte aber mehrere Regeln zu dieser Länge geben; mit ii) und iii) gewinnt man einen e.T. der Herleitungslänge n aus zwei e.T. der Herleitungslänge < n – es gibt hier also mehrere solcher Regeln. Zusammenfassend: Sind alle Objekte mit einer Herleitungslänge m < n bereits definiert, kann man aus ihnen jedes Objekt der Herleitungslänge n mit jeweils einer Regelanwendung definieren. Man kann nun Beweise oder weitere Definitionen für e.T.s mittels Induktion über die Herleitungslänge angeben, wobei es für jede Regel einen Fall gibt. Beschreibt die ursprüngliche Definition den Aufbau von Objekten durch Zusammensetzen wie in unserem Beispiel, spricht man dann von einem induktiven Beweis oder einer induktiven Definition über den Aufbau (hier: eines e.T.) oder von struktureller Induktion (hier: über einen e.T.). Z.B.: Beispiel 2.23. Jeder e.T. hat mindestens so viele ( wie +. Beweis. mit struktureller Induktion: i) a, b, c, d: Beide Anzahlen sind 0. Prof. Dr. W. Vogler Universität Augsburg Mod. und Analyse techn. Systeme 2 ENDLICHE AUTOMATEN 19 ii) (v + w): Anzahl von ( in (v + w) ist die Summe der Anzahlen von ( in v und w plus 1; dies ist nach Ind. mindestens die Summe der Anzahlen von + in v und w plus 1, was gerade die Anzahl von + in (v + w) ist. iii) (v − w): Anzahl von ( in (v − w) ist die Summe der Anzahlen von ( in v und w plus 1; dies ist nach Ind. größer als die Summe der Anzahlen von + in v und w, was gerade die Anzahl von + in (v − w) ist. 2 Das Vorgehen im Beweis entspricht dem folgenden Induktionsprinzip der Noetherschen Induktion (well-founded induction), vgl. Diskrete Strukturen für Informatiker, wenn man speziell unter A(n) versteht, dass alle e.T. der Herleitungslänge n mindestens so viele ( wie + haben. Proposition 2.24. Sei A(n) eine Aussage über die natürliche Zahl n. Angenommen, es gilt für alle n ∈ N das folgende: Wenn A(m) für alle m mit m < n gilt, so gilt auch A(n). Dann gilt A(n) für alle n ∈ N. Statt < auf N gilt dies Prinzip für alle Noetherschen Halbordnungen < auf beliebigen Mengen, d.h. wenn es keine unendlichen absteigenden Ketten bzgl. < gibt. Wir haben hier eine stärkere Ind.vor., was den Beweis der Ind.beh. erleichtern kann, und keine Verankerung. Warum dürfen wir so verfahren? Prof. Dr. W. Vogler Universität Augsburg Mod. und Analyse techn. Systeme 2 ENDLICHE AUTOMATEN 2.6 20 Rationale Ausdrücke und der Satz von Kleene Definition 2.25. Die Menge der rationalen Ausdrücke über Σ, Rat(Σ∗ ), ist induktiv definiert durch: i) ∅, λ, a für a ∈ Σ sind rationale Ausdrücke und bezeichnen ∅, {λ}, {a}. ii) Bezeichnen r, s ∈ Rat(Σ∗ ) die Mengen R und S, so sind (r + s), (rs) und r∗ rationale Ausdrücke und bezeichnen R ∪ S, RS und R∗ . L ⊆ Σ∗ heißt rational, wenn L durch einen rationalen Ausdruck r bezeichnet wird. Wir schreiben L = L(r) (falls diese Unterscheidung notwendig ist); z.B. {ab, ac} = L(a(b + c)). r+ ist Abkürzung für r · r∗ , also L(r+ ) = L(r)+ . Bemerkung: i) Rat(Σ∗ ) wird erzeugt durch S −→ ∅ | λ | a | (S + S) | (SS) | S ∗ ii) ∗ ∀a ∈ Σ bindet stärker als · bindet stärker als + =⇒ Klammern sparen. Beispiel 2.26. Zu (aa)∗ a + a(bb)∗ Ableitung mit reduzierten Klammern S =⇒ S + S =⇒ SS + S =⇒ S ∗ S + S =⇒ (SS)∗ S + S (hier darf man die Klammern nicht weglassen) =⇒ (aS)∗ S + S =⇒ · · · L((aa)∗ a + a(bb)∗ ) = Satz 2.27 (Satz von Kleene). Eine Sprache L ist genau dann rational, wenn sie regulär ist. (Daher spricht man auch oft von regulären Ausdrücken.) Beweis(„=⇒“). Strukturelle Induktion gemäß der Aufbau-Definition der rationalen Ausdrücke (Definition 2.25). i) Für r = ∅, r = λ, r = a ist L(r) regulär nach 2.15. ii) Seien r, s ∈ Rat(Σ∗ ); Annahme: L(r) und L(s) sind regulär. a) L(r +s) = L(r)∪L(s) ist regulär nach 2.15 ii) und Annahme, dass L(r) und L(s) regulär sind. b) L(rs) = L(r)L(s) nach 2.15 iii) und Annahme regulär. c) L(r∗ ) = L(r)∗ nach 2.15 iv) und Annahme regulär. 2 Beweis(„⇐=“). Sei A ein endlicher Automat mit L(A) = L; o.E. Q = {1, . . . , n}. Wir definieren: Lkij = {u ∈ Σ∗ | ∃ einen mit u beschrifteten Pfad in A, der bei i beginnt, bei j endet und im Inneren nur Zustände ≤ k benutzt} Prof. Dr. W. Vogler Universität Augsburg Mod. und Analyse techn. Systeme 2 ENDLICHE AUTOMATEN 21 ∪ Sei q0 = 1. Dann ist L(A) = j∈F Ln1j ; daher genügt es zu zeigen, daß Lnij rational ist. (Dann kann man die Summe der passenden rationalen Ausdrücke bilden.) Um eine Induktion zu ermöglichen, zeigen wir mehr: Lkij ist rational für k = 0, . . . , n. k = 0: L0ij = {u ∈ Σ∗ | (i, u, j) ∈ δ} (bzw. . . . ∪ {λ}, falls i = j) ist endlich, also rational. ( )∗ k−1 k−1 1 ≤ k ≤ n: Lkij = Lk−1 L Lk−1 ist rational nach Induktionsannahme mit ik kk kj ∪ Lij einem rationalen Ausdruck der Form 2 Meistens unterscheidet man nicht zwischen r und L(r), spricht also z.B. von der Sprache (aa)∗ a + a(bb)∗ . In diesem Abschnitt wollen wir die Unterscheidung aber beibehalten. Mit der Sichtweise, daß Elemente a von Σ Aktionen sind (die ein System ausführen soll), sind rationale Ausdrücke abstrakte Programme (von kontextfreien Grammatiken erzeugt). a = b statement = b „führe a aus“ + = b if–then–else = b Auswahl (von if-Bedingung abstrahiert) =⇒ Prozeß–Algebra · = b ; = b Hintereinanderausführung ∗ = b while–do = b beliebige Wiederholung Jeder rationale Ausdruck bezeichnet eine Menge von möglichen Aktionsfolgen (= Sprache); dies ist eine denotationelle Semantik. Jeder rationale Ausdruck kann in einen endlichen Automaten übersetzt werden (vgl. 2.27 bzw. 2.15), eine Maschine, die die gewünschten Aktionsfolgen ausführt; dies ist eine operationale Semantik. (übliche Programmiersprache: denotationell ∼ Ein–/Ausgabefunktion; operational ∼ Maschinenmodell – beschreibt die Programmabarbeitung) Rationale Ausdrücke entsprechen sequentiellen Programmen; für parallele (bzw. nebenläufige) Programme wurden als Erweiterung der rationale Ausdrücke Prozeßalgebren eingeführt. In diesem Sinn kann man das Programm r = (abac)∗ als Implementierung der Spezifikation s = (a(b + c))∗ auffassen, da alle (endlichen) Abläufe von r (d.h. Wörter aus L(r)) auch von s erlaubt werden (Wörter in L(s) sind). Damit wird von Automaten auf rationale Ausdrücke übertragen, was schon oben gesagt wurde: Sprachinklusion lässt sich so interpretieren, dass System A1 nur Verhalten zeigt, das auch bei A2 erlaubt ist, so dass wir A1 als Implementierung der Spezifikation A2 ansehen können. Definition 2.28. Für rationale Ausdrücke r und s ist r eine Implementierung der Spezifikation s, in Zeichen: r ⊑ s, wenn L(r) ⊆ L(s). Man nennt r auch eine Verfeinerung (verfeinerte Spezifikation). Während ⊆ eine Halbordnung ist, ist ⊑ nur eine Präordnung, also nicht . . . . . . . Z.B. gilt für r = ab + ac und s = a(b + c), dass r ⊑ s und s ⊑ r; r und s sind aber nicht identisch. Bemerkung: Wenn man eine Implementierungsrelation als „wird simuliert von“ definiert (und dazu rationale Ausdrücke mit den zugehörigen Automaten gleichsetzt), so ist r Implementierung von s (vgl. A1 und A2 in Abb. 4), nicht aber umgekehrt. Simulation stellt also strengere Anforderungen an Implementierungen: s entscheidet später zwischen b und c als r, das ist bei Simulation nicht zulässig. Für Implementierungsrelationen wie ⊑ ist es wichtig, dass sie ein kompositionales Vorgehen beim Systementwurf unterstützen: Hat man eine Spezifikation s + t und weiß, dass r ⊑ s, so Prof. Dr. W. Vogler Universität Augsburg Mod. und Analyse techn. Systeme 2 ENDLICHE AUTOMATEN 22 erwartet man, dass man die Komponente s durch r ersetzen darf und damit eine Verfeinerung erhält. Es soll also aus r ⊑ s folgen, dass r + t ⊑ s + t. Damit sind ⊑ und + verträglich wie man es von ≤ und + bei reellen Zahlen kennt. Formal gesagt, soll die Präordnung ⊑ eine Präkongruenz sein. Definition 2.29. Eine Präordnung ⊑ ist eine Präkongruenz für eine zweistellig Operation ◦ bzw. eine einstellige Operation f , wenn für alle r, s und t aus r ⊑ s folgt, dass r ◦ t ⊑ s ◦ t und t ◦ r ⊑ t ◦ s bzw. f (r) ⊑ f (s). Satz 2.30. Auf den rationalen Ausdrücken ist ⊑ eine Präkongruenz für die relevanten Operationen, d.h. für alle rationalen Ausdrücke r, s und t folgt aus r ⊑ s: i) r + t ⊑ s + t und t + r ⊑ t + s ii) rt ⊑ st und tr ⊑ ts iii) r∗ ⊑ s∗ Beweis. Wir beschränken uns auf den schwierigsten Fall iii). Sei also r ⊑ s. Dann gilt für jedes n: L(r)n = {w1 . . . wn | wi ∈ L(r), i = 1, . . . , n}, welches nach Voraussetzung enthalten ist in {w1 . . . wn | wi ∈ L(s), i = 1, . . . , n} = L(s)n . ∪ ∪ Damit erhalten wir L(r∗ ) = L(r)∗ = n≥0 L(r)n ⊆ n≥0 L(s)n = L(s)∗ = L(s∗ ). 2 Prof. Dr. W. Vogler Universität Augsburg Mod. und Analyse techn. Systeme 2 ENDLICHE AUTOMATEN 2.7 23 Lexikalische Analyse — (F)LEX Erste Phase der Compilation; der sogenannte Lexer zerlegt das C–/. . .–Programm in lexikalische Einheiten (Symbole, tokens) wie: • Bezeichner • Zahlen • reservierte Wörter (for, if, then,. . . ) • Kommentare Diese Mengen von Symbolen sind jeweils regulär, der Lexer ist also im wesentlichen ein (möglichst kleiner) vollständiger Automat — bzw. eine Kombination von Automaten (je Symbolart einer) bzw. ein Automat mit getypten Endzuständen. Dabei versucht der Lexer ein Symbol zu erkennen und führt dann ggf. eine vorgeschriebene Aktion aus; danach wiederholt er dies Vorgehen, bis die Eingabe abgearbeitet ist. Erzeugen von Lexern unter UNIX: (F)LEX. (F)LEX erzeugt aus einer Lex-Spezifikation ein C–Programm lex.yy.c, dessen Funktion yylex eine lexikalische Analyse durchführt. Lex–Spezifikation: %{evtl. selbstgeschriebener Anfang des C–Programms, z.B. #include <stdio.h> %} %% (Regel–Sektion): (Muster Aktion)∗ %% selbstgeschriebenes Ende, z.B.: main() {yylex(); } Muster (pattern) sind reguläre Ausdrücke (müssen am Zeilenanfang stehen), Aktionen sind C–Statements (dürfen nicht am Zeilenanfang stehen); z.B.: [\t␣]+ [a-zA-Z][a-zA-Z0-9]* [^\t␣\n]+ .|\n /* Leerzeichen ignorieren*/; {printf ("%s ist Bezeichner\n", yytext);} {printf ("%s ist kein Bezeichner\n",yytext);} {ECHO;/*ausgeben*/} Der Lexer liest ein möglichst langes Anfangsstück w der Eingabe, das auf ein Muster paßt nach yytext, führt die zugehörige Aktion aus und wiederholt dies bis zum Ende der Eingabe; paßt w auf mehrere Muster, so wird das erste gewählt. Für a2+␣ passt Muster 2 auf a2 und 3 auf a2+, also wird 3 gewählt; für a2␣ passen Muster 2 und 3 auf a2, also wird 2 gewählt. Prof. Dr. W. Vogler Universität Augsburg Mod. und Analyse techn. Systeme 2 ENDLICHE AUTOMATEN [ ] [\t␣]+ [a-z]* [^az] \n | . 24 schließt Zeichen ein; [\t␣] ist also {TAB, BLANK} eine Folge von Leerzeichen (̸= λ); die zugehörige Aktion ist „;“, also leer. ist {a, b, c, . . . , z}∗ Menge aller Zeichen ∈ / {a, z} newline, Zeilenvorschub Auswahl z.B. steht ([a-d]*(bc|bd)+)|a* für (a + b + c + d)∗ (bc + bd)+ + a∗ paßt auf jedes Zeichen außer \n Nach obiger Regel wird das vierte Muster nur gewählt, wenn die ersten drei nicht passen. Man vermeide Muster (wie ein alleinstehendes [a-z]*), die auf λ passen; sie können zur Nichtterminierung führen, da λ wiederholt ohne Fortschritt erkannt werden kann. Bemerkung: • r? stehr für r + λ. • Steuerzeichen wie z.B. + steht in [ ] für Zeichen +; sonst schreibt man \+ für das Zeichen + (durch \ geschützt). Beschränken wir die Eingabe auf Folgen von Wörtern über {a, b, . . . , z} (getrennt durch ␣), so prüft z.B. der Lexer gemäß folgender Lex-Spezifikation, welche Wörter zu (ab)∗ a passen: %{#include %} %% [\t␣]+ (ab)*a [a-z]+ .|\n %% main() {yylex(); } <stdio.h> /* Leerzeichen ignorieren*/; {printf ("%s ist o.k.\n", yytext);} {printf ("%s ist nicht o.k.\n", yytext);} {ECHO;/*ausgeben*/} Verwendung: Lex–Spezifikation in Datei myspec.l > flex myspec.l > cc lex.yy.c -o mylexer -ll > mylexer Text ^D (Evtl. muß die Option -ll durch -lfl oder mylexer durch ./mylexer ersetzt werden. Evtl. erst return, dann Text mit return abschließen; ggf. wiederholen; Programmende mit ^D.) Ist der Text z.B. abba ababa abac, so liefert mylexer: abba ist nicht ok ababa ist ok abac ist nicht ok Um den Text aus einer Datei eingabe zu lesen, lautet der Aufruf mylexer < eingabe. Prof. Dr. W. Vogler Universität Augsburg Mod. und Analyse techn. Systeme 2 ENDLICHE AUTOMATEN 25 Anstatt nur „ok/nicht ok“ oder Symboltypen auszugeben, wird der Lexer in der Praxis z.B. Bezeichner mit Typinformation in eine Tabelle eintragen. Genaueres zur Syntax und Kooperation mit Compilern: J.R. Levine et al.: Lex & yacc, O’Reilly, 1995. Prof. Dr. W. Vogler Universität Augsburg Mod. und Analyse techn. Systeme 3 MEALY-AUTOMATEN 3 26 Mealy-Automaten Endliche Automaten lesen und untersuchen Zeichenfolgen. Eine andere Sichtweise ist, dass sie Zeichenfolgen erzeugen, wobei die Zeichen als Aktionen oder Signale verstanden werden können; in Endzuständen kann der Automat terminieren, muss aber nicht unbedingt. Werden die Zeichen als Aktionen gesehen, lässt man die Endzustände oft weg und spricht von Transitionssystemen, die auch unendlich sein dürfen; ein solches System kommt zum Stillstand, wenn es einen Zustand ohne ausgehende Kanten erreicht, den man oft als Verklemmung versteht. Mealy-Automaten kombinieren beide Sichtweisen: Deterministisch lesen sie Eingabezeichen und beantworten sie jeweils mit einem Ausgabezeichen. Welche Eingaben kommen, wird von der Umgebung bestimmt; der Automat kümmert sich daher nicht um Akzeptieren oder Terminierung und hat keine Endzustände. Mealy-Automaten eignen sich u.a. zur Modellierung von Schaltkreisen; da Schaltkreise im Allgemeinen mehrere Eingaben und Ausgaben haben, ist hier ein Eingabezeichen ein Tupel, das für jedes Eingabesignal einen Wert festlegt (1 oder 0, + oder −); Ausgabezeichen werden ggf. analog behandelt. Der folgende Mealy-Automat führt eine serielle (auch: sequentielle) Addition durch. Die Eingabe besteht aus zwei Binärzahlen, wobei jeweils die beiden Ziffern einer Stelligkeit von rechts nach links eingegeben werden und die Ziffer derselben Stelligkeit ausgegeben wird (vgl. Kapitel 3). Der Automat muss sich im Zustand merken, ob ein Übertrag aufgelaufen ist. 00 / 1 00 / 0 01 / 1 10 / 1 0 1 11 / 0 01 / 0 10 / 0 11 / 1 Abbildung 5: Definition 3.1. Ein Mealy-Automat (MlA) über dem Eingabealphabet Σ und dem Ausgabealphabet ∆ ist ein Tupel A = (Q, Σ, ∆, δ, γ, q0 ), wobei: • Q— • q0 ∈ Q — • δ — Übergangsfunktion δ • γ — Ausgabefunktion γ Wie bei endlichen Automaten erweitern wir δ zu δ ∗ : Q × Σ∗ → Q und wie folgt analog γ zu γ ∗ : Q × Σ∗ → ∆∗ : • γ ∗ (q, λ) = • γ ∗ (q, wa) = für a ∈ Σ, w ∈ Σ∗ Die Leistung von A ist dann γA : Σ∗ → ∆∗ mit γA (w) = γ ∗ (q0 , w). Prof. Dr. W. Vogler Universität Augsburg Mod. und Analyse techn. Systeme 3 MEALY-AUTOMATEN 27 r s x y Abbildung 6: Mit dieser Definition ist die Leistung des obigen MlA tatsächlich Serienaddition im folgenden Sinn: Entspricht w ∈ ({0, 1}2 )∗ dem Paar (k1 , k2 ) ∈ N2 wie in Kapitel 3, wobei beide Binärdarstellungen mit mindestens einer 0 beginnen, so entspricht γA (w) k1 + k2 . Als nächstes wollen wir den Schaltkreis in Abbildung 6 als MlA modellieren. Dieser Schaltkreis hat Eingänge r und s, den Ausgang x (bzw. x′ s.u.) und ein internes Signal y; neben den üblichen Gattern (hier „oder“ und (dicker) Negationspunkt, die jeweils zusammen ein NOR ergeben) hat dieser Schaltkreis zwei Verzögerungsglieder bzw. Register. Ohne diese kann man den Schaltkreis als asynchronen Schaltkreis mit folgendem Verhalten verstehen. Der Schaltkreis befindet sich in einem stabilen Zustand, z.B. rsxy = 1001; wenn dann die Eingabe auf 01 gesetzt wird, liefert das linke NOR immer noch 0, aber y ändert sich auf 0; erst jetzt ändert sich x auf 1, und der Zustand ist wieder stabil. Um Probleme zu vermeiden, muss hierbei die Umgebung die Eingaben auf 01 halten, bis Stabilisierung eintritt – der Schaltkreis muss im sog. Fundamentalmodus betrieben werden. (Dann realisiert er ein RS-Flip-Flop, s.u.) Solche mehrstufigen Übergänge sind konzeptionell offenbar schwierig. Einfacher sind getaktete Schaltkreise, die in der Praxis vorherrschend sind. Hier puffern die Verzögerungsglieder die Werte von x und y, wobei wir gepufferte und Ausgabe-Signale als lokale Signale bezeichnen. Die Verzögerungsglieder liefern an ihren Ausgängen die alten Werte, auch wenn sich im aktuellen Takt neue Werte für x und y ergeben – die wir mit x′ und y ′ bezeichnen wollen. Da nach „Durchschneiden“ der Verzögerungsglieder ein kombinatorischer Schaltkreis (also ohne Kreise) entsteht – das müssen und wollen wir fordern –, kann man gemäß „Pfeilrichtung“ (d.h. von den Eingaben und den gepufferten Signalen aus) die neuen Werte für alle Drähte in einem Durchgang bestimmen. Dieser Sichtweise wollen wir hier folgen. Der Zustand des Schaltkreises entspricht den Werten der gepufferten Signale x und y. Ist dieser Zustand 01 wie oben und die nächste Eingabe ist wieder 01, so ist x′ y ′ = 00. Ist die darauffolgende Eingabe wieder 01, geht der Schaltkreis nach 10, bei 11 aber bleibt er in 00. Insgesamt bekommen wir folgende Übergangstabelle, wenn wir als Startzustand 00 wählen und die Eingabe 00 verbieten; daraus ergibt sich dann der MlA in Abbildung 7. xy \ rs 00 01 10 01 10 00 10 11 00 00 Prof. Dr. W. Vogler Universität Augsburg Mod. und Analyse techn. Systeme 3 MEALY-AUTOMATEN 28 Abbildung 7: Jetzt wollen wir an mehreren Beispielen den Entwurf eines Schaltkreises mit Mealy-Automaten untersuchen. Das erste Beispiel ist ein T-Flip-Flop; es hat Zustände 0 und 1, mit denen es ein Bit (zunächst 0) speichert – die Ausgabe ist gleich dem neuen Zustand; offenbar entspricht der Zustand hier einem lokalen Signal q, das ein Ausgabesignal ist. Bei Eingabe a = 0 bleibt das Flip-Flop in seinem Zustand, bei Eingabe 1 wechselt es seinen Zustand. Abbildung 8 zeigt den MlA, aus dem wir wieder eine Tabelle gewinnen. Zum Entwurf eines Schaltkreises empfiehlt es sich, die Tupel, die den möglichen Zuständen und Eingaben entsprechen, wie auf der linken Seite einer Wahrheitstafel aufzulisten; dazu muss man die Zustände binär codieren. Die Codierung ist hier schon gegeben; i.A. kann man sie geschickt und weniger geschickt wählen. Auf der rechten Seite stehen die gestrichenen Zustandssignale und die Ausgaben. 1/0 0/0 1 0 0/1 1/1 qa 00 01 10 11 q′ Abbildung 8: Wir erkennen, dass es sich hier einfach um ein . . . handelt. Zur Realisierung mit StandardGattern (hier: AND, OR, NOT) kann man im Zweifel auf die disjunktive Normalform (was ist das?) zurückgreifen und erhält die Gleichung q ′ = . . . . Prof. Dr. W. Vogler Universität Augsburg Mod. und Analyse techn. Systeme 3 MEALY-AUTOMATEN 29 Es gibt also ein OR-Gatter mit Ausgabe q ′ ; diese Ausgabe führen wir über ein Verzögerungsglied zurück zu den Gattern, die q als Eingabe haben, und in diesem Fall auch als Ausgabesignal nach draußen. Dies ergibt folgende Schaltung: Abbildung 9: Im Allgemeinen hat die Tabelle links die Eingaben und die Zustandssignale (die gepuffert werden), rechts die Ausgaben und die (gestrichenen) Zustandssignale – die evtl. mit Ausgaben zusammenfallen können. Analog wollen wir nun einen Schaltkreis entwickeln, der mittels Eingabesignal a eine 0-1Folge erhält und sein Ausgabesignal x genau dann auf 1 setzt, wenn in der 0-1-Folge (inkl. aktuelle Eingabe) der Block von 1en seit der letzten 0 (oder ab Anfang) eine durch 4 teilbare Länge (evtl. 0) hat. Es ergibt sich also bei der Eingabe 1011011111 die Ausgabe 0100100010. pqa 000 001 010 011 100 101 110 111 p′ q ′ x Abbildung 10: Zunächst entwerfen wir einen Mealy-Automaten für das gewünschte Verhalten; dann codieren wir die Zustände geeignet – hier ohne eine ausgefeilte Methode. Zum Entwurf des Schaltkreis stellen wir wieder eine Tabelle auf; vgl. Abbildung 10. Aus der Tabelle lesen wir geeignete Gleichungen ab: • x= • p′ = • q′ = Dies führt auf die Schaltung in Abbildung 11. Abbildung 11: Das nächste Beispiel ist ein RS-Flip-Flop; Zustand und Ausgabe wie beim T-Flip-Flop. Diesmal gibt es zwei Eingabesignale r und s: bei 00 bleibt das RS-Flip-Flop in seinem Zustand, bei 01 wird der Zustand auf 1 (set), bei 10 auf 0 (reset) gesetzt; Eingabe 11 ist verboten. Diesmal ist die Wahrheitstafel unvollständig; die freien Felder können wir nach Bedarf füllen. Z.B. können wir ausnutzen, dass q ′ offenbar fast s ist. Dies führt auf q ′ = Prof. Dr. W. Vogler Universität Augsburg Mod. und Analyse techn. Systeme 3 MEALY-AUTOMATEN 30 Abbildung 12: Eine andere Gleichung ist q ′ = Sind die beiden Booleschen Ausdrücke äquivalent? qrs 000 001 010 011 100 101 110 111 q′ Abbildung 13: Natürlich sind auch MlAen durch ihr endliches Gedächtnis beschränkt; dies wird z.B. durch folgendes konkretes Ergebnis demonstriert. Prof. Dr. W. Vogler Universität Augsburg Mod. und Analyse techn. Systeme 3 MEALY-AUTOMATEN 31 Satz 3.2. Es gibt keinen MlA zur seriellen Multiplikation, der also wie der Serienaddierer zwei Binärzahlen als Eingabe bekommt und jeweils die entsprechende Stelle des Produkts ausgibt. Beweis. Angenommen, A sei so ein MlA und habe weniger als n Zustände. Ein „Lauf“ bei der Eingabe von (2n , 2n ) hätte also die Form 00/0 00/0 00/0 11/0 00/0 00/1 q0 −→ . . . −→ q1 −→ q2 −→ . . . −→ qn −→ (Nach der Ausgabe von n + 1 0en erreicht A q1 und nach 2n 0en qn .) Offenbar gibt es 1 ≤ i < j ≤ n mit qi = qj . Da alle MlAen deterministisch sind, ist der Ablauf nach qj bis qn derselbe wie nach qi , d.h. es gibt 1 ≤ k < n mit qk = qn . Dies führt zum Widerspruch, da qk anders auf 00 reagiert als qn . 2 Tatsächlich hängt die Ausgabe unserer bisherigen Beispiel-MlAen meist nur vom beim jeweiligen Übergang erreichten Zustand ab, was uns im nächsten Kapitel auf einen anderen Automatentyp mit Ausgabe bringen wird. Ein andersartiges Beispiel bekommt man, wenn man bei dem obigen 1er-Block-Automaten verlangt, dass die Länge des 1er-Blocks zudem positiv sein muss. Übung: Wie ändert sich die Schaltkreiskonstruktion und der Schaltkreis? (Behalten Sie die Automatenzustände und ihre Codierung bei!) Hier ein weiteres Beispiel: Abbildung 14 skizziert einen Spielautomaten. Bei A oder B kann man wiederholt eine Kugel einwerfen; die Kugel wird durch die passierten „Türen“ bei x1 , x2 und x3 abgelenkt, die nach dem Ablenken in die jeweils andere Schrägstellung springen. Es gibt zwei Aufgaben: 1) Konstruiere einen Automaten, der gerade die Folgen über {A, B} akzeptiert, bei denen die letzte Kugel bei D austritt. Damit könnte man sich z.B. überlegen, wie man es erreicht, dass die 5. Kugel o.ä. bei D austritt. 2) Konstruiere einen Mealy-Automaten, der Folgen über {A, B} annimmt und jeweils ausgibt, ob die letzte Kugel bei C oder D austritt. Übung: Lösen Sie 2)! A x B x 2 1 x C 3 D Abbildung 14: Auf die Frage, welche Funktionen f sich als Leistung eines MlA beschreiben lassen, werden wir jetzt eine Antwort geben. Offenbar muss gelten, dass die Ausgabe genauso lang ist wie die Eingabe, und dass f (v) ein Präfix von f (vw) ist. • Die Funktion f : Σ∗ → ∆∗ heißt längentreu, falls |f (w)| = |w| für alle w ∈ Σ∗ . Prof. Dr. W. Vogler Universität Augsburg Mod. und Analyse techn. Systeme 3 MEALY-AUTOMATEN 32 • Die Funktion f heißt sequentiell, falls für alle v, w ∈ Σ∗ das Wort f (v) ein Präfix von f (vw) ist, d.h. dass ein u ∈ ∆∗ existiert mit f (v)u = f (vw). Da dies u eindeutig ist, können wir fv (w) = u definieren und erhalten damit eine Familie von Funktionen fv : Σ∗ → ∆∗ . Ist nun jede längentreue und sequentielle Funktion Leistung eines MlA? Man betrachte die Funktion f , die beschreibt, dass eine Eingabe aus {a, b} mit 1 beantwortet wird, wenn die bisherige Folge von Eingaben die Form an bn hat, und mit 0 sonst. (Übung: Geben Sie eine formale Def. von f ! ) Diese Funktion ist längentreu und sequentiell, aber offenbar müsste ein entsprechender MlA die anfänglichen a zählen können. Anders ausgedrückt: Erreicht man mit an Zustand q, muss q fan realisieren; alle fan sind verschieden (fan (bm ) endet auf 1 gdw. n = m). Das kann nicht gehen. • Das Gewicht von f ist die Anzahl der verschiedenen Funktionen fv . Satz 3.3. Eine Funktion f : Σ∗ → ∆∗ ist genau dann die Leistung eines MlA, wenn sie längentreu und sequentiell mit endlichem Gewicht ist. Prof. Dr. W. Vogler Universität Augsburg Mod. und Analyse techn. Systeme 4 AUSSAGENLOGIK 4 33 Aussagenlogik Logik: formale Behandlung des exakten Denkens und Folgerns; Grundlage aller vernünftigen Argumentation in Wissenschaft, Politik und „am Stammtisch“ z.B. auch bei Themen wie Dunkle Materie, die es ja evtl. nicht gibt beantwortet die Frage „Was ist ein mathematischer Beweis?“ (Hilbert 1920er) in der Informatik: • Korrektheitsbeweise (Verifikation) von Programmen, Schaltkreisen etc.; diese benötigen Rechnerunterstützung; dazu: formale Angabe von Aussagen, speziell von • Spezifikationen (Logik ist ausdrucksstark bzw. soll es sein) • automatisches Beweisen • logische Programmierung (PROLOG) (Beweis als Programmablauf) • semantic web: Webseite um Inhaltsbeschreibung/-katalogisierung ergänzen – „Logik pur“ Literatur zum Thema Logik M. Huth, M. Ryan: Logic in Computer Science. Modelling and reasoning about systems. Cambridge University Press M. Kreuzer, S. Kühling: Logik für Informatiker. Pearson Studium 2006 U. Schöning: Logik für Informatiker. BI-Wissenschaftsverlag, Reihe Informatik Bd. 56 Logische Formeln (wie auch Programme) sind Zeichenketten bzw. syntaktische Objekte, z.B. P (x). Durch Interpretation der Symbole (z.B. P = b „ist prim“) geben wir der Formel eine Bedeutung (Semantik). Hier behandeln wir keine Prädikatenlogik, sondern zunächst nur Aussagenlogik. 4.1 Syntax Gegeben sei eine endliche oder abzählbar unendliche Zeichenmengen P von atomaren PFormeln p, q, r etc. – kurz Atomen. Die Menge der (P-)Formeln (Aussagen) ist die kleinste Menge For P (For ) mit: (A1) P ⊆ For (A2) Ist A ∈ For , so auch (¬A) ∈ For (A3) Sind A, B ∈ For , so auch (A ∧ B), (A ∨ B), (A → B), (A ↔ B) ∈ For „kleinste Menge“ heißt: For enthält nichts, was nicht aufgrund dieser Regeln in For sein muß; vgl. auch rationale Ausdrücke. Wir führen die Formeln true und false ein als Abkürzungen für p0 ∨ ¬p0 und ¬true für ein festes p0 ∈ P. Zur verkürzenden Schreibweise lassen wir meist – aber erst ab dem nächsten Abschnitt!! – Klammern weg: Prof. Dr. W. Vogler Universität Augsburg Mod. und Analyse techn. Systeme 4 AUSSAGENLOGIK 34 • Außenklammern • Klammern bei aufeinanderfolgenden Negationen: ¬¬A • Linksklammerung bei A ∨ B ∨ C, A ∧ B ∧ C • Bindungsstärke: ¬ ≫ ∧ ≫ ∨ ≫ → ≫ ↔ Wegen oben „kleinste Menge“ sind nur nach den drei Regeln aufgebaute Objekte Terme. Der Aufbau nach den Regeln wird durch eine Herleitung beschrieben, d.h. jede Formel hat eine Herleitung; z.B.: (1) (2) (3) (4) q (d.h. q ∈ For ) (¬q) p ((¬q) ∧ p) A1 (Begründung) A2 (1) A1 A3 (2),(3) Herleitung: bottom-up (erst Teile herleiten) Regeln wie A1, A2 und A3 kann man in folgender Form schreiben: B1 , . . . , Bn B Prämissen Konklusion Idee: Wenn B1 , . . . , Bn Formeln (oder gültige Aussagen (s.u.) etc.) sind, so auch t. Speziell für n=0: Axiom B Damit sind A1 und A3: (A1’) (A3’) p A, B A∧B p ∈ P (Nebenbedingung) etc. Eine Herleitung von B0 für solche Regeln ist eine Folge w1 , . . . , wm von Zeichenketten mit wm ≡ B0 (syntaktisch gleich, d.h. gleiche Zeichenketten), so daß für jedes i = 1, . . . , m eine n Regel B1 ,...,B mit wi ≡ B existiert, für die B1 , . . . , Bn unter den w1 , . . . , wi−1 auftreten. Wir B numerieren die wi explizit und geben jeweils die angewandte Regel an zusammen mit den Zeilennummern der Bi . Auch jedes w1 , . . . , wi ist eine Herleitung. Beispiel 4.1. siehe oben; w1 ≡ q, w2 ≡ (¬q), w3 ≡ p, w4 ≡ ((¬q) ∧ p). (¬q), p Z.B. für w4 besagt Regel (A3) ((¬q)∧p) , und (¬q) und p sind w2 und w3 . 2 Man kann nun Definitionen/Beweise für herleitbare Objekte durch Induktion (über die Herleitungslänge m) durchführen. Ausführlich: Objekt B hat mindestens eine Herleitung; sei also eine solche Herleitung der Länge m gegeben. Nach Induktion liegt Definition/Beweis für alle Objekte mit kürzerer Herleitung schon vor (Noethersche Ind.!). Prof. Dr. W. Vogler Universität Augsburg Mod. und Analyse techn. Systeme 4 AUSSAGENLOGIK 35 n Die zuletzt angewandte Regel zur Herleitung von B sei B1 ,...,B – hier muß man jeweils B eine Fallunterscheidung nach den gerade behandelten Regeln machen. Die Bi erscheinen in der gegebenen Herleitung vor B; sie haben also kürzere Herleitungen, so daß nach Ind. Definition/Beweis für sie schon vorliegt. Gib basierend darauf Definition/Beweis für t. Bei einem solchen im Prinzip immer wieder gleichen Vorgehen hat man für jede Regel einen Fall. Man gibt nur die Liste dieser Fälle und schreibt jeweils kurz: n Regel B1 ,...,B : Definition/Beweis für B basierend auf Definition/Beweis für die Bi B Bei Formeln sind die Bi Teilterme von B; man spricht von Induktion über den Formelaufbau bzw. struktureller Induktion. Vgl. rationale Ausdrücke. Beispiele 4.2. Die Negationszahl #N B von B ist definiert durch: (A1) #N p = 0 (A2) #N (¬B) = (A3) #N (A ∧ B) = etc. Die Fallunterscheidung nach der Form von A wird deutlicher, wenn man „A ≡ p ∈ P“ statt (A1) und „A ≡ (¬B)“ statt (A2) schreibt – etc. Achtung: Definition ist eindeutig, weil Zerlegung in Teilformeln (also die letzte Regel) eindeutig ist. Im Allgemeinen kann es sein, dass man ein Objekt auf verschiedene Weise herleiten kann, dass die letzte Regel einer Herleitung also nicht eindeutig ist. Dies entspricht einer Definition, bei der man eine Variante für x ≥ 1 und eine zweite für x ≤ 1 hat; was muss man dann beachten? Prof. Dr. W. Vogler Universität Augsburg Mod. und Analyse techn. Systeme 4 AUSSAGENLOGIK 4.2 36 Semantik,Wahrheitstafeln Um eine Formel zu einem Wahrheitswert auswerten zu können, müssen wir nur wissen, welche Atome wahr und welche falsch sind. Dazu ist eine Interpretation I zu P eine Funktion, die jedem p ∈ P einen Wahrheitswert zuordnet, also I : P → {T, F }. Im Kontext der Aussagenlogik redet man oft auch von einer Belegung. Die Auswertung von Formeln folgt nun der induktiven Definition mit (A1), (A2) und (A3) s.o. Wir definieren I |= B, d.h. B gilt bei bzw. unter I bzw. I erfüllt B bzw. I ist ein Modell von B durch: (vgl. A1) I |= p :⇔ I(p) (:⇔ heißt per Definition äquivalent) Bemerkung: ⇔ ist unsere Sprache, mit der wir über Formeln sprechen (Metasprache); ↔ gehört zur Sprache der Formeln (Objektsprache). Analog: Im Deutschen über Englisch reden. (vgl. A2) I |= ¬A :⇔ nicht I |= A ⇔: I ̸|= A (vgl. A3) I |= A ∧ B I |= A ∨ B I |= A → B I |= A ↔ B :⇔ :⇔ :⇔ :⇔ I |= A und I |= B I |= A oder I |= B I ̸|= A oder I |= B (I ̸|= A und I ̸|= B) oder (I |= A und I |= B) Zudem definieren wir: I |= M :⇔ für alle A ∈ M gilt I |= A Beispiel 4.3. Es sei I(p) = F und I(q) = T . Dann gilt: I |= p ∨ p ∧ q → p ⇔ nicht I |= p ∨ p ∧ q oder I |= p ⇔ es gilt nicht, dass I |= p oder I |= p ∧ q, oder es gilt I(p) ⇔ es gilt nicht, dass I(p) oder sowohl I(p) als auch I(q) ⇔ es gilt nicht, dass sowohl falsch als auch wahr Also gilt die Formel unter I. (letzteres ist falsch) Definition von ¬A, A ∧ B, etc. tabellarisch mit einer Wahrheitstafel ; dabei steht A, A ∧ B etc. für I |= A, I |= A ∧ B etc. A T T F F B T F T F ¬A F F T T A∧B T F F F A∨B T T T F A xor B F T T F A→B T F T T A↔B T F F T ∨ ist das inklusive, xor das exklusive Oder. Beispiele 4.4. 1. p: Augsburg liegt in Thailand. q: Augsburg liegt in Asien. r: Augsburg liegt in Afrika. p → r gilt mit der Realität als Interpretation — p → q natürlich auch. Wir benutzen → extensional, d.h. nur die Wahrheitswerte sind interessant. Prof. Dr. W. Vogler Universität Augsburg Mod. und Analyse techn. Systeme 4 AUSSAGENLOGIK 37 Intentional ist p → r („Wenn Augsburg in Thailand läge, dann läge es in Afrika.“) wohl falsch. p= b Satz, der wahr oder falsch ist. Also nicht: • Hau ab ! • Nachts ist es kälter als draußen. • Der gegenwärtige König von Frankreich hat eine Glatze. • Diser Saz enthält drei Fehler. (falsch, da nur 2 Schreibfehler; wahr, da ein Sinnfehler dazukommt) Der letzte Satz zeigt, daß Sätze, die sich auf sich selbst beziehen, problematisch sind; weitere Beispiele: • Dieser Satz ist falsch. • Ein Kreter sagt: „Alle Kreter lügen.“ 2. a) Max sagt: „Paul lügt.“ b) Paul sagt: „Max lügt.“ Sei p „Paul lügt“und m „Max lügt“. Dann besagen a) und b) (¬m ↔ p) und (¬p ↔ m). 3. I |= ∅ gilt immer Proposition 4.5. (Hier wie auch sonst bedeutet das folgende: „Für alle Interpretationen I und Formeln A, B gilt. . . “) I |= A ⇔ I ̸|= ¬A ⇔ I |= ¬¬A Beweis. I ̸|= ¬A bzw. I |= ¬¬A ⇔ nicht I |= ¬A (Definition ̸|= und ¬) ⇔ nicht nicht I |= A (Definition ¬) ⇔ I |= A (Metalogik) 2 Nur üblicher math. Beweis – wir streben größere Präzision an; dazu müssen wir unser formales Vorgehen mit „gesundem (math.) Menschenverstand“ absichern. Definition 4.6. (Folgerbarkeit und Äquivalenz) Seien A, B ∈ For und M ⊆ For ; A folgt aus M (in Zeichen: M |= A), wenn für alle Interpretationen I gilt: I |= M ⇒ I |= A. Konvention: Wir schreiben auch A1 , . . . , An |= A für {A1 , . . . , An } |= A. A und B sind logisch äquivalent, A =||= B, wenn A |= B und B |= A. Entsprechend: M =||= M ′ , wenn M |= A für alle A ∈ M ′ und umgekehrt. Satz 4.7. i) Für alle n ≥ 1 gilt: I |= {A1 , . . . , An } ⇔ I |= A1 ∧ · · · ∧ An Prof. Dr. W. Vogler Universität Augsburg Mod. und Analyse techn. Systeme 4 AUSSAGENLOGIK 38 ii) M |= A → B ⇔ M ∪ {A} |= B Beweis. i) per Induktion über n ii) ”⇒“ Gelte I |= M ∪ {A} (– z.z. ist I |= B). Dann gilt I |= M und damit nach Voraussetzung I |= A → B. Also gilt I ̸|= A oder I |= B. Außerdem gilt I |= A wegen I |= M ∪ {A}; zusammen I |= B. ”⇐“ Gelte I |= M (– z.z. ist I |= A → B). Entweder I |= A ist falsch (fertig!) oder I |= M ∪{A} und nach Voraussetzung I |= B; fertig nach der Definition von →. 2 Definition 4.8. A ∈ For ist (allgemein)gültig (eine Tautologie), in Zeichen: |= A, wenn für alle Interpretationen I gilt I |= A. Analog definieren wir |= M für M ⊆ For . A bzw. M ⊆ For sind erfüllbar, wenn es ein I gibt mit I |= A bzw. I |= M , andernfalls unerfüllbar. |= A bzw. M |= A sind die Wahrheiten, die uns interessieren. Proposition 4.9. Sei A ∈ F or. i) A gültig ⇒ A erfüllbar, d.h. A unerfüllbar ⇒ A nicht gültig. ii) A gültig ( |= A ) ⇔ ∅ |= A Beweis. ii) ∅ |= A ⇔ ⇔ ⇔ A gültig. 2 Satz 4.10. Sei A ∈ For und M ⊆ For . Dann gilt M |= A genau dann, wenn M ∪ {¬A} unerfüllbar ist; speziell ist A gültig genau dann, wenn ¬A unerfüllbar ist. Beweis. für alle I : I |= M ⇒ I |= A genau dann wenn für alle I : I |= M ⇒ I ̸|= ¬A (Proposition 4.5) genau dann wenn M ∪ {¬A} ist unerfüllbar. 2 Algorithmische Idee: Versuche, erfüllendes I für ¬A zu konstruieren; gelingt dies, ist A nicht gültig (und wir haben I als Beleg dafür), sonst ist es gültig (wenn die Versuche geeignet sind). Prof. Dr. W. Vogler Universität Augsburg Mod. und Analyse techn. Systeme 4 AUSSAGENLOGIK 39 Wir können alle Interpretationen (bzw. ihren relevanten Teil) mittels Wahrheitstafel durchprobieren; genau dann, wenn alle Einträge einer Formel T sind, ist die Formel gültig. Gültigkeit ist also entscheidbar. Eine Formel ist erfüllbar genau dann, wenn mindestens ein Eintrag in der Wahrheitstafel T ist. Also ist Erfüllbarkeit entscheidbar. Beispiel 4.11. A ≡ p → (q → p) B ≡ (¬p → ¬q) → (q → p) (Kontraposition) C ≡ (¬p → ¬q) → (p → q) p T T F F q T F T F q→p T T F T A T T T T ¬p → ¬q T T F T B T T T T p→q T F T T C T F T T A und B sind gültig, C nicht – aber erfüllbar. Bei vielen Atomen (n) ist dies Verfahren sehr aufwendig (2n Zeilen); also (Hilbert-)Kalkül – s. Abschnitt 5.1 – oder evtl. ”gezielte Suche”/geeignete Fallunterscheidung. Beispiel 4.12. Beim Antrag auf das Vordiplom stehen ein weißes, ein rotes und ein blaues Formular zur Wahl. Die Prüfungsordnung enthält folgende Vorschriften: a) w → ¬b (In Worten: Wer ein weißes Formular einreicht, darf kein blaues einreichen.) b) w ∨ r c) r → b ∧ w Angenommen r = T , dann Also r = F , damit c) ✓ wegen wegen Ergibt die einzige erfüllende Interpretation. Alternativ: Wahrheitstafel mit 8 Zeilen. Die logische Äquivalenz ”=||=” heißt einfach „haben dieselben Modelle”; auch das können wir mit Wahrheitstafeln durchprobieren. Beispiel 4.13. p → (q → r) =||= (p ∧ q) → r p q r q → r links p ∧ q rechts . . . T T F F F T F T F T T T F T . . . . . . F T F F T F T . . . Da die Spalten zu links und rechts gleich sind, folgt die Äquivalenz. Prof. Dr. W. Vogler Universität Augsburg Mod. und Analyse techn. Systeme 4 AUSSAGENLOGIK 40 A ≡ p → (q → p) aus Beispiel 4.11 ist nur einzelne Formel; ”natürlich” gilt auch ¬p → (q ∧ r → ¬p). Allgemein: Satz 4.14. Sei B ∈ For gültig mit Atomen p0 , p1 , ..., pn und seien A0 , ..., An ∈ For . B ′ entstehe aus B, indem man jedes pi durch Ai ersetzt. Dann ist B ′ gültig. Beispiel 4.11 (Fortsetzung): Nach Satz 4.14 gilt für alle A, B ∈ For : A → (B → A) Analog zu 4.14 folgt aus B1 =||= B2 auch B1′ =||= B2′ . Nach Beispiel 4.13 ist also für alle A, B, C ∈ For : A → (B → C) =||= A∧B → C; die zweite Formel ist wohl besser zu verstehen. Proposition 4.15. i) A → (B → C) =||= A ∧ B → C ii) A ∧ B =||= ¬(A → ¬B) iii) A ∨ B =||= ¬A → B iv) A ↔ B =||= (A → B) ∧ (B → A) 2 Beweis. Teil i, s.o. Rest analog. Wir können jede Formel (auch als Teilformel einer größeren Formel – ohne Beweis; vgl. Satz 4.14) durch eine logisch äquivalente ersetzen; also gilt z.B. A ∨ B ∧ ¬C =||= ¬A → B ∧ ¬C =||= ¬A → ¬(B → ¬¬C) (Teilformel ersetzt) =||= ¬A → ¬(B → C) Mit 4.15 können wir uns also bei Bedarf auf ¬ und → beschränken und ∧, ∨, ↔ als Abkürzungen (A ∧ B für ¬(A → ¬B) etc.) auffassen, die wir bei Bedarf zur besseren Lesbarkeit benützen. Damit haben wir weniger Formeln und weniger Fallunterscheidungen, z.B. im Hilbert-Kalkül in Abschnitt 5.1. Bemerkung: Zum Vergleich der verschiedenen Äquivalenzsymbole: • ↔ steht in Formeln • =||= steht zwischen Formeln; Meta-Sprache • ⇔ steht zwischen (meta-sprachlichen) Aussagen, die wahr oder falsch sind; A ∨ B ⇔ ¬A → B ist syntaktisch falsch, denn A ∨ B ist nicht wahr oder falsch – I |= A ∨ B schon. Hier eine Liste mit bekannten aussagenlogischen Äquivalenzen mit Namen (d.h. die folgenden Aussagen gelten sogar für alle prädikatenlogischen Formeln A, B und C): Kommutativität, Assoziativität ∨ und ∧ sind kommutativ und assoziativ, d.h. A ∨ B =||= B ∨ A und (A ∨ B) ∨ C =||= A ∨ (B ∨ C) etc. Idempotenz A ∨ A =||= A und A ∧ A =||= A Distributivität Prof. Dr. W. Vogler A∨(B ∧C) =||= (A∨B)∧(A∨C) und A∧(B ∨C) =||= (A∧B)∨(A∧C) Universität Augsburg Mod. und Analyse techn. Systeme 4 AUSSAGENLOGIK 41 De Morgansche Gesetze Doppelte Negation Absorption ¬(A ∨ B) =||= ¬A ∧ ¬B und ¬(A ∧ B) =||= ¬A ∨ ¬B (vgl. 4.5) ¬¬A =||= A A ∨ (A ∧ B) =||= A und A ∧ (A ∨ B) =||= A Neutrale Elemente A ∨ false =||= A und A ∧ true =||= A Inverse Elemente A ∨ ¬A =||= true (tertium non datur) und A ∧ ¬A =||= false (Achtung: die Verknüpfung mit ∨ ergibt das neutrale Element von ∧ und vice versa!) Null-Elemente A ∨ true =||= true und A ∧ false =||= false (Sehen wir ∨ als Addition, das neutrale Element false also als 0 und ∧ als Multiplikation, so entspricht die letzte Äquivalenz gerade der Aussage x · 0 = 0.) Wenn wir aus diesen Gesetzen weitere ermitteln, verwenden wir meist unter der Hand Kommutativität und Assoziativität sowie die Symmetrie von =||=. Beispiele 4.16. Als Anwendung wollen wir zeigen, wie man im Gegenzug zu unseren obigen Überlegungen → aus Formeln entfernen kann: A → B =||= ¬¬A → B (Doppelte Negation) =||= ¬A ∨ B (vgl. 4.15 iii)). (Hier haben wir zweimal die Symmetrie von =||= verwendet.) Damit und mit 4.15 iv): A ↔ B =||= (¬A ∨ B) ∧ (¬B ∨ A) Ferner ist false nach Definition ¬true; also ist ¬false äquivalent zu ¬¬true und zu true (Doppelte Negation). Ähnlich gilt: false → A =||= ¬false ∨ A (s.o.) =||= true ∨ A (gerade gesehen) =||= true (Null-Element; genaugenommen auch Kommutativität). Die Aussage false → A =||= true heißt ex falso quodlibet. Prof. Dr. W. Vogler Universität Augsburg Mod. und Analyse techn. Systeme 4 AUSSAGENLOGIK 42 Exkurs: Literale : p, ¬p mit p ∈ P 0 Klausel : l1 ∨ · · · ∨ ln mit Literalen li . Eine Formel ist in bzw. eine konjunktive(r) Normalform (konj. NF, KNF), wenn sie eine Konjunktion von Klauseln ist; z.B. (p1 ∨ ¬p2 ∨ p3 ) ∧ (¬p1 ∨ p3 ) ∧ (p2 ∨ ¬p3 ). (Erfüllbarkeit ist schwer zu entscheiden, s.u.) Analog: disjunktive Normalform (DNF): Disjunktion von Konjunktionen von Literalen (Verwendet zur Beschreibung von Schaltkreisen; es gibt Verfahren zu ihrer Minimierung.) Erfüllbarkeit leicht: (*) Zu jeder Formel gibt es eine logisch äquivalente disjunktive Normalform. Wir lesen ihre Konjunktionen aus den Zeilen der Wahrheitstafel mit T , den T -Zeilen, ab: Beispiel 4.17. p ∨ q → ¬q =||= ?? p T T F F q T F T F p∨q T T T F ¬q F T F T • F T F T (*) gilt auch für konjunktive Normalformen: Man erhält eine konjunktive Normalform von A aus der disjunktiven Normalform D von ¬A (betrachte F -Zeilen von A), indem man die De Morganschen Gesetze auf ¬D anwendet. Das Ergebnis ist nämlich äquivalent zu ¬D; da D äquivalent ist zu ¬A, ist das Ergebnis also äquivalent zu ¬¬A und daher zu A (Doppelte Negation). Im Bsp.: D =||= (p ∧ q) ∨ (¬p ∧ q) und ¬D =||= ?? Problem SAT (satisfiability): Geg. sei A in konj. NF; ist A erfüllbar ? Dieses Problem ist relevant, denn wegen Satz 4.10 entspricht erfüllbar folgerbar. Es ist (vermutlich) nur mit hohem Aufwand entscheidbar! (NP-vollständig) – Mit Wahrheitstafel entscheidbar; die hat aber bei n Atomen 2n Zeilen! =⇒ logische Formeln können • sehr kompakt sein • den Schwierigkeitsgrad von Problemen charakterisieren. (z.B. NP-vollständig ) ; Informatik III; Komplexitätstheorie. Prof. Dr. W. Vogler Universität Augsburg Mod. und Analyse techn. Systeme 5 BEWEISMETHODEN FÜR AUSSAGENLOGIK 5 43 Beweismethoden für Aussagenlogik 5.1 Der Hilbert-Kalkül Ziel: Herleitung aller gültigen Formeln durch Zeichenmanipulation aus Axiomen mittels Schlußregeln. Trotz Wahrheitstafeln ist dies aus folgenden Gründen interessant: • Herleitung ist evtl. schneller (vgl. Exkurs und gezielte Suche) • Wiederverwendbarkeit von alten Ergebnissen bzw. Zwischenergebnissen (Sätze, Lemmata) • Wahrheitstafeln existieren nicht für Prädikatenlogik. M ⊢ A: A kann aus M hergeleitet werden. (⊢ = turnstile, Drehkreuz) Ziel: • M ⊢ A ⇒ M |= A Kalkül korrekt, alles Herleitbare ist wahr. • M |= A ⇒ M ⊢ A Kalkül vollständig, alles Wahre kann hergeleitet werden. Bei diesem Vorgehen werden wir uns auf Formeln beschränken, die nur aus Atomen, Implikationen und Negationen bestehen; vgl. 4.15. Definition 5.1. Der Hilbert-Kalkül besteht aus den Axiomen (Regeln ohne Prämissen) Ax1 := {A → (B → A) | A, B ∈ For } Ax2 := {(A → (B → C)) → ((A → B) → (A → C)) | A, B, C ∈ For } Ax3 := {(¬A → ¬B) → (B → A) | A, B ∈ For } (endlich viele Axiomenschemata, s. Bem. u.) und der Schlußregel Modus Ponens MP A, A → B B Bedeutung dieser Notation: Wenn wir A und A → B (Prämissen von MP) bewiesen haben, beweist dies B (Konklusion von MP). Bemerkung: Ax1 und Ax2 sind besser einsichtig in der Form A ∧ B → A und (A ∧ B → C) ∧ (A → B) → (A → C) =||= ((A ∧ B → C) ∧ (A → B) ∧ A) → C; s. 4.15. Bemerkung: Ax1 ist eine Menge von Axiomen. Man kann z.B. A → (B → A) als ein Axiom mit “Meta-Variablen“ A und B (also kein x) auffassen, die für Formeln stehen, und hat dann endl. viele Axiome. Man erhält jede Formel aus Ax1 (die man ja in den Herleitungen verwenden will), indem man jedes A durch dieselbe Formel ersetzt und analog für B etc., d.h. als sogenannte Instantiierung des Axioms. (vgl. Satz 4.14) Was eine Herleitung zu Def. 5.1 ist, ist eigentlich schon klar; neu: Herleitung aus M . Prof. Dr. W. Vogler Universität Augsburg Mod. und Analyse techn. Systeme 5 BEWEISMETHODEN FÜR AUSSAGENLOGIK 44 Definition 5.2. A ∈ For ist aus M ⊆ For herleitbar, M ⊢ A, wenn es eine Folge A1 , . . . An in For gibt (ein ”Beweis“) mit: (i) An ≡ A (ii) Für i = 1, . . . n gilt: • Ai ∈ Ax1 ∪ Ax2 ∪ Ax3 ∪ M oder • (Modus Ponens) Es gibt j, k < i mit Aj ≡ Ak → Ai (Beweis enthält Ak und Ak → Ai ; nach MP ist auch Ai bewiesen). Die Folge heißt Herleitung von A aus M (vgl. Abschnitt 1.1) ⊢ A steht für ∅ ⊢ A: A ist herleitbar. Beobachtung: i) Für 1 ≤ j < n ist auch A1 , . . . Aj eine Herleitung (von Aj ). ii) Sind A1 , . . . An und B1 , . . . Bm Herleitungen, so auch A1 , . . . An , B1 , . . . Bm (von Bm ). Beispiel 5.3. a) Für alle A, B ∈ For gilt ¬A ⊢ A → B. Zum Beweis geben wir eine Herleitung aus ¬A an – wieder mit einer Begründung für jede Zeile: (1) (2) (3) (4) (5) ¬A → (¬B → ¬A) ¬A ¬B → ¬A (¬B → ¬A) → (A → B) A→B Ax1 trivial (∈ M ) MP (2),(1) Ax3 MP (3),(4) Konstruktion (hier und meistens) rückwärts: A → B ist kein Axiom und ̸∈ M , also müssen wir es aus einem C und C → (A → B) mit MP herleiten. C → (A → B) ist in Ax1 für C ≡ B, aber B können wir sicher nicht aus ¬A herleiten. C → (A → B) ist in Ax3 für C ≡ ¬B → ¬A; also suchen wir jetzt analog ein C für ¬B → ¬A. ¬A → (¬B → ¬A) ist in Ax1 und diesmal liegt ¬A einfach in M . b) Für alle A ∈ For : ⊢ A → A. Beweis: (1) (A → ((A → A) → |{z} A )) → ((A → (A → A)) → (A → |{z} A )) | {z } | {z } B C (2) A → ((A → A) → A) | {z } B Ax2 C Ax1 B (3) (A → (A → A)) → (A → A) (4) A → (A → A) (5) A → A MP (2),(1) Ax1 MP (4),(3) • A → A ist klar (semantisch, d.h. im Sinne von |=), seine Herleitbarkeit aber nicht. Man könnte mehr Axiome nehmen, aber Ziel ist Minimalität: Möglichst wenige Fälle („Eleganz“) und starkes Vollständigkeitsresultat. Für praktische Herleitungen scheint der Kalkül also weniger geeignet; tatsächlich ist die Situation aber nicht so unbequem wie man denken könnte, denn jetzt können wir Prof. Dr. W. Vogler Universität Augsburg Mod. und Analyse techn. Systeme 5 BEWEISMETHODEN FÜR AUSSAGENLOGIK 45 einfach A → A (wie ein Axiom!) in jeder Herleitung direkt (als Lemma) verwenden. Streng genommen müßten wir jeweils obige Herleitung einbauen, aber das können wir ja immer, so daß wir einfach darauf verzichten wollen. • Wie kommt man auf den Beweis? A → A ist kein Axiom, z.z. sind also C und C → (A → A). C ≡ A unmöglich herleitbar, wie auch C ≡ ¬A. C ≡ A → A wollen wir ja gerade zeigen. C ≡ A → (A → A): Axiom, relativ einfach, hängt mit A → A zusammen. (A → (A → A)) → (A → A) sieht aus wie rechte Seite von Ax2 ; (1). Beweisen ist nicht einfach, aber endlich eine klare Def. – für Aussagenlogik. Um das Beweisen zu vereinfachen, benötigen wir Regeln zum ”Zusammenstricken“ von Beweisen, d.h. zum Verwenden alter Ergebnisse wie A → A. Proposition 5.4 i) ist fast dasselbe wie MP ; wir werden den Unterschied in Zukunft nicht immer machen. Proposition 5.4 ii) ist eine abgeleitete Regel. Proposition 5.4. i) Wenn M ⊢ A und M ⊢ A → B, dann M ⊢ B. ii) Wenn M ⊢ ¬A → ¬B, dann M ⊢ B → A. ¬A → ¬B B→A Beweis. i) Herleitung für A und A → B hintereinanderschreiben – das ist eine Herleitung! Dann M P ; B. ii) Folgt aus M ⊢ (¬A → ¬B) → (B → A) gemäß Ax3 und i). 2 Haben wir also in einer Herleitung ¬A → ¬B erreicht (¬A → ¬B ist also aus dem jeweiligen M herleitbar), können wir in einer folgenden Zeile unmittelbar B → A schreiben, da wir nun wissen, daß wir eine Herleitung von B → A aus M einfügen können. Wir können also im Beispiel 5.3 a) Zeile (4) weglassen und (5) mit 5.4 ii) (3) begründen. Der folgende Satz ist ein wichtiges Hilfsmittel zur Vereinfachung von Beweisen. Satz 5.5. (Deduktionstheorem) (vgl. Satz 4.7) M ⊢ A → B ⇔ M ∪ {A} ⊢ B Bemerkung: „⇐“ wird implizit in Situationen wie der folgenden angewandt: Um aus einer gegebenen Axiomenmenge M einen Satz der Form A → B zu beweisen, beginnen wir den Beweis oft „Gelte also A . . . “; dann leiten wir B her, wobei wir A als weitere Voraussetzung hinzunehmen, die wir bei Bedarf also jederzeit in die Herleitung einflechten können – wie ein Axiom. Wir zeigen also M ∪ {A} ⊢ B; das bedarf einer Rechtfertigung, die nicht offensichtlich ist. Beweis: ⇒ n. Vor. ferner also Prof. Dr. W. Vogler M ∪ {A} ⊢ A → B M ∪ {A} ⊢ A M ∪{A} ⊢ B (selbe Herleitung) (triviale Herleitung) 5.4 i) Universität Augsburg Mod. und Analyse techn. Systeme 5 BEWEISMETHODEN FÜR AUSSAGENLOGIK 46 ⇐ (wichtig) Es sei A1 , ..., An eine Herleitung von B aus M ∪ {A}, d.h. An ≡ B. Wir zeigen allgemeiner durch Induktion über i, daß für i = 1, ..., n gilt M ⊢ A → Ai . Sei dies also wahr für alle j < i. (Noethersche Induktion) i) Ai M M M ∈ M ∪ Ax1 ∪ Ax2 ∪ Ax3 ⊢ Ai ⊢ Ai → (A → Ai ). ⊢ A → Ai trivial Ax1 5.4 i) ii) Ai ≡ A M ⊢ A → Ai 5.3 b) iii) Es gibt k, j < i mit Aj ≡ Ak → Ai . Nach Induktion gilt also M ⊢ A → Ak und M ⊢ A → (Ak → Ai ). Damit M ⊢ (A → (Ak → Ai )) → ((A → Ak ) → (A → Ai )) M ⊢ A → Ai Ax2 (2 x 5.4 i)) Bem.: Noethersche Induktion, denn Schluß von i auf i + 1 funktioniert nicht in 3.; in einer Verankerung würde 1. und 2. stehen, die dann im Ind.schritt wiederholt werden müssten. 2 Der Beweis gibt eine Konstruktion, wie aus einer Herleitung von An eine von A → An wird; dabei wird jeder Schritt der ersten Herleitung durch einen (abgeleiteten) oder durch drei Schritte ersetzt. Beachte: In den Herleitungen steht nicht „M ⊢“.) Anwendungen: Satz 5.6. Für alle A, B, C ∈ For : i) ⊢ (A → B) → ((B → C) → (A → C)) ii) ⊢ ¬A → (A → B) (Transitivität von → ) (¬A ∧ A → B)(ex falso quod libet) iii) ⊢ ¬¬A → A iv) ⊢ A → ¬¬A v) ⊢ (¬A → A) → A (ein Widerspruchsbeweis) Beweis. Die folgenden Beweise sind keine Herleitungen aus einer festen Menge M ; trotzdem sind sie wie Herleitungen aufgebaut, wobei wir zusätzlich in jeder Zeile angeben, aus welcher Menge die jeweilige Formel herleitbar ist. i) Herleitung von hinten konstruieren. Sei M = {A → B, B → C, A} Naheliegend: Deduktion. Die führt zu (5), und jetzt muss man sich nur unabhängig vom Kalkül überlegen, warum C gilt, wenn man die Formeln in M schon weiß. (1) (2) (3) (4) (5) M M M M M ⊢A ⊢A→B ⊢B ⊢B→C ⊢C Prof. Dr. W. Vogler trivial trivial MP (1),(2) – dasselbe M !! 5.4 i) trivial MP (3),(4) Universität Augsburg Mod. und Analyse techn. Systeme 5 BEWEISMETHODEN FÜR AUSSAGENLOGIK 47 (6) (7) (8) ⊢ (A → B) → ((B → C) → (A → C)) Deduktion (5) ii) Wieder Deduktion, aber nur einmal! Dann muss man Negation ins Spiel bringen, also naheliegenderweise Ax3 oder 5.4 ii) (2) anwenden. Um eine Implikation zu beweisen, bietet es sich immer an, sie als rechte Seite von Ax1 zu sehen. Deduktion „rückwärts“ spart dann eine Zeile im Vergleich zu „trivial, Ax1, MP“. (1) (2) (3) (4) ⊢ ¬A → (¬B → ¬A) ¬A ⊢ ¬B → ¬A ¬A ⊢ A → B ⊢ ¬A → (A → B) Ax1 Deduktion (1) 5.4 ii) (2) (vgl. obiges Bsp. – jetzt kürzer) Deduktion (3) iii) Wieder beginnen wir mit Deduktion und müssen nun wohl A mit MP beweisen. Wir suchen wieder C, so dass wir C und C → A herleiten können. C ≡ A bringt nichts, C ≡ ¬A wird sich aus ¬¬A nicht herleiten lassen; C ≡ ¬¬A scheint in (5) ziemlich dasselbe zu sein wie (7), aber hier haben wir ¬¬A als Hilfe, s. (1). Jetzt. . . (1) (2) (3) (4) (5) (6) (7) ¬¬A ⊢ ¬¬A ¬¬A ⊢ ¬¬A ⊢ ¬¬A ⊢ ¬¬A ⊢ ¬¬A → A ¬¬A ⊢ A ⊢ ¬¬A → A trivial MP (1),(5) Deduktion (6) iv) (1) ⊢ (2) ⊢ A → ¬¬A 2 abgeleitete Regeln: Proposition 5.7. i) A → B, B → C A→C ii) ¬¬A A Beweis. i) Wenn M ⊢ A → B und M ⊢ B → C (mit derselben Menge M !), dann: M ⊢ (A → B) → ((B → C) → (A → C)) wg. Satz 5.6 i), also M ⊢ A → C mit 2 x MP (bzw. 5.4 i)) ii) Übung 2 Korrektheit und Vollständigkeit Satz 5.8. (Korrektheitssatz) Wenn M ⊢ A für A ∈ For und M ⊆ For , dann gilt M |= A. Speziell: Wenn ⊢ A, dann ist A gültig. Prof. Dr. W. Vogler Universität Augsburg Mod. und Analyse techn. Systeme 5 BEWEISMETHODEN FÜR AUSSAGENLOGIK 48 Beweis. Sei A1 , ..., An eine Herleitung von A aus M , und sei I eine Interpretation mit I |= M . Wir zeigen durch Induktion über i: I |= Ai für i = 1, . . . , n. Dann gilt I |= A wegen Sei also I |= Aj für alle j < i. i) Ai ∈ M : I |= Ai nach Voraussetzung. ii) Ai ∈ Ax1 ∪ Ax2 ∪ Ax3: I |= Ai , denn Ai ist gültig nach Satz 4.14 und Beispiel 4.11 bzw. Übung (Ax2). iii) j, k < i mit Aj ≡ Ak → Ai . Nach Induktion ist I |= Ak und I |= Ak → Ai , nach Def. von |= also I |= Ai . 2 Schritte zur Vollständigkeit: - Konsistenz (= keine widersprüchlichen Herleitungen) - Modell-Lemma - Vollständigkeitssatz Definition 5.9. M ⊆ For heißt konsistent, wenn für kein A ∈ For zugleich M ⊢ A und M ⊢ ¬A gilt. Lemma 5.10. i) Ist M inkonsistent, so M ⊢ B für alle B ∈ For . ii) M ̸⊢ A ⇒ M ∪ {¬A} ist konsistent. Beweis. i) Sei M ⊢ A und M ⊢ ¬A; wg. Satz 5.6 ii) ist M ⊢ ¬A → (A → B). Also M ⊢ B mit 2x MP. ii) Sei M ∪ {¬A} inkonsistent. Dann gilt M ∪ {¬A} ⊢ A nach i), d.h. M ⊢ ¬A → A nach Satz 5.5. Also M ⊢ A nach Satz 5.6 v) und MP. 2 Mit Lemma 5.10 ii) kann man jede konsistente Menge M erweitern zu einer konsistenten Menge M ′ , so daß für alle A ∈ For entweder M ′ ⊢ A oder M ′ ⊢ ¬A. (Entweder es gilt bereits M ⊢ A, oder man nimmt ¬A hinzu; wegen 5.10 ii) ist auch M ∪ {¬A} konsistent.) Dann erhält man ein Modell I von M durch pI := T gdw. M ′ ⊢ p (p beliebiges Atom). Lemma 5.11. (Modell-Lemma) Jede konsistente Menge ist erfüllbar, d.h. (in der Aussagenlogik): Sie besitzt ein Modell. Satz 5.12. (Vollständigkeitssatz) Für alle A ∈ For und M ⊆ For gilt M |= A ⇒ M ⊢ A. Beweis. Angenommen M ̸⊢ A. Dann ist M ∪ {¬A} konsistent (Lemma 5.10 ii)) und hat ein Modell I (Lemma 5.11) mit I |= M und I |= ¬A, d.h. I ̸|= A. Also M ̸|= A. 2 Zusammenfassung 5.13. Prof. Dr. W. Vogler i) M |= A ⇔ M ⊢ A (Sätze 5.8 und 5.12) Universität Augsburg Mod. und Analyse techn. Systeme 5 BEWEISMETHODEN FÜR AUSSAGENLOGIK 49 ii) Tautologie = b herleitbar (Spezialfall von i)) iii) M erfüllbar ⇔ M konsistent Beweis. zu iii): ⇒ Wenn I |= M gilt und M ⊢ A und M ⊢ ¬A, dann gilt wg. Satz 5.8 auch M |= A und M |= ¬A und damit I |= A und I |= ¬A – Widerspruch! ⇐ Lemma 5.11 2 Prof. Dr. W. Vogler Universität Augsburg Mod. und Analyse techn. Systeme 5 BEWEISMETHODEN FÜR AUSSAGENLOGIK 5.2 50 Sequenzenkalkül Während der Hilbert-Kalkül mehrere Axiome und nur eine Regel hat, hat der Sequenzenkalkül nur ein Axiom und viele Regeln. Diese Regeln orientieren sich an der Struktur der involvierten Aussagen (syntax-driven), was insbesondere das automatische Beweisen sehr erleichtert. Hier eine Skizze. Der Sequenzen- oder Gentzen-Kalkül verwendet vorwiegend Regeln zur Herleitung von Aussagen. Diese Aussagen heißen Sequenzen; sie haben die Form M ⊢G A, wobei M ⊆ For endlich ist, und bedeuten, dass sich A syntaktisch aus M „ergibt“. Die Voraussetzungsmenge ist also in die Aussage integriert, und es werden „normale“ Herleitungen ohne weitere Voraussetzungsmengen betrachtet. Der Kalkül ist korrekt und vollständig, d.h. wieder: M ⊢G A ⇔ M |= A (wobei M ⊢G A hier eben etwas anders zu verstehen ist.) In folgender Variante des Gentzen-Kalküls finden Sie je zwei Regeln für jeden logischen Operator, abhängig davon, ob der Operator in der zu zeigenden Formel (. . . rechts) oder in einer vorausgesetzten Formel (. . . links) auftritt: M ∪ {¬C} ⊢G A M ∪ {B} ⊢G C Imp links M ∪ {A → B} ⊢G C M ∪ {A} ⊢G B Imp rechts M ⊢G A → B M ∪ {¬B} ⊢G A Neg links M ∪ {¬A} ⊢G B M ∪ {A} ⊢G ¬B Neg rechts M ∪ {B} ⊢G ¬A M ⊢G A M ⊢G B Kon rechts M ⊢G A ∧ B M ∪ {A, B} ⊢G C Kon links M ∪ {A ∧ B} ⊢G C M ∪ {¬B} ⊢G A Dis rechts M ⊢G A ∨ B M ∪ {A} ⊢G C M ∪ {B} ⊢G C Dis links M ∪ {A ∨ B} ⊢G C M ∪ {A} ⊢G A Axiom Hier ist also das Deduktionstheorem (genauer: eine Hälfte davon) eine Regel, nämlich Imp rechts. Durch die Brille des Deduktionstheorems ist z.B. Neg links eine Form der Kontraposition. Korrektheit des Kalküls beweist man wieder durch Induktion über die Herleitungslänge. Das Axiom ist offenbar korrekt, da M ∪ {A} |= A. Für die Korrektheit von Imp rechts nehmen wir nach Induktion an, dass M ∪ {A} |= B; dann gilt auch M |= A → B nach Satz 4.7 ii). Ferner ist Neg links korrekt: Wenn M ∪ {¬B} |= A, so auch M ∪ {¬A} |= B wegen Satz 4.7 ii) und |= (¬B → A) → (¬A → B). Da wir beim Konstruieren von Herleitungen wie gewohnt von unten nach oben vorgehen werden, betrachten wir zuerst auch die Regeln von unten nach oben: Regel Kon rechts ist z.B. anwendbar, wenn die zu zeigende Formel eine Konjunktion A ∧ B ist. In diesem Fall müssen Prof. Dr. W. Vogler Universität Augsburg Mod. und Analyse techn. Systeme 5 BEWEISMETHODEN FÜR AUSSAGENLOGIK 51 wir zwei Prämissen beweisen; also zuerst die eine Hälfte der Konjunktion A, dann die andere B. Haben wir eine Konjunktion als Voraussetzung, so können wir diese mit Regel Kon links eliminieren und beide Teilformeln A und B als Voraussetzung betrachten. Herleitungen sind wie üblich aufgebaut, wobei wir im weiteren die Mengenklammern auf der linken Seite weglassen, so dass wir es im Prinzip mit Sequenzen von aussagenlogischen Formeln zu tun haben. Ein Beispiel: (1) (1) (2) (3) (4) (5) A, B ⊢G A A, B ⊢G B A, B ⊢G B ∧ A A ∧ B ⊢G B ∧ A ⊢G (A ∧ B) → (B ∧ A) Axiom Axiom Kon rechts (2) (1) Kon links (3) Imp rechts (4) (2) (3) (4) (5) Die zu zeigende Formel (5) ist eine Implikation. Also müssen wir die Regel Imp rechts verwenden. Nun haben wir in Schritt (4) je eine Konjunktion als Voraussetzung und als zu zeigende Formel. Es ist hier egal, mit welchem Operator wir uns als nächstes befassen. Praktischerweise wählen wir die Regel Kon links, da diese weniger Prämissen aufweist. Die anschließende Regel Kon rechts in Schritt (3) spaltet den Beweis in zwei Fälle, wobei wir beide Fälle (1) und (2) mit dem Axiom abschließen können. Die Struktur der Herleitung kann man auch sehr gut als Baum darstellen. Jetzt wollen wir noch eine Herleitung für ⊢G (¬A∨B) → (A → B) konstruieren und wieder die Struktur der Herleitung mit einem Baum illustrieren. Prof. Dr. W. Vogler Universität Augsburg Mod. und Analyse techn. Systeme 5 BEWEISMETHODEN FÜR AUSSAGENLOGIK 5.3 52 Resolution Ein ganz anderes Beweisverfahren ist die Resolution, die sich auf Formeln in KNF anwenden lässt und die Grundlage für die Logikprogrammierung darstellt. Zur Erinnerung: Eine Formel in KNF ist eine Konjunktion von Klauseln; eine Klausel ist eine Disjunktion von Literalen; ein Literal ist ein (aussagenlogisches) Atom oder seine Negation. Bsp.: (p1 ∨ ¬p2 ∨ p3 ) ∧ (¬p1 ∨ p3 ) ∧ (p2 ∨ ¬p3 ) — „erfüllbar?“ ist schwierig Wir wollen für ein Literal l sein negiertes Literal mit ¯l bezeichnen, also z.B. ¬p ≡ p. (In anderen Worten, ¯l enthält höchstens ein ¬.) Ferner wollen wir Klauseln als Mengen schreiben, so dass wiederholte Literale zusammenfallen und die Reihenfolge der Literale keine Rolle spielt. Ferner wollen wir eine KNF-Formel als Menge solcher Klauseln schreiben; das hat u.a. zur Folge, dass es zu einer endlichen Menge von Atomen (sagen wir n viele) nur endlich viele 2n Klauseln (22n ) und daher nur endlich viele KNF-Formeln gibt (22 ). Eine Formel in KNF ist unter einer Interpretation genau dann wahr, wenn in jeder Klausel mindestens ein Literal wahr ist. Wir wollen auch die leere Menge als Klausel zulassen, die entsprechende KNF-Formel ist dann offenbar unerfüllbar. Sei A eine Formel in KNF mit Klauseln K und K ′ , so dass ein Literal l existiert mit l ∈ K und ¯l ∈ K ′ . Dann heißt R = (K − {l}) ∪ (K ′ − {¯l}) Resolvente von K und K ′ . Eine solche Resolvente ist genau dann leer, wenn K = {l} und K ′ = {¯l}. Beispiel 5.14. Sei A = {{p1 , p3 }, {p2 , ¬p3 }}; dann ist die einzige Resolvente {p1 , p2 }. (Idee: Ist p3 falsch, so gilt p1 , sonst p2 ; also gilt auch p1 ∨ p2 .) Ein Resolutionsschritt fügt A eine neue Resolvente R zweier Klauseln von A hinzu. Ist R = ∅, so ist die neue Formel also unerfüllbar; dies war aber bereits für A der Fall. Fügen wir wiederholt neue Klauseln als Resolventen (nicht-deterministisch) hinzu, terminiert dieses Vorgehen nach obigen Betrachtungen. Das Ergebnis hängt auch nicht von der Reihenfolge der Hinzufügungen ab – man sagt, das Verfahren ist determiniert: Kann man R hinzufügen, wählt aber stattdessen R′ , dann kann man R hinterher immer noch hinzufügen und muss es auch schließlich. Wir bezeichnen das Ergebnis mit Res∗ (A). Beispiel 5.15. Sei A = {{p1 , p3 }, {p2 , ¬p3 }, {¬p2 }}; dann gibt es zunächst zwei Resolventen {p1 , p2 } und {¬p3 }. Fügen wir diese hinzu, ergibt sich auf zwei verschiedene Weisen auch noch die Resolvente {p1 }. Alle diese Klauseln bilden Res∗ (A). Lemma 5.16. Sei A eine Formel in KNF mit Klauseln K und K ′ und einer Resolvente R = (K − {l}) ∪ (K ′ − {¯l}). Dann ist A genau dann erfüllbar, wenn A ∪ {R} es ist. Beweis: Eine A ∪ {R} erfüllende Interpretation erfüllt natürlich auch A. Gilt umgekehrt I |= A, so ist o.E. lI wahr; wegen der Klausel K ′ muss dann I ein Literal in K ′ − {¯l} wahr machen, also auch eins in R. Damit gilt auch I |= A ∪ {R}. 2 Das Ziel des Resolutionsverfahrens ist es zu entscheiden, ob eine KNF-Formel A unerfüllbar ist. Dass die Bestimmung von Res∗ (A) dafür immer eine korrekte Antwort liefert, das Verfahren also vollständig und korrekt ist, zeigt der folgende Satz. Satz 5.17. Resolutionssatz Eine KNF-Formel A ist genau dann unerfüllbar, wenn ∅ ∈ Res∗ (A). Prof. Dr. W. Vogler Universität Augsburg Mod. und Analyse techn. Systeme 5 BEWEISMETHODEN FÜR AUSSAGENLOGIK 53 Beweis: Korrektheit (⇐): Ist ∅ ∈ Res∗ (A), so ist Res∗ (A) unerfüllbar; ferner ist mit wiederholter Anwendung von Lemma 5.16 jede Formel auf dem Weg zu Res∗ (A) (rückwärts betrachtet) unerfüllbar, also auch A. Vollständigkeit (⇒): Sei A unerfüllbar. Wir zeigen durch Induktion über die Anzahl n der Atome in A: ∅ ∈ Res∗ (A). Dies ist für n = 0 klar, da A wegen der Unerfüllbarkeit mindestens eine Klausel enthalten muss, und diese ist ∅. Ind.ann.: Die Aussage gilt für jede KNF-Formel B mit Atomen p1 , . . . , pn . A habe die Atome p1 , . . . , pn , pn+1 . Wir gewinnen aus A zwei neue Klauselmengen A0 und A1 . A0 entsteht aus A durch Streichen aller Klauseln mit pn+1 und entfernen aller Literale ¬pn+1 aus den verbleibenden Klauseln. A1 entsteht analog aus A durch Streichen aller Klauseln mit ¬pn+1 und entfernen aller Literale pn+1 aus den verbleibenden Klauseln. Wäre A0 erfüllbar durch I, so können wir pIn+1 := T definieren (bzw. annehmen, dass es so definiert ist). Dann wären die gestrichenen Klauseln von A wegen des Literals pn+1 wahr; die anderen wären wahr, weil I ein Literal wahr macht, das in der entsprechenden (kleineren) Klausel in A0 ist. Dies ist ein Widerspruch zur Voraussetzung „A unerfüllbar“. Also ist A0 unerfüllbar und analog A1 ; nach Induktion gilt ∅ ∈ Res∗ (A0 ) und ∅ ∈ Res∗ (A1 ). Wenn wir die Resolventen, die zu ∅ ∈ Res∗ (A0 ) führen, analog in A bilden, so erhalten wir entweder ∅ ∈ Res∗ (A) und sind fertig, oder eine verwendete Klausel hat in A zusätzlich das Literal ¬pn+1 . Es ergibt sich also {¬pn+1 } ∈ Res∗ (A) und analog {pn+1 } ∈ Res∗ (A). Ein weiterer Resolutionsschritt führt nun auf ∅ ∈ Res∗ (A). 2 Die Anwendung besteht oft darin, dass zu prüfen ist, ob sich aus einer Reihe von Voraussetzungen eine Folgerung ergibt. Dazu fügt man die negierte Folgerung den Voraussetzungen hinzu und prüft nun die Unerfüllbarkeit. Trifft diese zu, so ist die Folgerung korrekt. Beispiel 5.18. Gegeben sei z.B. p ∧ q → r, q ∧ r → r′ und p ∧ q. Gilt dann r′ ? Wir negieren r′ und bringen alles in KNF; diese ist unerfüllbar gdw. r′ Folgerung ist nach Satz 4.10. Hier werden p∧q → r und q ∧r → r′ zu Klauseln (1) ¬p∨¬q ∨r und (2) ¬q ∨¬r ∨r′ ; p ∧ q zerlegen wir in (3) p und (4) q; und schließlich haben wir (5) ¬r′ . Die Eingabe ist also {{¬p, ¬q, r}, {¬q, ¬r, r′ }, {p}, {q}, {¬r′ }}. Wir resolvieren (1) und (2) zu (6) {¬p, ¬q, r′ }, dies mit (5) zu (7) {¬p, ¬q}, dies mit (4) zu (8) {¬p} und dies mit (3) zu ∅. Also ist r′ in der Tat eine Folgerung. Darstellung auch als Liste; z.B. letzte Zeile: (8) {¬p} (4),(7) Das Resolutionsverfahren kann i.A. sehr aufwendig sein; für die sogenannten Horn-Klauseln ist es aber effizient. Das sind Klauseln der Form {¬p1 , . . . , ¬pn , p} (entsprechend p1 ∧. . .∧pn → p) bzw. {¬p1 , . . . , ¬pn } bzw. {p}, also mit höchstens einem nicht negierte Atom. Die EingabeKlauseln (1) bis (5) im letzten Beispiel sind Horn-Klauseln. Prof. Dr. W. Vogler Universität Augsburg Mod. und Analyse techn. Systeme 6 TEMPORALE LOGIK 6 54 Temporale Logik 6.1 LTL In Systemabläufen ändern Formeln ihren Wahrheitswert: Ist x = 1, so nicht mehr nach der Zuweisung x = x + 1. Der Zusicherungs- oder Goare-kalkül ist nur geeignet für terminierende Systeme (z.B. Programme, die ein Ergebnis liefern). Viele Systeme terminieren nicht, sondern sollen immer wieder auf Anforderungen reagieren (sogenannte reaktive Systeme): Betriebssysteme, Schaltkreise, Kommunikationsprotokolle . . . (oft parallel / verteilt) Beispiel 6.1. Spezifikationen, die über Abläufe reden: i) Es greifen nie zwei Prozesse gleichzeitig auf denselben Datensatz zu. (wechselseitiger Ausschluß, mutual exclusion, MUTEX). ii) Es erscheint immer wieder eine Eingabeaufforderung (prompt). iii) Immer, wenn eine Anforderung (request, r) kommt, wird diese nach einer Weile erfüllt (granted, g). Formulierung in Prädikatenlogik: ∀t1 r(t1 ) → ∃t2 t2 ≥ t1 ∧ g(t2 ) 2 Idee: keine explizite Modellierung der Zeit (Axiome dafür sind kompliziert, Formeln unübersichtlich); besonders günstig, wenn wir sonst nur Aussagenlogik brauchen. G : (von jetzt an) immer, always (globally); 2 F : irgendwann (ab jetzt), eventually (finally); 3 Damit 6.1 iii) formal als G (r → F g); hier soll g jeweils irgendwann „ab jetzt“, also nach r gelten. Eigenschaften i) - iii) aus 6.1 sollen für alle Abläufe gelten, die typischerweise unendliche Folgen von Zuständen sind. (Systeme, die wir betrachten, machen unendlich viele Schritte.) Zeit ist hier also diskret: X : im nächsten Zustand, next(time), ◦ Im folgenden sei wie in Kapitel 4 eine Menge P = P 0 von Atomen (atomare Formeln) gegeben. Systemzustände sind evtl. sehr detailliert; wir können von diesen Details abstrahieren – uns interessiert nur, welche Atome wahr sind. (L in 6.2 leistet gerade diese Abstraktion.) Anhand dieser Information können wir z.B. prüfen, ob jedem Zustand, in dem r wahr ist, ein Zustand folgt, in dem g wahr ist. Definition 6.2. Ein Ablauf π = s0 , s1 , . . . ist eine unendliche Folge von Zuständen si aus einer Menge S von Zuständen mit einer Bewertung L : S → P(P) (Potenzmenge von P). π j = sj , sj+1 , . . . ist das j-te Suffix von π. Die Idee ist, daß p im Zustand s gilt, falls p ∈ L(s); L(s) ist also im Sinne von Kapitel 4 eine Interpretation (Modell) – hier sind Abläufe die Modelle, siehe Definition 6.4. Wir schreiben Prof. Dr. W. Vogler Universität Augsburg Mod. und Analyse techn. Systeme 6 TEMPORALE LOGIK 55 in Abläufen auch L(si ) statt si ; dann ist π = {p}, {p, r}, {p}, {p, r} . . . ein Ablauf, den wir formaler schreiben als π = ({p}, {p, r})ω ; ähnlich wie ∗ in regulären Ausdrücken für beliebige endliche Wiederholung steht, steht ω für unendliche Wiederholung. Die folgende Logik redet über Abläufe, eine lineare Struktur; daher heißt sie Linear Time Logic, LTL – oder auch genauer PLTL, da wir ansonsten nur Aussagenlogik verwenden: Definition 6.3. (Syntax von LTL/PLTL) Formeln von PLTL (Propositional Linear Time Logic): TFor P (TFor ) ist die kleinste Menge mit: (T1) p ∈ P ⇒ p ∈ TFor (T2) A, B ∈ TFor ⇒ ¬A, A ∧ B, A ∨ B, A → B, A ↔ B ∈ TFor (Klammerung wie üblich; ¬, G , F und X (T3) binden am stärksten, U (T4) stärker als die restlichen Operatoren) (T3) A ∈ TFor ⇒ G A, F A, X A ∈ TFor (T4) A, B ∈ TFor ⇒ A U B ∈ TFor (until) Definition 6.4. (Semantik von LTL) Sei π = s0 , s1 , . . . ein Ablauf. A ∈ TFor gilt für π (π erfüllt A, π |= A) ist wie folgt definiert: (T1) π |= p, wenn p ∈ L(s0 ) (p gilt im 1. Zustand) (T2) • π |= ¬A, wenn nicht π |= A. • π |= A ∨ B, wenn π |= A oder π |= B etc. (T3) • π |= X A, wenn π 1 |= A Mit π = ({p}, {p, r}, ∅, {p, r′ })ω gilt also π |= X r, nicht aber π |= r oder π |= X X r. Warum brauchen wir π 1 = {p, r}, ∅, {p, r′ }({p}, . . .)ω ? Können wir nicht einfach sagen, daß A im Zustand s1 gelten muß? • π |= G A, wenn Bei obigem π gilt π |= G (r → p), aber nicht π |= G p • π |= F A, wenn Es würde auch Sinn machen zu verlangen, daß A irgendwann in der Zukunft gelten soll – wie ändert das die Def? Hier ist also eine formale Semantik-Def. nötig, da es verschiedene sinnvolle Möglichkeiten gibt. Variante bei uns als Oben gilt π |= F (r′ ∧ X p). (T4) π |= A U B, wenn es ein j ≥ 0 gibt mit: π j |= B und für alle 0 ≤ i < j : π i |= A. A gilt also, bis schließlich B gilt – starkes until; weitere Design-Entscheidung: A muß hier bis, aber nicht im Zustand gelten, in dem B gilt Oben gilt π |= p U r, aber nicht π |= p U r′ Prof. Dr. W. Vogler Universität Augsburg Mod. und Analyse techn. Systeme 6 TEMPORALE LOGIK 56 A ist gültig / erfüllbar, wenn alle π / ein π A erfüllen. Wie bisher bedeutet logisch äquivalent, =||=: dieselben π erfüllen links wie rechts; entsprechend bedeutet M |= A: ”A folgt aus M.” Beispiel 6.5. Sei π = ({p}, {p, r}, {r, q}, {r, q ′ })ω . π |= p . . . π |= G p . . . π |= X p . . . π |= r . . . ′ π |= p U q . . . π |= G (p U q) . . . π |= p U q . . . π |= G (p → F q ′ ) . . . π |= G (r → F p) . . . π |= G (p → X r) ... Es ist wieder A ∨ B =||= ¬A → B etc., d.h. man kann ∨, ∧, ↔ als Abkürzungen auffassen. Proposition 6.6. i) G A =||= ¬F ¬A ii) F A =||= true U A iii) A U B =||= ¬(¬B U (¬A ∧ ¬B)) ∧ F B Beweis: i) π i |= A gilt für alle i gdw. es für kein i falsch ist. (∀xA =||= ¬∃x¬A) ii) Übung iii) ¬B U (¬A ∧ ¬B) besagt, dass B falsch bleibt bis auch noch A falsch ist; mit anderen Worten: (∗) bevor B wahr wird (wenn überhaupt), ist A einmal falsch. Gilt nun A U B für einen Ablauf π, ist (∗) offenbar falsch und F B gilt. Gelte umgekehrt ¬(¬B U (¬A ∧ ¬B)) ∧ F B, und sei j minimal mit π j |= B; da (∗) falsch ist, gilt für alle 0 ≤ i < j : π i |= A. 2 Man kann also bei Bedarf auch G und F als Abkürzungen auffassen. Auf Teil iii) werden wir im nächsten Abschnitt zurückkommen. Man kann wieder Axiome, Regeln, Herleitungen und vollständige Kalküle untersuchen. Meist steht aber das sogenannte model-checking im Vordergrund (s.u.); wir beschränken uns deshalb auf semantische Überlegungen. Prof. Dr. W. Vogler Universität Augsburg Mod. und Analyse techn. Systeme 6 TEMPORALE LOGIK Satz 6.7. 57 i) |= G (A → B) → (G A → G B), ii) |= G X A ↔ X G A iii) |= (A ∧ G (A → X A)) → iv) |= X F A → F A Beweis: i) Bemerkung: C → (D → E) =||= C ∧ D → E Sei π beliebig. Erfüllt jedes π i A → B und A, so auch B; d.h. π |= G B. (Dies entspricht dem folgenden Gesetz der Prädikatenlogik: (∀xA → B) → ((∀xA) → (∀xB)). ii) Für alle i ≥ 0 gilt: π i |= X A gdw. für alle i ≥ 0: (π i )1 = π i+1 = (π 1 )i |= A gdw. π 1 |= G A iii) π |= A ∧ G (A → X A) heißt π 0 |= A und für alle i ∈ N (π i |= A ⇒ π i+1 |= A). Nach vollständiger Induktion gilt also π i |= A für alle i ∈ N. iv) Übung 2 Beispiel 6.8. MUTEX: Zwei (oder mehr) Prozesse fordern eine Ressource an (z.B. Zugriff auf Datensatz oder Drucker); wenn sie das tun, gilt (ggf. wiederholt) r1 bzw. r2 (vgl. 6.1 iii)). Wenn sie die Ressource bekommen / haben (man sagt: “sie sind in ihrem kritischen Bereich”), „erlischt“ r1 bzw. r2 und es gilt g1 bzw. g2 , bis sie freigegeben wird. Anforderungen für Lösung / Scheduler: α) Nur einer zur Zeit hat die Ressource (MUTEX-Eigenschaft; vgl. 6.1 i)) G ¬(g1 ∧ g2 ) β) Jede Anforderung wird erfüllt (vgl. 6.1 iii)) G (r1 → F g1 ), G (r2 → F g2 ) α ist eine typische Sicherheitseigenschaft (”Etwas Schlechtes geschieht nie.”), wie alle Formeln G A mit A ∈ For (nicht TFor ). β ist eine Lebendigkeitseigenschaft (”Etwas Gutes geschieht schließlich.”); weitere Beispiele sind 6.1 ii) ( G F p ) bzw. „Programm hält (h) schließlich endgültig“ F G h. Typisch: Ist α bzw. β zu einem Zeitpunkt nicht wahr, so wird α auch in keiner Fortsetzung wahr; β kann immer noch erfüllt werden. Satz: Jede Eigenschaft ist Konjunktion einer Sicherheits- und einer Lebendigkeitseigenschaft. Einfache Lösung: Ressource immer wieder abwechselnd vergeben; funktioniert aber nur wenn jeder immer wieder anfordert, also G F r1 ∧ G F r2 ; das können wir nicht annehmen. Prof. Dr. W. Vogler Universität Augsburg Mod. und Analyse techn. Systeme 6 TEMPORALE LOGIK 58 Damit haben wir einige nützliche Schemata kennengelernt, d.h. Formeln dieser Bauart sind oft nützlich. • G ¬b: Etwas Schlechtes b geschieht nie. • G F p: Immer wieder geschieht p, was man auch als „unendlich oft p“ lesen kann. • F G h: Schließlich gilt h endgültig, z.B. „das Programm hält (h) schließlich endgültig“. • G (r → F g): Jedesmal folgt der Anforderung r schließlich eine positive Antwort g. Manchmal wird im Gegensatz dazu eine Anforderung auch ignoriert; nur wenn man immer wieder anfordert, wird die Anforderung erfüllt. Wenn dies gewährleistet ist, können wir schreiben: . . . Man kann dies so verstehen, dass man unendlich oft anfordern muss, um eine positive Antwort zu bekommen – was man aber realistisch nicht kann! Tatsächlich muss die Antwort aber nach einiger Zeit kommen, wenn das System die formulierte Eigenschaft hat; dann kann man die Wiederholung der Anforderung einstellen – das ist realistisch. Unterscheidet sich die letzte Formel von G F r → F g? Und wie ist es mit . . . G F r → G F g? Anwendung temporaler Logik oft als Model-Checking Spezifikation ist eine LTL-Formel A. Man beschreibt alle System-Abläufe der (evtl. geplanten) Implementierung durch eine Struktur K und prüft, ob alle Abläufe von K A erfüllen (d.h. Modelle von A sind). Definition 6.9. Eine Kripke-Struktur K = (S, →, L, s0 ) besteht aus einer Menge S von Zuständen mit Startzustand s0 , einer Bewertung L : S → P(P) und einer Transitionsrelation →⊆ S × S, so daß für alle s ∈ S ein s′ mit s → s′ (d.h. (s, s′ ) ∈→) existiert. (vgl. endliche Automaten) K modelliert z.B. die Abläufe eines interaktiven Programms, wobei ein Zustand durch die Variablenwerte und den Programmzähler (das Restprogramm) gegeben ist. Ein Ablauf π von K ist eine unendliche Folge von Zuständen beginnend mit s0 (in der ein s ohne s → s′ nicht auftreten könnte), also π = s0 , s1 , s2 , . . . mit si → si+1 für alle i ≥ 0. Die Zustände eines solchen Ablaufs heißen erreichbar. Im Graphen K ist π ein unendlicher Weg (evtl. mit wiederholten Zuständen). K erfüllt ein A ∈ T F or, falls für alle Abläufe π von K gilt π |= A. Prof. Dr. W. Vogler Universität Augsburg Mod. und Analyse techn. Systeme 6 TEMPORALE LOGIK 59 Es gibt viele Ideen (und tools) wie man auch für sehr große (z.T. sogar unendliche) K automatisch prüfen kann, ob K ein A erfüllt. Als Beispiel für Definition 6.9 diskutieren wir die Modellierung einer MUTEX-Lösung: Eine solche Lösung ist eine Kripke-Struktur, die die Formeln unter α und β (s.o.) erfüllt. Bemerkung: Tatsächlich müssen noch weitere Eigenschaften gelten; ist z.B. →= {(s0 , s0 )} und L(s0 ) leer, gelten die gewünschten Formeln – die Prozesse können gar nicht erst anfordern. Graphische Konventionen: p1 p p α s Zustand s mit L(s) = {p1 , p2 } 2 q s → s′ Startzustand s r 1 s 0 s 1 5 r2 s s 2 3 r1 r 2 g1 s g r2 1 4 s 8 g1 g2 g 2 s 6 r 1 g2 s 7 Abbildung 15: Idee für K1 (vgl. Abb. 15): Jeder Prozeß kann anfordern, erhält die Ressource – soweit frei – und gibt sie wieder zurück; falls beide Prozesse anfordern (Zustand s3 ) würfelt der Scheduler. In jedem Ablauf von K1 wird angefordert (F (r1 ∨ r2 )); das ist in Wirklichkeit nicht so, also ergänzen wir bei s0 eine Schleife (vgl. Abb. 16). Die Schleife repräsentiert Aktivitäten der Prozesse, die nichts mit der Ressource zu tun haben. (Bzw.: Schleife als technischer Trick, um im Prinzip doch endliche Abläufe einzubeziehen.) Inspektion von K1 zeigt, daß K1 G ¬(g1 ∧ g2 ) erfüllt. Bemerkung: Wird K1 aus einem Programm erzeugt, liegt es zunächst nicht explizit vor. In einer ersten Phase wird K1 also systematisch erzeugt – BFS/DFS auf einem noch nicht existenten Graphen. Diese Erreichbarkeitsanalyse zeigt, daß s8 von s0 nicht erreichbar ist, also in Abläufen gar nicht auftreten kann. Prof. Dr. W. Vogler Universität Augsburg Mod. und Analyse techn. Systeme 6 TEMPORALE LOGIK 60 Aber: π = s0 , (s5 , s3 , s4 )ω ̸|= G (r2 → F g2 ), denn π 1 = (s5 , s3 , s4 )ω |= r2 , jedoch π 1 ̸|= F g2 . Verbesserung (K2 in Abb. 16): Wer zuerst kommt, mahlt zuerst – aber dann kommt der andere dran. s r 1 s s 1 s s 2 g 3 r1 r 2 1 s 0 s 5 r2 6 g r1 r 2 g r2 1 s 2 7 r 1 g2 s 8 4 Abbildung 16: Beachte, daß L(s3 ) = L(s6 ); L abstrahiert also von (für diese Lösung wesentlichen!) Details, in denen s3 und s6 sich unterscheiden. Offenbar erfüllt K2 die Formel G ¬(g1 ∧g2 ). Wir stellen fest: • K2 [s2 ] (K2 mit s2 als Startzustand) und K2 [s4 ] erfüllen F g1 . • Erfüllt K2 [s′ ] F g1 für alle s′ mit s → s′ , so auch K2 [s]; vgl. Satz 6.7 iv). • Also erfüllen K2 [s3 ], damit K2 [s1 ], damit K2 [s8 ] und schließlich K2 [s6 ] F g1 . • Erfüllt ein Ablaufsuffix π ′ r1 , so beginnt π ′ mit s1 , s3 , s6 oder s8 . Daher auch π ′ |= F g1 . • Damit gilt für jeden Ablauf π die Formel G (r1 → F g1 ). Also: K2 erfüllt G (r1 → F g1 ) und mit Symmetrie auch G (r2 → F g2 ); K2 ist also eine Lösung für das MUTEX-Problem. Typisches Vorgehen: Untersuchung, welche Zustände Teilformeln von A erfüllen. (vgl. Wahrheitstafeln) Tatsächlich geht man beim LTL-Model-Checking aber anders vor; die Überlegungen hier sind eher eine Vorbereitung für Abschnitt 6.3. K2 is stark vereinfacht: Genauso, wie der erste Prozeß im Zustand s0 beliebig „für sich“ arbeiten kann, kann er das in s5 . Wir müssen also bei s5 eine Schleife einfügen – und analog in s7 , s1 und s2 . Dann ergibt sich aber s0 , (s5 )ω ̸|= G (r2 → F g2 ). Ist unsere Lösung falsch? Argument: Dieser Ablauf ist ein Artefakt; 2 unabhängige Prozesse (Prozess 1 vs. Scheduler/Prozess 2) wollen stets einen Schritt machen – in der Realität wird schließlich jeder einen machen, so daß s5 verlassen wird. Prof. Dr. W. Vogler Universität Augsburg Mod. und Analyse techn. Systeme 6 TEMPORALE LOGIK 61 Wir wollen also nur Abläufe betrachten, die die schwache Fairness (progress assumption) erfüllen: Ist ein Prozeß ständig aktiviert (enabled) (z.B. nicht der erste Prozeß in s6 , wohl aber der Scheduler/Prozess 2 in s5 ), so macht er einen Schritt (last step von Prozess i). Um dies formal zu erreichen, gibt es 2 Möglichkeiten: i) Struktur mit Fairness-Bedingung F ⊆ S; (Analogon zu Endzuständen in endlichen Automaten, hier für unendliche Abläufe; vgl. Büchi-Automaten) Eine unendliche Folge wie bisher ist nur dann ein Ablauf, wenn ein s ∈ F unendlich oft durchlaufen wird. Wenn ein fairer Ablauf in den Schlingen bei s1 , s2 , s5 und s7 nicht hängenbleiben soll, so wählen wir z.B. F = {s0 , s4 , s8 }. Jetzt ist s0 , sω5 kein Ablauf mehr, wohl aber s0 , (s1 , s2 , s4 , s5 , s6 , s8 )ω und sω0 . ii) Fairness als Teil der Spezifikation Spezifikation besagt: wenn Ablauf fair, dann G (r1 → F g1 ) etc. Dazu müssen wir in der Kripke-Struktur beschreiben, wer aktiviert ist und wer einen Schritt macht bzw. gemacht hat. Wir fügen Atome en1 , en2 (1 bzw. 2 aktiviert/enabled) und last1 , last2 (letzter Schritt kam von 1 bzw. 2) hinzu und verlangen G (G eni → F lasti ), i = 1, 2, . . . , d.h. die Lebendigkeitseigenschaften heißen jetzt: G ((G en1 → F last1 ) ∧ (G en2 → F last2 )) → G (ri → F gi ), i ∈ {1, 2} ⇒ Aufblähung der Kripke-Struktur, um die Idee von K2 mit den neuen zusätzlichen Atomen zu modellieren, vgl. Abb. 17. s 0 en1,en2 s en1,en2 last1 r 1 1 en1,en2 last1 en1,en2 last2 s' 0 en1 r 1 last2 r 2 s s 3 s'' 0 s' 5 en1,en2 last1 r 2 4 en1 g 1 last1 r 2 Abbildung 17: Wir können also Fairness in LTL spezifizieren. Eine interessante Eigenschaft, die sich nicht beschreiben lässt, ist: Terminierung (t) ist stets möglich. Ein System kann diese Eigenschaft Prof. Dr. W. Vogler Universität Augsburg Mod. und Analyse techn. Systeme 6 TEMPORALE LOGIK 62 haben, aber trotzdem einen Ablauf, indem t nie eintritt; eine LTL-Formel kann mit dieser Situation wohl nicht umgehen. Genauer: die Kripke-Strukturen in Abb. 18 haben im Prinzip dieselben Abläufe (in der „zustandsfreien“ Notation: ∅∗ {t}ω + ∅ω ), erfüllen also dieselben LTLFormeln; nur die erste Kripke-Struktur hat die Eigenschaft. s t s 1 s 0 t s 1 0 s 2 Abbildung 18: Prof. Dr. W. Vogler Universität Augsburg Mod. und Analyse techn. Systeme 6 TEMPORALE LOGIK 6.2 63 CTL Um uns die Grenzen von LTL zu verdeutlichen, können wir eine Kripke-Struktur wie z.B. K1 (Abbildung 15) zu einem unendlichen Baum (s. Abbildung 19) entfalten. Die Abläufe / Berechnungen von K1 sind gerade die unendlichen Wege, die von der Wurzel ausgehen; man nennt den Baum daher Berechnungsbaum (computation tree). r r 1 g1 r 1 r 2 2 r1 r 2 g r2 1 g r2 1 r 1 g2 r r r 2 2 1 Abbildung 19: LTL betrachtet alle Wege, nicht aber die Verzweigungsmöglichkeiten; auf dem linkesten Pfad tritt z.B. nie r2 auf, aber es ist immer unmittelbar möglich (wir können nach rechts abbiegen); auch g2 ist immer möglich, wenn auch nicht mit nur einem Schritt. LTL kann also nicht über die Existenz von Wegen oder alternativen Fortsetzungen reden. Beispiel 6.10. Eine weitere, beim MUTEX-Problem wichtige Eigenschaft wird als nichtblockierend bezeichnet und lässt sich auch nicht ausdrücken: Wann immer der erste bzw. zweite Prozess nicht die Ressource anfordert oder hat, kann er sie sofort anfordern; mit anderen Worten: es gibt in solchen Zuständen immer einen Ablauf mit X r1 bzw. X r2 . Nebenbemerkung: In einfachen Fällen lässt sich etwas erreichen: Die Aussage, dass der erste Prozess sofort anfordern kann (r1 ist initial sofort möglich), lässt sich zwar nicht ausdrücken; das Gegenteil dazu ist aber X ¬r1 . (Auf jedem Weg fordert der erste Prozess nicht sofort an.) Dies ist für K1 falsch, also gilt die ursprüngliche Aussage. Man beachte: K1 ̸|= X ¬r1 ist nicht dasselbe wie K1 |= ¬X ¬r1 ! Auswertung einer LTL-Formel für eine Kripke-Struktur beinhaltet eine All-Quantifikation über die Wege, daher können wir indirekt auch eine Existenz-Quantifikation behandeln. 2 In CTL (Computation Tree Logic) wollen wir über die Existenz von Abläufen reden und auch geschachtelte Quantifikationen erlauben. Dabei wird jede dieser Quantifikationen (A bzw. E ) mit einem der bisherigen temporalen Operatoren G , F , X bzw. U kombiniert. Wie aus Abbildung 19 ersichtlich gilt für K1 also z.B. EF (g1 ∧r2 ). Wegen des linkesten Wegs gilt EG (¬r2 ∧ ¬g2 ), und wie der Baum andeutet gilt AG ¬(g1 ∧ g2 ) (MUTEX-Eigenschaft). Dass immer g2 möglich ist, kann mit AG EF g2 ausgedrückt werden, nicht-blockierend mit AG (¬r1 ∧ ¬g1 → EX r1 ) ∧ AG (¬r2 ∧ ¬g2 → EX r2 ). Prof. Dr. W. Vogler Universität Augsburg Mod. und Analyse techn. Systeme 6 TEMPORALE LOGIK 64 Definition 6.11. (Syntax von CTL) Formeln von CTL (Computation Tree Logic): CTFor P (CTFor ) ist die kleinste Menge mit: (CT1) p ∈ P ⇒ p ∈ CTFor (CT2) A, B ∈ CTFor ⇒ ¬A, A ∧ B, A ∨ B, A → B, A ↔ B ∈ CTFor (CT3) B ∈ CTFor ⇒ AG B, EG B, AF B, EF B, AX B, EX B ∈ CTFor (CT4) B, C ∈ CTFor ⇒ A (B U C), E (B U C) ∈ CTFor (2 Operatoren A (. U .) und E (. U .)) Klammerung wie üblich; ¬, A , E , AG , EG , AF , EF , und AX , EX (T3) binden am stärksten, U (CT4) stärker als die restlichen Operatoren Bei CTL sind die Modelle (Interpretationen) direkt Kripke-Strukturen, wobei wir aber die Formel bei einem Zustand auswerten wollen. (vgl. K[s] im letzten Abschnitt) Definition 6.12. (Semantik von CTL) Sei K eine Kripke-Struktur, s ein Zustand. A ∈ CTFor gilt für (K, s) ((K, s) erfüllt A, K, s |= A) ist wie folgt definiert: (CT1) K, s |= p, wenn p ∈ L(s) (p gilt im Ausgangszustand) (CT2) • K, s |= ¬A, wenn nicht K, s |= A. • K, s |= A ∨ B, wenn K, s |= A oder K, s |= B etc. (CT3) • K, s |= AX B (K, s |= EX B), wenn für alle Abläufe (einen Ablauf) s′0 (= s), s′1 , . . . gilt K, s′1 |= B. Z.B. gilt K1 , s0 |= EX r1 , nicht aber K1 , s2 |= EX r1 oder K1 , s0 |= AX r1 . • K, s |= AG B (K, s |= EG B), wenn Wie oben schon angekündigt gilt also tatsächlich K1 , s0 |= AG ¬(g1 ∧ g2 ) und K1 , s0 |= EG (¬r2 ∧ ¬g2 ), es gilt aber nicht K1 , s0 |= AG (¬r2 ∧ ¬g2 ). AG kann man lesen als „für jeden erreichbaren Zustand gilt“. Ferner gilt K1 , s0 |= AG (¬r1 ∧ ¬g1 → EX r1 ). Auf dem linkesten Weg gilt immer: Wenn der erste Prozess anfordert, so erhält er auf jeden Fall im nächsten Schritt Zugriff – auch wenn man s6 entfernt (→ K1′ ); man könnte daher erwarten, dass K1′ , s0 |= EG (r1 → AX g1 ) gilt; dies ist aber falsch, denn jeder r-Zustand hat einen Folgezustand, in dem g1 nicht gilt. Beachte: Beim Auswerten von r1 → AX g1 vergessen wir den ursprünglichen Pfad. • K, s |= AF B (K, s |= EF B), wenn Wie oben schon angekündigt gilt also tatsächlich K1 , s0 |= AG EF g2 , d.h. für jeden erreichbaren Zustand gilt, dass ein g2 -Zustand erreichbar, also g2 möglich ist. Ferner gilt (fälschlicherweise) K1 , s0 |= AF (r1 ∨ r2 ) (zumindest ein Prozess wird die Ressource anfordern). Prof. Dr. W. Vogler Universität Augsburg Mod. und Analyse techn. Systeme 6 TEMPORALE LOGIK 65 (CT4) K, s |= A (B U C) (K, s |= E (B U C)), wenn Es gilt K1 , s0 |= AG (g1 → A (g1 U (¬g1 ∧ ¬g2 ))), d.h. wann immer der erste Prozess die Ressource hat, gilt dies bis die Ressource schießlich ganz frei wird. Achtung: eine Formel wie A (g1 → (g1 U (¬g1 ∧ ¬g2 ))) scheint dasselbe zu besagen, ist aber nicht einmal zulässig. Zudem wird hier nur der Fall behandelt, dass der erste Zustand g1 erfüllt Schließlich schreiben wir K |= A wenn K, s0 |= A für den Startzustand s0 . A ist gültig / erfüllbar, wenn alle K / ein K A erfüllen. Sollte man hier besser K, s statt K schreiben? Wie bisher bedeutet logisch äquivalent, =||=: dieselben K erfüllen links wie rechts; entsprechend bedeutet M |= A: ”A folgt aus M.” Neben der MUTEX- und der Non-Blocking-Eigenschaft lässt sich auch die entsprechende Lebendigkeitseigenschaft in CTL ausdrücken: AG (r1 → AF g1 ). Im Vergleich zu G (r1 → F g1 haben wir einfach ein A vor die LTL-Operatoren gesetzt. Dies funktioniert z.B. auch bei K |= G F p (auf allen Wegen gilt p unendlich oft): Wenn K |= AG AF p, wird man von jedem erreichbaren Zustand aus (AG ) zwangsläufig wieder einen p-Zustand erreichen; beide Aussagen sind falsch gdw. man von s0 ein s erreichen kann, bei dem ein Ablauf startet, auf dem p immer falsch ist. Ferner sind X F p und AX AF p äquivalent. (Egal wie man einen Schritt macht, bei beliebigem Weiterlaufen trifft man p.) Dies Vorgehen schlägt fehl für G F p → G F q. Dies sagt, dass q unendlich oft auf einem Weg gilt, der unendlich oft p erfüllt; AG AF p → AG AF q hingegen stellt nur eine Forderung, wenn jeder Weg unendlich oft p erfüllt. Tatsächlich lässt sich die LTL-Formel gar nicht in CTL ausdrücken. Auch die starke Fairness-Eigenschaft G F en → F done lässt sich nicht ausdrücken. Satz 6.13. i) In CTL kann die MUTEX- und die entsprechende Lebendigkeits-Eigenschaft ausgedrückt werden. ii) Immer mögliche (unter Fairness schließliche) Terminierung (AG EF t) und die NonBlocking-Eigenschaft des MUTEX-Problems (für beide Prozesse gilt AG (¬r ∧ ¬g → EX r)) lassen sich in CTL, nicht aber in LTL ausdrücken. iii) Zu den LTL-Formeln F G q, G F p → G F q und G F en → F done gibt es keine äquivalenten CTL-Formeln. Beweis: i) s.o. ii) AG EF t haben wir bereits mit Abbildung 18 behandelt. Für AG (¬r ∧ ¬g → EX r) ersetzen wir in der Abbildung t durch r: Dann gilt die Eigenschaft links, aber nicht rechts; LTL-Formeln können die Kripke-Strukturen aber nicht unterscheiden. iii) Zu F G q wird der Beweis in Baier, Katoen: Principles of Model Checking auf S. 337 skizziert; der Beweis lässt sich für G F p → G F q modifizieren, wenn man in jedem Zustand zusätzlich p wahr sein lässt, so dass G F p in jedem Fall gilt. Prof. Dr. W. Vogler Universität Augsburg Mod. und Analyse techn. Systeme 6 TEMPORALE LOGIK 66 2 Wir zeigen jetzt u.a. ein Analogon zu Satz 6.7 iii). Satz 6.14. i) |= (B ∧ AG (B → AX B)) → AG B (induktiver Beweis von AG B) ii) |= AX (B → C) ∧ AX B → AX C Beweis: i) Angenommen, K |= B und K |= AG (B → AX B), d.h. für jeden erreichbaren Zustand s gilt K, s |= B → AX B. Sei ferner s0 , s1 , . . . ein Ablauf. Dann gilt K, s0 |= B und für alle i ≥ 0 gilt K, si |= B → AX B, d.h. insbesondere K, si |= B =⇒ K, si+1 |= B. Mit Induktion fertig. ii) Angenommen, K, s0 |= AX (B → C) ∧ AX B; dann gilt in jedem Folgezustand B → C und B, also auch C mit Modus Ponens. 2 Als nächstes wollen wir noch untersuchen, wie man CTL-Operatoren durch andere ausdrücken kann. Satz 6.15. i) AG B =||= ¬EF ¬B; EG B =||= ¬AF ¬B ii) EF B =||= E (true U B) AF B =||= A (true U B) iii) AX B =||= ¬EX ¬B iv) A (B U C) =||= ¬E (¬C U (¬B ∧ ¬C)) ∧ AF C vgl. Proposition 6.6 iii): B U C =||= ¬(¬C U (¬B ∧ ¬C)) ∧ F C Prof. Dr. W. Vogler Universität Augsburg Mod. und Analyse techn. Systeme 6 TEMPORALE LOGIK 67 Beweis: i) B gilt genau dann in allen erreichbaren Zuständen, wenn es nicht zutrifft, dass B in einem erreichbaren Zustand falsch ist. Es gibt genau dann einen Ablauf, in dem B in allen Zuständen gilt, wenn es nicht zutrifft, dass B in jedem Ablauf einmal falsch ist. ii) Skizze: Proposition 6.6 ii) gilt für Abläufe, also: Ein Ablauf (oder alle) erfüllt genau dann irgendwann B, wenn er (oder alle) true U B erfüllt. iii) direkt iv) Skizze: Zunächst: (*) Alle Abläufe erfüllen ¬(¬C U (¬B ∧ ¬C)) genau dann, wenn es keinen Ablauf gibt, der ¬C U (¬B ∧ ¬C) erfüllt. Proposition 6.6 iii) besagt: Wenn B U C für alle Abläufe gilt, dann gilt für alle Abläufe F C und auch ¬(¬C U (¬B ∧ ¬C)). Das heißt aber: Es gilt AF C und wegen (*) ¬E (¬C U (¬B ∧ ¬C). Andererseits: Wenn es keinen Ablauf gibt, der ¬C U (¬B ∧ ¬C) erfüllt, und wenn jeder Ablauf F C erfüllt, so erfüllt wegen (*) jeder Ablauf ¬(¬C U (¬B ∧ ¬C)) ∧ F C, also B U C nach Proposition 6.6 iii). 2 Diese Aussagen zeigen: Wir können wieder AX B als Abkürzung auffassen, d.h. in unseren Untersuchungen auf AX verzichten, solange wir EX haben ( – dies gilt auch umgekehrt). Wenn wir E U haben, können wir einerseits auf EF und damit auf AG verzichten; andererseits kann man EG als auch A U mit AF ausdrücken (Teil i) und iv)), und jeweils umgekehrt (Teil i) und ii)). Wir können uns also bei den temporalen Operatoren z.B. auf {E U , EX , AF } oder auf {E U , EX , EG } beschränken, d.h. dieses sind Basis-Mengen von Temporaloperatoren. Prof. Dr. W. Vogler Universität Augsburg Mod. und Analyse techn. Systeme 6 TEMPORALE LOGIK 6.3 68 CTL-Model-Checking Gegeben sei eine endliche Kripke-Struktur K und eine CTL-Formel B; wir wollen prüfen, ob K |= B. Dazu beschriften wir die Zustände von K bottom-up mit Teilformeln von B, die in den jeweiligen Zuständen gelten. Zunächst ist jeder Zustand s mit den in B auftretenden Atomen p beschriftet, soweit p ∈ L(s). Für die Teilformel C → D nehmen wir an, dass die Beschriftungen für C und D schon erfolgt sind, und beschriften s mit C → D, falls s mit D oder nicht mit C beschriftet ist. Analog prüfen wir für ¬C, ob s nicht mit C beschriftet ist. Diese Beschriftungsphasen benötigen Zeit linear in |S|. Wir werden sicher auch die Kanten des Graphen K berücksichtigen müssen. Unser Ziel ist, jede Phase in linearer Zeit in der Größe des Graphen (Zahl der Kanten plus Zustände, also | S ∪ → |) durchzuführen. Am Ende wissen wir dann für jeden Zustand s, also insbesondere für s0 , ob K, s |= B, wobei der Gesamtaufwand linear in der Größe des Graphen und der Formel (|B|) war, d.h. O(| S ∪ → | · |B|). Es fehlt uns noch die Behandlung der temporalen Operatoren. Wir verwenden zunächst nur {E U , EX , AF }, ersetzen dann aber AF durch EG . Da die Ersetzung von anderen Operatoren die Formel vergrößern, gilt unsere Aufwandsanalyse zunächst nur für Formeln mit den Operatoren {E U , EX , EG }; für eine Verallgemeinerung müssen dann doch alle temporalen Operatoren behandelt werden. EX C: Wir beschriften s mit EX C, wenn ein Folgezustand s′ (also s → s′ ) mit C beschriftet ist. Dazu müssen wir von jedem Zustand aus schlimmstenfalls alle ausgehenden Kanten durchmustern, also linear. Bsp.: Mit EX r1 werden in Abb. 22 s0 , s1 , s5 , s6 , s7 und s8 beschriftet. Daher werden die Zustände mit EX EX r1 beschriftet, die eine Kante zu diesen Zuständen haben, also s0 , s2 , s4 , s5 , s6 , s7 und s8 . K2 erfüllt also beide Formeln. Alle neuen Beschriftungen sind korrekt; alle nötigen neuen Beschriftungen werden gemacht (Vollständigkeit). AF C AF C AF C AF C AF C AF C AF C Abbildung 20: AF C: Beschrifte zunächst alle s mit AF C, wenn s mit C beschriftet. Beschrifte dann iterativ jedes s mit AF C, falls alle Folgezustände s′ mit AF C beschriftet; stop, wenn kein solches s mehr existiert. s.Abb. 20 Bps.: Für AF g1 und Abb. 22 haben wir dies schon in Abschnitt 6.1 gemacht: Zunächst Prof. Dr. W. Vogler Universität Augsburg Mod. und Analyse techn. Systeme 6 TEMPORALE LOGIK 69 werden s2 und s4 beschriftet, dann in dieser Reihenfolge s3 , s1 , s8 und s6 . K2 erfüllt also diese Formel nicht. Man kann die Menge der neu beschrifteten Zustände als kleinsten Fixpunkt sehen. Hier ist der Aufwand nicht offensichtlich. Alle neuen Beschriftungen sind korrekt (Induktion über „laufende Nummer“ der Beschriftung); für die Vollständigkeit (mit Induktion): gilt AF C in s, so ist die maximale Länge eines Wegs von s, der in seinem ersten C-Zustand endet, < |S|. Initial werden alle Zustände mit maximaler solcher Weglänge = 0 beschriftet. Dann zeigt man den Induktionsschritt: Sind alle Zustände mit maximaler Weglänge ≤ n beschriftet, so werden auch alle Zustände mit maximaler Weglänge n + 1 beschriftet; ist nämlich die maximale Weglänge n + 1, so haben alle Folgezustände maximale Weglänge ≤ n, sind also schon beschriftet. E (C U D) E (C U D) E (C U D) C C Abbildung 21: E (C U D): Beschrifte zunächst alle s mit E (C U D), wenn s mit D beschriftet. Beschrifte dann iterativ jedes s mit E (C U D), falls es mit C und mindestens ein Folgezustand s′ mit E (C U D) beschriftet; stop, wenn kein solches s mehr existiert. Dies kann man als Breiten(- oder Tiefen)suche anlegen, wenn man zunächst alle Kanten umdreht, bei den direkt mit D beschrifteten Zuständen beginnt (d.h. diese kommen in die Warteschlange oder auf den Stack) und Zustände, die nicht mit C beschriftet sind, als bereits besucht behandelt, d.h. ignoriert. Also linearer Aufwand. s r 1 s s 1 s s 2 3 r1 r 2 g1 s g r2 1 4 0 s 5 r2 6 g r1 r 2 2 s 7 r 1 g2 s 8 Abbildung 22: Abb. 16 wiederholt Bsp.: Für E (¬g2 U g1 ) und Abb. 22 müsste man zunächst noch ¬g2 eintragen; dann werProf. Dr. W. Vogler Universität Augsburg Mod. und Analyse techn. Systeme 6 TEMPORALE LOGIK 70 den initial s2 und s4 beschriftet. Von diesen können wir rückwärts s1 und s3 (in beliebiger Reihenfolge) erreichen, die ¬g2 tragen und daher auch beschriftet werden. Von diesen können wir rückwärts als neue Zustände s0 (wird beschriftet) und s8 (gilt wegen g2 als schon besucht) erreichen; schließlich können wir von s0 rückwärts noch s7 erreichen, das wieder wegen g2 als schon besucht gilt. K2 erfüllt diese Formel. Alle neuen Beschriftungen sind korrekt. Zur Vollständigkeit (wieder mit Induktion): Falls E (C U D), so ist die kürzeste Weglänge via C-Zuständen bis zu einem D-Zustand < |S|. Initial werden alle Zustände mit Weglänge 0 beschriftet. Dann zeigt man den Induktionsschritt: Sind alle Zustände mit Weglänge ≤ n beschriftet, so werden auch alle Zustände mit Weglänge n+1 beschriftet; ist nämlich die Weglänge n + 1, so hat ein Folgezustand Weglänge ≤ n, ist also schon beschriftet. EG C: Dies ist dual zu AF C; daher neue Idee: beschrifte zunächst alle Zustände mit EG C. Dann lösche diese Beschriftung, wenn keine Beschriftung C vorliegt. Lösche dann iterativ EG C bei s, wenn kein Folgezustand mit EG C beschriftet. s p s s 1 s s 2 p 3 s s 5 p 6 4 s p p p p 0 p s 7 8 Abbildung 23: Bsp.: Für K in Abbildung 23 und EG p beschriftet man zunächst alle Zustände und löscht dann die Beschriftung von s1 . Jetzt hat s3 keinen beschrifteten Folgezustand; löschen; dann dasselbe für s6 ; dies ist ein stabiler Zustand. K erfüllt diese Formel. Prof. Dr. W. Vogler Universität Augsburg Mod. und Analyse techn. Systeme 6 TEMPORALE LOGIK 71 Man kann die Menge der neu beschrifteten Zustände als größten Fixpunkt sehen. Aufwand wieder nicht offensichtlich; wir brauchen also noch eine neue Idee: Ein unendlicher Weg zu EG C muss sich wiederholen; wichtig sind also Kreise, auf denen jeder Zustand C erfüllt – wie s2 s4 s2 und s7 s8 s7 im obigen Beispiel. Kreise (evtl. mehrere zusammen) bilden sogenannte starke Zusammenhangskomponenten (SCC); darunter verstehen wir eine maximale Menge von Ecken in einem Graphen (bzw. Zustände in einer Kripke-Struktur), bei der es von jeder Ecke zu jeder Ecke einen Weg gibt. (Hier soll eine Ecke allein nur dann eine SCC bilden, wenn sie eine Schlinge hat.) Alle SCCs können in linearer Zeit mit einer modifizierten Tiefensuche bestimmt werden. Jeder Ablauf zu EG C endet in einer C-SCC: mind. ein Zustand s tritt unendlich oft auf; jeder Zustand nach dem ersten s kann von s erreicht werden und kann selbst s erreichen. Daher: Man entfernt in K zunächst alle Zustände, die nicht mit C beschriftet sind. Dann bestimmt man die SCCs – dies sind die C-SCCs; in Abb. 23: . Dabei werden die Zustände nur für diese Phase entfernt; insgesamt bleibt z.B. s1 erhalten, so dass weiterhin auch ohne s7 und s8 ein Weg von s0 zu s2 existiert und daher EF EG p gilt. Jeder Zustand in einer C-SCC kann offensichtlich innerhalb der C-SCC einen Ablauf verfolgen, der EG C wahr macht. Ausgehend von diesen C-SCCs bestimmt man mit Breitensuche und umgedrehten Kanten alle erreichbaren Zustände, d.h. gerade die, die mit einem Weg aus C-beschrifteten Zuständen eine C-SCC erreichen können; vgl. Abb. 23. Die Zustände der CSCCs und die durch die Breitensuche erreichten Zustände werden in linearer Zeit mit EG C beschriftet. Prof. Dr. W. Vogler Universität Augsburg Mod. und Analyse techn. Systeme 7 EIN BLICK AUF UML-STATE-MACHINES 7 72 Ein Blick auf UML-State-Machines Literatur zu diesem Kapitel: www.uml.org Chris Rupp, Stefan Queins, die SOPHISTen: UML2 glasklar. Hanser, div. Auflagen Alexander Knapp, Stephan Merz, Christopher Rauh: Model Checking Timed UML State Machines and Collaborations In: Formal Techniques in Real-Time and Fault Tolerant Systems (FTRTFT’02). Hrsg: Werner Damm, Ernst Rüdiger Olderog. Lect. Notes Comp. Sci. 2469, Springer, Berlin, 2002. S. 395-416 David Harel: Statecharts: A Visual Formalism for Complex Systems. Sci. Comput. Program. 8 (1987) 231-274 Im letzten Kapitel werfen wir einen kurzen, informellen Blick auf die UML-State-Machines – auf Deutsch oft Zustandsautomaten, evtl. besser: UML-Automaten. Sie dienen dazu, das Verhalten von – möglicherweise parallelen – Systemen strukturiert zu konzipieren bzw. zu spezifizieren. Die Entwicklung der UML-Automaten wurde ganz wesentlich durch Harels Statecharts beeinflusst. Disclaimer: Texte über UML-Automaten sind wegen des Detailreichtums oft theoretisch etwas unbefriedigend; auch hier gibt es keine formal wasserdichten Definitionen. Insofern endet hier der theoretische Teil der Vorlesung – der aber natürlich durchaus auch immer wieder praktisch war. Alle weiteren Angaben ohne Gewähr. Fahrkartenautomat ausgeschaltet wartend Münze eingegeben Münze eingegeben Geldaufnahme do/ Betrag erhöhen cancel Abbruch [Betrag < Preis] Fahrkarte gewählt after(20 sec) do/Betrag ausgeben [Betrag = Preis] Berechnung Ausgabe Fahrkarte do/Fahrkarte ausgeben [Betrag > Preis]/ Wechselgeld ausgeben do/Preis berechnen Abbildung 24: Prof. Dr. W. Vogler Universität Augsburg Mod. und Analyse techn. Systeme 7 EIN BLICK AUF UML-STATE-MACHINES 73 markiert Startzustand. In UML ist • hier der Start-Pseudozustand. In einem Pseudozustand kann man nicht verharren. Endzustand – ohne ausgehende Transitionen Name do/op trigger [guard] / op Zustand. Wird der Zustand betreten (er wird aktiv ), wird die Operation/ das Verhalten op ausgeführt. Zusätzlich zur do-Operation kann es auch eine entry- und eine exit-Operation geben – alle optional. Transition – alle 3 Beschriftungen sind optional; verlässt Ausgangs-, betritt Zielzustand. Ein Trigger ist ein event, der Empfang eines Signals – evtl. auch ein time trigger o.ä. Ein guard ist eine Bedingung, eine logische Formel. Die Transition (und ggf. ihre Operation) kann nur ausgeführt werden, wenn guard (falls vorhanden) wahr ist. Sie wird ausgeführt, wenn zudem der Trigger vorliegt oder – falls dieser fehlt – wenn der Quellzustand der Transition sein Verhalten beendet hat (impliziter completion trigger ). In diesen Fällen wird eine laufende do-Operation unterbrochen; entry- bzw. exitVerhalten wird aber auf jeden Fall ausgeführt. Stehen mehrere Transitionen zur Wahl, wird eine beliebige ausgeführt, und dabei ggf. auch op. Letzteres kann auch das Senden eines Signals sein; ist a der Empfang des Signals A und b das Senden des Signals B, kann eine Transition also mit a/b beschriftet sein; vgl. MealyAutomaten. UML-Automaten unterstützen auch hierarchische Beschreibungen: Ein Zustand Z kann statt do/op wiederum einen Automaten enthalten (in UML evtl. beides), der allerdings nicht state machine sondern Region heißt. Z heißt dann zusammengesetzt. Die Zustände der Region sind Unterzustände von Z; sie können selbst wieder Regionen enthalten etc., und deren Zustände sind auch Unterzustände von Z. Tatsächlich ist der Automat des UML-Automaten auch eine Region (sehr technisch, s.u.). Diese Region ist die Wurzel eines Baums gemäß der Relation „ist Zustand/Region von“, den wir Zustands-Baum nennen wollen. Ein Region ist aktiv, genau dann wenn einer ihrer Zustände (der ist dann eindeutig) sowie genau dann wenn ggf. ihr Vater aktiv ist. Die aktiven Regionen und Zustände bilden im Zustands-Baum also einen „Aktiv-Pfad“ von der Wurzel zu einem Blatt. Z W A B trigger1 [guard1] trigger2 [guard2] X Y Abbildung 25: Prof. Dr. W. Vogler Universität Augsburg Mod. und Analyse techn. Systeme 7 EIN BLICK AUF UML-STATE-MACHINES 74 Z als Zielzustand: Eine Transition, die am Rand von Z endet, aktiviert beim Betreten neben Z ggf. auch den Startzustand der Region von Z (ggf. iteriert). Dies heißt default entry. Eine Transition „von außerhalb“ kann auch direkt zu einem Unterzustand Z’ führen; vgl. Abb. 26 und 27. Man spricht von einem explicit entry. Mit Z’ werden auch alle Zustände auf dem Pfad von Z zu Z’ aktiviert – und ggf. der Startzustand der Region von Z’ etc. (Dabei wird – beginnend mit Z – das entry-Verhalten der aktivierten Zustände ausgeführt.) Z als Ausgangszustand, vgl. Abb. 25: Erreicht die Region von Z den Endzustand, so wird der completion trigger ausgelöst. Dieser hat Priorität vor anderen Triggern (wie wohl auch time und change trigger) und triggert die Trigger-losen Transitionen, die Z verlassen. Eine solche wird natürlich nur ausgeführt, wenn ggf. der guard wahr ist. Z kann auch über von Z ausgehende getriggerte Transitionen verlassen werden. Dabei werden auch die aktiven Unterzustände (beginnend beim Blatt) verlassen. Schließlich kann eine Transition Z auch von einem Unterzustand (B) aus verlassen – wieder mit demselben Effekt; vgl. auch Abb. 26. Sind in Abb. 25 beide guards wahr und die Trigger gleich, so hat die (tiefere) B-Transition Vorrang – auch wenn sie z.B. zu A führen würde. Check in Karte einführen lesend [Karte nicht lesbar] Namentliche Anmeldung [Karte lesbar] Karte erkannt anders identifiziert Karte auslesen/ Passagierdaten bereitstellen Passagier erkannt do/ Platz wählen Abbildung 26: Prof. Dr. W. Vogler Universität Augsburg Mod. und Analyse techn. Systeme 7 EIN BLICK AUF UML-STATE-MACHINES 75 Durch die schematische Abb. 27 wollen wir die Situation noch einmal beleuchten. Sei D aktiviert. Wenn (1) ausgeführt wird, werden D und dann A verlassen sowie B und dann F betreten – und bei (2) ist es genauso. Z wird nicht verlassen und bleibt aktiv. Z A (1) D (2) B F E Abbildung 27: Als Vorbereitung für spätere Konzepte stellen wir fest: Als „ jüngsten gemeinsamen Vorfahr“ zweier Zustände bezeichnet man die im Zustands-Baum tiefste Region, die die beiden Zustände in ihrem Unterbaum enthält. In Abb. 27 ist dies für die Quelle D bzw. A und den Zielzustand F der beiden Transitionen also die Region von Z. Der nächste Knoten auf dem Weg zu D bzw. A ist die sog. main source der jeweiligen Transition – also in beiden Fällen A –, der nächste auf dem Weg zu F ist das sog. main target der Transitionen, hier also B. Im Extremfall kann Z sowohl Quelle bzw. Ziel als auch main source und main target sein. In der Abbildung ist A die Quelle, Z das Ziel – wobei die Region in Z einen Startzustand haben Z muss. Die Region, die Z direkt enthält, ist der „ jüngste gemeinA same Vorfahr“, Z ist also main source, main target und Ziel. (Wegen Beispielen wie diesen haben wir die Regionen in den E Zustands-Baum eingeführt.) In jedem Fall werden die main source und alle aktiven Unterzustände verlassen (beginnend beim Blatt). Dann werden das main target und geeignete Unterzustände betreten, (beginnend beim main target), in Abb. 27 also B und F, im letzten Beispiel Z und der unterliegende Startzustand. (Hierbei setzen wir voraus, dass eine Transitionsbeschriftung nur zwischen main source und main target steht.) Manchmal möchte man bei der Rückkehr in einen Zustand denjenigen unter den direkten Unterzuständen aktivieren, der zuletzt aktiv war. Das lässt sich mit einem H-Zustand bewerkstelligen (history pseudo-state). Wird in Abb. 28 F via Transition (2) betreten, so aktiviert (1) danach D (und natürlich A). Hat D direkte Unterzustände, wird dort der Startzustand aktiviert. War vor (2) der direkte Unterzustand D’ aktiv und soll nach (1) wieder aktiv sein, so schreibt man H* statt H. Werden Z und damit B und F aktiviert und wird dann mit (1) A zum ersten Mal betreten, so wird dabei E aktiviert. Prof. Dr. W. Vogler Universität Augsburg Mod. und Analyse techn. Systeme 7 EIN BLICK AUF UML-STATE-MACHINES 76 Z A B (2) D C E F H (1) Abbildung 28: H: shallow history (flach), erinnert sich nur auf derselben Ebene (Geschwister) H*: deep history, erinnert sich auch an deren Kinder und Kindeskinder press on off H AM S2 switch press FM S1 S4 S3 S5 switch Abbildung 29: Radio In Abb. 29 wird beim Einschalten der zuletzt gewählte Frequenzbereich, z.B. AM, und dort der Standardsender (S1) eingestellt. Mit H* hört man stattdessen den zuletzt gewählten Sender. UML-Automaten unterstützen auch Parallelität. Ein zusammengesetzter Zustand (und genauso der UML-Automat) kann mehrere Regionen haben, die dann parallel arbeiten. (UML nennt diese und den Zustand orthogonal – why ever ... ⊥ ̸= ||.) Der Zustand (bzw. der UML-Automat) ist dann eine Parallelkomposition. Im weiteren werden wir guards nicht mehr betrachten. Bei einer aktiven Parallelkomposition ist in jeder Region genau ein Zustand aktiv. Damit bilden die aktiven Zustände und Regionen im Zustands-Baum einen „Aktiv-Baum“. Die Grundidee für die Semantik eines UML-Automaten ist die folgende: Der Automat hat einen event pool von vorliegenden Ereignissen. Für den nächsten Schritt wird ein beliebiges Ereignis e zur Verarbeitung ausgewählt und aus dem Pool entfernt. In diesem nächsten Schritt können dann mehrere Transitionen mit trigger = e ausgeführt werden – oder auch keine, falls kein aktiver Zustand eine solche Transition hat. Genaueres zur Bestimmung der Transitionen unten. Bei der Auswahl von e sollten completion trigger und in zweiter Linie time und change trigger sinnvollerweise Priorität haben. Prof. Dr. W. Vogler Universität Augsburg Mod. und Analyse techn. Systeme 7 EIN BLICK AUF UML-STATE-MACHINES 77 Wird ein Zustand Z aktiviert, werden im Normalfall die Startzustände aller seiner parallelen Regionen aktiviert. In einer Parallelkomposition wird ein completion trigger ausgelöst, sobald in allen Regionen ein/der Endzustand erreicht wurde. Diese Regeln gelten also in allen zusammengesetzten Zuständen. Statt eine Transition zu einem Unterzustand von Z zu führen, kann man jetzt mit einer Gabelung (fork) je Region einen Unterzustand aktivieren; genauso kann man je Region einen Unterzustand wählen und diese Zustände gemeinsam mit einer Vereinigung (join) verlassen; vgl. Abb. 30 und Z = Multibetrieb. Multibetrieb Gespräch end 2. Anruf w aktiv ak gehalten w an gehalten w aktiv w 1. Anruf end Abbildung 30: Telefon ak: anklopfen; an: annehmen; w: wechseln, end: aktives Gespräch beenden Die Zweige einer fork- bzw. join-Transition sollen gemeinsam ausgeführt werden; also hat die Transition nur einen Trigger auf dem gemeinsamen Stück. Im Beispiel wird für das Ereignis w in jeder der beiden Regionen eine w-Transition ausgeführt, so dass die aktiven Unterzustände immer übereinander stehen. In diesem Beispiel könnten daher die beiden end-Transitionen durch eine von Multibetrieb ausgehende ersetzt werden. Allgemeine Regel: Bei Verarbeitung des Ereignis e betrachtet man nur „tiefe“ e-getriggerte Transitionen, bei denen also die Quelle keinen Unterzustand mit e-getriggerter Transition hat, s.o. im Zusammenhang mit Abb. 25. (Ohne ins Detail zu gehen: Bei join-Transitionen sollte für keine Quelle ein Unterzustand eine e-getriggerte Transition haben.) Unter diesen Transitionen wählt man eine maximale, konfliktfreie Menge. Um zu prüfen, ob zwei Transitionen in Konflikt sind, geht man wie folgt vor. Man bestimmt wieder für jede Transition t den jüngsten gemeinsamen Vorfahren m von Quelle und Ziel – ggf. von allen Quellen und Zielen, wir wollen aber fork- und join-Transitionen im weiteren ignorieren; dabei kann m jetzt auch ein Zustand sein. Üblicherweise ist m eine Region, die wieder die main source und das main target von t als Unterzustände hat. Ist m aber ein Zustand Z, dann geht t von Z zu einem Unterzustand von Z oder umgekehrt – oder von Z zu Z; in jedem dieser Fälle ist Z main source und main target. Prof. Dr. W. Vogler Universität Augsburg Mod. und Analyse techn. Systeme 7 EIN BLICK AUF UML-STATE-MACHINES 78 Beachte: t darf nicht von einem Zustand einer Region zu einem Zustand einer parallelen Region führen. Wie gehabt regelt eine Transition das Verlassen der main source und aller aktiven Unterzustände. Daher sind t1 und t2 in Konflikt, wenn die Quelle von t2 (schwach) unter der main source von t1 liegt oder umgekehrt, wenn also t1 und t2 denselben Zustand deaktivieren wollen. Abschließend sei obiger Text an zwei Beispielen erläutert. Hätte in Abb. 30 jeder der vier Zustände unter Multibetrieb eine eigene end-getriggerte Transition zu Gespräch, wären diese wegen der gemeinsamen main source Multibetrieb im Konflikt miteinander. Allerdings wird bei der Ausführung einer dieser Transition auch die jeweils andere Region abgebrochen, der Effekt wäre derselbe wie bei einer der join-Transitionen in Abb. 30. Abb. 31 zeigt ein weiteres schematisches Beispiel. Transitionen (2) und (3) sind tiefer als (1), das also nicht ausgeführt wird. Weiter ist (3) in Konflikt zu (2) und auch zu (4). (2) und (4) sind nicht in Konflikt, hier ist jeweils die Quelle auch die main source. Also wird entweder nur (3) bei trigger e ausgeführt, oder aber (2) und (4) werden gemeinsam ausgeführt. Z C e (1) E B e (4) e (2) D F e (3) Abbildung 31: D und E aktiv Prof. Dr. W. Vogler Universität Augsburg Mod. und Analyse techn. Systeme
© Copyright 2024 ExpyDoc