2019
DOI: 10.1145/3371080
|View full text |Cite
|
Sign up to set email alerts
|

Program synthesis by type-guided abstraction refinement

Abstract: We consider the problem of type-directed component-based synthesis where, given a set of (typed) components and a query type, the goal is to synthesize a term that inhabits the query. Classical approaches based on proof search in intuitionistic logics do not scale up to the standard libraries of modern languages, which span hundreds or thousands of components. Recent graph reachability based methods proposed for Java do scale, but only apply to monomorphic data and components: polymorphic data and components i… Show more

Help me understand this report
View preprint versions

Search citation statements

Order By: Relevance

Paper Sections

Select...
2
1
1
1

Citation Types

0
20
0

Year Published

2020
2020
2024
2024

Publication Types

Select...
3
3
2

Relationship

0
8

Authors

Journals

citations
Cited by 35 publications
(20 citation statements)
references
References 35 publications
0
20
0
Order By: Relevance
“…To scale to much larger programs with complex control flow, static reasoning (interleaved with concrete evaluation) could be used to prune unsatisfiable or heuristically łdifficultž sets of example constraints. Orthogonal techniques for scaling to large contexts with additional components [Feng et al 2017b;Guo et al 2020;Gvero et al 2013] might also be incorporated into our approach in future work.…”
Section: Limitations and Discussionmentioning
confidence: 99%
“…To scale to much larger programs with complex control flow, static reasoning (interleaved with concrete evaluation) could be used to prune unsatisfiable or heuristically łdifficultž sets of example constraints. Orthogonal techniques for scaling to large contexts with additional components [Feng et al 2017b;Guo et al 2020;Gvero et al 2013] might also be incorporated into our approach in future work.…”
Section: Limitations and Discussionmentioning
confidence: 99%
“…Prior works dealt with polymorphism by either exhaustively instantiating type variables beforehand (purely eager) [14] or keeping all APIs polymorphic and refining them incrementally (purely lazy) [15]. Our observation is that neither purely lazy nor purely eager approaches are sufficient for Rust.…”
Section: Hybrid Api Refinementmentioning
confidence: 93%
“…Leveraging advances in constraint-solving, componentbased program synthesis techniques [19] have been applied to many languages. Most closely related to ours, are SyPet [14] (Java) and H+ [15] (Haskell), which use constraintsolving-based technique to generate loop-free straight-line code. Both SyPet and H+ employ a graph-based encoding, which is unwieldy for encoding the lifetime and ownership of variables; and therefore SyRust does not use.…”
Section: Related Workmentioning
confidence: 99%
See 1 more Smart Citation
“…Polikarpova and Sergey [2019] use separation logic proof steps to limit the space to programs that follow the proof. Feng et al [2017a]; Guo et al [2019] use a Petri-net of type signatures to limit the space to reachable paths in the net.…”
Section: Related Workmentioning
confidence: 99%