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

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

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

有限字和无限字

  • 对于原子命题集合 A P = { a , b } AP=\{a,b\} AP={a,b},则 2 A P 2^{AP} 2AP A P AP AP的幂集: 2 A P = { ∅ , { a } , { b } , { a , b } } 2^{AP}=\{ \varnothing,\{ a \},\{ b \},\{ a,b \} \} 2AP={,{a},{b},{a,b}}
  • 如果用 ( 2 A P ) ω (2^{AP})^\omega (2AP)ω表示以 2 A P 2^{AP} 2AP中元素为字母构成的所有无限长的字符集合,称为 2 A P 2^{AP} 2AP上的无限字集合,这个集合可以表示为:
    ( 2 A P ) ω = { { 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)ω={}{a}{b}{a,b}{a,b}...,{a,b}{a}...,{a}{a}{a}...,...
  • 如果用 ( 2 A P ) ∗ (2^{AP})^* (2AP)表示以 2 A P 2^{AP} 2AP中元素为字母构成的所有有限长的字符集合,称为 2 A P 2^{AP} 2AP上的有限字集合,这个集合可以表示为:
    ( 2 A P ) ∗ = { { 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} (2AP)={}{a}{b}{a,b}{a,b},{a,b}{a},{a}{a}{a},{a},,...

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

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

  • 定义:线性时间性质指定了 T S TS TS展开后得到的轨迹,指定了系统可接受或期望接受的行为。
  • 当且仅当 T S TS TS内所有轨迹都在线性时间性质内(或者说 T S TS TS上所有轨迹都含于 P P P)时, T S TS TS满足线性时间性质 P P P成立,即:
    T S ⊨ P i f f T r a c e s ( T S ) ⊆ P TS \models P \quad iff \quad Traces(TS) \subseteq P TSPiffTraces(TS)P
  • 下面是两个进程对一个互斥信号量资源使用的例子:
    在这里插入图片描述
    他们并发转换为 T S TS TS后的结果:
    在这里插入图片描述
    每个状态都是由之前两 P G PG PG L o c Loc Loc和互斥信号量 y y y的取值组成,其中红色和蓝色分别表示两个进程的 L o c Loc Loc n n n表示在非临界区, w w w表示想要进入临界区, c c c表示正处在临界区, y = 0 y=0 y=0表示“资源已上锁,不允许使用资源”, y = 1 y=1 y=1表示“资源未上锁,可以使用资源”;
    • L T   P r o p e r t y LT \ Property LT Property的互斥性:
      • 定义:至多只有一个进程进入临界资源。
      • 解释:原子命题集合 A P = { c r i t 1 , c r i t 2 } AP=\{crit_1, crit_2\} AP={crit1,crit2},两进程 P 1 P1 P1 P 2 P2 P2处在访问临界资源状态,但他们永远至多只有一个进程进入临界资源,这一 L T   P r o p e r t y LT \ Property LT Property可表示为: P m u t e x = 对 于 无 限 字 A 0 A 1 A 2 ⋯ 的 集 合 , 对 于 所 有 0 ⩽ i 都 有 { c r i t 1 , c r i t 2 } ⊈ A i P_{mutex}=对于无限字A_0A_1A_2\cdots的集合,对于所有0 \leqslant i都有\{ crit_1,crit_2\} \nsubseteq A_i Pmutex=A0A1A20i{crit1,crit2}Ai
      • 举例:像 { c r i t 1 } { c r i t 1 } { c r i t 2 } . . . , ∅ { c r i t 2 } ∅ { c r i t 1 } . . . , ∅ ∅ ∅ . . . , . . . } \{ crit_1\} \{ crit_1\} \{ crit_2\}...,\varnothing\{ crit_2\}\varnothing\{ crit_1\}...,\varnothing\varnothing\varnothing...,... \} {crit1}{crit1}{crit2}...,{crit2}{crit1}...,...,...}都是合法的,但 { c r i t 1 , c r i t 2 } \{crit_1,crit_2\} {crit1,crit2}这种无限字如果出现在集合中就是非法的,因为 c r i t 1 crit_1 crit1 c r i t 2 crit_2 crit2是互斥的,不能同时发生,所以像 { ∅ { c r i t 2 , c r i t 1 } { c r i t 2 } . . . } \{\varnothing\{crit_2,crit_1\}\{ crit_2\}... \} {{crit2,crit1}{crit2}...}这样的轨迹就是非法的
    • L T   P r o p e r t y LT \ Property LT Property的无饥饿性:
      • 定义:一个想访问临界资源的进程最终一定能访问到临界资源。
      • 解释:原子命题集合 A P = { w a i t 1 , c r i t 1 , w a i t 2 , c r i t 2 } AP=\{wait_1,crit_1,wait_2, crit_2\} AP={wait1,crit1,wait2,crit2}, 对于不但要满足“至多只有一个进程进入临界资源”,还要满足“一个想访问临界资源的进程最终一定能访问到临界资源”的情况, L T   P r o p e r t y LT \ Property LT Property可表示为: P m u t e x = 对 于 无 限 字 A 0 A 1 A 2 ⋯ 的 集 合 , 对 于 每 一 个 0 ∈ { 1 , 2 } 都 有 ( ∃ ∞ j .   w a i t i ∈ A j ) ⇒ ( ∃ ∞ j .   c r i t i ∈ A j ) 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 ) Pmutex=A0A1A20{1,2}(j. waitiAj)(j. critiAj)
      • 举例:对每个进程 P i P_i Pi,当 w a i t i wait_i waiti无限经常次属于 A j A_j Aj时,那么 c r i t i crit_i criti就无限经常次属于 A j A_j Aj。也叫做“无限经常次想要,最终会导致无限经常次获得”,这就是无饥饿性。

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

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

  • 对于在同一个原子命题集 A P AP AP上的转移系统: T S TS TS T S ′ TS' TS,他们的轨迹集合可能存在以下两种关系:
    • 包含关系:
      T r a c e s ( T S ) ⊆ T r a c e s ( T S ′ ) i f   a n d   o n l y   i f f o r   a n y   L T   p r o p e r t y   P : T S ′ ⊨ P   i m p l i e s   T S ⊨ P Traces(TS) \subseteq Traces(TS') \\ if \ and \ only \ if \\ for \ any \ LT \ property \ P : TS' \models P \ implies \ TS \models P Traces(TS)Traces(TS)if and only iffor any LT property P:TSP implies TSP
      • 解释:当且仅当对于任意线性时间性质 P P P都有: T S ′ ⊨ P TS' \models P TSP T S ⊨ P TS \models P TSP成立时, T r a c e s ( T S ) ⊆ T r a c e s ( T S ′ ) Traces(TS) \subseteq Traces(TS') Traces(TS)Traces(TS)成立。换句话说就是,当 T r a c e s ( T S ) ⊆ T r a c e s ( T S ′ ) Traces(TS) \subseteq Traces(TS') Traces(TS)Traces(TS) T S ′ ⊨ P TS' \models P TSP时, T S ⊨ P TS \models P TSP
      • 含义:一个 T S TS TS扩张了另一个 T S TS TS的实现
    • 等价关系:
      T r a c e s ( T S ) = T r a c e s ( T S ′ ) i f   a n d   o n l y   i f T S   a n d   T S ′   s a t i s f y   t h e   s a m e   L T   p r o p e r t i e s Traces(TS) = Traces(TS') \\ if \ and \ only \ if \\ TS \ and \ TS' \ satisfy \ the \ same \ LT \ properties Traces(TS)=Traces(TS)if and only ifTS and TS satisfy the same LT properties
      • 解释:当且仅当两个 T S TS TS满足相同的 L T LT LT属性时,这两个 T S TS TS T S TS TS初始状态出发的所有路径的轨迹都相互包含。
      • 含义:两个 L T LT LT属性相同的系统的轨迹也是一致的。

    T r a c e s ( T S ) = T r a c e s ( T S ′ ) Traces(TS) = Traces(TS') Traces(TS)=Traces(TS)中的“=”在这里表示相互包含的意思

不变性(Invariants)

  • 含义:在原子命题集 A P AP AP上, T S TS TS的每一个状态都要满足的性质,这个性质叫做不变性,用 P i n v P_{inv} Pinv表示。

  • 公式表示: P i n v = { A 0 A 1 A 2 . . . ∈ ( 2 A P ) ω ∣ ∀ j ⩾ 0. A j ⊨ Φ } P_{inv}=\{ A_0A_1A_2... \in (2^{AP})^\omega | \forall j\geqslant 0.A_j \models \Phi \} Pinv={A0A1A2...(2AP)ωj0.AjΦ}

  • 公式解释:对于无限字集合中的每个字(也就是 A P AP AP的子集) A 0 A 1 A 2 . . . A_0A_1A_2... A0A1A2...都能满足 Φ \Phi Φ,则该 L T   p r o p e r t y LT \ property LT property具有不变性。

    Φ \Phi Φ A P AP AP上的命题逻辑公式,叫做 P i n v P_{inv} Pinv的不变条件

  • T S ⊨ P i n v TS \models P_{inv} TSPinv表示 T S TS TS满足某一不变性质 P i n v P_{inv} Pinv,和下面三个命题等价:

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

安全性(Safety Properties)

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

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

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

      图中的 ¬ y e l l o w \neg yellow ¬yellow表示下一动作不是 y e l l o w yellow yellow时执行,不是 y e l l o w yellow yellow的话,可以是 r e d , g r e e n red,green red,green

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

闭包(Closure)

  • 定义:轨迹 σ ∈ ( 2 A P ) ω \sigma \in (2^{AP})^\omega σ(2AP)ω p r e f ( σ ) pref(\sigma) pref(σ)为有限前缀集合,则 p r e f ( σ ) = { σ ^ ∈ ( 2 A P ) ∗ ∣ σ ^ 是 σ 的 一 个 有 限 前 缀 } pref(\sigma) = \{ \widehat{\sigma} \in (2^{AP})^* | \widehat{\sigma}是\sigma的一个有限前缀 \} pref(σ)={σ (2AP)σ σ}
  • 范例: σ = A 0 A 1 . . . \sigma = A_0A_1... σ=A0A1...那么 p r e f ( σ ) = { ε , A 0 , A 0 A 1 , A 0 A 1 A 2 , . . . } pref(\sigma)=\left \{\varepsilon,A_0,A_0A_1,A_0A_1A_2,... \right \} pref(σ)={ε,A0,A0A1,A0A1A2,...}

    ε \varepsilon ε表示为空

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

活性(liveness)

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

    P r e f ( P l i v e ) = ( 2 A P ) ∗ Pref(P_{live})=(2^{AP})^* Pref(Plive)=(2AP)等价于 c l o s u r e ( P l i v e ) = ( 2 A P ) ω closure(P_{live})=(2^{AP})^{\omega} closure(Plive)=(2AP)ω

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

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

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

    ∖ c l o s u r e ( P ) ∖closure(P) closure(P)表示去掉坏前缀

  • 例题四:
    I n c ∣ ∣ ∣ R e s e t w h e r e p r o c   I n c = w h i l e ( x ⩾ 0   d o   x : = x + 1 ) o d p r o c   R e s e t = x : = − 1 \qquad Inc ||| Reset \\ where\\ \qquad proc \ Inc = while ( x \geqslant 0 \ do \ x := x + 1 ) od\\ \qquad proc \ Reset = x := −1 IncResetwhereproc Inc=while(x0 do x:=x+1)odproc Reset=x:=1
    x x x是一个共享整数变量,初始值为0
    程序是否会终止?
    • 答案:
      I n c ∣ ∣ ∣ R e s e t Inc ||| Reset IncReset表示进程 I n c Inc Inc和进程 R e s e t Reset Reset同时执行
      p r o c   I n c = w h i l e ( x ⩾ 0   d o   x : = x + 1 ) o d proc \ Inc = while ( x \geqslant 0 \ do \ x := x + 1 ) od proc Inc=while(x0 do x:=x+1)od表示进程 I n c Inc Inc的执行操作是:当x大于等于0时, x x x增加1
      p r o c   R e s e t = x : = − 1 proc \ Reset = x := −1 proc Reset=x:=1表示进程 R e s e t Reset Reset的执行操作是:对 x x x赋值为-1
      因为在计算机内,不会永远执行进程 l n c lnc lnc,所以进程 R e s e t Reset Reset一定会有执行的时候,当执行进程 R e s e t Reset Reset后, x x x的值变为-1,因此进程 l n c lnc lnc循环会结束,程序会终止

公平性(Fairness)

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

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

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

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

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

      • 解释:当 ρ \rho ρ是一个无条件公平性路径时,对于 A A A中的动作在这条路径上无限经常此执行,比如 A = { ω } ⊆ A c t { N C , W , C } , ρ = s 0 → N C s 1 → W s 2 → C s 3 → N C ⋯ s n → N C ⋯ s m → N C ⋯ A=\{ \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 A={ω}Act{NC,W,C},ρ=s0NCs1Ws2Cs3NCsnNCsmNC,动作 N C NC NC在路径上经常次执行,这个路径就叫做无条件公平路径
      • 公式:
        t r u e ⇒ ∀ k ⩾ 0 , ∃ j ⩾ k , α j ∈ A true \Rightarrow \forall k \geqslant 0,\exist j \geqslant k,\alpha_j \in A truek0,jk,αjA
        对轨迹中的动作序列的任一位置 k k k,总能在 k k k上或 k k k后面找到一个位置 j j j,该位置的动作 α j ∈ A \alpha_j \in A αjA
    • 强公平性(Strongly A-fair):若轨迹满足强公平性,如果 A A A中存在的动作无限经常次想要执行,则 A A A中存在一个或多个动作可以无限经常次执行。

      • 公式:
        ( ∀ k ⩾ 0 , ∃ j ⩾ k , A c t ( s j ) ∩ A ≠ ∅ ) ⇒ ∀ k ⩾ 0 , ∃ j ⩾ k , α j ∈ A ( \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 (k0,jk,Act(sj)A=)k0,jk,αjA
        对轨迹中的状态序列的任一位置 k k k,若总能在 k k k上或 k k k后面找到一个位置 j j j,使得状态 s j s_j sj的所有直接动作 A c t ( s j ) Act(s_j) Act(sj)中存在 A A A中的动作(即 A c t ( s j ) ∩ A ≠ ∅ Act(s_j) \cap A \neq \varnothing Act(sj)A=,无限经常次想要执行),那么 A A A中一定存在无限经常次执行的动作
    • 弱公平性(Weakly A-fair):若轨迹满足弱公平性,如果 A A A中的某位置开始,无限经常次有 A A A中的动作想要执行,则 A A A中存在一个或多个动作可以无限经常次执行。

      • 公式:
        ( ∃ k ⩾ 0 , ∀ j ⩾ k , A c t ( s j ) ∩ A ≠ ∅ ) ⇒ ∀ k ⩾ 0 , ∃ j ⩾ k , α j ∈ A ( \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 (k0,jk,Act(sj)A=)k0,jk,αjA
        对轨迹中的状态序列的某一位置 k k k,若总能在 k k k上或 k k k后面找到一个位置 j j j,使得状态 s j s_j sj的所有直接动作 A c t ( s j ) Act(s_j) Act(sj)中存在 A A A中的动作(即 A c t ( s j ) ∩ A ≠ ∅ Act(s_j) \cap A \neq \varnothing Act(sj)A=,无限经常次想要执行),那么 A A A中一定存在无限经常次执行的动作

      其中, A c t ( s ) = { α ∈ A c t ∣ ∃ s ′ ∈ S , s → α s ′ } Act(s) = \{ \alpha \in Act | \exist s' \in S,s\overset{\alpha}{\rightarrow} s' \} Act(s)={αActsS,sαs}

    • 例题六:

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

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

      • 答案:

        • 在红色轨迹中,我们看到,从第一个状态开始,每一个状态都无限经常次想要执行 r e q 2 req_2 req2,但 A A A中不存在无限经常次执行的动作,所以这个轨迹不满足弱公平性。
  • 程序或进程在无条件公平性下终止的情况:
    p r o c   I n c   =   w h i l e   ⟨ x ⩾ 0   d o   x : = x + 1 ⟩   o d p r o c   R e s e t   =   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} proc Inc =proc Reset = while x0 do x:=x+1 od x:=1

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

  • 公平性对路径的约束过强或过弱

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

公平性假设

  • 公平性假设 F \mathcal{F} F将无条件公平、强公平性、弱公平性分属成三个集合,表示为三元组: F = ( F u c o n d , F s t r o n g , F w e a k ) \mathcal{F} = (\mathcal{F}_{ucond},\mathcal{F}_{strong},\mathcal{F}_{weak}) F=(Fucond,Fstrong,Fweak)

    • 其中 F u c o n d = { f u c o n d 1 , f u c o n d 2 , ⋯   } , { f s t r o n g 1 , f s t r o n g 2 , ⋯   } , { f w e a k 1 , f w e a k 2 , ⋯   } \mathcal{F}_{ucond}= \{ f_{ucond_1},f_{ucond_2},\cdots\}, \{ f_{strong_1},f_{strong_2},\cdots\}, \{ f_{weak_1},f_{weak_2},\cdots\} Fucond={fucond1,fucond2,},{fstrong1,fstrong2,},{fweak1,fweak2,}
      f u c o n d i , f s t r o n g i , f w e a k i ⊆ 2 A c t f_{ucond_i},f_{strong_i},f_{weak_i}\subseteq 2^{Act} fucondi,fstrongi,fweaki2Act
      因此 F u c o n d , F s t r o n g , F w e a k ⊆ 2 A c t \mathcal{F}_{ucond},\mathcal{F}_{strong},\mathcal{F}_{weak} \subseteq 2^{Act} Fucond,Fstrong,Fweak2Act
    • 执行片段 ρ \rho ρ满足公平性假设 F \mathcal{F} F,则称它为 F \mathcal{F} F-fair,有三条性质:
      • 对于所有的动作 A A A均满足 A ∈ F u c o n d A \in \mathcal{F}_{ucond} AFucond时,执行片段 ρ \rho ρ是无条件限制的公平性
      • 对于所有的动作 A A A均满足 A ∈ F s t r o n g A \in \mathcal{F}_{strong} AFstrong时,执行片段 ρ \rho ρ是强公平性
      • 对于所有的动作 A A A均满足 A ∈ F w e a k A \in \mathcal{F}_{weak} AFweak时,执行片段 ρ \rho ρ是弱公平性
  • 对于例题六:
    在这里插入图片描述

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

    • F = ( ∅ , { { e n t e r 1 } , { e n t e r 2 } } , { { r e q 1 } , { r e q 2 } } ) \mathcal{F} = (\varnothing,\begin{Bmatrix} \{enter_1\},\{enter_2\} \end{Bmatrix}, \begin{Bmatrix} \{req_1\},\{req_2\} \end{Bmatrix}) F=(,{{enter1},{enter2}},{{req1},{req2}})
      需要考察每一个公平性属性,才能知道上图中的执行是否满足公平性假设 F \mathcal{F} F
      • f s t r o n g 1 = { e n t e r 1 } f_{strong_1}=\{ enter_1\} fstrong1={enter1}是满足的,因为 e n t e r 1 enter_1 enter1无限经常次使能且无限经常次进入了。
      • f s t r o n g 2 = { e n t e r 2 } f_{strong_2}=\{ enter_2\} fstrong2={enter2}是不满足的,因为其中的全部动作 e n t e r 2 enter_2 enter2没有无限经常次想要执行,所以也不用看有没有无限经常次执行了。
      • f w e a k 1 = { r e q 1 } f_{weak_1}=\{ req_1\} fweak1={req1}是满足的,因为状态 ⟨ n 1 , n 2 , y = 1 ⟩ \left \langle n_1,n_2,y=1 \right \rangle n1,n2,y=1无限次想要执行 r e q 1 req_1 req1,并且执行力无限次,所以这条轨迹满足 A = r e q 1 A={req_1} A=req1的弱公平性 f w e a k 1 f_{weak_1} fweak1
      • f w e a k 2 = { r e q 2 } f_{weak_2}=\{ req_2\} fweak2={req2}是不满足的,虽然轨迹中的每个状态都想要执行 r e q 2 req_2 req2,但在轨迹中并没有 A = r e q 2 A={req_2} A=req2中无限经常次执行的动作。
    • 综上,上图中的执行不满足公平性假设 F \mathcal{F} F
  • 公平路径和轨迹:

    • 如果存在路径 s 0 → α 1 s 1 → α 2 s 2 ⋯ s_0 \overset{\alpha_1}{\rightarrow} s_1 \overset{\alpha_2}{\rightarrow} s_2 \cdots s0α1s1α2s2,则路径 s 0 → s 1 → s 2 ⋯ s_0 \to s_1 \to s_2 \cdots s0s1s2 F \mathcal{F} F-fair的

      • F a i r P a t h s F ( s ) FairPaths_{\mathcal{F}}(s) FairPathsF(s)表示从 s s s开始的 F \mathcal{F} F-fair路径集合
      • F a i r P a t h s F ( T S ) = ⋃ s ∈ I F a r i P a t h s F ( s ) FairPaths_{\mathcal{F}}(TS) = \bigcup_{s \in I} FariPaths_{\mathcal{F}}(s) FairPathsF(TS)=sIFariPathsF(s)表示从所有初始状态出发的 F \mathcal{F} F-fair的路径的集合
    • 如果存在一条 F \mathcal{F} F-fair的路径 π \pi π σ = t r a c e ( π ) \sigma = trace(\pi) σ=trace(π),则轨迹 σ \sigma σ F \mathcal{F} F-fair

      • F a i r P a t h s F ( s ) = t r a c e ( F a i r P a t h s F ( s ) ) FairPaths_{\mathcal{F}}(s) = trace(FairPaths_{\mathcal{F}}(s)) FairPathsF(s)=trace(FairPathsF(s))
        表示从 s s s出发的所有 F \mathcal{F} F-fair的轨迹的集合
      • F a i r P a t h s F ( T S ) = t r a c e ( F a i r P a t h s F ( T S ) ) FairPaths_{\mathcal{F}}(TS) = trace(FairPaths_{\mathcal{F}}(TS)) FairPathsF(TS)=trace(FairPathsF(TS))
        表示整个 T S TS TS的所有 F \mathcal{F} F-fair的轨迹的集合
  • 公平性的满足性

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

    • 关系:公平性假设 F \mathcal{F} F的约束是在无限轨迹上的,而安全性是在有限轨迹上的,所以一个 T S TS TS用公平性约束与否不会影响器是否满足某个安全性。
    • 对于在同一原子命题 A P AP AP上的转移系统 T S TS TS和安全性 P s a f e P_{safe} Psafe,对于任意的 s ( s ∈ R e a c h ( T S ) ) s(s \in Reach(TS)) s(sReach(TS)),满足:在 F a i r P a t h s F ( s ) ≠ ∅ FairPaths_{\mathcal{F(s)}} \neq \varnothing FairPathsF(s)=的情况下
      T S ⊨ P s a f e 当 且 仅 当 T S ⊨ F P s a f e TS \models P_{safe}当且仅当TS \models_{\mathcal{F}} P_{safe} TSPsafeTSFPsafe

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

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
CSS linear-gradient()的大小可以通过以下几种方式进行控制: 1. 使用关键词:linear-gradient()函数可以接受关键词来定义渐变的大小,常见的关键词有to top、to right、to bottom和to left,分别表示从上到下、从右到左、从下到上和从左到右的渐变方向。 2. 使用角度:linear-gradient()函数也可以接受角度值来定义渐变的方向,比如使用90deg表示从上到下的渐变。你可以根据需要自由选择角度值来控制渐变的方向。 3. 使用百分比:linear-gradient()函数还可以使用百分比来定义渐变的大小,比如使用50%表示渐变从起点到终点的一半位置结束。 总结起来,CSS linear-gradient()函数可以通过关键词、角度和百分比来控制渐变的大小。具体的使用方式可以根据实际需求进行选择。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [深入剖析CSS中的线性渐变linear-gradient](https://download.csdn.net/download/weixin_38730129/12884984)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [CSS学习笔记之可重复渐变(repeating-linear-gradient)](https://download.csdn.net/download/weixin_38688145/13590700)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [CSS 实现渐变效果小结( linear-gradient线性渐变 和 radial-gradient径向渐变)](https://download.csdn.net/download/weixin_38627826/14901356)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

print_Hyon

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值