this repo has no description
1%
2% Main authors:
3% Guido Tack <tack@gecode.org>
4%
5% Copyright:
6% Guido Tack, 2007
7%
8% Last modified:
9% $Date: 2009-09-09 01:42:03 +1000 (Wed, 09 Sep 2009) $ by $Author: schulte $
10% $Revision: 9689 $
11%
12% This file is part of Gecode, the generic constraint
13% development environment:
14% http://www.gecode.org
15%
16% Permission is hereby granted, free of charge, to any person obtaining
17% a copy of this software and associated documentation files (the
18% "Software"), to deal in the Software without restriction, including
19% without limitation the rights to use, copy, modify, merge, publish,
20% distribute, sublicense, and/or sell copies of the Software, and to
21% permit persons to whom the Software is furnished to do so, subject to
22% the following conditions:
23%
24% The above copyright notice and this permission notice shall be
25% included in all copies or substantial portions of the Software.
26%
27% THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
28% EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
29% MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
30% NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
31% LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
32% OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
33% WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
34%
35%
36
37predicate gecode_all_different_int(array[int] of var int: x);
38%predicate all_different_int(array[int] of var int: x) = gecode_all_different_int(x);
39predicate fzn_all_different_int(array[int] of var int: xs) =
40 let {
41 set of int: cs = {fix(x) | x in xs where is_fixed(x)};
42 array[int] of var int: ys = [x | x in xs where not is_fixed(x)];
43 constraint forall(y in ys, c in cs) (y != c);
44 } in
45 if length(ys) <= 1 then true
46 elseif length(ys) == 2 then ys[1] != ys[2]
47 else gecode_all_different_int(ys)
48 endif;