[英]Validity of Hoare triple with unknown variable in program and post-condition?
我不確定x
在這個 Hoare 三元組中的值: { a = 0 } while (x > a) do (x:= x − 1) { x = 0 }
。
關於如何證明這個 Hoare 三元組是否有效,我有 2 個潛在的想法:
x
為 0,則 Hoare 三元組有效,或者x
是任意值,我們將其分解為案例並得出結論,霍爾三元組不適用於x
的所有值上述方法是否有效,或者我應該采取另一種方法嗎?
所以你有了
{a = 0}
while (x > a)
x := x - 1
{x = 0}
讓我們嘗試使用循環不變式x ≥ a & a = 0
並將其縮寫為I
。 當我們注釋程序時,我們得到:
{a = 0}
{I} # Loop invariant should be true before the loop
while (x > a)
{I & x > a} # Loop invariant + condition holds
x := x - 1
{I} # Loop invariant should be true after each iteration
{I & x ≤ a} # Loop invariant + negation of loop condition
{x = 0}
現在我們需要將最弱的前提條件應用於x:= x - 1
:
{a = 0}
{I}
while (x > a)
{I & x > a}
{x - 1 ≥ a & a = 0} # I[x-1/x]
x := x - 1
{I}
{I & x ≤ a}
{x = 0}
我們最終有以下證明義務:
(a = 0) ⇒ (x ≥ a & a = 0)
成立,因為x ∈ ℕ
(x ≥ a & a = 0) ⇒ (x - 1 > a & a = 0)
成立。 證明微不足道。(x ≥ a & a = 0 & x ≤ a) ⇒ (x = 0)
成立。 證明微不足道。所以原來的霍爾三元組成立。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.