Dafny使用swap验证插入排序

时间:2017-05-19 02:00:56

标签: swap insertion-sort loop-invariant dafny

我正在研究如何使用" swap"来使用dafny来验证插入排序。相邻元素,但我找不到while循环的合理不变量,任何人都可以帮我修复它吗? 这是链接:http://rise4fun.com/Dafny/wmYME

1 个答案:

答案 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]

生成的文件验证。