• Keine Ergebnisse gefunden

Typ-basiertes Programmieren und Schließen in Funktionalen Sprachen

N/A
N/A
Protected

Academic year: 2022

Aktie "Typ-basiertes Programmieren und Schließen in Funktionalen Sprachen"

Copied!
1
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

2. ¨Ubungsblatt

Typ-basiertes Programmieren und Schließen in Funktionalen Sprachen

Jun.-Prof. Dr. Janis Voigtl¨ ander / Dipl.-Math. Daniel Seidel Wintersemester 2009/10

Aufgabe 7

Charakterisieren Sie alle Funktionen vom Typ (a → Bool) → [a] → [a].

Geben Sie sowohl eine informale, als auch eine formale Beschreibung an. 3 Aufgabe 8

Beweisen Sie, dass zu jeder Funktion g:: [a]→[a] zwei Funktionenf ::Int → Int und h::Int →Int →Int existieren, so dass f¨ur alle endlichen Listen xs gilt:

g xs = letn =length xs in[xs !! (h n m) | m ←[0. .(f n)−1]]

Benutzen Sie das aus dem Typ von g abgeleitete freie Theorem. 3 Aufgabe 9

Vervollst¨andigen Sie den syntaktischen Beweis zu map h (reverse0 l [ ]) = reverse0 (map h l) [ ] aus der Vorlesung. Vergleichen Sie das freie Theorem f¨ur reverse0 (Theoremgenerator) mit der induktiv bewiesenen verallgemeinerten

Aussage. 3

Aufgabe 10 Leiten Sie die

”fusion property“ von foldr (die ¨Aquivalenz h (foldr k z) = foldr k0 z0 unter entsprechenden Nebenbedingungen, siehe Vorlesung) allein

aus dem Typ her. 3

Aufgabe 11

Beweisen Sie (aus dem zugeh¨origen freien Theorem), dass jede Funktion f ::

(a,a)→a tats¨achlich mit fst oder snd semantisch ¨aquivalent ist. 3 Aufgabe 12

Versuchen Sie, die relationale Typinterpretation so zu erweitern, dass sie das Beispiel flat (incr t) = map (+1) (flat t) aus der Vorlesung mittels eines

freien Theorems beweisen k¨onnen. 3

1

Referenzen

ÄHNLICHE DOKUMENTE

readFile :: FilePath -> IO String Mehr Operationen im Modul IO der Standardb¨ ucherei. Buffered/Unbuffered,

Abstrakte Datentypen Signaturen & Axiome Korrektheit von Programmen Zustand und Aktionen. Teil III: Beispiele,

isDoesNotExistError :: IOError -> Bool isIllegalOperation :: IOError -> Bool isPermissionError :: IOError -> Bool isUserError :: IOError -> Bool ioeGetErrorString ::

Typ-basiertes Programmieren und Schließen in Funktionalen

Jede Liste wird intern durch eine leere Liste abgeschlossen. Jede Liste wird intern durch Jede Liste wird intern durch eine leere

Beweisen Sie die Korrektheit der destroy / unfoldr -Regel. Versuchen Sie, ein Programm

Beweisen Sie die Korrektheit der destroy / unfoldr -Regel. Versuchen Sie, ein Programm

Typ-basiertes Programmieren und Schließen in Funktionalen