Handzettel - FB3 - Uni Bremen

Werbung
Fahrplan
Praktische Informatik 3: Funktionale Programmierung
Vorlesung 9 vom 13.12.2016: Spezifikation und Beweis
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
Christoph Lüth
Universität Bremen
Wintersemester 2016/17
I
16:02:31 2017-01-17
1 [11]
Formaler Beweis
I
PI3 WS 16/17
Eigenschaften
I
I
Prädikate:
Formaler Beweis zeigt Korrektheit
I
Haskell-Ausdrücke vom Typ Bool
I
Quantifizierte Aussagen:
Wenn P :: α→ Bool, dann ist ALL x. P x :: Bool ein Prädikat und
EX x. P x :: Bool ein Prädikat
Wie?
I
Formale Notation
I
Beweisformen (Schließregeln)
Wozu?
I
Formaler Beweis zur Analyse des Algorithmus
I
Haskell als Modellierungssprache
PI3 WS 16/17
3 [11]
Wie beweisen?
Beweis
I
I
Sonderfall Gleichungen s == t und transitive Relationen
I
Prädikate müssen nicht ausführbar sein
PI3 WS 16/17
4 [11]
Notation
←→
Gleichungsumformung
Fallunterscheidung
Induktion
I
2 [11]
Warum?
I
I
Teil III: Funktionale Programmierung im richtigen Leben
Programmdefinition
Funktionsdefinition
Fallunterscheidung (Guards)
Allgemeine Form:
Lemma (1)
⇔
⇔
⇔
⇔
Sonderfall Gleichungen:
P
P1
P2
...
True
Rekursive Funktionsdefinition
Lemma (2)
— Begründung
— Begründung
=
=
=
=
a= b
a
x1
— Begründung
x2
— Begründung
...
b
Wichtig: formale Notation
PI3 WS 16/17
5 [11]
Beweis durch vollständige Induktion
PI3 WS 16/17
Beweis durch strukturelle Induktion (Listen)
Zu zeigen:
Zu zeigen:
Für alle natürlichen Zahlen x gilt P(x ).
Beweis:
I
Induktionsbasis: P(0)
I
Induktionsschritt:
I
Induktionsvoraussetzung P(x )
I
zu zeigen P(x + 1)
PI3 WS 16/17
6 [11]
Für alle endlichen Listen xs gilt P xs
Beweis:
7 [11]
I
Induktionsbasis: P [ ]
I
Induktionsschritt:
I
Induktionsvoraussetzung P xs
I
zu zeigen P (x: xs)
PI3 WS 16/17
8 [11]
Beweis durch strukturelle Induktion (Allgemein)
Beweisstrategien
I
Fold-Unfold:
Zu zeigen:
Für alle x in T gilt P(x )
Beweis:
I
Für jeden Konstruktor Ci :
I
Voraussetzung: für alle ti,j gilt P(ti,j )
I
zu zeigen P(Ci ti,1 . . . ti,ki )
I
I
Im Induktionsschritt Funktionsdefinition auffalten
I
Ausdruck umformen, bis Induktionsvoraussetzung anwendbar
I
Funktionsdefinitionen zusammenfalten
Induktionsvoraussetzung stärken:
I
I
PI3 WS 16/17
9 [11]
Zusammenfassung
I
I
I
Beweise beruhen auf:
I
Gleichungs- und Äquivalenzumformung
I
Fallunterscheidung
I
Induktion
Beweisstrategien:
I
Sinnvolle Lemmata
I
Fold/Unfold
I
Induktionsvoraussetzung stärken
Warum Beweisen?
I
Korrektheit von Haskell-Programmen
I
Haskell als Modellierungssprache
PI3 WS 16/17
11 [11]
Stärkere Behautung =⇒ stärkere Induktionsvoraussetzung, daher:
um Behauptung P zu zeigen, stärkere Behauptung P 0 zeigen, dann P als
Korollar
PI3 WS 16/17
10 [11]
Herunterladen