Journal ArticleDOI
Template-based program verification and program synthesis
TLDR
This work shows how to reduce the template-based search problem to satisfiability solving, which permits the use of off-the-shelf solvers to efficiently explore the search space.Abstract:
Program verification is the task of automatically generating proofs for a program’s compliance with a given specification. Program synthesis is the task of automatically generating a program that meets a given specification. Both program verification and program synthesis can be viewed as search problems, for proofs and programs, respectively. For these search problems, we present approaches based on user-provided insights in the form of templates. Templates are hints about the syntactic forms of the invariants and programs, and help guide the search for solutions. We show how to reduce the template-based search problem to satisfiability solving, which permits the use of off-the-shelf solvers to efficiently explore the search space. Template-based approaches have allowed us to verify and synthesize programs outside the abilities of previous verifiers and synthesizers. Our approach can verify and synthesize difficult algorithmic textbook programs (e.g., sorting and dynamic programming-based algorithms) and difficult arithmetic programs.read more
Citations
More filters
Proceedings ArticleDOI
Synthesizing data structure transformations from input-output examples
TL;DR: A method for example-guided synthesis of functional programs over recursive data structures given a set of input-output examples that synthesizes a program in a functional language with higher-order combinators like map and fold.
Book ChapterDOI
Counterexample-Guided Quantifier Instantiation for Synthesis in SMT
TL;DR: This work introduces the first program synthesis engine implemented inside an SMT solver, and presents an approach that extracts solution functions from unsatisfiability proofs of the negated form of synthesis conjectures.
Journal ArticleDOI
Search-based program synthesis
TL;DR: A promising, useful tool for future programming development environments, and a good candidate for inclusion in the next generation of professional development environments.
Proceedings ArticleDOI
Synthesizing transformations on hierarchically structured data
TL;DR: A new approach for synthesizing transformations on tree-structured data, such as Unix directories and XML documents, is presented and it is shown that HADES can automatically synthesize a variety of interesting transformations collected from online forums.
Journal ArticleDOI
Algorithmic program synthesis: introduction
TL;DR: In this introduction to the special journal issue, the history of algorithmic program synthesis is surveyed, the field is divided into reactive synthesis, concerned with automata-theoretic techniques for controllers that handle an infinite stream of requests, and functional synthesis, which produces programs consuming finite input.
References
More filters
Book
Introduction to Algorithms
TL;DR: The updated new edition of the classic Introduction to Algorithms is intended primarily for use in undergraduate or graduate courses in algorithms or data structures and presents a rich variety of algorithms and covers them in considerable depth while making their design and analysis accessible to all levels of readers.
Proceedings ArticleDOI
Abstract interpretation: a unified lattice model for static analysis of programs by construction or approximation of fixpoints
Patrick Cousot,Radhia Cousot +1 more
TL;DR: In this paper, the abstract interpretation of programs is used to describe computations in another universe of abstract objects, so that the results of abstract execution give some information on the actual computations.
Journal ArticleDOI
Introduction to algorithms: 4. Turtle graphics
TL;DR: In this article, a language similar to logo is used to draw geometric pictures using this language and programs are developed to draw geometrical pictures using it, which is similar to the one we use in this paper.