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

Course information

Semester: Fall 2026
Lectures: Monday & Wednesday 10:40 - 12:00pm
Location: Sherrerd Hall, Room 001
Instructor: Zak Kincaid, zkincaid@cs.princeton.edu. Office hours: TBD
Teaching assistant: TBD

Links: Canvas | Ed | Calculus of Computation

Description

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

Schedule

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 2 Introduction & Propositional logic. Bradley/Manna Ch 1
Sept 7 Labor Day holiday
Sept 9 Formal proofs and proof checking with Lean.
Sept 14 SAT solving: DPLL and resolution. PSet 1A due
Sept 16 SAT solving: CDCL -- web demo. Marques-Silva, Lynce, Malik: SAT handbook, Chapter 4
Sept 21 Finite transition systems and Binary Decision Diagrams. PSet 1B due
Sept 23 Binary decision diagrams. Bryant: Graph-Based Algorithms for Boolean Function Manipulation
Sept 28 First-order logic. Bradley/Manna Ch 2 PSet 2 due
Sept 30 First-order theories. Bradley/Manna Ch 3
Oct 5 SMT solving. De Moura, Bjørner: Satisfiability Modulo Theories: Introduction and Applications PSet 3 due
Oct 7 SMT solving. Barrett, Sebastiani, Seisha, Tinelli: SAT handbook, Chapter 26
Oct 12 Midterm review. PSet 4 due
Oct 14 Midterm exam.
Oct 19,21 Fall break
Oct 26 Programs, operational semantics, and partial correctness. Bradley/Manna Ch 4-6
Hoare: An axiomatic basis for computer programming
Oct 28 Termination and total correctness.
Nov 2 Semi-automated verification. Bradley/Manna Ch 12 Project outline due
Nov 4 Invariant inference I: control flow, Floyd's logic, and Houdini
Nov 9 Invariant inference II: data flow analysis PSet 5 due
Nov 11 Abstract interpretation.
Nov 16 Algebraic program analysis. Kincaid, Reps, Cyphert: Algebraic program analysis PSet 6 due
Nov 18 Software model checking I. Jhala, Majumdar: Software Model Checking
Nov 23 Software model checking II.
Nov 25 Thanksgiving break
Nov 30 Temporal logic.
Dec 2 Project presentations
Dec 7 Project presentations
Dec 15 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

Conduct

For homework and assignments, discussions with others are permitted, where the goal is to aid your understanding. You may similarly make use of large language models (LLMs) like ChatGPT---for conceptual help only. 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.