Constrain the number of occurrences of Value in Vars to satisfy the constraint defined by Rel:
Rel N
Rel can be one of #>, #>=, #<, #=<, #=, #\= (or equivalently, >, >=, <, =<, =, \=).
occurrences/3, atmost/3, atleast/3 are defined using count/3. For example,
atmost(N, Vars, Value)
is defined by:
count(Value, Vars, (#=<), N)
This constraint can be embedded in a constraint expression in its functional form (without the last argument).
ConsistencyModule is the optional module specification to give the consistency level for the propagation for this constraint: gfd_gac the (default) and gfd_bc. Both propagation do not achive bound consistency in all cases, and gfd_bc is different from gfd_gac only if Value is a domain variable, as its domain is not pruned with gfd_bc.
This constraint is known as count in the global constraint catalog. It is implemented using gecode's count() constraint (variants with int or IntVar for argument representing Value).
[eclipse 33]: count(5, [](4,5,5,4,5), (#>=), 2). % succeed
[eclipse 34]: count(5, [](4,5,5,4,5), (#>), 2). % succeed
[eclipse 35]: count(5, [](4,5,5,4,5), (#=), 2). % fail
[eclipse 36]: count(5, [](4,5,5,4,5), (#\=), 2). % succeed
[eclipse 37]: count(5, [](4,5,5,4,5), (#=<), 2). % fail
[eclipse 38]: count(5, [](4,5,5,4,5), (#<), 2). % fail
[eclipse 39]: count(5, [](4,5,5,4,5), (#>=), 3). % succeed
[eclipse 40]: count(5, [](4,5,5,4,5), (#>), 3). % fail
[eclipse 41]: count(5, [](4,5,5,4,5), (#=), 3) % succeed
[eclipse 42]: N :: [3,5], count(3, [3,A,3,5,3,3], (#=), N).
N = 5
A = 3
[eclipse 43]: N :: [3,5], count(3, [3,A,3,5,3], (#=), N).
N = 3
A = A{[-1000000 .. 2, 4 .. 1000000]}
[eclipse 44]: N :: [3,5], count(3, [3,A,3,5,3], (#<), N).
N = 5
A = A{[-1000000 .. 1000000]}
[eclipse 45]: N :: [3,5], count(3, [3,A,3,5,3], (#>), N).
N = 3
A = 3
[eclipse 46]: N :: [3,5], count(3, [3,A,3,5,3], (#>=), N).
N = 3
A = A{[-1000000 .. 1000000]}
[eclipse 47]: N :: [3,5], count(3, [3,A,3,5,3], (#=<), N).
N = N{[3, 5]}
A = A{[-1000000 .. 1000000]}
[eclipse 48]: N :: [3,5], count(3, [3,A,3,5,3], (#\=), N).
N = N{[3, 5]}
A = A{[-1000000 .. 1000000]}