【面向计算机的数理逻辑/软件理论基础笔记】形式化验证、模型检测、线性时态逻辑LTL

306 阅读8分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

形式化验证

  • 为什么需要形式化验证?
    • 因为这种证明方法可以在理论上寻找到程序中的错误,而这些错误可能不可复现、无法被测试所覆盖、或者只会发生一次等,比如1994年奔腾芯片的FDIV错误,除法运算会发生某种偏差,这个问题是在90亿次除法运算中才可能出现1次错误,或者一些其他的著名BUG:原来曾有过这么多BUG!哪个CPU最严重。我们没用办法通过简单的测试来找到这些BUG,但通过形式化的验证却可以找到哪里可能存在问题。
  • 形式化验证的三个部分:
    • 用于系统建模的框架
    • 用于描述待验证性质的规范语言
    • 用来确定系统描述是否满足规范的验证方法
  • 根据证明的依据对形式化验证的分类
    • 基于证明的处理中:系统描述一组公式Γ\Gamma,他的规范是另一个公式ϕ\phi,验证的方法就是试图找到Γϕ\Gamma \vdash \phi的证明。
    • 基于模型的处理中(本节笔记重点):系统由适当逻辑的模型M\mathcal{M}表示,规范也是另一个公式ϕ\phi表示,验证方法则是由计算模型M\mathcal{M}是否满足ϕ\phi构成(写作Mϕ\mathcal{M} \models \phi)。
  • 根据验证的完全程度对形式化验证的分类
    • 性质验证:规范描述系统的单一性质。
    • 完全验证:规范描述的系统的全部性质。

模型检测(Model Checking)

  • 时态逻辑(Temporal Logic)
    • 思想:在一个模型中,公式的真与假不是静态的,而在命题逻辑或谓词逻辑中的确如此。
    • 含义:时态逻辑的模型包含若干状态,而一个公式可以在某些状态下为真,在其他状态下为假。公式可以随系统的状态演化而改变其真值。
  • 模型检测:模型检测是一种自动的、基于模型的、性质验证的处理方法。
    • 模型检测也是基于时态逻辑的,在模型检测中,模型M\mathcal{M}是迁移系统,性质ϕ\phi是是时态逻辑公式,为了验证一个系统满足一个性质,需要三步操作:
      • 使用模型检测器的描述性语言对系统进行建模,得到一个模型M\mathcal{M}
      • 使用模型检测器的规范语言对性质进行编码,禅师一个时态逻辑公式ϕ\phi
      • M\mathcal{M}ϕ\phi做输入,运行模型检测器

    如果模型检测器Mϕ\mathcal{M} \models \phi的结果为假(或者no、false),大多数模型检测器会产生导致失败的系统行为轨迹,我们称这一操作为之为逆向追踪

    • 模型检测就是对问题M,sϕ\mathcal{M},s \models \phi是否成立计算答案的过程,此处的ϕ\phi是时态逻辑的一个公式,M\mathcal{M}是所考虑的一个适当模型,ss是该模型的一个状态,\models是满足关系。

线性时态逻辑(Linear-time Temporal Logic,简写为LTL)

  • 定义:一种能表达时间概念的特殊时态逻辑。它将时间轴看成一个线性的状态序列,可以无限延伸到未来。常用来精确表示模型的动态语义。
    • 计算路径(简称为路径):模型里的状态序列。因为未来是不确定的,有无数种可能,在模型中表示有无数条路径,代表未来不同的可能,任何一条路径都可能会是一条实际的路径(每一条路径都有可能发生,但只有一条路径会真正发生)。
    • 命题原子公式:原子公式用p,q,r,p1,q1,r1...p,q,r,p_1,q_1,r_1...等符号表示,这些原子代表系统可能成立的事实,比如“打印机正在打印”,“进程1220被挂起”,或者“程序计数器上的值为6”。
    • 原子集合:表示系统可能成立的全部事实,用AtomsAtoms表示,比如p,qp,q的所有组合:Atoms={,{p},{q},{p,q}}Atoms = \{\varnothing,\{p\},\{q\},\{p,q\}\}

