Dafny,在 forall 分配中触发
Dafny, triggers in forall assignment
在我将序列转换为数组的方法中,dafny 的调试器向我推荐了 VSCode,但我无法理解它是什么。
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;
}
这不是警告或错误,而只是 Dafny 的诊断消息,告诉您它计划如何对 forall
分配进行编码。您可以放心地忽略它。
我同意该消息有点令人困惑,因为它包含字符串 "Not generating triggers",而事实上,它已经生成了一个触发器。此消息是由于 Dafny 如何处理 forall
语句的一些内部技术细节引起的。我会提交一个问题来查看它。
在我将序列转换为数组的方法中,dafny 的调试器向我推荐了 VSCode,但我无法理解它是什么。
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;
}
这不是警告或错误,而只是 Dafny 的诊断消息,告诉您它计划如何对 forall
分配进行编码。您可以放心地忽略它。
我同意该消息有点令人困惑,因为它包含字符串 "Not generating triggers",而事实上,它已经生成了一个触发器。此消息是由于 Dafny 如何处理 forall
语句的一些内部技术细节引起的。我会提交一个问题来查看它。