如何导出循环不变量?

时间:2014-03-01 09:26:37

标签: loops loop-invariant

给出以下代码片段,其中x是数字。

{ y >= 0 }
z = 0
n = y
while (n > 0) begin
z = z + x
n = n – 1
end

它的计算方法是什么?证明它,显示你如何得出循环不变量。

我该怎么办呢?

2 个答案:

答案 0 :(得分:2)

这个例子被称为最正确的程序,因为它在每个软件验证过程中都得到了证明。以下是每个步骤中包含不变量的程序列表:

{ 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中提供。

答案 1 :(得分:0)

对于给定的XY,它会计算X * Y

在开始时,Z的值为零,N = Y(循环的变量将在循环中倒计时)。

循环执行Y次,并且在每次执行时,它会将X累积到Z

最后,当N达到0时,循环将终止,那么Z的值应为X * Y