CS590: Software Synthesis

Spring 2017

Imagine a world in which you could simply tell your computer what problem a program should solve and have it write the program for you. Freed from the humdrum tasks of coding, you would be able focus on finding the right problems to solve (while also having more time to drink coffee). This is the dream of program synthesis: to automatically build implementations from high-level description of a program.

This seminar will begin with a broad overview of the field, including:

  1. how to learn a program from examples (inductive synthesis)
  2. how users can guide the search for an implementation (deductive synthesis)
  3. how to leverage cutting-edge theorem provers to find programs automatically

The second half of the course will focus on applications of synthesis to a variety of domains, including security, education, performance, and human computer interaction, with the specific topics tailored to participants' interests. Each unit will review the state of the art in the field with readings from the latest publications.

CS565: Programming Languages

Fall 2016

This course will examine the design and implementation of programming languages from a foundational perspective. Our goal will be to develop tools that will enable us to both design and specify new language features, to precisely understand the rationale for existing features in modern languages, and to understand how design decisions can impact implementations. The course will be divided into roughly three parts:

  1. principles (e.g., semantics, type systems, specifications)
  2. proof techniques and formal reasoning
  3. automated theorem proving using the Coq proof assistant

Our discussion of principles will be crafted in the context of definitions and theorems that capture salient properties of modern languages. The validation of these theorems will be undertaken using Coq, a powerful theorem prover and mechanized proof assistant.

CS105: Computer Programming: PHP/SQL (UT Austin)

Fall 2013 Spring 2013

This course covers the basics of designing webpages using HTML, Javascript, and PHP, and connecting them to SQL database backends to allow for dynamic content. Students will learn the basics of each of these languages individually (no previous knowledge required), and learn how to combine them to make interactive web pages. Topics include CSS, the domain object model, HTML forms, sessions, AJAX, jQuery, and the Model-View-Controller pattern.