Principles of Programming Languages

Room 1257, Computer Sciences
Mon, Wed, Fri 230-345

Aws Albarghouthi, instructor
Office hours: Mon 345-445
Room 6363, Computer Sciences

Course description
Introduction to principles of advanced programming languages and programming-language theory. Topics include: lambda-calculus, functional languages, polymorphic functions, type inference, structural induction, lazy evaluation, operational semantics, denotational semantics, and axiomatic semantics.

Apr 9: Assignment 3 due May 4
Mar 8: Assignment 2 due Mar 31
Feb 27: Project proposal due Mar 20
Feb 1: Released assignment 1

Date Topic Notes Assigned Other
Jan 23 Lambda calculus introduction Ch. 5 of TAPL
Jan 25 Computing with lambda calculus Chs. 5 and 6 of TAPL
Jan 27 Encoding programming constructs in lambda calculus Ch. 5 of TAPL
Jan 30 Fixed-point combinators Notes
Matt Might's blog: Y combinator in JS
(See Might's other lambda calculus posts too.)
Feb 1 Church-Rosser Theorem Notes
Feb 6 Functional programming Tonnes of online tutorials
Feb 8 Structural induction Notes
Burstall's 1969 paper
Feb 19 Introduction to Types Ch. 8 of TAPL
Feb 22 Simply typed Lambda Calculus Ch. 9 of TAPL
Feb 20 Type inference Ch. 22 of TAPL
Notes: part 1 and part 2
Feb 22 Axiomatic semantics/Floyd-Hoare logic Chs. 9 and 10 of Sem (see references)
There are lots of lectures/tutorials online
Feb 27 Invariants as fixpoints
Mar 1 Automatic proofs (predicate abstraction / k-induction) Predicate abstraction: Sec. 4 of SMC (see references below)
A note on k-induction
Mar 6 Building a mini verifier Python code
Mar 8 Intro to Abstract Interpretation Notes
More details in Ch. 4 of PA (see references). See also FRAP Ch. 7.
Mar 13 Abstract interpretation of programs same as above
Mar 27 Termination proving See Cook's notes
Mar 29 Automating termination proofs Rybalchenko & Podelski, VMCAI04 Rybalchenko & Podelski, LICS04
Apr 3 Pre-expectations See Ch1 of [MM] below
Apr 5 Expectation invariants See Ch2 of [MM] below
Apr 10 Expectation invariants (cont'd)
Apr 12 Probabilistic analysis via model counting See Sankaranarayanan et al. (2013)
Apr 17 Approximate probabilistic inference Sec 12.3 of Koller & Freidman for MCMC
Church for MCMC in a probabilistic PL
Also play with WebPPL
Apr 19 Review
Apr 24 Program synthesis primer notes + code
Apr 26 Presentations
May 1 Presentations
May 3 Presentations
To be populated as the course progresses

Performance will be evaluated as follows:

40%: Assignments -- 4 problem sets throughout the term.
40%: Research project
10%: Project presentation
10%: Class participation

Course Project
For the final project, you can work on a problem of your choice with a partner or by yourself.

Deliverable 1 - Feb 10 Email me a list of three project ideas.

Deliverable 2 - March 20 Submit a 2-3 page proposal including the following:
  1. The statement of the problem to be investigated
  2. An explanation of why the problem is interesting
  3. A description of what you propose to do,
    • Explain the elements that you will have to build
    • Explain the elements that you can pick up from open-source sites
    • Explain the experiment(s) or performance measurement(s) that you plan to carry out. Two good approaches are
      • State the hypothesis that you hope to refute.
      • Complete the following sentence: ``The experiments were designed to shed light on the following questions: . . .''
      Then explain what you plan to measure; how you will measure it (if it is not obvious); and where you will obtain test cases.
    • List the tasks, broken down into two or three milestones
Deliverable 3 - April 20 Description of progress, implementation plan with completed steps checked off, and experimentation plan. Please turn in an updated proposal (with changes marked with changebars, and your new material added as "Appendix B: Progress Report".

Deliverable 4 - April/May 10-minute oral presentations (plus 5 minutes for questions/discussion) will be given during class. You will need to e-mail me an abstract (in plaintext) giving the title, project participants, and a two-paragraph to three-paragraph summary of what will be presented.

Deliverable 5 - May 10 Final writeup: The final writeup should be modeled after a typical conference paper. There is no length requirement or limit, but I would expect it to be somewhere around 6-10 pages of ACM's double-column conference formats.

Relevant Resources
There are no required textbooks for this class. The following is a list of books that should be useful references for different parts of the course.

This is an excellent reference for our lambda calculus and types material, available electronically through Wendt
[TAPL] Pierce, Types and Programming Langauges. The MIT Press, 2002.

This is an alternative lambda calculus resource.
[LC] Barendregt and Barendsen, Introduction to Lambda Calculus. March 2000.

This is a nice survey of most topics we will cover in this class:
[FRAP] Chlipala Formal Reasoning about Programs.

The following two books cover different aspects of model checking and temporal logics.
[MCa] Baier and Katoen, Principles of Model Checking. The MIT Press, 2008.
[MCb] Clarke et al., Model Checking. The MIT Press, 1999.

The following book covers data-flow analysis and abstract interpretation.
[PA] Nielson et al., Principles of Program Analysis Springer, 1999.

This is another abstract interpretation resource.
[AI] Abramsky and Hankin, An Introduction to Abstract Interpretation.

This is a paper surveying software model checking research.
[SMC] Jhala and Majumdar, Software Model Checking. ACM Computing Surveys.

This book talks about decision procedures and their applications in verification.
[CofC] Bradley and Manna, The Calculus of Computation. Spring, 2007.

This is a massive book on everything decision procedures, SAT, SMT, etc.
[SAT] Biere et al. (eds.) Handbook of Satisfiability, Springer, 2007.

This is a short book on operational, axiomatic, and denotational semantics.
[Sem] Nielson and Nielson Semantics with Applications Springer, 2007.

This is a book on probabilistic verification.
[MM] McIver and Morgan Abstraction, Refinement and Proof for Probabilistic Systems Springer, 2005.

There are many courses at other universities that cover similar topics.
  • Grossman's PL course at the other UW
  • Aldrich's analysis course at CMU
  • Dillig's decision procedures class at UT Austin
    and many others very little googling will find.