Korrekte Software: Grundlagen und Methoden Vorlesung 13 vom 16.07.20
Rückblick & Ausblick
Serge Autexier, Christoph Lüth
Universität Bremen Sommersemester 2020
10:35:20 2020-07-16 1 [28]
Fahrplan
IEinführung
IOperationale Semantik IDenotationale Semantik
IÄquivalenz der Operationalen und Denotationalen Semantik IDer Floyd-Hoare-Kalkül
IInvarianten und die Korrektheit des Floyd-Hoare-Kalküls IStrukturierte Datentypen
IVerifikationsbedingungen IVorwärts mit Floyd und Hoare IModellierung
ISpezifikation von Funktionen IReferenzen und Speichermodelle IAusblick und Rückblick
Korrekte Software 2 [28]
Was gibt’s heute?
IRückblick
IAusblick
IFeedback
IPrüfungsvorbereitung
Korrekte Software 3 [28]
Rückblick
Korrekte Software 4 [28]
Semantik
IOperational — Auswertungsrelationhc, σi →σ0
IDenotational — Partielle Funktion [[c]] : Σ*Σ
IAxiomatisch — Floyd-Hoare-Logik
IWelche Semantik wofür?
IBeweis: Äquivalenz von operationaler und denotationaler Semantik
Korrekte Software 5 [28]
Floyd-Hoare-Logik
IFloyd-Hoare-Logik: partiell und total
I` {P}c{Q}vs.|={P}c{Q}: Vollständigkeit, Korrektheit
IDie sechs Basisregeln
IZuweisungsregel: vorwärts (Floyd) vs. rückwärts (Hoare)
IVCG: Schwächste Vorbedingung und stärkste Nachbedingung
IBeweis: Korrektheit und Vollständigkeit der Floyd-Hoare-Logik
Korrekte Software 6 [28]
Erweiterungen der Programmiersprache
IFür jede Erweiterung:
IWie modellieren wir semantisch?
IWie ändern sich die Regeln der Logik?
Korrekte Software 7 [28]
1. Erweiterung der Programmiersprache
IStrukturen und Felder
ILokationen: strukturierte WerteLexp
IErweiterte Substitution in Zuweisungsregel
ISonstige Regeln bleiben
Korrekte Software 8 [28]
2. Erweiterung der Programmiersprache
IProzeduren und Funktionen
IModellierung vonreturn: Erweiterung zu Σ*Σ + Σ×VU
ISpezifikation von Funktionen durch Vor-/Nachbedingungen
ISpezifikation der Funktionen muss im Kontext stehen
IUnterscheidung zwischen zwei Nachbedingungen
IRegeln für den Funktionsaufruf
Korrekte Software 9 [28]
3. Erweiterung der Programmiersprache
IReferenzen
IKonversion zwischenLexpundAexp
ILokationen nicht mehr symbolisch (Variablennamen), sondern abstrakt Σ =Loc*V,V=Z+Loc
IZustand alsabstrakter Datentypmit Operationenreadundupd
IZuweisung nicht mehr mit Substitution, sondern explizit durchupd
ISpezifikationen sindexplizite Zustandsprädikate, Konversion (−)†,(−)#
Korrekte Software 10 [28]
Prüfungsvorbereitung
IMündliche Modulprüfung, 20– 30 Minuten
ISchwerpunkte:
IVerständnisdes Stoffes, weniger Folien auswendig lernen
IStoff der Vorlesung und Übungsblätter, weniger eure Lösungen
IBewertung
ISicherheit/Beherrschung des Stoffes
Icovered ground
Korrekte Software 11 [28]
Mögliche Fragen I
IWas haben wir in KSGM gemacht?
IWie funktioniert die operationale Semantik und wozu?
IWie funktioniert die denotationale Semantik und wozu? Was ist ein Fixpunkt, und wozu?
IWas bedeutet die Äquivalenz der Semantiken? Wie haben wir das bewiesen? Was ist der Unterschied zwischen struktureller und Regelinduktion?
IWas ist der Floyd-Hoare-Kalkül? Was bedeutet` {P}c{Q}und
|={P}c{Q}?
IWieviele Regeln hat der Floyd-Hoare-Kalkül und warum?
IWie beweisen wir die Korrektheit dieses Programmes?
Korrekte Software 12 [28]
Mögliche Fragen II
IWelche Probleme tauchen bei folgenden Erweiterungen der Programmiersprache auf, und wie behandeln wir sie:
IFelder und Strukturen,
IFunktionen und Funktionsaufrufe,
IReferenzen.
IWas ist der Unterschied zwischen dem Kalkül vorwärts und rückwärts?
Wie sind die Regeln?
IWie funktioniert die Generierung von Verifikationsbedingungen?
Korrekte Software 13 [28]
Ausblick
Korrekte Software 14 [28]
Was geht noch?
IDie Sprache C
IAndere Programmiersprachen
ILogik und Spezifikation
ISuccess Stories
Korrekte Software 15 [28]
Die Sprache C: Was haben wir ausgelassen?
Semantik:
INichtdeterministische Semantik: Seiteneffekte, Sequence Points
−→Umständlich zu modellieren, Effekt zweitrangig
IImplementationsabhängiges, unspezifiziertes und undefiniertes Verhalten
−→Genauere Unterscheidung in der Semantik Kontrollstrukturen:
Iswitch −→Ist im allgemeinen Fall eingoto
Igoto,setjmp/longjmp
−→Allgemeinfall: tiefe Änderung der Semantik (continuations)
Korrekte Software 16 [28]
Die Sprache C: Was haben wir ausgelassen?
Typen:
IFunktionszeiger −→Für “saubere” Benutzung gut zu modellieren
IWeitere Typen:short/long int,double/float,wchar_t, und
Typkonversionen −→Fleißarbeit
IFließkommazahlen −→Spezifikation nicht einfach
Iunion −→Kompliziert das Speichermodell
I volatile −→Bricht read/update-Gleichungen
Itypedef −→Ärgernis für Lexer/Parser, sonst harmlos
Korrekte Software 17 [28]
Die Sprache C: Was haben wir ausgelassen?
Fürrealistische C-Programme:
ICompiler-Erweiterungen (gcc,clang)
IBüchereien (Standardbücherei, Posix, . . . )
INebenläufigkeit
Korrekte Software 18 [28]
Andere Sprachen: Wie modelliert man Java?
IDieKernspracheist ähnlich zu C0.
IJava hat erschwerend:
Idynamische Bindung,
IKlassen mit gekapselten Zustand und Invarianten, INebenläufigkeit, und
IReflektion.
IJava hat dafür aber
Iein einfacheres Speichermodell, und
Ieine wohldefinierte Ausführungsumgebung (die JVM).
Korrekte Software 19 [28]
Andere Sprachen: Wie modelliert man C++?
ISehrvorsichtig(konservativ)
IViele Features, fehlende formale Semantik, . . .
IMehrfachvererbung theoretisch anspruchsvoll
IEs gibtkeineFormalismen/Werkzeuge, die C++ voll unterstützen
IAnsätze: Übersetzung nach C/LLVM, Behandlung dort
Korrekte Software 20 [28]
Andere Sprachen: Wie modelliert man PHP?
Gar nicht.
Korrekte Software 21 [28]
Logik und Spezifikation
IWirgenerierenVerifikationsbedingungen, wie kann man sie beweisen?
IAutomatische Beweiser:
ISAT-Checkerlösen Erfüllbarkeitsproblem der Aussagenlogik (MiniSAT, Chaff)
ISMT-Beweiserbeweisen Aussagen der Prädikatenlogik mit linearer Arithmetik, Funktionen und Induktion (Z3, Yices, CVC)
IInteraktive Beweiser:
IBeweisführung durch Benutzer,Überprüfungdurch Beweiser ISehrmächtigeLogiken, aber nicht vollautomatisch (Isabelle, Coq)
Korrekte Software 22 [28]
Beispiel: Z3
ISMT-Beweiser versuchen Gegenbeweis zu konstruieren IDaher: umφzu beweisen, versuchen wir6Φ zu widerlegen Beweis einer VC:
x≥0∧y>0 =⇒x= 0∗y+x Input Z3:
(declare-const x Int) (declare-const y Int) (assert
(not (=> (and (>= x 0) (> y 0)) (= x (+ (* 0 y) x)))) )
(check-sat)
Antwort:
unsat
Unerfüllbare VC:
x≥0∧y>0 =⇒x≥y Input Z3:
(declare-const x Int) (declare-const y Int) (assert
(not (=> (and (>= x 0) (> y 0)) (>= x y)))
) (check-sat)
Antwort:
sat
Korrekte Software 23 [28]
Beispiel: Isabelle
Korrekte Software 24 [28]
Korrekte Software in der Industrie
IMeist in speziellen Anwendungsgebieten: Luft-/Raumfahrt, Automotive, sicherheitskritische Systeme, Betriebssysteme IAnsätze:
1 Vollautomatisch:statische Analyse(Abstrakte Interpretation) für spezielle Aspekte: Freiheit von Ausnahmen und Unter/Überläufen, Programmsicherheit, Laufzeitverhalten (WCET) (nicht immer korrekt, meist vollständig)
I Werkzeuge:absint
2 Halbautomatisch:Korrektheitsannotationen, Überprüfung automatisch I Werkzeuge: Spark (ADA), Frama-C (C), JML (ESC/Java, Krakatao; Java),
Boogie und Why (generisches VCG), VCC (C)
3 Interaktiv: Einbettung der Sprache in interaktiven Theorembeweiser (Isabelle, Coq)
I Beispiele: L4.verified, CompCert, SAMS
Korrekte Software 25 [28]
Feedback
Korrekte Software 26 [28]
Deine Meinung zählt
IWas war gut, was nicht?
IArbeitsaufwand?
IMehrTheorieoder mehrPraxis?
IProgrammieraufgaben?
ILeichtgewichtiger Übungsbetrieb — mehr oder weniger?
IBitte auch dieEvaluationauf stud.ip beantworten!
Korrekte Software 27 [28]
Tschüß!
Korrekte Software 28 [28]