0
我有一个程序,我应该找到一个循环不变量,然后提供一个证明。循环不变Hoare逻辑
{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
,这是后置条件简单,但我不认为它最好的一个同去。也许还有其他建议?
谢谢,但你为什么提到它两次?我的意思是肯定它应该在开始和结束时都成立。而且,我逻辑上知道如何表明它是部分正确的,但完全呢?你能提供一个提示吗? – nlimits
我提到过两次,以确保循环体内的操作保持不变([...循环的不变量是每个重复之前(和之后)的属性](https://en.wikipedia)。组织/维基/ Loop_invariant))。至于总的正确性,你的总体正确性与部分正确性+循环终止相同。 – d125q