Computergestützte Verifikation

Slides:



Advertisements
Ähnliche Präsentationen
Temporale Logiken: LTL und CTL
Advertisements

Klassen - Verkettete Liste -
Programmierung 1 - Repetitorium WS 2002/2003 Programmierung 1 - Repetitorium Andreas Augustin und Marc Wagner Homepage:
Bounded Model Checking II
Durchlaufen eines Binärbaumes
4. Logik – und ihre Bedeutung für WBS
Kapitel 3: Listen Lineare Liste: endliche Folge von Elementen eines Grundtyps (n>=0), leere Liste falls n=0 Listenelemente besitzen.
Hauptseminar Modellüberprüfung Kathrin Ott
Seminar Modellüberprüfung
Kapitel 4 Datenstrukturen
Imperative Programmierung
der Universität Oldenburg
Algorithmen und Komplexität
Terminierung und Deadlocks Enkhbat Daginaa Betreuerin Prof. Heike Wehrheim Totale Korrektheit.
Computergestützte Verifikation
Computergestützte Verifikation (Halbkurs) Karsten Schmidt Di 9-11 R Fr R
1 Computergestützte Verifikation Abstraktion.
Computergestützte Verifikation
Computergestützte Verifikation
1 Computergestützte Verifikation SAT-basiertes Model Checking Ansatz: Übersetze das Model Checking Problem in ein aussagenlogisches Erfüllbarkeitsproblem.
1 Computergestützte Verifikation Symbolisches Model Checking 4.1 CTL Model Checking mit Binary Decision Diagrams (1. Systeme 2. Spezifikationen.
1 Computergestützte Verifikation Probleme bei der Softwareverifikation 1.komplexe Datentypen und Expressions 2.Pointer und dynamische Datenstrukturen.
Computergestützte Verifikation
1 Computergestützte Verifikation Teil II Infinite State Systems.
1 Computergestützte Verifikation SAT-basiertes Model Checking Ansatz: Übersetze das Model Checking Problem in ein aussagenlogisches Erfüllbarkeitsproblem.
Computergestützte Verifikation
1 Computergestützte Verifikation Real Time Systeme 5.1 Timed Automata 5.2 TCTL 5.3 Abstraktion durch Regionen 5.4 Abstraktion durch Zonen.
Computergestützte Verifikation
1 Computergestützte Verifikation Model Checking für finite state systems explizit:symbolisch: 3.1: Tiefensuche 3.2: LTL-Model Checking 3.3:
Java: Dynamische Datentypen
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Prof. Dr. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Tobias Lauer.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Prof. Dr. Th. Ottmann.
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 2 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (05 – Elementare Datenstrukturen) Prof. Th. Ottmann.
Vorlesung Informatik 3 Einführung in die Theoretische Informatik (17 –Turingmaschinen) Prof. Dr. Th. Ottmann.
Symbolisches Model Checking mit Binary Decision Diagrams
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 9 Claudio Moraga; Gisbert Dittrich FBI Unido
PRJ 2007/1 Stefan Dissmann Motivation Problem: gleiche Datenstrukturen werden für verschiedene Objekte gebraucht: z.B. Listen von Studierenden, Kunden,
DVG Ablaufsteuerung
Weiteres Programm Studium des Breitendurchlaufs Hierzu
1 Prof Dr Dr H Neunteufel Anwendungsprogrammierung II Musterlösungen.
Einführung in die Programmierung Anweisungen und Datentypen
Einfach verkettete Listen
Einfach verkettete Listen (OOP)
Types and Programming Languages: Einführung Typen SWT Seminar WS 05/06
Grundkonzepte Java - Klassendefinition
Informatik 1 Übung 2.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Programmierung
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
BIT – Schaßan – WS 02/03 Basisinformationstechnologie HK-Medien Teil 1, 11.Sitzung WS 02/03.
Beweissysteme Hartmut Klauck Universität Frankfurt WS 06/
Efficient Alias Set Analysis Using SSA Form Proseminar Programmanalyse WS 11/12 André Hunke.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure
Einführung in die Programmierung Wintersemester 2009/10 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fakultät.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fakultät.
Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik Dr. Wieland Schwinger
2.4 Rekursion Klassifikation und Beispiele
Purga - Scriptengine Ein Einblick.
CuP - Java Sechste Vorlesung Entspricht ungefähr Kapitel 3. 1 – 3
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
1 Computergestützte Verifikation Binary Decision Diagrams (BDD) Inhalt: Die Datenstruktur BDD Operationen auf BDD CTL Model.
Java Syntaxdiagramme Buchstabe A B Z a z ... Ziffer
Java-Kurs - 4. Übung Hausaufgabe Weitere Kontrollstrukturen
2 Datenabstraktion Geheimnisprinzip:
Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Algorithmen und Datenstrukturen 1 SS 2002 Mag.Thomas.
1 Computergestützte Verifikation Übung 1 Konstruiere den Regionengraph für folgendes System (Anfang: k = 0) ! Identifiziere in diesem Graph.
1 // Verkettete Liste 2 // demonstriert verkettete Listen und // Rekursion // (Einfügen am "Fuß") // #include struct Liste { int Element; Liste *weiter;
 Präsentation transkript:

Computergestützte Verifikation 18.6.2002

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

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

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

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

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

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

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

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

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

Wo kommen Prädikate her? nutzerdefiniert automatisch - Bedingungen in IF, WHILE, .... - elementare Aussagen in Formel

Abstrakter Nachfolger geg.: Abstrakter Zustand a, guarded command g: g  x1..n:=T1..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 Berechnung von a’ im allg. schwer, für Konjunktionen leichter: a’: - false, falls a[bifi]i=1..n ¬ g bj falls a[bifi]i=1..n  g  fj [ xiTi]i=1..n n -  ¬bj falls a[bifi]i=1..n  g  ¬fj [ xiTi]i=1..n j = 1 true, sonst  Theorembeweiser

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

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

Abstraktionsverfeinerung = Hinzunahme weiterer Prädikate

Beispiel void partition() { bool b1,b2,b3,b4; typedef struct cell{ b1 = unknown(); b3 = unknown(); b2 = true; b4 = unknown(); skip; while(*) { assume(!b1); if(*) { assume(b3) if(*) { assume(!b2); } L: skip; } else { assume(!b3); b2 = b1; b4 = b3; assume(b1); 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; b1: curr==NULL b2: prev==NULL b3: curr->val>v b4: prev->val>v AG(@L curr!=NULL AND curr->val>v AND (prev->val<=v OR prev=NULL)) AG(@L !b1 AND b2 AND (!b3 OR b4))

Pointer bisher: wpre(x := E,f) = f[ 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, f) = ( ( &x = &y  f[y  E])  ( &x != &y  f) ) Nichtdeterminismus, es sei denn, Alias-Analyse kann eine Alternative ausschließen: “may point to”, “may not point to”

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.

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

Übung Transformiere folgendes C-Programm in ein boolesches 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); Transformiere folgendes C-Programm in ein boolesches Programm, basierend auf den Prädikaten x > 0, y = x und y != 0