Korrekte Software: Grundlagen und Methoden Vorlesung 14 vom 08.07.19
Rückblick & Ausblick
Serge Autexier, Christoph Lüth
Universität Bremen Sommersemester 2019
17:10:58 2019-07-10 1 [25]
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
IFunktionsaufrufe und das Framing-Problem IAusblick und Rückblick
Korrekte Software 2 [25]
Was gibt’s heute?
IRückblick
IAusblick
IFeedback
Korrekte Software 3 [25]
Rückblick
Korrekte Software 4 [25]
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 [25]
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 [25]
Erweiterungen der Programmiersprache
IFür jede Erweiterung:
IWie modellieren wir semantisch?
IWie ändern sich die Regeln der Logik?
Korrekte Software 7 [25]
1. Erweiterung der Programmiersprache
IStrukturen und Felder
ILokationen: strukturierte WerteLexp
IErweiterte Substitution in Zuweisungsregel
ISonstige Regeln bleiben
Korrekte Software 8 [25]
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 [25]
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 [25]
Ausblick
Korrekte Software 11 [25]
Was geht noch?
IDie Sprache C
IAndere Programmiersprachen
ILogik und Spezifikation
ISuccess Stories
Korrekte Software 12 [25]
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 13 [25]
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 14 [25]
Die Sprache C: Was haben wir ausgelassen?
Fürrealistische C-Programme:
ICompiler-Erweiterungen (gcc,clang)
IBüchereien (Standardbücherei, Posix, . . . )
INebenläufigkeit
Korrekte Software 15 [25]
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 16 [25]
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 17 [25]
Andere Sprachen: Wie modelliert man PHP?
Gar nicht.
Korrekte Software 18 [25]
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 19 [25]
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 20 [25]
Beispiel: Isabelle
Korrekte Software 21 [25]
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)
IWerkzeuge:absint
2 Halbautomatisch:Korrektheitsannotationen, Überprüfung automatisch IWerkzeuge: 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)
IBeispiele: L4.verified, CompCert, SAMS
Korrekte Software 22 [25]
Feedback
Korrekte Software 23 [25]
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 24 [25]
Tschüß!
Korrekte Software 25 [25]