• Keine Ergebnisse gefunden

Formaler Beweis

N/A
N/A
Protected

Academic year: 2022

Aktie "Formaler Beweis"

Copied!
2
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

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]

(2)

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]

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++