其他数组断言中包含的Dafny数组元素

时间:2018-04-08 23:14:11

标签: dafny

问题很简单:为什么断言后面会出现“断言违规”。

method test()
{
  var a := new int[5];
  a[0] := 1;
  a[1] := 1;
  a[2] := 2;
  a[3] := 3;
  a[4] := 3;
  var b := new int[3];
  b[0] := 1;
  b[1] := 2;
  b[2] := 3;
  assert(forall i :: exists j :: ((0 <= i < 5) && (0 <= j < 3)) ==> (a[i] == b[j]));
}

1 个答案:

答案 0 :(得分:2)

这是修复它的一种方法。在断言之前添加以下断言。

assert b[0] == 1;
assert b[1] == 2;

似乎在量词下只能记住b的最新作业的价值,这解释了为什么不需要关于b[2]的额外断言。