Bounded Model Checking als SAT-Problem 6/21/2012 Seminar: Aktuelle Themen aus der Wissensverarbeitung[WV-BS] Joanna Pieper Inhaltsverzeichnis: Bounded Model Checking – Basisidee……………………...…………………2 Lineare temporale Logik…………………………………………………………...2 Kripke-Struktur………………………………………………………………………...3 Begrenzte Semantik…………...……………………………………………………..5 Aussagenlogische Kodierung……………………………………………………..6 Klassische Kodierung……….……………………………………………………….8 1 1. Bounded Model Checking Symbolisches Bounded Model Checking ist eine Methode zur Nachprüfung von temporalen Logikbedingungen in endlichen Zustandsräumen. Die Zustandsräume sind mit einer Schranke k begrenzt. Bounded Model Checking überprüft eine aussagenlogische Formel g mit dem SAT-Solver auf die Erfüllbarkeit. Die Formel g kodiert eine Kripke-Struktur K und eine LTL-Formel f, die mit einer Konjunktion miteinander verbunden sind. Diese sind in der Aussagenlogik kodiert. Wenn die Formel g erfüllbar ist, dann kann die erfüllende Belegung von dem SAT-Solver in ein konkretes Beispiel übersetzt werden. Das Beispiel zeigt das die Eigenschaft gilt. Wenn wir aber keine erfüllende Belegung finden, dann wird die Schrankte k um eins erhöht und der Prozess wiederholt. Die kompletten Erweiterungen von Bounded Model Checking erlauben uns, den Prozess zu stoppen mit dem Fazit, dass die Eigenschaften nicht verletzt werden können. Man muss nur hoffen, dass es, bevor die verfügbare Mittel verbraucht werden, passiert. 2. Lineare temporale Logik Die Syntax der linearen temporalen Logik LTL enthält die aussagenlogischen Variablen V, die temporalen Operatoren und die aussagenlogischen Operatoren: die Negation ¬, die Konjunktion ∧, die Disjunktion ∨ und die Implikation →. Die typischen temporalen Operatoren sind der "next time"-Operator X, der "finally"-Operator F, und der "globally"-Operator G. Die temporalen Operatoren als Beispiele: Eine Formel a → Xb mit Variablen a, b ∈ a=1 b=0 gilt in folgender Kripke-Struktur. a=0 b=1 Die Bedeutung der Formel: Ausgehend vom aktuellen Zustand wird die Eigenschaft im nächsten Zustand entlang des Pfades erfüllt. 2 Eine Formel a → b mit Variablen a, b ∈ gilt in folgender Kripke-Struktur. a=1 a=0 a=0 a=1 a=0 a=1 b=1 b=1 b=1 b=1 b=1 b=1 Die Bedeutung der Formel: Ausgehend vom aktuellen Zustand trifft eine Eigenschaft in jedem Zustand entlang des Pfades zu. Eine Formel a → Fb mit Variablen a, b ∈ gilt in folgender Kripke-Struktur. a=1 a=0 a=0 a=1 a=0 a=1 b=0 b=0 b=0 b=0 b=1 b=0 Die Bedeutung der Formel: Ausgehend vom aktuellen Zustand wird eine Eigenschaft in mindestens einem Zustand entlang des Pfades erfüllt. 3. Kripke-Struktur Die Kripke-Struktur besteht aus einer Menge von Zuständen S, einer Menge von Anfangszuständen ⊆ , einer Abbildung : →ℙ( ) und einer Zustandsübergangsrelation % ⊆ × . Die Interpretationen von aussagenlogischen Variablen können sich im Laufe der Zeit ändern. Sie sind aber eindeutig durch den aktuellen Zustand des Modells bestimmt. Diese Zuordnung ist über eine MarkierungsfunktionL:S→P(V)erfasst.EineaussagenlogischeVariablepistineinem SystemZustandswahrgenaudann,wennp∈L(s)ist. Es wird angenommen, dass die Übergangsfunktion T total sein muss, und die Menge der Anfangszuständen I darf nicht leer bleiben. Die Übergangsfunktion T wird symbolisch dargestellt, z.B. als eine Formel. T(s,s') gilt genau dann, wenn es ein Übergang von s nach s′ gibt. Man kann es auch so schreiben: s→s'. s ist einfach ein Vektor,deralleaussagenlogischeVariablenVimaktuellenZustandrepräsentiertunds′ einVektorvonderenGrundkopienimNachfolgezustand. 3 DieSemantikvonLTListentlangdesPfadesdesModellsdefiniert.EinPfadπist eine unendliche Folge von Zuständen π = (s₀,s₁,s₂,...), mit sᵢ → sᵢ₊₁. Er ist initialisiert wennderersteZustand,π(0)=s₀einAnfangszustandist.EinSuffixeinesPfadeswird alsπⁱ=(sᵢ,sᵢ₊₁,...)definiert.EineLTL-FormelfhältentlangeinesPfadesπ,geschrieben π⊨f,genaudann,wenn: Q ⊨ Rgdw.R ∈ (Q(0)) Q ⊨ ¬Rgdw.R ∉ (Q(0)) Q ⊨ U ∨ ℎgdw.Q ⊨ UXYQ ⊨ ℎ Q ⊨ U ∧ ℎgdw.Q ⊨ U[\]Q ⊨ ℎ Q ⊨ ^Ugdw.∃` ∈ ℕ: Q b ⊨ U Q ⊨ cUgdw.∀` ∈ ℕ: Q b ⊨ U Q ⊨ eUgdw.Qf ⊨ U Wir gehen davon aus das die Formel in der Negationsnormalform (NNF) ist, d.h. die Negationen werden mit der Hilfe der folgenden Axiome der LTL bis auf die Variablen geschoben: ¬(U ∧ ℎ) ≡ (¬U) ∨ (¬ℎ) ¬^U ≡ c¬U ¬cU ≡ ^¬U ¬eU ≡ e¬U Schließlich hält eine Formel f in einer Kripke-Struktur K, geschrieben K ⊨ f, genau dann, wenn π ⊨ f, für alle Pfade π, die von K initialisiert sind. Das Model Checking Problem muss bestimmen, ob K ⊨ f gilt. Eine Formel f hat einen Zeugen in K genau dann, wenn es einen initialisierten Pfad π mit π ⊨ f gibt. Klar: K ⊨ f gilt genau dann, wenn ¬f keinen Zeugen in K besitzt. Daher können wir das Model Checking Problem auf die Suche nach Zeugen mit Benutzung von Negation und Umwandung in NNF reduzieren. 4 4. Begrenzte Semantik hi hf j k (k,l)-Lasso mit k=5 und l=2 Wir können unendliche Pfade durch einen endlichen Präfix mit einer Schleife darstellen. Wenn die Kripke-Struktur K so darstellbar ist, dann kann unsere Suche nach Zeugen sich nur auf die (k,l)-Lassos beschränken. Ein unendlicher Pfad π ist ein (k,l)Lasso genau dann, wenn π (k +1 + j) = π (l + j) für alle j ∈ N gilt. Wir vereinbaren einen festen Pfad π und arbeiten mit πⁱ - einem Suffix von π. Die Semantik für die Kripke-Struktur mit einen Suffix: Q l ⊨ Rgdw.R ∈ (Q(m)) Q l ⊨ ¬Rgdw.R ∉ (Q(m)) Q l ⊨ U ∨ ℎgdw.Q l ⊨ UXYQ l ⊨ ℎ Q l ⊨ U ∧ ℎgdw.Q l ⊨ U[\]Q l ⊨ ℎ Q l ⊨ ^Ugdw.∃` ∈ ℕ: Q lnb ⊨ U Q l ⊨ cUgdw.∀` ∈ ℕ: Q lnb ⊨ U Q l ⊨ eUgdw.Q lnf ⊨ U Um die "begrenzte Semantik" zu erhalten, betrachten wir nur die ersten o + 1 Zustände und lassen m im Bereich von0biso laufen. Wenn Q ein (o, r) − Lasso ist, dann erhalten wir die folgende "begrenzte Semantik", die für die Lassos gilt: Q l ⊨ ^Ugdw.∃j ∈ {min(i, l), … , k}:πᶨ ⊨ g Q l ⊨ cUgdw.∀` ∈ {min(i, l), … , k}:πᶨ ⊨ g πⁱ⁺¹ ⊨ gwenni < k Q l ⊨ eUgdw. y πᶩ ⊨ gwenni = k 5 Wenn cU auf Pfad Qⁱ gilt, muss U an der aktuellen Position m und an allen größeren Positionen `, mit m ≤ ` ≤ o halten. Wenn jedoch die aktuelle Position m in einer Schleife ist, dann muss auch U von Start bis zum m-ten Element der Schleife halten. Das Minimum über die aktuelle Position m und den Schleifenstart r deckt die beide Fälle ab, und es ist egal, ob wir in der Schleife oder noch in der Wurzel von Q sind. Ein ähnliches Argument gilt auch für ^U. Es sei nun angenommen, dass Q kein (o, r) − Lasso für alle r ist. Dann kann der Suffix Qᵏ⁺¹ eine beliebige Form haben. Wenn man nur die ersten o + 1 Zustände von Q betrachtet, ist es im Allgemeinem nicht genug, um festzustellen, ob eine Formel auf dem Pfad Q hält. Die folgenden Bedingungen halten immer noch: Q l ⊨ ^U€•\\∃` ∈ ‚m … oƒ: Q l ⊨ U Q l ⊨ eU€•\\Q lnf ⊨ U„\]m < o Wenn Q kein (k,l)-Lasso ist und wir den Suffix, der die Grenze k überschreitet, nicht untersuchen wollen, dann kommen wir zu keinem Ergebnis über: Qᵏ ⊨ eU und Qⁱ ⊨ cU für jedes m < o. 5. Aussagenlogische Kodierung Die begrenzte Approximation der LTL-Semantik betrachtet nur die ersten k+1 Zustände von Pfad π. Das ist der Schlüssel, um die aussagenlogische Kodierung des LTLZeugenproblems in SAT zu erhalten. Wir kodieren die Kripke-Struktur K als eine aussagenlogische Formel. Das bedeuted, wir wandeln die Anfangszustände, die Übergangsrelation, das (k,l)-Lasso und die atMostOne-Funktion in die Aussagenlogik um. Die atMostOne-Funktion gibt uns maximal ein existierendes Lasso an. Es kann auch passieren, dass es kein Lasso gibt. Die ganze Kodierung des Zeugenproblems ist in den gegebenen allgemeinen Modellbedingungen erhalten: (hi ) ∧ %(hi , hf ) ∧ … ∧ %(h…†f , h… ) Die Bedingungen für die Schleifenausführung r ∈ {0, … , o} sind auch hinzugefügt: ‡ˆ ↔ %(h… , hˆ ) Wir nehmen an, dass höchstens ein ‡ˆ hält. Was wir mit der atMostOne-Funktion kodieren. 6 Diese Annahmen gelten immer. Insbesondere, wenn die aussagenlogische Kodierung erfüllbar ist. Dann kann die erfüllende Belegung als ein Präfix eines initialisierten Pfades π von K interpretiert werden. Wenn ‡ˆ mit True belegt ist, dann ist π ein (k,l)-Lasso. Was noch zu kodieren bleibt ist die Semantik von LTL. Wir müssen dafür sorgen, dass der Pfad π, der aus einer erfüllenden Belegung entstanden ist, tatsächlich ein Zeuge ist. Ein Beispiel: Die aussagenlogische Kodierung für das gegebene Beispiel: (hi ) ∧ %(hi , hf ) ∧ %(hf , hŠ ) ∧ %(hŠ , h‹ ) mit (hi ) = ŒY„• und %(h, h • ) = (([ ⇔ •) ⇔ (¬[• )) ∧ ((¬[ ∧ •) ⇔ (¬• • )) hi a=0 b=0 hf a=0 b=1 hŠ a=1 b=0 Kripke-Struktur mit (3,1)-Lasso Die atMostOne-Funktion für k=3: [Œ•XhŒ‘\• = (¬‡i ∧ ¬‡f ∧ ¬‡Š ) ∨ (¬‡i ∧ ¬‡f ∧ ¬‡‹ ) ∨ (¬‡i ∧ ¬‡Š ∧ ¬‡‹ ) ∨ (¬‡f ∧ ¬‡Š ∧ ¬‡‹ ) 7 h‹ a=1 b=1 Die ganze Kodierung des Modells: %(hi , hf ) ∧ %(hf , hŠ ) ∧ %(hŠ , h‹ ) ∧ ‡i ∧ ‡f ∧ ‡Š ∧ ‡‹ ∧ [Œ•XhŒ‘\•(‡i , ‡f , ‡Š , ‡‹ ) = ((([i ⇔ •i ) ⇔ (¬[f )) ∧ ’(¬[i ∧ •i ) ⇔ (¬•f )“) ∧ ((([f ⇔ •f ) ⇔ (¬[Š )) ∧ ((¬[f ∧ •f ) ⇔ (¬•Š ))) ∧ ((([Š ⇔ •Š ) ⇔ (¬[‹ )) ∧ ((¬[Š ∧ •Š ) ⇔ (¬•‹ ))) ∧ (‡i ⇒ ((([‹ ⇔ •‹ ) ⇔ (¬[i )) ∧ ’(¬[‹ ∧ •‹ ) ⇔ (¬•i )“)) ∧ (‡f ⇒ ((([‹ ⇔ •‹ ) ⇔ (¬[f )) ∧ ’(¬[‹ ∧ •‹ ) ⇔ (¬•f )“)) ∧ (‡Š ⇒ ((([‹ ⇔ •‹ ) ⇔ (¬[Š )) ∧ ’(¬[‹ ∧ •‹ ) ⇔ (¬•Š )“)) ∧ (‡‹ ⇒ ((([‹ ⇔ •‹ ) ⇔ (¬[‹ )) ∧ ’(¬[‹ ∧ •‹ ) ⇔ (¬•‹ )“)) ∧ [Œ•XhŒ‘\•(‡i , ‡f , ‡Š , ‡‹ ) Jetzt muss noch die Formel f die zu überprüfen ist kodiert werden. 6. Klassische Kodierung Die klassische Kodierung, die das Zeugenproblem von LTL in SAT umwandelt, ist eine eindeutige Kodierung der begrenzten Semantik. Man kann es als ein rekursives Verfahren interpretieren, das die Parameter: LTL-Formel f, festgelegte Grenze k, Schleifenstart l und die Position i annimmt. Die letzten zwei Parameter variieren zwischen 0 und k. Wir bezeichnen mit l‚Rƒl… die resultierende aussagenlogische Formel, die wir beim Kodieren von f mit den gegebenen Parametern erhalten. Die Semantik für die klassiche Kodierung mit einem (k,l)-Lasso: ı‚Rƒl… ≡pᵢ ı‚¬Rƒl… ≡¬pᵢ ı‚g ∨ hƒl… ≡ı‚Uƒl… ∨ ı‚ℎƒl… ı‚g ∧ hƒl… ≡ı‚Uƒl… ∧ ı‚ℎƒl… b ı‚–gƒl… ≡⋁…b˜™š›(ˆ,l) ı‚Uƒ… b … l ı‚ gƒ… ≡⋀b˜™š›(ˆ,l) ı‚Uƒ… b l ı‚eUƒ… ≡ı‚Uƒ… •mŒ` = m + 1mžm < ohX\hŒ` = r 8 Die Kodierung von Zeugen ohne (k,l)-Lasso sieht ähnlich aus. Wir bezeichnen als das Ergebnis der Zeugenkodierung ohne die Annahme, dass ein (k,l)-Lasso für beliebiges l existiert: ‚žƒl… ‚–gƒl… ≡⋁…b˜l ‚Uƒ…b l ‚ gƒ… ≡⊥ ‚Uƒlnf … mžm < o ‚eUƒl… ≡ ⊥ mžm = o Die anderen Fälle sind identisch mit dem (k,l)-Lasso Fall. Die ganze Kodierung sieht dann so aus: ‚žƒ… ≡ ‚žƒi… ∨ ⋁…ˆ˜i ‡¡ ∧ ¡‚žƒi… Der zweite Teil behandelt (k,l)-Lassos, solange der erster Teil keine Voraussetzungen über die Existenz von solchen Lassos macht. Für ein festes k von ¡‚žƒl… existieren Ω(|ž| ∗ o Š ) mögliche verschiedene Parameter. Die gesamte Komplexität ist dann am Ende kubisch in k und linear in der Größe der LTL-Formeln |f|. Für große k ist das nicht akzeptabel. Wir kodieren jetzt eine LTL-Formel žf = [ ∧ ^¬• und überprüfen sie mit der oben gegebenen Modellkodierung unseres Beispiels. Zur Vereinfachung nehmen wir an, dass genau ein (k,l)-Lasso existiert. In dem Beispiel ist es ein (3,1)-Lasso. Die Kodierung: ‚žf ƒ… ≡ ⋁…ˆ˜i ı‚žf ƒi… = ⋁‹ˆ˜i ˆ‚žf ƒi‹ = i‚žf ƒi‹ ∨ f‚žf ƒi‹ ∨ Š‚žf ƒi‹ ∨ ‹‚žf ƒi‹ = i‚[ ∧ ^¬•ƒi‹ ∨ f‚[ ∧ ^¬•ƒi‹ ∨ Š‚[ ∧ ^¬•ƒi‹ ∨ ‹‚[ ∧ ^¬•ƒi‹ = i‚[ƒi‹ ∧ i‚^¬•ƒi‹ ∨ f‚[ƒi‹ ∧ f‚^¬•ƒi‹ ∨ Š‚[ƒi‹ ∧ Š‚^¬•ƒi‹ ∨ ‹‚[ƒi‹ ∧ ‹‚^¬•ƒi‹ b b b b = [i ∧ ⋁‹b˜i i‚¬•ƒ‹ ∨ [i ∧ ⋁‹b˜i f‚¬•ƒ‹ ∨ [i ∧ ⋁‹b˜i Š‚¬•ƒ‹ ∨ [i ∧ ⋁‹b˜i ‹‚¬•ƒ‹ = ([i ∧ ( i‚¬•ƒi‹ ∨ i‚¬•ƒf‹ ∨ i‚¬•ƒŠ‹ ∨ i‚¬•ƒ‹‹ )) ∨ ([i ∧ ( f‚¬•ƒi‹ ∨ f‚¬•ƒf‹ ∨ f‚¬•ƒŠ‹ ∨ f‚¬•ƒ‹‹ )) ∨ ([i ∧ ( Š‚¬•ƒi‹ ∨ Š‚¬•ƒf‹ ∨ Š‚¬•ƒŠ‹ ∨ Š‚¬•ƒ‹‹ )) ∨ ([i ∧ ( ‹‚¬•ƒi‹ ∨ ‹‚¬•ƒf‹ ∨ ‹‚¬•ƒŠ‹ ∨ ‹‚¬•ƒ‹‹ )) 9 = ([i ∧ (¬•i ∨ ¬•f ∨ ¬•Š ∨ ¬•‹ )) ∨ ([i ∧ (¬•i ∨ ¬•f ∨ ¬•Š ∨ ¬•‹ )) ∨ ([i ∧ (¬•i ∨ ¬•f ∨ ¬•Š ∨ ¬•‹ )) ∨ ([i ∧ (¬•i ∨ ¬•f ∨ ¬•Š ∨ ¬•‹ )) Da in unserem Modell nur ein (k,l)-Lasso existieren kann, bekommen wir als Ergebnis die folgende aussagenlogische Formel: ([i ∧ (¬•i ∨ ¬•f ∨ ¬•Š ∨ ¬•‹ )) Wir konjungieren sie dann mit der oben gegebenen aussagenlogischen Modellkodierung und überprüfen mit dem SAT-Solver auf die Erfüllbarkeit. Die entstandene Formel ist erfüllbar, d.h. es gibt in K einen initialen Pfad Q, für den gilt: Q⊨žf . Daraus folgt, dass für unsere Kripke-Struktur K mit einen (3,1)-Lasso Model Checking mit Hilfe von SATSolver entscheidbar ist. DieBelegungderaussagenlogischenVariableninunseremModellfürdieFormelžf : [i = 1 , •i = 1 [f = 0 , •f = 1 [Š = 1 , •Š = 0 [‹ = 1 , •‹ = 1 Der Präfix fängt bei dem Zustand an, der die Belegung [ = 1 , • = 1 hat. Andere Beispiele: Die in der Aussagenlogik kodierte LTL-FormelžŠ = [ ∧ e¬• : ([i ∧ ¬•f ) Wenn wir die Formel ([i ∧ ¬•f ) mit der aussagenlogisch kodierten Kripke-Struktur K konjungieren und dann auf Erfüllbarkeit mit dem SAT-Löser überprüfen, bekommen wir einen Widerspruch als Ergebnis. Das bedeutet, dass die gegebene LTL-Formel žŠ keinen initialen Pfad QindemModellbesitzt, für den Q⊨žŠ gilt. 10 DieklassischkodierteFormelvonž‹ = [ ∧ ^¬• : ([i ∧ ¬•i ∧ •f ) Nach der Überprüfung mit dem SAT-Solver erhalten wir eine erfüllende Belegung. Das bedeutet,die Formel ž‹ hat in unserem Modell einen Pfad Q, für den Q⊨ž‹ gilt. DieBelegungderaussagenlogischenVariablenfürdieFormelž‹ : [i = 1 , •i = 0 [f = 1 , •f = 1 [Š = 0 , •Š = 1 [‹ = 1 , •‹ = 0 Der Präfix fängt beim Zustand an, der die Belegung [ = 1 , • = 0 hat. Die aussagenlogische Kodierung der letzten LTL-Formel ž¥ = [ ∧ c•: ([i ∧ (•i ∧ •f ∧ •Š ∧ •‹ )) Nach der Erfüllbarkeitsüberprüfung stellt sich heraus, dass die resultierende Formel, die aus der kodierten LTL-Formel ž¥ und der kodierten Kripke-Struktur K besteht, ein Widerspruch ist. Das heißt, die Formel ž¥ hat keinen initialen Pfad Q, für den Q⊨ž¥ gilt. Quellen: Armin Biere, Marijn Heule, Hans van Maaren, Toby Walsh: Handbook of Satisfiability : Bounded Model Checking, IOS Press, 2009 11