Modelchecking 1. Motivation Beispiel: Mengen als Formeln Formeln ...
Modelchecking 1. Motivation Beispiel: Mengen als Formeln Formeln ...
Modelchecking 1. Motivation Beispiel: Mengen als Formeln Formeln ...
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
University of Paderborn<br />
Software Engineering Group<br />
E. Kindler<br />
<strong>1.</strong> <strong>Motivation</strong><br />
University of Paderborn<br />
Software Engineering Group<br />
E. Kindler<br />
<strong>Modelchecking</strong><br />
Meist kurz nur<br />
OBDDs oder<br />
sogar nur BDDs<br />
VII. ROBDDs<br />
genannt!!!<br />
• <strong>Motivation</strong><br />
• Definition<br />
• Operationen<br />
• Quantifizierte boolesche <strong>Formeln</strong> (QBF)<br />
• Die Anzahl der Zustände eines realistischen<br />
Systems ist extrem groß; selbst unter<br />
Vereinfachungen, bleibt die Anzahl riesig.<br />
• Deshalb wollen wir vermeiden, die Menge der<br />
Zustände explizit zu repräsentieren.<br />
• Eine Möglichkeit, <strong>Mengen</strong> von Zuständen zu<br />
repräsentieren, sind <strong>Formeln</strong>.<br />
<strong>Modelchecking</strong>: VII. ROBDDs<br />
2<br />
<strong>Beispiel</strong>: <strong>Mengen</strong> <strong>als</strong> <strong>Formeln</strong><br />
University of Paderborn<br />
Software Engineering Group<br />
E. Kindler<br />
<strong>Formeln</strong><br />
University of Paderborn<br />
Software Engineering Group<br />
E. Kindler<br />
c=0<br />
c=1<br />
a=0 a=1<br />
¬ c<br />
a<br />
a ⇔ c<br />
¬ a ∧ c<br />
Boolesche<br />
<strong>Formeln</strong><br />
repräsentieren<br />
Zustandsmengen<br />
• Manche Operationen auf <strong>Mengen</strong> lassen sich mit<br />
<strong>Formeln</strong> sehr effizient ausführen:<br />
• Vereinigung: p ∨ q<br />
• Durchschnitt: p ∧ q<br />
• Komplement: ¬ p<br />
• <strong>Mengen</strong>differenz: p ∧¬q<br />
• Allerdings gibt es verschiedene <strong>Formeln</strong>, die<br />
dieselbe Menge repräsentieren!<br />
• Es ist extrem aufwendig (NP-vollständig),<br />
herauszufinden, ob zwei <strong>Formeln</strong> dieselbe Menge<br />
repräsentieren.<br />
• Deshalb sind <strong>Formeln</strong> für unsere Zwecke nicht<br />
geeignet.<br />
Die Überprüfung der Gleichheit zweier <strong>Mengen</strong> ist<br />
beim <strong>Modelchecking</strong> eine sehr wichtige Operation!<br />
<strong>Modelchecking</strong>: VII. ROBDDs<br />
3<br />
<strong>Modelchecking</strong>: VII. ROBDDs<br />
4<br />
<strong>Formeln</strong><br />
University of Paderborn<br />
Software Engineering Group<br />
E. Kindler<br />
Binäre Entscheidungsbäume<br />
University of Paderborn<br />
Software Engineering Group<br />
E. Kindler<br />
• Deshalb suchen wir eine Möglichkeit, <strong>Mengen</strong><br />
auf eine Weise zu repräsentieren, daß<br />
• die <strong>Mengen</strong>operationen und<br />
• die Überprüfung der Gleichheit<br />
• auf ihnen möglichst effizient durchführbar<br />
sind.<br />
Die Idee der <strong>Formeln</strong> geben wir dabei nicht<br />
ganz auf! Wir stellen sie nur geschickter dar.<br />
Wir gehen im folgenden davon aus, daß die<br />
Menge aller Zustände durch eine Menge von<br />
booleschen Variablen V repräsentiert ist.<br />
a=b ∧ c=d<br />
0<br />
c<br />
0<br />
b<br />
1 0 0 1 0 0<br />
a<br />
0 1<br />
b<br />
c c c<br />
d d d d d d d d<br />
0<br />
1<br />
0 0 0 0 0 0 1 0 0 1<br />
1<br />
1<br />
<strong>Modelchecking</strong>: VII. ROBDDs<br />
5<br />
<strong>Modelchecking</strong>: VII. ROBDDs<br />
6
Entscheidungsbäume<br />
University of Paderborn<br />
Software Engineering Group<br />
E. Kindler<br />
Gleiche Teilbäume<br />
University of Paderborn<br />
Software Engineering Group<br />
E. Kindler<br />
• Für jeden Zustand gibt es im (vollständigen)<br />
Entscheidungsbaum genau einen Pfad.<br />
• Am Ende des Pfades steht der Wert der<br />
Formel in dem entsprechenden Zustand.<br />
• Die Reihenfolge der Variablen auf den Pfaden<br />
wird zuvor festgelegt (Variablenordnung).<br />
a=b ∧ c=d<br />
c<br />
b<br />
a<br />
b<br />
c c c<br />
Problem:<br />
• Der Entscheidungsbaum ist extrem groß!<br />
d d d d d d d d<br />
1 0 0 1 0 0<br />
0 0 0 0 0 0 1 0 0 1<br />
<strong>Modelchecking</strong>: VII. ROBDDs<br />
7<br />
<strong>Modelchecking</strong>: VII. ROBDDs<br />
8<br />
Gleiche Teilbäume<br />
University of Paderborn<br />
Software Engineering Group<br />
E. Kindler<br />
Gleiche Teilbäume<br />
University of Paderborn<br />
Software Engineering Group<br />
E. Kindler<br />
a=b ∧ c=d<br />
a<br />
a=b ∧ c=d<br />
a<br />
b<br />
b<br />
b<br />
b<br />
c<br />
c<br />
c<br />
c<br />
c<br />
d d d d d d<br />
d d d d<br />
1 0 0 1 0 0<br />
0 0 1 0 0 1<br />
0 0<br />
0 0 1 0 0 1<br />
<strong>Modelchecking</strong>: VII. ROBDDs<br />
9<br />
<strong>Modelchecking</strong>: VII. ROBDDs<br />
10<br />
Gleiche Teilbäume<br />
University of Paderborn<br />
Software Engineering Group<br />
E. Kindler<br />
Löschen redundanter Knoten<br />
University of Paderborn<br />
Software Engineering Group<br />
E. Kindler<br />
a=b ∧ c=d<br />
a<br />
a=b ∧ c=d<br />
a<br />
b<br />
b<br />
b<br />
b<br />
c<br />
c<br />
c<br />
c<br />
d d d<br />
d d d<br />
0 0 1 0 0 1<br />
0 1 0 0 1<br />
<strong>Modelchecking</strong>: VII. ROBDDs<br />
11<br />
<strong>Modelchecking</strong>: VII. ROBDDs<br />
12
Löschen redundanter Knoten<br />
University of Paderborn<br />
Software Engineering Group<br />
E. Kindler<br />
Löschen redundanter Knoten<br />
University of Paderborn<br />
Software Engineering Group<br />
E. Kindler<br />
a=b ∧ c=d<br />
a<br />
a=b ∧ c=d<br />
a<br />
b<br />
b<br />
b<br />
b<br />
c<br />
c<br />
c<br />
d d d<br />
d<br />
d<br />
0 1 0 0 1<br />
0 1 0 0 1<br />
<strong>Modelchecking</strong>: VII. ROBDDs<br />
13<br />
<strong>Modelchecking</strong>: VII. ROBDDs<br />
14<br />
Gleiche Teilbäume<br />
University of Paderborn<br />
Software Engineering Group<br />
E. Kindler<br />
Gleiche Teilbäume<br />
University of Paderborn<br />
Software Engineering Group<br />
E. Kindler<br />
a=b ∧ c=d<br />
a<br />
a=b ∧ c=d<br />
a<br />
b<br />
b<br />
b<br />
b<br />
c<br />
c<br />
d<br />
d<br />
d<br />
d<br />
0 0 0 1<br />
0 1<br />
<strong>Modelchecking</strong>: VII. ROBDDs<br />
15<br />
<strong>Modelchecking</strong>: VII. ROBDDs<br />
16<br />
Endergebnis<br />
University of Paderborn<br />
Software Engineering Group<br />
E. Kindler<br />
2. Definition<br />
University of Paderborn<br />
Software Engineering Group<br />
E. Kindler<br />
a=b ∧ c=d<br />
a<br />
b b<br />
c<br />
d d<br />
• Wenn es keine gleichen Teilbäume<br />
mehr gibt und keine redundante<br />
Knoten, haben wir ein ROBDD<br />
(Reduced Ordered Binary Decision<br />
Diagram, Reduziertes<br />
Entscheidungsdiagramm mit fester<br />
Variablenordnung) erzeugt.<br />
• Ein ROBDD ist im allgemeinen<br />
sehr viel kleiner <strong>als</strong> der<br />
entsprechende<br />
Entscheidungsbaum.<br />
• Entscheidungsdiagramme und<br />
boolesche Funktionen<br />
• Duplikate<br />
• Redundante Knoten<br />
• Variablenordnung<br />
• ROBDDs<br />
0 1<br />
<strong>Modelchecking</strong>: VII. ROBDDs<br />
17<br />
<strong>Modelchecking</strong>: VII. ROBDDs<br />
18
Entscheidungsdiagramme<br />
University of Paderborn<br />
Streng genommen: Software Engineering Group<br />
E. Kindler<br />
binäres Entscheidungsdiagramm<br />
• Ein Entscheidungsdiagramm ist ein azyklischer<br />
Graph mit einem ausgezeichneten Wurzelknoten.<br />
• Wir unterscheiden<br />
• inneren Knoten, die jeweils mit einer b<br />
Variable aus V beschriftet sind und<br />
• Terminalknoten, die mit 0 oder 1<br />
beschriftet sind.<br />
• Jeder innere Knoten besitzt genau eine<br />
ausgehende Kante, die mit 0 beschriftet<br />
ist, und eine ausgehende Kante, die<br />
mit 1 beschriftet ist.<br />
• Terminalkonten besitzen keine ausgehende<br />
Kante.<br />
c<br />
0 1<br />
b<br />
0 1<br />
Keine weiteren Einschränkungen<br />
University of Paderborn<br />
Software Engineering Group<br />
E. Kindler<br />
• In einem Entscheidungsdiagramm ist die<br />
Ordnung der Variablen auf dem Pfad noch<br />
nicht festgelegt (dieselbe Variable darf sogar<br />
mehrfach vorkommen).<br />
• Das Entscheidungsdiagramm muß kein Baum<br />
sein (ein Knoten darf mehrere eingehende<br />
Kanten besitzen).<br />
• Gleiche Teilbäume dürfen mehrfach<br />
vorkommen (müssen aber nicht).<br />
<strong>Modelchecking</strong>: VII. ROBDDs<br />
19<br />
<strong>Modelchecking</strong>: VII. ROBDDs<br />
20<br />
Boolesche Funktion<br />
University of Paderborn<br />
Software Engineering Group<br />
E. Kindler<br />
Duplikate<br />
University of Paderborn<br />
Software Engineering Group<br />
E. Kindler<br />
• Ein Entscheidungsdiagramm repräsentiert<br />
eindeutig eine boolesche Funktion bzw. eine<br />
Menge von Zuständen.<br />
(man verfolgt ausgehend vom Wurzelknoten<br />
jeweils die Kante, die mit Werte der Variablen<br />
im betrachteten Zustand beschriftet ist).<br />
• Zwei innere Knoten heißen Duplikate, wenn beide<br />
Knoten mit derselben Variablen v beschriftet sind<br />
und die beide ausgehenden Kanten, die mit 0<br />
beschriftet sind, beim selben Knoten enden und die<br />
beiden ausgehenden Kanten, die mit 1 beschriftet<br />
sind, beim selben Knoten enden.<br />
c c<br />
d<br />
• Zwei Terminalknoten heißen Duplikate, wenn beide<br />
Knoten gleich beschriftet sind.<br />
e<br />
<strong>Modelchecking</strong>: VII. ROBDDs<br />
21<br />
<strong>Modelchecking</strong>: VII. ROBDDs<br />
22<br />
Duplikate<br />
University of Paderborn<br />
Software Engineering Group<br />
E. Kindler<br />
Redundante Knoten<br />
University of Paderborn<br />
Software Engineering Group<br />
E. Kindler<br />
• Von zwei Duplikaten kann eines gelöscht werden;<br />
die Kanten, die auf den gelöschten Knoten<br />
verwiesen haben, werden auf das Duplikat<br />
„umgebogen“.<br />
c<br />
d<br />
a<br />
e<br />
c<br />
b<br />
⇒<br />
Reduce<br />
c<br />
d<br />
a<br />
e<br />
b<br />
Der Wert der<br />
booleschen<br />
Funktion<br />
bleibt gleich!<br />
• Ein innerer Knoten eines Entscheidungsdiagramms<br />
heißt redundant, wenn beide ausgehenden Kanten<br />
zum selben Knoten führen.<br />
• Redundante Knoten kann man löschen, indem man<br />
alle Kanten, die auf den Knoten verweisen, auf<br />
seinen (eindeutigen) Nachfolger „umbiegt“:<br />
a<br />
a<br />
c<br />
d<br />
b<br />
⇒<br />
Reduce<br />
d<br />
b<br />
Der Wert der<br />
booleschen<br />
Funktion<br />
bleibt gleich!<br />
<strong>Modelchecking</strong>: VII. ROBDDs<br />
23<br />
<strong>Modelchecking</strong>: VII. ROBDDs<br />
24
Variablenordnung<br />
University of Paderborn<br />
Software Engineering Group<br />
E. Kindler<br />
ROBDDs<br />
University of Paderborn<br />
Software Engineering Group<br />
E. Kindler<br />
• Sei eine totale Ordnung v 1 < v 2 < v 3 < … < v n auf der<br />
Menge der Variablen V definiert.<br />
• Ein Entscheidungsdiagramm respektiert die<br />
Variablenordnung
2. Operationen auf ROBBDs<br />
University of Paderborn<br />
Software Engineering Group<br />
E. Kindler<br />
Negation<br />
University of Paderborn<br />
Software Engineering Group<br />
E. Kindler<br />
• Negation<br />
• Restriktion und Shannonexpansion<br />
• Binäre Operationen<br />
• ROBDDs und Kripkestrukturen<br />
• Wir überlegen uns nun, wie man verschiedene<br />
boolesche Operationen auf durch ROBDDs<br />
repräsentierten booleschen Funktionen<br />
durchführen kann.<br />
• Einfaches <strong>Beispiel</strong>: Negation<br />
b<br />
d<br />
a<br />
c<br />
b<br />
d<br />
⇒<br />
Negation<br />
b<br />
d<br />
a<br />
c<br />
b<br />
d<br />
In der Praxis wird<br />
Negation aber<br />
anders realisiert!<br />
Aufwand: O(1)<br />
0 1<br />
1 0<br />
<strong>Modelchecking</strong>: VII. ROBDDs<br />
31<br />
<strong>Modelchecking</strong>: VII. ROBDDs<br />
32<br />
Restriktion u. Shannonexpansion<br />
University of Paderborn<br />
Software Engineering Group<br />
E. Kindler<br />
Restriktion auf ROBDDs<br />
University of Paderborn<br />
Software Engineering Group<br />
E. Kindler<br />
• Für eine boolesche Funktion p über den<br />
Variablen v 1 , … ,v n und einen booleschen<br />
Wert t ∈ B ist die boolesche Funktion p| vi ← t<br />
definiert durch<br />
p| vi ← t(v 1 , … ,v n ) = p(v 1 , … v i-1 , t ,v i+1 , … , v n )<br />
• p| vi ← t nennen wir eine Restriktion von p.<br />
• Es gilt (Shannonexpansion von ϕ):<br />
p = (¬ v ∧ p| v ← 0 ) ∨ ( v ∧ p| v ← 1 )<br />
• Für eine durch ein ROBDD repräsentierte boolesche<br />
Funktion p können wir das ROBDD für die<br />
Restriktion p| v ← t einfach erzeugen:<br />
a<br />
c<br />
v<br />
t ¬t<br />
⇒<br />
Restrict<br />
d e<br />
d e<br />
• Anschließend systematische Reduktion<br />
des resultierenden Entscheidungsdiagramms<br />
zu einem ROBDD.<br />
a<br />
c<br />
Aufwand:<br />
O(|p|)<br />
Größe des<br />
ROBDDs für p<br />
Aufwand:<br />
O(|p|⋅log (|p|))<br />
<strong>Modelchecking</strong>: VII. ROBDDs<br />
33<br />
<strong>Modelchecking</strong>: VII. ROBDDs<br />
34<br />
Restriktion: Spezialfall<br />
University of Paderborn<br />
Software Engineering Group<br />
E. Kindler<br />
Binäre boolesche Operationen<br />
University of Paderborn<br />
Software Engineering Group<br />
E. Kindler<br />
• Ein wichtiger Spezialfall ist die Restriktion auf<br />
die erste Variable v 1 im ROBDD:<br />
p| v1 ← 0 bzw. p| v1 ← 1<br />
v 1<br />
p| v1 ← 0 p| v1 ← 1<br />
Aufwand:<br />
O(1)<br />
• Alle binären booleschen Operationen können<br />
wir mit Hilfe der Restriktion und der Shannonexpansion<br />
rekursiv formulieren: Rekursion<br />
• p ∧ q = (¬ v ∧ (p| v ← 0 ∧ q| v ← 0 ) ) ∨<br />
( v ∧ (p| v ← 1 ∧ q| v ← 1 ) )<br />
• p ∨ q = (¬ v ∧ (p| v ← 0 ∨ q| v ← 0 ) ) ∨<br />
( v ∧ (p| v ← 1 ∨ q| v ← 1 ) )<br />
• p ♣ q = (¬ v ∧ (p| v ← 0 ♣ q| v ← 0 ) ) ∨<br />
( v ∧ (p| v ← 1 ♣ q| v ← 1 ) )<br />
Beliebiger<br />
boolescher<br />
Operator<br />
<strong>Modelchecking</strong>: VII. ROBDDs<br />
35<br />
<strong>Modelchecking</strong>: VII. ROBDDs<br />
36
Binäre boolesche Operationen<br />
University of Paderborn<br />
Software Engineering Group<br />
E. Kindler<br />
Zusammenfassung<br />
University of Paderborn<br />
Software Engineering Group<br />
E. Kindler<br />
ROBDD für p ♣ q aus ROBDDs für p und q generieren:<br />
• Generiere ROBDDs für p| v ← 0 , q| v ← 0 , p| v ← 1 , und q| v ← 1<br />
• Konstruiere daraus rekursiv p| v ← 0 ♣ q| v ← 0 und p| v ← 1 ♣ q| v ← 1<br />
• Ein Entscheidungsdiagramm für p ♣ q ist dann<br />
v<br />
Gesamtaufwand<br />
(bei geschickter<br />
Implementierung):<br />
O( |p|⋅ |q|)<br />
p| v ← 0 ♣ q| v ← 0 p| v ← 1 ♣ q| v ← 1<br />
• Reduziere das Entscheidungsdiagramm systematisch zu<br />
einem ROBDD.<br />
• Solange die Größe der beteiligten ROBDDs klein<br />
bleibt, sind alle booleschen Operationen auf<br />
ROBDDs und der Test auf Gleichheit zweier<br />
ROBDDs relativ effizient ausführbar.<br />
• Es gibt inzwischen viele Programmbibliotheken für<br />
ROBDDs und die zugehörigen Operationen (dort<br />
sind insbesondere viele Heuristiken zur Optimierung<br />
der Variablenordnung realisiert).<br />
• In der Praxis werden alle ROBDDs in einer einzigen<br />
Datenstruktur verwaltet (mit mehreren Wurzeln).<br />
Der Test auf Gleichheit ist dann nur ein<br />
Pointervergleich (ist <strong>als</strong>o extrem effizient)!<br />
<strong>Modelchecking</strong>: VII. ROBDDs<br />
37<br />
<strong>Modelchecking</strong>: VII. ROBDDs<br />
38<br />
ROBDDs und Kripkestrukturen<br />
University of Paderborn<br />
Software Engineering Group<br />
E. Kindler<br />
4. Quantifizierte boolesche <strong>Formeln</strong><br />
University of Paderborn<br />
Software Engineering Group<br />
E. Kindler<br />
• Mit den booleschen Operationen können wir<br />
<strong>Formeln</strong> in ROBDDs umwandeln. Wir werden<br />
im folgenden oft nicht zwischen einer Formel<br />
und dem zugehörigen ROBDD unterscheiden.<br />
• Eine Kripkestruktur können wir durch ein<br />
ROBDD für die Anfangsbedingung S 0 (ROBDD<br />
(ROBDD über V ) und ein ROBDD für die<br />
Übergangsrelation R (ROBDD über V ∪ V´ )<br />
repräsentieren.<br />
• Später werden wir in booleschen <strong>Formeln</strong><br />
auch die Quantifikation von booleschen<br />
Variablen v (QBF) benutzen: ∃ v . p<br />
• ∃ v . p ist eine Abkürzung für p| v ← 0 ∨ p| v ← 1<br />
• ∃ v . p ist eine Abkürzung für<br />
∃ v 1 . ( ∃ v 2 . ( ... ( ∃ v n . p ) …) )<br />
• Entsprechend steht ∀ v . p abkürzend für<br />
p| v ← 0 ∧ p| v ← 1<br />
• ∀ v . p steht abkürzend für<br />
∀ v 1 . (∀ v 2 . ( ... ( ∀ v n . p ) …) )<br />
<strong>Modelchecking</strong>: VII. ROBDDs<br />
39<br />
<strong>Modelchecking</strong>: VII. ROBDDs<br />
40<br />
Relationsprodukt<br />
University of Paderborn<br />
Software Engineering Group<br />
E. Kindler<br />
MCiE<br />
University of Paderborn<br />
Software Engineering Group<br />
E. Kindler<br />
• Für eine Formel p(u,v) über U und V und eine Formel<br />
q(v, w) über V und W nennen wir<br />
∃ v . p(u,v) ∧ q(v, w) das Relationsprodukt von p(u,v)<br />
und q(v, w).<br />
• Das ROBDD für das Relationsprodukt läßt sich mit<br />
den vorangegangenen Abkürzungen mit Hilfe der<br />
booleschen Operationen konstruieren; das ist aber<br />
relativ aufwendig.<br />
• In der Praxis wird deshalb ein eigenes Verfahren für<br />
das Relationsprodukt implementiert (das in der<br />
Praxis effizient ist, im schlimmsten Falle aber<br />
exponentielle Komplexität besitzt).<br />
• In ROBDD-Bibliotheken werden viele weitere<br />
Optimierungen angewendet, um die Operationen<br />
auf ROBDDs möglichst effizient durchzuführen<br />
(z.B. Hash-Tabellen Vergleich auf Gleichheit<br />
zweier ROBDDs wird dann ein Pointervergleich).<br />
• Die Model-Checking-in-Education-Bibliothek (MCiE)<br />
implementiert viele dieser Optimierungen.<br />
• Sehen Sie sich diese Bibliothek unbedingt an<br />
(vgl. Übungen):<br />
http://www.upb.de/cs/kindler/Lehre/MCiE<br />
<strong>Modelchecking</strong>: VII. ROBDDs<br />
41<br />
<strong>Modelchecking</strong>: VII. ROBDDs<br />
42