CS 395T: Program Synthesis: Spring 2020

Instructor: Swarat Chaudhuri (swarat@cs.utexas.edu)

Coordinates

Lectures

The class meets at GDC 1.406, on Tuesdays and Thursdays, 3:30-5:00 pm.

Office hours

2:30 pm-3:30 pm on Tuesdays, or by appointment.

Course description

Program synthesis — the problem of automatically discovering a program that fits a given specification — is a classic problem in computer science. In the traditional formulation of the problem, the specification is a formal constraint, and the synthesizer's objective is to search for a program that satisfies this constraint. More recent research has extended this problem statement, requiring the synthesizer to optimize a quantitative objective function over programs or generalize to unseen specifications. This line of work is closely connected to machine learning. Indeed, recent work has shown that it is possible and profitable to formulate the problem of safe and reliable machine learning as program synthesis.

Program synthesis is an AI-hard problem, but there has been significant progress on the problem in the recent past. Contemporary algorithms for program synthesis use symbolic techniques for pruning the search space of programs and discovering program parameters that satisfy a requirement, as well as neural techniques for interpreting ambiguous specifications and learning to search for programs. Recent work on program synthesis has had applications in a wide range of areas, including the engineering of systems and applications software, automation of end user tasks, robotics and control, systems biology, and computer science education.

This course will offer a broad study of the theory and practice of program synthesis. The course is divided into five modules:

Our discussion of each module will cover theory, implementation issues, and practical applications. As we go through these topics, we will introduce and utilize concepts from logic and automata theory; planning and automated reasoning; programming languages; and optimization and machine learning. A significant part of the credit will come from a course project. The only necessary prerequisites are undergrad-level expertise in algorithms and discrete mathematics and the ability to program.


Evaluation

The credit for the course is distributed as follows:

Sequence of Topics