程序验证(四):一阶理论

程序验证(四):一阶理论

定义

一个一阶理论(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=yy=x
    a [ i ] = e → a ⟨ i ◃ e ⟩ = a a[i] = e\to a \langle i \triangleleft e\rangle = a a[i]=eaie=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=yy=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=bb=cg(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=yy=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=yy=zx=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 TF是可判定的,那么这个片段是可判定的
量词自由的片段: 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=yy=zg(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 Ix=yy=z1, → \to
3 I ⊭ g ( f ( x ) , y ) = g ( f ( z ) , x ) I\not\models g(f(x),y)=g(f(z),x) Ig(f(x),y)=g(f(z),x)1, → \to
4 I ⊨ x = y I\models x=y Ix=y2, ∧ \wedge
5 I ⊨ y = z I\models y=z Iy=z2, ∧ \wedge
6 I ⊨ x = z I\models x=z Ix=z4, 5, t r a n s . trans. trans.
7 I ⊨ y = x I\models y=x Iy=x4, s y m m . symm. symm.
8 I ⊨ f ( x ) = f ( z ) I\models f(x)=f(z) If(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) Ig(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,1mathbbNN
  • 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+1y?
∃ 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+2yz13>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.(xpxn)+2(ypyn)(zpzn)13>3(wpwn)+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>zy0x+y>z

步骤公式备注
1 I ⊭ F I\not\models F IF假设
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{xv1}{yv2}{zv3} I1x>zy0x+y>z1, ∀ \forall
3 I 1 ⊨ x > z ∧ y ≥ 0 I_1\models x>z\wedge y\ge 0 I1x>zy02, → \to
4 I 1 ⊭ x + y > z I_1\not\models x+y>z I1x+y>z2, → \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 aiv是一个三元函数,代表在索引为 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 (ai1leftv1)i2v2
    公理集:
  • 自反性、对称性、传递性的等价公理
  • 数组同余: ∀ a , i , j . i = j → a [ i ] = a [ j ] \forall a,i,j.i=j\to a[i]=a[j] a,i,j.i=ja[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=jaiv[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=jaiv[j]=a[j]
    注意:等价性只在数组元素之间被讨论
    比如公式 a [ i ] = v → a ⟨ i ◃ v ⟩ = a a[i] = v\to a\langle i\triangleleft v\rangle = a a[i]=vaiv=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.aiv[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]=v1, → \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.aiv[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,α[jcj]aiv[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,α[jcj]aiv[j]=a[j]4, ¬ \neg ¬
6 I , α [ j ↦ c j ] ⊨ i = j I,\alpha [j\mapsto c_j]\models i=j I,α[jcj]i=j5, 读写-2
7 I , α [ j ↦ c j ] ⊨ a [ i ] = a [ j ] I,\alpha [j\mapsto c_j]\models a[i]=a[j] I,α[jcj]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,α[jcj]aiv[j]=v6, 读写-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,α[jcj]aiv[j]=a[j]2, 7, 8, 传递性
10 I , α [ j ↦ c j ] ⊨ ⊥ I,\alpha [j\mapsto c_j]\models \bot I,α[jcj]4, 9
性质

不可判定
但是量词自由片段可以判定

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值