# 4.2.2.14. Deprecated constraints

In this section: at_least, at_most, exactly, global_cardinality_low_up, global_cardinality_low_up_closed.

## at_least

 ```predicate at_least(int: n, array [\$X] of var \$\$E: x, \$\$E: v) ``` Requires at least n variables in x to take the value v. This constraint is deprecated. Use count(i in x)(i=v) >= n instead.

## at_most

 ```predicate at_most(int: n, array [\$X] of var \$\$E: x, \$\$E: v) ``` Requires at most n variables in x to take the value v. This constraint is deprecated. Use count(i in x)(i=v) <= n instead.

## exactly

 ```predicate exactly(int: n, array [\$X] of var \$\$E: x, \$\$E: v) ``` Requires exactly n variables in x to take the value v. This constraint is deprecated. Use count(i in x)(i=v) = n instead.

## global_cardinality_low_up

 ```predicate global_cardinality_low_up(array [\$X] of var int: x, array [\$Y] of int: cover, array [\$Y] of int: lbound, array [\$Y] of int: ubound) ``` Requires that for all i, the value cover[i] appears at least lbound[i] and at most ubound[i] times in the array x. This constraint is deprecated. Use global_cardinality(x, cover, lbound, ubound) instead.

## global_cardinality_low_up_closed

 ```predicate global_cardinality_low_up_closed(array [\$X] of var int: x, array [\$Y] of int: cover, array [\$Y] of int: lbound, array [\$Y] of int: ubound) ``` Requires that for all i, the value cover[i] appears at least lbound[i] and at most ubound[i] times in the array x. The elements of x must take their values from cover. This constraint is deprecated. Use global_cardinality_closed(x, cover, lbound, ubound) instead.