Computation and Deduction (15-499B)

Instructor: Frank Pfenning, fp@cs, WeH 8127, x8-6343
Times: TuTh 12:00-1:20 (whenever scheduled---please contact instructor)
Room: WeH 5205
Credits: 9

Next Meeting: Thursday, Oct 27
Current Assignment: See here
This course explores the theory of programming languages following a novel approach where all aspects (language definitions, implementations, and proofs of language properties) are implemented in the Elf meta-language. The Elf implementation and all course materials are available on-line and allow experimentation with different language features and implementation techniques. After completing the course students should have developed The course begins with a study of the functional language Mini-ML followed by an introduction to the Elf meta-language. We then show how Elf can be used to formalize the theory of Mini-ML, including some aspects of compilation and correctness proofs for Mini-ML programs. We then discuss the foundation of logic programming and advanced type system design for programming languages.

Course Notes and Assignments

Hardcopies of the course notes will be handed out. Material connected with the course is available on-line, currently in the CS domain, in the directory /afs/ This includes assignments, current reading, and the current version of the complete notes.


15-312 (Principles of Programming Languages) or permission by the instructor.


Grades will be based on weekly homework (50%) which will include some programming assignments and a term paper (50%).


Marge Profeta,, WeH 8110, x8-5025

Course Outline

0  Introduction and Overview

1  Mini-ML
1.1 Operational Semantics
1.2 Value Soundness
1.3 Type System
1.4 Type Preservation

2  Formalization in a Logical Framework
2.1 Higher-Order Abstract Syntax
2.2 Judgments as Types
2.3 Higher-Level Judgments
2.4 The LF Type Theory

3  The Elf Programming Language
3.1 A Mini-ML Interpreter
3.2 An Implementation of Value Soundness
3.3 Mini-ML Type Inference
3.4 An Implementation of Type Preservation

4  Aspects of Compilation
4.1 Abstract Machines
4.2 Compilation
4.3 Compiler Correctness

5  Formal Specifications
5.1 Natural Deduction
5.2 Propositions as Types and Proofs as Programs
5.3 Induction and Primitive Recursion
5.4 Total Correctness

6  Logic Programming
6.1 Canonical Derivations and Proof Search
6.2 Uniform Proofs
6.3 Constraint Logic Programming
6.3 Unification

7  Advanced Type Systems
7.1 Explicit Polymorphism
7.2 The Calculus of Constructions
7.3 Subtyping and Intersection Types