Abstarkte Interpretation I

Ähnliche Dokumente
Verlässliche Echtzeitsysteme

Verlässliche Echtzeitsysteme

Kapitel 6. Fixpunkte und semantische Bereiche

Qualitätssicherung von Software (SWQS)

Vorlesung Modellierung, Analyse, Verifikation Wintersemester 2012/13

Abstrakte Interpretation (I) Vorlesung Modellierung, Analyse, Verifikation Wintersemester 2017/18. Abstrakte Interpretation (II)

Semantik von Programmiersprachen SS 2017

Elementare Verbandstheorie. Elementare Verbandstheorie Sommersemester / 1

6 Denotationale Semantik Semantik von Programmiersprachen

8. Einfache Fixpunkttheorie

Dank. Theoretische Informatik II. Teil II. Registermaschinen. Vorlesung

Programmierung und Modellierung

3.4 Fixpunkttheorie auf Partialordnungen

Philosophie des Intuitionismus und sein Einfluß auf die Informatik

1. Erste Schritte 2. Einfache Datentypen 3. Anweisungen und Kontrollstrukturen 4. Verifikation 5. Reihungen (Arrays) II.1.4. Verifikation - 1 -

Beispiel 1 zur Verifikation eines bedingten Anweisung. Hoare-Regel für die bedingte Anweisung. Beispiel 2 zur Verifikation eines bedingten Anweisung

Beispiel 1 zur Verifikation eines bedingten Anweisung. Hoare-Regel für die bedingte Anweisung. else

Vorlesung Modellierung, Analyse, Verifikation Wintersemester 2018/19

1. Erste Schritte 2. Einfache Datentypen 3. Anweisungen und Kontrollstrukturen 4. Verifikation 5. Reihungen (Arrays) II.1.4. Verifikation - 1 -

{P} S {Q} {P} S {Q} {P} S {Q} Inhalt. Hoare-Kalkül. Hoare-Kalkül. Hoare-Tripel. Hoare-Tripel. Hoare-Tripel

n 1. Erste Schritte n 2. Einfache Datentypen n 3. Anweisungen und Kontrollstrukturen n 4. Verifikation n 5. Reihungen (Arrays)

Entscheidungsverfahren mit Anwendungen in der Softwareverifikation

Theoretische Informatik für Wirtschaftsinformatik und Lehramt

Exkurs: Elementare Verbandstheorie. Exkurs: Elementare Verbandstheorie Sommersemester / 20

! 1. Erste Schritte! 2. Einfache Datentypen! 3. Anweisungen und Kontrollstrukturen! 4. Verifikation! 5. Reihungen (Arrays) II.1.4. Verifikation - 1 -

Programmierung und Modellierung

6 SYMBOLIC MODEL CHECKING

While Programme. Kai Sauerwald Zusammenfassung: Formale Methoden des Systementwurfs SS 12

Theoretische Informatik II: Fixpunkttheorie & Datenflussanalyse

Grundlagen der Theoretischen Informatik: Übung 10

Substitution. Unifikation. Komposition der Substitution. Ausführung der Substitution

Kapitel 2. Zahlenbereiche

Vorlesung Höhere Programmiersprachen, Teil 2: Formale Semantik. Denotationelle Semantik

Grundbegriffe der Informatik Tutorium 14

C. A. R. Hoare. An Axiomatic Basis for Computer Programming. Nicolas Schelp. Proseminar Assertions SS 2007

Mathematische Beweise und Symbolische Tests

Testen und abstrakte Interpretation

Grundbegriffe der Informatik

Informatik I - Programmierung Globalübung Hoare-Kalkül. Thomas Weiler. Fachgruppe Informatik RWTH Aachen. T. Weiler, RWTH Aachen - 1 -

Programmieren für Fortgeschrittene

Funktionale Programmierung Teil 2 Methodik: Spezifikation, Implementierung, Verifikation

Was ist mathematische Logik?

LOOP-Programme: Syntaktische Komponenten

Kurt Gödel und die Grundlagen der Mathematik

Automaten, Formale Sprachen und Berechenbarkeit I Wichtige Begriffe

Korrektheit und Hoare-Kalkül für Imperative Programme

Turing-Maschinen: Ein abstrakes Maschinenmodell

Grundbegriffe der Informatik

Kapitel 2. Zahlenbereiche

Automaten, Spiele, und Logik

1 Algorithmische Grundlagen

Der Satz von Rice. Dann ist C(S) eine unentscheidbare Menge.

Einführung in die Berechenbarkeitstheorie

1. Übung Algorithmen I

Syntax von LOOP-Programmen

