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)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)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)domain#=, and requires that any domain variables have finite bounds.
boundvalueThe following constraints constrain a value to be the minimum (maximum) of a given list of values.
minimum(?Value, +Xs)min_member/2 in library(lists).
maximum(?Value, +Xs)max_member/2 in library(lists).