Dafny迭代器:违反了前提条件和modifes子句
Dafny在不执行任何操作的迭代器上调用MoveNext()时显示多个错误:Dafny迭代器:违反了前提条件和modifes子句,dafny,Dafny,Dafny在不执行任何操作的迭代器上调用MoveNext()时显示多个错误: iterator Iter() {} method main() decreases * { var iter := new Iter(); while (true) decreases * { var more := iter.MoveNext(); if (!more) { break; } } } 错误出现在对iter.M
iterator Iter()
{}
method main()
decreases *
{
var iter := new Iter();
while (true)
decreases *
{
var more := iter.MoveNext();
if (!more) { break; }
}
}
错误出现在对iter.MoveNext()的调用中:
main或Iter没有修改条款,Iter也没有先决条件。为什么这个程序不正确?在循环中需要以下不变量
invariant iter.Valid() && fresh(iter._new)
然后你的程序验证。和往常一样,您的程序(动态)没有问题,但由于缺少注释,在验证时可能会出现误报
据我所知,在使用迭代器时总是需要这个不变量
(稍微)关于迭代器的更多信息可以在第16章的中找到。(至少,有足够的信息让我记住这个问题的答案。)
invariant iter.Valid() && fresh(iter._new)