6.820 | Fall 2015 | Undergraduate

Fundamentals of Program Analysis

Lecture Notes

Unit 1: Intro to Functional Programming & Operational Semantics
1 Introduction to Functional Programming and Types (PDF - 2.8MB)
2 Lambda Calculus (PDF)
3 Big-Step vs. Small-Step Semantics and the λLet Calculus (PDF)
4 Coq Crash Course (Examples in Operational Semantics) (PDF)
Unit 2: Type Theory
5 Introduction to Simple Types (PDF)
Coq Examples (V)
6 Hindley-Milner Type Inference and Polymorphic Types (PDF)
7 Algebraic Data Types & Their Ingredients: Product, Sum, and Recursive Types (PDF)
8 Type Classes and Subtyping (PDF)
Unit 3: Types for Imperative Programs
9 Monads (PDF)
10 Typing of Imperative Programs (PDF)
11 Verification of Complex Properties with Types: From Information Flow to Race Detection (PDF)
Unit 4: Axiomatic Semantics
12 Intro to Axiomatic Semantics (PDF)
13 Verification Condition Generation (PDF)
14 Total Correctness and Termination (PDF)
15 Separation Logic (PDF)
16 Axiomatic Semantics for Concurrency: Rely-Guarantee & Concurrent Separation Logic (PDF)
Unit 5: Abstract Interpretation
17 Dataflow Analysis, Lattices, Fixed Points (PDF)
18 Abstract Interpretation, Galois Connections (PDF)
19 Abstract Interpretation, Galois Connections (cont.) (PDF)
20 The Heap: Inferring Loop Invariants about Data Structure Shape (PDF - 1.1MB)
Unit 6: Model Checking
21 Intro to Models and Properties (PDF)
22 Temporal Logic (PDF - 1.1MB)
23 Explicit State Model Checking (PDF)
24 Symbolic Model Checking (PDF)
25 Software Model Checking with Abstraction Refinement (PDF - 1.4MB)
26 From Model Checking to Synthesis (PDF - 1.1MB)

Course Info

As Taught In
Fall 2015
Learning Resource Types
Lecture Notes
Programming Assignments