Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

1 Computergestützte Verifikation 18.6.2002. 2 Zusammenfassung Abstraktion zentral: Simulation/Bisimulation Simulation  ACTL* Bisimulation  CTL* Jede.

Ähnliche Präsentationen


Präsentation zum Thema: "1 Computergestützte Verifikation 18.6.2002. 2 Zusammenfassung Abstraktion zentral: Simulation/Bisimulation Simulation  ACTL* Bisimulation  CTL* Jede."—  Präsentation transkript:

1 1 Computergestützte Verifikation

2 2 Zusammenfassung Abstraktion zentral: Simulation/Bisimulation Simulation  ACTL* Bisimulation  CTL* Jede Menge abstrakter Zustände kann zu Simulation fortgesetzt werden, aber nicht immer zu einer Bisimulation Die meisten Reduktionstechniken sind Abstraktionen

3 3 Allgemeine Abstraktionsverfeinerung Spaltung eines abstrakten Zustandes kann weitere Spaltungen notwendig machen  Propagation nach rückwärts bis sich nix mehr ändert

4 4 Scheingegenbeispiele dead end state = erreichbar von einem konkreten Zustand im ersten abstrakten Zustand bad state = hat Nachfolger Verfeinerung = trenne dead end und bad states erfüllbare Pfadformel nicht erfüllbare Pfadformel

5 5 Lasso-Gegenbeispiele Realisierbar im konkreten System? Schlaufe im konkreten System kann länger sein als im abstrakten System Satz: Wenn abstrakte Schleife überhaupt konkret realisierbar ist, so auch eine der Länge k x A A – Länge der abstrakten Schlaufe k – Anzahl der konkreten Zustände im “kleinsten” abstrakten Zustand

6 6 Zusammenfassung Abstraktionsverfeinerung b) gegenbeispielgesteuert: Wichtig: 1.Realisierbarkeit abstrakter Pfade im konkreten System muß überprüfbar sein 2.geeignete Heuristiken für Trennung von dead ends und bad states a)allgemein: lokale Realisierung der Bisimulationskritierien werden durch das gesamte Transitionssystem propagiert. Wichtig: Umkehrbarkeit der Übergangsrelation

7 7 8. Softwareverifikation 8.1 Predicate Abstraction 8.2 Abstract Interpretation 8.3 Slicing Vorsicht Baustelle ---

8 8 Probleme bei der Softwareverifikation 1.komplexe Datentypen und Expressions 2.Pointer und dynamische Datenstrukturen 3.Prozeduren und Rekursion 4. Bibliotheken

9 9 8.1 Predicate Abstraction Basis: n boolesche Prädikate auf Programmvariablen z.B. p = NULL x > y +1 konkreter Zustand = Belegung der Programmvariablen  Abstraktionsrelation  : c  a gdw. [  1 (c),....,  n (c)]  a Jedem Prädikat  i wird eine boolesche Variable b i zugeordnet abstrakter Zustand = Formel über den b i Halbordnung “impliziert” auf den abstrakten Zuständen pc wird fast immer explizit repräsentiert

10 10 Abstrakte Zustände a  ¬ b ¬ a  b ¬ a  ¬ b a  b c  d ¬ c  dc  ¬d ¬ c  ¬ d (¬ b  ¬ d)  (¬ a  ¬ c  ¬ d) Praxis: z.B. Repräsentation abstrakter Zustände als BDD oder: Restriktion auf einfache Konjunktionen (im Beispiel: ¬ d)

11 11 Wo kommen Prädikate her? a)nutzerdefiniert b)automatisch - Bedingungen in IF, WHILE, elementare Aussagen in Formel

12 12 Abstrakter Nachfolger geg.: Abstrakter Zustand a, guarded command g:   x 1..n :=T 1..n ges.: a’ so daß - jeder konkrete Zustand, der von einem von a repr. Zustand aus per g entsteht, von a’ repr. wird - a’ mglst. stark a’: - false, falls a[b i   i ] i=1..n  ¬  Berechnung von a’ im allg. schwer, für Konjunktionen leichter: -  j = 1 n b j falls a[b i   i ] i=1..n     j [ x i  T i ] i=1..n ¬b j falls a[b i   i ] i=1..n    ¬  j [ x i  T i ] i=1..n true, sonst  Theorembeweiser

