Zusammenfassung Zusammenfassung der letzten LVA Definition Eine Registermaschine (RM) R ist ein Paar R = ((xi )16i6n , P) sodass Einführung in die Theoretische Informatik Christina Kohl Alexander Maringele Georg Moser Michael Schaper Manuel Schneckenreither 1 (xi )16i6n Sequenz von Registern xi , die natürliche Zahlen beinhalten 2 P ein Programm Befehle: Institut für Informatik @ UIBK Wintersemester 2015 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 194/1 Prinzipien der Analyse von Programmen Inhalte der Lehrveranstaltung Wozu Programmverifikation Einführung in die Logik • Ariane-5 Syntax & Semantik der Aussagenlogik, Formales Beweisen, Konjunktive und Disjunktive Normalformen • Fehler in der Datenkonvertierung Einführung in die Algebra Boolesche Algebra, Universelle Algebra, Logische Schaltkreise • Intel Pentium FDIV-Bug • Falsche Berechnungen • USD 370 • USD 475 Millionen Millionen Einführung in die Theorie der Formalen Sprachen Grammatiken und Formale Sprachen, Reguläre Sprachen, Kontextfreie Sprachen • Gepäckverteilung (Denver) Einführung in die Berechenbarkeitstheorie • Desaster Algorithmisch unlösbare Probleme, Turing Maschinen, Registermaschinen • USD 560 Millionen Einführung in die Programmverifikation • Blue Screen of Death • ziemlich lästig Prinzipien der Analyse von Programmen, Verifikation nach Hoare GM (IFI) Einführung in die Theoretische Informatik 195/1 GM (IFI) Einführung in die Theoretische Informatik 196/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 197/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) 198/1 Einführung in die Theoretische Informatik Interpretationen I werden verwendet, um den Ausdrücken der Prädikatenlogik eine Bedeutung zu geben 199/1 GM (IFI) Einführung in die Theoretische Informatik 200/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 201/1 Verifikation nach Hoare GM (IFI) Einführung in die Theoretische Informatik 202/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 203/1 GM (IFI) Einführung in die Theoretische Informatik 204/1 Verifikation nach Hoare Verifikation nach Hoare Hoare-Kalkül Beispiel Wir betrachten das folgende einfache while-Programm P: Definition 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} while xi 6= 0 do xi := xi − 1 end und zeigen {xi > 0} P {xi = 0} [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} {I ∧ B} P {I } {I } while B do P end {I ∧ ¬B} 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 205/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 206/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 207/1 GM (IFI) Einführung in die Theoretische Informatik 208/1 Automatisierung Vielen Dank für die Aufmerksamkeit! GM (IFI) Einführung in die Theoretische Informatik 209/1