形式化语言——时序逻辑

时序逻辑

在模型检测工具NuSMV中,时序逻辑是用来描述系统性质(或形式规约)的形式化语言,包括两类,一类是 线性时序逻辑(Linear-time Temporal Logic, LTL),另一类是分支时序逻辑(也称计算树逻辑,Computing Tree Logic,CTL),二者主要的区别在于采取不同的方式对 Kripke结构 所对应的计算树分支进行展开。

1. kripke structure

学习模型验证,有一本文献综述Handbook of Model Checking 2018,都是英文的,会看的很慢。里面有数学推导过程,其中有一些缩写做好笔记,比如

  • i.e.表示“也就是说”
  • such that表示“使什么成立”
  • denote by
  • 等等

Kripke Structure 是一种思想,和不同系统结合就会生成对应系统的结果,这也正式 Kripke Structure 的优秀之处。

先在CSDN中搜索大佬写的博客。

博客真的少的可怜。从大佬哪里复制一些主要的,整理一下。

1.1 kripke structure 定义 1

Kripke 结构 即过渡(迁移)系统的变化,在模型检查中用来表示系统的行为,也可以用来描述上述的反应系统。

Kripke 结构 由状态集合(S)、过渡集合(R)以及标记函数(L)组成。该标记函数标记各状态下使得该状态为true的变量集合。

Kripke 结构是一个状态过渡图,路径可以建模反应系统的计算。基于此,使用一阶逻辑公式形式化并发系统。 定义 AP 为一组原子命题,则 Kripke结构 M M M 为在原子命题上的一个四元组 M = ( S , S 0 , R , L ) M = (S,S_0,R,L) M=(S,S0,R,L)。其中

  • S S S 是有限的状态集合。
  • S 0 S_0 S0 S S S 的子集,表示初始状态。
  • R R R S S S 的笛卡儿积,表示过渡(迁移)关系,且必须包含所有的,也就是说每个 s s s 总会有 s ’ s’ s 使得 ( s , s ’ ) (s,s’) (s,s) 在关系 R R R 中。
  • L L L 是标记函数,标记原子命题使某状态为真。

2. 线性时序逻辑(LTL)

时态运算符限定于描述从一个给定状态开始的某条路径上的事件。

在这里插入图片描述

2.1 特点

  • 时间建模成状态序列,无限延伸到未来,该状态序列称为计算路径(简称“路径”),隐含了整个系统是按着一个路径向前发展演化的,隐含使用全称量词,不适用存在量词(与CTL不同)
  • 使用指示未来的连接词(时间操作符),只表达一条路径上的不确定性,而CTL表达多个路径

2.2 构成

  • 项(terms): p p p 表示原子命题
  • 经典布尔操作
    • ¬ \neg ¬(not)
    • ∨ \vee (or)
    • ∧ \wedge (and)
    • → \rightarrow (imply, if-then): p → q p\rightarrow q pq,如果 p p p 发生则会出现 q q q
  • 基本时态操作(Basic temporal operators)
    • □ \square (G, always)

      • □ p \square p p p p p holds globally in the future.
      • 从当前时刻起, p p p 总是为真
      • 在这里插入图片描述
    • ⋄ \diamond (F, eventually)

      • ⋄ p \diamond p p p p p holds sometime(不确定性!)in the future
      • p p p 在以后某个时刻会真
      • 在这里插入图片描述
    • ∘ \circ (X, next)

      • ∘ p \circ p p p p p holds next time.
      • p p p 在下一个时刻为真
      • 在这里插入图片描述
    • ∪ \cup (strong unit)

      • p ∪ q p \cup q pq p p p holds until q q q holds.

2.3 例子(红绿灯)

以红绿灯为例。

  • g r gr gr:green
  • y e ye ye:yellow
  • r e re re:red

性质1:信号灯按照“红、黄、绿、红、黄、绿…”的顺序变化

  • 对应的LTL: □ ( ( g r ∪ y e ) ∨ ( y e ∪ r e ) ∨ ( r e ∪ g r ) ) \square ( (gr\cup ye) \vee (ye \cup re) \vee (re \cup gr) ) ((grye)(yere)(regr))

