Techniken zur Entwicklung Korrekter Software 1 Vorlesung vom 15.01.08: Beweisen in Isabelle Christoph Lüth & Lutz Schröder WS 07/08 Lüth & Schröder: TEKS 1 1 WS 07/08 Wo sind wir? Aussagenlogik Prädikatenlogik Isabelle Logik höherer Stufe Isabelle/HOL Lüth & Schröder: TEKS 1 2 WS 07/08 Fahrplan Typdefinitionen Nützliche vordefinierte Datentypen in Isabelle Automatische Beweisprozeduren Lüth & Schröder: TEKS 1 3 WS 07/08 Typdefinitionen in Isabelle Definition eines neuen Typen: Gegeben Typ R, Prädikat S : R ⇒ Bool Neuer Typ T mit absT : R ⇒ T , repT : T ⇒ R so dass S und T isomorph: ∀t.absT (repT t) = t, ∀r .Sr −→ repT (absT r ) = r T nicht leer: ∃t.St absT S T R repT Lemma: Typdefinitionen sind konservative Erweiterungen. Lüth & Schröder: TEKS 1 4 WS 07/08 Beispiel: Produkte Ausgangstyp Rα,β ≡ α ⇒ β ⇒ Bool Neuer Typ Tα,β ≡ α × β Idee: Prädikat p : α ⇒ β ⇒ Bool repräsentiert (a, b) p(x, y ) = > ←→ x = a ∧ y = b Sf = ∃a b.(f = λx y .x = a ∧ y = b) Abstraktionsfunktion: abs × p = ιa b. p a b Repräsentationsfunktion: rep × (a, b) = p mit p(x, y ) = > ←→ x = a ∧ y = b Damit Eigenschaften als Theoreme herleitbar. Lüth & Schröder: TEKS 1 5 WS 07/08 Natürliche Zahlen und unendliche Datentypen Natürliche Zahlen: nicht konservativ! Erfordert zusätzliches Axiom: Unendlichkeit. Neuer Typ ind mit Z :: ind, S : ind ⇒ S und inj S Sx 6= Z Damit nat definierbar. Warum ind? Auch für andere Datentypen Lüth & Schröder: TEKS 1 6 WS 07/08 Algebraische Datentypen In Isabelle/HOL wie in CASL, aber Eigenschaften werden (hinter den Kulissen) bewiesen Einschränkung: nur kovariante Rekursion Beispiel: datatype Colour = Red | Green | Blue | Yellow | White datatype Result = OK | Error nat | Exception string datatype ’a Tree = Node "’a Tree" ’a "’a Tree" | Leaf datatype ’a NTree = Node "nat => ’a" Nicht erlaubt: datatype T = C "T=> bool" Lüth & Schröder: TEKS 1 7 WS 07/08 Nützliche vordefinierte Typen Theorie Set: getypte Mengen, α set ≡ α ⇒ Bool Theorien Sum und Produkt: Summe und Produkte Numerische Typen: Natürliche Zahlen nat, ganze Zahlen int, reele Zahlen real, komplexe Zahlen complex. Arithmetische Operatoren +, -, *; Konstanten (“12343423”); Entscheidungsprozeduren Theorie Datatype: α option ist entweder Some x oder None Theorie List: Listen α list Theorie Map: partielle Abbildungen α ~=> β Lüth & Schröder: TEKS 1 8 WS 07/08 Simplifikation Simplifikation ist Termersetzung: Gegeben Theorem s = t, ersetze s durch t. Benutzung: apply (simp) Nutzt Gleichungen und Ungleichungen: Funktionsdefinitionen Vereinfachungsregeln für Datentypen Deklarierte Theoreme Annahmen des lokalen Subgoals Benutzt bedingte Gleichungen: s1 = t1 , . . . , sn = tn =⇒ s = t Ersetzt s durch t, wenn Gleichungen s1 = t1 . . . sn = tn rekursiv gezeigt werden können. Instantiiert keine Meta-Variablen Erzeugt keine neuen Subgoals, nur Vereinfachung Lüth & Schröder: TEKS 1 9 WS 07/08 Klassische Beweiser Beweisplaner: blast Konstruiert Beweis durch Suche Gelingt oder schlägt fehl: keine neuen Subgoals Klassischer Beweiser: clarify Wendet Einführungs- und Eliminationsregeln systematisch an Keine neuen Subgoals, nur Vereinfachung Sicher: keine unbeweisbaren Subgoals clarsimp: Kombination mit Simplifikation Vollautomatisch: auto Kombination verschiedener Beweiser Instantiiert Meta-Variablen, erzeugt neue Subgoals Unsicher: kann unbeweisbare Subgoals erzeugen Lüth & Schröder: TEKS 1 10 WS 07/08 Zusammenfassung Isabelle: LCF-Architektur mit logischem Kern und Meta-Logik Typdefinitionen: Einschränkung bestehender Typen Der Typ ind: Unendlichkeitsaxiom Nützliche vordefinierte Typen numerische Typen, Listen, Abbildungen, Mengen. . . Nützliche Beweisprozeduren: simp, blast, clarify, auto Lüth & Schröder: TEKS 1 11 WS 07/08