Description
The following code does not compiles correctly with standard definition of increasing constraint.
include "increasing.mzn";
int: n = 3;
array[1..n] of var 1..n: x;
constraint
increasing(x);
solve satisfy;
output["x = (x)"];
It generates the following flatzinc.
var 1..3: X_INTRODUCED_0_;
var 1..3: X_INTRODUCED_1_;
var 1..3: X_INTRODUCED_2_;
array [1..3] of var int: x:: output_array([1..3]) = [X_INTRODUCED_0_,X_INTRODUCED_1_,X_INTRODUCED_2_];
constraint int_lin_le([1,-1],[X_INTRODUCED_0_,X_INTRODUCED_2_],0);
solve satisfy;
while compilation with option -O0 generates correct code.
array [1..2] of int: X_INTRODUCED_3_ = [1,-1];
var 1..3: X_INTRODUCED_0_;
var 1..3: X_INTRODUCED_1_;
var 1..3: X_INTRODUCED_2_;
array [1..3] of var int: x:: output_array([1..3]) = [X_INTRODUCED_0_,X_INTRODUCED_1_,X_INTRODUCED_2_];
constraint int_lin_le(X_INTRODUCED_3_,[X_INTRODUCED_0_,X_INTRODUCED_1_],0);
constraint int_lin_le(X_INTRODUCED_3_,[X_INTRODUCED_1_,X_INTRODUCED_2_],0);
solve satisfy;
/Kris