性质2:信号灯不能在同一时间出现两种以上的颜色

  • 对应的LTL: □ ( ¬ ( g r ∨ y e ) ∧ ¬ ( y e ∨ r e ) ∧ ¬ ( r e ∧ g r ) ∧ ( g r ∨ y e ∨ r e ) ) \square ( \neg(gr \vee ye) \wedge \neg (ye \vee re) ∧ \neg (re \wedge gr) \wedge (gr \vee ye \vee re) ) (¬(grye)¬(yere)¬(regr)(gryere))

2.4 流性线性时序逻辑

线性时序逻辑(Linear Temporal LogicLTL)被广泛地用来描述基于状态的性质需求。在基于事件的模型中,状态是由已经发生的事件或者行为来刻画的,而不是像传统的基于状态的模型中通过状态变量来描述。因此我们将用 Fluent Linear Temporal LogicFLTL) 来刻画 LTS 的性质,即在基于事件的模型中规约基于状态的时许性质,即再基于事件的模型中规约基于状态的时序性质。

FLTL 其实就是把 fluent 作为原子命题的 LTL。

2.4.1 Fluent
2.4.1.1 Fluent 定义

一个 fluent 是一个三元组,记作 F l = ⟨ I F l , T F l , I n i t F l ⟩ Fl=\left \langle I_{Fl},T_{Fl},Init_{Fl} \right \rangle Fl=IFl,TFl,InitFl ,其中 I F l , T F l ∈ A c t I_{Fl},T_{Fl} \in Act IFl,TFlAct 分别表示它的发起动作集合和终止动作集合, I n i t F l Init_{Fl} InitFl 代表 F l F_l Fl 的初始真值。

2.4.1.2 Fluent 解释

对于一个 f l u e n t F l = ⟨ I F l , T F l , I n i t F l ⟩ fluent F_l=\left \langle I_{Fl},T_{Fl},Init_{Fl} \right \rangle fluentFl=IFl,TFl,InitFl 来说,显然有 I F l ∩ T F l = ∅ I_{Fl} \cap T_{Fl} = \empty IFlTFl=。例如,每一个动作 l ∈ A c t l \in Act lAct 可以导出一个对应的 fluent 记为 l ˙ = ⟨ l , A c t \ { l } , f a l s e ⟩ \dot l = \left \langle l,Act \verb|\| \{l\},false \right \rangle l˙=l,Act\{l},false。这个表示说,当动作 l l l 发生的时候, l ˙ \dot l l˙ 为真,发生任何其他动作的时候,这个 fluent 为假。

对于动作的时长,fluent 认为是瞬时的,也就是说当动作发生的时候,fluent 认为这个动作已经完成。这个主要体现在当一个动作一旦发生,就立即对 fluent 的真值产生影响。在下面对于 trace 的位置 i 来说,对 fluent 真值的影响回考虑到 i 位置。

2.4.2 π , i ⊨ F l \pi,i \vDash Fl π,iFl
2.4.2.1 π , i ⊨ F l \pi,i \vDash Fl π,iFl 定义

一个 t r a c e π = l 0 , l 1 , . . . trace \pi = l_0,l_1,... traceπ=l0,l1,... 在位置 i i i 处满足一个 f l u e n t   F l fluent \thinspace Fl fluentFl ,记作 π , i ⊨ F l \pi,i \vDash Fl π,iFl,当且仅当以下的条件至少有一个成立:

  • I n i t F l ∧ ( ∀ j ∈ N ⋅ 0 ≤ j ≤ i → l i ∉ T F l ) Init_{Fl} \wedge (\forall j \in N \cdot 0 \leq j \leq i \rightarrow l_i \notin T_{Fl}) InitFl(jN0jili/TFl)
  • ∃ j ∈ N ⋅ ( j ≤ i ∧ l j ∈ I F l ) ∧ ( ∀ k ∈ N ⋅ j < k ≤ i → l k ∉ T F l ) \exist j \in N \cdot (j \leq i \wedge l_j \in I_{Fl}) \wedge (\forall k \in N \cdot j<k \leq i \rightarrow l_k \notin T_{Fl}) jN(jiljIFl)(kNj<kilk/TFl)
