【系統分析與驗證學習筆記】6:線性時序性質(Linear-time Properties)

爲方便,線性時序性質(linear-time properties)後續均簡稱LT性質

在系統分析中,描述線性時序行爲(linear-time behavior)可以是基於動作的(action-based approach),也可以是基於狀態的(state-based approach),本章主要學習的是基於狀態的(但在學習公平性時用動作描述),也就可以在TS中刻意忽略轉移過程中的具體動作,而只考慮前後狀態。

1 前置知識

1.1 路徑(path)與狀態圖

TS可以表示成狀態圖(V,E)(V,E)的形式,其中狀態就是其結點V=SV=S,邊就是狀態到狀態的轉移關係E={(s,s)S×S  sPost(s)}E=\{(s,s') \in S \times S' \ | \ s' \in Post(s)\}。這裏Post(s)Post(s)是從狀態ss的所有直接後繼狀態的集合,相關內容見筆記3中的定義。

約定,將無限長的path記爲π\pi等小寫字母,而將有限長的path記爲π^\hat{\pi}等頭戴^的小寫字母。從狀態ss出發的所有path記爲Paths(s)Paths(s),所有有限長的path記爲Pathsfin(s)Paths_{fin}(s)

1.2 跡(traces)

一個TS系統可以用一系列trace來描述其行爲軌跡,具體是,跡被定義爲一串接連到達的狀態sis_i的標籤函數L(si)L(s_i)的序列。因爲L2APL \in 2^{AP},所以跡上的每個元素也是APAP的子集。

例如,狀態圖上的一系列接連的轉移是一個path:
s0α1s1α2s2...s_0 \stackrel{\alpha_1}{\longrightarrow} s_1 \stackrel{\alpha_2}{\longrightarrow} s_2 ...

這可以簡記爲:
s0s1s2...s_0 s_1 s_2...

對其中每個結點對應的狀態用標籤函數映射到2AP2^{AP}上,得到的就是一個跡(trace):
L(s0)L(s1)L(s2)...L(s_0) L(s_1) L(s_2) ...

具體地,這個跡可能是這樣的形式:
{a} {a,b} ϕ ...\{a\} \ \{a,b\} \ \phi \ ...

其中a,bAPa,b \in AP


約定,用trace()trace()表示對path(如π\pi),或者path的集合中的每個元素(如πΠ\pi \in \Pi)取跡。對每個path而言,無限長的path得到無限長的跡,有限長的path得到有限長的跡。

  • 從path集合得到trace集合:
    trace(Π)={trace(π)  πΠ}trace(\Pi)=\{trace(\pi) \ | \ \pi \in \Pi\}

約定,用Traces()Traces()表示從狀態(如ss),或者從TS中的每個初始狀態(如sI from TSs \in I \ from \ TS)出發的所有跡的集合。用Tracesfin()Traces_{fin}()表示只取有限長度的那些跡組成集合。

  • ss出發的所有path的trace:
    Traces(s)=trace(Paths(s))Traces(s)=trace(Paths(s))

  • 從TS的初始狀態出發的所有path的trace:
    Traces(TS)=sITraces(s)Traces(TS)=\bigcup_{s \in I} Traces(s)

  • ss出發的所有有限長path的trace:
    Tracesfin(s)=trace(Pathsfin(s))Traces_{fin}(s)=trace(Paths_{fin}(s))

  • 從TS的初始狀態出發的所有有限長path的trace:
    Tracesfin(TS)=sITracesfin(s)Traces_{fin}(TS)=\bigcup_{s \in I} Traces_{fin}(s)

1.3 無限字和有限字

舉例來說,如原子命題集合AP={a,b}AP=\{a,b\},則2AP2^{AP}APAP的冪集:
2AP={ϕ,{a},{b},{a,b}}2^{AP}=\{\phi,\{a\},\{b\},\{a,b\}\}

那麼(2AP)ω(2^{AP})^{\omega}表示以2AP2^{AP}中元素爲字母構成的所有無限長的字的集合,稱爲2AP2^{AP}上的無限字集合。也就是說,這個集合是這樣一種形式:
(2AP)ω={ϕ {b} {a} ... ,{a,b} {a,b} {a} ... ,...} \begin{aligned} (2^{AP})^{\omega} = & \{ \\ & \phi \ \{b\} \ \{a\} \ ... \ ,\\ & \{a,b\} \ \{a,b\} \ \{a\} \ ... \ ,\\ & ... \\ & \} \\ \end{aligned}

同理可定義2AP2^{AP}上的有限字集合,其形式如下:
(2AP)={ϕ ,{a} ,{b} ,{a,b} ,ϕ ϕ ,ϕ {a} ,...} \begin{aligned} (2^{AP})^{*} = & \{ \\ & \phi \ ,\\ & \{a\} \ ,\\ & \{b\} \ ,\\ & \{a,b\} \ ,\\ & \phi \ \phi \ ,\\ & \phi \ \{a\} \ ,\\ & ... \\ & \} \\ \end{aligned}

注意,無限字和無限字集合不是一個概念,無限字集合中的每個元素都是無限字,無限字指用無限多個字母組成的序列,在這裏,冪集2AP2^{AP}中的每個元素都是一個字母(例如{a,b}\{a,b\})。

無限字集合和有限字集合中的元素數目都是無限多的。

2 LT性質

以兩進程併發,並帶有一個互斥信號量控制的例子爲例:
在這裏插入圖片描述
它們併發後轉爲TS,結果如下:
在這裏插入圖片描述
每個狀態都是由之前兩PG的Loc和互斥信號量y的取值組成(見筆記5PG向TS的轉換),其中紅色和藍色分別表示兩個進程的Loc,n表示在非臨界區,w表示想要進入臨界區,c表示正處在臨界區。

2.1 一般描述

LT性質可用無限字集合的子集來表示,即P(2AP)ωP \subseteq (2^{AP})^{\omega}

一個TS滿足P,記爲TSPTS \models P,當且僅當從其初始狀態出發的所有trace都在PP中,即Traces(TS)PTraces(TS) \subseteq P

例如,取原子命題集合AP={crit1,crit2}AP=\{crit_1,crit_2\},這之中的兩個命題分別表示兩進程P1P1P2P2處在訪問臨界資源狀態。則【永遠至多隻有一個進程進入臨界資源】這一LT性質可表示爲:
Pmutex=A0A1A2..,i0{crit1,crit2}AiP_{mutex}=無限字A_0A_1A_2..的集合,保證對所有i \geq0有\{crit_1,crit_2\} \nsubseteq A_i

也就是說,像{crit1} {crit2} {crit1}...\{crit_1\} \ \{crit_2\} \ \{crit_1\} ...這樣的trace是合法的,但是不會在trace中出現{crit1,crit2}\{crit_1,crit_2\}這一項,見上一張圖中沒有同時存在c1和c2的狀態。

2.2 無飢餓性(starvation freedom)

無飢餓性(PnostarveP_{nostarve})表示,一個想訪問臨界資源的進程最終一定能訪問到臨界資源。

在上面的例子中,取原子命題AP={wait1,crit1,wait2,crit2}AP=\{wait_1,crit_1,wait_2,crit_2\},注意這裏和2.1中的例子的取法不一樣,因爲那裏只關注“處在臨界區”,而這裏還要關注“想要進入臨界區”。則“無飢餓性”可以表達爲滿足如下條件的無限字A0A1A2..A_0A_1A_2..的集合PnostarveP_{nostarve}
(j.waitiAj)(j.critiAj) for each i{1,2}(\exists^\infty j. wait_i \in A_j)\Rightarrow (\exists^\infty j. crit_i \in A_j) \ for \ each \ i\in\{1,2\}

也就是說,對每個進程i,若無限經常次存在j,使得waitiAjwait_i \in A_j,那麼就無限經常次存在j,使得critiAjcrit_i \in A_j。也即“無限經常次想要最終會導致無限經常次獲得”,這就是無飢餓性。

前面的例子不滿足無飢餓性,如下圖中標註的無限trace,進程2無限經常此waitwait,卻始終無法進入臨界區:
在這裏插入圖片描述

2.3 兩TS的trace集合與LT性質的關係

假設TSTSTSTS'是同一APAP上的兩transition system,那麼,其trace集合可能特別地存在包含關係和等價關係。

包含關係意在說明一系統擴張了另一系統的實現,而等價關係則指出兩確定性的系統是一致的。

2.3.1 包含關係

Traces(TS)Traces(TS)Traces(TS) \subseteq Traces(TS')當且僅當對任意LT性質P,有TSPTSPTS' \models P \to TS \models P

這可以由TS滿足LT性質的定義直觀得到,即右邊意爲Traces(TS)PTraces(TS)PTraces(TS') \subseteq P \to Traces(TS) \subseteq P

2.3.2 等價關係

Traces(TS)=Traces(TS)Traces(TS)=Traces(TS')當且僅當它們總是滿足相同的LT性質。也即對任意LT性質P,有TSPTSPTS' \models P \leftrightarrow TS \models P(雙蘊含)。

這可由雙向的2.3.1得到,兩個trace集合互相包含,也就是等價的。

2.4 不變性(invariants)

不變性(PinvP_{inv})表示,TS的所有可達狀態都滿足某一不變性條件Φ\Phi

用LT性質的形式表達,不變性可表示爲這樣的無限字集合,每個無限字上的每個字母(也即APAP的子集)總是滿足一不變性條件(實爲命題邏輯公式)Φ\Phi
Pinv={A0A1A2..(2AP)ω  j0. AjΦ}P_{inv}=\{A_0A_1A_2.. \in (2^{AP})^{\omega} \ | \ \forall j \geq 0. \ A_j \models \Phi\}

TSPinvTS \models P_{inv},即TS滿足某一不變性性質PinvP_{inv},實則是和下面三個命題是等價的:

  1. 對TS的所有無限長的路徑π\pi,有trace(π)Pinvtrace(\pi) \in P_{inv}
  2. 對TS的所有路徑上的所有狀態ss,有L(s)ΦL(s) \models \Phi
  3. 對TS的所有可達狀態sReach(TS)s \in Reach(TS),有L(s)ΦL(s) \models \Phi

顯然,不變性性質只有一個不變性條件Φ\Phi是可定製的,也就是一個Φ\Phi即可決定整個不變性性質。對不變性的檢查只需搜索(如DFS)整個TS的圖結構,看看每個結點狀態是不是都滿足Φ\Phi(這是由上面的命題3知道的),而不需要真的找出所有的無限path。

2.5 安全性(safety properties)

2.5.1 簡述

僅在和security properties一詞不會發生混淆的語境,可將其直接翻譯成安全性。

安全性(PsafeP_{safe})是不變性的超集,也就是說所有的不變性都屬於安全性。和不變性不同的那部分在於,安全性不一定都能像不變性那樣通過檢查所有的可達狀態來檢驗,而往往是基於有限的path片段的約束,安全性涉及一個壞前綴(bad prefix)的概念。

若將安全性表示爲LT性質PsafeP_{safe},它一定是一個無限字的集合,那麼從無限字全集(2AP)ω(2^{AP})^{\omega}中將其去掉,所得到的一系列無限字即σ(2AP)ωPsafe\sigma \in (2^{AP})^{\omega} \setminus P_{safe},每個無限字σ\sigma的所有前綴σ^\hat{\sigma}都是壞前綴(是有限字),從這些壞前綴拓展出的所有無限字都不在安全性中:
Psafe{σ(2AP)ω  σ^σ}=ϕP_{safe} \cap \{ \sigma' \in (2^{AP})^{\omega} \ | \ \hat{\sigma}是\sigma'的前綴\} = \phi

安全性的形式定義比較複雜,但是其表達的意義是很直觀的。也就是說系統表示成TS以後,其一系列執行的狀態片段裏都不能出現特定形式的片段,這個“特定形式”也就是用壞前綴σ^\hat{\sigma}來表達的安全性屬性。

因爲壞前綴的形式可以多種多樣,很多時候需要用繁雜的命題來書寫約束,而沒辦法寫成像2.4中表達不變性那樣的單純的命題邏輯公式。

安全性PsafetyP_{safety}的所有壞前綴組成的集合記爲BadPref(Psafety)BadPref(P_{safety}),對每個壞前綴總能找到一個最小壞前綴,從最小壞前綴擴展出的所有有限字都是壞前綴。

2.5.2 例子

例如,交通燈的【紅燈緊跟在黃燈出現以後】,寫爲:
σ=A0A1.., (redAi)((i>0) and (yellowAi1))對所有無限字\sigma = A_0A_1.., \ (red \in A_i) \to ((i>0) \ and \ (yellow \in A_{i-1}))

又如,飲料機的“在任一時刻ii,有效投幣總量不少於已分發的總飲料數”,寫爲:
σ=A0A1.., {0ji  payAj}{0ji  drinkAj}對所有無限字\sigma = A_0A_1.., \ |\{0\leq j \leq i \ | \ pay \in A_j\}|\geq|\{0\leq j \leq i \ | \ drink \in A_j\}|


在交通燈的例子中,如"ϕ ϕ {red}\phi \ \phi \ \{red\}“和”{red}\{red\}“都是最小壞前綴,而”{yellow} {yellow} {red} {red} ϕ {red}\{yellow\} \ \{yellow\} \ \{red\} \ \{red\} \ \phi \ \{red\}“雖是一個壞前綴,但不是最小壞前綴,因爲它還可以縮小爲”{yellow} {yellow} {red} {red}\{yellow\} \ \{yellow\} \ \{red\} \ \{red\}"。

2.5.3 安全性的有限trace集表示

一個TS滿足某安全性PsafeP_{safe},當且僅當TS的有限trace集和安全性的壞前綴集不相交:
TSPsafe(Tracesfin(TS)  BadPref(Psafe)=ϕ)TS \models P_{safe} \leftrightarrow (Traces_{fin}(TS) \ \cap \ BadPref(P_{safe}) = \phi)

2.6 LT性質的閉包(closure)

定義pref(σ)pref(\sigma)爲無限字σ\sigma的所有有限前綴集合:
pref(σ)={σ^(2AP)  σ^σ}pref(\sigma) = \{ \hat{\sigma} \in (2^{AP})^* \ | \ \hat\sigma 是\sigma的有限前綴\}

例如,取σ=A0A1..\sigma=A_0A_1..pref(σ)={ϵ,A0,A0A1,..}pref(\sigma)=\{\epsilon,A_0,A_0A_1,..\}

還可以定義LT性質PP的前綴,爲其中所有無限字的前綴集合的並集:
pref(P)=αPpref(σ)pref(P)=\bigcup_{\alpha \in P}pref(\sigma)

那麼,LT性質PP的閉包定義爲前綴都在pref(P)pref(P)中的那些無限字的集合(得到的還是一個LT性質):
closure(P)={σ(2AP)ω  pref(σ)pref(P)}closure(P)=\{\sigma \in (2^{AP})^{\omega} \ | \ pref(\sigma) \subseteq pref(P)\}

也就是說,PP的閉包是那些前綴也是PP的前綴的無限字的集合。反過來看,PP的閉包中的無限字不會以不是PP的前綴的有限字爲前綴。

使用閉包可以判定一個LT性質是不是安全性。一個LT性質是安全性,當且僅當其閉包是其本身:
closure(P)=Pclosure(P) = P

2.7 活性(liveness)

活性(PliveP_{live})相比安全性而言,其表達的是在無限時間上的性質。安全性表達“壞的事情不會出現”,而活性則表達“期望的事情最終一定會出現”。

相比安全性,活性只能在無限時間上判定真僞,所以它不會移除任何有限字,其前綴集合就是整個有限字集合:
pref(Plive)=(2AP)pref(P_{live})=(2^{AP})^*

活性可以分爲三種:

  1. EventuallyEventually:如【每個進程最終都能訪問臨界資源】
  2. Repeated eventuallyRepeated \ eventually:如【每個進程最終都能無限經常次訪問臨界資源】
  3. Starvation freedomStarvation \ freedom:如【每個想要訪問臨界資源的進程最終都能訪問臨界資源】

注意,pref(Plive)=(2AP)pref(P_{live})=(2^{AP})^*等價於closure(Plive)=(2AP)ωclosure(P_{live})=(2^{AP})^{\omega}

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

若定義LT性質爲P(2AP)ωP \subset (2^{AP})^{\omega},則安全性和活性是不相交的。

若定義LT性質爲P(2AP)ωP \subseteq (2^{AP})^{\omega},則僅有(2AP)ω(2^{AP})^{\omega}既是安全性又是活性。這可由“安全性的閉包是其自身,而活性的閉包是整個無限字”來驗證。

並非所有LT性質都是安全性或者活性,但總能表示成一個安全性和一個活性的合取形式。

例如【一個機器初始吐出三瓶雪碧,接下來可以無限經常次地吐出啤酒】,這一用自然語言描述的性質。僅看前半句是安全性(因爲能用壞前綴表述,如前三個至少有一個是啤酒,那麼就是一個壞前綴);僅看後半句是活性(注意,無限經常次吐出啤酒,並非是僅允許吐出啤酒,任何有限序列都無法說明是不是無限經常次吐出啤酒,這部分是活性)。
在這裏插入圖片描述

2.9 分解定理(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})^{\omega} \setminus closure(P)))

更加一般地,所分解出的安全性是閉包的超集,而活性則是右半部分的子集:
Psafeclosure(P)Plive(P((2AP)ωclosure(P))) \begin{aligned} P_{safe} & \supseteq closure(P) \\ P_{live} & \subseteq (P \cup ((2^{AP})^{\omega} \setminus closure(P))) \end{aligned}

2.10 基於動作的公平性(fairness)

公平性可以用於去除那些不合實際(unrealistic) 的系統行爲,公平性有時是建立活性性質的必要手段。例如,對兩個紅綠燈進程的interleaving:
TS=TrLight1  TrLight2TS=TrLight_1 \ ||| \ TrLight_2

給定一個活性性質的自然語言描述爲【每個紅綠燈都無限經常次處在綠燈狀態】,那麼下面這個trace在TS中,卻不滿足那條活性:
{red1,red2} {green1,red2} {red1,red2} {green1,red2} ...\{red_1,red_2\} \ \{green_1,red_2\} \ \{red_1,red_2\} \ \{green_1,red_2\} \ ...

這個例子可以看出unrealistic這一詞的精髓。這個模型本身沒有問題,但這條trace是不合實際的,因爲實際中並不會有某一個紅綠燈的切換頻率是無窮大的,以至於在無限長的trace中另一個紅綠燈的切換都未被記錄

注意,trace中有多少元素和時間尺度無關,只和系統的狀態轉換的次數有關。假如兩個紅綠燈,一個切換頻率是無窮大,另一個切換頻率是40秒,那麼無論多長的trace都沒法表達完40秒(甚至1秒或者0.0…1秒)。

公平性的引入即是爲了排除此類不現實的trace,也就在模型檢驗階段避免了相應的不現實執行的驗證(後面會討論排除得過多和過少的問題)。


公平性可以分爲三種,無條件的、強的、弱的。對一個沒有終止狀態的TS,存在若干無限的執行片段,每個都可記爲s0α0s1α1...s_0\xrightarrow[]{\alpha_0}s_1\xrightarrow[]{\alpha_1}...,則可以用動作的子集AActA \subseteq Act定義三類公平性:

  1. Unconditional AfairUnconditional \ A-fairAA中存在無條件無限經常次執行的動作。
    truek0. jk. αjAtrue \Longrightarrow \forall k \geq 0. \ \exists j \geq k. \ \alpha_j \in A
    因爲是無條件的,所以\Rightarrow左邊是truetrue,右邊完全是在詮釋【AA中存在無限經常次執行的動作】,即對trace中的動作序列的任一位置kk,總能在其後找到一個位置jj,該位置的動作αjA\alpha_j \in A

  2. Strongly AfairStrongly \ A-fair:若AA中存在無限經常次使能(想做)的動作,那麼AA中存在無限經常次執行的動作。
    (k0. jk. Act(sj)Aϕ)k0. jk. αjA(\forall k \geq 0. \ \exists j \geq k. \ Act(s_j) \cap A \neq \phi) \Longrightarrow \forall k \geq 0. \ \exists j \geq k. \ \alpha_j \in A
    右邊是不變的。整體上表示,對trace中的狀態序列的任一位置kk,若總能在其後找到一個位置jj,使得狀態sjs_j的所有直接動作Act(sj)Act(s_j)中存在AA中的動作,也即Act(sj)AϕAct(s_j) \cap A \neq \phi(至此即表示無限經常次使能),那麼AA中一定存在無限經常次執行的動作(\Rightarrow右邊)。

  3. Weakly AfairWeakly \ A-fair:若從某位置開始,不斷有AA中的動作使能,那麼AA中存在無限經常次執行的動作。
    (k0. jk. Act(sj)Aϕ)k0. jk. αjA(\exists k \geq 0. \ \forall j \geq k. \ Act(s_j) \cap A \neq \phi) \Longrightarrow \forall k \geq 0. \ \exists j \geq k. \ \alpha_j \in A
    右邊是不變的。整體上表示,從trace中的狀態序列的某一位置kk開始,若其後的所有位置jj,對應的狀態sjs_j的所有直接動作Act(sj)Act(s_j)中總是存在AA中的動作,也即Act(sj)AϕAct(s_j) \cap A \neq \phi(至此即表示從某一位置之後不斷使能),那麼AA中一定存在無限經常次執行的動作(\Rightarrow右邊)。


在下圖標註的執行中,取A={enter1,enter2}A=\{enter_1,enter_2\},可見AA中的動作enter1enter_1enter2enter_2都無限經常次使能,最終enter2Aenter2\in A無限經常次執行了,所以這個trace是滿足strongly Afairstrongly \ A-fair的。

這裏留下一點個人猜想:雖然聽起來有點違背事實,可以證明在任意的動作集合AActA \in Act下無條件的公平性和強公平性是等價的。
因爲如果AA中某些動作無限經常次執行,那麼這些動作一定無限經常次使能。所以可以從無條件公平推出強公平。這個還能說明,不存在僅有enter1無限經常次使能而導致enter2無限經常次執行的情況,因爲無限經常次執行的動作一定也在無限經常次使能裏面。

在這裏插入圖片描述


在下圖標註的執行中,取A={req2}A=\{req_2\},可見AA中的動作req2req_2k=0k=0之後就不斷使能,但AA中沒有無限經常次執行的動作,所以這個trace不滿足weakly Afairweakly \ A-fair
在這裏插入圖片描述
注意,【不斷使能】是接下來每個狀態都要使能,比【無限經常次使能】更苛刻。

但還需注意,因爲定義弱公平性時先說明了存在一個起始點kk,所以強公平性和弱公平性無法比較哪個更嚴格。倘若指定了弱公平性裏的起始點k=0k=0,這時就可以比較了,它要比強公平性的條件更嚴格。這在字面上好似很矛盾,實際上沒有什麼問題,可以類比着看,無條件公平性中的條件truetrue是最寬鬆的條件。

2.11 公平性對path的過度去除和去除不足

公平性的引入就是爲了去除不合理的path,但是當去除得太多(約束過強)或者去除得太少(約束過弱)時,驗證結果導出的true和false和真實的合理的模型的true和false有一定的不確定關係,實際上這裏也就是一個很普通的集合問題。

  • 約束過強時,去除的path太多,實際驗證使用的path是合理path的子集:
    在這裏插入圖片描述
    所以當驗證出錯時,能說明合理path對應的模型是有問題的。但驗證通過時卻不能說明合理path對應的模型沒有問題。

  • 約束過弱時,去除的path太少,實際驗證使用的path是合理path的超集:
    在這裏插入圖片描述
    所以當驗證通過時,能說明合理path對應的模型是正確的。但驗證出錯時卻不能說明合理path對應的模型有錯誤。

2.12 公平性假設(fairness assumptions)

公平性假設F\mathcal{F}將無條件公平、強公平性、弱公平性分屬成三個集合,表示爲三元組:
F=(Fucond,Fstrong,Fweak)\mathcal{F=(F_{ucond},F_{strong},F_{weak})}

其中的每個元素Fxxx\mathcal{F_{xxx}}是該類公平性屬性的集合。如Fucond={fucond1,fucond2,...}\mathcal{F_{ucond}=\{f_{ucond_1},f_{ucond_2},...\}},對之中的每個fucondiActf_{ucond_i} \subseteq Act。類似地,可知Fucond,Fstrong,Fweak2AP\mathcal{F_{ucond},F_{strong},F_{weak}}\subseteq 2^{AP}

稱一個執行片段ρ\rho滿足公平性假設F\mathcal{F},也即稱它是Ffair\mathcal{F}-fair的,意爲:

  • 對所有AFucondA \in \mathcal{F_{ucond}},執行片段ρ\rhounconditionally Afairunconditionally \ A-fair
  • 對所有AFstrongA \in \mathcal{F_{strong}},執行片段ρ\rhostrongly Afairstrongly \ A-fair
  • 對所有AFweakA \in \mathcal{F_{weak}},執行片段ρ\rhoweakly Afairweakly \ A-fair

例如,取2.10中第一個例子的執行:
在這裏插入圖片描述
F=(ϕ,{{enter1,enter2}},ϕ)\mathcal{F=(\phi,\{\{enter_1,enter_2\}\},\phi)},也就是說沒有Fucond\mathcal{F_{ucond}}Fweak\mathcal{F_{weak}},而且Fstrong\mathcal{F_{strong}}裏也只有一個公平性性質fstrong1={enter1,enter2}f_{strong_1}=\{enter_1,enter_2\},這個公平性假設和2.10第一個例子給出的強公平性性質是完全一樣的。所以圖上的執行是滿足這個公平性性質F\mathcal{F}的。


又如,還是上面這個執行,但是將上面的例子Fstrong\mathcal{F_{strong}}裏唯一的公平性性質裏的動作拿出來,拆成兩個,得到:
F=(ϕ,{{enter1},{enter2}},ϕ)\mathcal{F'=(\phi,\{\{enter_1\},\{enter_2\}\},\phi)}

顯然,這個執行對fstrong2={enter2}f_{strong_2}=\{enter_2\}是滿足強公平性的,但是對fstrong1={enter1}f_{strong_1}=\{enter_1\}是不滿足的,所以對整個公平性性質F\mathcal{F'}也是不滿足的。


又如,取2.10中第二個例子的執行:
在這裏插入圖片描述
對上個例子的F\mathcal{F'}加入兩個弱公平性屬性:
F=(ϕ,{{enter1},{enter2}},{{req1},{req2}})\mathcal{F''=(\phi,\{\{enter_1\},\{enter_2\}\},\{\{req_1\},\{req_2\}\})}

考察上圖中的執行是否滿足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\}是滿足的,因爲對於其中的全部動作即僅req1req_1而言,在狀態序列上找不到一個位置kk使得在這之後的所有狀態都有req1req_1不斷使能(所以也不用看有沒有無限經常次執行了)
  • fweak2={req2}f_{weak_2}=\{req_2\}是不滿足的,見2.10的第二個例子。

綜上,上圖中的執行不滿足公平性假設F\mathcal{F''}

2.13 TS被公平性假設F\mathcal{F}約束後滿足LT性質P

將公平性整合爲公平性假設後,拿整個公平性假設來作爲性質約束模型,以去除模型中不切實際的那些trace。前面說的都是執行片段ρ\rho滿足公平性假設F\mathcal{F},這裏要將其拓展到path π\pi,再拓展到trace σ\sigma上。


稱形如s0s1...s_0 \to s_1...Ffair\mathcal{F}-fair的,僅當存在與之對應位置狀態相同的執行序列s0α0s1α1...s_0\xrightarrow[]{\alpha_0}s_1\xrightarrow[]{\alpha_1}...

FairPathsF(s)FairPaths_{\mathcal{F}}(s)爲從狀態ss出發的所有Ffair\mathcal{F}-fair的path的集合。

FairPathsF(TS)FairPaths_{\mathcal{F}}(TS)sIFairPathsF(s)\bigcup_{s \in I} FairPaths_{\mathcal{F}}(s),即從所有初始狀態出發的所有Ffair\mathcal{F}-fair的path的集合。


Ffair\mathcal{F}-fair的path π\pi的對應trace,即σ=trace(π)\sigma=trace(\pi)也是Ffair\mathcal{F}-fair的。

直接對上面的FairPathsFairPaths取trace,得到從某狀態出發的所有Ffair\mathcal{F}-fair的trace,以及整個TS的Ffair\mathcal{F}-fair的trace:
FairTracesF(s)=trace(FairPathsF(s))FairTracesF(TS)=trace(FairPathsF(TS)) \begin{aligned} FairTraces_{\mathcal{F}}(s)&=trace(FairPaths_{\mathcal{F}}(s)) \\ FairTraces_{\mathcal{F}}(TS)&=trace(FairPaths_{\mathcal{F}}(TS)) \end{aligned}


前面學了,說一個TS滿足LT性質P,即TSPTS \models P,當且僅當其trace集合是PP的子集,即Traces(TS)PTraces(TS)\subseteq P

引入公平性假設後,稱TS被公平性假設F\mathcal{F}約束後滿足LT性質P,只需考慮TS中的那些被公平性假設約束後的trace集合是P的子集即可,記爲:
TSFP   iff   FairTracesF(TS)PTS \models_{\mathcal{F}} P \ \ \ iff \ \ \ FairTraces_{\mathcal{F}}(TS) \subseteq P

例如,對本篇全文采用的互斥信號量的例子(見2開頭),在2.12中考察了三個公平性假設。若針對這個例子,給出一個LT性質【每個進程都能無限經常次進入臨界區】記爲P,用2.12中的F\mathcal{F'}約束是不滿足P的,即TSFPTS \nvDash_{\mathcal{F'}}P,但是用F\mathcal{F''}約束後就是滿足P的了,即TSFPTS \vDash_{\mathcal{F''}}P


因爲公平性假設F\mathcal{F}的約束是在無限trace上的,而安全性是在有限trace上的,所以一個TS用公平性約束與否不會影響其是否滿足某個安全性性質:
TSPsafe   iff   TSFPsafeTS \vDash P_{safe} \ \ \ iff \ \ \ TS \vDash_{\mathcal{F}} P_{safe}

相對地,活性是在無限trace上的,一個TS用公平性約束,無法保證約束後的TS對某活性性質的滿足性仍保持。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章