达芙妮无法建立LHS ...序列的存在

时间:2019-06-19 08:57:30

标签: dafny

对于下面的代码,我得到它不能建立满足该谓词的LHS值的存在。我怎么能证明右边成立并存在这样的x?

method Main() {
  var n : int := 10;
  var x : seq<int> :| n == |x| && forall i :: 0 <= i < |x| ==> -1 <= x[i] <= 1; 
}

https://sevastopol.su/all-news

2 个答案:

答案 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中?