高完整性系统——霍尔逻辑


在这里插入图片描述
在这里插入图片描述

  • 要证明这个程序需要从上往下进行,先单独证明 f:=1, i:=1 再单独证明 while 中的内容,while
    中的内容需要一条条单独证明

霍尔三元组

在这里插入图片描述

  • 代表:当 P 满足,执行 S 后,Q 就会被满足(holds)

案例1

在这里插入图片描述

  • 如果 x=2 是满足的
  • 那么经过表达式 x:=x+1 之后,什么式子会 hold?
    在这里插入图片描述
  • 这里 x=3 被称为是 ”给定 x=2 作为 precondition 条件下的 strongest postcondition

案例2

在这里插入图片描述

  • 同样的方式:当 x=1 作为 postcondition holds 的时候,precondition 我们也很容易推出就是 x=0
    在这里插入图片描述

  • 但是这里的 precondition 被是 weakest precondition

  • 这是因为,我们反向推理(backwards) 的难度低于正向推理 (forward)

  • 还有一种理解方法就是:
    x > 5 = > x > 3 x>5 => x>3 x>5=>x>3 因此我们说 x > 5 x>5 x>5 是更加严格的条件;也就是更加 strong 的条件。同样的我们来看这个 post condition

  • 如果我们能够通过 precondition 得到 x=3 我们可以根据 x=3 这个条件推导出其他更加宽松的 postcondition,比如 x > 2 x>2 x>2,此时我们的式子可以写成这样:
    { x = 2 } x : = x + 1 { x > 2 } \{x=2\} x:=x+1 \{x>2\} { x=2}x:=x+1{ x>2}

  • 这是完全没有问题的,而 x > 2 x>2 x>2 的条件是不如 x = 3 x=3 x=3 strong

  • 同样的道理我们看为什么是 weakest precondition:因为当我们用一个比现在 precondition 更严格一点的条件,这个推导式子也同样成立:
    x + 1 = 3 = > x = 2 x+1=3 => x=2 x+1=3=>x=2

  • 所以我们认为 x + 1 = 3 x+1=3 x+1=3 这个条件比 x = 2 x=2 x=2 严格,于是我们带到原式子中:
    { x + 1 = 3 } x : = x + 1 { x = 3 } \{x+1=3\} x:=x+1 \{x=3\} { x+1=3}x:=x+1{ x=3}

  • 这个式子当然也是成立的

逻辑

在这里插入图片描述

推导规则

在这里插入图片描述

  • 如果 A A A holds(为true),同时 A = > B A=>B A=>B 也为 true,那么我们就能推导出 B B B 也为 true
  • “——” 代表 推导关系

在这里插入图片描述

  • 这个式子表明 true 天生就 holds
  • 也可以表示 我们假设这种情况是 true,因为不存在任何的前提条件,所以可以看成 assumption
    在这里插入图片描述
  • 如果 A A A holds, 同时 B B B holds, 那么 A ^ B 也 holds

forward v.s. backward

forward

在这里插入图片描述
在这里插入图片描述

  • 对于前面两个 forward 推理还不困难
    在这里插入图片描述

  • 但是对于下面这个
    在这里插入图片描述

backward

在这里插入图片描述
在这里插入图片描述

  • 我们可以从 post 的结果很容易推出 pre 的结果
    在这里插入图片描述

  • 尤其是第二个式子,我们只需要根据结果x=1 和条件 x:=x+1 甚至不需要计算出来 x=0 我们只需要把 x:=x+1 的过程反过来就可以退出 pre

  • 同样的:
    在这里插入图片描述

  • 对于这个式子,我们也可以轻易的写出
    在这里插入图片描述

  • 再看前面 forward 推理很难的那个问题
    在这里插入图片描述

  • 这里我们只需要
    在这里插入图片描述

  • 有上面的现象我们可以得到 rule of assignment

rule of assignment

在这里插入图片描述

  • P P P 是关于 x x x 的公式,经过将 x:=E 这个过程之后 P P P holds,

  • 那么我们把 post condition 中的 x 全部用 E 来代替即可
    在这里插入图片描述

  • 这个式子中 E = x + 1 E=x+1 E=x+1 所以把 post condition 中的 x = 1 x=1 x=1 中的所有 x x x 替换成 E E E 作为 precondition x + 1 = 1 x+1=1 x+1=1

  • 所以结果就是:
    { x + 1 = 1 } x : = x + 1 { x = 1 } \{x+1=1\} x:=x+1\{x=1\} { x+1=1}x:=x+1{ x=1}
    { x = 0 } x : = x + 1 { x = 1 } \{x=0\}x:=x+1\{x=1\} { x=0}x:=x+1{ x=1}

  • 再练一个:
    在这里插入图片描述
    在这里插入图片描述