Zusammenfassung. Definition. 1 (x i ) 1 i n Sequenz von Registern x i, die natürliche Zahlen beinhalten. 2 P ein Programm. Befehle: 1 x i := x i + 1

1 Einführung. 2 Typ-0- und Typ-1-Sprachen. 3 Berechnungsmodelle. 4 Unentscheidbarkeit. 5 Unentscheidbare Probleme. 6 Komplexitätstheorie

MODEL CHECKING 2 - AUTOMATEN

1 Einführung. 2 Typ-0- und Typ-1-Sprachen. 3 Berechnungsmodelle. 4 Unentscheidbarkeit. 5 Unentscheidbare Probleme. 6 Komplexitätstheorie

Theoretische Informatik II. Vorlesungsnotizen

Übung zur Vorlesung Berechenbarkeit und Komplexität

Objektorientierte Programmierung VL: Prof. Dr. Marco Block-Berlitz - Freie Universität Berlin Proinformatik III

Formale Verifikation. KV Software Engineering Prof. Dr. Martin Glinz. Kapitel 4. Universität Zürich Institut für Informatik

Logik. Logik. Vorkurs Informatik Theoretischer Teil WS 2013/ September Vorkurs Informatik - Theorie - WS2013/14

Boolsche und kartesische Abstraktion zum Model Checking von C Programmen. Seminar: Software Model Checking

Einführung in die mathematische Logik

Vorlesung Diskrete Strukturen Die natürlichen Zahlen

Korrektheit imperativer Algorithmen

Systemtheorie 1. Formale Systeme 1 # WS 2006/2007 Johannes Kepler Universität Linz, Österreich

Logische und funktionale Programmierung

Algorithmen und Datenstrukturen

Vorlesung Diskrete Strukturen Die natürlichen Zahlen

5.3 Korrektheit und Verifikation

Kapitel 5. Mathematische Semantik. 1 Motivation

Inhalt. Annäherung an das Nichtberechenbare - Statische Programmanalyse - Reinhard Wilhelm. Interessante Fragen über Programme

Algorithmische Methoden für schwere Optimierungsprobleme

KV Software Engineering Übungsaufgaben SS 2005

Einführung in die Theoretische Informatik

Kurseinheit 1 Einführung und mathematische Grundlagen Aussagenlogik

Top-down Bottom-up Divide & Conquer Dynamisches Programmieren Caching (Memoization) Branch-and-Bound Greedy

6.3 NP-Vollständigkeit. alle anderen Probleme in NP darauf polynomiell reduzierbar. 1 Polynomielle Reduzierbarkeit p

WS 05/06 mod Verifikation

α : Σ γ Σ α γ : Σ α Σ γ

Grundlagen der Theoretischen Informatik

Logik für Informatiker

2. Grundlagen. Beschreibung von Algorithmen durch Pseudocode. Korrektheit von Algorithmen durch Invarianten.

Deklarative Semantik

Kapitel 6 Wahrheitsfunktionale Fuzzy-Logik. 10. Juni 2005

Kapitel 1: Informationsverarbeitung durch Programme

Übersicht Formale Semantik. Übersicht Axiomatische Semantik. Inhaltsübersicht HPS WS 2003/04. Vorlesung Höhere Programmiersprachen,

GTI. Hannes Diener. 18. Juni. ENC B-0123,

Grundbegriffe der Informatik

Kapitel 5. Fixpunktoperatoren

Problem: Gegeben Spezifikation (P,Q) und Implementierung S Gesucht formaler (automatisierbarer?) Beweis, dass S (P,Q) erfüllt.

SONNTAG OFFEN 599. undsparen! LACK LACK HOCH GLANZ HOCH GLANZ. Los je

Grundlagen Theoretischer Informatik 2 WiSe 2011/12 in Trier. Henning Fernau Universität Trier

Überabzählbarkeit der reellen Zahlen

PCF-Theorie (Jech, Seiten 466 bis 469)

1 Funktionale vs. Imperative Programmierung

Transkript:

Lehr- und Forschungseinheit Theoretische Informatik Hauptseminar Programmanalyse SS 2009 Abstrakte Interpretation I Prof. Dr. Martin Hofmann Referent:

Gliederung I. Grundlagen der abstrakten Interpretation II. Approximation der Fixpunkte 1. Grundbegriffe 2. Widening Operators 3. Narrowing Operators III. Zusammenfassung

I. Grundlagen der AI Prof. Dr. Patrick Cousot, Informatikprofessor an der École Normale Supérieure in Paris

I. Grundlagen der AI Abstrakte Interpretation - ist eine allgemeine Theorie für semantische Approximation von diskreten dynamischen Systemen, z.b Berechnung eines Programms

