Synthesizing data structure transformations from input-output examples

Abstract

We present a method for example-guided synthesis of functional programs over recursive data structures. Given a set of input-output examples, our method synthesizes a program in a functional language with higher-order combinators like map and fold. The synthesized program is guaranteed to be the simplest program in the language to fit the examples. Our approach combines three technical ideas: inductive generalization, deduction, and enumerative search. First, we generalize the input-output examples into hypotheses about the structure of the target program. For each hypothesis, we use deduction to infer new input/output examples for the missing subexpressions. This leads to a new subproblem where the goal is to synthesize expressions within each hypothesis. Since not every hypothesis can be realized into a program that fits the examples, we use a combination of best-first enumeration and deduction to search for a hypothesis that meets our needs. We have implemented our method in a tool called λ2, and we evaluate this tool on a large set of synthesis problems involving lists, trees, and nested data structures. The experiments demonstrate the scalability and broad scope of λ2. A highlight is the synthesis of a program believed to be the world's earliest functional pearl.

Document Details

Document Type
Pub Defense Publication
Publication Date
Jun 03, 2015
Source ID
10.1145/2813885.2737977

Entities

People

  • Işıl Dillig
  • John K. Feser
  • Swarat Chaudhuri

Organizations

  • Defense Advanced Research Projects Agency
  • National Science Foundation
  • Rice University
  • University of Texas at Austin

Tags

Fields of Study

  • Computer science

Readers

  • Computational Linguistics
  • Operations Research
  • Regression Analysis.

Technology Areas

  • AI & ML
  • AI & ML - Bayesian Inference
  • AI & ML - Neural Networks