10.10.4.10 User-Defined Constraints

New, primitive constraints can be added defined by the user on two
different levels. On a higher level, constraints can be defined using
the global constraint programming interface; see Defining Global Constraints. Such constraints can embody specialized algorithms and
use the full power of Prolog. They cannot be reified.

On a lower level, new primitive constraints can be defined with
indexicals. In this case, they take part in the basic constraint
solving algorithm and express custom designed rules for special cases of
the overall local propagation scheme. Such constraints are called
FD predicates; see Defining Primitive Constraints. They can
optionally be reified.