软件可靠性 - 霍尔逻辑证明整数除法

程序:整数除法

目标是计算 x 1 x_1 x1 除以 x 2 x_2 x2 的整数部分。程序如下:

y1 := 0;
y2 := x1;
while y2 >= x2 do
  y1 := y1 + 1;
  y2 := y2 - x2;
end

证明目标

程序在执行结束时 y 1 y1 y1 x 1 x_1 x1 除以 x 2 x_2 x2 的整数部分,且 y 2 y2 y2 是余数。

断言注释程序

为程序添加断言,明确每一步的前置条件和后置条件:

{x1 >= 0 ∧ x2 > 0}
y1 := 0;
{y1 = 0 ∧ x1 >= 0 ∧ x2 > 0}
y2 := x1;
{x1 = y1 * x2 + y2 ∧ y2 >= 0 ∧ x2 > 0}
while y2 >= x2 do
  {x1 = y1 * x2 + y2 ∧ y2 >= x2}
  y1 := y1 + 1;
  {x1 = y1 * x2 + y2 ∧ y2 >= x2}
  y2 := y2 - x2;
  {x1 = y1 * x2 + y2 ∧ y2 >= 0}
end
{x1 = y1 * x2 + y2 ∧ y2 < x2 ∧ y2 >= 0}

证明树的构造

在这里插入图片描述

目标1:顺序组合

将整个程序分解为初始化部分 S 1 S_1 S1 和 while 循环部分 S 2 S_2 S2
{ x 1 ≥ 0 ∧ x 2 > 0 } S 1 { x 1 = y 1 ⋅ x 2 + y 2 ∧ y 2 ≥ 0 } , { x 1 = y 1 ⋅ x 2 + y 2 ∧ y 2 ≥ 0 } S 2 { x 1 = y 1 ⋅ x 2 + y 2 ∧ y 2 < x 2 ∧ y 2 ≥ 0 } { x 1 ≥ 0 ∧ x 2 > 0 } S 1 ; S 2 { x 1 = y 1 ⋅ x 2 + y 2 ∧ y 2 < x 2 ∧ y 2 ≥ 0 } \frac{\{x1 \geq 0 \land x2 > 0\} S_1 \{x1 = y1 \cdot x2 + y2 \land y2 \geq 0\}, \{x1 = y1 \cdot x2 + y2 \land y2 \geq 0\} S_2 \{x1 = y1 \cdot x2 + y2 \land y2 < x2 \land y2 \geq 0\}}{\{x1 \geq 0 \land x2 > 0\} S_1; S_2 \{x1 = y1 \cdot x2 + y2 \land y2 < x2 \land y2 \geq 0\}} {x10x2>0}S1;S2{x1=y1x2+y2y2<x2y20}{x10x2>0}S1{x1=y1x2+y2y20},{x1=y1x2+y2y20}S2{x1=y1x2+y2y2<x2y20}

其中:

ϕ = { x 1 ≥ 0 ∧ x 2 > 0 } \phi = \{x1 \geq 0 \land x2 > 0\} ϕ={x10x2>0}

S 1 S_1 S1:初始化部分

χ = { x 1 = y 1 ⋅ x 2 + y 2 ∧ y 2 ≥ 0 } \chi = \{x1 = y1 \cdot x2 + y2 \land y2 \geq 0\} χ={x1=y1x2+y2y20}

S 2 S_2 S2:while 循环部分

ψ = { x 1 = y 1 ⋅ x 2 + y 2 ∧ y 2 < x 2 ∧ y 2 ≥ 0 } \psi = \{x1 = y1 \cdot x2 + y2 \land y2 < x2 \land y2 \geq 0\} ψ={x1=y1x2+y2y2<x2y20}

这个证明规则表示:如果我们能证明在前置条件 ϕ \phi ϕ 下,程序 S 1 S_1 S1 能够确保中间条件 χ \chi χ,并且在中间条件 χ \chi χ 下,程序 S 2 S_2 S2 能够确保后置条件 ψ \psi ψ,那么我们就可以得出结论:在前置条件 ϕ \phi ϕ 下,程序 S 1 ; S 2 S_1; S_2 S1;S2 能够确保后置条件 ψ \psi ψ

目标2:顺序组合

我们希望证明:
{ x 1 ≥ 0 ∧ x 2 > 0 } y 1 : = 0 { x 1 ≥ 0 ∧ x 2 > 0 ∧ y 1 = 0 } , { x 1 ≥ 0 ∧ x 2 > 0 ∧ y 1 = 0 } y 2 : = x 1 { x 1 = y 1 ⋅ x 2 + y 2 ∧ y 2 ≥ 0 } { x 1 ≥ 0 ∧ x 2 > 0 } y 1 : = 0 ; y 2 : = x 1 { x 1 = y 1 ⋅ x 2 + y 2 ∧ y 2 ≥ 0 } \frac{\{x1 \geq 0 \land x2 > 0\} y1 := 0 \{x1 \geq 0 \land x2 > 0 \land y1 = 0\}, \{x1 \geq 0 \land x2 > 0 \land y1 = 0\} y2 := x1 \{x1 = y1 \cdot x2 + y2 \land y2 \geq 0\}}{\{x1 \geq 0 \land x2 > 0\} y1 := 0; y2 := x1 \{x1 = y1 \cdot x2 + y2 \land y2 \geq 0\}} {x10x2>0}y1:=0;y2:=x1{x1=y1x2+y2y20}{x10x2>0}y1:=0{x10x2>0y1=0},{x10x2>0y1=0}y2:=x1{x1=y1x2+y2y20}