LTL语法

ϕ::=p(¬ϕ)(ϕϕ)(ϕϕ)(ϕϕ)(Xϕ)(Fϕ)(Gϕ)(ϕUϕ)(ϕWϕ)(ϕRϕ)\phi ::= \perp | \top | p| (\neg \phi) | (\phi \wedge \phi)| (\phi \vee\phi)| (\phi \to \phi) | (X \phi)| (F \phi)| (G \phi)| (\phi U \phi)| (\phi W \phi)| (\phi R \phi)

上述公式表示,如果ϕ\phi是LTL公式,则¬ϕ,(ϕϕ),(Gϕ)\neg \phi, (\phi \wedge \phi), (G \phi) \cdots也是LTL公式,同时p\perp | \top | p也是LTL公式。其中,pp是取自原子集合AtomsAtoms的任意命题原子

  • 时态连接词:

    • 一元时态连接词:
      • XX:下一个状态。
      • FF:某未来状态。
      • GG:所有未来状态。
    • 二元时态连接词:
      • UU:直到。
      • RR:释放。
      • WW:弱-直到。
  • 时态连接词的含义:

    • 原子命题pp表示路径π\pi中第一个原子命题是pp 在这里插入图片描述

    • XpXp表示路径π\pi中第二个原子命题是pp -

    • GpGp表示路径π\pi中每一个原子命题都是pp 在这里插入图片描述

    • pUqpUq表示对于路径π:s0s1\pi:s_0 \to s_1 \to \cdots中,假设原子命题pp在且只在s3,s4,s5,s6,s7,s8s_3,s_4,s_5,s_6,s_7,s_8状态点满足,原子命题qq只在s9s_9状态点满足。则如果ii的值为0,1,20,1,2πipUq\pi^i \nvDash pUq(因为这个时候的开始点没有pp);如果ii的值为3,4,5,6,7,8,93,4,5,6,7,8,9,则πipUq\pi^i \vDash pUq在这里插入图片描述

    • pRqpRq qq必须保持为真,直到pp为真的时刻 在这里插入图片描述 或者 如果pp为真的时刻不存在,则qq一直为真 在这里插入图片描述

    RRUU的对偶,即ϕRψ\phi R \psi等价于¬(¬ϕU¬ψ)\neg (\neg \phi U \neg \psi)

  • LTL公式范例:(F(p(G r))((¬q)U p))(F(p \to (G \ r)) \vee ((\neg q) U \ p )) 语法树:在这里插入图片描述

    在我们书写LTL公式时,在不引起歧义的前提下,很多括号可以省略,比如(p(F q))(p \to (F \ q))可以无歧义地简写为pF qp \to F \ q

  • 语法优先级从高到低:

    • 一元时态连接词:¬,X,F,G\neg,X,F,G
    • 二元时态连接词:U,R,WU,R,W
    • ,\vee,\wedge
    • \to

