验证:结合正确性陈述

时间:2012-04-03 21:30:02

标签: assert verification proof correctness

问题是:

        P1 {C} Q1
-------------------------
   P1 && P2 {C} Q1||Q2

此规则有效吗?

我该怎样处理这样的事情?我能想到的只是试图找到一个错误的例子。

我一直试图想出它,以便P1&&amp ;; P2使Q1和Q2都假,但我想不出来。因此,我倾向于这是有效的,但我不知道该去哪里证明它...这个类的文本是绝对的垃圾,我找不到任何在线资源的正确性陈述的组合......

1 个答案:

答案 0 :(得分:2)

我假设这些是Hoare三元组,通常表示为{P} C {Q};我还使用Wikipedia作为参考。

所以你的规则:

      {P1} C {Q1}
-----------------------
{P1 && P2} C {Q1 || Q2}

有效!

直观地说,如果你解读逻辑就很清楚了:

  • {P1} C {Q1}表示:只要P1成立,Q1将在执行命令C后保留。
  • 您知道如果P1 && P2成立,P1成立。
  • 您知道如果Q1成立,Q1 || Q2成立。

您可以将这些语句拼凑在一起,看看为什么您的规则必须有效:P1 && P2隐含P1,因此当您执行C时,您会得到假设Q1 ,这意味着Q1 || Q2

因此{P1 && P2} C {Q1 || Q2},只要您假设{P1} C {Q1},这正是您的规则所声明的内容。

您可以使用以下规则(摘自维基百科):

后果规则

P' -> P, {P} C {Q}, Q -> Q'
---------------------------
        {P'} C {Q'}

您只需将P'设为P1 && P2,将P设为P1,将Q设为Q1,最后设为Q'Q1 || Q2