Hauptseminar Model Checking Binary Decision Diagrams Kristofer Treutwein 23.4.22
Grundlagen Normalformen Als kanonische Darstellungsform für boolesche Terme gibt es verschiedene Normalformen, u.a. die disjunktive Normalform (DNF) konjunktive Normalform (KNF) if-then-else Normalform (INF) if-then-else Operator Die Boolesche Funktion if x then y else y wird dargestellt als x y,y := (x y ) ( x y ) Kofaktoren Bezüglich einer Variablen x hat ein Boolescher Term t zwei Kofaktoren t x= := t[/x] und t x= := t[/x] Der Kofaktor t x= ist also der Term, der entsteht, wenn für jedes Auftreten von x eingesetzt wird. t x= ergibt sich entsprechend. Die beiden Kofaktoren müssen nicht zwingend unterschiedlich sein. Mit dieser Definition ergibt sich die Shannon Expansion t = x t x=, t x= Die Shannon Expansion zerlegt einen Term in zwei Terme, mit jeweils einer Variablen weniger. Durch fortgesetzte Zerlegung kann also jeder Boolesche Term in einen Term aus geschachtelten if-then-else Operationen umgewandelt werden. Im weiteren wird gezeigt, daß diese Darstellungsform eine kanonische Repräsentation Boolescher Terme ergibt.
Decision Tree Wie durch den Namen schon angedeutet, kann man die ifthen-else Operation x t x=, t x= als Entscheidung an der Variablen x deuten. Also kann jede Boolesche Funktion als Entscheidungsbaum dargestellt werden. Ein Entscheidungsbaum ist ein gerichteter Binärbaum, bei dem die inneren Knoten Variablen darstellen, und die Blätter immer oder sind. y 2 y 2 y y y2 y2 Binary Decision Diagrams Im Unterschied zu Decision Trees sind Decision Diagrams gerichtete zyklenfreie Graphen (DAG) mit einer Quelle(Wurzel) und zwei Senken und. Man gewinnt sie in erster Linie durch Verschmelzung der Blätter des Decision Tree zu den zwei Senken. y Es gibt eine Reihe von unterschiedlichen BDD s. _ reduziertes BDD Ein reduziertes BDD (RBDD) beinhaltet keine redundanten y 2 y 2 Knoten und keine redundanten Teilbäume mehr. _ geordnetes BDD Ein BDD heißt geordnet (OBDD), wenn die Variablen einer festen Sortierung gehorchen. Im weiteren werden folgende Funktionen verwendet: var(k) liefert die Variable, die einem Knoten k zugeordnet ist. var(k) liefert oder für einen terminalen Knoten high(k) liefert den Nachfolgerknoten, der über die Kante erreicht wird low(k) liefert entsprechend den über erreichbaren Knoten. Reduktion von BDD s k k k Ein Knoten kann entfernt werden, wenn beide Ausgangskanten denselben Knoten erreichen, wenn high(k)=low(k) Ein Knoten kann entfernt werden, wenn ein anderer Knoten dieselbe Variable darstellt, und beide Knoten dieselben Nachfolger besitzen. var(k)=var(l) und high(k)=high(l) und low(k)=low(l) bedeutet k=l k k 2 k k 2 k k 2 Gibt es keinen Knoten mehr, der auf diese Weise entfernt werden kann, heißt das BDD reduziert. Die Reduktion kann BDD s entscheidend verkleinern.
Ordnung von Variablen Gehorchen die Variablen einer festen Sortierung < <x 3... und gilt für jeden Pfad k, k 2, k 3,... var(k )<var(k 2 )<var(k 3 ), so heißt das BDD geordnet. Die Sortierung der Variablen kann starke Auswirkung auf die Größe des BDD haben. Allerdings ist die Suche nach der optimalen Sortierung NP-vollständig und die heuristische Wahl einer Sortierung kann beliebig schlecht sein. ROBDD s sind kanonische Darstellung Reduzierte und geordnete BDD s des gleichen Booleschen Terms sind - bis auf Isomorphie - immer gleich. Daher ist die Darstellung eine kanonische Repräsentation von Termen. Insbesondere interessant ist die Darstellung einer Tautologie. Sie besitzt nur einen einzigen Knoten, nämlich den terminalen Knoten. Der Test auf Gleichheit zweier Boolescher Terme ist bei gleicher Variablenordnung sehr einfach, es ist einfach der Test auf Gleichheit der ROBDD s. Bei BDD s ohne (oder unterschiedlicher) Variablensortierung ist der Test nicht einfach, er ist nicht einmal auf polynomielle Zeit begrenzbar. Die Ordnung von Variablen hat aber auch Nachteile; bei ungünstigen Termen kann die Größe des OBDD nicht polynomiell begrenzt werden. Boolesche Operationen mit BDD s ITE Für die Implementierung von BDD s wird die Operation ITE(F,G,H) = F G, H benötigt. Ist F keine Variable, kann die Funktion rekursiv eingesetzt werden, um das BDD zu erzeugen: ITE(F,G,H) = ITE (x, ITE(F x=, G x=, H x= ), ITE(F x=, G x=, H x= )) Boolesche Operationen mit bis zu zwei BDD s als Operanden können durch die ITE- Operation folgendermassen dargestellt werden: F ITE(F,, ) F ITE(F,, ) F G ITE(F, G, ) F G ITE(F,, G) F G ITE(F, G, ) F G ITE(F, G, G)
Kripke Strukturen Transitionssysteme können als Boolesche Funktionen und damit auch als BDD dargestellt werden. Für jeden Zustand ergibt sich aus den atomaren Propositionen eine Konjunktion aus den AP s die gelten und den Negationen derer, die nicht gelten. Im Beispiel gibt es zwei Zustände: a b a b s s 2 s : a b s 2 : a b Die Transitionen werden durch zusätzliche Variablen für die Propositionen im Folgezustand angegeben (hier a für a im Folgezustand und b für b) Die drei Transitionen sind also s s 2 : a b a b s 2 s : a b a b s 2 s 2 : a b a b a a' Zusammengeführt werden die einzelnen Transitionsgleichungen zu einer Disjunktion (a b a b ) (a b a b ) (a b a b ) Daraus lässt sich einfach ein ROBDD erstellen. Leider lässt sich auch hier nicht bestimmen, welche Variablensortierung die günstigste ist. b b' Diese Umwandlung setzt voraus, das die Gültigkeit von AP s eindeutig einem Zustand zugeordnet ist. Ist das nicht der Fall, so kann man durch Einführung zusätzlicher Propositionen diese Eindeutigkeit herstellen.