【面向计算机的数理逻辑/软件理论基础笔记】CTL*

491 阅读2分钟

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

CTL和LTL的区别:

  • CLT明确允许对路径使用量词,比LTL有更强的表达能力
  • 但CTL不允许像LTL那样,通过用公式描述来选择一个路径范围,在这方面LTL更有表达能力。
  • 比如:“对所有这样的路径,沿该路径有p的话,也有q”,用LTL表示为FpFqFp \to Fq
  • 但由于收到所有FF必须伴随着一个AAEE使用的约束,用CTL写成FpFqFp \to Fq是不可能的
    • 如果CTL写成AFpAFqAFp \to AFq,则表示为“如果沿着所有路径有p,那么沿着所有路径也有q";
    • 如果CTL写成AG(pAFq)AG(p \to AF q),则表示为“所有路径延伸到pp最终会遇到qq”,与FpFqFp \to Fq的意义还是不相同。
  • 说明LTL公式FGpFGp和CTL公式AFAGpAFAGp不等价的范例: 下图的模型中,FGpFGp是满足的,AFAGpAFAGp是不满足的 在这里插入图片描述

LTL公式XFpXFp、LTL公式FXpFXp、CTL公式AXAFpAXAFp是等价的,但不与CTL公式AFAXpAFAXp等价

CTL*、CTL、LTL的关系:

  • CTL*公式将LTL和CTL的表达能力结合,并去除了CTL对每个时态算子(X,U,F,G)必须与唯一路径量词(A,E)伴随使用的约束而得到的一种逻辑。
  • 表达能力之间的关系在这里插入图片描述
    • 在CTL中但不在LTL中:ψ1=defAGEFp\psi_1 \overset{def}{ = } AGEFp,表示无论到哪里,我们总可以到达一个使p为真的状态,例如在协议中寻找死锁。
    • 在LTL中但不在CTL中:ψ3=defA[GFpFq]\psi_3 \overset{def}{ = } A[GFp \to Fq],表示如果沿该路径有无限多p,则q出现一次。
    • 在LTL中和CTL中:ψ2=defAG[pAFq]\psi_2 \overset{def}{ = } AG[p \to AFq]在CTL中,或者G(pFq)G(p \to Fq)在LTL中,表示任何p最终都跟着一个q
    • 在CTL*中,但不在CTL和LTL中:ψ4=defE[GFp]\psi_4 \overset{def}{ = } E[GFp],表示存在一条有限多p的路径

CTL*公式

状态公式,用状态来赋值: ϕ::=p(¬ϕ)(ϕϕ)A[α]E(α)\phi :: = \top | p | (\neg \phi) | (\phi \wedge \phi) | A[\alpha] |E (\alpha) 路径公式,沿着路径赋值: α::=ϕ(¬α)(αα)(αUα)(Gα)(Fα)(Xα)\alpha :: = \phi | (\neg \alpha) | (\alpha \wedge \alpha ) | (\alpha U \alpha)|(G \alpha) | (F \alpha) | (X \alpha) 范例:

  • A[(pUr)(qUr)]A[(p U r) \vee (q U r)]
  • A[XpXXp]A[X p \vee XX p]
  • E[GFp]E [GFp]

LTL中的过去算子

  • LTL中的时态算子X,U,FX,U,F等都是参考未来的算子,有时我们可能需要一个参考过去的算子,我们称之为过去算子。
  • 过去算子:
    • YY表示昨天,与XX对立
    • SS表示自从,与UU对立
    • OO表示i曾经,与FF对立
    • HH表示历史地,与GG对立
  • 例如:“只要q出现,那么过去已经有某一个p出现过了”可以表示为G(qOp)G(q \to Op)
  • NuSMVz支持LTL中的过去算子,但不支持CTL中的过去算子(例如AX,ES等)
  • 过去算子并不能增加LTL的表达能力,他们只是可以等价地写为不带过去算子地公式