Seminar Modellüberprüfung
SMV – Symbolic Model Verifier
Referent: Markus Nosse
Inhaltsübersicht:
Grundlagen
Das SMV System
Grundlagen – BDDs 1
Binäre Entscheidungsdiagramme
Repräsentation von logischen Formeln
Effiziente Algorithmen
Kanonische Darstellungsform
Repräsentation von Kripke Strukturen
Grundlagen – BDDs 2
Entscheidungsbaum
Entscheidungsdiagramm ist (sehr viel) kompakter
Beispiel: f = a b c
a
n1
b
b
0
1
0
c
c
0
1
1
0
1
1
0
n2
a
0
1
0
1
0
1
c
1 0
0
n3
0
0
1
1
c
c
1
b
1
0
1
1
0
1
Grundlagen – BDDs 3
Zusammenfassen isomorpher Teilbäume
Terminale Knoten
var(v1) = var(v2) und
low(v1) = low(v2) und high(v1) = high(v2)
Elimination überflüssiger Entscheidungen
low(v) = high(v)
n2
b
0
c
0
1
c
1
0
1
c
1 0
0 1
1
0
1
1
Grundlagen – BDDs 4
Direkte Konstruktion mittels Shannon Expansion
f(x1,...,xn) = (xif1) ( xi f0),
fk = f(x1,...,xi=k,...,xn ), k = 0,1
Pro Anwendung ein Knoten für xi
Teilbäume ergeben sich rekursiv aus f 0, f1
a b c
0
c
a 1
b c
a b c
0
c
a 1
b 1
1
c
a b c
b c
a 1
0
0 b
0
1
c
0
1
0
1
Grundlagen - OBDDs
Ordnung auf Variablen
Minimalität, Kanonität
Effiziente Algorithmen
Reduce – Minimierung mit Aufwand O(|G|log|G|)
Apply – Logische Verknüpfung in O(|G||H|)
Restrict – Shannon Expansion in O(|G|log|G|)
Optimale Ordnung
coNP vollständiges Problem
Ausreichend gute Ordnungen sind bestimmbar
Grundlagen - Repräsentation
Kripke-Strukturen als OBDDs
Binäre Codierung der Zustandsvariablen
Codierte Übergangsrelation definiert über {0,1}
Charakteristische Funktion ist logische Formel
Darstellbar als OBDD
ab
s1
a b
s2
s1 s2: (a b) (a’ b’)
s2 s1: (a b) (a’ b’)
s2 s2: (a b) (a’ b’)
(s1s2) (s2s1) (s2s2)
Symbolische Modellüberprüfung 1
Algorithmus Check
Eingabe: CTL Formel
Ausgabe: Menge der erfüllenden Zustände als
OBDD
Bezug auf eine Kripke Struktur (S,R,L),
Übergangsrelation R liegt als OBDD vor
Symbolische Modellüberprüfung 2
Rekursive Definition über der Struktur von CTL
Formeln
Atomare Aussage f = a
Ergebnis ist Menge der Zustände, in denen a erfüllt ist
Boolesche Operatoren f = f1 f2, f = f1
Berechnung mittels Apply
Operanden sind Check(f1) und Check(f2)
CTL Operator EX f
Subroutine CheckEX
Parameter ist Check(f)
Ergebnis ergibt sich aus Relational Product Computation
Symbolische Modellüberprüfung 3
CTL Operator EG f
Subroutine CheckEG
Parameter ist Check(f)
Berechnung über größten Fixpunkt
CTL Operator E[f U g]
Subroutine CheckEU
Parameter sind Check(f), Check(g)
Berechnung über kleinsten Fixpunkt
E[p U q]:
p
p
q
SMV – Überblick 1
SMV – Symbolic Model Verifier
Basistypen
Boolean
Endliche Integer Intervalle
Aufzählungstypen
Syntaktische Abkürzungen für CTL Formeln
Signale
Im Sinne von „Variablen“
Definition als <name> : <typ>
Eindeutige Zuweisungen, keine zirkulären Abhängigkeiten
Operatoren init(<signal>) und next(<signal>)
SMV - Überblick 2
Module
Unterstützung von komponentenorientieren Modellen
Mehrfach instanziierbar
Parametrisierbar
Eingabe- und Ausgabeparameter
Synchrone oder asynchrone Modellierung
Prozesse
Schlüsselwort process
Analogie: Prozessmodell auf Einprozessorsystem
SMV – Überblick 3
Spezifikation
Mittels CTL Formeln
Temporale Operatoren X, G, F und U
Implizite universelle Quantifizierung Gegenbeispiele
Voraussetzungen für Beweise
neXt, Globally, in the Future, Until
using … prove
Annahme von nichtbeweisbaren Eigenschaften
assume …
Fairness-Bedingungen
Weitere Sprachkonstrukte 1
Alles syntaktische Abkürzungen
Komplexe Typen
Arrays
Mit beliebigem Typ, auch n-dimensional oder generisch
Index aufsteigend (0..7) oder absteigend (7..0)
Bsp: proc: array[0..1];
bits: array[7..0] of boolean;
Strukturierte Typen
Definition über Module
Ausnahme: Strukturen ohne Parameter
Bsp: hands : struct {
left, right: boolean; };
Weitere Sprachkonstrukte 2
If Anweisung
if (<expr>) <stmt1> [ else <stmt2> ]
Statements analog zu C oder Java
Bsp: if (test) a = 1; else b = 1;
Default Regeln
Zustand des modellierten Systems entspricht Belegung
der Zustandsvariablen
Semantik undefinierter Zustandsvariablen?
Defaults bestimmen Werte für undefinierte Variablen
Explizite Regeln definierbar
default <stmt1> in <stmt2>
Weitere Sprachkonstrukte 3
Case und Switch Anweisung
Syntactic Sugar für if-else-Kaskaden
Schleifen
Sogenannte Konstruktor Loops
werden zur Compilezeit ausgewertet und komplett
ausgerollt
Fortgeschrittene Modellierung
Modellierung in Schichten
Bessere Abstraktion möglich
Ausnutzen von Symmetrien
Verifikation von “Repräsentanten”
Anlehnung an Induktionsbeweise
Bewertung
Mächtige Konzepte
Fehlerträchtige Modellierung wegen Komplexität
Beispiel Mutex
MODULE proc(state, otherState) {
output state: stateSet;
input otherState: stateSet;
init(state) := noncritical;
case {
(state = noncritical) :
next(state) := {trying, noncritical};
(state = trying) & (otherState = noncritical) :
next(state) := critical;
(state = trying) & (otherState = trying) :
next(state) := critical;
(state = critical) :
next(state) := {critical, noncritical};
default:
next(state) := state;
};
}
Beispiel Mutex
typedef stateSet {noncritical, trying, critical};
MODULE main() {
proc: array 0..1;
for(i=0; i<2; i = i+1)
proc[i] : process proc(proc[(i+1) mod 2].otherState,
proc[(i+1) mod 2].state);
fairness: assert G F proc[0].running & G F proc[1].running;
proc0_fair: assert G F ~(proc[0].state = critical);
proc1_fair: assert G F ~(proc[1].state = critical);
mutex_violation: assert G F ~((proc[0].state = critical) &
(proc[1].state = critical));
using fairness, proc0_fair, proc1_fair
prove mutex_violation;
assume fairness, proc0_fair, proc1_fair;
}
Bewertung und Stellungnahme
Praxistauglich
Siehe Verifikation des FutureBus+
Kommerzielle Tools verfügbar, deutet auf
industriellen Einsatz hin
SMV scheint hardwarelastig zu sein
Interessante Technologie, aber
Theorie nicht leicht
Modellierung auch nicht leicht