The act of programming computing devices is a complex task. This project aims to develop new neural architectures to automatically learn from specifications such as input-output (I/O) examples. This is useful in automating the development of computer programs that map to a user’s intent—what we call “program synthesis.”
Computer scientists have been attempting to solve the problem of program synthesis to automatically create a computer program that is consistent with a given user’s intent. Program synthesis is a related problem to that of machine learning, where the specification takes the form of I/O examples (training data), and programs are restricted to certain languages. For instance, linear regression involves synthesizing programs that involve a single linear expression, neural networks involve synthesizing programs that are composed of a sequence of tensor operations, and decision trees involve synthesizing programs composed of nested if-then conditions. In each case, the type of problem being solved drives the class of operations required for solving it.
While there has been significant progress in the programming languages community in synthesizing richer, larger, and more complex programs, scalability still remains an issue. To address that challenge, we are building new neural architectures that can generate synthesizers automatically from a large amount of training data. We believe this new approach will dramatically expand the applicability and effectiveness of program synthesis and has the potential to have a massive impact on the development of complex intelligent software systems of the future.