这表示如果我们能证明在前置条件 { x 1 ≥ 0 ∧ x 2 > 0 } \{x1 \geq 0 \land x2 > 0\} {x10x2>0} 下,语句 y 1 : = 0 y1 := 0 y1:=0 能够确保中间条件 { x 1 ≥ 0 ∧ x 2 > 0 ∧ y 1 = 0 } \{x1 \geq 0 \land x2 > 0 \land y1 = 0\} {x10x2>0y1=0},并且在中间条件 { x 1 ≥ 0 ∧ x 2 > 0 ∧ y 1 = 0 } \{x1 \geq 0 \land x2 > 0 \land y1 = 0\} {x10x2>0y1=0} 下,语句 y 2 : = x 1 y2 := x1 y2:=x1 能够确保后置条件 { x 1 = y 1 ⋅ x 2 + y 2 ∧ y 2 ≥ 0 } \{x1 = y1 \cdot x2 + y2 \land y2 \geq 0\} {x1=y1x2+y2y20},那么我们可以得出结论:在前置条件 { x 1 ≥ 0 ∧ x 2 > 0 } \{x1 \geq 0 \land x2 > 0\} {x10x2>0} 下,程序 y 1 : = 0 ; y 2 : = x 1 y1 := 0; y2 := x1 y1:=0;y2:=x1 能够确保后置条件 { x 1 = y 1 ⋅ x 2 + y 2 ∧ y 2 ≥ 0 } \{x1 = y1 \cdot x2 + y2 \land y2 \geq 0\} {x1=y1x2+y2y20}

分步证明

第一步:验证 y 1 : = 0 y1 := 0 y1:=0
第二步:验证 y 2 : = x 1 y2 := x1 y2:=x1

目标3:左强化(初始化部分第1步)

在左强化规则中,我们希望将前置条件 ϕ \phi ϕ 加强为 ϕ ′ \phi' ϕ

ϕ → ϕ ′ , { ϕ ′ } S { ψ } { ϕ } S { ψ } \frac{\phi \rightarrow \phi', \{\phi'\} S \{\psi\}}{\{\phi\} S \{\psi\}} {ϕ}S{ψ}ϕϕ,{ϕ}S{ψ}

左强化规则表示:如果我们能证明 ϕ \phi ϕ 蕴含 ϕ ′ \phi' ϕ,并且在前置条件 ϕ ′ \phi' ϕ 下,程序 S S S 能够确保后置条件 ψ \psi ψ,那么我们就可以得出结论:在前置条件 ϕ \phi ϕ 下,程序 S S S 能够确保后置条件 ψ \psi ψ

详细解释

我们希望证明:
( x 1 ≥ 0 ∧ x 2 > 0 ) → ( x 1 ≥ 0 ∧ x 2 > 0 ∧ 0 ≡ 0 ) , { x 1 ≥ 0 ∧ x 2 > 0 ∧ 0 ≡ 0 } y 1 : = 0 { x 1 ≥ 0 ∧ x 2 > 0 ∧ y 1 = 0 } { x 1 ≥ 0 ∧ x 2 > 0 } y 1 : = 0 { x 1 ≥ 0 ∧ x 2 > 0 ∧ y 1 = 0 } \frac{(x1 \geq 0 \land x2 > 0) \rightarrow (x1 \geq 0 \land x2 > 0 \land 0 \equiv 0), \{x1 \geq 0 \land x2 > 0 \land 0 \equiv 0\} y1 := 0 \{x1 \geq 0 \land x2 > 0 \land y1 = 0\}}{\{x1 \geq 0 \land x2 > 0\} y1 := 0 \{x1 \geq 0 \land x2 > 0 \land y1 = 0\}} {x10x2>0}y1:=0{x10x2>0y1=0}(x10x2>0)(x10x2>000),{x10x2>000}y1:=0{x10x2>0y1=0}

