Lectures
This page is the lecture archive and materials home for CARS. Use
Schedule for the week-by-week view of what is happening
when; use this page when you want the lecture-by-lecture record.
CARS meets every Tuesday evening (18:30-21:20) in CSE2 G10. Each
lecture has three phases: Practice (hands-on solver-aided
programming), Theory (algorithms and foundations), and Studio
(guided exercises or reading discussion). As the quarter progresses,
each lecture entry below links to its overview page and posted
materials.
The lecture material in CARS draws extensively from Emina Torlak's
CSE 507 course
design, lecture notes, and demos. Her work is the foundation this
course builds on.
Week 1 | Mar 30 – Apr 5
Engineers often need to know: does this property hold for every possible input, or does a counterexample exist? Does this function produce the same result as the reference implementation on all 32-bit inputs? Is this protocol safe against every possible interleaving? SAT and SMT solvers answer questions of exactly this form. You describe the property as a logical formula. The solver either finds an input that violates it or proves no such input exists. Tonight you see what solvers can do, learn the logic underneath them, and write your first Z3 programs.
Week 2 | Apr 6 – Apr 12
Last week you saw solvers find bugs and prove correctness. This week: how do you encode a real engineering problem? We build a package manager in three versions, each asking a different question of the solver. Then we look under the hood at how modern SAT solvers actually work, and close with the first reading discussion.
Week 3 | Apr 13 – Apr 19
Last week you saw solvers encode and optimize real engineering
problems. But everything fit into boolean variables and CNF. This
week you find out that Z3 has been doing more than that all along.
Theory solvers extend SAT with richer primitives: integers,
bitvectors, arrays, equality. Your reductions can speak the
language of your actual problem instead of decomposing everything
into booleans. We open with two concrete payoffs (shorter
encodings, better abstraction), then look inside one theory solver
to see how it decides equality without knowing what the functions
actually do.
Lecture 4: Solvers: Arithmetic, Arrays, and Bitvectors
Week 4 | Apr 20 – Apr 26
Content will be posted before class.
Lecture 5: SMT: Foundations
Week 5 | Apr 27 – May 3
Content will be posted before class.
Lecture 6: SMT: Engineering
Week 6 | May 4 – May 10
Content will be posted before class.
Lecture 7: Program Verification
Week 7 | May 11 – May 17
Content will be posted before class.
Lecture 8: Verification in Practice
Week 8 | May 18 – May 24
Content will be posted before class.
Lecture 9: Mini-Project: Milestone
Week 9 | May 25 – May 31
Content will be posted before class.
Lecture 10: Mini-Project: Final
Week 10 | Jun 1 – Jun 7
Content will be posted before class.