| Time: | Tue-Thu 10:30-11:50 |
| Room: | 5222 GHC |
| Instructor: | Robert Harper |
| Teaching Assistant: | Avijit Kumar |
| Office Hours | |
| Harper: | Mon 11:00-12:00 GHC 9207 |
| Kumar: | Wed 17:00-18:00 GHC 7709 |
This is an introductory course on the foundations of programming languages. The central organizing principle of language design is the identification of language "features" as types. The study of programming languages, therefore, reduces to the study of the theory of types. While this course emphasizes its relation to language design and implementation, we will also touch on the deep connections between type theory and proof theory (the structure and analysis of human reason) and category theory (a general theory of mathematical structures).
(Aug 20) Web page created.
(Sep 9) Web page updated.
| Robert Harper, Practical Foundations for Programming Languages , Draft of Fall, 2009. |
| Jean-Yves Girard (with Yves Lafont and Paul Taylor), Proofs and Types, Cambridge University Press, 1990. (Out-of-print, available on-line as linked.) |
| Benjamin C. Pierce, Types and Programming Languages , MIT Press, 2002. |
| Benjamin C. Pierce, ed., Advanced Topics in Types and Programming Languages , MIT Press, 2005. |
| Glynn Winskel, The Formal Semantics of Programming Languages: An Introduction , MIT Press, 1996. |
| John C. Reynolds, Theories of Programming Languages , Cambridge University Press, 1998. |
| John C. Mitchell, Foundations for Programming Languages , MIT Press, 1996. |
You are required to achieve a grade of B on each homework assignment. If, after grading, your assignment does not meet this standard, you are required to re-submit within one week a revised solution that corrects any errors or omissions to achieve a grade of B. This policy ensures that the emphasis is properly on learning the course material, and not on "getting through it."
All homeworks are due at the beginning of lecture on the due date. All homeworks are to be submitted by copying them to your submission directory in /afs/cs/academic/class/15814-f06/handin. Written homeworks are to be submitted in PDF format (only!), and must be typeset for the sake of legibility. The form of submission for a programming assignment is given with the assignment.
There will be a 24-hour take-home final examination during the exam period at the end of the semester.
Unless explicitly instructed otherwise, all homework and exam work is to be solely your own, and may not be shared with or borrowed from any other person in the course. You are not permitted to draw upon assignments or solutions from previous instances of the course, nor to use course materials (such as assignments or programs) obtained from any web site or other external source in preparing your work.
You may discuss homework assignments with other students in the class, but you must adhere to the whiteboard policy. At the end of discussion the whiteboard must be erased, and you must not transcribe or take with you anything that has been written on the board during your discussion. You must be able to reproduce the results solely on your own after any such discussion.
CS PhD students are assigned a pass/fail grade in the University grading system, but are given an internal letter grade for Black Friday purposes. A final letter grade of B is required to pass this course. To achieve this, you must have (1) completed all homework assignments with a grade of B; and (2) earned a grade of B or better on the final exam.
Undergraduate students and students in other programs will be assigned letter grades according to the same policies used to assign internal letter grades for CS PhD students.
| Date | Topic | Reading | Homework | |
|---|---|---|---|---|
| Sep | 8 | (No Class) | ||
| 10 | Judgements and Evidence; Logic of Conjunction | PT1-3; PFPL1-3 | ||
| 15 | Implication, Disjunction; Constructive Logic | PT1-3; PFPL6-7; PFPL30-31 | ||
| 17 | Proof Terms, Proof Reduction; Operational Semantics | PFPL6-7; PFPL30-31 | Homework 1 out (handout [source] ) Last revised: Sep 20, 14:07 EDT | |
| 22 | (No Class: GHC Opening Ceremonies) | |||
| 24 | Goedel's T: Primitive Recursion; Safety and Termination | PFPL14, 50 | Homework 2 out (handout [source]) Last revised: Sep 30, 18:23 EDT | |
| 29 | Plotkin's PCF: Fixed Points | Notes | ||
| Oct | 1 | Recursive Types | PFPL19-20 | Homework 3 out (handout [source], ) |
| 6 | Generic Programming | PFPL19 | ||
| 8 | Inductive and Coinductive Types | PFPL19 | Homework 4 out (handout [source, fig1, fig2] ) | |
| 13 | Dynamic Languages are Static Languages | PFPL20-22 | ||
| 15 | Reynolds's IA: Monads and Block Structure | PFPL34, 37 | Homework 5 (handout [source]) | |
| 20 | Monads and Reference Types | PFPL38 | ||
| 22 | Monads and Reference Types | PFPL38 | Homework 6 (handout [source]) | |
| 27 | Girard's F: Polymorphism and Abstraction | PFPL23-24 | ||
| 29 | Girard's F: Polymorphism and Abstraction | PFPL23-24 | ||
| Nov | 3 | Equality for Goedel's T | PFPL48 | |
| 5 | Equality for Girard's F | PFPL50 | Homework 7 (handout [source]) | |
| 10 | Parametricity | PFPL50 | ||
| 12 | Classical Logic and Control Operators | PFPL31 | ||
| 17 | Modal Logic | A Judgmental Reconstruction of Modal Logic. | Homework 8 (handout [source) | |
| 19 | Spatially Distributed Computing | Type-Safe Distributed Programming with ML5, A Symmetric Modal Lambda Calculus for Distributed Computing, Modal Types for Mobile Code. | ||
| 24 | (No class) | |||
| 26 | (Thanksgiving Break) | |||
| Dec | 1 | Spatially Distributed Computing; Concurrency | PFPL44-45 | |
| 3 | Concurrency | PFPL44-45 | ||