LTL语义

  • 迁移系统:M={S,,L}\mathcal{M}=\{S,\to,L\}SS是一个状态集合;\to是迁移关系(这个迁移关系表示SS上的二元关系),使得每个属于SSss中(也就是sSs \in S),有某个ss'满足sss \to s'(这个sSs' \in S);标记函数LP(Atoms)L \to \mathcal{P}(Atoms)

    • 迁移系统简称为模型 ,一个模型有状态集SS,关系\to(描述的是系统如何从一个状态转向另一个状态),以及每个状态ss伴随有原子命题的集合L(s)L(s)。我们用P(Atoms)\mathcal{P}(Atoms)表示AtomsAtoms的幂集,也叫做原子描述集。
    • 幂集范例:对于状态集S={p,q}S = \{p,q\},则他的幂集P(Atoms)={,{p},{q},{p,q}}\mathcal{P}(Atoms)=\{\varnothing,\{p\},\{q\},\{p,q\}\}
    • 用有向图表示一个有限迁移系统M\mathcal{M}的所有信息,图的结点包含了在该状态下为真的所有原子命题。
      • 模型范例:M\mathcal{M}有三个状态s0,s1,s2s_0,s_1,s_2,状态之间仅有的可能迁移是s0s1,s0s2,s1s0,s1s2,s2s2s_0 \to s_1,s_0 \to s_2,s_1 \to s_0,s_1 \to s_2,s_2 \to s_2,若L(s0)={p,q},L(s1)={q,r},L(s2)={r}L(s_0)=\{p,q\},L(s_1)=\{q,r\},L(s_2)=\{r\},则将模型的信息浓缩到状态图中为: 在这里插入图片描述

    在上述状态图中,状态rr是一个死锁状态,他的下一个状态永远只能是自身

  • 无限路径:模型M={S,,L}\mathcal{M}=\{S,\to,L\}中的一条路径是SS中状态的无限序列s1,s2,s3,s_1,s_2,s_3,\cdots,对每个i1i \geqslant 1,都有sisi+1s_i \to s_{i+1},则我们可以将该路径写为π=s1s2s3\pi = s_1 \to s_2 \to s_3 \to \cdots,我们用πi\pi^i表示从第ii个状态开始的后缀,比如π3=s3s4\pi^3=s_3\to s_4 \to \cdots

    • 将上面的模型范例里的系统展开成一个从特定状态开始的所有计算路径的无限树为: 在这里插入图片描述
  • M={S,,L}\mathcal{M}=\{S,\to,L\}是一个模型,π=s1s2s3\pi = s_1 \to s_2 \to s_3 \to \cdotsM\mathcal{M}中地一条路径,路径π\pi与LTL公式满足关系定义如下:

    • π\pi \vDash \top
    • π\pi \nvDash \perp

      \top表示总为真的事实,\perp表示总为假的事实

    • πp\pi \vDash p当且仅当pL(s1)p \in L(s_1)
    • πϕ1ϕ2\pi \vDash \phi_1 \wedge \phi_2当且仅当πϕ1\pi \vDash \phi_1πϕ2\pi \vDash \phi_2
    • πϕ1ϕ2\pi \vDash \phi_1 \vee \phi_2当且仅当πϕ1\pi \vDash \phi_1πϕ2\pi \vDash \phi_2
    • πϕ1ϕ2\pi \vDash \phi_1 \to \phi_2当且仅当只要πϕ1\pi \vDash \phi_1就有πϕ2\pi \vDash \phi_2
    • πX ϕ\pi \vDash X \ \phi当且仅当π2ϕ\pi^2 \vDash \phi
      • πX ϕ\pi \vDash X \ \phi表示路径从第二个状态开始满足LTL公式ϕ\phi
      • ϕ\phi是原子集内的某个原子命题,也是一个LTL公式,在路径中也叫做状态;X ϕX \ \phi表示这个原子命题的下一个状态;π2\pi^2表示从路径π\pi上的第二个状态开始的路径
    • πG ϕ\pi \vDash G \ \phi当且仅当对所有i1,πiϕi\geqslant 1,\pi^i \vDash \phi
    • πF ϕ\pi \vDash F \ \phi当且仅存在某个i1i\geqslant 1使得,πiϕ,\pi^i \vDash \phi
    • πϕ Uψ\pi \vDash \phi \ U \psi当且仅当存在某个i1i\geqslant 1,使得πiψ\pi^i \vDash \psi并且对所有j=1,,i1j=1,\cdots,i-1,有πiϕ\pi^i\vDash \phi
    • πϕ Wψ\pi \vDash \phi \ W \psi当且仅当存在某个i1i\geqslant 1,使得πiψ\pi^i \vDash \psi且对所有的j=1,,i1j=1,\cdots,i-1,有πiϕ\pi^i\vDash \phi,或者对所有k1k \geqslant 1,有πkψ\pi^k\vDash \psi
    • πϕ R ψ\pi \vDash \phi \ R \ \psi当且仅当或者存在某个i1i\geqslant 1,使得πiψ\pi^i \vDash \psi且对所有j=1,,ij=1,\cdots,i,有πiψ\pi^i\vDash \psi;或者对所有k1k \geqslant 1,有πkψ\pi^k\vDash \psi

      πϕ R ψ\pi \vDash \phi \ R \ \psi还可以表述为:当且仅当或者i0\exists i ≥ 0使得πiϕ\pi^i \vDash \phi且对于每个jij ≤ i都有πjψπj \vDash \psi,或者对于所有的k0k \geq 0都有πkψ\pi^k \vDash \psi

  • 状态满足公式:设M=(S,,L)M = (S, \to, L)是一个模型,sS,ϕs \in S,\phi是一个LTL公式,若对从ss出发的每条路π\pi都有πϕ\pi \vDash \phi,则称状态ss满足ϕ\phi,记作M,sϕM, s \vDash \phi,或sϕs \vDash \phi

  • 范例:

在这里插入图片描述 对于上面的Kripke结构,有如下结论:

  • s0(pq),¬r,Xrs_0 \vDash (p \wedge q),\neg r,Xr s0s_0这个状态满足三个条件:
    • (p \wedge q):$$s_0状态上有原子命题ppqq
    • \neg r:$$s_0状态上没有原子命题rr
    • X r:$$s_0状态的下一个结点有原子命题rr
  • s0X(qr)s_0 \nvDash X(q \wedge r) s0s_0的下一个状态不一定满足包含原子命题qqrr。因为s0s_0的下一个状态如果是s2s_2的话,只包含原子命题rr而不包含原子命题qq,如果s0s_0的下一个状态如果是s1s_1的话才包含原子命题qqrr
  • s0G¬(pr)s_0 \vDash G \neg(p \wedge r) s0s_0这个状态满足未来所有状态不同时包含原子命题pprr。因为s0s_0以后可能要迁移到s1s_1s2s_2或迁移回s0s_0,而这三个状态均不同时包含原子命题pprr,所以s0s_0这个状态满足未来所有状态不同时包含原子命题pprr
  • s2Grs_2 \vDash G r s2s_2状态满足未来所有状态全部包含原子命题rr
  • sF(¬qr)FGrs \vDash F(\neg q \wedge r)\to FGr ss状态满足,如果未来的状态不含原子命题qq但包含原子命题rr,则未来全部状态都包含原子命题rr。因为不含原子命题qq但包含原子命题rr的状态只有s2s_2s2s_2的下一个状态永远只能是s2s_2s2s_2也只包含原子命题rr,所以未来全部状态都包含原子命题rr

语义等价

  • 定义:设ϕ,ψ\phi,\psi是 LTL 公式, 若对于所有的模型M\mathcal{M}以及M\mathcal{M}中的所有的路π\pi都有πψ\pi \vDash \psi当且仅当πψ\pi \vDash \psi,则称ϕ\phiψ\psi是语义等价的, 记作ϕψ\phi \equiv \psi
  • 语义等价等价刻画:设ϕ,ψ\phi,\psi是 LTL 公式,它们是语义等价的,当且仅当若对于所有的模型M\mathcal{M}以及M\mathcal{M}中的所有的状态ss都有sϕs \vDash \phi当且仅当sψs \vDash \psi
  • 等价性质:
    • 对偶性:
      • Gϕ¬F¬ϕG \phi \equiv \neg F \neg \phi
      • Fϕ¬G¬ϕF \phi \equiv \neg G \neg \phi
      • ϕUψ¬(¬ϕR¬ψ)\phi U \psi \equiv \neg (\neg \phi R \neg \psi)
      • ϕRψ¬(¬ϕU¬ψ)\phi R \psi \equiv \neg (\neg \phi U \neg \psi)
      • Xϕ¬X¬ϕX \phi \equiv \neg X \neg \phi
    • 分配性:
      • F(ϕψ)FϕFψF(\phi \vee \psi) \equiv F \phi \vee F \psi
      • G(ϕψ)FϕFψG(\phi \wedge \psi) \equiv F \phi \wedge F \psi
  • 连接词相互定义
    • FϕUϕF \phi \equiv \top U \phi
    • GϕRϕG \phi \equiv \perp R \phi
    • ϕRψψU(ϕψ)Gψ\phi R \psi \equiv \psi U (\phi \wedge \psi) \vee G \psi