提高优化级别会导致错误

Increasing optimization level results in errors

这是一个简单的模型,它要求一个数组的所有元素都等于另一个数组的元素:

int: n = 3;
set of int: N = 1..n;
array[N, N] of var bool: P1 = [|true, false, false|
                          false, true, false|
                          false, false, false|];
array[N, N] of var bool: P2;

% constraint forall (x, y in N) (if P1[x,y] then P2[x,y] else true endif);

% constraint forall (x, y in N) (P1[x,y] == P2[x,y]);

constraint forall (x, y in N) (P1[x,y] <-> P2[x,y]);

solve satisfy;

当我 运行 使用优化级别 -O0 或 -O1 时,一切正常,但是当我切换到更高的优化级别时,我会遇到几个此类错误:

Error: undefined identifier for type bool X_INTRODUCED_0_ in line no. 10

如您所见,我尝试了很多方法。这么简单的程序可能会出现什么问题?

即使在最简单的情况下也会发生这种情况,数组中只有一个决策变量:

array[1..1] of bool: n = [true];
array[1..1] of var bool: k;

constraint n[1] == k[1];

solve satisfy;

这实际上似乎与 this one 是同一个问题。它可能看起来不一样,但因为它可能看起来像优化阶段正在删除尚未标记为输出一部分的标识符。这个问题应该会在下一个 MiniZinc 版本中解决。