簡體   English   中英

程序和后置條件中帶有未知變量的 Hoare 三元組的有效性?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM