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.
bound
value
The 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)
.