[ library(ic_global) | Reference Manual | Alphabetic Index ]
alldifferent(+Vars)
All members of Vars are different
- Vars
- A collection (a la collection_to_list/2) of variables or integers
Description
Constrains all elements of a collection to be pairwise different (and
integral). This is an implementation with the same semantics as the
standard alldifferent/1 constraint, but with stronger propagation
behaviour. It checks for exhaustion of all sub-ranges of possible
values.
The algorithm is based roughly on: Jean Francois Puget, A fast algorithm
for the bound consistency of the alldiff constraint, AAAI 1998, but
makes some additional inferences based on domain size.
Any input variables which do not already have finite bounds will
be given default bounds of -10000000 to 10000000.
Examples
?- length(Xs,5), Xs::1..4, alldifferent(Xs).
no (more) solution.
?- [X1,X2]::1..2, [X3,X4,X5]::1..5, alldifferent([X1,X2,X3,X4,X5]).
X1 = X1{[1, 2]}
X2 = X2{[1, 2]}
X3 = X3{[3..5]}
X4 = X4{[3..5]}
X5 = X5{[3..5]}
Delayed goals:
alldifferent([X1{[1, 2]}, X2{[1, 2]}], 1)
alldifferent([X3{[3..5]}, X4{[3..5]}, X5{[3..5]}], 1)
See Also
ic : alldifferent / 1, ic_symbolic : alldifferent / 1, gfd : alldifferent / 1, sd : alldifferent / 1, fd_global : alldifferent / 1, fd : alldifferent / 1, fd_global_gac : alldifferent / 1, ic_global_gac : alldifferent / 1, alldifferent / 2, eclipse_6 : collection_to_list / 2, lists : collection_to_list / 2