給出以下代碼片段,其中x是一個數字。如何導出循環不變式?
{ y >= 0 }
z = 0
n = y
while (n > 0) begin
z = z + x
n = n – 1
end
它計算什麼?證明它,展示如何導出循環不變式。
我該怎麼做?
給出以下代碼片段,其中x是一個數字。如何導出循環不變式?
{ y >= 0 }
z = 0
n = y
while (n > 0) begin
z = z + x
n = n – 1
end
它計算什麼?證明它,展示如何導出循環不變式。
我該怎麼做?
對於給定X
和Y
它計算X * Y
。
在開始時,Z
的值爲零,而N = Y
(循環的變量將在我們的循環中倒計時)。
該循環執行Y
次,並在每次執行時,累積X
到Z
。
最後,當N
達到0時,循環將終止,那麼Z
的值應爲X * Y
。
謝謝,但你知道如何通過派生循環不變的方式來顯示它嗎? – user2977595
這個例子被稱爲最正確的程序,因爲它在每個軟件驗證過程中都被證明。下面是該方案與不變量上的每一步上市:
{ y >= 0 } z = 0 // invariant: z = 0 n = y // invariant: n = y and z = 0 while (n > 0) begin // loop invariant: y * x - n * x = z z = z + x n = n – 1 end // Final invariant: n = 0 and y * x = z
在my paper page 118提供了這個例子所有的理論細節。
我想它計算一個數字的總和,像factoriel但總和不是?對於循環不變的部分,我不知道 – user2977595