The following constraints implement the basic relationships between two domain values. The constraints require their arguments to come from identical domains, otherwise an error is raised.

- ?X &= ?Y
- X is the same as Y
- ?X &\= ?Y
- X is different from Y
- ?X &< ?Y
- X is strictly before Y in the domain order
- ?X &> ?Y
- X is strictly after Y in the domain order
- ?X &=< ?Y
- X is the same as Y, or before Y in the domain order
- ?X &>= ?Y
- X is the same as Y, or after Y in the domain order
- shift(?X,?C,?Y)
- Y is C places above X in the domain order. X and Y have symbolic domains, C has an integer domain.
- rotate(?X,?C,?Y)
- like shift/3 but wraps at domain boundary.
- element(?Index,++List,?Value)
- Value occurs in List at position Index. Value has a symbolic domain, Index has an integer domain. List is a number of symbolic domain values.

For example

?- [X, Y] &:: weekday, X &< Y. X = X{[mo, tu, we, th, fr, sa]} Y = Y{[tu, we, th, fr, sa, su]} Yes (0.00s cpu) ?- X &:: weekday, X &=< we. X = X{[mo, tu, we]} Yes (0.00s cpu)