Zusammenfassung Zusammenfassung der letzten LVA Definition Eine Registermaschine (RM) R ist ein Paar R = ((xi )16i6n , P) sodass Einführung in die Theoretische Informatik 1 (xi )16i6n Sequenz von Registern xi , die natürliche Zahlen beinhalten 2 P ein Programm Befehle: Christina Kohl Alexander Maringele Georg Moser Michael Schaper Institut für Informatik @ UIBK Wintersemester 2016 1 xi := xi + 1 2 xi := xi − 1 3 while xi 6= 0 do P1 end Satz Jede partielle Funktion f : Nk → N, die berechenbar auf einer RM ist, ist auf einer TM berechenbar und umgekehrt GM (IFI) Übersicht Einführung in die Theoretische Informatik Prinzipien der Analyse von Programmen Inhalte der Lehrveranstaltung Wozu Programmverifikation Einführung in die Logik • Intel Pentium Syntax & Semantik der Aussagenlogik, Formales Beweisen, Konjunktive und Disjunktive Normalformen • Ariane-5 • Fehler in der Da- Einführung in die Algebra tenkonvertierung Boolesche Algebra, Universelle Algebra, Logische Schaltkreise Einführung in die Theorie der Formalen Sprachen Grammatiken und Formale Sprachen, Reguläre Sprachen, Kontextfreie Sprachen • Falsche Berechnungen • USD 370 • USD 475 Millionen Millionen (Denver) Algorithmisch unlösbare Probleme, Turing Maschinen, Registermaschinen • Desaster • USD 560 Einführung in die Programmverifikation Millionen Prinzipien der Analyse von Programmen, Verifikation nach Hoare, Verschlüsselung und Sicherheit Einführung in die Theoretische Informatik FDIV-Bug • Gepäckverteilung Einführung in die Berechenbarkeitstheorie GM (IFI) 181/1 182/1 GM (IFI) Einführung in die Theoretische Informatik • Blue Screen of Death • ziemlich lästig 183/1 Prinzipien der Analyse von Programmen Verifikation nach Hoare Prinzipien der Analyse von Programmen Verifikation nach Hoare Prädikatenlogik (informell) Begutachtung • Der Code wird von ähnlich qualifizierten Programmierern kontrolliert • Die Prädikatenlogik ist eine Logik, deren Ausdruckskraft über die der Aussagenlogik weit hinausgeht • subtile Fehler werden leicht übersehen • Die wichtigste Erweiterung sind Prädikatensymbole Testen • Prädikatensymbole erlauben es uns, über Elemente einer Menge Aussagen zu treffen • dynamische Technik, bei der das Programm ausgeführt wird • Wie wird die richtige Testumgebung geschaffen? Sprache einer Prädikatenlogik Im Allgemeinen wird eine Prädikatenlogik durch eine Sprache beschrieben, diese Sprache enthält: Formal Methoden • erlauben die frühe Integration der Verifikation in die Softwareentwicklung • sind effizienter als andere Methoden (höhere Erkennensrate von Fehlern) 1 Funktionssymbole und Prädikatensymbole 2 Variablen 3 • sind (im Besonderen wenn automatisierbar) schneller anwendbar GM (IFI) Einführung in die Theoretische Informatik = , ¬, ∧, ∨, →, |{z} | {z } Gleichheit 184/1 Verifikation nach Hoare Junktoren GM (IFI) ∀, ∃ |{z} Quantoren Einführung in die Theoretische Informatik Verifikation nach Hoare Zusicherungen Beispiel • Sei 7 eine Konstante und ist prim ein Prädikatensymbol Definition • Wir schreiben ist prim(7), um auszudrücken, dass 7 eine Primzahl Wir definieren Zusicherungen induktiv: Definition 1 Atome sind Zusicherungen 2 Wenn A und B Zusicherungen sind, dann sind auch die folgenden Ausdrücke, Zusicherungen: Ein Ausdruck der mit Hilfe von Variablen und Funktionssymbolen gebildet wird, heißt Term ¬A (A ∧ B) (A ∨ B) (A → B) Konvention Definition 1 Sei P ein Prädikatensymbol 2 Seien t1 , . . . , tn Terme Zusicherungen werden Formeln genannt Definition Dann nennen wir die Ausdrücke P(t1 , . . . , tn ) und t1 = t2 Atome oder atomare Formel GM (IFI) 185/1 Einführung in die Theoretische Informatik Interpretationen I werden verwendet, um den Ausdrücken der Prädikatenlogik eine Bedeutung zu geben 186/1 GM (IFI) Einführung in die Theoretische Informatik 187/1 Verifikation nach Hoare Verifikation nach Hoare Definition Wahrheit einer Zusicherung Sei I eine Interpretation und F eine Formel, wir schreiben I |= F , wenn die Formel F in der Interpretation I wahr ist Beispiel • Wir betrachten die Konstante 7 und das Prädikat ist prim • Interpretation I legt fest, dass 7 als die Zahl sieben zu verstehen ist • I legt fest, dass das Atom ist prim(n) genau dann wahr ist, wenn n eine Primzahl Beobachtung Beispiel Wenn x die Primzahl 7 ist, dann gilt I |= ist prim(x) ∧ x = 7 Definition 1 Mit Hilfe von Interpretationen wird der Wahrheitsgehalt von Atomen bestimmt 2 Ist die Wahrheit von Atomen in I definiert, wird die Wahrheit einer beliebigen Formel durch die Bedeutung der Junktoren bestimmt Die Konsequenzrelation A |= B gilt, gdw. für alle Interpretationen I: I |= A impliziert I |= B Beispiel Seien x1 > 4 und x1 + 1 > 5 Atome, es gilt: x1 > 4 |= x1 + 1 > 5 Beispiel Die Formel ist prim(x) ∧ x = 7 bedeutet, dass x die Primzahl 7 ist GM (IFI) Einführung in die Theoretische Informatik 188/1 Verifikation nach Hoare GM (IFI) Einführung in die Theoretische Informatik 189/1 Verifikation nach Hoare Hoare-Tripel Definition • Seien Q und R Zusicherungen • Ein Hoare-Tripel {Q} P {R} ist wahr, wenn 1 Q vor der Ausführung von P gilt 2 R nach der Ausführung von P gilt 3 unter der Voraussetzung, dass P terminiert • Ein Hoare-Tripel ist wie folgt definiert: • Wenn {Q} P {R} wahr, dann ist P korrekt in Bezug auf Q und R Definition • Sei P ein while-Programm (ein Programm einer Registermaschine) • Dann sagen wir auch P ist partiell korrekt {Q} P {R} • Das Programm P ist total korrekt, wenn es partiell korrekt ist und terminiert • Q wird Vorbedingung • R wird Nachbedingung genannt Beispiel Die folgenden Hoare-Tripel Beispiel {x1 > 4} x1 := x1 + 1 {x1 > 5} Seien x1 > 4, x1 > 5 Zusicherungen und x1 := x1 + 1 ein Programm, dann ist {x1 > 4} x1 := x1 + 1 {x1 > 5} ein Hoare-Tripel GM (IFI) Einführung in die Theoretische Informatik {x2 = 0} x2 := x2 − 1 {x2 = 0} sind wahr und die jeweiligen Programme total korrekt 190/1 GM (IFI) Einführung in die Theoretische Informatik 191/1 Verifikation nach Hoare Verifikation nach Hoare Hoare-Kalkül Beispiel Wir betrachten das folgende einfache while-Programm P: Definition while xi 6= 0 do xi := xi − 1 end Die Regeln des Hoare-Kalkül sind wie folgt definiert: {Q{x 7→ t}} x := t {Q} [z] [s] [a] {Q} P1 {R} {R} P2 {S} {Q} P1 ; P2 {S} [w] {Q 0 } P {R 0 } Q |= Q 0 , R 0 |= R {Q} P {R} und zeigen {xi > 0} P {xi = 0} {I ∧ B} P {I } {I } while B do P end {I ∧ ¬B} [z] {xi − 1 > 0} xi := xi − 1 {xi > 0} [a] {xi > 0 ∧ xi 6= 0} xi := xi − 1 {xi > 0} [w] {xi > 0} P {xi > 0 ∧ xi = 0} [a] {xi > 0} P {xi = 0} Ist ein Hoare-Tripel in diesem Kalkül ableitbar, dann ist es wahr wir verwenden: Beispiel [z] {x1 + 1 > 5} x1 := x1 + 1 {x1 > 5} [a], x1 > 4 |= x1 + 1 > 5 {x1 > 4} x1 := x1 + 1 {x1 > 5} GM (IFI) Einführung in die Theoretische Informatik 192/1 Automatisierung 1 xi > 0 ∧ xi = 0 |= xi = 0 2 die Schleifeninvariante xi > 0 3 xi > 0 ∧ xi 6= 0 |= xi − 1 > 0 GM (IFI) Einführung in die Theoretische Informatik 193/1 Automatisierung Automatisierung von Verifikationstechniken Bemerkung Frage Kann Verifikation vollständig automatisiert werden? Termination von imperativen Programmen kann etwa von folgenden Tools gezeigt werden Antwort Nein • ein total korrektes Programm muss als terminierend nachgewiesen werden AProVE, COSTA, Julia, SPEED, Terminator, TTT2, . . . Bemerkung • Termination ist ein unentscheidbares Problem Neben der Termination können auch andere (unentscheidbare) Eigenschaften von Programmen automatisch verifiziert werden, etwa der Speicherbedarf, die Laufzeitkomplexität, etc. Frage Was tun? AProVE, COSTA, LOOPUS, RaML, SPEED, TCT, . . . Antwort • Entweder wird Termination vorausgesetzt und muss per Hand bewiesen werden NB: diese Tools müssen unvollständig sein • Oder der Verifikator für Termination ist partiell GM (IFI) Einführung in die Theoretische Informatik 194/1 GM (IFI) Einführung in die Theoretische Informatik 195/1