The following schedule lists the topics we will cover and approximately the number of meetings we will spend on each topic. The schedule is tentative. Most likely, some things will change during the semester, and I will revise the schedule as necessary.

The Reading column lists the assigned reading for the meeting. You should view the readings as an introduction to spark discussion in class.

The Assignment column lists the due date for each assignment.

Date Part Topic Reading Assignment
T 1/12 Welcome and course overview [slides]
R 1/14 Application Model checking and SLAM: Temporal logics [slides]
Thomas Ball and Sriram K. Rajamani. The SLAM Project: Debugging System Software via Static Analysis. Symposium on Principles of Programming Languages (POPL), 2002.
Thomas Ball and Sriram K. Rajamani. Automatically Validating Temporal Safety Properties of Interfaces. International SPIN Workshop, 2001.
Sign-up on the course moodle and introduce yourself.
T 1/19 Application Model checking and SLAM: Algorithms [slides]

Guest Instructor: Sriram Sankaranarayanan
R 1/21 Application Counterexample-guided abstraction refinement [slides]

Guest Instructor: Sriram Sankaranarayanan
Thomas A. Henzinger, Ranjit Jhala, Rupak Majumdar, and Gregoire Sutre. Lazy Abstraction. Symposium on Principles of Programming Languages (POPL), 2002.
T 1/26 Semantics A simple imperative language and operational semantics [slides]
Winskel, Chapter 2 up to 2.6 (i.e., 2.1-2.5). Section 2.6 is very short, so you may want to read ahead for 1/28.
R 1/28 Semantics Big-step operational semantics and contextual operational semantics [slides, code]
Winskel, 2.6
Choose at least one of the following historical articles:
Recent research (optional). Here are some recent papers that use operational semantics. Just skim to the appropriate figure and see if you can recognize the definitions.
Textbook supplement (optional). For some additional background, take a look at Harper, Chapter 9. Also, Part I carefully discusses inductive definitions (judgments and inference rules).
Textbook supplement (optional). Here is essentially a textbook on operational semantics. Chapter 2 provides another take on small-step operational semantics (where Winskel left as an exercise).
HW 0 due
T 2/2 Semantics Contextual operational semantics (reading: proof techniques) [slides, notes]
Harper, Chapter 1 (pay close attention to 1.4).
R 2/4 Semantics Contextual operational semantics (reading: proof techniques) [slides]
Winskel, Chapter 3
More details (optional). Winskel, Chapter 4.
HW 1 due
T 2/9 Semantics Proof techniques: structural induction (reading: small-step operational semantics) [slides, notes]
Optional. Harper, Chapter 9 up to and including 9.3. These sections discuss both the structural and contextual-style for the same language. This reading is optional but may spark some discussion on the moodle.
R 2/11 Semantics Proof techniques: structural induction [slides, notes] HW 2 due
T 2/16 Semantics Proof techniques: structural induction (reading: denotational semantics) [slides, notes]
Winskel, Chapter 5 (up to at least 5.4)
R 2/18 Semantics Denotational semantics for the spectator [slides]
Winskel, Chapter 5 (finish)
Winskel, Chapter 8 (read for the general concepts, not the details)
Textbook supplement (optional). For an alternative presentation of partial orders, least upper bounds, monotonic and continuous functions, and least fixed points, take a look at the following report (up to and including Section 2.4):
HW 3 due
T 2/23 Semantics Denotational semantics for the spectator [slides]
R 2/25 Semantics Denotational semantics for the spectator (reading: axiomatic semantics) [slides, notes]
C.A.R. Hoare. An Axiomatic Basis for Computer Programming. CACM 12(10), October 1969.
Robert W. Floyd. Assigning Meanings to Programs.
HW 4 due
T 3/2 Semantics Axiomatic semantics: an introduction [slides]
Winskel, 6.1-6.4
C.A.R. Hoare. Proof of a Program: FIND. CACM 14(1), January 1971.
R 3/4 Semantics Axiomatic semantics: an introduction [slides]
Winskel, 6.5-6.7 and 7.1-7.3
George Necula. Completeness of Axiomatic Semantics (using operational semantics).
HW 5 due
T 3/9 Semantics Axiomatic semantics: soundness and completeness [slides]
Winskel, 7.4-7.6
R 3/11 Semantics Verification conditions [slides]
Choose at least one of the following papers on using symbolic execution for automated testing:
Recent research (optional). CUTE is a follow-on project to DART. Both of these projects combine symbolic execution with concrete execution to perform automated testing.
Classic paper (optional). The following is the classic paper on symbolic execution:
HW 6 due
T 3/16 Semantics Symbolic execution and applying verification condition generation (reading: abstract interpretation) [slides]
Patrick Cousot. Informal Introduction to Abstract Interpretation. These are some lecture slides that explain the basic concepts of abstraction using a graphics analogy. Browse up to at least slide 52.
Samson Abramsky and Chris Hankin. An Introduction to Abstract Interpretation.
R 3/18 Semantics Abstract interpretation: an introduction [slides]
Patrick Cousot. Abstract Interpretation Based Formal Methods and Future Challenges. Informatics, 10 Years Back - 10 Years Ahead, 2001.
Ken Thompson. Reflections on Trusting Trust. CACM 27(8), August 1984. This is Ken Thompson's Turing Award lecture.
Classic paper (optional). The following is the classic paper on abstract interpretation:
HW 7 due
T 3/23 Types No class: Spring Break
R 3/25 Types No class: Spring Break
T 3/30 Application Pointer analysis [slides]