2.4.2.2 π , i ⊨ F l \pi,i \vDash Fl π,iFl 解释
  • 第一个条件是说,这个 fluent 初始值为真,并且这个 trace 到位置 i i i (包括 i i i ) 为止,还没有遇到这个 fluent 终止动作集合中的动作,即还没有能够让这个 fluent 为假。
  • 第二个条件的意思是在这个 trace 的位置 i 之前(包括 i),已经在某个 j ≤ i j\leq i ji 位置遇到了 fluent 的发起动作集合中的动作,但是在位置 ji 之间(包括 i)没有遇到过任何该 fluent 的终止动作集合中的动作。

显然满足这两个条件中任意一个都意味着有 π , i ⊨ F l \pi,i \vDash Fl π,iFl

在这里插入图片描述

图2-1 中的客户端 LTS Cli 中,我们可以定义 f l u e n t   C A L L I N G = ⟨ { c a l l } , { d i s p l a y } , f l a s e ⟩ fluent \thinspace CALLING=\left \langle \{call\},\{display\},flase \right \rangle fluentCALLING={call},{display},flase 来表示客户端是否请求服务。对于一个 t r a c e   π 0 = g e t T o k e n , c a l l , r e p l y , d i s p l a y , . . . trace \thinspace \pi_{0}=getToken,call,reply,display,... traceπ0=getToken,call,reply,display,... ,我们可以看到有 π 0 , 1 ⊨ C A L L I N G \pi_0,1 \vDash CALLING π0,1CALLING ,因为这是遇到了 call 动作,但是还没有遇到 display 动作。

类似地,我们还可以得到 π 0 , 3 ⊭ C A L L I N G \pi_0,3 \nvDash CALLING π0,3CALLING

2.4.3 合法的 FLTL 公式

当给定了在 Act 上的所有 fluent 的集合 ϝ \digamma ϝ ,一个 FLTL 公式可以通过标准的布尔操作符,时序操作符 X X X (next)和 U U U 进行如下的归纳定义:

  • 任意的 f l u e n t   F l ∈ ϝ fluent \thinspace F_l \in \digamma fluentFlϝ 是一个合法的 FLTL 公式,
  • 如果 ϕ \phi ϕ ψ \psi ψ 是合法的 TLTL 公式,那么 ¬ ϕ \neg \phi ¬ϕ ϕ ∨ ψ \phi \vee \psi ϕψ X ϕ X\phi ϕ U ψ \phi U \psi ϕUψ 也都是合法的 FLTL 公式。

惯用的布尔操作符还包括:逻辑蕴含 → \rightarrow ,逻辑与 ∧ \wedge 。其中 → \rightarrow 可以如此定义 ϕ → ψ ≡ ¬ ϕ ∨ ψ \phi \rightarrow \psi \equiv \neg \phi \vee \psi ϕψ¬ϕψ ,而 ∧ \wedge 可以如此定义 ϕ ∧ ψ ≡ ¬ ( ¬ ϕ ∨ ¬ ψ ) \phi \wedge \psi \equiv \neg(\neg \phi \vee \neg \psi) ϕψ¬(¬ϕ¬ψ)

2.4.4 π , i ⊨ ϕ \pi,i \vDash \phi π,iϕ
Giannakopoulou D, Magee J. Fluent model checking for event-based systems[C]//Proceedings of the 9th European software engineering conference held jointly with 11th ACM SIGSOFT international symposium on Foundations of software engineering. 2003: 257-266.

