程序验证(四):一阶理论
定义
一个一阶理论(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 |