符号模型检验(8)符号、模型、检验——OBDD,Kripke,CTL

本文详细介绍了符号模型检验的概念,它使用有限状态系统和需求规格来验证系统的正确性。文章重点讨论了CTL(计算树逻辑)中的不动点特性,并展示了如何基于这些特性设计算法来计算满足特定CTL公式的状态。通过不动点计算,可以确定系统模型是否满足给定的规格,这对于大规模系统的验证尤其有用。此外,文章还探讨了如何用布尔函数表示Kripke结构和CTL公式,并举例说明了如何进行符号模型检验的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

⇑ ⇑ ⇑ ⇑ ⇑ \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,bSaRa; ② ∀ a , b ∈ S , a R b ∧ b R a ⇒ a = b \forall a,b\in S,aRb \land bRa \Rightarrow a=b a,bS,aRbbRaa=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,cS,aRbbRcaRc, 那么称关系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 BS,如果 ∀ b ∈ B \forall b\in B bB,存在 a ∈ S a\in S aS满足 b ≤ a b \le a ba,则称 a a a B B B的一个上界;对于 B B B的上界 a a a,如果 ∀ c ∈ S \forall c\in S cS c c c B B B的上界且 a ≤ c a\le c ac,则称 a a a B B B的最小上界,并记为 ⊤ \top ⊔ B \sqcup B B。同理,对于偏序集 ⟨ S , ≤ ⟩ \langle S, \le\rangle S,以及子集合 B ⊆ S B\subseteq S BS,如果 ∀ b ∈ B \forall b\in B bB,存在 a ∈ S a\in S aS满足 a ≤ b a\le b ab,则称 a a a B B B的一个下界;对于 B B B的下界 a a a,如果 ∀ c ∈ S \forall c\in S cS c c c B B B的下界且 c ≤ a c \le a ca,则称 a a a B B B的最大下界,并记为 ⊥ \bot ⊓ B \sqcap B B

完全格 对于偏序集 ⟨ S , ≤ ⟩ \langle S, \le\rangle S,,如果 ∀ B ⊆ S \forall B\subseteq S BS,存在 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:SS,如果 ∀ a , b ∈ S \forall a,b\in S a,bS a ≤ b ⇒ f ( a ) ≤ f ( b ) a\le b \Rightarrow f(a)\le f(b) abf(a)f(b),则称 f f f S S S上的一个单调函数。显然,单调函数保持了集合上元素的偏序性。

不动点 对于函数 f : S → S f:S\to S f:SS ∀ a ∈ S \forall a\in S aS,若 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{Sf(b)=b},ab,那么 a a a称为 f f f的最小不动点;若 ∀ b ∈ { S ∣ f ( b ) = b } , b ≤ a \forall b\in \{S|f(b)=b\},b\le a b{Sf(b)=b},ba,那么 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 aS ⊥ ≤ 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 aS 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\} [[ϕ]]={sSM,sϕ}[[φ]]={sSM,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,S22S S 1 ∩ S 2 S_1\cap S_2 S1S2 S 1 ∪ S 2 S_1\cup S_2 S1S2都有定义, 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:CTLCTL,则 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)=φ(ϕEz),则有 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)=φ(ϕEz)的不动点。

定理(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)=[[ϕ]]([[φ]]{sS∣∃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)=[[ϕ]]([[φ]]{sS∣∀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)=[[ϕ]]{sS∣∃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)=[[ϕ]]{sS∣∀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)=[[ϕ]]{sS∣∃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)=[[ϕ]]{sS∣∀u(R(s)z)}的最小不动点。
其中, R ( s ) = t ∈ S ∣ ( s , t ) ∈ R R(s) = { t\in S | (s,t)\in R} R(s)=tS(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 sS s ⊨ ψ s\models\psi sψ当且仅当 s ∈ S a t ( ψ ) s\in Sat(\psi) sSat(ψ)

例如,图示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(pq)进行检验。
最后得到Sat( E ( p ⊳ q ) E(p\rhd q) E(pq)) ={s0, s1, s2},即状态s0、s1、s2都满足CTL公式 E ( p ⊳ q ) E(p\rhd q) E(pq)

s0:p
s1:p
s2:q
s3

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] [x1x2xn]进行编码,这样集合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),sSothers

集合 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) fS1S2(X)=fS1(X)+fS2(X)fS1S2(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))' fS1S2(X)=fS1(X)(fS2(X))

转移关系R为状态之间的序偶集合,对于 ∀ ⟨ a , b ⟩ ∈ R \forall \langle a, b \rangle\in R a,bR,设状态 a 、 b a、b ab的编码分别为 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] [x1x2xny1y2yn]表示序偶,对应的布尔函数为
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} fa,b(X,Y)={10X=encoded(a),Y=encoded(b),a,bRothers
转移关系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,bRfa,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=(y1y2yn),使得 ⟨ X , Y ⟩ ∈ R \langle \bm X, \bm Y\rangle\in R X,YR 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)=(y1y2yn)(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,YR的状态 Y = ( y 1 y 2 … y n ) \bm Y=(y_1y_2…y_n) Y=(y1y2yn)使得 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)=(y1y2yn)((fR(X,Y))+fϕ(Y))

s0
s1
s2
s3:p

图示具有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)=x1x2+x1x2+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)=x1x2y1y2+x1x2y1y2+x1x2y1y2+x1x2y1y2+x1x2y1y2+x1x2y1y2+x1x2y1y2=x1x2y1+x1x2y1y2+x1x2y1y2+x1x2y2+x1x2y1y2

下面考察 A ◊ p A\Diamond p Ap的符号模型检验,由前面内容知 ⟦ A ◊ p ⟧ \llbracket A\Diamond p\rrbracket [[Ap]]是函数 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]]{sS∣∀u(R(s)z)}的最小不动点。状态集合 { s ∈ S ∣ ∀ u ∈ ( R ( s ) ∩ z ) } \{s\in S | \forall u\in (R(s) \cap z)\} {sS∣∀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{sS∣∀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)=x1x2v1+x1x2v1v2+x1x2v1v2+x1x2v2+x1x2v1v2

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 x1x2+x1x2
(0,1) x 1 ′ x 2 ′ + x 1 x 2 ′ = x 2 ′ x_1'x_2'+x_1x_2'=x_2' x1x2+x1x2=x2
(1,0) x 1 ′ x 2 ′ x_1'x_2' x1x2
(1,1) x 1 ′ x 2 + x 1 x 2 ′ x_1'x_2+x_1x_2' x1x2+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+(x1x2+x1x2)(x2)(x1x2)=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+(x1x2+x1x2)(x1x2)=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))111=x1x2+(x1x2+x1x2)=x1+x1x2(=x1+x2)
由于 f 4 ( ∅ ) = f 5 ( ∅ ) f ^4(\varnothing)= f^5(\varnothing) f4()=f5(),算法执行终止。满足条件 A ◊ p A\Diamond p Ap的所有状态 ⊔ i f i ( ∅ ) = x 1 + x 1 ′ x 2 \sqcup_i f^i(\varnothing)=x_1+ x_1'x_2 ifi()=x1+x1x2。值得注意的是,上面描述过程完全采用的是布尔函数的形式,但在实际符号模型检验实施中是采用的与之相应的OBDD描述的操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值