Encoding Numeric Computations and Infusing Heuristic Knowledge Using Integrity Constraints in stableKanren
This paper presents examples of using integrity constraints in stableKanren to encode numeric computations for problem solving. Then we use one of the examples to introduce multiple ways to infuse heuristic knowledge to reduce the solving time. stableKanren is an extension of miniKanren that supports normal logic programs under stable model semantics. stableKanren further supports numeric computation by constructing a constraint store for integrity constraints. There are three ways to extend a relational programming language with numeric computations: relational number representation, grounding numbers to symbols, and constraint store construction. We show that the numeric computations in stableKanren have a straightforward number representation compared to relational number representation. More importantly, stableKanren balances the symbolic and numeric computation in relational programming by avoiding grounding all numbers to symbols. Lastly, it also has simpler syntax compared to other constraint store construction approaches. stableKanren supports combinatorial search problem solving under a declarative generate and test paradigm. Such a paradigm generates all possible combinations of solutions to the problem, then applies a set of constraints to prune out the unwanted solutions. We demonstrate that different approaches to writing programs or queries affect the solver’s performance in the SEND+MORE=MONEY puzzle. The performance gradually improves as more heuristic knowledge is infused through the programs or queries. Additionally, we show how to use an external function to achieve a hybrid solution.