这表示如果我们能证明在前置条件 { x 1 ≥ 0 ∧ x 2 > 0 } \{x1 \geq 0 \land x2 > 0\} {x10x2>0} 下, { x 1 ≥ 0 ∧ x 2 > 0 } \{x1 \geq 0 \land x2 > 0\} {x10x2>0} 蕴含 { x 1 ≥ 0 ∧ x 2 > 0 ∧ 0 ≡ 0 } \{x1 \geq 0 \land x2 > 0 \land 0 \equiv 0\} {x10x2>000},并且在前置条件 { x 1 ≥ 0 ∧ x 2 > 0 ∧ 0 ≡ 0 } \{x1 \geq 0 \land x2 > 0 \land 0 \equiv 0\} {x10x2>000} 下,语句 y 1 : = 0 y1 := 0 y1:=0 能够确保后置条件 { x 1 ≥ 0 ∧ x 2 > 0 ∧ y 1 = 0 } \{x1 \geq 0 \land x2 > 0 \land y1 = 0\} {x10x2>0y1=0},那么我们可以得出结论:在前置条件 { x 1 ≥ 0 ∧ x 2 > 0 } \{x1 \geq 0 \land x2 > 0\} {x10x2>0} 下,程序 y 1 : = 0 y1 := 0 y1:=0 能够确保后置条件 { x 1 ≥ 0 ∧ x 2 > 0 ∧ y 1 = 0 } \{x1 \geq 0 \land x2 > 0 \land y1 = 0\} {x10x2>0y1=0}

证明过程

第一步:证明前置条件蕴含关系

首先,我们需要证明前置条件 { x 1 ≥ 0 ∧ x 2 > 0 } \{x1 \geq 0 \land x2 > 0\} {x10x2>0} 蕴含 { x 1 ≥ 0 ∧ x 2 > 0 ∧ 0 ≡ 0 } \{x1 \geq 0 \land x2 > 0 \land 0 \equiv 0\} {x10x2>000}

( x 1 ≥ 0 ∧ x 2 > 0 ) → ( x 1 ≥ 0 ∧ x 2 > 0 ∧ 0 ≡ 0 ) (x1 \geq 0 \land x2 > 0) \rightarrow (x1 \geq 0 \land x2 > 0 \land 0 \equiv 0) (x10x2>0)(x10x2>000)
显然,对于任何满足 x 1 ≥ 0 x1 \geq 0 x10 x 2 > 0 x2 > 0 x2>0 的情况, 0 ≡ 0 0 \equiv 0 00 总是成立,因此该蕴含关系是正确的。

目标4 : 赋值

第二步:验证赋值语句 y 1 : = 0 y1 := 0 y1:=0

接下来,我们需要验证在前置条件 { x 1 ≥ 0 ∧ x 2 > 0 ∧ 0 ≡ 0 } \{x1 \geq 0 \land x2 > 0 \land 0 \equiv 0\} {x10x2>000} 下,语句 y 1 : = 0 y1 := 0 y1:=0 能够确保后置条件 { x 1 ≥ 0 ∧ x 2 > 0 ∧ y 1 = 0 } \{x1 \geq 0 \land x2 > 0 \land y1 = 0\} {x10x2>0y1=0}

赋值公理形式:
{ ψ [ e / v ] } v : = e { ψ } \{\psi[e/v]\} v := e \{\psi\} {ψ[e/v]}v:=e{ψ}
应用于 y 1 : = 0 y1 := 0 y1:=0
{ x 1 ≥ 0 ∧ x 2 > 0 ∧ 0 ≡ 0 } y 1 : = 0 { x 1 ≥ 0 ∧ x 2 > 0 ∧ y 1 = 0 } \{x1 \geq 0 \land x2 > 0 \land 0 \equiv 0\} y1 := 0 \{x1 \geq 0 \land x2 > 0 \land y1 = 0\} {x10x2>000}y1:=0{x10x2>0y1=0}
验证:
ψ [ y 1 / 0 ] = ( y 1 = 0 ∧ x 1 ≥ 0 ∧ x 2 > 0 ) \psi[y1/0] = (y1 = 0 \land x1 \geq 0 \land x2 > 0) ψ[y1/0]=(y1=0x10x2>0)
由于赋值 y 1 : = 0 y1 := 0 y1:=0 后,条件 y 1 = 0 ∧ x 1 ≥ 0 ∧ x 2 > 0 y1 = 0 \land x1 \geq 0 \land x2 > 0 y1=0x10x2>0 成立,所以此步成立。

好的,我会重新用 LaTeX 表示,并详细解释每个步骤的推理和证明,确保格式正确。

目标5:左强化(初始化部分第2步)

在这个目标中,我们希望将前置条件 ϕ \phi ϕ 加强为 ϕ ′ \phi' ϕ

ϕ → ϕ ′ , { ϕ ′ } S { ψ } { ϕ } S { ψ } \frac{\phi \rightarrow \phi', \{\phi'\} S \{\psi\}}{\{\phi\} S \{\psi\}} {ϕ}S{ψ}ϕϕ,{ϕ}S{ψ}

左强化规则表示:如果我们能证明 ϕ \phi ϕ 蕴含 ϕ ′ \phi' ϕ,并且在前置条件 ϕ ′ \phi' ϕ 下,程序 S S S 能够确保后置条件 ψ \psi ψ,那么我们就可以得出结论:在前置条件 ϕ \phi ϕ 下,程序 S S S 能够确保后置条件 ψ \psi ψ

详细解释

我们希望证明:

