35
Beweisbar korrekte Software eine praktische Einf ¨ uhrung Dominik Haneberg, Gerhard Schellhorn, Jonathan Schmitt 1

Beweisbar korrekte Software · Organisatorisches Vorlesung: Mittwoch 10.00 Uhr - 11.30 Uhr (1005 L1) Versuche: (Raum 1006, 2 Termine wahlen)¨ Montag: 10.00 - 11.30 Uhr Montag: 11.45

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

  • Beweisbar korrekte Softwareeine praktische Einführung

    Dominik Haneberg, Gerhard Schellhorn, JonathanSchmitt

    1

  • Organisatorisches

    Vorlesung:

    Mittwoch 10.00 Uhr - 11.30 Uhr (1005 L1)

    Versuche: (Raum 1006, 2 Termine w ählen)

    Montag: 10.00 - 11.30 UhrMontag: 11.45 - 13.45 UhrMontag: 14.00 - 15.30 UhrMontag: 15.45 - 17.30 Uhr

    2

  • Anmeldung

    • Maximal 40 Teilnehmer in Zweiergruppen

    • Paarweise in die erste Liste in Zweiergruppen eintragen:Ergibt Gruppennummer

    • Zweite Liste: Unter der Gruppennummer aus den 4 möglichen Terminenso viele wie möglich auswählen (nicht bloss 2!)

    • Wir verteilen die Gruppen auf mögliche Termine (je 2 pro Gruppe)

    • Bei zuviel Teilnehmern: Los.

    • Vorausgesetzt: Kenntnisse aus Logik-VorlesungLogik bestanden ⇒ bevorzugt

    • Spätestens morgen: Welche Gruppennummer wann dran ist auf WWW

    3

  • Prüfung

    • Anwesenheitspflicht in den Übungen!• Vorbereitung der Aufgaben anhand der Doku• Abgabe der gelösten Aufgaben per Mail.

    • 2 Mündliche Abnahmen im Semester in Zweiergruppen :⋆ 1. Abnahme nach 6 Wochen

    (zu: Prädikatenlogik und Algebraische Spezifikation)⋆ 2. Abnahme am Ende

    (Programmbeweisen)

    • mit: Testaufgaben (KIV) & Fragen zur Vorlesung

    4

  • Schein und Sprechstunden

    Schein

    2 V + 4 Ü = 8 Creditpoints für den Bereich ”Softwaretechnik” oder für denBereich ”Theoretische Informatik”

    Sprechstunden

    Dominik Haneberg: Raum 2032, Tel. 2178Gerhard Schellhorn: Raum 2002A, Tel. 2124Jonathan Schmitt: Raum 2028, Tel. 2176

    5

  • BKS: Ziel und Vorgehen

    Ziel: Beweisbar korrekte Software

    Vorgehen1. Formale Spezifikation der Anforderungen

    2. Validierung/Nachweis von Sicherheitseigenschaften

    3. Programmierung

    4. Beweis, dass Programm die Spezifikation erfüllt

    Notwendig

    Definition formaler Modelle und Aussagen ⇒ Logik

    6

  • Verschiedene Logiken

    • Aussagenlogik

    • Prädikatenlogik (erster Stufe)

    • Logiken höherer Stufe

    • Hoare-Logik (imperative Programme)

    • Dynamische Logik (imperative Programme)

    • LCF (funktionale Programme)

    • Temporallogik (parallele Programme)

    • (Modallogik)

    • (nichtmonotone Logik)

    7

  • Warum Beweise über Programme?

    Fehler in Software sind eine nicht enden wollende Geschichte: Oft nurärgerlich, manchmal sehr teuer oder sogar lebensgefährlich!

    • Gepäckverteilung Flughafen Denver (1994) und Terminal 5 LondonHeathrow (2008)

    • Ausfall des A340-Autopiloten

    • Strahlentherapiesystem Therac-25

    • Ariane 5 Explosion beim ersten Start

    • Mars Climate Orbiter und Mars Polar Lander

    • ...

    8

  • Warum formale Beweise mit KIV?

    These: Eine detaillierte Analyse desProgramms von Hand genügt, um seineKorrektheit nachzuweisen!

    Problem

    9

  • Warum formale Beweise mit KIV?

    These: Eine detaillierte Analyse desProgramms von Hand genügt, um seineKorrektheit nachzuweisen!

    Problem Beweise für Software sind häufig sehr langwierig (viele Details) unddaher noch fehleranfälliger als die Programme selbst.

    ⇒ Systemunterstützung mit KIV

    (andere Systeme: ACL2, Isabelle, PVS, . . . )

    Durch die Systemunterstützung wirddie korrekte Anwendung von Kalkülregeln sichergestellt

    9

  • Lernziele

    • Erlernen des Umgangs mit KIV

    • Formales Beweisen mit KIV⋆ Umsetzen von Beweisen in einen Kalkül⋆ Automatisierung durch Simplifikation und Heuristiken⋆ Beweise für Datenstrukturen und Programme

    • Strukturierte Spezifikation mit KIV

    • Verschiedene Verfeinerungskonzepte um von abstraktenSpezifikationen zu konkreten Programmen zu kommen

    10

  • Praktische Anwendung

    • Einsatz von KIV durch KIV-Experten in sicherheitskritischenAnwendungen

    • Einsatz von automatischen (spezialisierten) Tools:⋆ Model Checking (HW-Design, eingebettete Systeme)⋆ Bounded Model Checking, SAT checking (z.Bsp. Security Protokolle)⋆ Datenflussanalyse (z.Bsp. MS Kernel Treiber im SLAM-Projekt).⋆ predicative Abstraction und Typechecking (z.Bsp. Nullpointer

    Exceptions, SPEC#)⋆ Entscheidungsprozeduren für Arithmetik (z.B. für Zeitconstraints bei

    Echtzeitsystemen)⋆ . . .

    • systematisches Testen mit aus Spezifikationen generierten Testfällen

    • Konstruktion von endlichen Gegenbeispielen (z.B. Alloy, MACE)

    • Verwendung der Vorgehensmethodik(“UML, aber eine Nummer präziser”)

    11

  • Überblick

    1. Aussagen- und Prädikatenlogik (2 Wochen)2. Beweise über Datenstrukturen (Listen) (2 Wochen)3. Algebraische Spezifikationen (1 Woche)4. Programmbeweise (Hoare, while -Schleifen) (2 Wochen)5. Modulverifikation (2 Wochen)6. Abstract State Machines und Refinement (3 Wochen)

    12

  • Prädikatenlogikmit Sorten

    und Sequenzenkalkül

    13

  • Prädikatenlogik mit Sorten

    • in Logik f. Inf.: n-stellige Funktionssymbole f ∈ Fn

    Semantik: n-stellige Funktion über Grundbereich D

    • BKS: gegeben ist eine endliche Menge S von Sorten.Semantik: jede Sorte bezeichnet einen Grundbereich

    • Funktionen jetzt: f ∈ Fs→s′ oder einfacher: f : s→ swobei s = s1, . . . , sn mit n ≥ 0 (n = 0 : Konstante c : s)

    • Vorteile:

    • Theorie:

    • Praxis:

    14

  • Prädikatenlogik mit Sorten

    • in Logik f. Inf.: n-stellige Funktionssymbole f ∈ Fn

    Semantik: n-stellige Funktion über Grundbereich D

    • BKS: gegeben ist eine endliche Menge S von Sorten.Semantik: jede Sorte bezeichnet einen Grundbereich

    • Funktionen jetzt: f ∈ Fs→s′ oder einfacher: f : s→ swobei s = s1, . . . , sn mit n ≥ 0 (n = 0 : Konstante c : s)

    • Vorteile:⋆ pro Datentyp eine Sorte, damit Typcheck wie in Prog.Sprachen⋆ später: leichte Erweiterbarkeit zu Higher-Order-Logik

    • Theorie: Sorten können in Prädikate codiert werden

    • Praxis: ohne Sorten zusätzliche Axiome und Deduktion notwendig!(z.B. nat(x) ∧ nat(y) → nat(x+ y))

    • es gibt immer eine vordefinierte Sorte bool.

    14

  • Die Sorte bool: Formeln sind auch Terme!

    • Mit einer vordefinierten Sorte bool wird es möglich,Formeln und Terme der Sorte bool zu identifizieren

    • logische Operatoren sind jetzt vordefinierte boolesche Funktionen:. ∧ ., . ∨ ., . → ., .↔ . : bool × bool → bool¬ . : bool → booltrue, false : bool

    • Formeln ϕ,ψ und Terme t heissen jetzt Ausdrücke e

    • Prädikate sind einfach Funktionen mit Zielsorte bool

    • Funktionen und Prädikate heissen jetzt Operationen OP

    15

  • Signaturen und Variablen

    Eine Signatur Σ = (S,OP ) ist ein Paar mit:

    • endlicher Menge S von Sorten, mit bool ∈ S

    • endlicher Familie OP =⋃

    s∈S∗,s′∈S

    OPs→s′

    von Operationssymbolen mit Argumentsorten s undErgebnissorte s′ (leere Liste von Argumentsorten: Konstante c)

    • OP enthält immer die üblichen booleschen Operationen

    • wie üblich: Konstanten sind null-stellige Operationen

    • boolesche Konstanten = atomare Aussagen

    Eine Variablenmenge X besteht aus einer abzählbar unendlichen Mengevon Variablen Xs für jede Sorte s ∈ S

    16

  • Syntax von Ausdrücken

    Ausdrücke e ∈ EXPRs(Σ,X) der Sorte s ∈ S über der Signatur Σ und überden Variablen X sind rekursiv definiert durch

    • x aus Xs ist ein Ausdruck der Sorte s

    • Sind e1, . . . , en Ausdrücke der Sorten s1, . . . , sn und op : s1, . . . , sn → s′,dann ist op(e1, . . . , en) ein Ausdruck der Sorte s′

    • Bem.: Schreibe c statt c() für Konstanten (n = 0)

    • sind e1, e2 Ausdrücke der Sorte s, so iste1 = e2 eine Formel (i.e. ein Ausdruck der Sorte bool ).

    • Ist ϕ eine Formel, und x eine Variable, so sind∀ x.ϕ und ∃ x.ϕ Formeln.

    EXPR(Σ,X) :=⋃

    s∈S EXPRs(Σ,X), For(Σ,X) := EXPRbool(Σ,X)

    Terme t ∈ T (Σ,X) sind Ausdrücke ohne Quantoren und Gleichheit.17

  • KIV-Syntax für Signaturen

    sorts nat;

    list;

    constants 0 : nat;

    ϕ : bool; (: 0-stelliges Pr ädikat als boolesche Konstante :)

    functions f : nat × nat → nat;

    g : nat, nat -> nat; (: es geht auch ASCII :)

    predicates isprime : nat;

    . < . : nat × nat;

    variables x,y : nat;

    u : list;

    • Sorten, Funktionen, Prädikate, Variablen immer in dieser Reihenfolge

    • Aufzählungen mit derselben Sorte nur bei Variablen

    18

  • KIV: Infix-Schreibweise und Bindungsstärken

    • Signatur: . ⊕ . : s1 × s2 → s, s1, s2, s ∈ S

    • üblich: ⊕ besteht aus Sonderzeichen, z. B. +, ∗, {präfix} > {infix} > {¬} > {∧} > {∨} > {→} > {↔} > {∀,∃}

    Außenklammern werden weggelassen,

    Aufzählungen mit ∧, ∨ ungeklammert.

    19

  • Sequenzenkalkül

    • erfunden von Gentzen (1934)

    • nur einer von vielen möglichen Kalkülen:Hilbertkalkül, natürliches Schliessen, Tableaukalkül, Modellelimination

    • Charakteristik: versucht, Beweisziel auf Axiome zu reduzieren(schrittweise Vereinfachung des Problems); am menschlichenBeweisen orientiert

    ϕ1, . . . , ϕn ⊢ ψ1, . . . , ψm Sequenzϕ1, . . . , ϕn Antezedent (n ≥ 0)ψ1, . . . , ψm Sukzedent (m ≥ 0)

    Beachte: “⊢” ist Sequenzenpfeil, “⊢PL” ist Ableitbarkeit

    20

  • Notation

    Γ,Γ1,∆, . . . Listen von Formeln,Γ = ϕ1, . . . , ϕn, ∆ = ψ1, . . . , ψm

    Γ ⊢ ∆ := ϕ1, . . . , ϕn ⊢ ψ1, . . . , ψm

    Γ, ϕ ⊢ ψ := ϕ1, . . . , ϕn, ϕ ⊢ ψ

    Γ, ϕ ∧ ψ,∆ ⊢ := ϕ1, . . . , ϕn, ϕ ∧ ψ,ψ1, . . . , ψm ⊢∧

    [ϕ1, . . . , ϕn] := ϕ1 ∧ . . . ∧ ϕn∧

    [] := true∨

    [ψ1, . . . , ψm] := ψ1 ∨ . . . ∨ ψm∨

    [] := false

    Bedeutung einer Sequenz: Γ ⊢ ∆ =∧

    Γ →∨

    ∆21

  • Sequenzenkalkül: Inferenzregeln

    Regel: (n ≥ 0)

    Γ1 ⊢ ∆1 Γ2 ⊢ ∆2 . . . Γn ⊢ ∆n

    Γ ⊢ ∆

    • Regeln werden von unten nach oben gelesen:Um Γ ⊢ ∆ (die Konklusion) zu beweisen, beweise stattdesseneinfachere Prämissen Γ1 ⊢ ∆1, . . . ,Γn ⊢ ∆n

    • Bei n = 0 ist die Konklusion direkt bewiesen

    • n = 1: Vereinfachung

    • n = 2: Fallunterscheidung

    22

  • Beispiel

    Ein erster Beweis.

    23

  • Sequenzenkalkül: Ableitbarkeit

    Γ ⊢ ∆ ist aus einer Menge von Formeln (Axiomen) Ax ableitbar

    (kurz: Ax ⊢PL Γ ⊢ ∆)

    :⇔ es gibt eine Ableitung (Baum) mit

    • Wurzel: Γ ⊢ ∆ (Konklusion)

    • Blätter: ⊢ ϕ mit ϕ ∈ Ax (Prämissen)

    • Innere Knoten durch Regelanwendungen gebildet

    24

  • Kalkül für Aussagenlogik

    ϕ,Γ ⊢ ϕ,∆(axiom)

    false,Γ ⊢ ∆(false left)

    Γ ⊢ true,∆(true right)

    Γ′ ⊢ ∆′

    Γ ⊢ ∆(weakening, Γ′ ⊆ Γ,∆′ ⊆ ∆)

    Γ ⊢ ϕ,∆ ϕ,Γ ⊢ ∆

    Γ ⊢ ∆(cut formula)

    Γ ⊢ ϕ,∆

    ¬ ϕ,Γ ⊢ ∆(negation left)

    ψ,Γ ⊢ ∆

    Γ ⊢ ¬ ψ,∆(negation right)

    ϕ,ψ,Γ ⊢ ∆

    ϕ ∧ ψ,Γ ⊢ ∆(conjunction left/right)

    Γ ⊢ ϕ,∆ Γ ⊢ ψ,∆

    Γ ⊢ ϕ ∧ ψ,∆

    ϕ,Γ ⊢ ∆ ψ,Γ ⊢ ∆

    ϕ ∨ ψ,Γ ⊢ ∆(disjunction left/right)

    Γ ⊢ ϕ,ψ,∆

    Γ ⊢ ϕ ∨ ψ,∆

    Γ ⊢ ϕ,∆ ψ,Γ ⊢ ∆

    ϕ→ ψ,Γ ⊢ ∆(implication left/right)

    ϕ,Γ ⊢ ψ,∆

    Γ ⊢ ϕ→ ψ,∆

    Γ ⊢ ϕ,ψ,∆ ϕ,ψ,Γ ⊢ ∆

    ϕ↔ ψ,Γ ⊢ ∆(equivalence left/right)

    ϕ,Γ ⊢ ψ,∆ ψ,Γ ⊢ ϕ,∆

    Γ ⊢ ϕ↔ ψ,∆25

  • Regeln für Quantoren und Gleichungen

    •ϕτx,∀ x.ϕ,Γ ⊢ ∆

    ∀ x.ϕ,Γ ⊢ ∆(all left)

    Γ ⊢ ϕτx,∃ x.ϕ,∆

    Γ ⊢ ∃ x.ϕ,∆(exists right)

    •ϕyx,Γ ⊢ ∆

    ∃ x.ϕ,Γ ⊢ ∆(exists left)

    Γ ⊢ ϕyx,∆

    Γ ⊢ ∀ x.ϕ,∆(all right)

    ϕτx die Substitution von x durch einen beliebigen Term τ in ϕ.

    y ist eine neue Variable, i.e. eine die nicht frei in Q x.ϕ,Γ,∆ (Q ∈ {∀,∃})vorkommt.

    Genauer: y 6∈ (free(ϕ)\{x}) ∪ free(Γ) ∪ free(∆)

    •Γ ⊢ τ = τ ,∆

    (reflexivity right)x = τ,Γτx ⊢ ∆

    τx

    x = τ,Γ ⊢ ∆(insert equation)

    26

  • Variablen und freie Variablen eines Ausdrucks

    Die Variablen eines Ausdrucks (Var(e))

    Var(x) = {x} x ∈ X

    Var(op(t1, . . . , tn)) =⋃n

    i=1 Var(ti)

    Var(e = e′) = Var(e) ∪ Var(e′)

    Var(Qx.ϕ) = {x} ∪ Var(ϕ) Q ∈ {∀,∃}

    Die freien Variablen einer Formel (free(ϕ)) sind genauso definiert ausser:

    free(Qx.ϕ) = free(ϕ) \ {x} Q ∈ {∀,∃}

    27

  • Substitution

    die Substitution einer Variablen x durch einen Ausdruck t in e (etx)

    xtx = t

    ytx = y falls x 6= y

    op(e1, . . . , en)tx = op((e1)

    tx, . . . , (en)

    tx)

    (e1 = e2)tx = (e1)

    tx = (e2)

    tx)

    (Qy.ϕ)tx =

    Qy.ϕ falls y = x ∨ x 6∈ free(ϕ)

    Qy.ϕtx falls y 6= x, y 6∈ free(t), x ∈ free(ϕ)

    Qz.(ϕzy)tx falls y 6= x, y ∈ free(t), x ∈ free(ϕ)

    (z neu, d. h. z 6∈ Var(ϕ) ∪ Var(t))

    (Q ∈ {∀,∃})

    28

  • KIV: Organisation in Projekte

    Grundlegende Organisation:

    • In KIV arbeitet man in (SW-Entwicklungs-) Projekten

    • Jedes Projekt definiert Spezifikationen (Σ + Ax + Weiteres)

    • Spezifikationen können aufeinander aufbauen

    ⇒ Entwicklungsgraph

    • Über jeder Spezifikation kann man

    Theoreme formulieren und beweisen

    29

  • KIV: Projektauswahl- und Projektebene

    4 Ebenen:

    1. Projektauswahlebene• Projekte anlegen, löschen, auf einem Projekt arbeiten

    2. Projektebene• zeigt den Entwicklungsgraph der Spezifikationen• Spezifikationen anlegen, ändern, löschen• Auf einer Spezifikation arbeiten

    30

  • KIV: Spezifikations- und Beweisebene

    3. Spezifikationsebene⋆ Theoreme anlegen, ändern, löschen⋆ einen Beweis führen

    4. Beweisebene⋆ Beweise führen durch interaktive Anwendung von Regeln⋆ Zwei Regelsätze: Basisregeln/für’s Beweisen optimierte Regeln⋆ Backtracking, Pruning⋆ Simplifikation + Heuristiken zur automatischen Anwendung von

    Regeln

    31

  • KIV: Verzeichnisstruktur

    Verzeichnisstruktur:

    • Ein Projektverzeichnis

    • darin:⋆ ein Unterverzeichnis specs⋆ [eine Datei devgraph für den Entwicklungsgraph]

    • in specs: ein Unterverzeichnis für jede Spezifikation

    • darin:⋆ eine Datei specification für Signatur, Axiome etc.⋆ eine Datei sequents für Theoreme⋆ [ein Verzeichnis proofs das geladene Theoreme, geführte Beweise

    etc. speichert]

    32

  • Bis nächsten Montag

    Vorbereiten der ersten Übunganhand der Doku!

    33