我想为找到这个Hoare三元组的解决方案提供一些帮助:
(| k > 0 |)最大(|∀ j (0≤ j k ⇒ m ≥ a [ j ] |)
其中 k 是整数数组 a 的长度。程序Max看起来像这样:
i = 0;
m = a[0];
while ( i!=k ) {
if ( a[i]>=m ) {
m = a[i];
} else {
m = m;
}
i = i+1;
}
程序Max应该用来计算数组的最大(最大)元素。任务是通过执行以下操作来证明上述Hoare三元组是部分正确的:
- 定义适当的循环不变性。
- 将证明作为静态呈现。
- 确定所有举证责任,并论证其真实性(争辩为什么一个表达可以从另一表达衍生出来)。 应该使用隐式,分配,部分While等规则来完成此操作。
非常感谢您的帮助!