模型检测
- 定义:在定理证明中,形式验证把待证明的性质直接作为一个数学定理来证明,也称为演绎式验证。
- 基本思想:和逐一证明一个结构下所有数据在一个公式下是否都正确相比,直接检验这个结构是否满足该公式来说更加容易。
- 原理:模型通常是迁移系统或有限状态的自动机,用 M \mathcal{M} M表示,系统的性质用逻辑公式进行规约,用 ϕ \phi ϕ表示,时态逻辑是极其重要的性质规约逻辑。把系统的性质用模型进行规约,表示为 M ⊨ ϕ \mathcal{M} \vDash \phi M⊨ϕ,核心是有穷状态空间上的遍历策略和算法。如果 M ⊨ ϕ \mathcal{M} \vDash \phi M⊨ϕ成立,则输出为Yes,如果 M ⊨ ϕ \mathcal{M} \vDash \phi M⊨ϕ不成立,则输出为No。
标记算法
- 通俗理解:就好像一个适配器,为了让CTL公式 ϕ \phi ϕ能够更好的用于模型检测,通过改变连接词的方式,将其转换为等价公式,有利于模型检测。需要考虑的连接词为 ⊤ , ⊥ , ∧ , A F , E U , E X \top,\perp,\wedge,AF,EU,EX ⊤,⊥,∧,AF,EU,EX,当公式中出现这样的连接词时,我们才会考虑用标记算法让公式更有助于模型检测。
- 基本思想:若状态 s s s满足 ϕ \phi ϕ,则在 s s s处进行标记公式 ϕ \phi ϕ,具体是以 ϕ \phi ϕ的结构进行标记。
- 定义:设
ψ
\psi
ψ是
ϕ
\phi
ϕ的子公式且满足
ψ
\psi
ψ的所有直接子公式的状态都已标记了,现在来标记
ψ
\psi
ψ,标记算法如下:
- ⊥ \perp ⊥:没有状态用 ⊥ \perp ⊥标记
- p p p:若 p ∈ L ( s ) p \in L(s) p∈L(s),则状态 s s s标记 p p p
- ψ ∧ ψ \psi \wedge \psi ψ∧ψ:若 s s s已标记了 ψ 1 \psi_1 ψ1和 ψ 2 \psi_2 ψ2,则 s s s标记 ψ ∧ ψ \psi \wedge \psi ψ∧ψ
- ¬ ψ 1 \neg \psi_1 ¬ψ1:若 s s s没有标记 ψ 1 \psi_1 ψ1,则 s s s标记 ¬ ψ 1 \neg \psi_1 ¬ψ1
-
A
F
ψ
1
AF \psi_1
AFψ1:
- 若状态 s s s标记了 ψ 1 \psi_1 ψ1,则状态 s s s标记 A F ψ 1 AF \psi_1 AFψ1
- 若状态 s s s的所有后继都标记了 A F ψ 1 AF \psi_1 AFψ1,则状态 s s s标记 A F ψ 1 AF \psi_1 AFψ1,直到不再发生变化
-
E
[
ψ
1
U
ψ
2
]
E[\psi_1 U \psi_2]
E[ψ1Uψ2]:
- 若状态 s s s标记了 ψ 2 \psi_2 ψ2,则状态 s s s标记 E [ ψ 1 U ψ 2 ] E[\psi_1 U \psi_2] E[ψ1Uψ2]
- 若状态 s s s标记了 ψ 1 \psi_1 ψ1且 s s s有一个后继标记了 E [ ψ 1 U ψ 2 ] E[\psi_1 U \psi_2] E[ψ1Uψ2],则状态 s s s标记 E [ ψ 1 U ψ 2 ] E[\psi_1 U \psi_2] E[ψ1Uψ2],直到不再发生变化
- E X ψ 1 EX \psi_1 EXψ1:若状态 s s s的一个后继标记了 ψ 1 \psi_1 ψ1,则状态 s s s标记 E X ψ 1 EX \psi_1 EXψ1
不动点
- 单调函数:设
S
S
S是一状态集,
2
S
2^S
2S是S的幂集,
F
:
2
S
→
2
S
F:2^S \to 2^S
F:2S→2S是一函数
- 称 F F F是单调函数,若 ∀ X , Y ∈ 2 S \forall X,Y \in 2^S ∀X,Y∈2S,当 X ⊆ Y X \subseteq Y X⊆Y时,有 F ( X ) ⊆ F ( Y ) F(X) \subseteq F(Y) F(X)⊆F(Y)
- S S S的子集 X X X称为 F F F的不动点,即 F ( X ) = X F(X) = X F(X)=X
- 符号
F
i
(
X
)
F^i (X)
Fi(X)表示函数
F
F
F作用在集合
X
X
X上
i
i
i次,即
F ( X ) = { X , i = 0 F ( F i − 1 ( X ) ) , i ≥ 1 F(X)= \left\{\begin{matrix} & X,&i=0 \\ & F(F^{i-1}(X)),&i\geq 1 \end{matrix}\right. F(X)={X,F(Fi−1(X)),i=0i≥1 - Knaster-Tarski不动点定理:设 S S S是含有 n + 1 n+1 n+1个元素的集合, F : 2 S → 2 S F:2^S \to 2^S F:2S→2S是单调函数,则 F n + 1 ( ϕ ) F^{n+1}(\phi) Fn+1(ϕ)是 F F F的最小不动点, F n + 1 ( S ) F^{n+1}(S) Fn+1(S)是 F F F的最大不动点
- 范例:设 Y ∈ 2 S , s 0 ∈ S Y \in 2^S,s_0 \in S Y∈2S,s0∈S,定义 F ( Y ) = Y ∪ { s 0 } F(Y) = Y \cup \{s_0\} F(Y)=Y∪{s0},则 F F F是 2 S 2^S 2S上的单调函数,且对于任一 Y ⊆ S Y \subseteq S Y⊆S都有 F ( Y ) F(Y) F(Y)是 F F F的不动点。最小不动点是 { s 0 } \{s_0\} {s0},最大不动点是 S S S。
- 定义:给定模型
M
=
(
S
,
→
,
L
)
\mathcal{M} =(S,\to,L)
M=(S,→,L),设
Y
⊆
S
Y \subseteq S
Y⊆S。定义:
- p r e ∃ ( Y ) = { s ∈ S ∣ 存 在 s ′ ∈ S , 使 得 s → s ′ 且 s ′ ∈ Y } pre_\exists (Y) = \{s \in S | 存在s' \in S,使得s \to s'且s' \in Y \} pre∃(Y)={s∈S∣存在s′∈S,使得s→s′且s′∈Y},即若 s s s有一个后继在 Y Y Y中,则 s s s在 p r e ∃ ( Y ) pre_\exists (Y) pre∃(Y)中。
- p r e ∀ ( Y ) = { s ∈ S ∣ 对 于 所 有 s ′ ∈ S , 若 s → s ′ 则 s ′ ∈ Y } pre_\forall (Y) = \{s \in S | 对于所有 s' \in S,若s \to s'则s' \in Y \} pre∀(Y)={s∈S∣对于所有s′∈S,若s→s′则s′∈Y},即若 s s s所有后继都在 Y Y Y中,则 s s s在 p r e ∀ ( Y ) pre_\forall(Y) pre∀(Y)中。
p r e pre pre表示沿迁移关系向后移动
-
S
A
T
A
F
SAT_{AF}
SATAF定理:
- 设 ϕ \phi ϕ是一个CTL公式, M = ( S , → , L ) \mathcal{M} =(S,\to,L) M=(S,→,L)是一个模型,其中, S S S是含有 n + 1 n+1 n+1个状态的集合。
- 定义函数
F
:
2
S
→
2
S
F:2^S \to2^S
F:2S→2S为
F ( X ) = S A T ( ϕ ) ∪ p r e ∀ ( X ) , ∀ X ∈ 2 S F(X)=SAT(\phi) \cup pre_\forall (X),\forall X \in 2^S F(X)=SAT(ϕ)∪pre∀(X),∀X∈2S
则 S A T A F ( ϕ ) = F n + 1 ( ϕ ) SAT_{AF}(\phi)=F^{n+1}(\phi) SATAF(ϕ)=Fn+1(ϕ),即 S A T A F ( ϕ ) SAT_{AF}(\phi) SATAF(ϕ)是 F F F的最小不动点。
-
S
A
T
E
U
SAT_{EU}
SATEU定理:
- 设 ϕ , ψ \phi,\psi ϕ,ψ是CTL公式, M = ( S , → , L ) \mathcal{M} =(S,\to,L) M=(S,→,L)是一个模型,其中, S S S是含有 n + 1 n+1 n+1个状态的集合。
- 定义函数
G
:
2
S
→
2
S
G:2^S \to2^S
G:2S→2S为
G ( X ) = S A T ( ψ ) ∪ S A T ( ( ϕ ) ∩ p r e ∃ ( X ) ) , ∀ X ∈ 2 S G(X)=SAT(\psi) \cup SAT((\phi) \cap pre_\exists(X)),\forall X \in 2^S G(X)=SAT(ψ)∪SAT((ϕ)∩pre∃(X)),∀X∈2S
则 S A T E U ( ϕ , ψ ) = G n + 1 ( ϕ ) SAT_{EU}(\phi,\psi)=G^{n+1}(\phi) SATEU(ϕ,ψ)=Gn+1(ϕ),即 S A T E U ( ϕ , ψ ) SAT_{EU}(\phi,\psi) SATEU(ϕ,ψ)是 G G G的最小不动点。
-
S
A
T
E
G
SAT_{EG}
SATEG定理:
- 设 ϕ \phi ϕ是CTL公式, M = ( S , → , L ) \mathcal{M} =(S,\to,L) M=(S,→,L)是一个模型,其中, S S S是含有 n + 1 n+1 n+1个状态的集合。
- 定义函数
F
:
2
S
→
2
S
F:2^S \to2^S
F:2S→2S为
F ( X ) = S A T ( ϕ ) ∩ p r e ∃ ( X ) , ∀ X ∈ 2 S F(X)=SAT(\phi) \cap pre_\exists (X),\forall X \in 2^S F(X)=SAT(ϕ)∩pre∃(X),∀X∈2S
则 S A T E G ( ϕ ) = F n + 1 ( ϕ ) SAT_{EG}(\phi)=F^{n+1}(\phi) SATEG(ϕ)=Fn+1(ϕ),即 S A T E G ( ϕ ) SAT_{EG}(\phi) SATEG(ϕ)是 F F F的最大不动点。
CTL模型检测算法的伪代码
- 基本标记算法的伪代码:
- 函数
S
A
T
SAT
SAT:将CTL公式作为输入并返回满足该公式的状态集合。
f u n c t i o n S A T ( ϕ ) b e g i n c a s e ϕ i s ⊤ : r e t u r n S ϕ i s ⊤ : r e t u r n ϕ ϕ i s a u t o m i c : r e t u r n ϕ ϕ i s ¬ ϕ 1 : r e t u r n S − S A T ( ϕ 1 ) ϕ i s ϕ 1 ∧ ϕ 2 : r e t u r n S A T ( ϕ 1 ) ∩ S A T ( ϕ 2 ) ϕ i s ϕ 1 ∨ ϕ 2 : r e t u r n S A T ( ϕ 1 ) ∪ S A T ( ϕ 2 ) ϕ i s ϕ 1 → ϕ 2 : r e t u r n S A T ( ¬ ϕ 1 ∨ ϕ 2 ) ϕ i s A X ϕ 1 : r e t u r n S A T ( ¬ E X ¬ ϕ 1 ) ϕ i s E X ϕ 1 : r e t u r n S A T E X ϕ i s A [ ϕ 1 U ϕ 2 ] : r e t u r n S A T ( ¬ E [ ¬ ϕ 2 U ( ¬ ϕ 1 ∧ ¬ ϕ 2 ) ] ∨ E G ¬ ϕ 2 ) ϕ i s E [ ϕ 1 U ϕ 2 ] : r e t u r n S A T E U ( ϕ 1 , ϕ 2 ) ϕ i s E F ( ϕ 1 ) : r e t u r n S A T ( E ( ⊤ ∪ ϕ 1 ) ) ϕ i s E G ( ϕ 1 ) : r e t u r n S A T ( ¬ A F ¬ ϕ 1 ) ϕ i s A F ( ϕ 1 ) : r e t u r n S A T A F ( ϕ 1 ) ϕ i s A G ( ϕ 1 ) : r e t u r n S A T ( ¬ E F ¬ ϕ 1 ) e n d c a s e e n d f u n c t i o n \begin{aligned} &function \ SAT(\phi)&\quad\quad\quad\quad\quad\quad& \\ &begin \\ &\quad \ case \\ &\quad\quad \ \phi \ is \ \top:return \ S \\ &\quad\quad \ \phi \ is \ \top:return \ \phi \\ &\quad\quad \ \phi \ is \ automic:return \ \phi \\ &\quad\quad \ \phi \ is \ \neg \phi_1:return \ S - SAT(\phi_1)\\ &\quad\quad \ \phi \ is \ \phi_1 \wedge \phi_2:return \ SAT(\phi_1) \cap SAT(\phi_2)\\ &\quad\quad \ \phi \ is \ \phi_1 \vee \phi_2:return \ SAT(\phi_1) \cup SAT(\phi_2)\\ &\quad\quad \ \phi \ is \ \phi_1 \to \phi_2:return \ SAT(\neg \phi_1 \vee \phi_2)\\ &\quad\quad \ \phi \ is \ AX \phi_1 :return \ SAT(\neg EX \neg \phi_1)\\ &\quad\quad \ \phi \ is \ EX \phi_1 :return \ SAT_{EX}\\ &\quad\quad \ \phi \ is \ A[\phi_1 U \phi_2] :return \ SAT(\neg E[\neg \phi_2 U (\neg \phi_1 \wedge \neg \phi_2)] \vee EG \neg \phi_2)\\ &\quad\quad \ \phi \ is \ E[\phi_1 U \phi_2] :return \ SAT_{EU}(\phi_1,\phi_2) \\ &\quad\quad \ \phi \ is \ EF(\phi_1) :return \ SAT(E(\top \cup \phi_1)) \\ &\quad\quad \ \phi \ is \ EG(\phi_1) :return \ SAT(\neg AF \neg \phi_1) \\ &\quad\quad \ \phi \ is \ AF(\phi_1) :return \ SAT_{AF}(\phi_1) \\ &\quad\quad \ \phi \ is \ AG(\phi_1) :return \ SAT(\neg EF\neg \phi_1) \\ &\quad \ end \ case \\ &end \ function\ \\ \end{aligned} function SAT(ϕ)begin case ϕ is ⊤:return S ϕ is ⊤:return ϕ ϕ is automic:return ϕ ϕ is ¬ϕ1:return S−SAT(ϕ1) ϕ is ϕ1∧ϕ2:return SAT(ϕ1)∩SAT(ϕ2) ϕ is ϕ1∨ϕ2:return SAT(ϕ1)∪SAT(ϕ2) ϕ is ϕ1→ϕ2:return SAT(¬ϕ1∨ϕ2) ϕ is AXϕ1:return SAT(¬EX¬ϕ1) ϕ is EXϕ1:return SATEX ϕ is A[ϕ1Uϕ2]:return SAT(¬E[¬ϕ2U(¬ϕ1∧¬ϕ2)]∨EG¬ϕ2) ϕ is E[ϕ1Uϕ2]:return SATEU(ϕ1,ϕ2) ϕ is EF(ϕ1):return SAT(E(⊤∪ϕ1)) ϕ is EG(ϕ1):return SAT(¬AF¬ϕ1) ϕ is AF(ϕ1):return SATAF(ϕ1) ϕ is AG(ϕ1):return SAT(¬EF¬ϕ1) end caseend function - 函数
S
A
T
E
X
SAT_{EX}
SATEX:它通过调用
S
A
T
SAT
SAT计算满足
ϕ
\phi
ϕ的状态,然后,它沿着
→
\to
→向后寻找满足
E
X
ϕ
EX \phi
EXϕ的状态。
f u n c t i o n S A T E X ( ϕ ) l o c a l v a r X , Y b e g i n X : = S A T ( ϕ ) ; Y : = p r e E ( X ) ; r e t u r n Y e n d \begin{aligned} &function \ SAT_{EX}(\phi) \\ &local \ var \ X,Y\\ &begin \\ &\quad\quad X:=SAT(\phi); \\ &\quad\quad Y:=pre_E(X); \\ &\quad\quad return \ Y \\ &end \\ \end{aligned} function SATEX(ϕ)local var X,YbeginX:=SAT(ϕ);Y:=preE(X);return Yend - 函数
S
A
T
A
F
SAT_{AF}
SATAF:它通过调用
S
A
T
SAT
SAT计算满足
ϕ
\phi
ϕ的状态,然后,按照标记算法中所描述的方式将满足
A
F
ϕ
AF \phi
AFϕ的状态累计在一起。
f u n c t i o n S A T A F ( ϕ ) l o c a l v a r X , Y b e g i n X : = S ; Y : = S A T ( ϕ ) ; r e p e a t u n t i l X = Y ; b e g i n X : = Y ; Y : = Y ∪ p r e ∀ ( Y ) ; e n d r e t u r n Y e n d \begin{aligned} &function \ SAT_{AF}(\phi) \\ &local \ var X,Y \\ &begin \\ &\quad\quad X:=S; \\ &\quad\quad Y:=SAT(\phi); \\ &\quad\quad repeat \ until X = Y; \\ &\quad\quad begin \\ &\quad\quad\quad X:=Y; \\ &\quad\quad\quad Y:=Y \cup pre_\forall (Y); \\ &\quad\quad end \\ &\quad\quad return \ Y\\ &end \\ \end{aligned} function SATAF(ϕ)local varX,YbeginX:=S;Y:=SAT(ϕ);repeat untilX=Y;beginX:=Y;Y:=Y∪pre∀(Y);endreturn Yend - 函数
S
A
T
E
U
SAT_{EU}
SATEU:通过调用
S
A
T
SAT
SAT计算满足
ϕ
\phi
ϕ的状态,然后按照计算中所描述的方式将满足
E
[
ϕ
U
ψ
]
E[\phi U\psi]
E[ϕUψ]的状态累计在一起。
f u n c t i o n S A T E U ( ϕ , ψ ) l o c a l v a r W , X , Y b e g i n W : = S A T ( ϕ ) ; X : = S ; Y : = S A T ( ψ ) ; r e p e a t u n t i l X = Y ; b e g i n X : = Y ; Y : = Y ∪ p r e ∃ ( Y ) ; e n d r e t u r n Y e n d \begin{aligned} &function \ SAT_{EU}(\phi,\psi) \\ &local \ var W,X,Y \\ &begin \\ &\quad\quad W:=SAT(\phi); \\ &\quad\quad X:=S; \\ &\quad\quad Y:=SAT(\psi); \\ &\quad\quad repeat \ until \ X = Y; \\ &\quad\quad begin \\ &\quad\quad\quad X:=Y; \\ &\quad\quad\quad Y:=Y \cup pre_\exists(Y); \\ &\quad\quad end \\ &\quad\quad return \ Y\\ &end \\ \end{aligned} function SATEU(ϕ,ψ)local varW,X,YbeginW:=SAT(ϕ);X:=S;Y:=SAT(ψ);repeat until X=Y;beginX:=Y;Y:=Y∪pre∃(Y);endreturn Yend
- 函数
S
A
T
SAT
SAT:将CTL公式作为输入并返回满足该公式的状态集合。
- 伪代码解释:
- 主函数名称为 S A T SAT SAT,(单词satisfy的前三个字母大写),主函数将CTL公式作为输入
- 用 r e t u r n return return来返回函数结果
- l o c a l v a r local \ var local var来声明局部变量
- S − Y S-Y S−Y表示不在 Y Y Y中的所有 s ∈ S s \in S s∈S的集合
状态爆炸问题
- 原因:尽管标记算法关于模型的规模为线性的,但因为规模本身通常关于变量个数以及并行执行的系统组件的数目是指数的,导致程序中增加一个布尔变量,性质验证的复杂度会加倍。
- 定义:使状态空间变得非常大的趋势称为状态爆炸问题。
- 解决方法:有效的数据结构,又称为有序二元决策图,它表示状态集合而不是单个状态,SMV就是有序二元决策图。除此之外,还有很多其他的解决办法。