Schedule
Paper links require a login you can find on Canvas.
Each lecture, we'll discuss a research paper in systems verification or synthesis. A few lectures will instead be introductions to a verification or synthesis tool that will be useful in understanding the papers we're reading.
For each paper, a reading response is due on Canvas at 11pm the evening before lecture. This response should be one paragraph describing what you liked and didn't like about the paper, and a list of questions for the in-class discussion.
January 20 | Course logistics; introduction |
January 25 | Compilers: Reflections on trusting trust, Ken Thompson, in Communications of the ACM, August 1984 |
January 27 | Coq introduction (James) |
February 1 | CompCert (1): Formal verification of a realistic compiler, Xavier Leroy, in Communications of the ACM, July 2009 |
February 3 | CompCert (2): Exercise: extending the CompCert compiler |
February 8 | Compiler verification (1): Provably correct peephole optimizations with Alive, Nuno P. Lopes, et al, PLDI 2015 |
February 10 | Compiler verification (2): Towards a verified range analysis for JavaScript JITs, Fraser Brown, et al, PLDI 2020 |
No class (winter storm) | |
No class (winter storm) | |
No class (winter storm) | |
February 24 | Rosette introduction (James) |
March 1 | Compiler verification (3): Specification and verification in the field: Applying formal methods to BPF just-in-time compilers in the Linux kernel, Luke Nelson, et al, OSDI 2020 |
March 3 | Program synthesis: Combinatorial sketching for finite programs, Armando Solar-Lezama, et al, ASPLOS 2006 |
March 8 | Synthesis-aided compilation (1): Chlorophyll: Synthesis-Aided Compiler for Low-Power Spatial Architectures, Phitchaya Mangpo Phothilimthana, et al, PLDI 2014 |
March 10 | Synthesis-aided compilation (2): Denali: A Goal-directed Superoptimizer, Rajeev Joshi, et al, PLDI 2002 |
No class (spring break) | |
No class (spring break) | |
March 22 | Synthesis-aided compilation (3): Stochastic Superoptimization, Eric Schkufza, et al, ASPLOS 2013 |
March 24 | Trusting compiled code: Safe Kernel Extensions Without Run-Time Checking, George C. Necula and Peter Lee, OSDI 1996 |
March 29 | Kernel verification (1): seL4: Formal Verification of an OS Kernel, Gerwin Klein, et al, SOSP 2009 |
March 31 | Kernel verification (2): Safe to the Last Instruction: Automated Verification of a Type-Safe Operating System, Jean Yang, et al, PLDI 2010 |
April 5 | Kernel synthesis: The Synthesis Kernel, Calton Pu, et al, in Computing Systems, Winter 1988 |
April 7 | Dafny introduction (James) |
April 12 | Full-stack verification: Ironclad Apps: End-to-End Security via Automated Full-System Verification, Chris Hawblitzel, et al, OSDI 2014 |
April 14 | Distributed systems (1): IronFleet: Proving Practical Distributed Systems Correct, Chris Hawblitzel, et al, SOSP 2015 |
April 19 | Distributed systems (2): Verdi: A Framework for Implementing and Formally Verifying Distributed Systems, James R. Wilcox, et al, PLDI 2015 |
April 21 | Concurrency: Finding and Reproducing Heisenbugs in Concurrent Programs, Madanlal Musuvathi, et al, OSDI 2008 |
April 26 | File systems (1): EXPLODE: a Lightweight, General System for Finding Serious Storage System Errors, Junfeng Yang, et al, OSDI 2006 |
April 28 | File systems (2): Using Crash Hoare Logic for Certifying the FSCQ File System, Haogang Chen, et al, SOSP 2015 |
May 3 | Reflections (1): How Amazon Web Services Uses Formal Methods, Chris Newcombe, et al, in Communications of the ACM, April 2015 |
May 5 | Reflections (2): Social Processes and Proofs of Programs and Theorems, Richard A. De Millo, et al, in Communications of the ACM, May 1979 |