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 | |
|---|---|---|---|---|---|
| M | 1/12 | Welcome and course overview [slides] | |||
| W | 1/14 | Application | Model checking and SLAM [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. |
| M | 1/19 | No class, Martin Luther King, Jr. Day | |||
| W | 1/21 | Application | Counterexample-guided abstraction refinement [slides] | Thomas A. Henzinger, Ranjit Jhala, Rupak Majumdar, and Gregoire Sutre. Lazy Abstraction. Symposium on Principles of Programming Languages (POPL), 2002. | |
| M | 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.
C.A.R. Hoare. Hints
on Programming Language Design.
Keep the forum posts for 1/26 to the Winskel
chapter and the class discussion. We will have a
separate forum on the Hoare paper.
|
HW0 Due |
| W | 1/28 | Semantics | Contextual operational semantics [slides] |
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 10.
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).
|
|
| M | 2/2 | Semantics | Proof techniques: structural induction [slides] |
Winskel, Chapter 3
Textbook supplement (optional). For some
additional background, take a look at Harper,
Chapter 1 (especially 1.4).
More details (optional). Winskel, Chapter
4.
|
HW1 Due |
| W | 2/4 | Semantics | Denotational semantics for the spectator [slides] | Winskel, Chapter 5 (up to at least 5.4) | |
| M | 2/9 | 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):
|
HW2 Due |
| W | 2/11 | Semantics | Axiomatic semantics, an introduction (and review of denotational semantics and domain theory) [slides] |
C.A.R. Hoare. An
Axiomatic Basis for Computer Programming.
CACM 12(10), October 1969.
Robert
W. Floyd. Assigning
Meanings to Programs.
|
|
| M | 2/16 | 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.
|
HW3 Due |
| W | 2/18 | Semantics | Axiomatic semenatics, an introduction [slides] |
Winskel, 6.5-6.7 and 7.1-7.3
George
Necula.
Completeness
of Axiomatic Semantics (using operational
semantics).
|
|
| M | 2/23 | Semantics | Verification conditions [slides] |
Winskel, 7.4-7.6
Edsger W. Dijkstra.
Guarded Commands, Nondeterminacy and Formal Derivation of Programs.
|
HW4 Due |
| W | 2/25 | Semantics | Symbolic execution and applying verification condition generation [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:
|
|
| M | 3/2 | Semantics | Abstract interpretation, an introduction [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.
|
HW5 Due |
| W | 3/4 | 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:
|
|
| Su | 3/8 | Project Proposal Due | |||
| M | 3/9 | Types | Lambda calculus and functional programming [slides] |
Benjamin
Pierce. Foundational Calculi for Programming Languages. (through Section 2)
|
HW6 Due |
| W | 3/11 | Types | Lambda calculus and functional programming [slides, lambda.ml (exercise), lambda.ml (solution)] |
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.
|
|
| M | 3/16 | Types | Simply-typed lambda calculus [slides] |
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.
|
|
| W | 3/18 | Types | Monomorphic type systems [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.
|
|
| M | 3/23 | No class, Spring Break | |||
| W | 3/25 | No class, Spring Break | |||
| Su | 3/29 | Project Status Update Due | |||
| M | 3/30 | Types | Subtyping [slides] | Textbook supplement (optional). In Pierce's TAPL book (e-book), Chapter 15 discusses the main concepts of subtyping. | |
| W | 4/1 | Types | Types for Imperative Features [slides] |
Classic paper (optional). The following is
a classic paper on exception handling:
Textbook supplement (optional). In
Pierce's TAPL book
(e-book),
Chapter 13 and 14 talk about reference and
exception types, respectively.
|
|
| Sa | 4/4 | Midterm Due | |||
| M | 4/6 | Midterm Discussion [slides] | |||
| Tu | 4/7 | Midterm Resubmit Due | |||
| W | 4/8 | Types | Recursive Types [slides] |
Luca
Cardelli. Type
Systems. (rest, Section 5 to end).
Textbook supplement (optional). In
Pierce's TAPL book
(e-book),
Chapter 20 discusses recursive types, while
Chapter 21 gives more of the mathematical
foundation.
|
|
| M | 4/13 | Types | Polymorphism [slides] | Textbook supplement (optional). In Pierce's TAPL book (e-book), Chapter 23 discusses universal types (for polymorphism). Section 22.7 talks a bit about ML-style let-polymorphism and the value restriction. For more advanced topics, Chapter 26 discusses bounded quantification (for both universal and existential types). Chapter 29 and 30 talks about kinding ("a type system for types"). | |
| W | 4/15 | Types | Data abstraction and dependent types [slides] | Textbook supplement (optional). In Pierce's TAPL book (e-book), Chapter 24 discusses existential types (for modularity and data abstraction). Section 30.5 briefly gives some intuition for dependent types. | |
| M | 4/20 | Application | Automated Theorem Proving and Proof Checking [slides] | Greg Nelson and Derek C. Oppen. Fast Decision Procedures Based on Congruence Closure. JACM 27(2), April 1980. | |
| W | 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.
|
|
| M | 4/27 | Project presentations |
Arlen Cox -
ML Type Inference and Unification
Steve Fernandez -
Hint-Based Static Analysis for Automatic Program Parallelization
Chris Lynch -
Modular C for Large-Scale Systems
Chenyu Zheng -
A Concurrent Incremental Run-Time Invariant Checker for Java
|
||
| W | 4/29 | Project presentations |
Joe Angell -
Gradual Python with Colored Local Type Inference
Moss Prescott -
Hybrid Checking for Data Structure Invariants
Weiyu Miao -
Incremental Type-Checking for Metaprograms
Praful Mangalath -
Runtime Error Analysis: A Machine Learning Perspective
|
||
| W | 5/6 | Project Paper Due | |||