以下是示例:
x = y + 1;
y = y - 2;
{y < 3}
这个例子的最弱前提是什么?
我想也许y&lt; 3是答案。
如果没有,你能详细告诉我原因吗?
答案 0 :(得分: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 =
,因为这样会更容易将错误的分配误认为是我最初混淆的一部分。