⇑ ⇑ ⇑ ⇑ ⇑ \Uparrow\Uparrow\Uparrow\Uparrow\Uparrow ⇑⇑⇑⇑⇑ 上方专栏内有更多内容 ⇑ ⇑ ⇑ ⇑ ⇑ \Uparrow\Uparrow\Uparrow\Uparrow\Uparrow ⇑⇑⇑⇑⇑
符号模型检验
模型检验是一种自动验证有限状态系统正确性的形式化方法。在模型检验中,用户提供所要验证系统的模型(可能的行为)和需求分析的规格(要求的行为);计算机通过执行算法穷举搜索状态空间中的每一个状态,进而给出确认系统模型是否满足系统规格的结论。模型检验具有:完全自动、支持部分验证、给出不满足规格的反例等优点。不足之处在于:状态组合制约了可以求解的应用问题的规模。上世纪80年代末期,OBDD引入模型检验所产生的符号模型检验技术,将OBDD 用作为表示布尔函数的数据结构。新的数据结构可以实现系统及其规格的精确表示和高效操作,从而有效改善了模型检验所能验证的系统规模。
不动点原理
CTL相关理论可查看上方专栏中符号模型检验(2)时态逻辑
Emerson和Clarke于1981年证明了CTL公式的不动点性。CTL模型检验算法正是基于这一性质建立的。为了理解不动点性,我们首先介绍代数结构以及函数中的一些相关知识。
对于集合S上的一个二元关系R,如果该二元关系具有自反、反对称、传递性质,即,满足:① ∀ a , b ∈ S , a R a \forall a,b\in S,aRa ∀a,b∈S,aRa; ② ∀ a , b ∈ S , a R b ∧ b R a ⇒ a = b \forall a,b\in S,aRb \land bRa \Rightarrow a=b ∀a,b∈S,aRb∧bRa⇒a=b;③ ∀ a , b , c ∈ S , a R b ∧ b R c ⇒ a R c \forall a,b,c\in S, aRb\land bRc \Rightarrow aRc ∀a,b,c∈S,aRb∧bRc⇒aRc, 那么称关系R为A上的一个偏序关系。具有偏序关系R的集合S,称为偏序集,记为 ⟨ S , R ⟩ \langle S,R\rangle ⟨S,R⟩ 或 ⟨ S , ≤ ⟩ \langle S, \le\rangle ⟨S,≤⟩。关系R也可以用“ ≤ \le ≤”表示。
例如:集合S的幂集 2 S 2^S 2S上的集合包含关系 ⊆ \subseteq ⊆是一个偏序关系, ⟨ 2 S , ⊆ ⟩ \langle 2^S, \subseteq\rangle ⟨2S,⊆⟩是一个偏序集。
对于偏序集 ⟨ S , ≤ ⟩ \langle S, \le\rangle ⟨S,≤⟩以及子集合 B ⊆ S B\subseteq S B⊆S,如果 ∀ b ∈ B \forall b\in B ∀b∈B,存在 a ∈ S a\in S a∈S满足 b ≤ a b \le a b≤a,则称 a a a为 B B B的一个上界;对于 B B B的上界 a a a,如果 ∀ c ∈ S \forall c\in S ∀c∈S, c c c是 B B B的上界且 a ≤ c a\le c a≤c,则称 a a a为 B B B的最小上界,并记为 ⊤ \top ⊤或 ⊔ B \sqcup B ⊔B。同理,对于偏序集 ⟨ S , ≤ ⟩ \langle S, \le\rangle ⟨S,≤⟩以及子集合 B ⊆ S B\subseteq S B⊆S,如果 ∀ b ∈ B \forall b\in B ∀b∈B,存在 a ∈ S a\in S a∈S满足 a ≤ b a\le b a≤b,则称 a a a为 B B B的一个下界;对于 B B B的下界 a a a,如果 ∀ c ∈ S \forall c\in S ∀c∈S, c c c是 B B B的下界且 c ≤ a c \le a c≤a,则称 a a a为 B B B的最大下界,并记为 ⊥ \bot ⊥或 ⊓ B \sqcap B ⊓B。
完全格 对于偏序集 ⟨ S , ≤ ⟩ \langle S, \le\rangle ⟨S,≤⟩,如果 ∀ B ⊆ S \forall B\subseteq S ∀B⊆S,存在 B B B的最小上界 ⊤ \top ⊤和最大下界 ⊥ \bot ⊥,那么称 ⟨ S , ≤ ⟩ \langle S, \le\rangle ⟨S,≤⟩为完全格。
例如,对于集合
S
=
{
0
,
1
,
2
}
S =\{0,1,2\}
S={0,1,2},考察偏序集合
⟨
2
S
,
⊆
⟩
\langle 2^S, \subseteq\rangle
⟨2S,⊆⟩:{0,1}和{0,2}的最小上界为{0,1,2}、最大下界为{0};{0,1,2}的最小上界为{0,1,2}、最大下界为空集
∅
\varnothing
∅。
对于偏序集
⟨
S
,
≤
⟩
\langle S, \le\rangle
⟨S,≤⟩上的函数
f
:
S
→
S
f:S\to S
f:S→S,如果
∀
a
,
b
∈
S
\forall a,b\in S
∀a,b∈S且
a
≤
b
⇒
f
(
a
)
≤
f
(
b
)
a\le b \Rightarrow f(a)\le f(b)
a≤b⇒f(a)≤f(b),则称
f
f
f为
S
S
S上的一个单调函数。显然,单调函数保持了集合上元素的偏序性。
不动点 对于函数
f
:
S
→
S
f:S\to S
f:S→S,
∀
a
∈
S
\forall a\in S
∀a∈S,若
f
(
a
)
=
a
f(a)=a
f(a)=a,则称
a
a
a为
f
f
f的不动点。若
∀
b
∈
{
S
∣
f
(
b
)
=
b
}
,
a
≤
b
\forall b\in \{S|f(b)=b\},a\le b
∀b∈{S∣f(b)=b},a≤b,那么
a
a
a称为
f
f
f的最小不动点;若
∀
b
∈
{
S
∣
f
(
b
)
=
b
}
,
b
≤
a
\forall b\in \{S|f(b)=b\},b\le a
∀b∈{S∣f(b)=b},b≤a,那么
a
a
a称为
f
f
f的最大不动点。
定理 完全格上的任一单调函数都有唯一的最大不动点和最小不动点。
完全格 ⟨ S , ≤ ⟩ \langle S, \le\rangle ⟨S,≤⟩上单调函数 f f f的最小不动点可以通过 ⊔ i f i ( ⊥ ) \sqcup_i f^i(\bot) ⊔ifi(⊥)来计算,亦即,最小上界序列 ⊥ , f ( ⊥ ) , f ( f ( ⊥ ) ) , f ( f ( f ( ⊥ ) ) ) , … \bot, f (\bot), f (f (\bot)), f ( f ( f (\bot))),\dots ⊥,f(⊥),f(f(⊥)),f(f(f(⊥))),…。该序列为 ≤ \le ≤下的全序,即 f i ( ⊥ ) ≤ f i + 1 ( ⊥ ) ( i = 1 , 2 , … ) f^i (\bot)\le f ^{i+1}(\bot) (i=1,2,\dots) fi(⊥)≤fi+1(⊥)(i=1,2,…)。
该结论的理由在于:由于 ⊥ \bot ⊥为格 ⟨ S , ≤ ⟩ \langle S, \le\rangle ⟨S,≤⟩的最小元,那么 ∀ a ∈ S \forall a\in S ∀a∈S有 ⊥ ≤ a \bot \le a ⊥≤a,而 f ( ⊥ ) ∈ S f (\bot )\in S f(⊥)∈S,故 ⊥ ≤ f ( ⊥ ) \bot \le f (\bot) ⊥≤f(⊥);由 f f f的单调性,可知 f ( ⊥ ) ≤ f ( f ( ⊥ ) ) f (\bot) \le f (f (\bot)) f(⊥)≤f(f(⊥));…;依次类推可得 f i ( ⊥ ) ≤ f i + 1 ( ⊥ ) ( i = 1 , 2 , … ) f ^i (\bot) \le f^{ i+1}(\bot) (i=1,2,…) fi(⊥)≤fi+1(⊥)(i=1,2,…)。同理,完全格 ⟨ S , ≤ ⟩ \langle S, \le\rangle ⟨S,≤⟩上单调函数f的最大不动点可以通过 ⊓ i f i ( ⊤ ) \sqcap_i f^i(⊤) ⊓ifi(⊤)来计算,亦即,最大上界序列 ⊤ , f ( ⊤ ) , f ( f ( ⊤ ) ) , f ( f ( f ( ⊤ ) ) ) , … ⊤, f (⊤), f ( f (⊤)), f ( f ( f (⊤))),… ⊤,f(⊤),f(f(⊤)),f(f(f(⊤))),…。该序列为 ≤ \le ≤下的全序,即, f i + 1 ( ⊤ ) ≤ f i ( ⊤ ) ( i = 1 , 2 , … ) f^{ i+1}(⊤) \le f^ i (⊤) (i=1,2,…) fi+1(⊤)≤fi(⊤)(i=1,2,…)。该结论的理由在于:由于 ⊤ ⊤ ⊤为格 ⟨ S , ≤ ⟩ \langle S, \le\rangle ⟨S,≤⟩的最大元,那么 ∀ a ∈ S \forall a\in S ∀a∈S有 a ≤ ⊤ a\le ⊤ a≤⊤,而 f ( ⊤ ) ∈ S f (⊤)\in S f(⊤)∈S,故 f ( ⊤ ) ≤ ⊤ f (⊤)\le ⊤ f(⊤)≤⊤;由 f f f的单调性,可知 f ( f ( ⊤ ) ) ≤ f ( ⊤ ) f ( f (⊤))\le f (⊤) f(f(⊤))≤f(⊤);…;依次类推可得 f i + 1 ( ⊤ ) ≤ f i ( ⊤ ) ( i = 1 , 2 , … ) f^{ i+1}(⊤) \le f^ i (⊤) (i=1,2,…) fi+1(⊤)≤fi(⊤)(i=1,2,…)。
下面基于Kripke结构考察CTL公式的不动点性。对于Kripke结构
M
=
(
S
,
R
,
L
)
M = (S, R, L)
M=(S,R,L)和CTL公式
ϕ
\phi
ϕ和
φ
\varphi
φ,建立M上满足公式
ϕ
\phi
ϕ和
φ
\varphi
φ的状态组成的集合:
⟦
ϕ
⟧
=
{
s
∈
S
∣
M
,
s
⊨
ϕ
}
⟦
φ
⟧
=
{
s
∈
S
∣
M
,
s
⊨
φ
}
\llbracket\phi\rrbracket= \{s\in S | M,s\models\phi\} \quad \llbracket\varphi\rrbracket= \{s\in S | M,s\models\varphi\}
[[ϕ]]={s∈S∣M,s⊨ϕ}[[φ]]={s∈S∣M,s⊨φ}
并定义公式
ϕ
\phi
ϕ和
φ
\varphi
φ之间的关系
≤
:
ϕ
≤
φ
\le: \phi \le\varphi
≤:ϕ≤φ 当且仅当
⟦
ϕ
⟧
⊆
⟦
φ
⟧
\llbracket\phi\rrbracket\subseteq\llbracket\varphi\rrbracket
[[ϕ]]⊆[[φ]]
显然,关系
≤
\le
≤是CTL公式上的一个偏序关系,
⟨
C
T
L
,
≤
⟩
\langle {\rm CTL}, \le\rangle
⟨CTL,≤⟩是一个偏序集。
根据集合的运算性质,
⟦
ϕ
⟧
∩
⟦
φ
⟧
\llbracket\phi\rrbracket\cap\llbracket\varphi\rrbracket
[[ϕ]]∩[[φ]]和
⟦
ϕ
⟧
∪
⟦
φ
⟧
\llbracket\phi\rrbracket\cup\llbracket\varphi\rrbracket
[[ϕ]]∪[[φ]]分别是
⟦
ϕ
⟧
\llbracket\phi\rrbracket
[[ϕ]]和
⟦
φ
⟧
\llbracket\varphi\rrbracket
[[φ]]的一个下界和一个上界,并且有
⟦
ϕ
⟧
∩
⟦
φ
⟧
=
⟦
ϕ
∧
φ
⟧
⟦
ϕ
⟧
∪
⟦
φ
⟧
=
⟦
ϕ
∨
φ
⟧
\llbracket\phi\rrbracket\cap\llbracket\varphi\rrbracket=\llbracket\phi\land\varphi\rrbracket \quad \llbracket\phi\rrbracket\cup\llbracket\varphi\rrbracket=\llbracket\phi\lor\varphi\rrbracket
[[ϕ]]∩[[φ]]=[[ϕ∧φ]][[ϕ]]∪[[φ]]=[[ϕ∨φ]]
由于CTL公式集合在合取(
∧
\land
∧)和析取(
∨
\lor
∨)运算下封闭,任意CTL公式
ϕ
\phi
ϕ和
φ
\varphi
φ的都存在上、下界。
⟨
C
T
L
,
≤
⟩
\langle {\rm CTL}, \le\rangle
⟨CTL,≤⟩的最小元素是
f
a
l
s
e
(
⟦
f
a
l
s
e
⟧
=
∅
)
{\rm false}(\llbracket {\rm false}\rrbracket= \varnothing)
false([[false]]=∅),最大元素为
t
r
u
e
(
⟦
t
r
u
e
⟧
=
S
)
\rm true(\llbracket \rm true\rrbracket= S)
true([[true]]=S)。
由于
⟨
2
S
,
⊆
⟩
\langle 2^S, \subseteq\rangle
⟨2S,⊆⟩是一个完全格,
2
S
2^S
2S上集合的包含
⊆
\subseteq
⊆是一个偏序关系,而且对于任意两个子集
S
1
,
S
2
∈
2
S
S_1,S_2\in 2^S
S1,S2∈2S,
S
1
∩
S
2
S_1\cap S_2
S1∩S2和
S
1
∪
S
2
S_1\cup S_2
S1∪S2都有定义,
2
S
2^S
2S的任一子集都存在最小上界和最大下界,所以格
⟨
2
S
,
⊆
⟩
\langle 2^S, \subseteq\rangle
⟨2S,⊆⟩的最小元素是空集
∅
\varnothing
∅,最大元素为
S
S
S。因为
ϕ
≤
φ
⇔
⟦
ϕ
⟧
⊆
⟦
φ
⟧
\phi \le\varphi\Leftrightarrow\llbracket\phi\rrbracket\subseteq\llbracket\varphi\rrbracket
ϕ≤φ⇔[[ϕ]]⊆[[φ]]所以偏序集
⟨
C
T
L
,
≤
⟩
\langle {\rm CTL}, \le\rangle
⟨CTL,≤⟩是完全格。
如下重复我们在之前已经给出CTL公式的一些扩展公理:
E
(
ϕ
⊳
φ
)
≡
φ
∨
(
ϕ
∧
E
◯
(
E
(
ϕ
⊳
φ
)
)
)
A
(
ϕ
⊳
φ
)
≡
φ
∨
(
ϕ
∧
A
◯
(
A
(
ϕ
⊳
φ
)
)
)
E
□
ϕ
≡
ϕ
∧
E
◯
(
E
□
ϕ
)
A
□
ϕ
≡
ϕ
∧
A
◯
(
A
□
ϕ
)
E
◊
ϕ
≡
ϕ
∨
E
◯
(
E
◊
ϕ
)
A
◊
ϕ
≡
ϕ
∨
A
◯
(
A
◊
ϕ
)
E(\phi \rhd \varphi) ≡ \varphi \lor (\phi \land E\bigcirc(E(\phi \rhd \varphi))) \quad A(\phi\rhd \varphi) ≡ \varphi \lor (\phi \land A\bigcirc(A(\phi\rhd\varphi)))\\ E\Box\phi ≡ \phi \land E\bigcirc(E\Box\phi)\quad A\Box\phi ≡ \phi \land A\bigcirc(A\Box\phi)\\ E\Diamond\phi ≡ \phi \lor E\bigcirc(E\Diamond\phi)\quad A\Diamond\phi ≡ \phi \lor A\bigcirc(A\Diamond\phi)
E(ϕ⊳φ)≡φ∨(ϕ∧E◯(E(ϕ⊳φ)))A(ϕ⊳φ)≡φ∨(ϕ∧A◯(A(ϕ⊳φ)))E□ϕ≡ϕ∧E◯(E□ϕ)A□ϕ≡ϕ∧A◯(A□ϕ)E◊ϕ≡ϕ∨E◯(E◊ϕ)A◊ϕ≡ϕ∨A◯(A◊ϕ)
不难看出,如果定义了相应的函数 f : C T L → C T L f: \rm CTL\to CTL f:CTL→CTL,则 E ( ϕ ⊳ φ ) 、 A ( ϕ ⊳ φ ) 、 E □ ϕ 、 A □ ϕ 、 E ◊ ϕ 、 A ◊ ϕ E(\phi \rhd \varphi) 、A(\phi\rhd \varphi) 、E\Box\phi、A\Box\phi、E\Diamond\phi 、A\Diamond\phi E(ϕ⊳φ)、A(ϕ⊳φ)、E□ϕ、A□ϕ、E◊ϕ、A◊ϕ都可以成为 f f f的不动点。例如,如果定义 f : f ( z ) = φ ∨ ( ϕ ∧ E ◯ z ) f:f(z) = \varphi \lor (\phi \land E\bigcirc z) f:f(z)=φ∨(ϕ∧E◯z),则有 f ( E ( ϕ ⊳ φ ) ) = φ ∨ ( ϕ ∧ E ◯ ( E ( ϕ ⊳ φ ) ) ) = E ( ϕ ⊳ φ ) f(E(\phi \rhd \varphi)) = \varphi \lor (\phi \land E\bigcirc(E(\phi \rhd \varphi)))= E(\phi \rhd \varphi) f(E(ϕ⊳φ))=φ∨(ϕ∧E◯(E(ϕ⊳φ)))=E(ϕ⊳φ),即 E ( ϕ ⊳ φ ) E(\phi \rhd \varphi) E(ϕ⊳φ)是函数 f ( z ) = φ ∨ ( ϕ ∧ E ◯ z ) f(z) = \varphi \lor (\phi \land E\bigcirc z) f(z)=φ∨(ϕ∧E◯z)的不动点。
定理(CTL公式的不动点特性) 对于Kripke结构模型
M
=
(
S
,
R
,
L
)
M = (S, R, L)
M=(S,R,L),
①
⟦
E
(
ϕ
⊳
φ
)
⟧
\llbracket E(\phi \rhd \varphi)\rrbracket
[[E(ϕ⊳φ)]]是函数
f
(
z
)
=
⟦
ϕ
⟧
∪
(
⟦
φ
⟧
∩
{
s
∈
S
∣
∃
u
∈
(
R
(
s
)
∩
z
)
}
)
f (z) =\llbracket\phi\rrbracket\cup (\llbracket\varphi\rrbracket\cap\{s\in S | \exist u\in(R(s) \cap z)\})
f(z)=[[ϕ]]∪([[φ]]∩{s∈S∣∃u∈(R(s)∩z)})的最小不动点;
②
⟦
A
(
ϕ
⊳
φ
)
⟧
\llbracket A(\phi \rhd \varphi)\rrbracket
[[A(ϕ⊳φ)]]是函数
f
(
z
)
=
⟦
ϕ
⟧
∪
(
⟦
φ
⟧
∪
{
s
∈
S
∣
∀
u
∈
(
R
(
s
)
∩
z
)
}
)
f (z) =\llbracket\phi\rrbracket\cup (\llbracket\varphi\rrbracket\cup\{s\in S | \forall u\in(R(s) \cap z)\})
f(z)=[[ϕ]]∪([[φ]]∪{s∈S∣∀u∈(R(s)∩z)})的最小不动点;
③
⟦
E
□
ϕ
⟧
\llbracket E\Box\phi\rrbracket
[[E□ϕ]]是函数
f
(
z
)
=
⟦
ϕ
⟧
∩
{
s
∈
S
∣
∃
u
∈
(
R
(
s
)
∩
z
)
}
f (z) =\llbracket\phi\rrbracket\cap\{s\in S | \exist u\in(R(s) \cap z)\}
f(z)=[[ϕ]]∩{s∈S∣∃u∈(R(s)∩z)}的最大不动点;
④
⟦
A
□
ϕ
⟧
\llbracket A\Box\phi \rrbracket
[[A□ϕ]]是函数
f
(
z
)
=
⟦
ϕ
⟧
∩
{
s
∈
S
∣
∀
u
∈
(
R
(
s
)
∩
z
)
}
f (z) =\llbracket\phi\rrbracket\cap\{s\in S | \forall u\in(R(s) \cap z)\}
f(z)=[[ϕ]]∩{s∈S∣∀u∈(R(s)∩z)}的最大不动点;
⑤
⟦
E
◊
ϕ
⟧
\llbracket E\Diamond\phi\rrbracket
[[E◊ϕ]]是函数
f
(
z
)
=
⟦
ϕ
⟧
∪
{
s
∈
S
∣
∃
u
∈
(
R
(
s
)
∩
z
)
}
f (z) =\llbracket\phi\rrbracket\cup\{s\in S | \exist u\in(R(s) \cap z)\}
f(z)=[[ϕ]]∪{s∈S∣∃u∈(R(s)∩z)}的最小不动点;
⑥
⟦
A
◊
ϕ
⟧
\llbracket A\Diamond\phi \rrbracket
[[A◊ϕ]]是函数
f
(
z
)
=
⟦
ϕ
⟧
∪
{
s
∈
S
∣
∀
u
∈
(
R
(
s
)
∩
z
)
}
f (z) =\llbracket\phi\rrbracket\cup\{s\in S | \forall u\in(R(s) \cap z)\}
f(z)=[[ϕ]]∪{s∈S∣∀u∈(R(s)∩z)}的最小不动点。
其中,
R
(
s
)
=
t
∈
S
∣
(
s
,
t
)
∈
R
R(s) = { t\in S | (s,t)\in R}
R(s)=t∈S∣(s,t)∈R为状态s的所有直接后继状态组成的集合。 (证明从略)
基于CTL公式的不动点特性,就可以设计出相应算法,来求出满足 E ( ϕ ⊳ φ ) 、 A ( ϕ ⊳ φ ) 、 E □ ϕ 、 A □ ϕ 、 E ◊ ϕ 、 A ◊ ϕ E(\phi \rhd \varphi) 、A(\phi\rhd \varphi) 、E\Box\phi、A\Box\phi、E\Diamond\phi 、A\Diamond\phi E(ϕ⊳φ)、A(ϕ⊳φ)、E□ϕ、A□ϕ、E◊ϕ、A◊ϕ等CTL公式的所有状态。下面给出了计算 E ( ϕ ⊳ φ ) 、 A ( ϕ ⊳ φ ) E(\phi \rhd \varphi) 、A(\phi\rhd \varphi) E(ϕ⊳φ)、A(ϕ⊳φ)的算法SatEU( )和SatAU ( )。
//E(Exists a path),A(All paths),X(Next-time),U(Until),F(Future),G(Global)
States function SatEU(Formula phi,Formula psi):
States Q_old, Q_new
Q_old=Empty_Set
while(Q_old!=Q_new):
Q_old=Q_new
Q_new= Sat(psi) UNION
(Sat(phi) INTERSECT
{s|EXISTS u BELONG_TO (R(s) INTERSECT Q_new)}
)
return Q_old
//E(Exists a path),A(All paths),X(Next-time),U(Until),F(Future),G(Global)
States function SatAU(Formula phi,Formula psi):
States Q_old, Q_new
Q_old=Empty_Set
while(Q_old!=Q_new):
Q_old=Q_new
Q_new= Sat(psi) UNION
(Sat(phi) INTERSECT
{s|R(s) SUBSET_OF Q_new}
)
return Q_old
//E(Exists a path),A(All paths),X(Next-time),U(Until),F(Future),G(Global)
States function Sat(Formula phi):
if phi==true return Universal_Set
if phi==false return Empty_Set
//原子命题
if phi BELONG_TO Atomic_Proposition return {s|phi BELONG_TO label(s)}
//以下判断都是说明phi分解为子命题的形式
if phi==NOT phi_1 return (Universal_Set DIFFERENCE_OF Sat(phi_1))
if phi==phi_1 AND phi_2
return (Sat(phi_1) INTERSECT Sat(phi_2))
if phi==E(X(phi_1))
return {s|((s,u) BELONG_TO R) AND (u BELONG_TO Sat(phi_1))}
if phi==E(U(phi_1,phi_2)) return SatEU(phi_1,phi_2)
if phi==A(U(phi_1,phi_2)) return SatAU(phi_1,phi_2)
算法SatEU(phi,psi:Formula)实质上是计算 f ( z ) f(z) f(z) 的最小不动点 ⊔ i f i ( ∅ ) \sqcup_if^i(\varnothing) ⊔ifi(∅)。由于Kripke结构模型的状态以及CTL公式的有限性,该算法一定可以终止。该算法也可以理解为:开始时任何一个状态都没有标记 E ( ϕ ⊳ φ ) E(\phi \rhd \varphi) E(ϕ⊳φ),也就是这时公式 E ( ϕ ⊳ φ ) E(\phi \rhd \varphi) E(ϕ⊳φ)在所有的状态下均为假 f 0 ( ∅ ) = ∅ f^0(\varnothing)= \varnothing f0(∅)=∅;第一次循环,得到 f 1 ( ∅ ) f^1(\varnothing) f1(∅),即 ⟦ φ ⟧ \llbracket\varphi\rrbracket [[φ]],把 ⟦ φ ⟧ \llbracket\varphi\rrbracket [[φ]]的所有状态都标记为 E ( ϕ ⊳ φ ) E(\phi \rhd \varphi) E(ϕ⊳φ);第二次循环中,计算 f 2 ( ∅ ) f^2(\varnothing) f2(∅),除了那些已经标记的状态,对使 ϕ \phi ϕ为真的状态,以及使 φ \varphi φ为真的直接后继状态,均标记为 E ( ϕ ⊳ φ ) E(\phi \rhd \varphi) E(ϕ⊳φ)。按这种方式一直进行下去,直到对某个k,计算出 f k ( ∅ ) f^k(\varnothing) fk(∅),这时所有应标记的状态都标记为 E ( ϕ ⊳ φ ) E(\phi \rhd \varphi) E(ϕ⊳φ),程序结束。
由于任意CTL公式都可以用原子命题、 ¬ ψ 1 \lnot\psi_1 ¬ψ1、 ψ 1 ∧ ψ 2 \psi_1\land\psi_2 ψ1∧ψ2、 E ◯ ψ 1 E\bigcirc\psi_1 E◯ψ1、 E ( ψ 1 ⊳ ψ 2 ) E(\psi_1\rhd\psi_2) E(ψ1⊳ψ2)、 E ◊ ψ 1 E\Diamond\psi_1 E◊ψ1等六种基本形式进行表示(称为CTL的存在形式),因此,对于待检验的CTL公式 ψ \psi ψ,将其进行等价转换后,应用上述三个函数便可以完成模型检验。设 ψ \psi ψ为仅含上述六种基本形式的待检验的CTL公式,则对于任意状态 s ∈ S s\in S s∈S, s ⊨ ψ s\models\psi s⊨ψ当且仅当 s ∈ S a t ( ψ ) s\in Sat(\psi) s∈Sat(ψ)。
例如,图示Kripke结构M = (S, R, L),其中,S={s0, s1, s2, s3}、R= {<s0, s1>,<s1, s2>, <s2, s1>, <s3, s2>}、L(s0)={p}、L(s1)={p}、L(s2)={q}、L(s3)=
∅
\varnothing
∅。对CTL公式
E
(
p
⊳
q
)
E(p\rhd q)
E(p⊳q)进行检验。
最后得到Sat(
E
(
p
⊳
q
)
E(p\rhd q)
E(p⊳q)) ={s0, s1, s2},即状态s0、s1、s2都满足CTL公式
E
(
p
⊳
q
)
E(p\rhd q)
E(p⊳q)。
SatEU(p, q)基于不动点计算满足E(p
⊳
\rhd
⊳q)的所有状态的执行过程如下:
① 初始时
Q
n
e
w
=
f
(
∅
)
=
S
a
t
(
q
)
=
s
2
Q_{new}= f(\varnothing) =Sat(q)={s_2}
Qnew=f(∅)=Sat(q)=s2
② 进行第一次循环后
Q
n
e
w
=
f
2
(
∅
)
=
S
a
t
(
q
)
∪
(
S
a
t
(
p
)
∩
{
s
∣
∃
u
∈
(
R
(
s
)
∩
{
s
2
}
)
}
)
=
{
s
2
}
∪
(
{
s
0
,
s
1
}
∩
{
s
1
,
s
3
}
)
=
{
s
2
}
∪
{
s
1
}
=
{
s
1
,
s
2
}
Q_{new} = f^2(\varnothing)\\ =Sat(q) \cup (Sat(p)\cap\{s | \exist u\in(R(s)\cap \{s_2\})\})\\ =\{s_2\}\cup (\{s_0, s_1\}\cap\{s_1, s_3\})\\ =\{s_2\}\cup\{s_1\}\\ =\{s_1,s_2\}
Qnew=f2(∅)=Sat(q)∪(Sat(p)∩{s∣∃u∈(R(s)∩{s2})})={s2}∪({s0,s1}∩{s1,s3})={s2}∪{s1}={s1,s2}
③ 进行第二次循环后
Q
n
e
w
=
f
3
(
∅
)
=
S
a
t
(
q
)
∪
(
S
a
t
(
p
)
∩
{
s
∣
∃
u
∈
(
R
(
s
)
∩
{
s
1
,
s
2
}
)
}
)
=
{
s
2
}
∪
(
{
s
0
,
s
1
}
∩
{
s
0
,
s
1
,
s
2
,
s
3
}
)
=
{
s
2
}
∪
{
s
0
,
s
1
}
=
{
s
0
,
s
1
,
s
2
}
Q_{new} = f^3(\varnothing)\\ =Sat(q) \cup (Sat(p)\cap\{s | \exist u\in(R(s)\cap \{s_1,s_2\})\})\\ =\{s_2\}\cup (\{s_0, s_1\}\cap\{s_0,s_1, s_2,s_3\})\\ =\{s_2\}\cup\{s_0,s_1\}\\ =\{s_0,s_1,s_2\}
Qnew=f3(∅)=Sat(q)∪(Sat(p)∩{s∣∃u∈(R(s)∩{s1,s2})})={s2}∪({s0,s1}∩{s0,s1,s2,s3})={s2}∪{s0,s1}={s0,s1,s2}
④ 进行第三次循环后
Q
n
e
w
=
f
4
(
∅
)
=
S
a
t
(
q
)
∪
(
S
a
t
(
p
)
∩
{
s
∣
∃
u
∈
(
R
(
s
)
∩
{
s
0
,
s
1
,
s
2
}
)
}
)
=
{
s
2
}
∪
(
{
s
0
,
s
1
}
∩
{
s
0
,
s
1
,
s
2
,
s
3
}
)
=
{
s
2
}
∪
{
s
0
,
s
1
}
=
{
s
0
,
s
1
,
s
2
}
=
f
3
(
∅
)
Q_{new} = f^4(\varnothing)\\ =Sat(q) \cup (Sat(p)\cap\{s | \exist u\in(R(s)\cap \{s_0,s_1,s_2\})\})\\ =\{s_2\}\cup (\{s_0, s_1\}\cap\{s_0,s_1, s_2,s_3\})\\ =\{s_2\}\cup\{s_0,s_1\}\\ =\{s_0,s_1,s_2\}=f^3(\varnothing)
Qnew=f4(∅)=Sat(q)∪(Sat(p)∩{s∣∃u∈(R(s)∩{s0,s1,s2})})={s2}∪({s0,s1}∩{s0,s1,s2,s3})={s2}∪{s0,s1}={s0,s1,s2}=f3(∅)
符号模型检验
随着程序或系统规模的增大,其状态数目将呈指数增加而引起组合爆炸,使得模型检验技术无法实用化。随着OBDD技术的出现和发展,McMillan等与1992年将其应用到模型检验技术中,建立了符号模型检验技术,有效地缓解了状态组合爆炸问题。符号模型检验技术的核心是:用OBDD隐含地表示Kripke结构和CTL公式,并且利用OBDD操作实现不动点计算。
从前面的讨论中,我们知道OBDD可以有效地表示和操作布尔函数,因此符号模型检验的第一步是用布尔函数隐式地表示Kripke结构的状态、转移关系、原子命题。
对于Kripke结构M = (S, R, L),S中的状态可以用
n
=
⌈
log
2
(
∣
S
∣
)
⌉
n = \lceil \log_2(|S|)\rceil
n=⌈log2(∣S∣)⌉维0-1向量
X
=
(
x
1
,
x
2
,
…
,
x
n
)
\bm X = (x_1,x_2,…,x_n)
X=(x1,x2,…,xn)或二进制串
[
x
1
x
2
…
x
n
]
[x_1x_2…x_n]
[x1x2…xn]进行编码,这样集合S可用如下布尔函数表示:
f
S
(
X
)
=
{
1
X
=
e
n
c
o
d
e
d
(
s
)
,
s
∈
S
0
o
t
h
e
r
s
f_S(\bm X)=\begin{cases}1&\bm X=encoded(s),s\in S\\0&others\end{cases}
fS(X)={10X=encoded(s),s∈Sothers
集合
S
1
S_1
S1、
S
2
S_2
S2的并、交、补等运算,可以用各自对应的布尔函数
f
S
1
(
X
)
f_{S_1}(\bm X)
fS1(X)、
f
S
2
(
X
)
f_{S_2}(\bm X)
fS2(X)的逻辑与(
⋅
\cdot
⋅)、或(
+
+
+)、非(
′
'
′)等来实现:
f
S
1
∪
S
2
(
X
)
=
f
S
1
(
X
)
+
f
S
2
(
X
)
f
S
1
∩
S
2
(
X
)
f_{S_1\cup S_2}(\bm X)=f_{S_1}(\bm X)+f_{S_2}(\bm X)f_{S_1\cap S_2}(\bm X)
fS1∪S2(X)=fS1(X)+fS2(X)fS1∩S2(X)
f
S
1
−
S
2
(
X
)
=
f
S
1
(
X
)
(
f
S
2
(
X
)
)
′
f_{S_1- S_2}(\bm X)=f_{S_1}(\bm X)(f_{S_2}(\bm X))'
fS1−S2(X)=fS1(X)(fS2(X))′
转移关系R为状态之间的序偶集合,对于
∀
⟨
a
,
b
⟩
∈
R
\forall \langle a, b \rangle\in R
∀⟨a,b⟩∈R,设状态
a
、
b
a、b
a、b的编码分别为
X
\bm X
X和
Y
\bm Y
Y,那么可以用2n维0-1向量
(
x
1
,
x
2
,
…
,
x
n
,
y
1
,
y
2
,
…
,
y
n
)
(x_1,x_2,…,x_n,y_1,y_2,…,y_n)
(x1,x2,…,xn,y1,y2,…,yn)或二进制串
[
x
1
x
2
…
x
n
y
1
y
2
…
y
n
]
[x_1x_2…x_n y_1y_2…y_n]
[x1x2…xny1y2…yn]表示序偶,对应的布尔函数为
f
⟨
a
,
b
⟩
(
X
,
Y
)
=
{
1
X
=
e
n
c
o
d
e
d
(
a
)
,
Y
=
e
n
c
o
d
e
d
(
b
)
,
⟨
a
,
b
⟩
∈
R
0
o
t
h
e
r
s
f_{\langle a,b \rangle}(\bm X,\bm Y)=\begin{cases}1&\bm X=encoded(a),\bm Y=encoded(b),\langle a,b \rangle \in R\\0&others\end{cases}
f⟨a,b⟩(X,Y)={10X=encoded(a),Y=encoded(b),⟨a,b⟩∈Rothers
转移关系R对应的布尔函数为:
f
R
(
X
,
Y
)
=
∑
⟨
a
,
b
⟩
∈
R
f
⟨
a
,
b
⟩
(
X
,
Y
)
.
f_R(\bm X,\bm Y) = \sum\limits_{\langle a,b \rangle\in R} f_{\langle a,b \rangle}(\bm X,\bm Y).
fR(X,Y)=⟨a,b⟩∈R∑f⟨a,b⟩(X,Y).
由于标记函数L标注了状态中成立的原子命题,所以可以将状态中所标注的原子命题用所对应状态的状态编码表示,即,L(s)用状态s对应的n维0-1向量
X
\bm X
X表示。
符号模型检验的第二步是用布尔函数隐式地表示CTL公式。为此,引入全称量词和存在量词:
∃
(
x
1
,
x
2
,
…
,
x
n
)
f
\exist_{(x_1,x_2,…,x_n)}f
∃(x1,x2,…,xn)f表示
x
1
,
x
2
,
…
,
x
n
x_1,x_2,…,x_n
x1,x2,…,xn中的某些布尔变量使得f为真,
∀
(
x
1
,
x
2
,
…
,
x
n
)
f
\forall_{ (x_1,x_2,…,x_n)} f
∀(x1,x2,…,xn)f表示x_1,x_2,…,x_n中的所有布尔变量使得f为真,即,
∃
(
x
1
,
x
2
,
…
,
x
n
)
f
=
∑
x
1
,
x
2
,
…
,
x
n
∈
{
0
,
1
}
f
(
x
1
,
x
2
,
…
,
x
n
)
\exist_{(x_1,x_2,…,x_n)} f = \sum_{ x_1,x_2,…,x_n \in\{0,1\}} f(x_1,x_2,…,x_n)
∃(x1,x2,…,xn)f=∑x1,x2,…,xn∈{0,1}f(x1,x2,…,xn)
∀
(
x
1
,
x
2
,
…
,
x
n
)
f
=
∏
x
1
,
x
2
,
…
,
x
n
∈
{
0
,
1
}
f
(
x
1
,
x
2
,
…
,
x
n
)
\forall_{(x_1,x_2,…,x_n)} f = \prod_{ x_1,x_2,…,x_n \in\{0,1\}} f(x_1,x_2,…,x_n)
∀(x1,x2,…,xn)f=∏x1,x2,…,xn∈{0,1}f(x1,x2,…,xn).
例如,根据CTL语义,
⟦
E
◯
ϕ
⟧
\llbracket E\bigcirc\phi\rrbracket
[[E◯ϕ]]中的状态
X
=
(
x
1
,
x
2
,
…
,
x
n
)
\bm X = (x_1,x_2,…,x_n)
X=(x1,x2,…,xn)满足:存在一个状态
Y
=
(
y
1
y
2
…
y
n
)
\bm Y=(y_1y_2…y_n)
Y=(y1y2…yn),使得
⟨
X
,
Y
⟩
∈
R
\langle \bm X, \bm Y\rangle\in R
⟨X,Y⟩∈R且
Y
∈
⟦
ϕ
⟧
Y\in\llbracket\phi\rrbracket
Y∈[[ϕ]],即,
f
E
◯
ϕ
(
X
)
=
∃
(
y
1
y
2
…
y
n
)
(
f
R
(
X
,
Y
)
⋅
f
ϕ
(
Y
)
)
f _{E\bigcirc\phi} (\bm X) = \exist_{(y_1y_2…y_n)} (f_ R (\bm X,\bm Y ) \cdot f _\phi (\bm Y))
fE◯ϕ(X)=∃(y1y2…yn)(fR(X,Y)⋅fϕ(Y))
其中,
f
ϕ
(
Y
)
f _\phi (\bm Y)
fϕ(Y)为公式
ϕ
\phi
ϕ成立的状态集对应的布尔函数。类似地,
⟦
A
◯
ϕ
⟧
\llbracket A\bigcirc\phi\rrbracket
[[A◯ϕ]]中的状态
X
=
(
x
1
,
x
2
,
…
,
x
n
)
\bm X = (x_1,x_2,…,x_n)
X=(x1,x2,…,xn)满足:所有
⟨
X
,
Y
⟩
∈
R
\langle \bm X, \bm Y\rangle\in R
⟨X,Y⟩∈R的状态
Y
=
(
y
1
y
2
…
y
n
)
\bm Y=(y_1y_2…y_n)
Y=(y1y2…yn)使得
Y
∈
⟦
ϕ
⟧
Y\in\llbracket\phi\rrbracket
Y∈[[ϕ]]成立,即,
f
A
◯
ϕ
(
X
)
=
∀
(
y
1
y
2
…
y
n
)
(
(
f
R
(
X
,
Y
)
)
′
+
f
ϕ
(
Y
)
)
f _{A\bigcirc\phi} (\bm X) = \forall_{(y_1y_2…y_n)} ((f_ R (\bm X,\bm Y ))' + f _\phi (\bm Y))
fA◯ϕ(X)=∀(y1y2…yn)((fR(X,Y))′+fϕ(Y))
图示具有4个状态的Kripke结构,状态s0、s1、s2和s3可依次编码为(0,0)、(0,1)、(1,0)、(1,1),从而,状态集合S、转移关系R对应的布尔函数为:
f
S
(
X
)
=
x
1
′
x
2
′
+
x
1
′
x
2
+
x
1
x
2
′
+
x
1
x
2
=
1
f_S(\bm X) = x_1'x_2'+ x_1'x_2 + x_1x_2' + x_1x_2 = 1
fS(X)=x1′x2′+x1′x2+x1x2′+x1x2=1
f
R
(
X
,
Y
)
=
x
1
′
x
2
′
y
1
′
y
2
′
+
x
1
′
x
2
′
y
1
′
y
2
+
x
1
′
x
2
′
y
1
y
2
′
+
x
1
′
x
2
y
1
y
2
+
x
1
x
2
′
y
1
′
y
2
+
x
1
x
2
′
y
1
y
2
+
x
1
x
2
y
1
′
y
2
′
=
x
1
′
x
2
′
y
1
′
+
x
1
′
x
2
′
y
1
y
2
′
+
x
1
′
x
2
y
1
y
2
+
x
1
x
2
′
y
2
+
x
1
x
2
y
1
′
y
2
′
fR(X,Y) = x_1'x_2'y_1'y_2'+ x_1'x_2'y_1'y_2+ x_1'x_2'y_1y_2'+ x_1'x_2y_1y_2+ x_1x_2'y_1'y_2+ x_1x_2'y_1y_2+x_1x_2y_1'y_2'\\ = x_1'x_2'y_1' + x_1'x_2'y_1y_2'+ x_1'x_2y_1y_2+ x_1x_2'y_2+x_1x_2y_1'y_2'
fR(X,Y)=x1′x2′y1′y2′+x1′x2′y1′y2+x1′x2′y1y2′+x1′x2y1y2+x1x2′y1′y2+x1x2′y1y2+x1x2y1′y2′=x1′x2′y1′+x1′x2′y1y2′+x1′x2y1y2+x1x2′y2+x1x2y1′y2′
下面考察
A
◊
p
A\Diamond p
A◊p的符号模型检验,由前面内容知
⟦
A
◊
p
⟧
\llbracket A\Diamond p\rrbracket
[[A◊p]]是函数
f
(
z
)
=
⟦
p
⟧
∪
{
s
∈
S
∣
∀
u
∈
(
R
(
s
)
∩
z
)
}
f(z) =\llbracket p\rrbracket\cup \{s\in S | \forall u\in (R(s) \cap z)\}
f(z)=[[p]]∪{s∈S∣∀u∈(R(s)∩z)}的最小不动点。状态集合
{
s
∈
S
∣
∀
u
∈
(
R
(
s
)
∩
z
)
}
\{s\in S | \forall u\in (R(s) \cap z)\}
{s∈S∣∀u∈(R(s)∩z)}对应的布尔函数为:
f
{
s
∈
S
∣
∀
u
∈
(
R
(
s
)
∩
z
)
}
(
X
)
=
∀
(
v
1
,
v
2
,
…
,
v
n
)
(
f
R
(
X
,
V
)
→
f
z
(
V
)
)
=
∏
v
1
,
v
2
,
…
,
v
n
∈
{
0
,
1
}
(
f
R
(
X
,
(
v
1
,
v
2
,
…
,
v
n
)
)
′
+
f
z
(
v
1
,
v
2
,
…
,
v
n
)
)
f_{\{s\in S | \forall u\in (R(s) \cap z)\}}(\bm X) = \forall (v_1,v_2,…,v_n) (f_R (\bm X,\bm V)\to f _z(\bm V))\\ = \prod_{ v_1,v_2,…,v_n \in\{0,1\}} ( f_R(\bm X,(v_1,v_2,…,v_n))'+ f_z(v_1,v_2,…,v_n))
f{s∈S∣∀u∈(R(s)∩z)}(X)=∀(v1,v2,…,vn)(fR(X,V)→fz(V))=∏v1,v2,…,vn∈{0,1}(fR(X,(v1,v2,…,vn))′+fz(v1,v2,…,vn))
显然,本例中有:
f
⟦
p
⟧
(
X
)
=
x
1
x
2
f_{\llbracket p\rrbracket}(\bm X) = x_1x_2
f[[p]](X)=x1x2
f
R
(
X
,
V
)
=
x
1
′
x
2
′
v
1
′
+
x
1
′
x
2
′
v
1
v
2
′
+
x
1
′
x
2
v
1
v
2
+
x
1
x
2
′
v
2
+
x
1
x
2
v
1
′
v
2
′
f_R(\bm X,\bm V) = x_1'x_2'v_1'+ x_1'x_2'v_1v_2'+ x_1'x_2v_1v_2+ x_1x_2'v_2+x_1x_2v_1'v_2'
fR(X,V)=x1′x2′v1′+x1′x2′v1v2′+x1′x2v1v2+x1x2′v2+x1x2v1′v2′
V = \bm V= V= | f R ( X , V ) = f_R(\bm X,\bm V)= fR(X,V)= |
---|---|
(0,0) | x 1 ′ x 2 ′ + x 1 x 2 x_1'x_2'+x_1x_2 x1′x2′+x1x2 |
(0,1) | x 1 ′ x 2 ′ + x 1 x 2 ′ = x 2 ′ x_1'x_2'+x_1x_2'=x_2' x1′x2′+x1x2′=x2′ |
(1,0) | x 1 ′ x 2 ′ x_1'x_2' x1′x2′ |
(1,1) | x 1 ′ x 2 + x 1 x 2 ′ x_1'x_2+x_1x_2' x1′x2+x1x2′ |
其中,
V
=
(
v
1
,
v
2
)
\bm V = (v_1,v_2)
V=(v1,v2)是所考察状态的编码;
f
R
(
X
,
V
)
=
f_R(\bm X,\bm V)=
fR(X,V)=是以状态
V
\bm V
V为直接后继状态的状态组成的集合的布尔函数。可以实施如下符号计算:
f
(
∅
)
f (\varnothing)
f(∅)对应的布尔函数
x
1
x
2
+
(
∀
(
v
1
,
v
2
)
(
f
R
(
X
,
V
)
→
f
a
l
s
e
)
)
=
x
1
x
2
x_1x_2+(\forall_{(v1,v2)}(f_R (\bm X,\bm V)\to false)) = x_1x_2
x1x2+(∀(v1,v2)(fR(X,V)→false))=x1x2
f
2
(
∅
)
f ^2(\varnothing)
f2(∅)对应的布尔函数
x
1
x
2
+
(
∀
(
v
1
,
v
2
)
(
f
R
(
X
,
V
)
→
(
v
1
v
2
)
)
)
=
x
1
x
2
+
∏
v
1
,
v
2
∈
{
0
,
1
}
(
(
f
R
(
X
,
V
)
)
′
+
v
1
v
2
)
=
x
1
x
2
+
(
f
R
(
X
,
(
0
,
0
)
)
′
(
f
R
(
X
,
(
0
,
1
)
)
′
(
f
R
(
X
,
(
1
,
0
)
)
′
⋅
1
=
x
1
x
2
+
(
x
1
′
x
2
′
+
x
1
x
2
)
′
(
x
2
)
′
(
x
1
′
x
2
′
)
′
=
x
2
x_1x_2+(\forall_{(v1,v2)}(f_R (\bm X,\bm V)\to (v_1v_2)))\\ =x_1x_2+\prod_{v_1,v_2\in\{0,1\}}((f_R (\bm X,\bm V))'+v_1v_2)\\ =x_1x_2+(f_R (\bm X,(0,0))'(f_R (\bm X,(0,1))'(f_R (\bm X,(1,0))'\cdot 1\\ =x_1x_2+(x_1'x_2'+x_1x_2)'(x_2)'(x_1'x_2')'\\ =x_2
x1x2+(∀(v1,v2)(fR(X,V)→(v1v2)))=x1x2+∏v1,v2∈{0,1}((fR(X,V))′+v1v2)=x1x2+(fR(X,(0,0))′(fR(X,(0,1))′(fR(X,(1,0))′⋅1=x1x2+(x1′x2′+x1x2)′(x2)′(x1′x2′)′=x2
f
3
(
∅
)
f ^3(\varnothing)
f3(∅)对应的布尔函数
x
1
x
2
+
(
∀
(
v
1
,
v
2
)
(
f
R
(
X
,
V
)
→
(
v
2
)
)
)
=
x
1
x
2
+
∏
v
1
,
v
2
∈
{
0
,
1
}
(
(
f
R
(
X
,
V
)
)
′
+
v
2
)
=
x
1
x
2
+
(
f
R
(
X
,
(
0
,
0
)
)
′
⋅
1
⋅
(
f
R
(
X
,
(
1
,
0
)
)
′
⋅
1
=
x
1
x
2
+
(
x
1
′
x
2
′
+
x
1
x
2
)
′
(
x
1
′
x
2
′
)
′
=
x
1
+
x
2
x_1x_2+(\forall_{(v1,v2)}(f_R (\bm X,\bm V)\to (v_2)))\\ =x_1x_2+\prod_{v_1,v_2\in\{0,1\}}((f_R (\bm X,\bm V))'+v_2)\\ =x_1x_2+(f_R (\bm X,(0,0))'\cdot 1\cdot(f_R (\bm X,(1,0))'\cdot 1\\ =x_1x_2+(x_1'x_2'+x_1x_2)'(x_1'x_2')'\\ =x_1+x_2
x1x2+(∀(v1,v2)(fR(X,V)→(v2)))=x1x2+∏v1,v2∈{0,1}((fR(X,V))′+v2)=x1x2+(fR(X,(0,0))′⋅1⋅(fR(X,(1,0))′⋅1=x1x2+(x1′x2′+x1x2)′(x1′x2′)′=x1+x2
f
4
(
∅
)
f ^4(\varnothing)
f4(∅)对应的布尔函数
x
1
x
2
+
(
∀
(
v
1
,
v
2
)
(
f
R
(
X
,
V
)
→
(
v
1
+
v
2
)
)
)
=
x
1
x
2
+
∏
v
1
,
v
2
∈
{
0
,
1
}
(
(
f
R
(
X
,
V
)
)
′
+
v
1
+
v
2
)
=
x
1
x
2
+
(
f
R
(
X
,
(
0
,
0
)
)
′
⋅
1
⋅
1
⋅
1
=
x
1
x
2
+
(
x
1
′
x
2
′
+
x
1
x
2
)
′
=
x
1
+
x
1
′
x
2
(
=
x
1
+
x
2
)
x_1x_2+(\forall_{(v1,v2)}(f_R (\bm X,\bm V)\to (v_1+v_2)))\\ =x_1x_2+\prod_{v_1,v_2\in\{0,1\}}((f_R (\bm X,\bm V))'+v_1+v_2)\\ =x_1x_2+(f_R (\bm X,(0,0))'\cdot 1\cdot 1 \cdot 1\\ =x_1x_2+(x_1'x_2'+x_1x_2)'\\ =x_1+x_1'x_2(=x_1+x_2)
x1x2+(∀(v1,v2)(fR(X,V)→(v1+v2)))=x1x2+∏v1,v2∈{0,1}((fR(X,V))′+v1+v2)=x1x2+(fR(X,(0,0))′⋅1⋅1⋅1=x1x2+(x1′x2′+x1x2)′=x1+x1′x2(=x1+x2)
由于
f
4
(
∅
)
=
f
5
(
∅
)
f ^4(\varnothing)= f^5(\varnothing)
f4(∅)=f5(∅),算法执行终止。满足条件
A
◊
p
A\Diamond p
A◊p的所有状态
⊔
i
f
i
(
∅
)
=
x
1
+
x
1
′
x
2
\sqcup_i f^i(\varnothing)=x_1+ x_1'x_2
⊔ifi(∅)=x1+x1′x2。值得注意的是,上面描述过程完全采用的是布尔函数的形式,但在实际符号模型检验实施中是采用的与之相应的OBDD描述的操作。