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.

Signup 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 
Counterexampleguided 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.12.5).
Section 2.6 is very short, so you may want to read
ahead for 1/28.
C.A.R. Hoare. Hints
on Programming Language Design.


R  1/28  Semantics  Bigstep 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 smallstep
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: smallstep operational semantics) [slides, notes] 
Optional. Harper, Chapter 9 up to and
including 9.3. These sections discuss both the
structural and contextualstyle 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.16.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.56.7 and 7.17.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.47.6
Edsger W. Dijkstra.
Guarded Commands, Nondeterminacy and Formal Derivation of Programs.


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
followon 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.
RefinementBased ContextSensitive PointsTo 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
(ebook).
Chapter 5 discusses the untyped lambda calculus,
and Chapter 6 discusses de Bruijn notation.
Recent research (optional). Xavier Leroy.
Formal certification of a compiler backend, 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
(ebook),
Chapter 9 gives another presentation of the
simplytyped lambda calculus.


T  4/13  Types  Simplytyped 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
(ebook),
Chapter 11 presents the basic monomorphic types.


T  4/20  Types  Subtyping [slides] 
Pierce
(ebook),
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] 
BorYuh 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 
Daniel Stutzman  Reduction of Inductive Predicates for Shape Analysis of Circular Lists [pdf]
Allison Thompson  Visualizing Type Error Messages [pdf]
Sidartha Gracias  Measuring Program Complexity: A Survey [pdf]
Chris Grosshans and Mark LewisPrazen  JML Tools: Review and Evaluation [pdf]
Bryan Dixon  Type Safety for Systems Programming [pdf]


R  4/29  Project presentations 
Robert Frohardt and Jonathan Turner  Typestateguided Exploration of Interleavings Using SMT [ppt] [pdf]
Peter Carr and Ron Kneusel  A Survey of Approaches for Automated Unit Testing [pdf]
Graham Price and Chris Wailes  Tangle: A General Purpose, Concurrent, Object Oriented, Actor Based Programming Language [pdf]
Brian Brooks  Automatic Memory Management without RunTime Overhead [pdf]
Warren Fernandes and Azhar Sikander
