2017-10-18 130 views
-1

這裏是例子:公理語義 - 如何計算最弱的前提

x = y + 1; 
y = y - 2; 
{y < 3} 

什麼是這個例子中的最弱前置條件?

我想也許y < 3是一個答案。

如果不是,你能詳細告訴我爲什麼嗎?

+1

你爲什麼認爲它可能是?你認爲你的參考文件告訴你如何在這裏找到wp?請閱讀[問]和谷歌'stackexchange作業'。 – philipxy

回答

1

這是基於對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 =,因爲這樣可以更容易地將方程的分配誤認爲是我最初混淆的一部分。

+0

肯定最弱的先決條件必須提到y?直覺上,最弱的先決條件是'y <5'。你的'爲y解決'步驟是無效的,'='符號是一項任務,而不是算術平等。沒有提及'x',因此'wp(x = y + 1; y <5)= y <5',我們就完成了。 – Kris

+1

這是有道理的。我已應用您的更正。 – jq170727

+0

你還有一個錯字或誤解。代碼意味着'x:= y + 1; y:= y - 2;'。發佈條件是* y <3 *。您的參考使用WP(代碼,條件)。所以WP的最後一個分號應該是逗號。 PS請保持您的問題或答案以最好的自包含形式更新。舊版本可通過「編輯」鏈接訪問。此外,這個問題「不顯示任何研究努力」,倒退。 – philipxy