( x 1 ≥ 0 ∧ x 2 > 0 ∧ y 1 = 0 ) → ( x 1 ≡ y 1 ⋅ x 2 + x 1 ∧ x 1 ≥ 0 ) , { x 1 ≡ y 1 ⋅ x 2 + x 1 ∧ x 1 ≥ 0 } y 2 : = x 1 { x 1 ≡ y 1 ⋅ x 2 + y 2 ∧ y 2 ≥ 0 } { x 1 ≥ 0 ∧ x 2 > 0 ∧ y 1 = 0 } y 2 : = x 1 { x 1 ≡ y 1 ⋅ x 2 + y 2 ∧ y 2 ≥ 0 } \frac{(x1 \geq 0 \land x2 > 0 \land y1 = 0) \rightarrow (x1 \equiv y1 \cdot x2 + x1 \land x1 \geq 0), \{x1 \equiv y1 \cdot x2 + x1 \land x1 \geq 0\} y2 := x1 \{x1 \equiv y1 \cdot x2 + y2 \land y2 \geq 0\}}{\{x1 \geq 0 \land x2 > 0 \land y1 = 0\} y2 := x1 \{x1 \equiv y1 \cdot x2 + y2 \land y2 \geq 0\}} {x10x2>0y1=0}y2:=x1{x1y1x2+y2y20}(x10x2>0y1=0)(x1y1x2+x1x10),{x1y1x2+x1x10}y2:=x1{x1y1x2+y2y20}

这表示如果我们能证明在前置条件 { x 1 ≥ 0 ∧ x 2 > 0 ∧ y 1 = 0 } \{x1 \geq 0 \land x2 > 0 \land y1 = 0\} {x10x2>0y1=0} 下, { x 1 ≥ 0 ∧ x 2 > 0 ∧ y 1 = 0 } \{x1 \geq 0 \land x2 > 0 \land y1 = 0\} {x10x2>0y1=0} 蕴含 { x 1 ≡ y 1 ⋅ x 2 + x 1 ∧ x 1 ≥ 0 } \{x1 \equiv y1 \cdot x2 + x1 \land x1 \geq 0\} {x1y1x2+x1x10},并且在前置条件 { x 1 ≡ y 1 ⋅ x 2 + x 1 ∧ x 1 ≥ 0 } \{x1 \equiv y1 \cdot x2 + x1 \land x1 \geq 0\} {x1y1x2+x1x10} 下,语句 y 2 : = x 1 y2 := x1 y2:=x1 能够确保后置条件 { x 1 ≡ y 1 ⋅ x 2 + y 2 ∧ y 2 ≥ 0 } \{x1 \equiv y1 \cdot x2 + y2 \land y2 \geq 0\} {x1y1x2+y2y20},那么我们可以得出结论:在前置条件 { x 1 ≥ 0 ∧ x 2 > 0 ∧ y 1 = 0 } \{x1 \geq 0 \land x2 > 0 \land y1 = 0\} {x10x2>0y1=0} 下,程序 y 2 : = x 1 y2 := x1 y2:=x1 能够确保后置条件 { x 1 ≡ y 1 ⋅ x 2 + y 2 ∧ y 2 ≥ 0 } \{x1 \equiv y1 \cdot x2 + y2 \land y2 \geq 0\} {x1y1x2+y2y20}

证明过程

第一步:证明前置条件蕴含关系

首先,我们需要证明前置条件 { x 1 ≥ 0 ∧ x 2 > 0 ∧ y 1 = 0 } \{x1 \geq 0 \land x2 > 0 \land y1 = 0\} {x10x2>0y1=0} 蕴含 { x 1 ≡ y 1 ⋅ x 2 + x 1 ∧ x 1 ≥ 0 } \{x1 \equiv y1 \cdot x2 + x1 \land x1 \geq 0\} {x1y1x2+x1x10}

( x 1 ≥ 0 ∧ x 2 > 0 ∧ y 1 = 0 ) → ( x 1 ≡ y 1 ⋅ x 2 + x 1 ∧ x 1 ≥ 0 ) (x1 \geq 0 \land x2 > 0 \land y1 = 0) \rightarrow (x1 \equiv y1 \cdot x2 + x1 \land x1 \geq 0) (x10x2>0y1=0)(x1y1x2+x1x10)

显然,对于任何满足 x 1 ≥ 0 x1 \geq 0 x10 x 2 > 0 x2 > 0 x2>0 y 1 = 0 y1 = 0 y1=0 的情况, x 1 = y 1 ⋅ x 2 + x 1 x1 = y1 \cdot x2 + x1 x1=y1x2+x1 成立,因此该蕴含关系是正确的。

第二步:验证赋值语句 y 2 : = x 1 y2 := x1 y2:=x1

接下来,我们需要验证在前置条件 { x 1 ≡ y 1 ⋅ x 2 + x 1 ∧ x 1 ≥ 0 } \{x1 \equiv y1 \cdot x2 + x1 \land x1 \geq 0\} {x1y1x2+x1x10} 下,语句 y 2 : = x 1 y2 := x1 y2:=x1 能够确保后置条件 { x 1 ≡ y 1 ⋅ x 2 + y 2 ∧ y 2 ≥ 0 } \{x1 \equiv y1 \cdot x2 + y2 \land y2 \geq 0\} {x1y1x2+y2y20}

