dafny - 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
作业进行编码。您可以放心地忽略它。
我同意该消息有点令人困惑,因为它包含字符串“未生成触发器”,而实际上它已经生成了触发器。此消息是由于 Dafny 如何处理forall
报表的一些内部技术细节造成的。我将提出一个问题来查看它。
推荐阅读
- powerapps - 这是否考虑在 Powerapps 画布应用功能中进行硬编码?
- git - Git说一个文件被修改了,即使它没有
- java - Java 程序接受输入两次
- css - 如何将文本装饰添加到我的 Angular Material mat-form-field?
- c - 如何检查程序是否在c中静态编译
- c++ - SetTextColor 不改变命令行文本颜色
- javascript - jQuery 事件:keypress 不适用于 Firefox 或 IE,并且 keyup 不适用于 IE
- c - 为什么子进程在使用来自父输出的 stdin 的 fork 和管道时正在等待?
- matlab - 在Matlab中计算图像段之间的接触长度
- c - C:数组中的最后一个元素覆盖所有先前的元素