Readings

The main textbook is Programming Languages: An Interpreter-Based Approach, by Norman Ramsey, and Samuel N. Kamin. The book is an unpublished draft and is available in class.

Elements of ML Programming by Jeffrey D. Ullman Is a readable introduction to the ML language, in which most of the interpreters in the textbook are written. Copies are available in the North Campus bookstore.

Foundations of Functional Programming by Lawrence C. Paulson. We use pages pages 2 - 21 as an introduction to lambda-calculus, but the whole tutorial is well worth reading. Local copy as ps or pdf.

Type Systems by Luca Cardelli is a useful tutorial on type systems. Local copy as here. His system F2 is similar to the book's polymorphic type system but without the overhead of kinds.

"Lecture Notes on Denotational Semantics" by Andrew M. Pitts. Local copy as as .ps.gz, errata as .ps.gz. Sections 1,2 provide background. Section 5 introduces the language PCF, which should be simple after typed uSheme! Section 6 gives a denotational semantics for this typed language: we discuss only untyped languages in lecture. The rest of the paper covers more of the mathematics of denotational semantics than we cover in the course.

Material for Prolog

"Specification and Verification I" by Michael J. C. Gordon (local copy available as .ps.gz or .pdf). We cover Chapters 1 and 2. You can also read Sections 7.2 and 7.3 on deriving Partial Correctness Assertions from Denotational Semantics.