我在看Hoare Logic,並且在理解找到循環不變的方法時遇到了問題。Hoare邏輯循環不變式
有人可以解釋用於計算循環不變的方法嗎?
什麼循環不變應該包含一個「有用」的?
我只處理簡單的例子,發現不變量並證明部分和完全校正的例子,如:
{ i ≥ 0 } while i > 0 do i := i−1 { i = 0 }
我在看Hoare Logic,並且在理解找到循環不變的方法時遇到了問題。Hoare邏輯循環不變式
有人可以解釋用於計算循環不變的方法嗎?
什麼循環不變應該包含一個「有用」的?
我只處理簡單的例子,發現不變量並證明部分和完全校正的例子,如:
{ i ≥ 0 } while i > 0 do i := i−1 { i = 0 }
如果我們談論的是霍爾的邏輯對證明的程序(部分)的正確性,那麼你使用的前提和後置條件,分解程序並使用霍爾的邏輯推理系統的規則創建和證明感應式。
在你的榜樣,你要使用規則
{p} while b do S {p^not(b)} <=> {p^b} S {p}
在你的情況下分解程序
所以在下一步我們推斷{i ≥ 0^i > 0} i := i−1 {i ≥ 0}
。這可以進一步推斷和證明相當容易。 我希望這可以幫助。
是有用的(爲你的推理)是不變的要點。所以,看看你想要證明的後置條件,並試圖構成一個不變條件,這將有助於你逐步達到後置條件,並且可以從循環的代碼中推導出來。
我不知道這是否會回答你的問題,但萬一它:
非正式的解釋正式的東西:)。不變量在開始和結束時都不成立,但只要輸入滿足前提條件,它們就應該在程序的每個陳述之後都有效。 Hoare的Logic基於簡單的程序模式,具體的實現語言並不重要。 – 2011-01-25 00:41:16