CS 294-157:

Deep Learning and Program Synthesis

In the recent years, we have seen the emergence of a new research area called program synthesis. The goal of program synthesis is to enable computers to write programs from incomplete programs (a.k.a sketch), input/output examples, units tests, high-level specifications, and demonstrations. Program synthesis harnesses recent advances in constraint-solving, verification, program analysis, type-systems, symbolic execution, and machine learning to synthesize non-trivial programs. In the course, we will read papers on the foundations of program synthesis, as well as recent applications of deep learning and "Big Code" to program synthesis.

Time and Location:

  • 310 Soda Hall.
  • Fridays 3:30 pm - 5:30 pm for paper presentation and discussion.
  • Fridays 5:30 pm - 6:30 pm for project supervision.


  • Koushik Sen
  • Student volunteers: Richard Liaw and Rohan Bavishi

Course topics

  • Enumerative synthesis
  • Counter-example guided synthesis
  • Type-based synthesis
  • Syntax-directed synthesis
  • Super-optimization
  • Machine learning and deep learning based synthesis

Piazza Link

Project Milestones

We are expecting that you will do a project in this course to get hands on experience if you have enrolled for 3 units. The project is expected to be done in teams of 2. It is fine if the project mostly gets negative results. You can also enroll in the course for 2 units to skip the project.

  1. 9/7/2018: Pick a problem domain for program synthesis and show some examples of the inputs that programmers would provide and the kind of programs you would like to synthesize based on such inputs. Inputs could be specifications, I/O examples, natural language descriptions, demonstrations, unit tests. Post it on Piazza by 9/7/2018, 3:00 pm under the #projects folder.
  2. 9/14/2018: Collect a set of benchmarks containing pairs of the form (user input, desired program). We should have at least 50 such benchmarks. Create a private github repo and add the benchmarks to the repo. Share the repo on Piazza by 9/14/2018, 3:00 pm by responding to your post above.
  3. 9/21/2018: Outline a plan for solving the synthesis problem and post the writeup on Piazza by 9/21/2018, 3:00 pm by responding to your post above.
  4. Weekly updates from 9/28/2018 onwards. Update github repo and the post on Piazza.


Tentative Schedule and List of DL+Synthesis Papers for Discussion

Reading List

Program Synthesis Readings