Texts
This course has no required textbook. See the Notes instead.
1 Background

Program Proofs by K. Rustan M. Leino.
Program Proofs shows students what it means to write specifications for programs, what it means for programs to satisfy those specifications, and how to write proofs that connect specifications and programs. Writing with clarity and humor, K. Rustan M. Leino first provides an overview of the basic theory behind reasoning about programs. He then gradually builds up to complex concepts and applications, until students are facing real programs using objects, data structures, and non-trivial recursion. To emphasize the practical nature of program proofs, all material and examples use the verification-aware programming language Dafny, but no previous knowledge of Dafny is assumed.

SAT/SMT by Example by Dennis Yurichev SAT/SMT by Example is a free, open-source textbook by Dennis Yurichev that introduces the concepts of SAT (Boolean satisfiability) and SMT (Satisfiability Modulo Theories) solving through practical, hands-on examples. The book explains how SAT and SMT solvers work and how to use them in practice to model and solve computational problems.
Topics covered include:The basics of SAT (solving Boolean logic problems)
SMT (extensions of SAT with arithmetic, bit-vectors, arrays, etc.)
Modeling real-world problems (like puzzles, program verification, and constraints)
Using popular solvers like Z3, Boolector, or MiniSat
Writing formulas in SMT-LIB format
Embedding solvers in languages like Python and C
Formal Reasoning About Programs by Adam Chlipala
Formal Reasoning About Programs" introduces the concepts of formally verifying software correctness using logical reasoning and a proof assistant called Rocq.
2 References
This is the Dafny reference manual; it describes the Dafny programming language and how to use the Dafny verification system. Parts of this manual are more tutorial in nature in order to help the user understand how to do proofs with Dafny.
This page contains links to Dafny documentation, tutorials, and examples.
The Software Foundations series is a broad introduction to the mathematical underpinnings of reliable software.