CS703 - Fall 2017
Program verification and synthesis
General InformationLoris D'Antoni
Office: 6355, Computer Sciences
Please include "CS703" in the subject.
Email: loris (at) cs (dot) wisc (another dot) edu
We will be meeting on MWF, 1-2.15pm, in COMP SCI 1263 Office hours: Wed 4-5pm or email me.
|Sep 13||Homework 1 has been posted.|
|Sep 23||Review assignment 1Due Sep 29th.|
|Sep 28||Homework 2 has been posted. It is due on the 12th of October.|
|Oct 16||Homework 3 and Programming assignment 1 have been posted. They are due on the 6th of October.|
|Nov 3||Programming assignment 2 has been posted. It is due on November 22nd.|
Course InfoThis course covers recent advances in program verification and synthesis, two techniques aimed at improving software quality and reliability. Broadly speaking, the goal of program verification is to automatically check whether programs contain bugs, while the goal of program synthesis is to automatically generate programs that do not contain bugs.
The course is divided into two main parts:
- We will survey some traditional program verification techniques such as model checking and program logics. You will learn to statically (at compile time) reason about properties of programs. For example, we will show how to prove that a scheduling algorithm cannot cause deadlocks.
- In the second part of the course, you will learn how to synthesize programs from higher-level specifications. For example, we will show how to automatically generate Excel macros from input-output examples only!
EvaluationPerformance will be evaluated as follows:
- 35%: Assignments -- there will be 3 or 4 problem sets throughout the term.
- 35%: Research project
- 10%: Paper reviews
- 10%: Class participation
- 10%: Project presentation
Course ProjectFor the final project, you can work on a problem of your choice with a partner or by yourself.
|Deliverable 1 - Oct 2: Email me a list of three project ideas.|
Deliverable 2 - Oct 16: Submit a 2-3 page proposal
including the following:
|Deliverable 3 - November 4: Description of progress, implementation plan with completed steps checked off, and experimentation plan. Please turn in an updated proposal (with changes marked and your new material added as "Appendix: Progress Report").|
|Deliverable 4 - November 19: Description of progress, implementation plan with completed steps checked off, and experimentation plan. Please turn in an updated proposal (with changes marked and your new material added as "Appendix: Progress Report").|
|Deliverable 5 - Week of December 7 and 14: 10-minute oral presentations (plus 5 minutes for questions/discussion) will be given during class. You will need to e-mail me an abstract (in plaintext) giving the title, project participants, and a two-paragraph to three-paragraph summary of what will be presented.|
|Deliverable 6 - December 15 (last day of classes) Final writeup: The final writeup should be modeled after a typical conference paper. There is no length requirement or limit, but I would expect it to be somewhere around 6-10 pages of ACM's double-column conference formats.|
|1||Sep 11||Course introduction |
Automata and MSO over strings
|2||Sep 13||MSO over strings||
|3||Sep 15||Finished MSO and BDDs||[Pfe]|
|4||Sep 18||Symbolic automata + Start Model checking||[Dan] Sec. 1-3 [MCa] Cha. 2-4|
|5||Sep 20||Infinite strings and Buchi automata Linear temporal logic (LTL)||[MCa] Cha. 4|
|6||Sep 22||Linear temporal logic (LTL)||[MCa] Cha. 5|
|7||Sep 25||Finish LTL, Project HOWTOs (a bit of synthesis), SMT solvers demo||
|8||Sep 27||Computation tree logic (CTL)||[MCa] Cha. 6 HW1 due|
|9||Sep 29||Finish CTL, Bisimulation||[MCa] Cha. 7
|10||Oct 2||Finished Bisimulation||[MCa] Cha. 7|
|11||Oct 4||HW1 discussion and Abstractions||[MCa] Cha. 7.4
Project D1 due
|12||Oct 6||Model checking procedural programs||[ABE], [AM09] (Optional)|
|13||Oct 9||Model checking procedural programs (finished)||[ABE], [AM09] (Optional)|
|14||Oct 11||Probabilistic systems||[MCa] Cha. 10|
|15||Oct 13||Verifying string maninpulating programs||[Vea2]|
|16||Oct 16||Learning automata with L*||[Ang] HW3 assigned P1 assigned|
|17||Oct 18||Reactive Synthesis||[Pnu]|
|18||Oct 20||Quantitative reactive synthesis||[Ehr]
|19||Oct 23||Program Sketching||[SL13]|
|20||Oct 25||Counterexample guided inductive synthesis and sketch in practice||[SGS13] Sketch|
|21||Oct 27||Structured search and version space algebra||[Gul2]|
|21||Oct 30||Stochastic search||[Dia] [Sch14]|
|22||Nov 1||Syntax-guided synthesis||[Alu2]|
|23||Nov 3||Synthesis using machine learning||[RVY] P2 assigned|
|24||Nov 6||Repairing Decision-Making Programs under Uncertainty||[DAD]|
|25||Nov 8||Synthesis using quantifier elimination||[Kun]|
|Nov 10-15-||No class|
|26||Nov 17||Program Synthesis using Abstraction Refinement||[WDS17]|
|27||Nov 20||Optimizing Synthesis with Metasketches and synthesis with quantitative objectives||[BTGC16], [Qlose]|
|Nov 22-Dec 6||No class - Project break|
|28-29-30||Dec 6-8-11||Project presentations|
|Dec 15||No class||Project D6 due|
Relevant ResourcesThere are no required textbooks for this class. The following is a list of books and articles that should be useful references for different parts of the course.
Monadic second-order logic over strings
- [Tho] Thomas, Languages, automata, and logic. 1996.
Symbolic automata, symbolic transducers, and BDDs
- [Dan] D'antoni, Veanes, The power of symbolic automata and transducers CIAA, 2013.
- [Vea2] Veanes et al., Symbolic Finite State Transducers: Algorithms and Applications POPL, 2012.
- [Pfe] Pfenning, Lecture Notes on Binary Decision Diagrams
Model checking, temporal logic, mu-calculus, and buchi automata.
- [MCa] Baier and Katoen, Principles of Model Checking. The MIT Press, 2008.
- [Bra] Bradfield and Stirling Modal Mu-Calculi
- [ABE] Alur, Bouajjani, Esparza Model checking procedural programs
- [AM09] Alur, Madhusudan Adding nesting structure to words
Learning finite automata and applications
- [Ang] Angluin, Learning Regular Sets from Queries and Counterexamples JIC, 1987.
- [Alu] Alur et al, Synthesis of Interface Specifications for Java Classes POPL, 2005. Use of L* in practice.
- [Pnu] Pnueli and Rosner, On the synthesis of a reactive module POPL, 1989. The first paper on reactive synthesis.
- [Ehr] Ehrenfeucht and Mycielski The Complexity of Mean Payoff Games JGT 1979
Survey on program synthesis
- [Bod] Bodik and Jobstmann Algorithmic program synthesis: introduction JSTT, 2013
- [SL13] Solar-lezama, Program sketching IJSTTT, 2013
- [SGS13] Singh et al, Automated Feedback Generation for Introductory Programming Assignments PLDI, 2013
Programming by example
- [Gul2] Gulwani, Automating String Processing in Spreadsheets using Input-Output Examples POPL, 2010
- [Alu2] Alur et al, Syntax-guided synthesis FMCAD, 2013
Synthesis using machine learning and crowd-sourcing:
- [RVY] Raychev, Vechev, Yahav Code Completion with Statistical Language Models PLDI, 2014
- [Sch14] Schkufza et al. Stochastic Optimization of Floating-Point Programs with Tunable Precision PLDI, 2014
- [Dia] Diaconis The Markov Chain Monte Carlo Revolution
- [Kun] Kuncak et al, Complete functional synthesis PLDI, 2010
Synthesis of probabilistic programs
- [DAD] Drews et al, Repairing Decision-Making Programs Under Uncertainty CAV, 2017
- [WDS17] Wang et al, Program Synthesis using Abstraction Refinement POPL, 2017
- [BTGC16] Bornholt et al, Optimizing Synthesis with Metasketches POPL, 2016
- [Qlose] D'Antoni et al, Qlose: Program Repair with Quantitative Objectives CAV, 2016
A survey on SMT solvers:
- [SMT] Barret et al., Satisfiability Modulo Theories Barret et al., 2008