Link Search Menu Expand Document

Project

The project’s main goal will be the development of a small program synthesizer: a tool that generates automatically a program that satisfies some user intent. Program synthesis is a very difficult problem that has been the focus of decades of research. In this project, you will focus on a simple but interesting subproblem in this area: synthesizing small program with arithmetic expressions that satisfy a logical specification. You will learn how to manipulate program representations, which is a topic not covered in almost any other course in your undergraduate education. You will also learn how to express user intent in a logical and unambiguous manner. Finally, in order to synthesize a correct program, you will need to learn how to check that a candidate program is correct. We will incrementally cover the knowledge related to some of the components for this project as the term unfolds.

The project will be due on the last day of classes (the last day that we can have a deadline according to university rules). Like the assignments, you will do this in a group of 3. If needed, an extension for the due date of the project will be granted based on a class poll.

Everything you need to know about the project is in this houndout. As announced here, we will hold info sessions for this. There will be more project-specific tutorials whenever there is an appropriate gap in the class schedule. They will all be announced ahead of the time here. You should generally use piazza (under project) for all project-related communications so that as usual everyone benefits from the common questions asked and answered.