下面是用Dafny编写的一个简单的排序算法: requires a != null && b !但是,如果我将不变量forall m,n | 0 <= m < j < n <= i :: a[m] <= a[n]从内循环中删除,则Dafny告诉我,不变量sorted(a,j,i+1)可能不是由循环维护
while i < 10{ i := i+1;assert a[5] == 5;
到目前为止,非常简单:声明新数组a并用相应的索引位置初始化它的值因此,assert语句应该是正确的,但是dafny抱怨说“违反断言”。我试过将a5与其他数字进行比较,例如4和6,以及其他接近的数字,但是它没有起作用,我想知道为什么?与此相关,我想问一下在dafny (使用VSCode)中打印是如何工作<em
在下面的程序中,我创建了类似荷兰国旗问题的东西,并遵循同样的逻辑,这也提供了,程序以0、1s和2s的方式对0、1s和2s的数组进行排序,所有的1在开始的0,0在中间,2在末尾。但是在循环不变量处,我得到了误差This loop invariant might not be maintained by the loop.。
最初,i和j位于索引0,k在最后索引。逻辑是,如果看到2,则j会向上移动,如果看见0只是j向上移动,则使用k和k的交换减少,如果看到
我试着用Dafny来验证一个算法。我正在努力修复错误消息“减少表达式可能不会减少(超时)”。我的算法的基本结构如下:
while (U !S在算法中根本没有被修改。我证明了B的基数小于或等于S的基数,所以减额子句是有界的。在分配给B或U(在内部while循环中)的每个赋值后,我可以证明_然而,这还不够,我需要一个循环不变量在内部while循环中声明这一点,但是我不知道如何用Dafny</em