程序验证(四):一阶理论
定义
一个一阶理论(theory) T T T被以下两点定义:
- 它的符号集 Σ \Sigma Σ, 一个非逻辑符号的集合
- 它的公理
A
\mathcal{A}
A, 一个在
Σ
\Sigma
Σ上的闭公式(closed formula)
一阶逻辑理论定义了一个有限的词汇表以讨论所关注的主题,而理论中的公理定义了所意指的涵义(intended meaning)
Σ \Sigma Σ-formula: 一个 Σ \Sigma Σ-formula 只包含 Σ \Sigma Σ中的非逻辑符号,以及逻辑变元,逻辑连接词和量词。
举例:
∀ x , y . x = y → y = x \forall x,y.x=y\to y=x ∀x,y.x=y→y=x
a [ i ] = e → a ⟨ i ◃ e ⟩ = a a[i] = e\to a \langle i \triangleleft e\rangle = a a[i]=e→a⟨i◃e⟩=a
常用理论(theory)
等价理论(Theory of Equality)
定义
等价理论
T
E
T_E
TE由以下符号集给出:
Σ
E
:
{
=
,
a
,
b
,
c
,
.
.
.
,
f
,
g
,
h
,
.
.
.
,
p
,
q
,
r
,
.
.
.
}
\Sigma_E: \{=,a,b,c, ... ,f,g,h, ... ,p,q,r, ...\}
ΣE:{=,a,b,c,...,f,g,h,...,p,q,r,...}
这里有二元等价符号=,以及其他的常量、函数、谓词符号。
T
E
T_E
TE的公理“=”满足自反性、对称性、传递性,以及函数与谓词的同余性(congruence)
T
E
T_E
TE公式举例:
- ∀ x , y . x = y → y = x \forall x,y.x=y\to y=x ∀x,y.x=y→y=x
- a = b ∧ b = c → g ( f ( a ) , b ) = g ( f ( c ) , a ) a=b\wedge b=c\to g(f(a),b) = g(f(c),a) a=b∧b=c→g(f(a),b)=g(f(c),a)
符号集:
Σ
E
:
{
=
,
a
,
b
,
c
,
.
.
.
,
f
,
g
,
h
,
.
.
.
,
p
,
q
,
r
,
.
.
.
}
\Sigma_E : \{=,a,b,c, ... ,f,g,h, ... ,p,q,r, ...\}
ΣE:{=,a,b,c,...,f,g,h,...,p,q,r,...}
公理集:
- 自反性(refelxivity): ∀ x . x = x \forall x.x=x ∀x.x=x
- 对称性(symmetry): ∀ x , y . x = y → y = x \forall x,y.x=y \to y=x ∀x,y.x=y→y=x
- 传递性(transitivity): ∀ x , y , z . x = y ∧ y = z → x = z \forall x,y,z.x=y\wedge y=z \to x=z ∀x,y,z.x=y∧y=z→x=z
- 函数同余性(function congruence): ∀ x , y . ( ⋀ i = 1 n x i = y i ) → f ( x ) = f ( y ) \forall x,y.(\bigwedge ^n_{i=1} x_i=y_i)\to f(x) = f(y) ∀x,y.(⋀i=1nxi=yi)→f(x)=f(y)
- 谓词同余性(predicate congruence): ∀ x , y . ( ⋀ i = 1 n x i = y i ) → ( p ( x ) ↔ p ( y ) ) \forall x,y.(\bigwedge ^n_{i=1} x_i = y_i)\to (p(x)\leftrightarrow p(y)) ∀x,y.(⋀i=1nxi=yi)→(p(x)↔p(y))
注意,以上公理并不是标准的公理,实际上,它只是一个模式(schema)因为表达式中的 f f f或 p p p可以代表任何函数(或谓词)
性质
T
E
T_E
TE是可判定的吗?
不是(即答
证明方法:将
T
E
T_E
TE公式转化为一阶逻辑公式:
- T E T_E TE仍然允许所有常量、函数以及谓词符号存在
- 可以将任何一阶逻辑公式
F
F
F编码为
T
E
T_E
TE公式
F
′
F'
F′
- 将 F F F中所有=符号用一个新的(fresh)谓词符号替换
- F ′ F' F′中不出现=符号
-
T
E
T_E
TE中的公理与此无关
然而, T E T_E TE的量词自由片段(quantifier-free fragment)是可判定的
理论的片段(theory fragment)
一个理论的片段(fragment)是
T
T
T中公式的一个由语义约束的(syntactically-restricted)子集
如果对于每个符合片段的语义约束的公式
F
F
F,
T
⊨
F
T\models F
T⊨F是可判定的,那么这个片段是可判定的
量词自由的片段:
T
T
T中没有量词的永真公式(也可以看做是所有量词都是全称量词)
永真性的证明
使用一阶逻辑中的语义分析方法,同时假如
T
E
T_E
TE的公理
举例:
证明以下公式的永真性:
F
:
x
=
y
∧
y
=
z
→
g
(
f
(
x
)
,
y
)
=
g
(
f
(
z
)
,
x
)
F: x=y\wedge y=z \to g(f(x),y) = g(f(z), x)
F:x=y∧y=z→g(f(x),y)=g(f(z),x)
步骤 | 公式 | 备注 |
---|---|---|
1 | $I\not\models F | - |
2 | I ⊨ x = y ∧ y = z I\models x=y\wedge y=z I⊨x=y∧y=z | 1, → \to → |
3 | I ⊭ g ( f ( x ) , y ) = g ( f ( z ) , x ) I\not\models g(f(x),y)=g(f(z),x) I⊨g(f(x),y)=g(f(z),x) | 1, → \to → |
4 | I ⊨ x = y I\models x=y I⊨x=y | 2, ∧ \wedge ∧ |
5 | I ⊨ y = z I\models y=z I⊨y=z | 2, ∧ \wedge ∧ |
6 | I ⊨ x = z I\models x=z I⊨x=z | 4, 5, t r a n s . trans. trans. |
7 | I ⊨ y = x I\models y=x I⊨y=x | 4, s y m m . symm. symm. |
8 | I ⊨ f ( x ) = f ( z ) I\models f(x)=f(z) I⊨f(x)=f(z) | 6, c o n g . cong. cong. |
9 | I ⊨ g ( f ( x ) , y ) = g ( f ( z ) , x ) I\models g(f(x),y)=g(f(z),x) I⊨g(f(x),y)=g(f(z),x) | 7, 8, c o n g . cong. cong. |
10 | ⊥ \bot ⊥ | 3, 9 |
佩亚诺算术(Peano Arithmetic): T P A T_{PA} TPA
定义
符号集:
Σ
P
A
:
{
0
,
1
,
+
,
×
,
=
}
\Sigma_{PA} : \{0,1,+,\times , =\}
ΣPA:{0,1,+,×,=}
- 0与1是常量
- +与 × \times ×是二元函数
- =是二元谓词
没有其他符号
公理集:
- 所有的等价公理:自反性、对称性、传递性、以及同余性
- Z e r o : ∀ x . ¬ ( x + 1 = 0 ) Zero:~\forall x.\neg(x+1=0) Zero: ∀x.¬(x+1=0)
- S u c c e s s o r : ∀ x , y . ( x + 1 = y + 1 ) → x = y Successor:~\forall x,y.(x+1=y+1)\to x=y Successor: ∀x,y.(x+1=y+1)→x=y
- P l u s z e r o : ∀ x . x + 0 = x Plus~zero:~\forall x.x+0=x Plus zero: ∀x.x+0=x
- P l u s s u c c e s s o r : ∀ x , y . x + ( y + 1 ) = ( x + y ) + 1 Plus~successor:~\forall x,y.x+(y+1)=(x+y)+1 Plus successor: ∀x,y.x+(y+1)=(x+y)+1
- T i m e s z e r o : ∀ x . x × 0 = 0 Times~zero:~\forall x.x\times 0=0 Times zero: ∀x.x×0=0
- T i m e s s u c c e s s o r : f o r a l l x , y . x × ( y + 1 ) = x × y + x Times~successor:~forall x,y.x\times (y+1)=x\times y+x Times successor: forallx,y.x×(y+1)=x×y+x
为了方便,以后我们把
x
×
y
x\times y
x×y记作
x
y
xy
xy
数学归纳法:
一个模板:
(
F
(
0
)
∧
(
∀
x
.
F
[
x
]
→
f
[
x
+
1
]
)
)
→
∀
x
.
F
[
x
]
(F(0)\wedge (\forall x.F[x]\to f[x+1]))\to \forall x.F[x]
(F(0)∧(∀x.F[x]→f[x+1]))→∀x.F[x]
这里
F
F
F代表任意的
T
P
A
T_{PA}
TPA_公式
这就是数学归纳法在佩亚诺算术下的表达
一种佩亚诺算术
因为算术中的函数与谓词符号可以有多种解释,所以这里说是“一种”
最常见的:
- Domain: N \mathbb{N} N
- I [ 0 ] , I [ 1 ] : 0 N , 1 m a t h b b N ∈ N I[0],I[1]: 0_{\mathbb{N}}, 1_{mathbb{N}} \in \mathbb{N} I[0],I[1]:0N,1mathbbN∈N
- I [ + ] : + N , a d d i t i o n o v e r N I[+]: +_{\mathbb{N}},~addition~over~\mathbb{N} I[+]:+N, addition over N
- I [ × ] : × N , m u l t i p l i c a t i o n o v e r N I[\times]:\times _{\mathbb{N}},~multiplication~over~\mathbb{N} I[×]:×N, multiplication over N
- I [ = ] : = N , e q u a l i t y o v e r N I[=]:=_{\mathbb{N}},~equality~over~\mathbb{N} I[=]:=N, equality over N
语法糖
在
T
P
A
T_{PA}
TPA中如何写
3
x
+
5
=
2
y
3x+5=2y
3x+5=2y?
(
1
+
1
+
1
)
×
x
+
1
+
1
+
1
+
1
+
1
=
(
1
+
1
)
×
y
(1+1+1)\times x +1+1+1+1+1=(1+1)\times y
(1+1+1)×x+1+1+1+1+1=(1+1)×y
如何表达
x
>
5
x>5
x>5?
∃
y
.
¬
(
y
=
0
)
∧
x
=
5
+
y
\exists y.\neg (y=0)\wedge x = 5+y
∃y.¬(y=0)∧x=5+y
如何表达
x
+
1
≤
y
x+1\le y
x+1≤y?
∃
z
.
x
+
1
+
z
=
y
\exists z.x+1+z = y
∃z.x+1+z=y
性质
T
P
A
T_{PA}
TPA中的可满足性与永真性是不可判定的,甚至量词自由的
T
P
A
T_{PA}
TPA也是不可判定的
另外,
T
P
A
T_{PA}
TPA是不完备的(KaTeX parse error: Can't use function '\'' in math mode at position 2: G\̲'̲'{o}del, 1930)
总结:很多永真的数学命题在
T
P
A
T_{PA}
TPA上是非永真的
原因:乘法过于复杂
Presburger算术: T N T_{\mathbb{N}} TN
定义
符号集:
Σ
N
:
{
0
,
1
,
+
,
=
}
\Sigma_{\mathbb{N}}:\{0,1,+,=\}
ΣN:{0,1,+,=}
公理集:
- 所有的等价公理:自反性、对称性、传递性、同余性
- Z e r o : ∀ x . ¬ ( x + 1 = 0 ) Zero:~\forall x.\neg (x+1=0) Zero: ∀x.¬(x+1=0)
- S u c c e s s o r : ∀ x , y . ( x + 1 = y + 1 ) → x = y Successor:~\forall x,y.(x+1=y+1)\to x=y Successor: ∀x,y.(x+1=y+1)→x=y
- P l u s z e r o : ∀ x . x + 0 = x Plus~zero:~\forall x.x+0=x Plus zero: ∀x.x+0=x
- P l u s s u c c e s s o r : ∀ x , y . x + ( y + 1 ) = ( x + y ) + 1 Plus~successor:~\forall x,y.x+(y+1)=(x+y)+1 Plus successor: ∀x,y.x+(y+1)=(x+y)+1
- I n d u c t i o n : ( F [ 0 ] ∧ ( ∀ x . F [ x ] → F [ x + 1 ] ) ) → ∀ x . F [ x ] Induction:~(F[0]\wedge (\forall x.F[x]\to F[x+1]))\to \forall x.F[x] Induction: (F[0]∧(∀x.F[x]→F[x+1]))→∀x.F[x]
性质
常用的解释与佩亚诺算术一样
但是,它有很好的性质:
- 永真性可判定
- 但是很困难:复杂度KaTeX parse error: Expected 'EOF', got '}' at position 10: O(2^{2^n}}̲)
- 完备性:对于任一 T N T_{\mathbb{N}} TN上的公式 F F F,或者 ⊨ F \models F ⊨F或者 ⊨ ¬ F \models \neg F ⊨¬F
- 可以量词消除:对于任一
T
N
T_{\mathbb{N}}
TN上的公式
F
F
F,存在一个等价的量词自由的
F
′
F'
F′
- 量词自由的片段的可判定性是coNP-complete的
技巧:如何证明整数
考虑这样一个公式:
F
0
:
∀
w
,
x
.
∃
y
,
z
.
x
+
2
y
−
z
−
13
>
−
2
w
+
5
F_0:\forall w,x.\exists y,z.x+2y-z-13 > -2w+5
F0:∀w,x.∃y,z.x+2y−z−13>−2w+5
这里的-被解释为标准减法,
w
,
x
,
y
,
z
w,x,y,z
w,x,y,z的范围为整数集
Z
Z
Z
- 为了表示
T
N
T_N
TN中的公式,为
F
0
F_0
F0中每个变量
v
v
v都引入两个变量
v
p
v_p
vp和
v
n
v_n
vn:
F 1 : ∀ w p , w n , x p , x n . ∃ y p , y n , z p , z n . ( x p − x n ) + 2 ( y p − y n ) − ( z p − z n ) − 13 > − 3 ( w p − w n ) + 5 F_1: \forall w_p ,w_n ,x_p ,x_n.\exists y_p ,y_n ,z_p ,z_n.(x_p-x_n)+2(y_p-y_n)-(z_p-z_n)-13 > -3(w_p-w_n)+5 F1:∀wp,wn,xp,xn.∃yp,yn,zp,zn.(xp−xn)+2(yp−yn)−(zp−zn)−13>−3(wp−wn)+5 - “移项”(因为
T
N
T_N
TN中没有减号),得到最终形式:
F 2 : ∀ w p , w n , x p , x n . ∃ y p , y n , z p , z n . ∃ u . ¬ ( u = 0 ) ∧ x p + y p + y p + z n + w p + w p + w p = x n + y n + y n + z p + w n + w n + w n + u + 1 + 1 + . . . + 1 F_2: \forall w_p ,w_n ,x_p ,x_n. \exists y_p ,y_n ,z_p ,z_n. \exists u. \neg(u=0)\wedge x_p +y_p +y_p +z_n+w_p+w_p+w_p = x_n +y_n +y_n +z_p + w_n +w_n +w_n + u +1+1+...+1 F2:∀wp,wn,xp,xn.∃yp,yn,zp,zn.∃u.¬(u=0)∧xp+yp+yp+zn+wp+wp+wp=xn+yn+yn+zp+wn+wn+wn+u+1+1+...+1(一共13个+1)
线性整数算术: T Z T_{\mathbb{Z}} TZ
定义
符号集:
Σ
Z
:
{
.
.
.
,
−
2
,
−
1
,
0
,
1
,
2
,
.
.
.
,
−
3
×
,
−
2
×
,
2
×
,
3
×
,
.
.
.
,
+
,
−
,
=
,
>
}
\Sigma_{\mathbb{Z}}: \{...,-2,-1,0,1,2, ... ,-3\times ,-2\times ,2\times ,3\times ,...,+,-,=,>\}
ΣZ:{...,−2,−1,0,1,2,...,−3×,−2×,2×,3×,...,+,−,=,>}
- -2,-1,0,1,2,…,+,-,=,>就是通常情况下的涵义
-
−
3
×
-3\times
−3×,
−
2
×
-2\times
−2×,
2
×
2\times
2×,
3
×
3\times
3×都是常系数的一元乘法函数
论断: T Z T_{\mathbb{Z}} TZ可以归约(reduce)为 T N T_{\mathbb{N}} TN - 它们的表达能力相同
- T Z T_{\mathbb{Z}} TZ更加方便,所以比 T N T_{\mathbb{N}} TN更加常用
举例
证明以下公式的永真性:
F
:
∀
x
,
y
,
z
.
x
>
z
∧
y
≥
0
→
x
+
y
>
z
F: \forall x,y,z.x>z\wedge y\ge 0\to x+y>z
F:∀x,y,z.x>z∧y≥0→x+y>z
步骤 | 公式 | 备注 |
---|---|---|
1 | I ⊭ F I\not\models F I⊨F | 假设 |
2 | I 1 : I ◃ { x ↦ v 1 } ◃ { y ↦ v 2 } ◃ { z ↦ v 3 } I 1 ⊭ x > z ∧ y ≥ 0 → x + y > z I_1:I\triangleleft \{x\mapsto v_1\}\triangleleft\{y\mapsto v_2\}\triangleleft\{z\mapsto v_3\}~I_1\not\models x>z\wedge y\ge 0\to x+y>z I1:I◃{x↦v1}◃{y↦v2}◃{z↦v3} I1⊨x>z∧y≥0→x+y>z | 1, ∀ \forall ∀ |
3 | I 1 ⊨ x > z ∧ y ≥ 0 I_1\models x>z\wedge y\ge 0 I1⊨x>z∧y≥0 | 2, → \to → |
4 | I 1 ⊭ x + y > z I_1\not\models x+y>z I1⊨x+y>z | 2, → \to → |
5 | I 1 ⊨ ¬ ( x + y > z ) I_1\models \neg (x+y>z) I1⊨¬(x+y>z) | 4, ¬ \neg ¬ |
6 | ⊥ \bot ⊥ | 3, 5, T Z T_Z TZ |
Q . E . D Q.E.D Q.E.D
数列理论: T A T_A TA
定义
符号集:
Σ
A
:
{
=
,
⋅
[
⋅
]
,
⋅
⟨
⋅
◃
⋅
⟩
}
\Sigma_A: \{=,\cdot [\cdot], \cdot \langle \cdot\triangleleft \cdot\rangle\}
ΣA:{=,⋅[⋅],⋅⟨⋅◃⋅⟩}
- a [ i ] a[i] a[i]是一个二元函数,表示在索引为 i i i处读取 a a a
-
a
⟨
i
◃
v
⟩
a\langle i\triangleleft v\rangle
a⟨i◃v⟩是一个三元函数,代表在索引为
i
i
i处向
a
a
a写入值
v
v
v
习惯的解释: - 如果一个值 v v v被写入到 a a a的位置 i i i处,那么之后对于 a a a位置 i i i处的读操作应当返回 v v v
- 逻辑是静态的,所以数组可以函数化表示,如
(
a
⟨
i
1
△
l
e
f
t
v
1
⟩
)
⟨
i
2
◃
v
2
⟩
(a\langle i_1\triangle left v_1\rangle)\langle i_2 \triangleleft v_2 \rangle
(a⟨i1△leftv1⟩)⟨i2◃v2⟩
公理集: - 自反性、对称性、传递性的等价公理
- 数组同余: ∀ a , i , j . i = j → a [ i ] = a [ j ] \forall a,i,j.i=j\to a[i]=a[j] ∀a,i,j.i=j→a[i]=a[j]
- 读写-1: ∀ a , v , i , j . i = j → a ⟨ i ◃ v ⟩ [ j ] = v \forall a,v,i,j.i=j\to a\langle i \triangleleft v\rangle [j]=v ∀a,v,i,j.i=j→a⟨i◃v⟩[j]=v
- 读写-2:
∀
a
,
v
,
i
,
j
.
i
≠
j
→
a
⟨
i
◃
v
⟩
[
j
]
=
a
[
j
]
\forall a,v,i,j. i\ne j\to a\langle i \triangleleft v\rangle [j]=a[j]
∀a,v,i,j.i=j→a⟨i◃v⟩[j]=a[j]
注意:等价性只在数组元素之间被讨论
比如公式 a [ i ] = v → a ⟨ i ◃ v ⟩ = a a[i] = v\to a\langle i\triangleleft v\rangle = a a[i]=v→a⟨i◃v⟩=a就不是 T A T_A TA-永真的。
举例
证明以下公式的永真性:
F
:
a
[
i
]
=
v
→
(
∀
j
.
a
⟨
i
◃
v
⟩
[
j
]
=
a
[
j
]
)
F: a[i]=v\to (\forall j.a\langle i\triangleleft v\rangle [j] = a[j])
F:a[i]=v→(∀j.a⟨i◃v⟩[j]=a[j])
步骤 | 公式 | 备注 |
---|---|---|
1 | I , α ⊭ F I,\alpha\not\models F I,α⊨F | - |
2 | I , α ⊨ a [ i ] = v I,\alpha\models a[i] = v I,α⊨a[i]=v | 1, → \to → |
3 | I , α ⊭ ∀ j . a ⟨ i ◃ v ⟩ [ j ] = a [ j ] I,\alpha\not\models \forall j.a\langle i \triangleleft v\rangle [j]=a[j] I,α⊨∀j.a⟨i◃v⟩[j]=a[j] | 1, → \to → |
4 | I , α [ j ↦ c j ] ⊭ a ⟨ i ◃ v ⟩ [ j ] = a [ j ] I,\alpha [j\mapsto c_j]\not\models a\langle i\triangleleft v\rangle [j]=a[j] I,α[j↦cj]⊨a⟨i◃v⟩[j]=a[j] | 3, ∀ \forall ∀ |
5 | I , α [ j ↦ c j ] ⊨ a ⟨ i ◃ v ⟩ [ j ] ≠ a [ j ] I,\alpha [j\mapsto c_j]\models a\langle i\triangleleft v\rangle [j]\ne a[j] I,α[j↦cj]⊨a⟨i◃v⟩[j]=a[j] | 4, ¬ \neg ¬ |
6 | I , α [ j ↦ c j ] ⊨ i = j I,\alpha [j\mapsto c_j]\models i=j I,α[j↦cj]⊨i=j | 5, 读写-2 |
7 | I , α [ j ↦ c j ] ⊨ a [ i ] = a [ j ] I,\alpha [j\mapsto c_j]\models a[i]=a[j] I,α[j↦cj]⊨a[i]=a[j] | 6, 同余 |
8 | I , α [ j ↦ c j ] ⊨ a ⟨ i ◃ v ⟩ [ j ] = v I,\alpha [j\mapsto c_j]\models a\langle i\triangleleft v\rangle [j]=v I,α[j↦cj]⊨a⟨i◃v⟩[j]=v | 6, 读写-1 |
9 | I , α [ j ↦ c j ] ⊨ a ⟨ i ◃ v ⟩ [ j ] = a [ j ] I,\alpha [j\mapsto c_j]\models a\langle i\triangleleft v\rangle [j]=a[j] I,α[j↦cj]⊨a⟨i◃v⟩[j]=a[j] | 2, 7, 8, 传递性 |
10 | I , α [ j ↦ c j ] ⊨ ⊥ I,\alpha [j\mapsto c_j]\models \bot I,α[j↦cj]⊨⊥ | 4, 9 |
性质
不可判定
但是量词自由片段可以判定