CS510 Theory and Practice of Functional Logic Programming
Class Meetings: Fri 9-11:40, FAB 150
Description
This course will provide a rapid introduction to the basic ideas and
implementation techniques for functional logic programming. FLP
combines the distinctive features of functional programming (algebraic
data types, lazy evaluation, polymorphic typing, first-class
functions, monadic I/O) and logic programming (logic variables,
non-determinism, search) seamlessly through narrowing and
residuation. The course will address three kinds of
questions: Why are these features useful? What is their underlying theory?
How can they be implemented? Lectures
will be augmented with weekly programming assignments in Curry (a
leading functional logic language) and Haskell (a leading functional
language). Exercises will serve both to illustrate the use of
these languages and to illuminate the underlying theory and implementation issues.
Prior exposure to functional or logic programming will be
useful, but is not required.
Format
Regular lectures. Weekly assigned readings. Weekly homework exercises in Curry and/or Haskell,
using the PAKCS (Curry) and HUGS (Haskell) programming environments.
Comprehensive final exam.
Course site
Course material will be posted as it becomes available
at http://www.cs.pdx.edu/~antoy/Courses/TPFLP/index.html.
Preliminary List of Topics
(Subject to change. Count on approximately one week per topic.)
- Introduction to Haskell and Curry (SA & AT).
Fundamental ideas of functional and functional/logic programming.
Simple examples and problems. Using HUGS and PAKCS systems.
- Lambda Calculus (AT)
Syntax; representations; notions of reduction; substitution;
normalization; recursion.
- Core Language (AT)
Idea of using a core language; Flat/Mild Curry; representation of
algebraic data types.
- Type Systems, Checking, and Inference (AT)
Definition of type systems; typing derivations; inference algorithms
and unification; polymorphic typing.
- Term Rewriting (SA)
Terminology (term, position, substitution, redex);
rewrite relation and its properties; constructor TRSs;
orthogonal TRSs.
- Logic Variables and Narrowing (SA)
Logic programming; residuation; narrowing; solving equations;
programming with variables.
- Evaluation Strategies (SA)
Termination; classic strategies; definitional trees;
classes of constructor TRSs;
- Monads (AT)
Definition; functional implementation; I/O monad.
- Toward abstract machines (AT)
Refinement of core interpreter into low-level abstract machine code.
Closure representations; firstification transformation.
- Non-determinism (SA)
Overlapping TRSs; choices; laziness; evaluation.
Contacts: antoy@cs.pdx.edu or
apt@cs.pdx.edu
Last updated: Thu Feb 13 10:54:06 PST 2003