這裏是例子:公理語義 - 如何計算最弱的前提
x = y + 1;
y = y - 2;
{y < 3}
什麼是這個例子中的最弱前置條件?
我想也許y < 3是一個答案。
如果不是,你能詳細告訴我爲什麼嗎?
這裏是例子:公理語義 - 如何計算最弱的前提
x = y + 1;
y = y - 2;
{y < 3}
什麼是這個例子中的最弱前置條件?
我想也許y < 3是一個答案。
如果不是,你能詳細告訴我爲什麼嗎?
這是基於對Predicate transformer semantics
WP(x := y + 1; y := y - 2, y < 3) # Initial problem
= WP(x := y + 1, WP(y := y - 2, y < 3)) # Sequence rule
= WP(x := y + 1, y < 5) # Assignment rule
= WP(x - 1 = y, y < 5) # solve for y <--- this is wrong!
= WP(x - 1 < 5) # Assignment rule
= x < 6 # solve for x
快速閱讀在回答我的第一次嘗試誤用。然而自從Kris作爲x := y + 1
指出的是分配給x
不影響y
最弱的前提條件y
應該只是y < 5
所以正確答案應該是
WP(x := y + 1; y := y - 2, y < 3) # Initial problem
= WP(x := y + 1, WP(y := y - 2, y < 3)) # Sequence rule
= WP(x := y + 1, y < 5) # Assignment rule
= y < 5
還要感謝philipxy用於識別我的語法錯誤,尤其是:=
vs =
,因爲這樣可以更容易地將方程的分配誤認爲是我最初混淆的一部分。
肯定最弱的先決條件必須提到y?直覺上,最弱的先決條件是'y <5'。你的'爲y解決'步驟是無效的,'='符號是一項任務,而不是算術平等。沒有提及'x',因此'wp(x = y + 1; y <5)= y <5',我們就完成了。 – Kris
這是有道理的。我已應用您的更正。 – jq170727
你還有一個錯字或誤解。代碼意味着'x:= y + 1; y:= y - 2;'。發佈條件是* y <3 *。您的參考使用WP(代碼,條件)。所以WP的最後一個分號應該是逗號。 PS請保持您的問題或答案以最好的自包含形式更新。舊版本可通過「編輯」鏈接訪問。此外,這個問題「不顯示任何研究努力」,倒退。 – philipxy
你爲什麼認爲它可能是?你認爲你的參考文件告訴你如何在這裏找到wp?請閱讀[問]和谷歌'stackexchange作業'。 – philipxy