10.35.3.1 Arithmetic Constraints
?Expr RelOp ?Expr

defines an arithmetic constraint. The syntax for Expr and RelOp is defined by a grammar (see Syntax of Arithmetic Expressions). Note that the expressions are not restricted to being linear. Constraints over nonlinear expressions, however, will usually yield less constraint propagation than constraints over linear expressions.

Arithmetic constraints can be reified as e.g.:

          | ?- X in 1..2, Y in 3..5, X#=<Y #<=> B.
          B = 1,
          X in 1..2,
          Y in 3..5

Linear arithmetic constraints, except equalities, maintain bound-consistency and their reified versions detect bound-entailment and -disentailment; see The Constraint System.

The following constraints are among the library constraints that general arithmetic constraints compile to. They express a relation between a sum or a scalar product and a value, using a dedicated algorithm, which avoids creating any temporary variables holding intermediate values. If you are computing a sum or a scalar product, it can be much more efficient to compute lists of coefficients and variables and post a single sum or scalar product constraint than to post a sequence of elementary constraints.

sum(+Xs, +RelOp, ?Value)
where Xs is a list of integers or domain variables, RelOp is a relational symbol as above, and Value is an integer or a domain variable. True if sum(Xs) RelOp Value. Cannot be reified. Corresponds roughly to sumlist/2 in library(lists).
scalar_product(+Coeffs, +Xs, +RelOp, ?Value)
scalar_product(+Coeffs, +Xs, +RelOp, ?Value, +Options)
where Coeffs is a list of length n of integers, Xs is a list of length n of integers or domain variables, RelOp is a relational symbol as above, and Value is an integer or a domain variable. True if sum(Coeffs*Xs) RelOp Value. Cannot be reified.

Options is a list that may include the following option. It can be used to control the level of consistency used by the constraint.

consistency(Cons)
The value is one of the following:
domain
The constraint will maintain arc-consistency. Please note: This option is only meaningful if RelOp is #=, and requires that any domain variables have finite bounds.
bound
value
The constraint will try to maintain bound-consistency (the default).

The following constraints constrain a value to be the minimum (maximum) of a given list of values.

minimum(?Value, +Xs)
where Xs is a list of integers or domain variables, and Value is an integer or a domain variable. True if Value is the minimum of Xs. Cannot be reified. Corresponds to min_member/2 in library(lists).
maximum(?Value, +Xs)
where Xs is a list of integers or domain variables, and Value is an integer or a domain variable. True if Value is the maximum of Xs. Cannot be reified. Corresponds to max_member/2 in library(lists).

Send feedback on this subject.