Praktische Informatik 3: Funktionale Programmierung Vorlesung 9 vom 13.12.2016: Spezifikation und Beweis
Christoph Lüth
Universität Bremen
Wintersemester 2016/17
Fahrplan
I
Teil I: Funktionale Programmierung im Kleinen
I
Teil II: Funktionale Programmierung im Großen
I Abstrakte Datentypen
I Signaturen und Eigenschaften
I Spezifikation und Beweis
I
Teil III: Funktionale Programmierung im richtigen Leben
Formaler Beweis
I
Warum?
I Formaler Beweis zeigtKorrektheit
I
Wie?
I Formale Notation
I Beweisformen (Schließregeln)
I
Wozu?
I Formaler Beweis zurAnalysedes Algorithmus
I Haskell alsModellierungssprache
Eigenschaften
I
Prädikate:
I Haskell-Ausdrücke vom TypBool
I Quantifizierte Aussagen:
WennP :: α→Bool, dann istALL x. P x :: Boolein Prädikat und EX x. P x :: Boolein Prädikat
I
Sonderfall Gleichungen
s == tund transitive Relationen
I
Prädikate müssen
nicht ausführbarsein
Wie beweisen?
I
Beweis
←→Programmdefinition
Gleichungsumformung Funktionsdefinition
Fallunterscheidung Fallunterscheidung (Guards)
Induktion Rekursive Funktionsdefinition
I
Wichtig: formale Notation
Notation
Allgemeine Form:
Lemma (1)
P
⇔ P1
— Begründung
⇔ P2
— Begründung
⇔
. . .
⇔ True
Sonderfall Gleichungen:
Lemma (2)
a= b a
=
x1— Begründung
=
x2— Begründung
= . . .
= b
Beweis durch vollständige Induktion
Zu zeigen:
Für alle natürlichen Zahlen
xgilt
P(x).
Beweis:
I
Induktionsbasis:
P(0)
I
Induktionsschritt:
I InduktionsvoraussetzungP(x)
I zu zeigenP(x+ 1)
Beweis durch strukturelle Induktion (Listen)
Zu zeigen:
Für alle endlichen Listen
xsgilt
P xsBeweis:
I
Induktionsbasis:
P [ ]I
Induktionsschritt:
I InduktionsvoraussetzungP xs
I zu zeigenP (x: xs)
Beweis durch strukturelle Induktion (Allgemein)
Zu zeigen:
Für alle
xin
Tgilt
P(x ) Beweis:
I
Für jeden Konstruktor
Ci:
I Voraussetzung: für alleti,j giltP(ti,j)
I zu zeigenP(Ci ti,1 . . . ti,ki)
Beweisstrategien
I
Fold-Unfold:
I Im Induktionsschritt Funktionsdefinitionauffalten
I Ausdruck umformen, bis Induktionsvoraussetzung anwendbar
I Funktionsdefinitionenzusammenfalten
I
Induktionsvoraussetzung stärken:
I Stärkere Behautung =⇒stärkere Induktionsvoraussetzung, daher:
I um BehauptungPzu zeigen, stärkere Behauptung P0 zeigen, dannPals Korollar
Zusammenfassung
I
Beweise beruhen auf:
I Gleichungs- und Äquivalenzumformung
I Fallunterscheidung
I Induktion
I
Beweisstrategien:
I Sinnvolle Lemmata
I Fold/Unfold
I Induktionsvoraussetzung stärken
I
Warum Beweisen?
I Korrektheit von Haskell-Programmen
I Haskell alsModellierungssprache