29.12.2014 Aufrufe

Modelchecking 1. Motivation Beispiel: Mengen als Formeln Formeln ...

Modelchecking 1. Motivation Beispiel: Mengen als Formeln Formeln ...

Modelchecking 1. Motivation Beispiel: Mengen als Formeln Formeln ...

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!