I. Grundlagen der AI Abstrakte Interpretation in der Programmanalyse: Model-Checking Approximation der Fixpunkte Software Steganographie Statische Analyse

AI in der Programmanalyse Programme können häufig nicht vollständig analysiert werden: Es gibt unendlich viele Eingabewerte Variablen können die Belegungen aus einem unendlich großem Werteraum haben

I. Grundlagen der AI Grundidee der abstrakten Interpretation: das Programm nicht auf den eigentlichen konkreten Werten, sondern auf Abstraktionen der Datentypen analysieren

Abstraktion in Galois Verbindungen Es werden zwei Funktionen definiert: Abstraktion α, die jeden Wert auf auf seinen abstrakten Wert abbildet α : L M Konkretisierung γ, die einem abstrakten Wert alle konkrete Werte zuordnet, für die er steht γ : M L

Abstraktion in Galois Verbindungen konkreter Bereich Z abstrakter Bereich [-, + ] {-3, -2,...18, 19} {-3, 0, 10, 12, 19}. {-3,1,4,19}... α α α. [-3,19]

Abstraktion in Galois Verbindungen konkreter Bereich Z abstrakter Bereich [-, + ] {-3,...,19} {-3, -2,...18, 19} {-3, 0, 10, 12, 19}. {-3,1,4,19}... α α α. [-3,19]

Zahlen durch even/odd abstrahieren α: Z {even, odd} Möglichkeiten der Abstraktion α(x) = {even}, falls x gerade {odd}, falls x ungerade (B. König)

I. Grundlagen der AI Beispiel Korrektheit der arithmetischen Berechnung : 373 8847 + 12345 = 3312266

I. Grundlagen der AI Beispiel Korrektheit der arithmetischen Berechnung : 373 8847 + 12345 = 3312266 eine Zahl ist durch 9 teilbar, genau dann wenn ihre Quersumme durch 9 teilbar ist [a+b mod 9] = [((a mod 9)+(b mod 9)) mod 9]

I. Grundlagen der AI 373 8847 + 12345 = 3312266 L = N M = {0,..., 8} α(x) = x mod 9 α1 + α2 = (α1 + α2) mod 9 α1 * α2 = (α1 * α2) mod 9 l1 * l2 + l3 = l4 => α(l1) * α(l2) + α(l3) = α(l4)

I. Grundlagen der AI 373 8847 + 12345 = 3312266 QS[373] 13 mod 9 = 4 QS[8847] 27 mod 9 = 0 QS[12345] 15 mod 9 = 6 QS[3312266] 23 mod 9 = 5

I. Grundlagen der AI 373 8847 + 12345 = 3312266 QS[373] 13 mod 9 = 4 QS[8847] 27 mod 9 = 0 QS[12345] 15 mod 9 = 6 QS[3312266] 23 mod 9 = 5 4 * 0 + 6 = 5 6 5

I. Grundlagen der AI Die Anwendung der abstrakten Interpretation intuitiv: Durch die abstrakte Semantik wird schließlich ein Gleichungssystem aufgebaut, dass für jeden Programmpunkt alle mögliche Zustände des Programms in allen möglichen Umgebungen berechnet

x(t) I. Grundlagen der AI Konkrete Semantik des Programms t

Unentscheidbarkeit I. Grundlagen der AI konkrete Semantik des Programms ist im Allgemeinen als ein unendliches mathematisches Objekt nicht berechenbar Viele Fragen bezüglich konkreter Semantik des Programms sind unentscheidbar (z.b Terminierung des Programms)

I. Grundlagen der AI Prüfen die sicheren Pfaden die Verifikation der sicheren Pfaden besteht in Überprüfung, ob die konkrete Semantik sich mit der unzulässigen Zonen nicht überkreuzt

I. Grundlagen der AI Sicherheitseingenschaften x(t) t

I. Grundlagen der AI Testen x(t) t

I. Grundlagen der AI Abstrakte Interpretation x(t) t

Formale Methoden I. Grundlagen der AI Model-Checking - Technik zum Beweisen der Gültigkeit einer Spezifikationen im Bezug auf ein Programm Deduktive Methoden spezifizieren die Verifikation der Bedingungen mit induktiven Schritten (Verwendung der Logikkalküls und Beweisregeln) Statische Analyse abstrakte Semantik wird automatisch errechnet durch die vordefinierte Approximation

I. Grundlagen der AI Fehlerhafte Abstraktion x(t) t

Falscher Alarm I. Grundlagen der AI x(t) t

I. Grundlagen der AI Abstrakte Interpretation in der Programmanalyse: Model-Checking Approximation der Fixpunkte Software Steganographie Statische Analyse