rules of consequence

在这里插入图片描述

  • 根据我们前面讨论的 forwardbackward 我们可以通过这个公式推导出:
    在这里插入图片描述

  • 如果我们满足了下面的这种情况,我们同样能够得到
    在这里插入图片描述
    在这里插入图片描述

  • 因为 x = 0 x=0 x=0 的条件比 x > = 0 x>=0 x>=0 要严格,因此作为 precondition 也是可行的

  • 由此在这里插入图片描述

  • 解析一下: P ′ P' P P P P 的子集,同样的 Q Q Q Q ′ Q' Q 的子集,因此 P P P 的范围要收窄,而 Q Q Q 的范围要扩大。

结合上述两个 rule

在这里插入图片描述

  • 假设我们要证明:
    在这里插入图片描述

  • 首先我们先把这个式子作为 consequence rule 的下半部分,那么也就是 P ′ = { x = 0 } P'=\{x=0\} P={ x=0}, Q ′ = { x > 0 } Q'=\{x>0\} Q={ x>0}
    在这里插入图片描述

  • 我们接下来不改变 post condition,当我们想使用 consequence rule 的时候我们需要找到 P ′ = > P P'=>P P=>P ,而我们现在有 P ′ = { x = 0 } P' = \{x=0\} P={ x=0}

  • 所以公式变成了下述:
    在这里插入图片描述

  • 假设有一个中间变量 P P P 是被推导出来的

  • 接下来对下图中的红框中的部分使用 assignement axiom
    在这里插入图片描述

  • { ? P } x : = x + 1 { x > 0 } \{?P\} x:=x+1 \{x>0\} { ?P}x:=x+1{ x>0} 可以推导出 P = x + 1 > 0 P=x+1>0 P=x+1>0

  • 然后将这个带换到 x = 0 = > ? P x=0 => ?P x=0=>?P 的部分,就可以得到:
    在这里插入图片描述
    在这里插入图片描述

  • 证明完成

  • 总结以下上面的证明逻辑
    在这里插入图片描述

rule of sequencing

在这里插入图片描述

  • 证明这一类题目的时候我们通常还是从后面一个部分开始,backward 的方式进行证明
    在这里插入图片描述
    • 证明开始:
      在这里插入图片描述
  • 首先利用 rule of consequence S 1 ; S 2 S1; S2 S1;S2 看成一个整体,此时 P ′ = { x = 0 } , Q ′ = { X = 2 } P'= \{x=0\}, Q'=\{X=2\} P={ x=0},Q={ X=2}所以这个时候我们还是需要看 P ′ = > P P'=>P P=>P 所以我们还是假设有一个中间的变量 ? P ?P ?P
    在这里插入图片描述
  • 现在还不能对对下图中框选的部分进行 assign rule,因为 assignment rule 只能对 single 的步骤进行,因此我们现在要对下图中框选的部分进行 rule of sequencing

在这里插入图片描述

  • 并得到:
    在这里插入图片描述
  • 我们引入了一个中间变量 ? R ?R ?R,同时将中间推理拆分成两个 individual 的部分
  • 这个时候,请注意下图中框选的部分:
    在这里插入图片描述
  • 这里有两个未知的部分 ? P , ? R ?P, ?R ?P,?R 因此,我们要寻求别的突破口,其实也非常明显,我们可以从最后的那个式子的 ? R ?R ?R 开始使用 assignment rule
    在这里插入图片描述
  • 当这个证明出来之后,顺理成章对左上角包含 ? P ?P ?P 的式子再使用 assignment rule 就可以了
    在这里插入图片描述
  • 现在只剩下最左边的一部分了:
    在这里插入图片描述
  • 事实上他是恒成立的:
    在这里插入图片描述

更大的程序案例

  • 下列的程序表示的意思就是一个 swap 程序
    在这里插入图片描述
    在这里插入图片描述
  • 其实这个证明就相当于在每两个 s 之间增加了一个中间项,然后需要逐一通过 assignment rule 来证明

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

skip rule

在这里插入图片描述

conditional rule

在这里插入图片描述

案例


在这里插入图片描述

  • 还是首先使用 consequence rule
  • 这样我们就相当于在 precondition 和 后续的运算之间加了个 ? P ?P ?P
  • 在这里插入图片描述
  • 然后我们根据 conditional rule
    在这里插入图片描述
    在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_42902997/article/details/131175778