參照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