Guest Speaker: Manu Sridharan, IBM Research
Manu Sridharan and Rastislav Bodik. Refinement-Based Context-Sensitive Points-To Analysis for Java. Conference on Programming Language Design and Implementation (PLDI), 2006.
R 4/1 Semantics Abstract interpretation: an introduction (reading: lambda calculus) [slides]
Benjamin Pierce. Foundational Calculi for Programming Languages. (through Section 2)
T 4/6 Types Lambda calculus and functional programming [slides]
Textbook supplement (optional). For another take on lambda calculus, take a look at Pierce's TAPL book (e-book). Chapter 5 discusses the untyped lambda calculus, and Chapter 6 discusses de Bruijn notation.
Recent research (optional). Xavier Leroy. Formal certification of a compiler back-end, or: programming a compiler with a proof assistant. Symposium on Principles of Programming Languages (POPL), 2006.
R 4/8 Types Lambda calculus and functional programming [slides, bonus about encodings: slides, sample code]
Luca Cardelli. Type Systems. (through at least Section 3, Section 4 optional).
Textbook supplement (optional). In Pierce's TAPL book (e-book), Chapter 9 gives another presentation of the simply-typed lambda calculus.
T 4/13 Types Simply-typed lambda calculus [slides]
R 4/15 Types Monomorphic type systems and type soundness [slides]
Andrew K. Wright and Matthias Felleisen. A Syntactic Approach to Type Soundness.
Textbook supplement (optional). In Pierce's TAPL book (e-book), Chapter 11 presents the basic monomorphic types.
T 4/20 Types Subtyping [slides]
Pierce (e-book), Chapter 15 discusses the main concepts of subtyping.
Project presentation. John Kaplar and Carlos Tafoya - Logical Imperative Language (LIMP)pdf]>
R 4/22 Application Shape Analysis [slides]
Bor-Yuh Evan Chang, Xavier Rival, and George C. Necula. Shape Analysis with Structural Invariant Checkers. Static Analysis Symposium (SAS), 2007.
Textbook supplement (optional). Thomas W. Reps, Reinhard Wilhelm, and Mooly Sagiv. "Shape Analysis and Applications." In The Compiler Design Handbook: Optimizations and Machine Code Generation, Chapter 5, CRC Press, 2008.
T 4/27 Project presentations
Chris Grosshans and Mark Lewis-Prazen - JML Tools: Review and Evaluation [pdf]
R 4/29 Project presentations
Robert Frohardt and Jonathan Turner - Typestate-guided Exploration of Interleavings Using SMT [ppt] [pdf]
Teja Basava and Arpit Sud - Testing Concurrent Programs [ppt] [pdf]
Warren Fernandes and Azhar Sikander