给定一个无穷 t r a c e   π trace \thinspace \pi traceπ,其是否在位置 i i i 满足公式 ϕ \phi ϕ ,记为 π , i ⊨ ϕ \pi,i \vDash \phi π,iϕ

  • 如果 ¬ ( π , i ⊨ ϕ ) \neg(\pi,i \vDash \phi) ¬(π,iϕ),则 π , i ⊨ ¬ ϕ \pi,i \vDash \neg \phi π,i¬ϕ
  • 如果 ( π , i ⊨ ϕ ) ∨ ( π , i ⊨ ψ ) (\pi,i \vDash \phi) \vee(\pi,i \vDash \psi) (π,iϕ)(π,iψ),则 π , i ⊨ ϕ ∨ ψ \pi,i \vDash \phi \vee \psi π,iϕψ
  • 如果 π , i + 1 ⊨ ϕ \pi,i+1 \vDash \phi π,i+1ϕ,则 π , i ⊨ X ϕ \pi,i \vDash X \phi π,i
  • 如果 ∃ j ≥ i ⋅ π , j ⊨ ψ ∧ ∀ i ≤ k < j ⋅ π , k ⊨ ϕ \exists j \geq i \cdot \pi,j \vDash \psi \wedge \forall i \leq k < j \cdot \pi,k \vDash \phi jiπ,jψik<jπ,kϕ,则 π , i ⊨ ϕ U ψ \pi,i \vDash \phi U \psi π,iϕUψ

由于 FLTL 是 LTL 的一个特例,所以我们同样有 LTL 中其他的时序操作符,包括 □ \square (always), ⋄ \diamond (eventually), W W W(weak until)

2.4.5 E ⊨ ϕ E \vDash \phi Eϕ
2.4.5.1 E ⊨ ϕ E \vDash \phi Eϕ 定义

一个 t r a c e   π trace \thinspace \pi traceπ 满足公式 ϕ \phi ϕ 记为 π ⊨ ϕ \pi \vDash \phi πϕ,如果有 π , 0 ⊨ ∅ \pi,0 \vDash \empty π,0

一个 LTS E E E 满足公式 ϕ \phi ϕ 记为 E ⊨ ϕ E \vDash \phi Eϕ ,如果 E E E 产生的每一条无穷序列都满足 ϕ \phi ϕ

2.4.5.2 E ⊨ ϕ E \vDash \phi Eϕ 例子

在这里插入图片描述

总是在请求服务(call 动作)之后,能够把结果展示出来(display动作)。那么这样的一个性质可以用 FLTL 公式表示成: D I S P L A Y _ A F T E R _ C A L L = □ ( c a l l → ⋄ d i s p l a y ) DISPLAY\_AFTER\_CALL=\square (call\rightarrow \diamond display) DISPLAY_AFTER_CALL=(calldisplay)。显然,我们可以看出来有 π 0 ⊨ D I S P L A Y _ A F T E R _ C A L L \pi_0 \vDash DISPLAY\_AFTER\_CALL π0DISPLAY_AFTER_CALL 以及 C l i ⊨ D I S P L A Y _ A F T E R _ C A L L Cli \vDash DISPLAY\_AFTER\_CALL CliDISPLAY_AFTER_CALL

3. 分支时序逻辑(CTL)

时态运算符限定于从一个给定的状态开始的所有可能路径上。

在这里插入图片描述

3.1 构成

CTL由路径量词时态算子构成。

路径量词:

  • ∀ \forall (“for all computation paths”,全称量词,将来全部路径)
  • ∃ \exists (“exist some computation path” ,存在量词,存在一条将来路径)

