Axiomatic Semantics - 如何计算最弱的前提条件

时间:2017-10-18 05:33:32

标签: semantics preconditions formal-methods

以下是示例:

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

这个例子的最弱前提是什么?

我想也许y&lt; 3是答案。

如果没有,你能详细告诉我原因吗?

1 个答案:

答案 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 =,因为这样会更容易将错误的分配误认为是我最初混淆的一部分。