Syllabus

Lecture Outline

This is the preliminary list of M/W lecture topics and readings. See the dateline for what we actually end up doing.

The M/W topics are primarily focused on higher-order and functional programming, following the pattern of PoPL I.

Friday is a paper reading day which will cover some recent papers as well as surveys of some topics we could not fit in the M/W days.

More Functional Programming in OCaml

To warm up let's cover some stuff that is more "PL I" but we didn't have the time to cover it there.

  • Pipelining
  • Folds and generalized folds
  • OCaml modules and functors
  • Generalized Abstract Data Types (GADTs) in OCaml
Resources:

Transformations

  • A-translation
  • Closure Conversion
  • Defunctionalization
  • Continuation-passing style, CPS transformation, and exceptions encodings
  • State-passing style and reader/writer threading
  • Unifying transformations with the monad template
  • Programming with monads and monad transformers
Resources:

Advanced Operational Semantics

  • Big-step operational semantics review
  • Environment/closure-based operational semantics
  • Church's lambda-calculus, reduction, and small-step operational semantics

Resources:

Program Analysis

We will cover this topic in depth, implementing both abstract interpreters and symbolic evaluators for higher-order languages.

  • Abstract interpretation
  • Symbolic Execution
Resources:

Advanced typed systems

We are going to cover basic type theory in detail (forall, exists, kinds) and spend less time on the advanced topics since they constitute a whole course if done rigorously.

  • Forall, exists
  • Higher kinds and type functions
  • Recursive types
  • Effect types
  • Ownership types
  • Gradual types
  • Dependent types
Resources:

Program verification

  • Program logics
  • Satisfiability Modulo Theories
  • Inductive definitions
  • The Coq Theorem prover
Resources:

Assignments Outline

Here is an outline for the assignments. See the dateline for the assignments we settle on, and the due dates.

  1. Transforming Fb programs in OCaml: closure conversion, A-Translation, defunctionalization, CPS.
  2. An environment-based Fb interpreter in OCaml
  3. Monadic programming in OCaml
  4. An Fb environment/closure-based interpreter in OCaml
  5. An Fb abstract interpreter in OCaml
  6. An Fb symbolic evaluator in OCaml using the Z3 SMT solver
  7. Correctness proofs in Coq

Potential Tutorial topics for paper reading Fridays