赋值公理形式:
{ ψ [ e / v ] } v : = e { ψ } \{\psi[e/v]\} v := e \{\psi\} {ψ[e/v]}v:=e{ψ}

应用于 y 2 : = x 1 y2 := x1 y2:=x1
{ x 1 ≡ y 1 ⋅ x 2 + x 1 ∧ x 1 ≥ 0 } y 2 : = x 1 { x 1 ≡ y 1 ⋅ x 2 + y 2 ∧ y 2 ≥ 0 } \{x1 \equiv y1 \cdot x2 + x1 \land x1 \geq 0\} y2 := x1 \{x1 \equiv y1 \cdot x2 + y2 \land y2 \geq 0\} {x1y1x2+x1x10}y2:=x1{x1y1x2+y2y20}

验证:
ψ [ y 2 / x 1 ] = ( x 1 = y 1 ⋅ x 2 + x 1 ∧ x 1 ≥ 0 ) \psi[y2/x1] = (x1 = y1 \cdot x2 + x1 \land x1 \geq 0) ψ[y2/x1]=(x1=y1x2+x1x10)

因为 $ y1 = 0 $,所以 $ x1 = 0 \cdot x2 + x1 $ 成立,此步成立。

完整左强化证明

结合上述两步,得到完整的左强化证明:

( x 1 ≥ 0 ∧ x 2 > 0 ∧ y 1 = 0 ) → ( x 1 ≡ y 1 ⋅ x 2 + x 1 ∧ x 1 ≥ 0 ) , { x 1 ≡ y 1 ⋅ x 2 + x 1 ∧ x 1 ≥ 0 } y 2 : = x 1 { x 1 ≡ y 1 ⋅ x 2 + y 2 ∧ y 2 ≥ 0 } { x 1 ≥ 0 ∧ x 2 > 0 ∧ y 1 = 0 } y 2 : = x 1 { x 1 ≡ y 1 ⋅ x 2 + y 2 ∧ y 2 ≥ 0 } \frac{(x1 \geq 0 \land x2 > 0 \land y1 = 0) \rightarrow (x1 \equiv y1 \cdot x2 + x1 \land x1 \geq 0), \{x1 \equiv y1 \cdot x2 + x1 \land x1 \geq 0\} y2 := x1 \{x1 \equiv y1 \cdot x2 + y2 \land y2 \geq 0\}}{\{x1 \geq 0 \land x2 > 0 \land y1 = 0\} y2 := x1 \{x1 \equiv y1 \cdot x2 + y2 \land y2 \geq 0\}} {x10x2>0y1=0}y2:=x1{x1y1x2+y2y20}(x10x2>0y1=0)(x1y1x2+x1x10),{x1y1x2+x1x10}y2:=x1{x1y1x2+y2y20}

目标7:while 规则

我们希望证明:

{ x 1 ≡ y 1 ⋅ x 2 + y 2 ∧ y 2 ≥ x 2 }  while  y 2 ≥ x 2  do  S 3  end  { x 1 ≡ y 1 ⋅ x 2 + y 2 ∧ y 2 < x 2 ∧ y 2 ≥ 0 } \{x1 \equiv y1 \cdot x2 + y2 \land y2 \geq x2\} \ \text{while}\ y2 \geq x2 \ \text{do}\ S_3 \ \text{end} \ \{x1 \equiv y1 \cdot x2 + y2 \land y2 < x2 \land y2 \geq 0\} {x1y1x2+y2y2x2} while y2x2 do S3 end {x1y1x2+y2y2<x2y20}

其中, S 3 S_3 S3 包含两个语句:

  1. y 1 : = y 1 + 1 y1 := y1 + 1 y1:=y1+1
  2. y 2 : = y 2 − x 2 y2 := y2 - x2 y2:=y2x2
while 循环体 S 3 S_3 S3

首先验证 $ y1 := y1 + 1 $:

{ x 1 ≡ y 1 ⋅ x 2 + y 2 ∧ y 2 ≥ x 2 } y 1 : = y 1 + 1 { x 1 ≡ ( y 1 + 1 ) ⋅ x 2 + y 2 ∧ y 2 ≥ x 2 } \{x1 \equiv y1 \cdot x2 + y2 \land y2 \geq x2\} y1 := y1 + 1 \{x1 \equiv (y1 + 1) \cdot x2 + y2 \land y2 \geq x2\} {x1y1x2+y2y2x2}y1:=y1+1{x1(y1+1)x2+y2y2x2}

然后验证 $ y2 := y2 - x2 $:

{ x 1 ≡ ( y 1 + 1 ) ⋅ x 2 + y 2 ∧ y 2 ≥ x 2 } y 2 : = y 2 − x 2 { x 1 ≡ y 1 ⋅ x 2 + y 2 ∧ y 2 ≥ 0 } \{x1 \equiv (y1 + 1) \cdot x2 + y2 \land y2 \geq x2\} y2 := y2 - x2 \{x1 \equiv y1 \cdot x2 + y2 \land y2 \geq 0\} {x1(y1+1)x2+y2y2x2}y2:=y2x2{x1y1x2+y2y20}

