Praktische Informatik 3: Funktionale Programmierung Vorlesung 10 vom 18.12.2012: Spezifikation und Beweis
Christoph Lüth
Universität Bremen Wintersemester 2012/13
Rev. 1963 1 [11]
Fahrplan
I Teil I: Funktionale Programmierung im Kleinen
I Teil II: Funktionale Programmierung im Großen
IAbstrakte Datentypen
ISignaturen und Eigenschaften
ISpezifikation und Beweis
IAktionen und Zustände
I Teil III: Funktionale Programmierung im richtigen Leben
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
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
4 [11]
Wie beweisen?
I Beweis ←→ Programmdefinition
Gleichungsumformung Funktionsdefinition Fallunterscheidung Fallunterscheidung (Guards)
Induktion Rekursive Funktionsdefinition
I Wichtig:formale Notation
5 [11]
Notation
Allgemeine Form:
zz: P
⇔ P1 — Warum?
⇔ P2 — Warum?
⇔ . . .
⇔ True
Sonderfall Gleichungen:
zz: a= b a
= x1 — Warum?
= x2 — Warum?
= . . .
= b
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)
7 [11]
Beweis durch strukturelle Induktion (Listen)
Zu zeigen:
Für alle endlichen ListenxsgiltP xs Beweis:
I Induktionsbasis:P[ ]
I Induktionsschritt:
IInduktionsvoraussetzungP xs
Izu zeigenP (x: xs)
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)
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
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
Frohes Fest!
11 [11]