2
我試圖找到一個循環不變,這樣我們可以證明這個節目部分糾正:循環不變的證明部分正確性
{ n >= 1 } pre-condition
i = 1;
z = 1;
while (i != n) {
i = i + 1;
z = z + i*i;
}
{ z = n*(n+1)*(2*n + 1)/6 } post-condition
我很堅持。一些到目前爲止,我已經試過不變的是:
z <= n*(n+1)*(2*n + 1)/6^i <= n
和
z = i*(i+1)*(2*i + 1)/6^i <= n
我真的很感激一些建議。
難道是你的後期條件有一個錯字嗎? '... = 6'似乎很奇怪(因爲它說「z」總是等於固定數字「6」)。 – chris
順便說一句:你的文章中的符號'^'是否代表「冪」(就像它在我的答案中一樣),還是你嘗試近似邏輯「和」的符號(我寧願寫成&&或'/\')。我只是問,因爲「z = ... && i <= n」比其他解釋更有意義。 – chris