# Program synthesis from polymorphic refinement types

@article{Polikarpova2015ProgramSF, title={Program synthesis from polymorphic refinement types}, author={Nadia Polikarpova and Armando Solar-Lezama}, journal={Proceedings of the 37th ACM SIGPLAN Conference on Programming Language Design and Implementation}, year={2015} }

We present a method for synthesizing recursive functions that provably satisfy a given specification in the form of a polymorphic refinement type. We observe that such specifications are particularly suitable for program synthesis for two reasons. First, they offer a unique combination of expressive power and decidability, which enables automatic verification—and hence synthesis—of nontrivial programs. Second, a type-based specification for a program can often be effectively decomposed into… Expand

#### Figures, Tables, and Topics from this paper

#### 154 Citations

Program synthesis by type-guided abstraction refinement

- Computer Science
- Proc. ACM Program. Lang.
- 2020

This work introduces type-guided abstraction refinement (TYGAR), a new approach for scalable type-directed synthesis over polymorphic datatypes and components, and implemented TYGAR in H+, a tool that takes as input a set of Haskell libraries and a query type, and returns a Haskell term that uses functions from the provided libraries to implement the query type. Expand

Synthesis of Recursive ADT Transformations from Reusable Templates

- Computer Science
- TACAS
- 2017

The approach relies on polymorphic synthesis constructs: a small but powerful extension to the language of syntactic templates, which makes it possible to define a program space in a concise and highly reusable manner, while at the same time retains the scalability benefits of conventional templates. Expand

Programming by predicates: a formal model for interactive synthesis

- Computer Science
- Acta Informatica
- 2019

This work presents a formal model for interactive synthesis, parameterized by an abstract domain of predicates on programs, which motivates the need for a general feedback model via predicates by showing that examples are an insufficient tool to differentiate between programs, even when used as a full specification. Expand

Resource-guided program synthesis

- Computer Science
- PLDI
- 2019

The experiments show that ReSyn synthesizes programs that are asymptotically more efficient than those generated by a resource-agnostic synthesizer, and is faster than a naive combination of synthesis and resource analysis. Expand

Scaling Functional Synthesis and Repair

- Computer Science
- 2019

A novel fault localization technique detects erroneous snippets with concrete execution and eliminates false positives by analyzing dependencies between execution traces, and a modified version of the synthesis algorithm generates fixes for it by introducing modifications to the original erroneous code. Expand

Program synthesis using abstraction refinement

- Computer Science
- Proc. ACM Program. Lang.
- 2018

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. Expand

Scalable Synthesis with Symbolic Syntax Graphs

- 2018

General-purpose program synthesizers face a tradeoff between having a rich vocabulary for output programs and the time taken to discover a solution. One performance bottleneck is the construction of… Expand

Program Synthesis with Constraint Solving for the OutSystems Language

- 2019

Program synthesis is the problem of automatically generating concrete program implementations from high-level specifications that define user intent. OutSystems is a low-code platform for rapid… Expand

A promising , useful tool for future programming development environments

- 2018

Writing programs that are both correct and efficient is challenging. A potential solution lies in program synthesis aimed at automatic derivation of an executable implementation (the “how”) from a… Expand

A family of multi-concept program synthesisers in Alloy⁎

- Computer Science
- Sci. Comput. Program.
- 2021

This paper presents a characterisation of program synthesis as model finding, using Alloy⁎, a general framework for rapid development of a program synthesiser accommodating denotational semantics based synthesis, simultaneous deductive and inductive synthesis, software reuse, syntactic ingredients, and a new one: a soft sketch. Expand

#### References

SHOWING 1-10 OF 60 REFERENCES

Complete functional synthesis

- Computer Science
- PLDI '10
- 2010

This work proposes to generalize decision procedures into predictable and complete synthesis procedures, which are guaranteed to find code that satisfies the specification if such code exists and under which synthesis will statically decide whether the solution is guaranteed to exist, and whether it is unique. Expand

Syntax-guided synthesis

- Computer Science, Engineering
- 2013 Formal Methods in Computer-Aided Design
- 2013

This work describes three different instantiations of the counter-example-guided-inductive-synthesis (CEGIS) strategy for solving the synthesis problem, reports on prototype implementations, and presents experimental results on an initial set of benchmarks. Expand

Maximal specification synthesis

- Computer Science
- POPL 2016
- 2016

A novel approach is presented that utilizes a counterexample-guided inductive synthesis loop and reduces the maximal specification inference problem to multi-abduction, and the novel notion of multi- abduction as a generalization of classical logical abduction is formulated. Expand

Type Assisted Synthesis of Recursive Transformers on Algebraic Data Types

- Computer Science
- ArXiv
- 2015

It is shown how synthesis can help implement interesting functions involving pattern matching and algebraic data types by synthesizing desugaring functions for lambda calculus that force the synthesizer to discover Church encodings for pairs and boolean operations. Expand

Recursive Program Synthesis

- Computer Science
- CAV
- 2013

This paper presents Escher, a generic and efficient algorithm that interacts with the user via input-output examples, and synthesizes recursive programs implementing intended behaviour, and outperforms a state-of-the-art SAT-based synthesis tool from the literature. Expand

Synthesis Through Unification

- Computer Science
- CAV
- 2015

This work presents the synthesis through unification (STUN) approach, which is an extension of the counter-example guided inductive synthesis approach, and picks a program from the program space that is correct for the new set S. Expand

Combinatorial sketching for finite programs

- Computer Science
- ASPLOS XII
- 2006

SKETCH is a language for finite programs with linguistic support for sketching and its combinatorial synthesizer is complete for the class of finite programs, guaranteed to complete any sketch in theory, and in practice has scaled to realistic programming problems. Expand

Satisfiability Modulo Recursive Programs

- Computer Science
- SAS
- 2011

The system, Leon, verified detailed correctness properties for functional data structure implementations, as well as syntax tree manipulations, and was found to be fast for both finding counterexamples and finding correctness proofs, and to scale to larger programs than alternative techniques. Expand

Example-directed synthesis: a type-theoretic interpretation

- Computer Science
- POPL 2016
- 2016

It is demonstrated that examples can, in general, be interpreted as refinement types, and formalizing synthesis as proof search in a sequent calculus with intersection and union refinements that prove to be sound with respect to a conventional type system is put into practice. Expand

Type-and-example-directed program synthesis

- Computer Science
- PLDI 2015
- 2015

This paper presents an algorithm for synthesizing recursive functions that process algebraic datatypes. It is founded on proof-theoretic techniques that exploit both type information and input–output… Expand