For loop Dafny for循环和forall语句?
我在Dafny工作了一段时间,如果必须使用for循环,我会使用For loop Dafny for循环和forall语句?,for-loop,debugging,while-loop,triggers,dafny,For Loop,Debugging,While Loop,Triggers,Dafny,我在Dafny工作了一段时间,如果必须使用for循环,我会使用while语句,因为我认为for循环在Dafny中并不作为内置的 但是,在这个链接()上,我看到代码使用了forall语句作为: method toArrayConvert(s:seq<int>) returns(res:array<int>) requires |s|>0; ensures |s| == res.Length; ensures forall i::0&l
while
语句,因为我认为for循环在Dafny中并不作为内置的
但是,在这个链接()上,我看到代码使用了forall
语句作为:
method toArrayConvert(s:seq<int>) returns(res:array<int>)
requires |s|>0;
ensures |s| == res.Length;
ensures forall i::0<=i<res.Length ==> s[i] == res[i];
{
res :=new int[|s|];
forall i|0<=i && i<|s| {res[i]:=s[i];} /*on this line I get the following*/
// rewrite: forall i#inv: int {:trigger res[i#inv]} | 0 <= i#inv && i#inv < |s| { res[i#inv] := s[i#inv]; }
//Not generating triggers for "res[i#inv] == s[i#inv]".
return res;
}
它给了我一个错误:未解析标识符:i
发生了什么事?是否有必要像调试器所说的那样使用
i#inv
而不是i
?但是它也给了我错误。关于for语句的使用,我在论文()中也看到了一个“foreach”语句,但在使用它时没有编译。我失去了什么?
method toArrayConvert(s:seq<int>) returns(res:array<int>)
requires |s|>0;
ensures |s| == res.Length;
ensures forall i::0<=i<res.Length ==> s[i] == res[i];
{
res :=new int[|s|];
//forall i|0<=i && i<|s| {res[i]:=s[i];} /*on this line I get the following*/
forall i: int {:trigger res[i]} | 0 <= i && i < |s| { res[i] := s[i]; }
//Not generating triggers for "res[i#inv] == s[i#inv]".
return res;
}