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