Graph-Based Algorithms for Boolean Function Manipulation
IEEE Transactions on Computers
Theory of linear and integer programming
Theory of linear and integer programming
On the synthesis of a reactive module
POPL '89 Proceedings of the 16th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
A practical algorithm for exact array dependence analysis
Communications of the ACM
Partial evaluation and automatic program generation
Partial evaluation and automatic program generation
POPL '93 Proceedings of the 20th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
SIAM Journal on Computing
Complexity and uniformity of elimination in Presburger arithmetic
ISSAC '97 Proceedings of the 1997 international symposium on Symbolic and algebraic computation
Programming by Refinement, as Exemplified by the SETL Representation Sublanguage
ACM Transactions on Programming Languages and Systems (TOPLAS)
A Deductive Approach to Program Synthesis
ACM Transactions on Programming Languages and Systems (TOPLAS)
Some Observations Concerning Formal Differentiation of Set Theoretic Expressions
ACM Transactions on Programming Languages and Systems (TOPLAS)
Toward automatic program synthesis
Communications of the ACM
Extended static checking for Java
PLDI '02 Proceedings of the ACM SIGPLAN 2002 Conference on Programming language design and implementation
Reasoning about recursively defined data structures
POPL '78 Proceedings of the 5th ACM SIGACT-SIGPLAN symposium on Principles of programming languages
Dependence Analysis for Supercomputing
Dependence Analysis for Supercomputing
A Discipline of Programming
Introduction to Algorithms
Symbolic Controller Synthesis for Discrete and Timed Systems
Hybrid Systems II
Building Circuits from Relations
CAV '00 Proceedings of the 12th International Conference on Computer Aided Verification
A New Algorithm and Refined Bounds for Extended Gcd Computation
ANTS-II Proceedings of the Second International Symposium on Algorithmic Number Theory
Journal of Automated Reasoning
An effective decision procedure for linear arithmetic over the integers and reals
ACM Transactions on Computational Logic (TOCL)
Combinatorial sketching for finite programs
Proceedings of the 12th international conference on Architectural support for programming languages and operating systems
Deciding Boolean Algebra with Presburger Arithmetic
Journal of Automated Reasoning
Optimizations for LTL Synthesis
FMCAD '06 Proceedings of the Formal Methods in Computer Aided Design
Proceedings of the 2007 ACM SIGPLAN conference on Programming language design and implementation
CGCExplorer: a semi-automated search procedure for provably correct concurrent collectors
Proceedings of the 2007 ACM SIGPLAN conference on Programming language design and implementation
An Abstract Decision Procedure for Satisfiability in the Theory of Recursive Data Types
Electronic Notes in Theoretical Computer Science (ENTCS)
Sketching concurrent data structures
Proceedings of the 2008 ACM SIGPLAN conference on Programming language design and implementation
Full functional verification of linked data structures
Proceedings of the 2008 ACM SIGPLAN conference on Programming language design and implementation
Programming in Scala: A Comprehensive Step-by-step Guide
Programming in Scala: A Comprehensive Step-by-step Guide
Decision procedures for algebraic data types with abstractions
Proceedings of the 37th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
From program verification to program synthesis
Proceedings of the 37th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Anzu: a tool for property synthesis
CAV'07 Proceedings of the 19th international conference on Computer aided verification
Decision procedures for multisets with cardinality constraints
VMCAI'08 Proceedings of the 9th international conference on Verification, model checking, and abstract interpretation
TACAS'08/ETAPS'08 Proceedings of the Theory and practice of software, 14th international conference on Tools and algorithms for the construction and analysis of systems
Demand-driven compositional symbolic execution
TACAS'08/ETAPS'08 Proceedings of the Theory and practice of software, 14th international conference on Tools and algorithms for the construction and analysis of systems
Combining theories with shared set operations
FroCoS'09 Proceedings of the 7th international conference on Frontiers of combining systems
Building a calculus of data structures
VMCAI'10 Proceedings of the 11th international conference on Verification, Model Checking, and Abstract Interpretation
Collections, cardinalities, and relations
VMCAI'10 Proceedings of the 11th international conference on Verification, Model Checking, and Abstract Interpretation
Synthesis of reactive(1) designs
VMCAI'06 Proceedings of the 7th international conference on Verification, Model Checking, and Abstract Interpretation
Data structure specifications via local equality axioms
CAV'05 Proceedings of the 17th international conference on Computer Aided Verification
Matching objects with patterns
ECOOP'07 Proceedings of the 21st European conference on Object-Oriented Programming
Dimensions in program synthesis
Proceedings of the 12th international ACM SIGPLAN symposium on Principles and practice of declarative programming
Ordered sets in the calculus of data structures
CSL'10/EACSL'10 Proceedings of the 24th international conference/19th annual conference on Computer science logic
RV'10 Proceedings of the First international conference on Runtime verification
Synthesizing geometry constructions
Proceedings of the 32nd ACM SIGPLAN conference on Programming language design and implementation
Path-based inductive synthesis for program inversion
Proceedings of the 32nd ACM SIGPLAN conference on Programming language design and implementation
Synthesis for regular specifications over unbounded domains
Proceedings of the 2010 Conference on Formal Methods in Computer-Aided Design
From boolean to quantitative synthesis
EMSOFT '11 Proceedings of the ninth ACM international conference on Embedded software
Communications of the ACM
A language for automatically enforcing privacy policies
POPL '12 Proceedings of the 39th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
POPL '12 Proceedings of the 39th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Comfusy: a tool for complete functional synthesis
CAV'10 Proceedings of the 22nd international conference on Computer Aided Verification
Synthesis for unbounded bit-vector arithmetic
IJCAR'12 Proceedings of the 6th international joint conference on Automated Reasoning
Program extrapolation with jennisys
Proceedings of the ACM international conference on Object oriented programming systems languages and applications
Generalized reactivity(1) synthesis without a monolithic strategy
HVC'11 Proceedings of the 7th international Haifa Verification conference on Hardware and Software: verification and testing
Automated feedback generation for introductory programming assignments
Proceedings of the 34th ACM SIGPLAN conference on Programming language design and implementation
Synthesis modulo recursive functions
Proceedings of the 2013 ACM SIGPLAN international conference on Object oriented programming systems languages & applications
Model-based, event-driven programming paradigm for interactive web applications
Proceedings of the 2013 ACM international symposium on New ideas, new paradigms, and reflections on programming & software
On the simplicity of synthesizing linked data structure operations
Proceedings of the 12th international conference on Generative programming: concepts & experiences
A constraint-based approach to solving games on infinite graphs
Proceedings of the 41st ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages
Hi-index | 0.02 |
Synthesis of program fragments from specifications can make programs easier to write and easier to reason about. To integrate synthesis into programming languages, synthesis algorithms should behave in a predictable way - they should succeed for a well-defined class of specifications. They should also support unbounded data types such as numbers and data structures. We propose to generalize decision procedures into predictable and complete synthesis procedures. Such procedures are guaranteed to find code that satisfies the specification if such code exists. Moreover, we identify conditions under which synthesis will statically decide whether the solution is guaranteed to exist, and whether it is unique. We demonstrate our approach by starting from decision procedures for linear arithmetic and data structures and transforming them into synthesis procedures. We establish results on the size and the efficiency of the synthesized code. We show that such procedures are useful as a language extension with implicit value definitions, and we show how to extend a compiler to support such definitions. Our constructs provide the benefits of synthesis to programmers, without requiring them to learn new concepts or give up a deterministic execution model.