35.7 Constraint Handlers

The CHR library comes with plenty of constraint handlers written in CHR. The most recent versions of these are maintained at http://www.pst.informatik.uni-muenchen.de/~fruehwir/chr-solver.html

arc.pl
classical arc-consistency over finite domains
bool.pl
simple Boolean constraints
cft.pl
feature term constraints according to the CFT theory
domain.pl
finite domains over arbitrary ground terms and interval domains over integers and reals, but without arithmetic functions
gcd.pl
elegant two-liner for the greatest common divisor
interval.pl
straightforward interval domains over integers and reals, with arithmetic functions
kl-one.pl
terminological reasoning similar to KL-ONE or feature trees
leq.pl
standard introductory CHR example handler for less-than-or-equal
list.pl
equality constraints over concatenations of lists (or strings)
listdom.pl
a straightforward finite enumeration list domains over integers, similar to interval.pl
math-elim.pl
solves linear polynomial equations and inequations using variable elimination, several variations possible
math-fougau.pl
solves linear polynomial equations and inequations by combining variable elimination for equations with Fourier's algorithm for inequations, several variations possible
math-fourier.pl
a straightforward Fouriers algorithm to solve polynomial inequations over the real or rational numbers
math-gauss.pl
a straightforward, elegant implementation of variable elimination for equations in one rule
minmax.pl
simple less-than and less-than-or-equal ordering constraints together with minimum and maximum constraints
modelgenerator.pl
example of how to use CHR for model generation in theorem proving
monkey.pl
classical monkey and banana problem, illustrates how CHR can be used as a fairly efficient production rule system
osf.pl
constraints over order sorted feature terms according to the OSF theory
oztype.pl
rational trees with disequality and OZ type constraint with intersection
pathc.pl
the most simple example of a handler for path consistency—two rules
primes.pl
elegant implementations of the sieve of Eratosthenes reminiscent of the chemical abstract machine model, also illustrates use of CHR as a general purpose concurrent constraint language
scheduling.pl
simple classical constraint logic programming scheduling example on building a house
tarski.pl
most of Tarski's axiomatization of geometry as constraint system
term.pl
Prolog term manipulation built-in predicates functor/3, arg/3, =../2 as constraints
time-pc.pl
grand generic handler for path-consistency over arbitrary constraints, load via time.pl to get a powerful solver for temporal constraints based on Meiri's unifying framework. time-rnd.pl contains a generator for random test problems.
time-point.pl
quantitative temporal constraints over time points using path-consistency
tree.pl
equality and disequality over finite and infinite trees (terms)
type.pl
equalities and type constraints over finite and infinite trees (terms)

You can consult or compile a constraint handler from the CHR library using e.g.:

     | ?- [library('chr/examples/gcd')].
     | ?- compile(library('chr/examples/gcd')).

If you want to learn more about the handlers, look at their documented source code.

In addition, there are files with example queries for some handlers, their file name starts with examples- and the file extension indicates the handler, e.g. .bool:

     examples-adder.bool
     examples-benchmark.math
     examples-deussen.bool
     examples-diaz.bool
     examples-fourier.math
     examples-holzbaur.math
     examples-lim1.math
     examples-lim2.math
     examples-lim3.math
     examples-puzzle.bool
     examples-queens.bool
     examples-queens.domain
     examples-stuckey.math
     examples-thom.math