Basic Constraints

## 6.2 Basic Constraints

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)