Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dafny迭代器:违反了前提条件和modifes子句_Dafny - Fatal编程技术网

Dafny迭代器:违反了前提条件和modifes子句

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

Dafny在不执行任何操作的迭代器上调用MoveNext()时显示多个错误:

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)