Was bisher geschah I Formale Methoden in der Informatik I Wiederholung klassische Logik I Konkrete Datentypen (algebraische Strukturen) Abstrakte Datentypen I I I Syntax: Signatur Semantik: Axiome (FOL-Formeln, meist allquantifizierte Gleichungen zwischen Termen) I Zusammenhang abstrakte – konkrete Datentypen I interaktive Beweise mit Coq 56 Wiederholung ADT Beispiel: ADT für natürliche Zahlen (unvollständig) Sorten S: N, B Signatur Σ : 0, 1 : →N +, · : N × N →N =, ≤ : N × N →B Axiome Φ : ∀x, y , z : 0·x = 0=x ·0 x · (y + z) = (x · y ) + (x · z) Halbring-Axiome für (N, +, ·, 0, 1) Äquivalenzrelation-Axiome für = Halbordungs-Axiome für ≤ Axiome der Booleschen Algebra 57 Rekursive Datentypen induktive Definition eines rekursiven Datentyps T : IA: direkte Definition eine Menge von Basiselementen {b1 , . . . , bn } IS: Methode zur Konstruktion komplexer Elemente C(x1 , . . . , xm ) aus Elementen x1 , . . . , xm (Baumstruktur) rekursive Definition von Funktionen f : T → . . . auf diesem Datentyp: IA: Definition der Funktionswerte f (x) für alle Basiselemente x ∈ {b1 , . . . , bn } IS: Definition des Funktionswertes f (C(x1 , . . . , xm )) (evtl.) aus den gegebenen Werten f (x1 ), . . . , f (xm ) 58 Beispiel Peano-Zahlen Peano-Axiome: Die Menge N aller natürlichen Zahlen ist die kleinste Menge mit den folgenden Eigenschaften 1. Z (Zero für 0) ist eine natürliche Zahl. (Z ∈ N) 2. Jeder Nachfolger einer natürlichen Zahl ist eine natürliche Zahl. (∀x : x ∈ N → S(x) ∈ N) mathematisch:N = {Z } ∪ {S(x) | x ∈ N} Haskell: data N = Z | S N Coq: Inductive N : Set := | Z : N | S : N -> N. 59 Mehr Beispiele I Listen (polymorph, Elementtyp a) 1. nil ∈ Listh a i 2. xs ∈ Listh a i ∧ x∈a → cons(x,xs) ∈ Listh a i Coq: I Inductive List (a: Set) : Set := | nil : List a | cons : a -> List a -> List a. Binärbäume (polymorph, Elementtyp a) 1. Leaf ∈ bintreeh a i 2. l, r∈ bintreeh a i ∧ x∈a → Branch(l,x,r) ∈ bintreeh a i Coq: Inductive bintree (a: Type): Type := | Leaf : bintree a | Branch : bintree a -> a -> bintree a -> bintree a. 60 Funktionen auf Peano-Zahlen Addition: (induktiv nach x) y falls x = Z x +y = S(x 0 + y ) falls x = S (x’) in Coq: Fixpoint plus (x : N) (y : N) { struct x } : N := match x with | Z => y | S x’ => S (plus x’ y) end. Multiplikation: Fixpoint mal (x : N) (y : N) { struct x } : N := match x with | Z => ... | S x’ => ... end. gewünschte Eigenschaften (Spezifikation), z.B.: Assoziativität, Kommutativität, neutrale Elemente 61 Listen Inductive List (a: Set) : Set := | nil : List a | cons : a -> List a -> List a. Funktionen auf Listen: Länge: Fixpoint length (a : Set) (xs : List a) {struct xs} : N := match xs with | nil => Z | cons x xs’ => S (length a xs’) end. Verkettung: Fixpoint append (a : Set) (xs : List a) (ys : List a) { struct xs} : List a := match xs with | nil => ys | cons x xs’ => cons a x ( append a xs’ ys ) end . gewünschte Eigenschaften (Spezifikation), z.B.: Assoziativität von append, neutrales Element 62 Binärbäume Inductive bintree (a: Type): Type := | Leaf : bintree a | Branch : bintree a -> a -> bintree a -> bintree a. Funktionen auf Bäumen: Anzahl der Knoten: Fixpoint size (a: Set) (t : bintree a) : ( nat ) := match t with | Leaf => 0 | Branch l k r => (size l) + 1 + (size r) end . Inorder-Durchquerung: Fixpoint inorder (a: Type) (t : bintree a) : ( List a ) match t with | Leaf => nil a | Branch l k r => app (inorder a l) (cons k (inorder a r)) end . 63 Strukturelle Induktion zum Nachweis einer Eigenschaft P(x) für alle Elemente x des rekursiven Datentyps T Induktion über den Aufbau des Elementes: IA: Nachweis von P(x) für alle Basiselemente x ∈ {b1 , . . . , bn } IS: Induktionsvoraussetzung: P(x) gilt für alle Elemente x ∈ {x1 , . . . , xn } Induktionsbehauptung: P(x) gilt auch für das zusammengesetzte Element C(x1 , . . . , xm ) ( für alle Konstruktoren C von T ) Induktionsbeweis: Nachweis, dass IV → IB gilt 64 Strukturelle Induktion Peano-Zahlen mit Addition: I (beidseitige) Neutralität von 0 I Kommutativität I Assoziativität Peano-Zahlen mit Multiplikation: I Definition der Multiplikation I Neutralität von S(Z ) I Assoziativität Listen mit Verkettung: I Definition der Verkettung I Neutralität der leeren Liste (rechts, links) I Assoziativität der Verkettung I Länge verketteter Listen ist Summe der Längen ∀k , l ∈ List : length(append(k , l)) = length(k ) + length(l) 65 Listen natürlicher Zahlen Funktionen: I Summe aller Elemente induktiver Beweis für sum [1,2, .., n] = n ( n + 1 ) / 2 I Jedes Element verdoppeln induktiver Beweis für sum double_all xs = 2 * sum xs analog für Bäume 66