对于下面的代码,我得到它不能建立满足该谓词的LHS值的存在。我怎么能证明右边成立并存在这样的x?
method Main() {
var n : int := 10;
var x : seq<int> :| n == |x| && forall i :: 0 <= i < |x| ==> -1 <= x[i] <= 1;
}
答案 0 :(得分:1)
您需要提供证人。以下断言可以解决问题:
method Main() {
var n : int := 10;
assert |[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]| == 10;
var x : seq<int> :| n == |x| && forall i :: 0 <= i < |x| ==> -1 <= x[i] <= 1;
}
但是,这将带您进入下一点,即
答案 1 :(得分:1)
似乎目前尚不支持类似这样的琐事:
method Main() {
var n : int := 10;
var y : seq<int> :| y == [3];
var x : seq<int> :| x == y;
var z : seq<int> :| |z| == |y|;
}
Dafny设法实例化x
,而不是z
。
也许将其发布在他们的GitHub/Issues中?