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