• Keine Ergebnisse gefunden

Praktische Informatik 3: Funktionale Programmierung Vorlesung 9 vom 13.12.2016: Spezifikation und Beweis

N/A
N/A
Protected

Academic year: 2022

Aktie "Praktische Informatik 3: Funktionale Programmierung Vorlesung 9 vom 13.12.2016: Spezifikation und Beweis"

Copied!
11
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Praktische Informatik 3: Funktionale Programmierung Vorlesung 9 vom 13.12.2016: Spezifikation und Beweis

Christoph Lüth

Universität Bremen

Wintersemester 2016/17

(2)

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

(3)

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

(4)

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 == t

und transitive Relationen

I

Prädikate müssen

nicht ausführbar

sein

(5)

Wie beweisen?

I

Beweis

←→

Programmdefinition

Gleichungsumformung Funktionsdefinition

Fallunterscheidung Fallunterscheidung (Guards)

Induktion Rekursive Funktionsdefinition

I

Wichtig: formale Notation

(6)

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

(7)

Beweis durch vollständige Induktion

Zu zeigen:

Für alle natürlichen Zahlen

x

gilt

P

(x).

Beweis:

I

Induktionsbasis:

P

(0)

I

Induktionsschritt:

I InduktionsvoraussetzungP(x)

I zu zeigenP(x+ 1)

(8)

Beweis durch strukturelle Induktion (Listen)

Zu zeigen:

Für alle endlichen Listen

xs

gilt

P xs

Beweis:

I

Induktionsbasis:

P [ ]

I

Induktionsschritt:

I InduktionsvoraussetzungP xs

I zu zeigenP (x: xs)

(9)

Beweis durch strukturelle Induktion (Allgemein)

Zu zeigen:

Für alle

x

in

T

gilt

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)

(10)

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

(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

Referenzen

ÄHNLICHE DOKUMENTE

Praktische Informatik 3: Funktionale Programmierung Vorlesung 9 vom 13.12.2016: Spezifikation und Beweis?.

I Beispiel 3: HTML oder LaTeX oder Word — Typesetting... Programmiersprachen

Praktische Informatik 3: Funktionale Programmierung Vorlesung 13 vom 24.01.17: Scala — Eine praktische Einführung..

Praktische Informatik 3: Funktionale Programmierung Vorlesung 9 vom 09.12.2012: Signaturen und Eigenschaften..

Praktische Informatik 3: Funktionale Programmierung Vorlesung 10 vom 18.12.2012: Spezifikation und Beweis..

I Verzögerte Auswertung effizient, weil nur bei Bedarf ausgewertet wird.. I Aber

Praktische Informatik 3: Funktionale Programmierung Vorlesung 13 vom 20.01.15: Scala — Eine praktische Einführung..

I Eine Funktion hat ein Speicherleck, wenn Speicher unnötig lange im Zugriff bleibt. I “Echte” Speicherlecks wie in C/C++