结合这两个步骤,得到 S 3 S_3 S3 的组合证明:

{ x 1 ≡ y 1 ⋅ x 2 + y 2 ∧ y 2 ≥ x 2 } y 1 : = y 1 + 1 ; y 2 : = y 2 − x 2 { x 1 ≡ y 1 ⋅ x 2 + y 2 ∧ y 2 ≥ 0 } \{x1 \equiv y1 \cdot x2 + y2 \land y2 \geq x2\} y1 := y1 + 1; y2 := y2 - x2 \{x1 \equiv y1 \cdot x2 + y2 \land y2 \geq 0\} {x1y1x2+y2y2x2}y1:=y1+1;y2:=y2x2{x1y1x2+y2y20}

目标8:顺序组合规则

我们希望证明:

{ x 1 ≡ y 1 ⋅ x 2 + y 2 ∧ y 2 ≥ x 2 } y 1 : = y 1 + 1 { x 1 ≡ ( y 1 + 1 ) ⋅ x 2 + y 2 − x 2 ∧ y 2 − x 2 ≥ 0 } , { x 1 ≡ ( y 1 + 1 ) ⋅ x 2 + y 2 − x 2 ∧ y 2 − x 2 ≥ 0 } y 2 : = y 2 − x 2 { x 1 ≡ y 1 ⋅ x 2 + y 2 ∧ y 2 ≥ 0 } { x 1 ≡ y 1 ⋅ x 2 + y 2 ∧ y 2 ≥ x 2 } y 1 : = y 1 + 1 ; y 2 : = y 2 − x 2 { x 1 ≡ y 1 ⋅ x 2 + y 2 ∧ y 2 ≥ 0 } \frac{\{x1 \equiv y1 \cdot x2 + y2 \land y2 \geq x2\} y1 := y1 + 1 \{x1 \equiv (y1 + 1) \cdot x2 + y2 - x2 \land y2 - x2 \geq 0\}, \{x1 \equiv (y1 + 1) \cdot x2 + y2 - x2 \land y2 - x2 \geq 0\} y2 := y2 - x2 \{x1 \equiv y1 \cdot x2 + y2 \land y2 \geq 0\}}{\{x1 \equiv y1 \cdot x2 + y2 \land y2 \geq x2\} y1 := y1 + 1; y2 := y2 - x2 \{x1 \equiv y1 \cdot x2 + y2 \land y2 \geq 0\}} {x1y1x2+y2y2x2}y1:=y1+1;y2:=y2x2{x1y1x2+y2y20}{x1y1x2+y2y2x2}y1:=y1+1{x1(y1+1)x2+y2x2y2x20},{x1(y1+1)x2+y2x2y2x20}y2:=y2x2{x1y1x2+y2y20}

这表示如果我们能证明在前置条件 { x 1 ≡ y 1 ⋅ x 2 + y 2 ∧ y 2 ≥ x 2 } \{x1 \equiv y1 \cdot x2 + y2 \land y2 \geq x2\} {x1y1x2+y2y2x2} 下,语句 y 1 : = y 1 + 1 y1 := y1 + 1 y1:=y1+1 能够确保中间条件 { x 1 ≡ ( y 1 + 1 ) ⋅ x 2 + y 2 − x 2 ∧ y 2 − x 2 ≥ 0 } \{x1 \equiv (y1 + 1) \cdot x2 + y2 - x2 \land y2 - x2 \geq 0\} {x1(y1+1)x2+y2x2y2x20},并且在中间条件 { x 1 ≡ ( y 1 + 1 ) ⋅ x 2 + y 2 − x 2 ∧ y 2 − x 2 ≥ 0 } \{x1 \equiv (y1 + 1) \cdot x2 + y2 - x2 \land y2 - x2 \geq 0\} {x1(y1+1)x2+y2x2y2x20} 下,语句 y 2 : = y 2 − x 2 y2 := y2 - x2 y2:=y2x2 能够确保后置条件 { x 1 ≡ y 1 ⋅ x 2 + y 2 ∧ y 2 ≥ 0 } \{x1 \equiv y1 \cdot x2 + y2 \land y2 \geq 0\} {x1y1x2+y2y20},那么我们可以得出结论:在前置条件 { x 1 ≡ y 1 ⋅ x 2 + y 2 ∧ y 2 ≥ x 2 } \{x1 \equiv y1 \cdot x2 + y2 \land y2 \geq x2\} {x1y1x2+y2y2x2} 下,程序 y 1 : = y 1 + 1 ; y 2 : = y 2 − x 2 y1 := y1 + 1; y2 := y2 - x2 y1:=y1+1;y2:=y2x2 能够确保后置条件 { x 1 ≡ y 1 ⋅ x 2 + y 2 ∧ y 2 ≥ 0 } \{x1 \equiv y1 \cdot x2 + y2 \land y2 \geq 0\} {x1y1x2+y2y20}

