Praktische Informatik 3: Funktionale Programmierung Vorlesung 9 vom 13.12.2016: Spezifikation und Beweis
Christoph Lüth
Universität Bremen Wintersemester 2016/17
16:02:31 2017-01-17 1 [11]
Fahrplan
I Teil I: Funktionale Programmierung im Kleinen
I Teil II: Funktionale Programmierung im Großen
IAbstrakte Datentypen
ISignaturen und Eigenschaften
I Spezifikation und Beweis
I Teil III: Funktionale Programmierung im richtigen Leben
PI3 WS 16/17 2 [11]
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
PI3 WS 16/17 3 [11]
Eigenschaften
I Prädikate:
IHaskell-Ausdrücke vom TypBool
IQuantifizierte Aussagen:
WennP ::α→Bool, dann istALL x. P x :: Boolein Prädikat und EX x. P x :: Boolein Prädikat
I Sonderfall Gleichungens == tundtransitiveRelationen
I Prädikate müssennicht ausführbarsein
PI3 WS 16/17 4 [11]
Wie beweisen?
I Beweis ←→ Programmdefinition
Gleichungsumformung Funktionsdefinition
Fallunterscheidung Fallunterscheidung (Guards)
Induktion Rekursive Funktionsdefinition
I Wichtig:formale Notation
PI3 WS 16/17 5 [11]
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
PI3 WS 16/17 6 [11]
Beweis durch vollständige Induktion
Zu zeigen:
Für alle natürlichen ZahlenxgiltP(x).
Beweis:
I Induktionsbasis:P(0)
I Induktionsschritt:
I InduktionsvoraussetzungP(x)
I zu zeigenP(x+ 1)
PI3 WS 16/17 7 [11]
Beweis durch strukturelle Induktion (Listen)
Zu zeigen:
Für alleendlichenListenxsgiltP xs Beweis:
I Induktionsbasis:P [ ]
I Induktionsschritt:
IInduktionsvoraussetzungP xs
Izu zeigenP (x: xs)
PI3 WS 16/17 8 [11]
Beweis durch strukturelle Induktion (Allgemein)
Zu zeigen:
Für allexinT giltP(x) Beweis:
I Für jeden KonstruktorCi:
I Voraussetzung: für alleti,jgiltP(ti,j)
I zu zeigenP(Citi,1. . .ti,ki)
PI3 WS 16/17 9 [11]
Beweisstrategien
I Fold-Unfold:
IIm Induktionsschritt Funktionsdefinitionauffalten
IAusdruck umformen, bis Induktionsvoraussetzung anwendbar
IFunktionsdefinitionenzusammenfalten I Induktionsvoraussetzungstärken:
IStärkere Behautung =⇒stärkere Induktionsvoraussetzung, daher:
Ium BehauptungPzu zeigen, stärkere BehauptungP0zeigen, dannPals Korollar
PI3 WS 16/17 10 [11]
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
PI3 WS 16/17 11 [11]