【问题标题】:Axiomatic Semantics - How to calculate a weakest precondition公理语义 - 如何计算最弱的前提条件
【发布时间】:2018-03-29 22:16:24
【问题描述】:

示例如下:

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

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

我认为也许 y

如果不是,你能详细告诉我原因吗?

【问题讨论】:

  • 你认为为什么会这样?您认为您的参考资料告诉您如何在这里找到 wp?请阅读How to Ask 和 google 'stackexchange homework'。

标签: semantics preconditions formal-methods


【解决方案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 的赋值,这不会影响yy 的最弱前提条件应该只是y &lt; 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 识别我的语法中的错误,尤其是 :==,因为这让我更容易错误地分配方程式,这是我最初困惑的一部分。

【讨论】:

  • 肯定最弱的前提必须提到y?直观地说,最弱的前提是y &lt; 5。您的“解决 y”步骤无效,“=”符号是赋值,而不是算术等式。没有提到“x”,因此wp(x = y + 1; y &lt; 5) = y &lt; 5,我们完成了。
  • 您仍有错字或误解。代码表示x := y + 1; y := y - 2;。后置条件是 y 。您的参考使用 WP(代码,条件)。所以你的 WP 的最后一个分号应该是逗号。 PS请以最好的独立形式保持您的问题或答案是最新的。旧版本可通过“已编辑”链接访问。此外,这个问题“没有显示任何研究工作”,投反对票。
  • 谢谢。语法绝对是个问题,我同意如果 OP 展示更多他们的工作会更好。我离开旧版本主要是为了 OP 和像我这样第一次发现这个主题的其他人,以便他们看到并避免错误。
猜你喜欢
  • 2022-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-30
  • 1970-01-01
相关资源
最近更新 更多