Lecture Times

Lectures will be given on Mondays and Fridays from one until three, but both slots will not be used every week. The planned schedule of lectures is: All lectures will be given in Seminar Room 4.

Lecture Plan

  1. Introduction to Abstract Interpretation. Explains the basic ideas of abstract interpretation in the context of functional programs: the lattice of abstract values, the safety relation, abstract functions, interpretation of conditionals, recursion and fixed point iteration. The examples used are sign analysis and strictness analysis. Discusses various approaches to fixpoint iteration, using minimal function graphs, pending analysis, frontiers (briefly), and symbolic representations.

    Recommended Reading:

  2. Systematic Design of Abstract Interpretations. Shows how abstract interpretations can be proved correct using logical relations, and introduces at the same time the idea of an expected form, taking BHA strictness analysis as the example. Goes on to discuss analyses derived from non-standard semantics, using a monadic presentation. The example here is a form of control flow analysis: `what functions might this variable be bound to'. Lastly the use of abstract closures to represent functions is discussed.

    Recommended Reading:

  3. Introduction to Type Inference. Types, their meanings, type inference rules, proving soundness. Type inference algorithm. The advantages and disadvantages of type-based analysis vs. abstract interpretation.

    Recommended reading:

  4. Type Based Program Analysis. Expressing program analyses as type systems. Example: closure analysis. Subtypes and anti-monotonicity. Type inference with subtypes. Polymorphism. Some applications.

    Recommended reading:

  5. Introduction to program transformation. The fold-unfold method. Fusion and tupling, eureka definitions. Deriving cyclic programs by transformation. Problems with fold-unfold.

    Recommended Reading:

    For examples of an algebraic approach to program transformation, see many of Richard Bird's Functional Pearls in the Journal of Functional Programming.
  6. Partial evaluation. What is partial evaluation. Bounded static variation. The Futamura projections. Offline partial evaluation. The specialiser projections. Speciliasing a simple interpreter. Binding-time improvements: separating static and dynamic data, The Trick, continuation passing. Inherited limits and optimal specialisation. Arity raising.

    Recommended Reading: to be filled in.

    A partial evaluator for a subset of Haskell is available from Rogardt Heldal.

  7. Compile-time program transformation. Program transformation is a regular part of optimising compilation, especially of functional languages. But compile-time transformations must be of a special sort: they cannot require user guidance, and must guarantee both to terminate and not to make programs worse. In this lecture we look at methods for deforestation, CPS-based compilation, and unboxing transformations.

    Recommended Reading:


John Hughes
Last modified: Fri Mar 8 12:46:34 MET 1996