PPT

Werbung
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) = (xif1)  ( 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’)
(s1s2)  (s2s1)  (s2s2)
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
Herunterladen