我正在用frama测试这个小程序,而且我一直收到同样的错误。我不知道这意味着什么。我特别搞不懂什么分配一切都意味着什么。// assuming n is nonnegative and even, f returns n
*/
int i=0; i+=2; //@ assert i==n;}[wp] warning: Missing RTE guards
我试着用Dafny来验证一个算法。我正在努力修复错误消息“减少表达式可能不会减少(超时)”。我的算法的基本结构如下:
while (U !S在算法中根本没有被修改。我证明了B的基数小于或等于S的基数,所以减额子句是有界的。在分配给B或U(在内部while循环中)的每个赋值后,我可以证明_然而,这还不够,我需要一个循环不变量在内部while循环中声明这一点,但是我不知道如何用Dafny来表示它。
while循环中的modifies子句在第一次进入循环时只计算一次。例如,如果我有一个对象序列,并且我增长了它,但也修改了我在以前的迭代中创建的新元素,Dafny不会接受它: var x: int;
{var next := new Foo(); i := i + 1;}
我已经尝试过使用递归,它是有效的,但我想使用一个while循环来演示是否有某种“动态”modifies