For loop Dafny for循环和forall语句?

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

我在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<=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;
    }