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

文章目录

  • 霍尔三元组
    • 案例1
    • 案例2
  • 逻辑
    • 推导规则
    • forward v.s. backward
      • forward
      • backward
    • rule of assignment
    • rules of consequence
    • 结合上述两个 rule
    • rule of sequencing
    • 更大的程序案例
    • skip rule
    • conditional rule
      • 案例

高完整性系统——霍尔逻辑_第1张图片
高完整性系统——霍尔逻辑_第2张图片

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

霍尔三元组

高完整性系统——霍尔逻辑_第3张图片

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

案例1

在这里插入图片描述

  • 如果 x=2 是满足的
  • 那么经过表达式 x:=x+1 之后,什么式子会 hold?
    高完整性系统——霍尔逻辑_第4张图片
  • 这里 x=3 被称为是 ”给定 x=2 作为 precondition 条件下的 strongest postcondition

案例2

高完整性系统——霍尔逻辑_第5张图片

  • 同样的方式:当 x=1 作为 postcondition holds 的时候,precondition 我们也很容易推出就是 x=0
    高完整性系统——霍尔逻辑_第6张图片

  • 但是这里的 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}

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

逻辑

高完整性系统——霍尔逻辑_第7张图片

推导规则

高完整性系统——霍尔逻辑_第8张图片

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

高完整性系统——霍尔逻辑_第9张图片

  • 这个式子表明 true 天生就 holds
  • 也可以表示 我们假设这种情况是 true,因为不存在任何的前提条件,所以可以看成 assumption
    高完整性系统——霍尔逻辑_第10张图片
  • 如果 A A A holds, 同时 B B B holds, 那么 A ^ B 也 holds

forward v.s. backward

forward

高完整性系统——霍尔逻辑_第11张图片
高完整性系统——霍尔逻辑_第12张图片

  • 对于前面两个 forward 推理还不困难
    高完整性系统——霍尔逻辑_第13张图片

  • 但是对于下面这个
    高完整性系统——霍尔逻辑_第14张图片

backward

高完整性系统——霍尔逻辑_第15张图片
高完整性系统——霍尔逻辑_第16张图片

  • 我们可以从 post 的结果很容易推出 pre 的结果
    高完整性系统——霍尔逻辑_第17张图片

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

  • 同样的:
    高完整性系统——霍尔逻辑_第18张图片

  • 对于这个式子,我们也可以轻易的写出
    高完整性系统——霍尔逻辑_第19张图片

  • 再看前面 forward 推理很难的那个问题
    高完整性系统——霍尔逻辑_第20张图片

  • 这里我们只需要
    高完整性系统——霍尔逻辑_第21张图片

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

rule of assignment

高完整性系统——霍尔逻辑_第22张图片

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

  • 那么我们把 post condition 中的 x 全部用 E 来代替即可
    高完整性系统——霍尔逻辑_第23张图片

  • 这个式子中 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}

  • 再练一个:
    高完整性系统——霍尔逻辑_第24张图片
    高完整性系统——霍尔逻辑_第25张图片

rules of consequence

高完整性系统——霍尔逻辑_第26张图片

  • 根据我们前面讨论的 forwardbackward 我们可以通过这个公式推导出:
    高完整性系统——霍尔逻辑_第27张图片

  • 如果我们满足了下面的这种情况,我们同样能够得到
    高完整性系统——霍尔逻辑_第28张图片
    高完整性系统——霍尔逻辑_第29张图片

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

  • 由此高完整性系统——霍尔逻辑_第30张图片

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

结合上述两个 rule

高完整性系统——霍尔逻辑_第31张图片

  • 假设我们要证明:
    高完整性系统——霍尔逻辑_第32张图片

  • 首先我们先把这个式子作为 consequence rule 的下半部分,那么也就是 P ′ = { x = 0 } P'=\{x=0\} P={x=0}, Q ′ = { x > 0 } Q'=\{x>0\} Q={x>0}
    高完整性系统——霍尔逻辑_第33张图片

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

  • 所以公式变成了下述:
    高完整性系统——霍尔逻辑_第34张图片

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

  • 接下来对下图中的红框中的部分使用 assignement axiom
    高完整性系统——霍尔逻辑_第35张图片

  • { ? 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 的部分,就可以得到:
    高完整性系统——霍尔逻辑_第36张图片
    高完整性系统——霍尔逻辑_第37张图片

  • 证明完成

  • 总结以下上面的证明逻辑
    高完整性系统——霍尔逻辑_第38张图片

rule of sequencing

高完整性系统——霍尔逻辑_第39张图片

  • 证明这一类题目的时候我们通常还是从后面一个部分开始,backward 的方式进行证明
    高完整性系统——霍尔逻辑_第40张图片
    • 证明开始:
      在这里插入图片描述
  • 首先利用 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
    高完整性系统——霍尔逻辑_第41张图片
  • 现在还不能对对下图中框选的部分进行 assign rule,因为 assignment rule 只能对 single 的步骤进行,因此我们现在要对下图中框选的部分进行 rule of sequencing

高完整性系统——霍尔逻辑_第42张图片

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

更大的程序案例

  • 下列的程序表示的意思就是一个 swap 程序
    高完整性系统——霍尔逻辑_第49张图片
    高完整性系统——霍尔逻辑_第50张图片
    高完整性系统——霍尔逻辑_第51张图片
  • 其实这个证明就相当于在每两个 s 之间增加了一个中间项,然后需要逐一通过 assignment rule 来证明

高完整性系统——霍尔逻辑_第52张图片
高完整性系统——霍尔逻辑_第53张图片
高完整性系统——霍尔逻辑_第54张图片

高完整性系统——霍尔逻辑_第55张图片
高完整性系统——霍尔逻辑_第56张图片
高完整性系统——霍尔逻辑_第57张图片
高完整性系统——霍尔逻辑_第58张图片
高完整性系统——霍尔逻辑_第59张图片

skip rule

高完整性系统——霍尔逻辑_第60张图片

conditional rule

高完整性系统——霍尔逻辑_第61张图片

案例

高完整性系统——霍尔逻辑_第62张图片
高完整性系统——霍尔逻辑_第63张图片

  • 还是首先使用 consequence rule
  • 这样我们就相当于在 precondition 和 后续的运算之间加了个 ? P ?P ?P
  • 高完整性系统——霍尔逻辑_第64张图片
  • 然后我们根据 conditional rule
    高完整性系统——霍尔逻辑_第65张图片
    高完整性系统——霍尔逻辑_第66张图片

你可能感兴趣的:(软件工程学习内容,高完整性系统,霍尔逻辑)