- E1 R E2: This is the basic form of an arithmetic constraint, where E1 and E2 are two arithmetic expressions, and R is one of the following constraint symbols:
#<. An arithmetic expression is made of integers, variables, domain variables, and the following arithmetic functions: + (addition), - (subtraction), * (multiplication), / (division), // (integer division), div (integer division), mod, ** (power), abs, min, max, and sum. The ** operator has the highest priority, followed by *, /, //, and mod, then followed by unary minus sign -, and finally followed by + and -. Let E, E1, E2 be expressions, and let L be a list of expressions [E1,E2,...,En]. The following are valid expressions, as well.
- if(Cond,ThenE,ElseE) - This is the same as Cond*ThenE+(1-Cond)*ElseE.
- min(L) - The minimum element of L, which can be given by a list comprehension.
- max(L) - The maximum element of L, which can be given by a list comprehension.
- min(E1,E2) - The minimum of E1 and E2.
- max(E1,E2) - The maximum of E1 and E2.
- sum(L) - The sum of the elements of L, which can be given by a list comprehension.
- sum(Xs,R E): This is equivalent to sum(X) R E, where Xs must be a list of expressions.
- scalar_product(Coeffs, Xs, R, E): Let Coeffs be a list of integers [C1,...,Cn], and let Xs be a list of expressions [E1,...,En]. This constraint is equivalent to C1*E1+...+Cn*En R E.