COS 516/ECE 516: Automated Reasoning about Software, Fall 2022

Course information

Semester: Fall 2022
Lectures: Monday & Wednesday 11:00 - 12:20pm
Location: McCosh Hall, Room 64
Instructor: Zak Kincaid, Office hours: Monday 1-2pm, CS building room 219
Teaching assistant: Charlie Murphy Office hours: Friday 3pm, Friend Center 010 (starting 9/16)

Links: Canvas Calculus of Computation


An introduction to algorithmic techniques for reasoning about software. Basic concepts in logic-based techniques including model checking, invariant generation, symbolic execution, and syntax-guided synthesis; automatic decision procedures in modern solvers for Boolean Satisfiability (SAT) and Satisfiability Modulo Theory (SMT); and their applications in automated verification, analysis, and synthesis of software. Emphasis on algorithms and automatic tools.


This is a tentative schedule that may be changed during the course.
Links for reading material should be accessible from inside the Princeton network. Contact Zak Kincaid if you are having difficulty accessing resources.

Date Topics Readings Assignments
Sept 7 Introduction & Propositional logic. Bradley/Manna Ch 1
Sept 12 SAT solving: DPLL and resolution.
Sept 14 SAT solving: CDCL -- web demo. Marques-Silva, Lynce, Malik: SAT handbook, Chapter 4
Sept 19 Finite transition systems and BDDs. Bryant: Graph-Based Algorithms for Boolean Function Manipulation PS1 due
Sept 21 First-order logic. Bradley/Manna Ch 2
Sept 26 First-order theories. Bradley/Manna Ch 3 PS2 due
Sept 28 SMT solving. De Moura, Bjørner: Satisfiability Modulo Theories: Introduction and Applications
Oct 3 SMT solving. Barrett, Sebastiani, Seisha, Tinelli: SAT handbook, Chapter 26 PS3 due
Oct 5 Programs, operational semantics, and partial correctness. Bradley/Manna Ch 4-6
Hoare: An axiomatic basis for computer programming
Oct 10 Midterm review. PS4 due
Oct 12 Midterm exam.
Oct 17,19 Fall break
Oct 24 Termination and total correctness.
Oct 26 Semi-automated verification. Bradley/Manna Ch 12
Oct 31 Invariant inference I: control flow, Floyd's logic, and Houdini Project outline due
Nov 2 Invariant inference II: data flow analysis
Nov 7 Abstract interpretation. PS5 due
Nov 9 Algebraic program analysis. Kincaid, Reps, Cyphert: Algebraic program analysis
Nov 14 Software model checking I. Jhala, Majumdar: Software Model Checking PS6 due
Nov 16 Software model checking II.
Nov 21 Quantifiers and synthesis.
Nov 23 Thanksgiving break
Nov 28 Temporal logic.
Nov 30 Project presentations
Dec 5 Project presentations
Dec 7 Project presentations
Dec 16 Dean's date Project report due

Grading policies

Your final grade will be weighted as follows:
Component Weight
Problem sets 40%
Design Project 30%
Midterm Exam 25%
Participation 5%
We encourage you to attend the lectures and to participate actively in the course. These will be components of your Participation grade.

Late policy


For homework and assignments, discussions with others are permitted, where the goal is to aid your understanding. However, the submitted work/code should be entirely your own.
For code submissions, please also submit a README file where you should name the individuals that you received help from or provided help to. Briefly mention the nature of the help you received or provided.
For the class project, you can work in teams of two. Discussions with your team-mate and with others are permitted.
For any of these (problem sets and class project), please DO NOT copy or get solutions from resources outside the course.
If you have any questions or concerns, please discuss these policies with the instructors.
Conduct during in-class exams is covered by the University Honor Code.