Program Synthesis from Polymorphic Refinement Types
Nadia Polikarpova, Ivan Kuraj, Armando Solar-Lezama

TL;DR
This paper introduces a novel method for synthesizing recursive functions that satisfy specifications expressed as polymorphic refinement types, enabling automatic verification and decomposition for more efficient program synthesis.
Contribution
The paper presents a new algorithm for refinement type checking supporting specification decomposition, improving scalability and usability in program synthesis.
Findings
Successfully synthesized complex programs like sorting algorithms and balanced tree operations.
Outperformed existing synthesizers in scalability and usability.
Synthesized programs from more concise, intuitive specifications.
Abstract
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 independent specifications for its components, causing the synthesizer to consider fewer component combinations and leading to a combinatorial reduction in the size of the search space. At the core of our synthesis procedure is a new algorithm for refinement type checking, which supports specification decomposition. We have evaluated our prototype implementation on a large set of synthesis…
Peer Reviews
No public reviews on file for this paper yet. If you reviewed it on a platform where reviews are public (OpenReview, ICLR, NeurIPS, ICML), you can paste yours below so the community can read it here.
Videos
No videos yet. Explain this paper in a talk, walkthrough, or lecture? Add one.
Taxonomy
TopicsSoftware Engineering Research · Software Testing and Debugging Techniques · Logic, programming, and type systems
