程序:整数除法
目标是计算 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\}}
{x1≥0∧x2>0}S1;S2{x1=y1⋅x2+y2∧y2<x2∧y2≥0}{x1≥0∧x2>0}S1{x1=y1⋅x2+y2∧y2≥0},{x1=y1⋅x2+y2∧y2≥0}S2{x1=y1⋅x2+y2∧y2<x2∧y2≥0}
其中:
ϕ = { x 1 ≥ 0 ∧ x 2 > 0 } \phi = \{x1 \geq 0 \land x2 > 0\} ϕ={x1≥0∧x2>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=y1⋅x2+y2∧y2≥0}
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=y1⋅x2+y2∧y2<x2∧y2≥0}
这个证明规则表示:如果我们能证明在前置条件 ϕ \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\}}
{x1≥0∧x2>0}y1:=0;y2:=x1{x1=y1⋅x2+y2∧y2≥0}{x1≥0∧x2>0}y1:=0{x1≥0∧x2>0∧y1=0},{x1≥0∧x2>0∧y1=0}y2:=x1{x1=y1⋅x2+y2∧y2≥0}
这表示如果我们能证明在前置条件 { x 1 ≥ 0 ∧ x 2 > 0 } \{x1 \geq 0 \land x2 > 0\} {x1≥0∧x2>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\} {x1≥0∧x2>0∧y1=0},并且在中间条件 { x 1 ≥ 0 ∧ x 2 > 0 ∧ y 1 = 0 } \{x1 \geq 0 \land x2 > 0 \land y1 = 0\} {x1≥0∧x2>0∧y1=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=y1⋅x2+y2∧y2≥0},那么我们可以得出结论:在前置条件 { x 1 ≥ 0 ∧ x 2 > 0 } \{x1 \geq 0 \land x2 > 0\} {x1≥0∧x2>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=y1⋅x2+y2∧y2≥0}。
分步证明
第一步:验证 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\}}
{x1≥0∧x2>0}y1:=0{x1≥0∧x2>0∧y1=0}(x1≥0∧x2>0)→(x1≥0∧x2>0∧0≡0),{x1≥0∧x2>0∧0≡0}y1:=0{x1≥0∧x2>0∧y1=0}
这表示如果我们能证明在前置条件 { x 1 ≥ 0 ∧ x 2 > 0 } \{x1 \geq 0 \land x2 > 0\} {x1≥0∧x2>0} 下, { x 1 ≥ 0 ∧ x 2 > 0 } \{x1 \geq 0 \land x2 > 0\} {x1≥0∧x2>0} 蕴含 { x 1 ≥ 0 ∧ x 2 > 0 ∧ 0 ≡ 0 } \{x1 \geq 0 \land x2 > 0 \land 0 \equiv 0\} {x1≥0∧x2>0∧0≡0},并且在前置条件 { x 1 ≥ 0 ∧ x 2 > 0 ∧ 0 ≡ 0 } \{x1 \geq 0 \land x2 > 0 \land 0 \equiv 0\} {x1≥0∧x2>0∧0≡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\} {x1≥0∧x2>0∧y1=0},那么我们可以得出结论:在前置条件 { x 1 ≥ 0 ∧ x 2 > 0 } \{x1 \geq 0 \land x2 > 0\} {x1≥0∧x2>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\} {x1≥0∧x2>0∧y1=0}。
证明过程
第一步:证明前置条件蕴含关系
首先,我们需要证明前置条件 { x 1 ≥ 0 ∧ x 2 > 0 } \{x1 \geq 0 \land x2 > 0\} {x1≥0∧x2>0} 蕴含 { x 1 ≥ 0 ∧ x 2 > 0 ∧ 0 ≡ 0 } \{x1 \geq 0 \land x2 > 0 \land 0 \equiv 0\} {x1≥0∧x2>0∧0≡0}:
(
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)
(x1≥0∧x2>0)→(x1≥0∧x2>0∧0≡0)
显然,对于任何满足
x
1
≥
0
x1 \geq 0
x1≥0 和
x
2
>
0
x2 > 0
x2>0 的情况,
0
≡
0
0 \equiv 0
0≡0 总是成立,因此该蕴含关系是正确的。
目标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\} {x1≥0∧x2>0∧0≡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\} {x1≥0∧x2>0∧y1=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\}
{x1≥0∧x2>0∧0≡0}y1:=0{x1≥0∧x2>0∧y1=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=0∧x1≥0∧x2>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=0∧x1≥0∧x2>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\}} {x1≥0∧x2>0∧y1=0}y2:=x1{x1≡y1⋅x2+y2∧y2≥0}(x1≥0∧x2>0∧y1=0)→(x1≡y1⋅x2+x1∧x1≥0),{x1≡y1⋅x2+x1∧x1≥0}y2:=x1{x1≡y1⋅x2+y2∧y2≥0}
这表示如果我们能证明在前置条件 { x 1 ≥ 0 ∧ x 2 > 0 ∧ y 1 = 0 } \{x1 \geq 0 \land x2 > 0 \land y1 = 0\} {x1≥0∧x2>0∧y1=0} 下, { x 1 ≥ 0 ∧ x 2 > 0 ∧ y 1 = 0 } \{x1 \geq 0 \land x2 > 0 \land y1 = 0\} {x1≥0∧x2>0∧y1=0} 蕴含 { x 1 ≡ y 1 ⋅ x 2 + x 1 ∧ x 1 ≥ 0 } \{x1 \equiv y1 \cdot x2 + x1 \land x1 \geq 0\} {x1≡y1⋅x2+x1∧x1≥0},并且在前置条件 { x 1 ≡ y 1 ⋅ x 2 + x 1 ∧ x 1 ≥ 0 } \{x1 \equiv y1 \cdot x2 + x1 \land x1 \geq 0\} {x1≡y1⋅x2+x1∧x1≥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\} {x1≡y1⋅x2+y2∧y2≥0},那么我们可以得出结论:在前置条件 { x 1 ≥ 0 ∧ x 2 > 0 ∧ y 1 = 0 } \{x1 \geq 0 \land x2 > 0 \land y1 = 0\} {x1≥0∧x2>0∧y1=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\} {x1≡y1⋅x2+y2∧y2≥0}。
证明过程
第一步:证明前置条件蕴含关系
首先,我们需要证明前置条件 { x 1 ≥ 0 ∧ x 2 > 0 ∧ y 1 = 0 } \{x1 \geq 0 \land x2 > 0 \land y1 = 0\} {x1≥0∧x2>0∧y1=0} 蕴含 { x 1 ≡ y 1 ⋅ x 2 + x 1 ∧ x 1 ≥ 0 } \{x1 \equiv y1 \cdot x2 + x1 \land x1 \geq 0\} {x1≡y1⋅x2+x1∧x1≥0}:
( 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) (x1≥0∧x2>0∧y1=0)→(x1≡y1⋅x2+x1∧x1≥0)
显然,对于任何满足 x 1 ≥ 0 x1 \geq 0 x1≥0 和 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=y1⋅x2+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\} {x1≡y1⋅x2+x1∧x1≥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\} {x1≡y1⋅x2+y2∧y2≥0}:
赋值公理形式:
{
ψ
[
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\}
{x1≡y1⋅x2+x1∧x1≥0}y2:=x1{x1≡y1⋅x2+y2∧y2≥0}
验证:
ψ
[
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=y1⋅x2+x1∧x1≥0)
因为 $ 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\}} {x1≥0∧x2>0∧y1=0}y2:=x1{x1≡y1⋅x2+y2∧y2≥0}(x1≥0∧x2>0∧y1=0)→(x1≡y1⋅x2+x1∧x1≥0),{x1≡y1⋅x2+x1∧x1≥0}y2:=x1{x1≡y1⋅x2+y2∧y2≥0}
目标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\} {x1≡y1⋅x2+y2∧y2≥x2} while y2≥x2 do S3 end {x1≡y1⋅x2+y2∧y2<x2∧y2≥0}
其中, S 3 S_3 S3 包含两个语句:
- y 1 : = y 1 + 1 y1 := y1 + 1 y1:=y1+1
- y 2 : = y 2 − x 2 y2 := y2 - x2 y2:=y2−x2
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\} {x1≡y1⋅x2+y2∧y2≥x2}y1:=y1+1{x1≡(y1+1)⋅x2+y2∧y2≥x2}
然后验证 $ 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+y2∧y2≥x2}y2:=y2−x2{x1≡y1⋅x2+y2∧y2≥0}
结合这两个步骤,得到 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\} {x1≡y1⋅x2+y2∧y2≥x2}y1:=y1+1;y2:=y2−x2{x1≡y1⋅x2+y2∧y2≥0}
目标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\}} {x1≡y1⋅x2+y2∧y2≥x2}y1:=y1+1;y2:=y2−x2{x1≡y1⋅x2+y2∧y2≥0}{x1≡y1⋅x2+y2∧y2≥x2}y1:=y1+1{x1≡(y1+1)⋅x2+y2−x2∧y2−x2≥0},{x1≡(y1+1)⋅x2+y2−x2∧y2−x2≥0}y2:=y2−x2{x1≡y1⋅x2+y2∧y2≥0}
这表示如果我们能证明在前置条件 { x 1 ≡ y 1 ⋅ x 2 + y 2 ∧ y 2 ≥ x 2 } \{x1 \equiv y1 \cdot x2 + y2 \land y2 \geq x2\} {x1≡y1⋅x2+y2∧y2≥x2} 下,语句 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+y2−x2∧y2−x2≥0},并且在中间条件 { 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+y2−x2∧y2−x2≥0} 下,语句 y 2 : = y 2 − x 2 y2 := y2 - x2 y2:=y2−x2 能够确保后置条件 { x 1 ≡ y 1 ⋅ x 2 + y 2 ∧ y 2 ≥ 0 } \{x1 \equiv y1 \cdot x2 + y2 \land y2 \geq 0\} {x1≡y1⋅x2+y2∧y2≥0},那么我们可以得出结论:在前置条件 { x 1 ≡ y 1 ⋅ x 2 + y 2 ∧ y 2 ≥ x 2 } \{x1 \equiv y1 \cdot x2 + y2 \land y2 \geq x2\} {x1≡y1⋅x2+y2∧y2≥x2} 下,程序 y 1 : = y 1 + 1 ; y 2 : = y 2 − x 2 y1 := y1 + 1; y2 := y2 - x2 y1:=y1+1;y2:=y2−x2 能够确保后置条件 { x 1 ≡ y 1 ⋅ x 2 + y 2 ∧ y 2 ≥ 0 } \{x1 \equiv y1 \cdot x2 + y2 \land y2 \geq 0\} {x1≡y1⋅x2+y2∧y2≥0}。
目标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\}} {x1≡y1⋅x2+y2∧y2≥x2}y1:=y1+1{x1≡y1⋅x2+y2∧y2≥0}(x1≡y1⋅x2+y2∧y2≥x2)→(x1≡(y1+1)⋅x2+y2−x2∧y2−x2≥0),{x1≡(y1+1)⋅x2+y2−x2∧y2−x2≥0}y1:=y1+1{x1≡y1⋅x2+y2∧y2≥0}
这表示如果我们能证明在前置条件 { x 1 ≡ y 1 ⋅ x 2 + y 2 ∧ y 2 ≥ x 2 } \{x1 \equiv y1 \cdot x2 + y2 \land y2 \geq x2\} {x1≡y1⋅x2+y2∧y2≥x2} 下, { x 1 ≡ y 1 ⋅ x 2 + y 2 ∧ y 2 ≥ x 2 } \{x1 \equiv y1 \cdot x2 + y2 \land y2 \geq x2\} {x1≡y1⋅x2+y2∧y2≥x2} 蕴含 { 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+y2−x2∧y2−x2≥0},并且在前置条件 { 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+y2−x2∧y2−x2≥0} 下,语句 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\} {x1≡y1⋅x2+y2∧y2≥0},那么我们可以得出结论:在前置条件 { x 1 ≡ y 1 ⋅ x 2 + y 2 ∧ y 2 ≥ x 2 } \{x1 \equiv y1 \cdot x2 + y2 \land y2 \geq x2\} {x1≡y1⋅x2+y2∧y2≥x2} 下,语句 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\} {x1≡y1⋅x2+y2∧y2≥0}。
目标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+y2−x2∧y2−x2≥0}y1:=y1+1{x1≡y1⋅x2+y2∧y2≥0}
目标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\}
{x1≡y1⋅x2+y2−x2∧y2−x2≥0}y2:=y2−x2{x1≡y1⋅x2+y2∧y2≥0}
详细解释
目标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+y2−x2∧y2−x2≥0}y1:=y1+1{x1≡y1⋅x2+y2∧y2≥0}
赋值公理形式:
{ ψ [ 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+y2−x2∧y2−x2≥0}y1:=y1+1{x1≡y1⋅x2+y2∧y2≥0}
验证:
$$
\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
y2−x2≥0,所以
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:=y2−x2
我们需要验证:
{
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\}
{x1≡y1⋅x2+y2−x2∧y2−x2≥0}y2:=y2−x2{x1≡y1⋅x2+y2∧y2≥0}
赋值公理形式:
{
ψ
[
e
/
v
]
}
v
:
=
e
{
ψ
}
\{\psi[e/v]\} v := e \{\psi\}
{ψ[e/v]}v:=e{ψ}
应用于 y 2 : = y 2 − x 2 y2 := y2 - x2 y2:=y2−x2:
{
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\}
{x1≡y1⋅x2+y2−x2∧y2−x2≥0}y2:=y2−x2{x1≡y1⋅x2+y2∧y2≥0}
验证:
ψ
[
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)
ψ[y2−x2/y2]=(x1≡y1⋅x2+(y2−x2)∧(y2−x2)≥0)
因为
y
2
−
x
2
≥
0
y2 - x2 \geq 0
y2−x2≥0,所以
x
1
≡
y
1
⋅
x
2
+
y
2
x1 \equiv y1 \cdot x2 + y2
x1≡y1⋅x2+y2 成立,此步成立。