目标9:左强化规则

我们希望证明:

( x 1 ≡ y 1 ⋅ x 2 + y 2 ∧ y 2 ≥ x 2 ) → ( x 1 ≡ ( y 1 + 1 ) ⋅ x 2 + y 2 − x 2 ∧ y 2 − x 2 ≥ 0 ) , { x 1 ≡ ( y 1 + 1 ) ⋅ x 2 + y 2 − x 2 ∧ y 2 − x 2 ≥ 0 } y 1 : = y 1 + 1 { x 1 ≡ y 1 ⋅ x 2 + y 2 ∧ y 2 ≥ 0 } { x 1 ≡ y 1 ⋅ x 2 + y 2 ∧ y 2 ≥ x 2 } y 1 : = y 1 + 1 { x 1 ≡ y 1 ⋅ x 2 + y 2 ∧ y 2 ≥ 0 } \frac{(x1 \equiv y1 \cdot x2 + y2 \land y2 \geq x2) \rightarrow (x1 \equiv (y1 + 1) \cdot x2 + y2 - x2 \land y2 - x2 \geq 0), \{x1 \equiv (y1 + 1) \cdot x2 + y2 - x2 \land y2 - x2 \geq 0\} y1 := y1 + 1 \{x1 \equiv y1 \cdot x2 + y2 \land y2 \geq 0\}}{\{x1 \equiv y1 \cdot x2 + y2 \land y2 \geq x2\} y1 := y1 + 1 \{x1 \equiv y1 \cdot x2 + y2 \land y2 \geq 0\}} {x1y1x2+y2y2x2}y1:=y1+1{x1y1x2+y2y20}(x1y1x2+y2y2x2)(x1(y1+1)x2+y2x2y2x20),{x1(y1+1)x2+y2x2y2x20}y1:=y1+1{x1y1x2+y2y20}

这表示如果我们能证明在前置条件 { x 1 ≡ y 1 ⋅ x 2 + y 2 ∧ y 2 ≥ x 2 } \{x1 \equiv y1 \cdot x2 + y2 \land y2 \geq x2\} {x1y1x2+y2y2x2} 下, { x 1 ≡ y 1 ⋅ x 2 + y 2 ∧ y 2 ≥ x 2 } \{x1 \equiv y1 \cdot x2 + y2 \land y2 \geq x2\} {x1y1x2+y2y2x2} 蕴含 { x 1 ≡ ( y 1 + 1 ) ⋅ x 2 + y 2 − x 2 ∧ y 2 − x 2 ≥ 0 } \{x1 \equiv (y1 + 1) \cdot x2 + y2 - x2 \land y2 - x2 \geq 0\} {x1(y1+1)x2+y2x2y2x20},并且在前置条件 { x 1 ≡ ( y 1 + 1 ) ⋅ x 2 + y 2 − x 2 ∧ y 2 − x 2 ≥ 0 } \{x1 \equiv (y1 + 1) \cdot x2 + y2 - x2 \land y2 - x2 \geq 0\} {x1(y1+1)x2+y2x2y2x20} 下,语句 y 1 : = y 1 + 1 y1 := y1 + 1 y1:=y1+1 能够确保后置条件 { x 1 ≡ y 1 ⋅ x 2 + y 2 ∧ y 2 ≥ 0 } \{x1 \equiv y1 \cdot x2 + y2 \land y2 \geq 0\} {x1y1x2+y2y20},那么我们可以得出结论:在前置条件 { x 1 ≡ y 1 ⋅ x 2 + y 2 ∧ y 2 ≥ x 2 } \{x1 \equiv y1 \cdot x2 + y2 \land y2 \geq x2\} {x1y1x2+y2y2x2} 下,语句 y 1 : = y 1 + 1 y1 := y1 + 1 y1:=y1+1 能够确保后置条件 { x 1 ≡ y 1 ⋅ x 2 + y 2 ∧ y 2 ≥ 0 } \{x1 \equiv y1 \cdot x2 + y2 \land y2 \geq 0\} {x1y1x2+y2y20}

目标10和11:赋值

我们需要验证赋值语句的正确性。

目标10:
{ x 1 ≡ ( y 1 + 1 ) ⋅ x 2 + y 2 − x 2 ∧ y 2 − x 2 ≥ 0 } y 1 : = y 1 + 1 { x 1 ≡ y 1 ⋅ x 2 + y 2 ∧ y 2 ≥ 0 } \{x1 \equiv (y1 + 1) \cdot x2 + y2 - x2 \land y2 - x2 \geq 0\} y1 := y1 + 1 \{x1 \equiv y1 \cdot x2 + y2 \land y2 \geq 0\} {x1(y1+1)x2+y2x2y2x20}y1:=y1+1{x1y1x2+y2y20}

