The CHRat language is a modular version of the Constraint Handling Rules language CHR, called CHRat for modular CHR with ask and tell. Any constraint defined in a CHRat component can be reused both in rules and guards in another CHRat component to define new constraint solvers. This extension is currently implemented by a simple syntactic transformation.

Solver Hierarchy

The current distribution includes the following solvers:

leq union_find [SF04] booleans fd
min rational_tree
graphs   comparisons

Online Top-level

Some examples:

  • leq:leq(X, Y), min:min(X, Y, Z).
  • union_find:make(t), union_find:make(u), rational_tree:fun(t, f, 1), rational_tree:argument(t, 1, t), rational_tree:argument(t, 1, u), rational_tree:fun(u, F, N).


The CHRat compiler is distributed as a command-line tool which compiles the bunch of CHRat components enumerated in the command-line parameters (plus dependencies) into a single CHR file. The distribution includes a top-level loop to use CHRat solvers in a convenient way.

The current version is v0.1.

The current compiler is implemented in CHRat and generated CHR files are currently written for the K.U. Leuven implementation of CHR distributed with SWI-Prolog . The current top-level is implemented in CHRat.