Abstrakte Interpretation I II. Approximation der Fixpunkte

II. Approximation der Fixpunkte Begriffe: Vollständiger Verband (complete lattices) Fixpunkte Upper Bound Operator Widening Narrowing

Vollständiger Verband Ein Tupel (L, ), bestehend aus einer Menge L und einer partiellen Ordnung auf L heißt vollständiger Verband, wenn jede Teilmenge Y von L eine kleinste obere (Supremum) und eine größte untere (Infimum) Schranke hat. Dies muss insbesondere für Y = gelten. Man definiert = sup L (top) = inf L (bottom)

Vollständiger Verband Intervall = { } oder {[z1, z2] z1 z2, z1, z2 N, N = {-,..., -1, 0, 1,..., }} [,- ] [1, ] [2, ] [1, 2] [-1, -1] [0, 0] [1, 1] [2, 2]

Fixpunkt-Theorie Sei f : L L eine Funktion auf einem vollständigen Verband L. Die Menge aller Fixpunkte: Fix (f ) = {l L f (l) = l}

Fixpunkt-Theorie Die Menge aller Präfixpunkte : Pre(f) = {l L f(l) l } Die Menge aller Postfixpunkte: Post(f) = {l L f(l) l}

Fixpunkt-Theorie Der kleinste Fixpunkt (least fixed point): lfp(f) = Fix(f) Der größte Fixpunkt (greatest fixed point): gfp(f) = Fix(f)

Theorem von Knaster-Tarski Sei (L, ) ein vollständiger Verband und f : L L eine monotone Funktion. Dann gilt: Folgerungen: jede monotone Funktion besitzt mind. einen Fixpunkt Die Menge aller Fixpunkte bildet einen vollständigen verband

Fixpunkt-Iteration Sei f eine monotone Funktion auf L, nach dem Satz von Kleene gilt: lfp(f) = man berechnet bis die Folge stationär ist und erhält dann den kleinsten Fixpunkt

Pre(f)----------------- Fix(f)------------------- Post(f)---------------- Fixpunkte........ -------------------- ---------------------- --------------------- --------------------- gfp(f) ----------------------- lfp(f) ------------------------ ------------------------ -------------------

Upper Bound Operator Operator Verband wenn: auf dem vollständigen heißt Upper Bound Operator, für alle l1, l2 L Zurückgeliefert wird der Wert, der immer größer beider Argumente ist

Widening Operator Operator auf dem vollständigen Verband ist ein Widening Operator nur dann, wenn: Das ist ein Upper Bound Operator, und die aufsteigende Kette wird letztendlich stabil für alle aufsteigenden Ketten

Widening Operator Widening Operator auf einem Intervall: [l0, u0] [l1, u1] = [if l1 < l0 then - else l0; if u1 > u0 then + else u0]

Widening Operator Widening Operator auf einem Intervall: [l0, u0] [l1, u1] = [if l1 < l0 then - else l0; if u1 > u0 then + else u0] [0,1] [0, 2] = [0, + ] [0,2] [0, 2] = [0, 2]

Widening Operator Mit dem Widening Operator und einer monotonen Funktion f : L x L L kalkuliert man die Sequenz

Widening Operator Pre(f) ------------------>. Ω fm= Ω fm+1 lfp(f) -----------------------...... Ω fm-1 Ω f2 Ω f1 Ω f0

Narrowing Operator Operator ist auf dem vollständigen Verband L ein Narrowing Operator nur dann, wenn für alle und für alle absteigenden Ketten wird die Sequenz letztendlich stabil

Narrowing Operator Nach Verwendung des Widening kann das Intervall sehr ungenau sein => Narrowing Operator versucht, die möglichen Werte wieder einzuschränken. Die Sequenz wird berechnet:

Narrowing Operator Folgerung: wenn Narrowing Operator und, dann eine absteigende Kette, und

Narrowing Operator Pre (f)... lfp(f)....................

Beispiel (1) x := 1; X1 = [1, 1] 1: X2 = (X1 X3) [-, 9999] while x < 10000 do X3 = X2 Θ [1, 1] 2: X4 = (X1 X3) [10000, ] x := x+1 3: od; 4:

Beispiel (2) x := 1; X1 = [1, 1] 1: X2 = (X1 X3) [-, 9999] while x < 10000 do X3 = X2 Θ [1, 1] 2: X4 = (X1 X3) [10000, ] 3: x := x+1 od; X1 = ø 4: X2 = ø X3 = ø X4 = ø

