参考while rule for total correctness,WP似乎告诉我,只要找到严格减少的循环变量就足以证明终止。我不能接受,要么是因为我遗漏了某些东西,要么是规则错了。考虑
int i = 1000;
while(true) i--;
其中变量i
的值是严格减少的循环变量,但循环肯定不会终止。
当然规则需要有一个额外的前提条件,例如 i< 0→¬B(其中 B 是公理模式中的循环条件),以便循环条件最终“捕获”循环变量并退出。
或者我错过了什么?
答案 0 :(得分:5)
循环变量必须是自然数。自然数不能减少到零。使用大词,循环变量是一个相对于有根据的关系单调递减的值。这是你的推理中缺少的有根据的。
答案 1 :(得分:1)
如维基百科文章所述:
[...]条件 B 必须暗示 t 是 不是其范围的最小元素, 否则就是这条规则的前提 会是假的。
在目前的情况下, B 为true
, t 为i
。 true
对i
的最小性没有任何暗示,因此不符合规则的前提。
答案 2 :(得分:1)
通常的订购“<”是有充分根据自然数,但不是整数。为了使关系具有良好的基础,其域的每个非空子集必须具有最小元素。因为可以证明,就完善的关系而言,没有无限的下行链,所以带有变量的循环必须终止。
当然,在最小元素的情况下,循环的条件必须是假的!
然而,变体不必限于自然数。超限序数也是有序的。