目标11:
{ x 1 ≡ y 1 ⋅ x 2 + y 2 − x 2 ∧ y 2 − x 2 ≥ 0 } y 2 : = y 2 − x 2 { x 1 ≡ y 1 ⋅ x 2 + y 2 ∧ y 2 ≥ 0 } \{x1 \equiv y1 \cdot x2 + y2 - x2 \land y2 - x2 \geq 0\} y2 := y2 - x2 \{x1 \equiv y1 \cdot x2 + y2 \land y2 \geq 0\} {x1y1x2+y2x2y2x20}y2:=y2x2{x1y1x2+y2y20}

详细解释

目标10:赋值 y 1 : = y 1 + 1 y1 := y1 + 1 y1:=y1+1

我们需要验证:

{ x 1 ≡ ( y 1 + 1 ) ⋅ x 2 + y 2 − x 2 ∧ y 2 − x 2 ≥ 0 } y 1 : = y 1 + 1 { x 1 ≡ y 1 ⋅ x 2 + y 2 ∧ y 2 ≥ 0 } \{x1 \equiv (y1 + 1) \cdot x2 + y2 - x2 \land y2 - x2 \geq 0\} y1 := y1 + 1 \{x1 \equiv y1 \cdot x2 + y2 \land y2 \geq 0\} {x1(y1+1)x2+y2x2y2x20}y1:=y1+1{x1y1x2+y2y20}

赋值公理形式:

{ ψ [ e / v ] } v : = e { ψ } \{\psi[e/v]\} v := e \{\psi\} {ψ[e/v]}v:=e{ψ}

应用于 y 1 : = y 1 + 1 y1 := y1 + 1 y1:=y1+1

{ x 1 ≡ ( y 1 + 1 ) ⋅ x 2 + y 2 − x 2 ∧ y 2 − x 2 ≥ 0 } y 1 : = y 1 + 1 { x 1 ≡ y 1 ⋅ x 2 + y 2 ∧ y 2 ≥ 0 } \{x1 \equiv (y1 + 1) \cdot x2 + y2 - x2 \land y2 - x2 \geq 0\} y1 := y1 + 1 \{x1 \equiv y1 \cdot x2 + y2 \land y2 \geq 0\} {x1(y1+1)x2+y2x2y2x20}y1:=y1+1{x1y1x2+y2y20}

验证:

$$
\psi[y1 + 1 / y1] = (x1 \equiv (y1 + 1) \cdot x2 + y2 - x2 \land y2 \geq 0)

$$
因为 y 2 − x 2 ≥ 0 y2 - x2 \geq 0 y2x20,所以 x 1 ≡ ( y 1 + 1 ) ⋅ x 2 + y 2 x1 \equiv (y1 + 1) \cdot x2 + y2 x1(y1+1)x2+y2 成立,此步成立。

目标11:赋值 y 2 : = y 2 − x 2 y2 := y2 - x2 y2:=y2x2

我们需要验证:
{ x 1 ≡ y 1 ⋅ x 2 + y 2 − x 2 ∧ y 2 − x 2 ≥ 0 } y 2 : = y 2 − x 2 { x 1 ≡ y 1 ⋅ x 2 + y 2 ∧ y 2 ≥ 0 } \{x1 \equiv y1 \cdot x2 + y2 - x2 \land y2 - x2 \geq 0\} y2 := y2 - x2 \{x1 \equiv y1 \cdot x2 + y2 \land y2 \geq 0\} {x1y1x2+y2x2y2x20}y2:=y2x2{x1y1x2+y2y20}
赋值公理形式:
{ ψ [ e / v ] } v : = e { ψ } \{\psi[e/v]\} v := e \{\psi\} {ψ[e/v]}v:=e{ψ}

应用于 y 2 : = y 2 − x 2 y2 := y2 - x2 y2:=y2x2

{ x 1 ≡ y 1 ⋅ x 2 + y 2 − x 2 ∧ y 2 − x 2 ≥ 0 } y 2 : = y 2 − x 2 { x 1 ≡ y 1 ⋅ x 2 + y 2 ∧ y 2 ≥ 0 } \{x1 \equiv y1 \cdot x2 + y2 - x2 \land y2 - x2 \geq 0\} y2 := y2 - x2 \{x1 \equiv y1 \cdot x2 + y2 \land y2 \geq 0\} {x1y1x2+y2x2y2x20}y2:=y2x2{x1y1x2+y2y20}
验证:
ψ [ y 2 − x 2 / y 2 ] = ( x 1 ≡ y 1 ⋅ x 2 + ( y 2 − x 2 ) ∧ ( y 2 − x 2 ) ≥ 0 ) \psi[y2 - x2 / y2] = (x1 \equiv y1 \cdot x2 + (y2 - x2) \land (y2 - x2) \geq 0) ψ[y2x2/y2]=(x1y1x2+(y2x2)(y2x2)0)
因为 y 2 − x 2 ≥ 0 y2 - x2 \geq 0 y2x20,所以 x 1 ≡ y 1 ⋅ x 2 + y 2 x1 \equiv y1 \cdot x2 + y2 x1y1x2+y2 成立,此步成立。

  • 9
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Violent-Ayang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值