Learning Abstractions for Program Synthesis

  title={Learning Abstractions for Program Synthesis},
  author={Xinyu Wang and Greg Anderson and Işil Dillig and Kenneth L. McMillan},
Many example-guided program synthesis techniques use abstractions to prune the search space. While abstraction-based synthesis has proven to be very powerful, a domain expert needs to provide a suitable abstract domain, together with the abstract transformers of each DSL construct. However, coming up with useful abstractions can be non-trivial, as it requires both domain expertise and knowledge about the synthesizer. In this paper, we propose a new technique for learning abstractions that are… 

Gauss: program synthesis by reasoning over graphs

Gauss is presented, a synthesis algorithm for table transformations that accepts partial input-output examples, along with user intent graphs, and is able to reduce the search space by 56×, 73× and 664× on average, resulting in 7×, 26× and 7× speedups in synthesis times on average.

Semantics-guided synthesis

This paper develops a new framework for program synthesis that allows a user to provide both the syntax and the semantics for the constructs in the language, called semantics-guided synthesis (SemGuS), and develops an algorithm for solving SemGuS problems that is capable of both synthesizing programs and proving unrealizability.

Synthesizing abstract transformers

The method presented automates the construction of static analyzers in a fashion similar to the way yacc automatesThe construction of parsers, and results are obtained that the abstract transformer obtained is a most-precise L-transformer for op over A; that is, there is no other L- Transformer forOp over A that is strictly more precise.

Cognification of Program Synthesis - A Systematic Feature-Oriented Analysis and Future Direction

A systematic domain analysis is conducted to explore the extent to the automatic generation of code can be enabled via the next generation of cognified MDE frameworks that support recent DL and NLP techniques.

Programming “ Programming by Example ” by Example a thesis presented by Garrett

This work presents a new interaction model for developing inductive program synthesizers by example, and demonstrates the viability of this approach with VERSE (VERified Synthesis Engine), a Coq implementation of theProgramming “Programming byExample” byExample (PbE2) interactionmodel.

Guiding dynamic programing via structural probability for accelerating programming by example

A novel PBE framework called MaxFlash, which uses a model based on structural probability, named topdown prediction models, to guide a search based on dynamic programming, such that the search will focus on subproblems that form probable programs, and avoid improbable programs.



Program synthesis using abstraction refinement

A refinement-based synthesis algorithm that uses abstract finite tree automata (AFTA), which uses a coarse initial program abstraction to construct an initial AFTA, which is iteratively refined by constructing a proof of incorrectness of any spurious program.

Synthesizing data structure transformations from input-output examples

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

Program synthesis from polymorphic refinement types

The tool was able to synthesize more complex programs than those reported in prior work, as well as most of the benchmarks tackled by existing synthesizers, often starting from a more concise and intuitive user input.

Component-based synthesis of table consolidation and transformation tasks from examples

This paper presents a novel component-based synthesis algorithm that marries the power of type-directed search with lightweight SMT-based deduction and partial evaluation and applies the proposed synthesis methodology for automating a large class of data preparation tasks that commonly arise in data science.

Synthesizing Imperative Programs from Examples Guided by Static Analysis

A novel algorithm for efficiently synthesizing imperative programs from examples that performs static analysis alongside the enumerative search in order to “statically” identify and safely prune out partial programs that eventually fail to be a solution.

Component-based synthesis for complex APIs

This paper presents a novel type-directed algorithm for component-based synthesis using a compact Petri-net representation to model relationships between methods in an API, and implements it in a tool called SyPet.

Synthesis of data completion scripts using finite tree automata

This paper presents a synthesis technique for automating data completion tasks using programming-by-example (PBE) and a very lightweight sketching approach and proposes a domain-specific language (DSL) that combines spatial and relational reasoning over tabular data and a novel synthesis algorithm that can generate DSL programs that are consistent with the input-output examples.

Complete completion using types and weights

A technique that synthesizes and suggests valid expressions of a given type at a given program point and introduces a succinct representation for type judgements that merges types into equivalence classes to reduce the search space, then reconstructs any desired number of solutions on demand.

BlinkFill: Semi-supervised Programming By Example for Syntactic String Transformations

A data structure InputDataGraph is developed to succinctly represent a large set of logical patterns that are shared across the input data, and used to efficiently learn substring expressions in a new PBE system BlinkFill.

Look for the Proof to Find the Program: Decorated-Component-Based Program Synthesis

We introduce a technique for component-based program synthesis that relies on searching for a target program and its proof of correctness simultaneously using a purely constraint-based approach,