Algebra of programming
Make it practical: a generic linear-time algorithm for solving maximum-weightsum problems
ICFP '00 Proceedings of the fifth ACM SIGPLAN international conference on Functional programming
Introduction to Algorithms: A Creative Approach
Introduction to Algorithms: A Creative Approach
Introduction to Algorithms
Symbolic Finite Differencing - Part I
ESOP '90 Proceedings of the 3rd European Symposium on Programming
State abstraction for programmable reinforcement learning agents
Eighteenth national conference on Artificial intelligence
Efficient dynamic programming using quadrangle inequalities
STOC '80 Proceedings of the twelfth annual ACM symposium on Theory of computing
Programming by Demonstration Using Version Space Algebra
Machine Learning
Combinatorial sketching for finite programs
Proceedings of the 12th international conference on Architectural support for programming languages and operating systems
Proceedings of the 2007 ACM SIGPLAN conference on Programming language design and implementation
Generating effective symmetry-breaking predicates for search problems
Discrete Applied Mathematics
Sketching concurrent data structures
Proceedings of the 2008 ACM SIGPLAN conference on Programming language design and implementation
Program analysis as constraint solving
Proceedings of the 2008 ACM SIGPLAN conference on Programming language design and implementation
Constraint-Based Invariant Inference over Predicate Abstraction
VMCAI '09 Proceedings of the 10th International Conference on Verification, Model Checking, and Abstract Interpretation
Program verification using templates over predicate abstraction
Proceedings of the 2009 ACM SIGPLAN conference on Programming language design and implementation
VS3: SMT Solvers for Program Verification
CAV '09 Proceedings of the 21st International Conference on Computer Aided Verification
Synthesis of fast programs for maximum segment sum problems
GPCE '09 Proceedings of the eighth international conference on Generative programming and component engineering
Proceedings of the 37th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
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
Programming with angelic nondeterminism
Proceedings of the 37th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
A simple inductive synthesis methodology and its applications
Proceedings of the ACM international conference on Object oriented programming systems languages and applications
A class of Greedy algorithms and its relation to greedoids
ICTAC'10 Proceedings of the 7th International colloquium conference on Theoretical aspects of computing
Elixir: a system for synthesizing concurrent graph programs
Proceedings of the ACM international conference on Object oriented programming systems languages and applications
Semi-automatic controller design of Java-like models
Proceedings of the 15th Workshop on Formal Techniques for Java-like Programs
Hi-index | 0.00 |
To solve a problem with a dynamic programming algorithm, one must reformulate the problem such that its solution can be formed from solutions to overlapping subproblems. Because overlapping subproblems may not be apparent in the specification, it is desirable to obtain the algorithm directly from the specification. We describe a semi-automatic synthesizer of linear-time dynamic programming algorithms. The programmer supplies a declarative specification of the problem and the operators that might appear in the solution. The synthesizer obtains the algorithm by searching a space of candidate algorithms; internally, the search is implemented with constraint solving. The space of candidate algorithms is defined with a program template reusable across all linear-time dynamic programming algorithms, which we characterize as first-order recurrences. This paper focuses on how to write the template so that the constraint solving process scales to real-world linear-time dynamic programming algorithms. We show how to reduce the space with (i)~symmetry reduction and (ii)~domain knowledge of dynamic programming algorithms. We have synthesized algorithms for variants of maximal substring matching, an assembly-line optimization, and the extended Euclid algorithm. We have also synthesized a problem outside the class of first-order recurrences, by composing three instances of the algorithm template.