• Keine Ergebnisse gefunden

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

N/A
N/A
Protected

Academic year: 2022

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

Copied!
2
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

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]

(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)

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]

Referenzen

ÄHNLICHE DOKUMENTE

konstanter Aufwand ←→ beliebige Genauigkeit, wachsender Aufwand Haskell bietet die Auswahl:. I Int - ganze Zahlen als Maschinenworte (≥

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

Ein Typsystem ist eine handhabbare syntaktische Methode, um die Abwesenheit bestimmter Programmverhalten zu beweisen, indem Ausdrücke nach der Art der Werte, die sie

Ein Typsystem ist eine handhabbare syntaktische Methode, um die Abwesenheit bestimmter Programmverhalten zu beweisen, indem Ausdrücke nach der Art der Werte, die sie

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

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

I Tutorien: Mo 10-12 MZH 5210 Christian Maeder Mo 16-18 MZH 1380 Rene Wagner Di 8-10 MZH 1100 Diedrich Wolter Di 10-12 MZH 1380 Diedrich Wolter Di 10-12 MZH 1400 Bernd Gersdorf Di