?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 non-linear expressions, however, will usually
yield less constraint propagation than constraints over linear
expressions.  In particular, the expressions X / Y
and X mod Y will block until Y is
ground.
     
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 maintain (at least) interval-consistency and their reified versions detect (at least) interval-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 Xs RelOp Value. 
Cannot be reified.
     
scalar_product(+Coeffs, +Xs, +RelOp, ?Value)
     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 Coeffs*Xs RelOp Value. Cannot be reified.
The following constraint is a domain consistent special case of
scalar_product/4 with RelOp is #=:
     
knapsack(+Coeffs, +Xs, ?Value)
     where Coeffs is a list of length n of non-negative integers, Xs is a list of length n of non-negative integers or domain variables, and Value is an integer or a domain variable. Any domain variables must have finite bounds. True if Coeffs*Xs = Value. Cannot be reified.