我有一个程序,我应该找到一个循环不变量,然后提供证明。
{x>=0 && y>=0} // precondition
res:=0;
i:=0;
while (i<y) do
res:=res+x;
i:=i+1;
od
{res:=x*y} //postcondition
对我来说唯一的逻辑循环不变量是res<=x*y
,这在后置条件下是直截了当的,但我不认为这是最好的继续。也许还有其他建议吗?
答案 0 :(得分:0)
这会有用吗?
{x>=0 && y>=0} // precondition
res:=0;
i:=0;
while (i<y) do
{res=x*i} // invariant
res:=res+x;
i:=i+1;
{res=x*i} // invariant
end
{res=x*y} //postcondition
通过这些条件,您应该能够显示程序部分正确(即,如果循环终止,答案是正确的)并且它终止。虽然我认为你需要y是整数的前提条件。