Dafny 数组元素包含在其他数组断言中
Dafny array elements contained in other array assertion
问题很简单:为什么下面的断言是 return "assertion violation".
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]));
}
这是一种修复方法。在您的断言之前添加以下断言。
assert b[0] == 1;
assert b[1] == 2;
似乎在一个量词下只能记住最近赋值给b
的值,这就解释了为什么不需要额外断言b[2]
。
问题很简单:为什么下面的断言是 return "assertion violation".
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]));
}
这是一种修复方法。在您的断言之前添加以下断言。
assert b[0] == 1;
assert b[1] == 2;
似乎在一个量词下只能记住最近赋值给b
的值,这就解释了为什么不需要额外断言b[2]
。