Aktuelle Themen aus dem Gebiet der Funktionalen Programmierung

Werbung
Themen und weitere Hinweise für das Seminar:
Aktuelle Themen aus dem Gebiet der
Funktionalen Programmierung [FP-S]
Professur für Künstliche Intelligenz und Softwaretechnologie
Sommersemester 2010
Inhaltsverzeichnis
1 Organisatorisches
2
1.1
Vorbesprechung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2
1.2
Webseite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2
1.3
Modulabschlussprüfung . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2
2 Allgemeines
2
3 Themen
5
3.1
Language and program design for functional dependencies . . . . . . . . . . .
5
3.2
Lazy evaluation and delimited control . . . . . . . . . . . . . . . . . . . . . .
6
3.3
HMF: Simple type inference for first-class polymorphism . . . . . . . . . . . .
7
3.4
A compositional theory for STM Haskell . . . . . . . . . . . . . . . . . . . .
8
3.5
Typed closure conversion preserves observational equivalence . . . . . . . . . .
9
3.6
Small-step and big-step semantics for call-by-need . . . . . . . . . . . . . . . 10
3.7
Making “Stricterness” More Relevant . . . . . . . . . . . . . . . . . . . . . . 11
3.8
Purely functional lazy non-deterministic programming . . . . . . . . . . . . . 12
3.9
Static contract checking for Haskell . . . . . . . . . . . . . . . . . . . . . . . 13
3.10 Branching vs. Linear Time: Semantical Perspective . . . . . . . . . . . . . . . 14
1
1
Organisatorisches
1.1
Vorbesprechung
Für die Teilnahme am Seminar, ist es u.a. notwendig bei der Vorbesprechung anwesend
zu sein. Die Vorbesprechung findet am Dienstag, den 9.2.2010, 14 c.t. in Seminarraum
307 (Informatikgebäude, 3. OG) statt. Sollten Sie aus nachvollziehbaren Gründen nicht
an der Vorbesprechung teilnehmen können, so teilen Sie dies uns bitte vorher mit!
1.2
Webseite
Es existiert eine Webseite zur Veranstaltung, die stets aktuelle Informationen zum Seminar, wie Terminplan, Raumänderungen, Themenliste usw. enthält. Die Seite ist über
http://www.ki.informatik.uni-frankfurt.de/lehre/SS2010/FP-S zu finden.
1.3
Modulabschlussprüfung
Die Modulabschlussprüfung ist bestanden, falls sowohl die Ausarbeitung als auch der
Vortrag mit mindestens ausreichend“ (4.0) bewertet wurden und regelmäßig teilgenom”
men wurde. Die Note der Prüfung berechnet sich aus dem Durchschnitt der Note für die
Ausarbeitung und der Note für den Vortrag.
Die Noten für Vortrag und Ausarbeitung werden erst am Ende der Vorlesungszeit vergeben.
2
Allgemeines
Die vorgesehenen Themen für das Seminare sind im Abschnitt 3 dieses Dokuments zu finden. Dort sind auch kurze Beschreibungen der einzelnen Themen sowie Literaturhinweise
und Links auf Online-Ressourcen im WWW zu finden.
Für das erfolgreiche Absolvieren des Seminars ist folgendes Vorgehen empfohlen bzw. ist
folgendes zu beachten:
1. Finden der angegebenen Quellen (möglichst sofort damit beginnen):
• Wo gibt es die angegebene Literatur?
• Bücher sind eventuell verliehen und müssen vorbestellt werden.
• Funktionieren die Links ins WWW?
2. Prüfen der angegebenen Quellen:
• Welche Informationen sind dort zu finden?
2
• Welche der gefunden Informationen sind nützlich?
• Welche Informationen fehlen oder reichen die vorhandenen Quellen?
3. Suchen eigener Quellen
• Literaturrecherche via Bibliotheksdatenbanken (OPAC, Institutsbibliothek)
• Literaturrecherche via Internet (Suchmaschinen wie z.B. Google)
4. Erstellen eines Konzepts
• Welche Aspekte sollen in die Ausarbeitung?
• Gliederung der Ausarbeitung
• Stichpunkte zu den einzelnen Unterpunkten
• Seitenzahlen abschätzen für die einzelnen Gliederungspunkte.
5. Besprechung des Konzepts mit einem Betreuer
Vor der Besprechung muss ein Termin ausgemacht werden. Dies geht am einfachsten via Email. Unklare Punkte sollten rechtzeitig per Email vor der Besprechung
angekündigt werden, um dem Betreuer eine Einarbeitung zu ermöglichen.
Die Besprechung des Konzepts ist auch dann zu empfehlen, wenn es eigentlich keine
”
Fragen“ gibt, denn bei einer solchen Besprechung kann frühzeitig die Arbeit in die
richtige Richtung gelenkt werden oder es können Missverständnisse aus dem Weg
geräumt werden.
6. Anfertigung der Ausarbeitung
Die Ausarbeitung soll eine in eigenen Worten verfasste Darstellung des Themas
sein. Insbesondere sollte sie nicht aus einer bloßen Übersetzung eines englischen
Orginaltexts bestehen. Der Umfang der Ausarbeitung sollte für PR-BS ca. 10 Seiten,
für FP-S ca. 15 Seiten betragen.
7. Abgabe der Ausarbeitung
Eine Vorversion der Ausarbeitung sollte 2 Wochen vor dem Vortrag abgegeben
werden. 2 Wochen nach dem Vortrag muss die endgültige Ausarbeitung bei der
Professur angekommen sein. Sie sollte sowohl in gedruckter Form als auch in elektronischer Version (PDF) abgegeben werden.
Anschließend wird sie begutachtet und es werden eventuell Vorschläge zur Nachbesserung gegeben. Die Nachbesserung sollte normalerweise bis zum Vortrag, in
Ausnahmefällen bis zwei Wochen nach dem Vortrag, vorgenommen werden. Die
Ausarbeitung soll u.U. auf der WWW-Seite der Professur für andere Teilnehmer
des Seminars verfügbar gemacht werden. Falls Sie dies nicht wünschen, so teilen Sie
uns das bitte mit Ihrer Abgabe mit.
3
8. Präsentation / Vortrag
Ziel des Vortrages ist zum einen die Vermittlung des Stoffes an die Teilnehmer, zum
anderen dient der Vortrag zum Üben einer Präsentation. Hierbei sollte beachtet
werden:
Publikum Berücksichtigen Sie, an wen sich Ihr Vortrag richtet. Dies sind im wesentlichen die übrigen Seminarteilnehmer aber auch der Dozent und die Mitarbeiter.
Zeitbeschränkung Es ist eine Vortragszeit von 60 Minuten vorgesehen. Diese
Begrenzung ist großzügig bemessen, bei wissenschaftlichen Konferenzen haben
Sie noch wesentlich weniger Zeit, oft nur 10 - 30 Minuten.
Die Zeitbeschränkung lässt es oft nicht zu, das gesamte Thema in allen Einzelheiten zu präsentieren, Sie sollten evtl. Teilthemen weglassen, oder unwichtigere Aspekte derart platzieren, so dass Sie sie nur dann vortragen, wenn noch
entsprechend Zeit zur Verfügung steht. Bei der Auswahl des Stoffes sollten die
folgenden Fragestellungen berücksichtigt werden:
• Was ist besonders wichtig und muss präsentiert werden?
• Was ist eher uninteressant und kann bei der Präsentation weggelassen werden?
• Was könnte präsentiert werden, falls noch genügend Zeit am Ende Präsentation vorhanden ist?
Zusätzlich zur eigentlichen Vortragszeit sind 5 Minuten für Zwischenfragen und
Diskussion eingeplant.
Folien / Bildschirmpräsentation Die Präsentation kann mithilfe einer Bildschirmpräsentation mit Laptop und Beamer erfolgen. Hierbei sollte die Information pro Folie wohldosiert sein: Statt langer Texte sollten die wichtigsten
Fakten stichpunktartig auf den Folien festgehalten werden. Die Folien sollten
lesbar sein (enstprechend große Schriftgröße wählen).
Die Anzahl der Folien kann je nach Inhalt der Folien variieren, als Maßstab sind
ca. 15-20 Folien einzuplanen. Animationen innerhalb der Präsentation sollten
Sie weitestgehend vermeiden, und wenn, dann nur sinnvoll einsetzen.
Für die Bildschirmdarstellung von Präsentationen sei PDF angeraten, da
diese auf jedem Rechner anzeigbar sind. Insbesondere sei zu beachten,
dass das Professur-Notebook kein PowerPoint unterstützt. Beim Einsatz
von LATEX bietet sich hierfür besonders das Paket “Beamer” http://latexbeamer.sourceforge.net/ an.
Es wird empfohlen die Vortragsfolien 1-2 Tage vor dem Vortrag bereits an den
Betreuer zu schicken, damit getestet werden kann, ob die Präsentation auf den
Systemen der Professur lauffähig ist.
Zur Vorbereitung auf den Vortrag wird empfohlen, den Vortrag probeweise vor einem
Kommilitonen o.ä. zu halten, insbesondere um zu sehen, ob
4
• der Vortrag zu lang / kurz ist.
• der Vortrag verständlich ist.
• der Vortrag spannend oder eher ermüdend ist.
9. Teilnahme Von den Teilnehmern wird erwartet, dass Sie bei allen Vorträgen des
Seminars anwesend sind, und aktiv am Seminar teilnehmen, indem Sie sich an der
Diskussion beteiligen.
3
3.1
Themen
Language and program design for functional dependencies
Abstract
Eight years ago, functional dependencies, a concept from the theory of relational databases, were proposed as a mechanism for avoiding common problems
with multiple parameter type classes in Haskell. In this context, functional dependencies give programmers a means to specify the semantics of a type class
more precisely, and to obtain more accurate inferred types as a result. As time
passed, however, several issues were uncovered - both in the design of a language to support functional dependencies, and in the ways that programmers
use them - that led some to search for new, better alternatives.
This paper focusses on two related aspects of design for functional dependencies: (i) the design of language/type system extensions that implement them;
and (ii) the design of programs that use them. Our goal is to clarify the issues of what functional dependencies are, how they should be used, and how
the problems encountered with initial proposals and implementations can be
addressed.
Literatur
Jones, Mark P. und Iavor S. Diatchki: Language and program design for functional dependencies. In: Haskell ’08: Proceedings of the first
ACM SIGPLAN symposium on Haskell, Seiten 87–98, New York, NY,
USA, 2008. ACM.
Aus dem Netz der RBI kostenlos abrufbar über
http://doi.acm.org/10.1145/1411286.1411298.
5
3.2
Lazy evaluation and delimited control
Abstract
The call-by-need lambda calculus provides an equational framework for reasoning syntactically about lazy evaluation. This paper examines its operational
characteristics.
By a series of reasoning steps, we systematically unpack the standard-order
reduction relation of the calculus and discover a novel abstract machine definition which, like the calculus, goes “under lambdas”. We prove that machine
evaluation is equivalent to standard-order evaluation.
Unlike traditional abstract machines, delimited control plays a significant role
in the machine’s behavior. In particular, the machine replaces the manipulation of a heap using store-based effects with disciplined management of the
evaluation stack using control-based effects. In short, state is replaced with
control.
To further articulate this observation, we present a simulation of call-by-need
in a call-by-value language using delimited control operations.
Literatur
Garcia, Ronald, Andrew Lumsdaine und Amr Sabry: Lazy evaluation and delimited control. In: POPL ’09: Proceedings of the 36th annual
ACM SIGPLAN-SIGACT symposium on Principles of programming languages, Seiten 153–164, New York, NY, USA, 2009. ACM. Aus dem Netz der RBI
kostenlos abrufbar über http://doi.acm.org/10.1145/1480881.1480903.
6
3.3
HMF: Simple type inference for first-class polymorphism
Abstract
HMF is a conservative extension of Hindley-Milner type inference with firstclass polymorphism. In contrast to other proposals, HML uses regular System
F types and has a simple type inference algorithm that is just a small extension of the usual Damas-Milner algorithm W. Given the relative simplicity and
expressive power, we feel that HMF can be an attractive type system in practice. There is a reference implementation of the type system available online
together with a technical report containing proofs (Leijen 2007a,b).
Literatur
Leijen, Daan: HMF: simple type inference for first-class polymorphism.
In: ICFP ’08: Proceeding of the 13th ACM SIGPLAN international conference on Functional programming, Seiten 283–294, New York, NY,
USA, 2008. ACM.
Aus dem Netz der RBI kostenlos abrufbar über
http://doi.acm.org/10.1145/1411204.1411245.
7
3.4
A compositional theory for STM Haskell
Abstract
We address the problem of reasoning about Haskell programs that use Software
Transactional Memory (STM). As a motivating example, we consider Haskell
code for a concurrent non-deterministic tree rewriting algorithm implementing
the operational semantics of the ambient calculus. The core of our theory is a
uniform model, in the spirit of process calculi, of the run-time state of multithreaded STM Haskell programs. The model was designed to simplify both
local and compositional reasoning about STM programs. A single reduction
relation captures both pure functional computations and also effectful computations in the STM and I/O monads. We state and prove liveness, soundness,
completeness, safety, and termination properties relating source processes and
their Haskell implementation. Our proof exploits various ideas from concurrency theory, such as the bisimulation technique, but in the setting of a widely
used programming language rather than an abstract process calculus. Additionally, we develop an equational theory for reasoning about STM Haskell
programs, and establish for the first time equations conjectured by the designers of STM Haskell. We conclude that using a pure functional language
extended with STM facilitates reasoning about concurrent implementation
code.
Literatur
Borgström, Johannes, Karthikeyan Bhargavan und Andrew D.
Gordon: A compositional theory for STM Haskell. In: Haskell ’09: Proceedings of the 2nd ACM SIGPLAN symposium on Haskell, Seiten 69–80, New
York, NY, USA, 2009. ACM. Aus dem Netz der RBI kostenlos abrufbar über
http://doi.acm.org/10.1145/1596638.1596648.
8
3.5
Typed closure conversion preserves observational equivalence
Abstract
Language-based security relies on the assumption that all potential attacks are
bound by the rules of the language in question. When programs are compiled
into a different language, this is true only if the translation process preserves observational equivalence. We investigate the problem of fully abstract
compilation, i.e., compilation that both preserves and reflects observational
equivalence. In particular, we prove that typed closure conversion for the polymorphic À-calculus with existential and recursive types is fully abstract. Our
proof uses operational techniques in the form of a step-indexed logical relation
and construction of certain wrapper terms that “back-translate” from target
values to source values. Although typed closure conversion has been assumed
to be fully abstract, we are not aware of any previous result that actually
proves this.
Literatur
Ahmed, Amal und Matthias Blume: Typed closure conversion preserves
observational equivalence. In: ICFP ’08: Proceeding of the 13th ACM SIGPLAN international conference on Functional programming, Seiten 157–168,
New York, NY, USA, 2008. ACM. Aus dem Netz der RBI kostenlos abrufbar
über http://doi.acm.org/10.1145/1411204.1411227.
9
3.6
Small-step and big-step semantics for call-by-need
Abstract
We present natural semantics for acyclic as well as cyclic call-by-need lambda calculi, which are proved equivalent to the reduction semantics given by
Ariola and Felleisen. The natural semantics are big-step and use global heaps,
where evaluation is suspended and memorized. The reduction semantics are
small-step and evaluation is suspended and memorized locally in let-bindings.
Thus two styles of formalization describe the call-by-need strategy from different angles. The natural semantics for the acyclic calculus is revised from
the previous presentation by Maraist et al. and its adequacy is ascribed to its
correspondence with the reduction semantics, which has been proved equivalent to call-by-name by Ariola and Felleisen. The natural semantics for the
cyclic calculus is inspired by that of Launchbury and Sestoft and we state its
adequacy using a denotational semantics in the style of Launchbury; adequacy of the reduction semantics for the cyclic calculus is in turn ascribed to its
correspondence with the natural semantics.
Literatur
Nakata, Keiko und Masahito Hasegawa: Small-step and big-step semantics for call-by-need. J. Funct. Program., 19(6):699–722, 2009. Preprint
kostenlos verfügbar über http://arxiv.org/abs/0907.4640.
10
3.7
Making “Stricterness” More Relevant
Abstract
Adapting a strictness analyser to have it take into account explicit strictness
annotations can be a tricky business. Straightforward extensions of analyses
based on relevance typing are likely to either be unsafe or fail to pick the
fruits of increases in strictness that are introduced through annotations. We
propose a more involved adaptation of relevance typing, that can be used
to derive strictness analyses that are both safe and effective in the presence
of explicit strictness annotations. The resulting type system provides a firm
foundation for implementations of type-based strictness analysers in compilers
for lazy programming languages such as Haskell and Clean.
Literatur
Holdermans, Stefan und Jurriaan Hage: Making “Stricterness” More Relevant. To appear in ACM SIGPLAN 2010 Workshop on Partial
Evaluation and Program Manipulation 2010, 2010. Online verfügbar über
http://people.cs.uu.nl/stefan/pubs/holdermans10making.html.
11
3.8
Purely functional lazy non-deterministic programming
Abstract
Functional logic programming and probabilistic programming have demonstrated the broad benefits of combining laziness (non-strict evaluation with sharing
of the results) with non-determinism. Yet these benefits are seldom enjoyed
in functional programming, because the existing features for non-strictness,
sharing, and non-determinism in functional languages are tricky to combine.
We present a practical way to write purely functional lazy non-deterministic
programs that are efficient and perspicuous. We achieve this goal by embedding
the programs into existing languages (such as Haskell, SML, and OCaml)
with high-quality implementations, by making choices lazily and representing
data with non-deterministic components, by working with custom monadic
data types and search strategies, and by providing equational laws for the
programmer to reason about their code.
Literatur
Fischer, Sebastian, Oleg Kiselyov und Chung-chieh Shan: Purely
functional lazy non-deterministic programming. In: ICFP ’09: Proceedings
of the 14th ACM SIGPLAN international conference on Functional programming, Seiten 11–22, New York, NY, USA, 2009. ACM. Aus dem Netz der RBI
kostenlos abrufbar über http://doi.acm.org/10.1145/1596550.1596556.
12
3.9
Static contract checking for Haskell
Abstract
Program errors are hard to detect and are costly both to programmers who
spend significant efforts in debugging, and for systems that are guarded by
runtime checks. Static verification techniques have been applied to imperative
and object-oriented languages, like Java and C#, but few have been applied
to a higher-order lazy functional language, like Haskell. In this paper, we
describe a sound and automatic static verification framework for Haskell, that
is based on contracts and symbolic execution. Our approach is modular and
gives precise blame assignments at compile-time in the presence of higher-order
functions and laziness.
Literatur
Xu, Dana N., Simon Peyton Jones und Koen Claessen: Static contract checking for Haskell. In: POPL ’09: Proceedings of the 36th annual
ACM SIGPLAN-SIGACT symposium on Principles of programming languages, Seiten 41–52, New York, NY, USA, 2009. ACM. Aus dem Netz der RBI
kostenlos abrufbar über http://doi.acm.org/10.1145/1480881.1480889.
13
3.10
Branching vs. Linear Time: Semantical Perspective
Abstract
The discussion in the computer-science literature of the relative merits of
linear- versus branching-time frameworks goes back to early 1980s. One of
the beliefs dominating this discussion has been that the linear-time framework is not expressive enough semantically, making linear-time logics lacking
in expressiveness. In this work we examine the branching-linear issue from
the perspective of process equivalence, which is one of the most fundamental notions in concurrency theory, as defining a notion of process equivalence
essentially amounts to defining semantics for processes. Over the last three
decades numerous notions of process equivalence have been proposed. Researchers in this area do not anymore try to identify the “right” notion of equivalence. Rather, focus has shifted to providing taxonomic frameworks, such as
“the linear-branching spectrum”, for the many proposed notions and trying
to determine suitability for different applications.
We revisit this issue here from a fresh perspective. We postulate three principles that we view as fundamental to any discussion of process equivalence.
First, we borrow from research in denotational semantics and take contextual equivalence as the primary notion of equivalence. This eliminates many
testing scenarios as either too strong or too weak. Second, we require the description of a process to fully specify all relevant behavioral aspects of the
process. Finally, we require observable process behavior to be reflected in its
input/output behavior. Under these postulates the distinctions between the
linear and branching semantics tend to evaporate. As an example, we apply
these principles to the framework of transducers, a classical notion of statebased processes that dates back to the 1950s and is well suited to hardware
modeling. We show that our postulates result in a unique notion of process
equivalence, which is trace based, rather than tree based
Literatur
Nain, Sumit und Moshe Y. Vardi: Branching vs. Linear Time: Semantical
Perspective. In: Namjoshi, Kedar S., Tomohiro Yoneda, Teruo Higashino und Yoshio Okamura (Herausgeber): ATVA, Band 4762 der Reihe
Lecture Notes in Computer Science, Seiten 19–34. Springer, 2007. Verfügbar
über http://www.cs.rice.edu/∼vardi/papers/atva0712.pdf.
14
Herunterladen