Skip to content

Commit e5b05f8

Browse files
authored
Merge pull request #47 from Dekker1/feature/half_reification
Enable half-reification for fzn-gecode
2 parents 198e8a1 + bf53890 commit e5b05f8

File tree

3 files changed

+68
-0
lines changed

3 files changed

+68
-0
lines changed

changelog.in

+14
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,20 @@ Date: 2019-??-??
6868
[DESCRIPTION]
6969
Let's see.
7070

71+
[ENTRY]
72+
Module: flatzinc
73+
What: change
74+
Rank: minor
75+
Thanks: Jip J. Dekker
76+
[DESCRIPTION]
77+
Enable support for half-reified constraints in the Gecode MiniZinc
78+
library. Half-reified constraints are used when a MiniZinc
79+
expression has to be reified and is detected to be in a positive
80+
context. If no Half-reified constraint has been made available by
81+
solver, the full reification will be used. Half-reifed constraints
82+
in the MiniZinc solver library are declared in the same way as
83+
reified constraints, but are appended by "_imp" instead of "_reif".
84+
7185
[ENTRY]
7286
Module: kernel
7387
What: bug

gecode/flatzinc/mznlib/count.mzn

+3
Original file line numberDiff line numberDiff line change
@@ -34,3 +34,6 @@ predicate count(array[int] of var int: x, var int: y, var int: c);
3434

3535
predicate count_reif(array[int] of var int: x, var int: y, var int: c,
3636
var bool: b);
37+
38+
predicate count_imp(array[int] of var int: x, var int: y, var int: c,
39+
var bool: r);

gecode/flatzinc/mznlib/redefinitions.mzn

+51
Original file line numberDiff line numberDiff line change
@@ -89,3 +89,54 @@ predicate int_pow(var int: x, var int: y, var int: z) =
8989
[pow(pow_x[i],i) | i in lb(y)..ub(y)]);
9090
} in z=pow_table[y]
9191
endif;
92+
93+
predicate array_bool_and_imp(array [int] of var bool: as, var bool: r);
94+
predicate array_bool_or_imp(array [int] of var bool: as, var bool: r);
95+
predicate array_bool_xor_imp(array [int] of var bool: as, var bool: r);
96+
97+
predicate bool_and_imp(var bool: a, var bool: b, var bool: r);
98+
predicate bool_clause_imp(array [int] of var bool: as,
99+
array [int] of var bool: bs, var bool: r);
100+
predicate bool_ge_imp(var bool: a, var bool: b, var bool: r);
101+
predicate bool_gt_imp(var bool: a, var bool: b, var bool: r);
102+
predicate bool_le_imp(var bool: a, var bool: b, var bool: r);
103+
predicate bool_lt_imp(var bool: a, var bool: b, var bool: r);
104+
predicate bool_ne_imp(var bool: a, var bool: b, var bool: r);
105+
predicate bool_ne_imp(var bool: a, var bool: b, var bool: r);
106+
predicate bool_or_imp(var bool: a, var bool: b, var bool: r);
107+
predicate bool_xor_imp(var bool: a, var bool: b, var bool: r);
108+
109+
predicate bool_lin_eq_imp(array [int] of int: as, array [int] of var bool: bs,
110+
var int: c, var bool: r);
111+
predicate bool_lin_ge_imp(array [int] of int: as, array [int] of var bool: bs,
112+
var int: c, var bool: r);
113+
predicate bool_lin_gt_imp(array [int] of int: as, array [int] of var bool: bs,
114+
var int: c, var bool: r);
115+
predicate bool_lin_le_imp(array [int] of int: as, array [int] of var bool: bs,
116+
var int: c, var bool: r);
117+
predicate bool_lin_lt_imp(array [int] of int: as, array [int] of var bool: bs,
118+
var int: c, var bool: r);
119+
predicate bool_lin_ne_imp(array [int] of int: as, array [int] of var bool: bs,
120+
var int: c, var bool: r);
121+
122+
predicate int_eq_imp(var int: a, var int: b, var bool: r);
123+
predicate int_ge_imp(var int: a, var int: b, var bool: r);
124+
predicate int_gt_imp(var int: a, var int: b, var bool: r);
125+
predicate int_le_imp(var int: a, var int: b, var bool: r);
126+
predicate int_lt_imp(var int: a, var int: b, var bool: r);
127+
predicate int_ne_imp(var int: a, var int: b, var bool: r);
128+
129+
predicate int_lin_eq_imp(array [int] of int: as, array [int] of var int: bs,
130+
int: c, var bool: r);
131+
predicate int_lin_ge_imp(array [int] of int: as, array [int] of var int: bs,
132+
int: c, var bool: r);
133+
predicate int_lin_gt_imp(array [int] of int: as, array [int] of var int: bs,
134+
int: c, var bool: r);
135+
predicate int_lin_le_imp(array [int] of int: as, array [int] of var int: bs,
136+
int: c, var bool: r);
137+
predicate int_lin_lt_imp(array [int] of int: as, array [int] of var int: bs,
138+
int: c, var bool: r);
139+
predicate int_lin_ne_imp(array [int] of int: as, array [int] of var int: bs,
140+
int: c, var bool: r);
141+
142+
predicate set_in_imp(var int: x, set of int: S, var bool: r);

0 commit comments

Comments
 (0)