【发布时间】:2020-08-05 13:08:05
【问题描述】:
我正在尝试创建一个 Dafny 程序,当且仅当 A 不包含重复项时才返回 true。
这是我到目前为止所拥有的,但是不变量 invariant r <==> (forall j :: 0 <= j < i && j != i ==> A[j] != A[i]); 表示它不会保留进入。
关于我做错了什么有什么建议吗?
`method CheckArr1(A: array<int>) returns (r: bool)
requires A.Length > 0
ensures r <==> (forall i, j :: 0 <= i < A.Length && 0 <= j < A.Length && i != j ==> A[i] != A[j]);
{
var i := 0;
r := true;
while i < A.Length
decreases A.Length - i;
invariant i <= A.Length;
invariant r <==> (forall x, y :: 0 <= x < i && 0 <= y < i && x != y ==> A[x] != A[y]);
{
var j := 0;
while j < i
decreases i - j;
invariant j <= i;
invariant r <==> (forall j :: 0 <= j < i && j != i ==> A[j] != A[i]);
{
r := (r && (A[j] != A[i]));
j := j + 1;
}
i := i + 1;
}
}`
【问题讨论】:
标签: dafny