时态算子:

  • X X X(next:下一个状态)
  • F F F(future:某个未来的状态)
  • G G G(globally:所有的未来状态)
  • U U U(until:路径上存在某个状态满足性质q,而且它之前的每个状态都满足性质 p p p
  • R R R(release:路径上从第一个状态开始,都要满足性质 q q q ,直到某个状态满足性质 p p p

常见表达:

  • ∀ X p \forall X p Xp:在所有未来路径上,公式在下一个状态为真

  • ∀ F p \forall F p Fp:在所有未来路径上,公式在某个状态必然为真

    • 在这里插入图片描述
  • ∀ G p \forall G p Gp:在所有未来路径上,公式都永远为真

    • 在这里插入图片描述
  • ∀ ( p U q ) \forall (p U q) (pUq):在所有未来路径都存在:公式 p p p 一直为真,直到公式 q q q 为真

  • ∃ X p \exists X p Xp:存在一条未来路径,下一状态公式为真

  • ∃ F p \exists F p Fp:存在一条未来路径,公式在某个状态一定为真

    • 在这里插入图片描述
  • ∃ G p \exists G p Gp:存在一条未来路径,公式永为真

    • 在这里插入图片描述
  • E ( p U q ) E (p U q) E(pUq):存在一条未来路径,公式 p p p 一直为真,直到公式 q q q 为真

3.2 例子

以进程访问共享数据为例,假设有两个进程 proc1 和 proc2,当进入“critical”状态表示正在访问共享数据,“entering”状态表示进程请求访问共享数据,当任务调度允许访问后进入“critical”状态访问共享数据。

性质1:不存在 进程1 和 进程2 同时进入“critical”状态

  • 对应的CTL: ∀ G ! ( p r o c 1. s t a t e = c r i t i c a l & p r o c 2. s t a t e = c r i t i c a l ) \forall G ! (proc1.state = critical \& proc2.state = critical) G!(proc1.state=critical&proc2.state=critical)

性质2:如果进程1处于“entering”状态(即请求进入“critical”状态),那么最终进程1都会进入“critical”状态

  • 对应的CTL: ∀ G ( p r o c 1. s t a t e = e n t e r i n g → ∀ F p r o c 1. s t a t e = c r i t i c a l ) \forall G (proc1.state = entering \rightarrow \forall F proc1.state = critical) G(proc1.state=enteringFproc1.state=critical)

4. 状态满足公式

描述公式
deMargan律 ¬ ( ϕ ∧ ψ ) ≡ ¬ ϕ ∨ ¬ ψ \neg (\phi \wedge \psi)\equiv \neg \phi \vee \neg \psi ¬(ϕψ)¬ϕ¬ψ
¬ ( ϕ ∨ ψ ) ≡ ¬ ϕ ∧ ¬ ψ \neg (\phi \vee \psi)\equiv \neg \phi \wedge \neg \psi ¬(ϕψ)¬ϕ¬ψ
幂等律 ¬ ¬ ϕ ≡ ϕ \neg \neg \phi \equiv \phi ¬¬ϕϕ
对偶率 ¬ G ϕ ≡ F ¬ ϕ \neg G \phi \equiv F \neg \phi ¬F¬ϕ
¬ F ϕ ≡ G ¬ ϕ \neg F \phi \equiv G \neg \phi ¬G¬ϕ
¬ F ( ϕ U ψ ) ≡ ¬ ϕ R ¬ ψ \neg F (\phi U \psi) \equiv \neg \phi R \neg \psi ¬F(ϕUψ)¬ϕR¬ψ
¬ ( ϕ R ψ ) ≡ ¬ ϕ U ¬ ψ \neg (\phi R \psi)\equiv \neg \phi U \neg \psi ¬(ϕRψ)¬ϕU¬ψ
自对偶率 ¬ X ϕ ≡ X ¬ ϕ \neg X \phi \equiv X \neg \phi ¬X¬ϕ
分配率 F ( ϕ ∨ ψ ) ≡ F ϕ ∨ F ψ F(\phi \vee \psi) \equiv F \phi \vee F \psi F(ϕψ)Fψ
G ( ϕ ∨ ψ ) ≡ G ϕ ∨ G ψ G(\phi \vee \psi) \equiv G \phi \vee G \psi G(ϕψ)Gψ
连接词相互定义 F ϕ ≡ ⊤ U ϕ F \phi \equiv \top U \phi Uϕ
G ϕ ≡ ⊥ R ϕ G \phi \equiv \bot R \phi
ϕ W ψ ≡ ϕ U ψ ∨ G ϕ \phi W \psi \equiv \phi U \psi \vee G \phi ϕWψϕUψ
ϕ W ψ ≡ R ( ϕ ∨ ψ ) \phi W \psi \equiv R(\phi \vee \psi) ϕWψR(ϕψ)
ϕ R ψ ≡ ψ W ( ϕ ∧ ψ ) \phi R \psi \equiv \psi W(\phi \wedge \psi) ϕRψψW(ϕψ)
ϕ U ψ ≡ ϕ W ψ ∧ F ψ \phi U \psi \equiv \phi W \psi \wedge F \psi ϕUψϕWψFψ
  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值