参照while rule for total correctness,WP似乎告诉我,找到严格减少的循环变体足以证明终止。我无法接受,因为我错过了某些东西或者规则是错误的。考虑Hoare逻辑:严格降低循环变量本身如何证明终止?
int i = 1000;
while(true) i--;
其中变量i
的值是严格递减的循环变种,但环肯定不会终止。
当然规则需要有一个附加的先决条件,如事我< 0→¬B(其中乙处于公理模式循环条件),使得循环条件最终“捕获”循环变并退出。
或者我错过了什么?
或者换句话说,'i'并不是我认识的任何语言的严格递减变体 - 在大多数情况下,它会达到最小值,然后绕回(即变大)或触发未定义的行为(可能会终止循环,你永远不知道)。也许在某些真实的情况下,假设我们可以认为'int'是某种语言中的一个bignum,在这种情况下n.m.的完整解释是必需的 - 它正在减少,但对于一个良好的秩序而言不是。 – 2011-05-31 15:33:18
@Steve它也不一定,请参阅[bignum](http://en.wikipedia.org/wiki/Bignum)。如果你有一台Linux机器,在终端上键入'bc'。在那里,你有一种无限精确的编程语言在你的指尖。 – 2011-05-31 15:39:17
非常简单的答案,谢谢你。 – jameshfisher 2011-05-31 16:12:54