13 13 Beziehung zu Dijkstras Weakest Preconditions geg: Statement s, Zustandseigenschaft  spost(s,  ) = die stärkste Eigenschaft  ’, so daß jeder Zustand, der vor Ausführung von s  erfüllt, nach s  ’ erfüllt. wpre(s,  ) = die schwächste Eigenschaft  ’, so daß jeder Zustand, der nach Ausführung von s  erfüllt, vor s  ’ erfüllt hat. Für Zuweisungen: wpre(x := E,  ) =  [x  E] Satz: (spost(s,  )   ’ )  (   wpre(s,  ’) ) exakter abstrakter Nachfolger von a mit command g: spost(g,a)

14 14 Theorembeweiser Eingabe: prädikatenlog. Formel, nicht immer Stufe 1 1. Formel aus entscheidbarer Theorie  Entscheidungsalg. - SAT-Checker - Pressburger Arithmetik - Bitvektor-Arithmetik - Model Checker Rewriting - Regeln (z.B. Schlussregeln)  Termersetzung, Unifikation - Ziel: Rückführung auf Axiome - erweiterbare Regelbasis - Taktiken

15 15 Abstraktionsverfeinerung = Hinzunahme weiterer Prädikate

16 16 Beispiel typedef struct cell{ int val; struct cell* next; } * list; list partition(list *l, int v) { list curr, prev, newl, nextCurr; curr = * l; prev = NULL; newl = NULL; while( curr != NULL) { nextCurr = curr -> next; if(curr -> val > v) { if(prev != NULL) { prev -> next = nextCurr; } if(curr == *l) { *l = nextCurr; } curr -> next = newl; L: newl = curr; } else { prev = curr; } curr = nextCurr; } return newl; } void partition() { bool b1,b2,b3,b4; b1 = unknown(); b3 = unknown(); b2 = true; b4 = unknown(); skip; while(*) { assume(!b1); skip; if(*) { assume(b3) if(*) { assume(!b2); skip; } if(*) { skip; } skip; L: skip; } else { assume(!b3); b2 = b1; b4 = b3; } b1 = unknown(); b3 = unknown(); } assume(b1); } b1: curr==NULL b2: prev==NULL b3: curr->val>v b4: prev->val>v  curr!=NULL AND curr->val>v AND (prev->val<=v OR prev=NULL))  !b1 AND b2 AND (!b3 OR b4))

17 17 Pointer bisher: wpre(x := E,  ) =  [ x  E] stimmt nicht, wenn Pointer beteiligt sind: Beispiel: Sei p = & x; wpre(x = 3, *p > 5) != *p > 5  (für einen potentiellen Alias y) wpre(x := E,  ) = ( ( &x = &y   [y  E])  ( &x != &y   ) ) Nichtdeterminismus, es sei denn, Alias-Analyse kann eine Alternative ausschließen: “may point to”, “may not point to”

18 18 Bedingungen IF B THEN T ELSE E END  IF * THEN assume(X); T ELSE assume(Y); END X: das stärkste Prädikat (über den gegebenen Prädikaten) das von B impliziert wird Y: das stärkste Prädikat (über den gegebenen Prädikaten) das von ¬B impliziert wird zwischen X und Y kann Lücke klaffen  Nichtdet.

19 19 Prozeduren einfach: Inlining (mit Tiefenrestriktion bei Rekursion) schwierig: Fixpunktberechnung

20 20 Übung Transformiere folgendes C-Programm in ein boolesches Programm, basierend auf den Prädikaten x > 0, y = x und y != 0 main() { int x,y,z; x = 3; y = x + 1; while(y > 3) { z = 0; if(x == z) { x = x + 1; z = 3; } else { y = x - 1; y++; } y = 2 * y; } x = foo(y,z); }


Herunterladen ppt "1 Computergestützte Verifikation 18.6.2002. 2 Zusammenfassung Abstraktion zentral: Simulation/Bisimulation Simulation  ACTL* Bisimulation  CTL* Jede."

Ähnliche Präsentationen


Google-Anzeigen