Skript - Universität Augsburg

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