Skip to content

Wrong optimization of standard increasing constraints #318

Closed
@krzku

Description

@krzku

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

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions