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