Gecode / gecode

Generic Constraint Development Environment
https://www.gecode.org
Other
283 stars 76 forks source link

6.3.0: Error: Registry: Constraint fzn_if_then_else_var_bool not found #122

Closed informarte closed 3 years ago

informarte commented 3 years ago

Describe the bug

Gecode aborts with the above error when applied to a problem with an expression that translates to fzn_if_then_else_var_bool.

To Reproduce

if_then_else_var_bool_test.mzn.gz

minizinc if_then_else_var_bool_test.mzn

Gecode and Platform Configuration

Gecode 6.3.0 (as delivered with MiniZinc 2.5.5) on Linux x86_64

Dekker1 commented 3 years ago

Just running this example on a clean MiniZinc installation with Gecode seems to work for me. Your example compiles to:

var bool: c:: output_var;
var bool: d:: output_var;
var bool: e:: output_var;
var bool: x;
var bool: X_INTRODUCED_6_ ::var_is_introduced :: is_defined_var;
var bool: X_INTRODUCED_7_ ::var_is_introduced :: is_defined_var;
var bool: y;
var bool: X_INTRODUCED_12_ ::var_is_introduced :: is_defined_var;
var bool: X_INTRODUCED_13_ ::var_is_introduced :: is_defined_var;
constraint bool_clause([X_INTRODUCED_6_],[c]);
constraint array_bool_or([c,X_INTRODUCED_7_],true);
constraint array_bool_or([c,X_INTRODUCED_12_],true);
constraint bool_clause([X_INTRODUCED_13_],[c]);
constraint bool_eq_reif(x,d,X_INTRODUCED_6_):: defines_var(X_INTRODUCED_6_);
constraint bool_eq_reif(x,e,X_INTRODUCED_7_):: defines_var(X_INTRODUCED_7_);
constraint bool_eq_reif(y,d,X_INTRODUCED_12_):: defines_var(X_INTRODUCED_12_);
constraint bool_eq_reif(y,e,X_INTRODUCED_13_):: defines_var(X_INTRODUCED_13_);
solve  satisfy;

And that is solved correctly by Gecode.

It might need to be noted that fzn_if_then_else_var_bool is not a Gecode primitive. Gecode uses the redefinition in the MiniZinc standard library (it doesn't ship its own fzn_if_then_else_var_bool.mzn file with a redefinition).

informarte commented 3 years ago

Oops, I am sorry, it seems that I messed up my MiniZinc installation.