Beispiel (3) x := 1; X1 = [1, 1] 1: X2 = (X1 X3) [-, 9999] while x < 10000 do X3 = X2 Θ [1, 1] 2: X4 = (X1 X3) [10000, ] 3: x := x+1 od; X1 = [1, 1] 4: X2 = ø X3 = ø X4 = ø

Beispiel (4) x := 1; X1 = [1, 1] 1: X2 = (X1 X3) [-, 9999] while x < 10000 do X3 = X2 Θ [1, 1] 2: X4 = (X1 X3) [10000, ] 3: x := x+1 od; X1 = [1, 1] 4: X2 = [1, 1] X3 = ø X4 = ø

Beispiel (5) x := 1; X1 = [1, 1] 1: X2 = (X1 X3) [-, 9999] while x < 10000 do X3 = X2 Θ [1, 1] 2: X4 = (X1 X3) [10000, ] 3: x := x+1 od; X1 = [1, 1] 4: X2 = [1, 1] X3 = [2, 2] X4 = ø

Beispiel (6) x := 1; X1 = [1, 1] 1: X2 = (X1 X3) [-, 9999] while x < 10000 do X3 = X2 Θ [1, 1] 2: X4 = (X1 X3) [10000, ] 3: x := x+1 od; X1 = [1, 1] 4: X2 = [1, 2] X3 = [2, 2] X4 = ø

Beispiel (7) x := 1; X1 = [1, 1] 1: X2 = (X1 X3) [-, 9999] while x < 10000 do X3 = X2 Θ [1, 1] 2: X4 = (X1 X3) [10000, ] 3: x := x+1 od; X1 = [1, 1] 4: X2 = [1, 2] X3 = [2, 3] X4 = ø

Beispiel (8) x := 1; X1 = [1, 1] 1: X2 = (X1 X3) [-, 9999] while x < 10000 do X3 = X2 Θ [1, 1] 2: X4 = (X1 X3) [10000, ] 3: x := x+1 od; X1 = [1, 1] 4: X2 = [1, 3] X3 = [2, 3] X4 = ø

Beispiel (9) x := 1; X1 = [1, 1] 1: X2 = (X1 X3) [-, 9999] while x < 10000 do X3 = X2 Θ [1, 1] 2: X4 = (X1 X3) [10000, ] 3: x := x+1 od; X1 = [1, 1] 4: X2 = [1, 5] X3 = [2, 6] X4 = ø

Beispiel (10) x := 1; X1 = [1, 1] 1: X2 = (X1 X3) [-, 9999] while x < 10000 do X3 = X2 Θ [1, 1] 2: X4 = (X1 X3) [10000, ] 3: x := x+1 od; X1 = [1, 1] 4: X2 = [1, + ] X3 = [2, 6] X4 = ø

Beispiel (11) x := 1; X1 = [1, 1] 1: X2 = (X1 X3) [-, 9999] while x < 10000 do X3 = X2 Θ [1, 1] 2: X4 = (X1 X3) [10000, ] 3: x := x+1 od; X1 = [1, 1] 4: X2 = [1, + ] X3 = [2, + ] X4 = ø

Beispiel (12) x := 1; X1 = [1, 1] 1: X2 = (X1 X3) [-, 9999] while x < 10000 do X3 = X2 Θ [1, 1] 2: X4 = (X1 X3) [10000, ] 3: x := x+1 od; X1 = [1, 1] 4: X2 = [1, 9999] X3 = [2, + ] X4 = ø

Beispiel (13) x := 1; X1 = [1, 1] 1: X2 = (X1 X3) [-, 9999] while x < 10000 do X3 = X2 Θ [1, 1] 2: X4 = (X1 X3) [10000, ] 3: x := x+1 od; X1 = [1, 1] 4: X2 = [1, 9999] X3 = [2, +10000] X4 = ø

Beispiel (14) x := 1; X1 = [1, 1] 1: X2 = (X1 X3) [-, 9999] while x < 10000 do X3 = X2 Θ [1, 1] 2: X4 = (X1 X3) [10000, ] 3: x := x+1 od; X1 = [1, 1] 4: X2 = [1, 9999] X3 = [2, +10000] X4 = [+10000, +10000]

Beispiel (15) x := 1; X1 = [1, 1] 1: {x = 1} X2 = (X1 X3) [-, 9999] while x < 10000 do X3 = X2 Θ [1, 1] 2: {x [1, 9999]} X4 = (X1 X3) [10000, ] x := x+1 3: {x [2, 10000] } od; X1 = [1, 1] 4: {x = 10000} X2 = [1, 9999] X3 = [2, +10000] X4 = [10000, 10000]

Abstrakte Interpretation I III.Zusammenfassung