SES #  TOPICS  READINGS  KEY DATES 

Unit 1: Intro to Functional Programming & Operational Semantics  
1  Introduction to Functional Programming and Types 
Some interesting reading about the genesis of functional programming: Backus, John. “Can Programming be Liberated from the Von Neumann Style? A Functional Style and its Algebra of Programs.” Magazine Communications of the ACM 8, no. 21 (1978): 613–41. Hudak, Hughes, Peyton Jones, et al. “A History of Haskell: Being Lazy With Class.” (PDF) 2007. 
Problem Set 1 Out 
2  Lambda Calculus 
Suggested Reading: Pierce, Benjamin C. Chapter 5 in Types and Programming Languages. MIT Press, 2002. ISBN: 9780262162098. [Preview with Google Books] 

3  BigStep vs. SmallStep Semantics and the λLet Calculus  
4  Coq Crash Course (Examples in Operational Semantics)  Problem Set 1 due  
Unit 2: Type Theory  
5  Introduction to Simple Types 
Cardelli’s, Luca. “Type Systems.” In Types and Programming Languages. MIT Press, 2002. ISBN: 9780262162098. 
Problem Set 2 Out 
6  HindleyMilner Type Inference and Polymorphic Types  
7  Algebraic Data Types & Their Ingredients: Product, Sum, and Recursive Types  
8  Type Classes and Subtyping  
Unit 3: Types for Imperative Programs  
9  Monads 
Problem Set 2 due Problem Set 3 Out 

10  Typing of Imperative Programs  
11  Verification of Complex Properties with Types: From Information Flow to Race Detection 
Myers, A. C. “JFlow: Practical Mostlystatic Information Flow Control.” Principles of Programming Languages (1999): 228–41. Flanagan, C., and S. N. Freund. “Typebased Race Detection for Java.” ACM SIGPLAN Notices 35, no. 5 (2000): 219–32. 

Unit 4: Axiomatic Semantics  
12  Intro to Axiomatic Semantics 
Floyd, Robert. “Assigning Meanings to Programs.” (PDF) 
Problem Set 4 Out 
13  Verification Condition Generation  Hoare. “An Axiomatic Basis for Computer Programming.” Communications of the ACM 12, no. 10 (1969): 576–80.  Problem Set 3 due 
14  Total Correctness and Termination  
15  Separation Logic  
16  Axiomatic Semantics for Concurrency: RelyGuarantee & Concurrent Separation Logic  
Unit 5: Abstract Interpretation  
17  Dataflow Analysis, Lattices, Fixed Points  Kildall, Gary. “A Unified Approach to Global Program Optimization.” Principles of Programming Languages (1973): 194–206. 
Problem Set 4 due Problem Set 5 Out 
18  Abstract Interpretation, Galois Connections  Cousot, P., and R. Cousot. “Abstract Interpretation: A Unified Lattice Model for Static analysis of Programs by Construction or Approximation of Fixpoints.” Principles of Programming Languages (1977): 238–52.  
19  Abstract Interpretation, Galois Connections (cont.)  
20  The Heap: Inferring Loop Invariants About Data Structure Shape 
Sagiv, Reps, et al. “Solving ShapeAnalysis Problems in Languages with Destructive Updating.” Principles of Programming Languages 20, no. 1 (1993): 1–50. 

Unit 6: Model Checking  
21  Intro to Models and Properties  
22  Temporal Logic  Problem Set 5 due  
23  Explicit State Model Checking  Problem Set 6 Out  
24  Symbolic Model Checking  
25  Software Model Checking with Abstraction Refinement 
Henzinger, T. A., R. Jhala, et al. “Lazy Abstraction.” Principles of Programming Languages ACM 37, no. 1 (2002): 58–70. Ball, T., R. Majumdar, et al. “Automatic Predicate Abstraction of C Programs.” ACM SIGPLAN Notices 36, no. 5 (2001): 203–13. 

26  From Model Checking to Synthesis  Problem Set 6 due 
Calendar & Readings
Course Info
Instructor
Departments
As Taught In
Fall
2015
Level
Learning Resource Types
notes
Lecture Notes
assignment
Programming Assignments