【系统分析与验证笔记】线性时间(Linear-Time,简称LT)

395 阅读17分钟

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

线性时间行为(Linear-Time Behavior)

  • 路径和状态图
    • TSTS的状态图记作G(TS)G(TS),是顶点V=SV = S和边E={(s,sS×SsPost(S)}E=\{(s,s' \in S \times S | s' \in Post(S)\}的有向图(V,E)(V,E),其中ss表示所有的状态集合
    • Post(s)Post^{*}(s)表示从ss出发,在状态图G(TS)G(TS)中可达的状态。
    • 路径符号:有限路径π\pi、无限路径π^\widehat{\pi}、从状态ss出发的所有路径记为Paths(s)Paths(s),所有有限长的路径记为Pathsfin(s)Paths_{fin}(s)
    • 对于TSTS的路径是有限路径
  • 轨迹(tracestraces
    • 定义:一个TSTS系统可以用一系列轨迹来描述其行为的每一步,具体是,轨迹被定义为一串接连到达的状态sis_i的标签函数L(si)L(s_i)的序列。因为L2APL \in 2^{AP},所以迹上的每个元素也是APAP的子集。
    • 对于状态图上的一系列转移可以记作为路径:s0α0s1α1s2,s_0 \overset{\alpha_0}{\rightarrow}s_1\overset{\alpha_1}{\rightarrow}s_2,\cdots,简写为:s0s1s2s_0s_1s_2\cdots,对其中每个结点对应的状态用标签函数映射到2AP2^{AP}上,得到的就是一个轨迹,可以用标签函数L(s0)L(s1)L(s2)L(s_0)L(s_1)L(s_2)\cdots表示,这个轨迹的形式可以为:{a},{a,b},,\{ a\},\{ a,b\},\varnothing,\cdots,其中a,bAPa,b \in AP
    • 路径长度:一个状态s0s_0也可以叫做路径,比如{s0}\{s_0\},它的路径长度为1。对于两个状态的路径{s0s2}\{s_0s_2\},它的的路径长度为2。
  • 轨迹和轨迹片段
    • TS=(S,Act,,I,AP,L)TS = (S, Act,\to,I, AP, L)是一个没有终止状态的TSTS
      • 它的有限路径片段π=s0s1...\pi = s_0s_1...,则轨迹被定义为trace(π)=L(s0)L(s1)...trace(\pi)=L(s_0)L(s_1)...
      • 它的无限路径片段π^=s0s1...sn\widehat{\pi} = s_0s_1...s_n,则轨迹被定义为trace(π^)=L(s0)L(s1)...L(sn)trace(\widehat{\pi})=L(s_0)L(s_1)...L(s_n)
    • trace()={trace(π)π}trace(\prod )=\{trace(\pi) | \pi \in \prod \},表示每条路径的轨迹
    • Traces(s)=trace(Paths(s))Traces(s)=trace(Paths(s)),表示从ss开始的所有路径的轨迹
    • Traces(TS)=sITraces(s)Traces(TS)=\underset{s \in I}{\bigcup} Traces(s),表示所有从TSTS的每个初始状态出发的所有路径对应的轨迹的集合
    • Tracesfin(s)=trace(Pathsfin(s))Traces_{fin}(s)=trace(Paths_{fin}(s)),表示从ss出发所有有限路径对应的轨迹的集合
    • Tracesfin(TS)=sITracesfin(s)Traces_{fin}(TS)=\underset{s \in I}{\bigcup} Traces_{fin}(s),表示从TSTS的每个初始状态出发的所有路径对应的轨迹的集合
  • 例题一:
    • 基于信号量的互斥示例 - π=n1,n2,y=1w1,n2,y=1c1,n2,y=0n1,n2,y=1n1,w2,y=1n1,c2,y=0...\pi = \left \langle n_1, n_2, y = 1 \right \rangle \to \left \langle w_1, n_2, y = 1 \right \rangle \to \left \langle c_1, n_2, y = 0 \right \rangle \to \left \langle n_1, n_2, y = 1 \right \rangle \to \left \langle n_1, w_2, y = 1 \right \rangle \to \left \langle n_1, c_2, y = 0 \right \rangle \to ... 最多只能有一个进程处于临界区(crit1crit_1crit2crit_2) 请给出有限路径π\pi的轨迹
    • 答案:trace(π)={crit1}{crit2}{crit1}{crit2}....trace(\pi) = \varnothing \varnothing \{ crit_1 \} \varnothing \varnothing \{ crit_2 \} \varnothing \varnothing \{ crit_1 \} \varnothing \varnothing \{ crit_2 \} ....
    • 解析:nn表示noncritnoncritww表示waitwaityy表示锁,y=0y=0表示“资源已上锁,不允许使用资源”,y=1y=1表示“资源未上锁,可以使用资源”;对轨迹的解释:n1,w2,y=1\left \langle n_1, w_2, y = 1 \right \rangle表示第一个信号量的状态不处于临界区,第二个信号量的状态处于等待状态,没有锁,此时轨迹为\varnothingc1,n2,y=1\left \langle c_1, n_2, y = 1 \right \rangle表示第一个信号量的状态处于临界区,第二个信号量的状态不处于临界区,有锁,此时轨迹为crit1crit_1。每一个\left \langle \right \rangle内状态的转变都都应一个轨迹碎片(轨迹碎片只能是:,{crit1},{crit2}\varnothing,\{ crit_1 \},\{ crit_2 \}当中的一个)。

有限字和无限字

  • 对于原子命题集合AP={a,b}AP=\{a,b\},则2AP2^{AP}APAP的幂集:2AP={,{a},{b},{a,b}}2^{AP}=\{ \varnothing,\{ a \},\{ b \},\{ a,b \} \}
  • 如果用(2AP)ω(2^{AP})^\omega表示以2AP2^{AP}中元素为字母构成的所有无限长的字符集合,称为2AP2^{AP}上的无限字集合,这个集合可以表示为: (2AP)ω={{a}{b}{a,b}{a,b}...,{a,b}{a}...,{a}{a}{a}...,...}\begin{aligned} (2^{AP})^\omega=\{ & \\ & \{a\}\{b\}\{a,b\}\{a,b\}..., \\ &\varnothing \varnothing \{a,b\}\{a\}...,\\ &\varnothing \{a\}\varnothing \{a\}\varnothing \{a\} ...,\\ &...\\ \} \end{aligned}
  • 如果用(2AP)(2^{AP})^*表示以2AP2^{AP}中元素为字母构成的所有有限长的字符集合,称为2AP2^{AP}上的有限字集合,这个集合可以表示为: (2AP)={{a}{b}{a,b}{a,b},{a,b}{a},{a}{a}{a},{a},,...}\begin{aligned} (2^{AP})^*=\{ & \\ & \{a\}\{b\}\{a,b\}\{a,b\}, \\ &\varnothing \varnothing \{a,b\}\{a\},\\ &\varnothing \{a\}\varnothing \{a\}\varnothing \{a\},\\ & \{a\},\\ & \varnothing \varnothing,\\ &...\\ \} \end{aligned}

无限字集合和有限字集合中的元素数目都是无限多的

线性时间性质(Linear-Time Property,或写作LT性质)

  • 定义:线性时间性质指定了TSTS展开后得到的轨迹,指定了系统可接受或期望接受的行为。
  • 当且仅当TSTS内所有轨迹都在线性时间性质内(或者说TSTS上所有轨迹都含于PP)时,TSTS满足线性时间性质PP成立,即: TSPiffTraces(TS)PTS \models P \quad iff \quad Traces(TS) \subseteq P
  • 下面是两个进程对一个互斥信号量资源使用的例子: 在这里插入图片描述 他们并发转换为TSTS后的结果: 在这里插入图片描述 每个状态都是由之前两PGPGLocLoc和互斥信号量yy的取值组成,其中红色和蓝色分别表示两个进程的LocLocnn表示在非临界区,ww表示想要进入临界区,cc表示正处在临界区,y=0y=0表示“资源已上锁,不允许使用资源”,y=1y=1表示“资源未上锁,可以使用资源”;
    • LT PropertyLT \ Property的互斥性:
      • 定义:至多只有一个进程进入临界资源。
      • 解释:原子命题集合AP={crit1,crit2}AP=\{crit_1, crit_2\},两进程P1P1P2P2处在访问临界资源状态,但他们永远至多只有一个进程进入临界资源,这一LT PropertyLT \ Property可表示为:Pmutex=对于无限字A0A1A2的集合,对于所有0i都有{crit1,crit2}AiP_{mutex}=对于无限字A_0A_1A_2\cdots的集合,对于所有0 \leqslant i都有\{ crit_1,crit_2\} \nsubseteq A_i
      • 举例:像{crit1}{crit1}{crit2}...,{crit2}{crit1}...,...,...}\{ crit_1\} \{ crit_1\} \{ crit_2\}...,\varnothing\{ crit_2\}\varnothing\{ crit_1\}...,\varnothing\varnothing\varnothing...,... \}都是合法的,但{crit1,crit2}\{crit_1,crit_2\}这种无限字如果出现在集合中就是非法的,因为crit1crit_1crit2crit_2是互斥的,不能同时发生,所以像{{crit2,crit1}{crit2}...}\{\varnothing\{crit_2,crit_1\}\{ crit_2\}... \}这样的轨迹就是非法的
    • LT PropertyLT \ Property的无饥饿性:
      • 定义:一个想访问临界资源的进程最终一定能访问到临界资源。
      • 解释:原子命题集合AP={wait1,crit1,wait2,crit2}AP=\{wait_1,crit_1,wait_2, crit_2\}, 对于不但要满足“至多只有一个进程进入临界资源”,还要满足“一个想访问临界资源的进程最终一定能访问到临界资源”的情况,LT PropertyLT \ Property可表示为:Pmutex=对于无限字A0A1A2的集合,对于每一个0{1,2}都有(j. waitiAj)(j. critiAj)P_{mutex}=对于无限字A_0A_1A_2\cdots的集合,对于每一个0 \in \{1,2\}都有(\overset{\infty}{\exists} j. \ wait_i \in A_j ) \Rightarrow (\overset{\infty}{\exists} j. \ crit_i\in A_j )
      • 举例:对每个进程PiP_i,当waitiwait_i无限经常次属于AjA_j时,那么criticrit_i就无限经常次属于AjA_j。也叫做“无限经常次想要,最终会导致无限经常次获得”,这就是无饥饿性。

      \overset{\infty}{\exists}表示无规律地无限经常次

轨迹的等效性和线性时间性的关系(Trace equivalence and Linear-Time properties)

  • 对于在同一个原子命题集APAP上的转移系统:TSTSTSTS',他们的轨迹集合可能存在以下两种关系:
    • 包含关系:
if and only iffor any LT property P:TSP implies TSP if \ and \ only \ if \\ for \ any \ LT \ property \ P : TS' \models P \ implies \ TS \models P
- 解释:当且仅当对于任意线性时间性质$P$都有:$TS' \models P$则$TS \models P$成立时,$Traces(TS) \subseteq Traces(TS')$成立换句话说就是,当$Traces(TS) \subseteq Traces(TS')$且$TS' \models P$时,$TS \models P$
- 含义:一个$TS$扩张了另一个$TS$的实现
  • 等价关系:
if and only ifTS and TS satisfy the same LT properties if \ and \ only \ if \\ TS \ and \ TS' \ satisfy \ the \ same \ LT \ properties
- 解释:当且仅当两个$TS$满足相同的$LT$属性时,这两个$TS$从$TS$初始状态出发的所有路径的轨迹都相互包含
- 含义:两个$LT$属性相同的系统的轨迹也是一致的

Traces(TS)=Traces(TS)Traces(TS) = Traces(TS')中的“=”在这里表示相互包含的意思

不变性(Invariants)

  • 含义:在原子命题集APAP上,TSTS的每一个状态都要满足的性质,这个性质叫做不变性,用PinvP_{inv}表示。

  • 公式表示:Pinv={A0A1A2...(2AP)ωj0.AjΦ}P_{inv}=\{ A_0A_1A_2... \in (2^{AP})^\omega | \forall j\geqslant 0.A_j \models \Phi \}

  • 公式解释:对于无限字集合中的每个字(也就是APAP的子集)A0A1A2...A_0A_1A_2...都能满足Φ\Phi,则该LT propertyLT \ property具有不变性。

    Φ\PhiAPAP上的命题逻辑公式,叫做PinvP_{inv}的不变条件

  • TSPinvTS \models P_{inv}表示TSTS满足某一不变性质PinvP_{inv},和下面三个命题等价:

    • TSTS的所有无限长的路径trace(π)trace(\pi)都有:trace(π)Pinvtrace(\pi) \in P_{inv}
    • TSTS的所有路径上的所有的状态ss都有:L(s)ΦL(s) \models \Phi
    • TSTS的所有可达状态ss都有:L(s)ΦL(s) \models \Phi
    • Φ\Phi必须满足所有的初始状态,并且Φ\Phi的满足性在TSTS的可达片段中的所有转移下是不变的
    • 不变性性质只有一个不变性条件Φ\Phi是可定制的,也就是一个Φ\Phi即可决定整个不变性性质。
    • 对不变性的检查只需搜索(如深度优先遍历)整个TSTS的图结构,看看每个结点状态是不是都满足Φ\Phi,而不需要真的找出所有的无限路径。

安全性(Safety Properties)

  • 定义:在TSTS的有限路径上,坏的情况永远不会出现。记作PsafeP_{safe}
  • 生活实例:比如一个ATM取款机,只有当输入了正确的PIN码后,才能取出现金,或者说,一栋房子,永远不会起火。如果房子永远不起火,则满足安全性,但如果未来某一天起火了,则违背了安全性。
  • 安全性和不变性的区别:安全性是有限路径上每一个状态的性质,不变性是一条路径的性质,所有的不变性都属于安全性。
  • APAPPsafeP_{safe}满足安全性的情况:对于所有σ(2AP)ω\sigma \in (2^{AP})^\omegaσPsafe\sigma \in P_{safe},都存在有限的前缀σ^\widehat{\sigma},例如 Psafe{σ(2AP)ωσ^σ的一个前缀}P_{safe} \cap \left \{ \sigma' \in (2^{AP})^\omega | \widehat{\sigma} 是\sigma'的一个前缀 \right \}
  • 坏前缀(bad prefix):在有限路径上出现了坏的有限字σ^\widehat{\sigma},则违背了安全性,这个坏的有限字叫做PsafeP_{safe}的坏前缀,所有的坏的有限前缀的集合叫做BadPref(Psafe)BadPref(P_{safe})
  • 最小坏前缀(minimal bad prefix):σ^BadPref(Psafe)\widehat{\sigma} \in BadPref(P_{safe}),而且σ^\widehat{\sigma}不是BadPref(Psafe)BadPref(P_{safe})内任何片段的前缀。

    判断坏前缀是否为最小坏前缀的时候,将坏前缀最后面的状态删除,如果删除后满足安全性,则为最小坏前缀,如果仍然为坏前缀,那么原式不是最小坏前缀。

  • 例题二:
    • 红灯(red)亮起前,必须有黄灯(yellow)亮起
    • 对于无限字σ=A0A1A3...\sigma = A_0A_1A_3...,若redAired \in A_i,则意味着,ii的值大于零,且yellowAi1yellow\in A_{i-1}
    • AP={red,yellow}AP=\{ red,yellow\}
    • 请观察下面几个有限字那些为最小坏前缀,那些为坏前缀,并画出相应的自动机
      • {red}\varnothing\varnothing \{red\}
      • {red}\varnothing \{red\}
      • {yellow}{yellow}{red}{red}{red}\{yellow\} \{yellow\}\{red\}\{red\}\varnothing \{red\}
    • 答案:
      • {red}\varnothing\varnothing \{red\}为最小坏前缀
      • {red}\varnothing \{red\}为最小坏前缀
      • {yellow}{yellow}{red}{red}{red}\{yellow\} \{yellow\}\{red\}\{red\}\varnothing \{red\}为坏前缀,但并不是最小坏前缀,因为上述有限字还可以缩小为{yellow}{yellow}{red}{red}\{yellow\} \{yellow\}\{red\}\{red\}
      • 自动机:在这里插入图片描述

      图中的¬yellow\neg yellow表示下一动作不是yellowyellow时执行,不是yellowyellow的话,可以是red,greenred,green

  • 例题三:
    • 自动售货机中,投入币的次数是至少是推出饮料的次数
    • 对于无限字σ=A0A1A3...\sigma = A_0A_1A_3...,满足{0jipayAj}{0jidrinkAj}|\{ 0 \leqslant j \leqslant i| pay \in A_j\}| \geq |\{ 0 \leqslant j \leqslant i | drink \in A_j\}|
    • AP={pay,drink}AP=\{ pay,drink\}
    • 请观察下面几个有限字那些为最小坏前缀,那些为坏前缀
      • {pay}{drink}{drink}\varnothing \{ pay\}\{ drink\}\{ drink\}
      • {pay}{drink}{drink}{drink}\varnothing \{ pay\}\{ drink\}\{ drink\}\{ drink\}
      • {pay}{drink}{pay}{drink}{drink}\varnothing \{ pay\}\{ drink\}\varnothing\{ pay\}\{ drink\}\{ drink\}
    • 答案:
      • {pay}{drink}{drink}\varnothing \{ pay\}\{ drink\}\{ drink\}投入一次硬币推出两次饮料,不符合题目,为坏前缀,又无法再缩小,所以为最小坏前缀
      • {pay}{drink}{drink}{drink}\varnothing \{ pay\}\{ drink\}\{ drink\}\{ drink\}投入一次硬币推出三次饮料,不符合题目,为坏前缀,可以删去最后一个{drink}\{ drink\},依然为坏前缀,因此不是最小坏前缀
      • {pay}{drink}{pay}{drink}{drink}\varnothing \{ pay\}\{ drink\}\varnothing\{ pay\}\{ drink\}\{ drink\}投入一次硬币推出一次饮料,然后投入一次硬币推出两次饮料,不符合题目,为坏前缀,又无法再缩小,所以为最小坏前缀
  • 对于没有结束状态和安全性PsafeP_{safe}的转移系统TSTS有: TSPsafeTS \models P_{safe}等价于Tracesfin(TS)BadPref(Psafe)=Traces_{fin}(TS) \cap BadPref(P_{safe}) = \varnothing 解释:Tracesfin(TS)BadPref(Psafe)=Traces_{fin}(TS) \cap BadPref(P_{safe}) = \varnothing换一种表示形式为:Tracesfin(TS)Pref(Psafe)Traces_{fin}(TS) \subseteq Pref(P_{safe}) 上面的等价公式的意思就是,对于TSTS系统和PsafeP_{safe}性质而言,只有在TSTS的有限轨迹含于PsafeP_{safe}的前缀,即Tracesfin(TS)Pref(Psafe)Traces_{fin}(TS) \subseteq Pref(P_{safe})时,TSTS才能够推出PsafeP_{safe}性质

闭包(Closure)

  • 定义:轨迹σ(2AP)ω\sigma \in (2^{AP})^\omegapref(σ)pref(\sigma)为有限前缀集合,则pref(σ)={σ^(2AP)σ^σ的一个有限前缀}pref(\sigma) = \{ \widehat{\sigma} \in (2^{AP})^* | \widehat{\sigma}是\sigma的一个有限前缀 \}
  • 范例:σ=A0A1...\sigma = A_0A_1...那么pref(σ)={ε,A0,A0A1,A0A1A2,...}pref(\sigma)=\left \{\varepsilon,A_0,A_0A_1,A_0A_1A_2,... \right \}

    ε\varepsilon表示为空

  • 定义LT的性质PP的前缀,为所有无限字的前缀集合的并集:pref(P)=σPpref(σ)pref(P) = \underset{\sigma \in P}{ \bigcup }pref(\sigma) 那么,LT的性质PP的闭包定义为前缀都在pref(P)pref(P)中的那些无限字的集合(得到的还是一个LT性质): closure(P)={σ(2AP)ωpref(σ)pref(P)}closure(P)=\{σ∈(2^AP)^\omega ∣ pref(\sigma)\subseteq pref(P)\} 也就是说,PP的闭包是那些前缀也是PP的前缀的无限字的集合。 反过来看,PP的闭包中的无限字不会以不是PP的前缀的有限字为前缀。
  • 作用:使用闭包可以判定一个LT性质是不是安全性。一个LT性质是安全性,当且仅当其闭包是其本身:closure(P)=Pclosure(P) = P

活性(liveness)

  • 定义:安全性是坏的事情不会出现,而活性则是指好的事情终会出现;安全性是在有限的路径内成立,而活性则是在无限的路径内成立。
  • 活性的前缀集合表示:Pref(Plive)=(2AP)Pref(P_{live})=(2^{AP})^*

    Pref(Plive)=(2AP)Pref(P_{live})=(2^{AP})^*等价于closure(Plive)=(2AP)ωclosure(P_{live})=(2^{AP})^{\omega}

  • 活性分为三种:
    • 无限次(Eventually):每个进程最终都会进入它的临界资源。
    • 无限经常次(Repeated eventually):每个进程都会无限经常次进入临界资源。
    • 饥饿情况(Starvation freedom):每一个等待进程(指想要访问临界资源的进程)最终都会进入临界资源。

非安全性也非活性的例子:

  • 若定义LT性质为P(2AP)ωP \subset (2^{AP})^{\omega} ,则安全性和活性是不相交的。
  • 若定义LT性质为P(2AP)ωP \subseteq (2^{AP})^{\omega} ,则仅有(2AP)ω(2^{AP})^{\omega}既是安全性又是活性。这可由“安全性的闭包是其自身,而活性的闭包是整个无限字”来验证。
  • 并非所有LT性质都是安全性或者活性,但总能表示成一个安全性和一个活性的合取形式。
  • 例如【一个机器初始吐出三瓶雪碧,接下来可以无限经常次地吐出啤酒】,这一用自然语言描述的性质。仅看前半句是安全性(因为能用坏前缀表述,如前三个至少有一个是啤酒,那么就是一个坏前缀);仅看后半句是活性(注意,无限经常次吐出啤酒,并非是仅允许吐出啤酒,任何有限序列都无法说明是不是无限经常次吐出啤酒,这部分是活性)。
  • LT性质的分类: 在这里插入图片描述
    • invariants不变性
    • safety properties安全性
    • liveness properties活性
    • safety and liveness property既是安全性又是活性
    • neither liveness nor safety properties既不是安全性又不是活性
  • 分解定理(Decomposition theorem):任何一个LT性质总能分解成安全性和活性的交集:P=PsafePliveP = P_{safe} \cap P_{live}
    • 一般地,因为闭包的闭包仍是自身(一定是安全性),总可以将其按闭包分解出来:P=closure(P)(P((2AP)ωclosure(P)))P=closure(P) \cap (P \cup ((2^{AP})^ω ∖closure(P)))

    closure(P)∖closure(P)表示去掉坏前缀

  • 例题四: IncResetwhereproc Inc=while(x0 do x:=x+1)odproc Reset=x:=1\qquad Inc ||| Reset \\ where\\ \qquad proc \ Inc = while ( x \geqslant 0 \ do \ x := x + 1 ) od\\ \qquad proc \ Reset = x := −1 xx是一个共享整数变量,初始值为0 程序是否会终止?
    • 答案: IncResetInc ||| Reset表示进程IncInc和进程ResetReset同时执行 proc Inc=while(x0 do x:=x+1)odproc \ Inc = while ( x \geqslant 0 \ do \ x := x + 1 ) od表示进程IncInc的执行操作是:当x大于等于0时,xx增加1 proc Reset=x:=1proc \ Reset = x := −1表示进程ResetReset的执行操作是:对xx赋值为-1 因为在计算机内,不会永远执行进程lnclnc,所以进程ResetReset一定会有执行的时候,当执行进程ResetReset后,xx的值变为-1,因此进程lnclnc循环会结束,程序会终止

公平性(Fairness)

  • 定义:一条路径执行过程中所有过程均符合实际情况,则表示这个路径具有了公平性。

    • 对于不满足公平性的路径,可以将不合实际的情况过程剔除,路径便具有了公平性。
    • 无饥饿性通常是在公平性的条件下产生的。
    • 公平性通常是建立活性问题的必要手段。
  • 生活实例:

    • 对于十字路口的两个红绿灯进程进程交错执行:TS=TrLight1TrLight2TS = TrLight_1||TrLight_2,给定一个活性性质的自然语言描述为:每个红绿灯都无限经常次处于绿灯的状态。这条性质表示红绿灯在无限次状态转化的过程中,会有无限次处于绿灯的状态。
      • 轨迹:{red1,red2},{green1,red2},{red1,green2},{green1,red2}\{red_1,red_2\},\{green_1,red_2\},\{red_1,green_2\},\{green_1,red_2\}\cdots,像这样的轨迹,满足刚才我们所说的活性,那么这条轨迹也具有安全性。
      • 轨迹:{red1,red2},{green1,red2},{red1,red2},{green1,red2}\{red_1,red_2\},\{green_1,red_2\},\{red_1,red_2\},\{green_1,red_2\}\cdots,像这样的轨迹,第二个红绿灯永远为红色,不满足刚才我们所说的活性,那么这条轨迹不具有安全性。
  • 基于动作的公平性用A-fair表示,有三种情况:无条件公平性、强公平性、弱公平性

    • 对于一个没有初始状态的TS=(S,Act,,I,AP,L)TS = (S,Act,\to,I,AP,L)

      • 无初始状态
      • AActA \subseteq Act
      • 无限执行片段ρ=s0α0s1α1s2\rho = s_0 \overset{\alpha_0}{\rightarrow} s_1 \overset{\alpha_1}{\rightarrow} s_2\cdots
    • 无条件公平性(Unconditional A-fair):若轨迹满足无条件公平性,则AA中存在的一个或多个动作可以无限经常次执行。

      • 解释:当ρ\rho是一个无条件公平性路径时,对于AA中的动作在这条路径上无限经常此执行,比如A={ω}Act{NC,W,C},ρ=s0NCs1Ws2Cs3NCsnNCsmNCA=\{ \omega \} \subseteq Act\{ NC,W,C \},\rho=s_0 \overset{NC}{\rightarrow}s_1\overset{W}{\rightarrow}s_2\overset{C}{\rightarrow}s_3\overset{NC}{\rightarrow}\cdots s_n\overset{NC}{\rightarrow}\cdots s_m \overset{NC}{\rightarrow}\cdots,动作NCNC在路径上经常次执行,这个路径就叫做无条件公平路径
      • 公式: truek0,jk,αjAtrue \Rightarrow \forall k \geqslant 0,\exist j \geqslant k,\alpha_j \in A 对轨迹中的动作序列的任一位置kk,总能在kk上或kk后面找到一个位置jj,该位置的动作αjA\alpha_j \in A
    • 强公平性(Strongly A-fair):若轨迹满足强公平性,如果AA中存在的动作无限经常次想要执行,则AA中存在一个或多个动作可以无限经常次执行。

      • 公式: (k0,jk,Act(sj)A)k0,jk,αjA( \forall k \geqslant 0,\exist j \geqslant k,Act(s_j) \cap A \neq \varnothing ) \Rightarrow \forall k \geqslant 0,\exist j \geqslant k,\alpha_j \in A 对轨迹中的状态序列的任一位置kk,若总能在kk上或kk后面找到一个位置jj,使得状态sjs_j的所有直接动作Act(sj)Act(s_j)中存在AA中的动作(即Act(sj)AAct(s_j) \cap A \neq \varnothing,无限经常次想要执行),那么AA中一定存在无限经常次执行的动作
    • 弱公平性(Weakly A-fair):若轨迹满足弱公平性,如果AA中的某位置开始,无限经常次有AA中的动作想要执行,则AA中存在一个或多个动作可以无限经常次执行。

      • 公式: (k0,jk,Act(sj)A)k0,jk,αjA( \exist k \geqslant 0,\forall j \geqslant k,Act(s_j) \cap A \neq \varnothing ) \Rightarrow \forall k \geqslant 0,\exist j \geqslant k,\alpha_j \in A 对轨迹中的状态序列的某一位置kk,若总能在kk上或kk后面找到一个位置jj,使得状态sjs_j的所有直接动作Act(sj)Act(s_j)中存在AA中的动作(即Act(sj)AAct(s_j) \cap A \neq \varnothing,无限经常次想要执行),那么AA中一定存在无限经常次执行的动作

      其中,Act(s)={αActsS,sαs}Act(s) = \{ \alpha \in Act | \exist s' \in S,s\overset{\alpha}{\rightarrow} s' \}

    • 例题六:

      • 取动作A={enter1,enter2}A=\{enter_1,enter_2 \},判断下面的红色轨迹是否满足强公平性?(红色轨迹从第2个位置开始,234位置的状态轮以闭圈的形式无限次执行) 在这里插入图片描述
      • 答案:
        • 在红色轨迹中,我们看到,状态w1,n2,y=1\left \langle w_1,n_2,y=1 \right \rangle无限次想要执行enter1enter_1,状态w1,w2,y=1\left \langle w_1,w_2,y=1 \right \rangle无限次想要执行enter1enter_1enter2enter_2,轨迹最终的结果是无限经常次执行enter2enter_2,所以这个轨迹满足强公平性。
    • 例题七:

      • 取动作A={req2}A=\{req_2 \},判断下面的红色轨迹是否满足弱公平性?(红色轨迹从第1个位置开始,123位置的状态轮以闭圈的形式无限次执行) 在这里插入图片描述

      • 答案:

        • 在红色轨迹中,我们看到,从第一个状态开始,每一个状态都无限经常次想要执行req2req_2,但AA中不存在无限经常次执行的动作,所以这个轨迹不满足弱公平性。
  • 程序或进程在无条件公平性下终止的情况:

proc Inc = while x0 do x:=x+1 odproc Reset = x:=1\begin{aligned} proc \ Inc \ =& \ while \ \left \langle x \geqslant 0 \ do \ x := x + 1 \right \rangle \ od \\ proc \ Reset \ = & \ x := −1 \end{aligned}

xx是共享变量,初始值为0

  • 公平性对路径的约束过强或过弱
    • 公平性的目的是排除“不合理”的路径,但如果我们去除了过度或者取出不足时,对验证结果会产生一定的影响。
    • 约束过强(去除过度时):
      • 总的路径\subseteq合理的路径\subseteq验证用的路径
      • 如果验证结果为false,则可以说明合理的路径对应的模型是有问题的
      • 如果验证的结果为true,无法说明合理的路径对应的模型是正确的
    • 约束过弱(去除不足时):
      • 总的路径\subseteq验证用的路径\subseteq合理的路径
      • 如果验证结果为true,则可以说明合理的路径对应的模型是正确的
      • 如果验证的结果为false,无法说明合理的路径对应的模型是错误的

公平性假设

  • 公平性假设F\mathcal{F}将无条件公平、强公平性、弱公平性分属成三个集合,表示为三元组:F=(Fucond,Fstrong,Fweak)\mathcal{F} = (\mathcal{F}_{ucond},\mathcal{F}_{strong},\mathcal{F}_{weak})
    • 其中 Fucond={fucond1,fucond2,},{fstrong1,fstrong2,},{fweak1,fweak2,}\mathcal{F}_{ucond}= \{ f_{ucond_1},f_{ucond_2},\cdots\}, \{ f_{strong_1},f_{strong_2},\cdots\}, \{ f_{weak_1},f_{weak_2},\cdots\}

fucondi,fstrongi,fweaki2Actf_{ucond_i},f_{strong_i},f_{weak_i}\subseteq 2^{Act} 因此Fucond,Fstrong,Fweak2Act\mathcal{F}_{ucond},\mathcal{F}_{strong},\mathcal{F}_{weak} \subseteq 2^{Act}

  • 执行片段ρ\rho满足公平性假设F\mathcal{F},则称它为F\mathcal{F}-fair,有三条性质:

    • 对于所有的动作AA均满足AFucondA \in \mathcal{F}_{ucond}时,执行片段ρ\rho是无条件限制的公平性
    • 对于所有的动作AA均满足AFstrongA \in \mathcal{F}_{strong}时,执行片段ρ\rho是强公平性
    • 对于所有的动作AA均满足AFweakA \in \mathcal{F}_{weak}时,执行片段ρ\rho是弱公平性
  • 对于例题六: 在这里插入图片描述

    • F=(,{{enter1,enter2}},)\mathcal{F} = (\varnothing,\begin{Bmatrix}\{enter_1,enter_2\}\end{Bmatrix},\varnothing)时,也就是Fucond=Fweak=,Fstrong={enter1,enter2}\mathcal{F}_{ucond}=\mathcal{F}_{weak}=\varnothing,\mathcal{F}_{strong}=\{enter_1,enter_2\}时,Fstrong\mathcal{F}_{strong}内只有一个公平性性质fstrong={enter1,enter2}f_{strong}=\{enter_1,enter_2\},这个公平性假设和例题六给出的强公平性性质是完全一样的。所以图上的执行是满足这个公平性性质F\mathcal{F}的。
    • F=(,{{enter1},{enter2}},)\mathcal{F'} = (\varnothing,\begin{Bmatrix}\{enter_1\},\{enter_2\}\end{Bmatrix},\varnothing)时,Fstrong\mathcal{F'}_{strong}内有两个公平性性质,对于fstrong2={enter2}f_{strong_2}=\{enter_2\}满足强公平性,但fstrong1={enter1}f_{strong_1}=\{enter_1\}不满足强公平性。所以图上的执行是不满足这个公平性性质F\mathcal{F'}的。
  • 对于例题七: 在这里插入图片描述

F=(,{{enter1},{enter2}},{{req1},{req2}})\mathcal{F} = (\varnothing,\begin{Bmatrix} \{enter_1\},\{enter_2\} \end{Bmatrix}, \begin{Bmatrix} \{req_1\},\{req_2\} \end{Bmatrix}) 需要考察每一个公平性属性,才能知道上图中的执行是否满足公平性假设F\mathcal{F} - fstrong1={enter1}f_{strong_1}=\{ enter_1\}是满足的,因为enter1enter_1无限经常次使能且无限经常次进入了。 - fstrong2={enter2}f_{strong_2}=\{ enter_2\}是不满足的,因为其中的全部动作enter2enter_2没有无限经常次想要执行,所以也不用看有没有无限经常次执行了。 - fweak1={req1}f_{weak_1}=\{ req_1\}是满足的,因为状态n1,n2,y=1\left \langle n_1,n_2,y=1 \right \rangle无限次想要执行req1req_1,并且执行力无限次,所以这条轨迹满足A=req1A={req_1}的弱公平性fweak1f_{weak_1}。 - fweak2={req2}f_{weak_2}=\{ req_2\}是不满足的,虽然轨迹中的每个状态都想要执行req2req_2,但在轨迹中并没有A=req2A={req_2}中无限经常次执行的动作。

  • 综上,上图中的执行不满足公平性假设F\mathcal{F}

  • 公平路径和轨迹:

    • 如果存在路径s0α1s1α2s2s_0 \overset{\alpha_1}{\rightarrow} s_1 \overset{\alpha_2}{\rightarrow} s_2 \cdots,则路径s0s1s2s_0 \to s_1 \to s_2 \cdotsF\mathcal{F}-fair的
      • FairPathsF(s)FairPaths_{\mathcal{F}}(s)表示从ss开始的F\mathcal{F}-fair路径集合
      • FairPathsF(TS)=sIFariPathsF(s)FairPaths_{\mathcal{F}}(TS) = \bigcup_{s \in I} FariPaths_{\mathcal{F}}(s)表示从所有初始状态出发的F\mathcal{F}-fair的路径的集合
    • 如果存在一条F\mathcal{F}-fair的路径π\piσ=trace(π)\sigma = trace(\pi),则轨迹σ\sigmaF\mathcal{F}-fair
      • FairPathsF(s)=trace(FairPathsF(s))FairPaths_{\mathcal{F}}(s) = trace(FairPaths_{\mathcal{F}}(s)) 表示从ss出发的所有F\mathcal{F}-fair的轨迹的集合
      • FairPathsF(TS)=trace(FairPathsF(TS))FairPaths_{\mathcal{F}}(TS) = trace(FairPaths_{\mathcal{F}}(TS)) 表示整个TSTS的所有F\mathcal{F}-fair的轨迹的集合
  • 公平性的满足性

    • 我们之前学到:TSTS满足LT属性PP的条件是对于TSTS的所有轨迹都满足PP TSP当且仅当Traces(TS)PTS \models P当且仅当Traces(TS) \subseteq P
    • 引入公平性假设后,TSTS则是被公平性假设F\mathcal{F}约束后满足LT性质P(也可理解为:TSTS公平性满足LT属性PP且满足公平属性F\mathcal{F}),此时,只需考虑TSTS中的那些被公平性假设约束后的轨迹集合是P的子集即可,记为: TSFP当且仅当Traces(TS)FPTS \models_{\mathcal{F}} P当且仅当Traces(TS)_{\mathcal{F}} \subseteq P
    • 对于TSTS上的所有路径,如果全都满足F\mathcal{F}-fair,则 TSFP当且仅当TSPTS \models_{\mathcal{F}} P当且仅当TS \models P
    • 如果TSTS内的一些路径不满足F\mathcal{F}-fair,则 TSFP但是有可能出现TSP的情况TS \models_{\mathcal{F}} P但是有可能出现TS \nvDash P的情况
  • 公平性和安全性:

    • 关系:公平性假设F\mathcal{F}的约束是在无限轨迹上的,而安全性是在有限轨迹上的,所以一个TSTS用公平性约束与否不会影响器是否满足某个安全性。
    • 对于在同一原子命题APAP上的转移系统TSTS和安全性PsafeP_{safe},对于任意的s(sReach(TS))s(s \in Reach(TS)),满足:在FairPathsF(s)FairPaths_{\mathcal{F(s)}} \neq \varnothing的情况下 TSPsafe当且仅当TSFPsafeTS \models P_{safe}当且仅当TS \models_{\mathcal{F}} P_{safe}

    相对地,活性是在无限轨迹上的,一个TSTS用公平性约束,无法保证约束后的TSTS对某活性性质的满足性仍保持