A zero-one law for logic with a fixed-point operator
Information and Control
POPL '87 Proceedings of the 14th ACM SIGACT-SIGPLAN symposium on Principles of programming languages
On the synthesis of a reactive module
POPL '89 Proceedings of the 16th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Warren's abstract machine: a tutorial reconstruction
Warren's abstract machine: a tutorial reconstruction
Programming from specifications (2nd ed.)
Programming from specifications (2nd ed.)
Structuring Z specifications with views
ACM Transactions on Software Engineering and Methodology (TOSEM)
GRASP—a new search algorithm for satisfiability
Proceedings of the 1996 IEEE/ACM international conference on Computer-aided design
Alma-O: an imperative language that supports declarative programming
ACM Transactions on Programming Languages and Systems (TOPLAS)
Fast Decision Procedures Based on Congruence Closure
Journal of the ACM (JACM)
Logic programming in Oz with Mozart
Proceedings of the 1999 international conference on Logic programming
QuickCheck: a lightweight tool for random testing of Haskell programs
ICFP '00 Proceedings of the fifth ACM SIGPLAN international conference on Functional programming
A Deductive Approach to Program Synthesis
ACM Transactions on Programming Languages and Systems (TOPLAS)
Guarded commands, nondeterminacy and formal derivation of programs
Communications of the ACM
Alloy: a lightweight object modelling notation
ACM Transactions on Software Engineering and Methodology (TOSEM)
Korat: automated testing based on Java predicates
ISSTA '02 Proceedings of the 2002 ACM SIGSOFT international symposium on Software testing and analysis
Constraint-based mode analysis of mercury
Proceedings of the 4th ACM SIGPLAN international conference on Principles and practice of declarative programming
Efficient conflict driven learning in a boolean satisfiability solver
Proceedings of the 2001 IEEE/ACM international conference on Computer-aided design
Proceedings of the Third International Conference on Algebraic and Logic Programming
A program verifier
Automatic detection and repair of errors in data structures
OOPSLA '03 Proceedings of the 18th annual ACM SIGPLAN conference on Object-oriented programing, systems, languages, and applications
Simplify: a theorem prover for program checking
Journal of the ACM (JACM)
Type-oriented construction of web user interfaces
Proceedings of the 8th ACM SIGPLAN international conference on Principles and practice of declarative programming
Combinatorial sketching for finite programs
Proceedings of the 12th international conference on Architectural support for programming languages and operating systems
Constraint Logic Programming using Eclipse
Constraint Logic Programming using Eclipse
Juzi: a tool for repairing complex data structures
Proceedings of the 30th international conference on Software engineering
Declarative Programming of User Interfaces
PADL '09 Proceedings of the 11th International Symposium on Practical Aspects of Declarative Languages
Programming in Scala: A Comprehensive Step-by-step Guide
Programming in Scala: A Comprehensive Step-by-step Guide
MINION: A Fast, Scalable, Constraint Solver
Proceedings of the 2006 conference on ECAI 2006: 17th European Conference on Artificial Intelligence August 29 -- September 1, 2006, Riva del Garda, Italy
Purely functional lazy non-deterministic programming
Proceedings of the 14th ACM SIGPLAN international conference on Functional programming
Last steps towards an ultimate Prolog
IJCAI'81 Proceedings of the 7th international joint conference on Artificial intelligence - Volume 2
Decision procedures for algebraic data types with abstractions
Proceedings of the 37th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Programming with singular and plural non-deterministic functions
Proceedings of the 2010 ACM SIGPLAN workshop on Partial evaluation and program manipulation
Communications of the ACM
Monadic constraint programming
Journal of Functional Programming
Kodkod: a relational model finder
TACAS'07 Proceedings of the 13th international conference on Tools and algorithms for the construction and analysis of systems
CAV'07 Proceedings of the 19th international conference on Computer aided verification
MiniZinc: towards a standard CP modelling language
CP'07 Proceedings of the 13th international conference on Principles and practice of constraint programming
High-level database programming in curry
PADL'08 Proceedings of the 10th international conference on Practical aspects of declarative languages
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
PLDI '10 Proceedings of the 2010 ACM SIGPLAN conference on Programming language design and implementation
Test generation through programming in UDITA
Proceedings of the 32nd ACM/IEEE International Conference on Software Engineering - Volume 1
Semantic subtyping with an SMT solver
Proceedings of the 15th ACM SIGPLAN international conference on Functional programming
Falling back on executable specifications
ECOOP'10 Proceedings of the 24th European conference on Object-oriented programming
Contract-based data structure repair using alloy
ECOOP'10 Proceedings of the 24th European conference on Object-oriented programming
RV'10 Proceedings of the First international conference on Runtime verification
Unifying execution of imperative and declarative code
Proceedings of the 33rd International Conference on Software Engineering
Constraint-Based Program Debugging Using Data Structure Repair
ICST '11 Proceedings of the 2011 Fourth IEEE International Conference on Software Testing, Verification and Validation
Synthesis of loop-free programs
Proceedings of the 32nd ACM SIGPLAN conference on Programming language design and implementation
Scala to the power of Z3: integrating SMT and programming
CADE'11 Proceedings of the 23rd international conference on Automated deduction
Satisfiability modulo recursive programs
SAS'11 Proceedings of the 18th international conference on Static analysis
URBiVA: uniform reduction to bit-vector arithmetic
IJCAR'10 Proceedings of the 5th international conference on Automated Reasoning
Taking satisfiability to the next level with z3
IJCAR'12 Proceedings of the 6th international joint conference on Automated Reasoning
Proceedings of the 17th ACM SIGPLAN international conference on Functional programming
Proceedings of the ACM international conference on Object oriented programming systems languages and applications
Faceted execution of policy-agnostic programs
Proceedings of the Eighth ACM SIGPLAN workshop on Programming languages and analysis for security
Proceedings of the 2013 International Symposium on Software Testing and Analysis
Synthesis modulo recursive functions
Proceedings of the 2013 ACM SIGPLAN international conference on Object oriented programming systems languages & applications
Game programming by demonstration
Proceedings of the 2013 ACM international symposium on New ideas, new paradigms, and reflections on programming & software
Growing solver-aided languages with rosette
Proceedings of the 2013 ACM international symposium on New ideas, new paradigms, and reflections on programming & software
Symbolic optimization with SMT solvers
Proceedings of the 41st ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages
Hi-index | 0.00 |
We present an extension of Scala that supports constraint programming over bounded and unbounded domains. The resulting language, Kaplan, provides the benefits of constraint programming while preserving the existing features of Scala. Kaplan integrates constraint and imperative programming by using constraints as an advanced control structure; the developers use the monadic 'for' construct to iterate over the solutions of constraints or branch on the existence of a solution. The constructs we introduce have simple semantics that can be understood as explicit enumeration of values, but are implemented more efficiently using symbolic reasoning. Kaplan programs can manipulate constraints at run-time, with the combined benefits of type-safe syntax trees and first-class functions. The language of constraints is a functional subset of Scala, supporting arbitrary recursive function definitions over algebraic data types, sets, maps, and integers. Our implementation runs on a platform combining a constraint solver with a standard virtual machine. For constraint solving we use an algorithm that handles recursive function definitions through fair function unrolling and builds upon the state-of-the art SMT solver Z3. We evaluate Kaplan on examples ranging from enumeration of data structures to execution of declarative specifications. We found Kaplan promising because it is expressive, supporting a range of problem domains, while enabling full-speed execution of programs that do not rely on constraint programming.