15-819C Reasoning about Low-Level Programming Languages (12 units)
Spring 2002
John C. Reynolds
Tuesdays and Thursdays, 10:30-11:50 am Wean Hall 4615A
Class Notes (in Postscript)
1.
An Introduction to Separation Logic, revised January 18 2002
2.
Expressions, Commands, and Assertions, revised May 1, 2002
3.
Specifications and Inference Rules, revised Feburary 6, 2002
4.
Lists and Arrays, revised May 1, 2002
5.
Trees and Dags, revised March 5, 2002
6.
Shared Variable Concurrency, revised March 15, 2002
7.
Semantics of Concurrency, revised May 17, 2002
8.
Future Directions, revised May 17, 2002
Papers
Homework (in Postscript)
1.
Homework 1, January 29, 2002, due February 5
2.
Homework 2, February 5, 2002, due February 12
3.
Homework 3, February 12, 2002, due February 19
4.
Homework 4, March 5, 2002, due March 12 - Note that, in Problem 2,
you should give a formal proof that your procedure meets the stated
specification.
Course Description
Conventional logics and type systems are inadequate for reasoning about
languages that give the programmer explicit control over the management
of storage and other resources. At this level, novel approaches to
formal specification and verification are needed for the construction of
software that is both highly reliable and highly efficient.
We will explore such systems, with particular emphasis on reasoning about
shared mutable data structures (structures where many pointers can address
the same location, which can be updated in-place by the program),
shared-variable concurrency, and embedded code (pointers from data structures
to machine code).
Topics to be covered include:
Operational semantics of imperative languages with pointer manipulation
Hoare logic
Annotated specifications as proofs
Independent (spatial) conjunction and implication
Axiomatization of pointer manipulation and storage allocation
Inductive definition of representations
Recursion and assertion variables
Axiomatization of arrays
Representation of directed graphs
Tailored garbage collection
Allocation via regions
Shared-variable concurrency
Passivity
Embedding code pointers in data structures
Type systems for shared and recursive structures
The unification of types and specifications
PREREQUISITES: Starred CS graduate course or permission of instructor.
TEXT: Notes and papers will be distributed.
METHOD OF EVALUATION: Grading will be based on homework and final exam.
last updated May 17, 2002