我正在研究如何使用" swap"来使用dafny来验证插入排序。相邻元素,但我找不到while循环的合理不变量,任何人都可以帮我修复它吗? 这是链接:http://rise4fun.com/Dafny/wmYME
答案 0 :(得分:0)
这里有一些问题。
首先,您的内部循环不正确,因为永远不会更新temp
变量。我建议删除temp
并使用循环条件down >= 0 && a[down+1] < a[down]
代替。
其次,你有几个问题,内循环不变形成错误(索引超出范围,违反了sorted
的前提条件)。但是,我建议抛弃两个内循环不变量并重新尝试,而不是修复它们。
我对插入排序的内部循环的首选不变量是&#34; a[0..up+1]
除了可能在down + 1
&#34;之外被排序。您可以将其声明为
invariant forall j,k | 0 <= j < k < up+1 && k != down+1 :: a[j]<=a[k]
生成的文件验证。