Hoare逻辑:严格减少的循环变量本身如何证明终止?

时间:2011-05-31 14:35:38

标签: language-agnostic logic verification variant

参考while rule for total correctness,WP似乎告诉我,只要找到严格减少的循环变量就足以证明终止。我不能接受,要么是因为我遗漏了某些东西,要么是规则错了。考虑

int i = 1000;
while(true) i--;

其中变量i的值是严格减少的循环变量,但循环肯定不会终止。

当然规则需要有一个额外的前提条件,例如 i< 0→¬B(其中 B 是公理模式中的循环条件),以便循环条件最终“捕获”循环变量并退出。

或者我错过了什么?

3 个答案:

答案 0 :(得分:5)

循环变量必须是自然数。自然数不能减少到零。使用大词,循环变量是一个相对于有根据的关系单调递减的值。这是你的推理中缺少的有根据的。

答案 1 :(得分:1)

如维基百科文章所述:

  

[...]条件 B 必须暗示 t 是   不是其范围的最小元素,   否则就是这条规则的前提   会是假的。

在目前的情况下, B true t itruei的最小性没有任何暗示,因此不符合规则的前提。

答案 2 :(得分:1)

通常的订购“<”是有充分根据自然数,但不是整数。为了使关系具有良好的基础,其域的每个非空子集必须具有最小元素。因为可以证明,就完善的关系而言,没有无限的下行链,所以带有变量的循环必须终止。

当然,在最小元素的情况下,循环的条件必须是假的!

然而,变体不必限于自然数。超限序数也是有序的。