CS 565: Programming Languages

Handout 1:                                                                       January 4, 2013

Instructor

Instructor

Prof. Suresh Jagannathan
Room 3154J
Lawson Computer Science Building
Ph: x4-0971

suresh@cs.purdue.edu

Office Hours:

M, W. 2 - 3PM

Syllabus

This course will examine the design and implementation of programming languages from a foundational perspective.  Our goal will be to develop tools that will enable us to both design and specify new language features, to precisely understand the rationale for existing features in modern languages, and to understand how design decisions can impact implementations.  The course will be divided into roughly three parts: (1) principles (e.g., semantics, type systems, specifications); (2) proof techniques and formal reasoning and (3) automated theorem proving using the Coq proof assistant.   Our discussion of principles will be crafted in the context of definitions and theorems that capture salient properties of modern languages. The validation of these theorems will be undertaken using Coq, a powerful theorem prover and mechanized proof assistant.

A detailed syllabus can be found here.

Coq

All assignments and course lectures will take place using the mechanized proof assistant, Coq. You will need to download version 8.4, as well as an editor to facilitate writing interactive proofs. Proof General (which works with Emacs) and CoqIde, a standalone graphical editor are both good choices.

Course Text

The course text is Software Foundations. We will follow the material in the text closely. Each lecture will cover the material in the chapter by reviewing the corresponding source code and proofs.

Lectures

Basics {v, html}
Induction {v, html}
Lists {v, html}
Poly {v, html}
Gen {v, html}
Prop {v, html}
Logic {v, html}
SfLib {v, html}
Imp {v, html}
ImpCEvalFun {v, html}
Equiv {v, html}
Hoare {v, html}
Hoare2 {v, html}
Smallstep {v, html}
Types {v, html}
Stlc {v, html}
Norm {v, html}
MoreStlc {v, html}
References {v, html}
Subtyping {v, html}