TS是一種常用的描述系統行爲的模型,用結點表示狀態,邊表示轉移關係,和KS的主要區別是狀態轉移是需要動作支持的,不同的動作往往對應着不同的狀態轉移。
1 基本概念
1.1 狀態(State)
狀態是在某時刻系統所具有的特性和行爲。和KS一樣用原子命題集合表示狀態,例如{a=2,b>3}。
- 對交通燈而言,燈的顏色就是狀態。
- 對順序程序而言,變量的當前取值以及程序計數器的位置就是狀態。
- 對同步硬件電路而言,輸入的若干比特以及寄存器的值就是狀態。
1.2 轉移(Transition)
轉移是從一個狀態到其它狀態的演變。
- 對交通燈而言,從一個顏色變成其它顏色即是它的轉移。
- 對順序程序而言,語句的執行就是轉移。
- 對同步硬件電路而言,對於一組新的輸入,寄存器內的值和輸出位的改變即是轉移。單一動作用希臘字母表示。
1.3 動作(Action)
動作這個概念一般用於通信方面的建模,不同進程之間需要進行消息傳遞,這時候會用到動作。
2 數學表示
2.1 定義
上節課學習的KS定義爲四元組,而TS定義爲六元組:
TS=(S,Act,→,I,AP,L)
這之中:
- S是狀態集合
- Act是動作集合
- →⊆S×Act×S是狀態-動作-狀態的轉移關係集合
- I⊆S是初始狀態集合
- AP是原子命題集合
- L:S→2AP是標籤函數
如果狀態集S、動作集Act、原子命題AP都是有限的,那麼稱這個TS是有限的。
2.2 基於動作的轉移關係
從狀態s經動作α轉移到狀態s′記爲s⟶αs′,注意:
- 狀態s的下一狀態是非確定的(nondeterministically)
- 動作α讓s的下一狀態是s′這件事確定下來
- 當初始狀態集包含超過1個狀態時,初始狀態也是非確定的
- 動作是爲通信建模而引入的機制,其它時候可以忽略動作
2.3 標籤函數
將狀態送入標籤,返回原子命題集合,即L(s)∈2AP,注意:
- 狀態s滿足命題邏輯公式Φ,當且僅當L(s)使此公式爲真。即s⊨Φ iff L(s)=Φ
- 原子命題集合AP應當選擇感興趣(即此模型需要考慮)的特徵
注意,L(s)∈2AP即是L(s)⊆AP,課件上用的是等式左邊的表述,這裏也保留了下來,實際就按右邊理解即可。
3 可滿足性關係⊨
對原子命題集合AP的定值(真值指派,此處可以理解成對變量的賦值影響相關原子命題的真值,例如設置a=2那麼命題a<0的真值爲假,將所有的命題計算得真假即是對整個合取式的真值指派)是將其映射到0或1上,即μ:AP→{0,1},記Eval(AP)是AP內命題的全部的真值指派方式組成的集合。可滿足關係⊨是一個二元關係(μ,ϕ),它指示的是在μ這個定值方式下,命題邏輯公式ϕ的計算結果爲真。顯然有:
- μ⊨true
- μ⊨a iff μ(a)=1
- μ⊨¬ϕ iff μ⊨ϕ
- μ⊨ϕ∧ψ iff μ⊨ϕ∧μ⊨ψ
4 非確定性(nondeterministic)
4.1 應用
- 通過interleaving(兩進程交替執行) 對獨立活動的並行執行進行建模。
- 對兩個進程訪問同一共享資源而出現的複雜狀況建模。
- 用於抽象目的和underspecification。
- 對未知或不可預測環境下的接口建模。
4.2 例子:飲料機
- 狀態集合S={pay,select,soda,beer}
- 初始狀態集合I={pay}
- 動作集合Act={insert_coin,get_soda,get_beer,τ}
這是一個非確定的系統,因爲在投入硬幣後,既可以選擇提供啤酒,也可以選擇提供蘇打水。
注意,當表示內部活動或者不相關活動時,使用一個特殊符號τ。
- 原子命題是要考慮的性質:
AP={paid,drink}
- 標籤函數作用在狀態上,得到的是原子命題的子集:
L(pay)=∅L(select)={paid}L(soda)=L(beer)={paid,drink}
可以理解爲,系統中只有兩個要考慮的量paid和drink並且只能取值真和假。一開始既沒有付款也沒有喝飲料,所以對pay取標籤函數得到的是空集;在投入硬幣進入select狀態後,因爲已經付款了,所以取標籤得到的是{paid};在出了飲料之後,即認爲同時也可以喝了,所以取標籤得到的是{paid,drink}。
5 後繼和前任
5.1 直接後繼
對TS=(S,Act,→,I,AP,L)中的s∈S以及α∈Act,狀態s對動作α的直接後繼定義爲:
Post(s,α)={s′∈S∣s⟶αs′}
即s經過α所能到達的狀態s′的集合,記作α−successors。
狀態s的直接後繼(不說關於某動作)定義爲:
Post(s)=α∈Act⋃Post(s,α)
即所有經過任一動作α能達到的狀態的集合。
5.2 直接前任
對TS=(S,Act,→,I,AP,L)中的s∈S以及α∈Act,狀態s對動作α的直接前任定義爲:
Pre(s,α)={s′∈S∣s′⟶αs}
即經過α能到達狀態s的若干前置狀態s′的集合,記作α−predeccessors。
狀態s的直接前任(不說關於某動作)定義爲:
Pre(s)=α∈Act⋃Pre(s,α)
即所有由任一動作α而來此狀態的前置狀態的集合。
5.3 用狀態集合擴展直接後繼和直接前任
提供一個狀態集合C⊆S,可以在其上定義直接後繼或直接前任,實際上就是對所有其內的狀態s∈C求直接後繼或直接前任:
Post(C,α)=s∈C⋃Post(s,α),Post(c)=s∈C⋃Post(s)Pre(C,α)=s∈C⋃Pre(s,α),Pre(c)=s∈C⋃Pre(s)
5.4 TS的終止狀態
稱狀態s是TS的終止狀態,當且僅當它沒有後繼即Post(s)=∅。
對順序程序而言,終止狀態標誌着程序運行結束。
對並行程序而言,往往不希望看到終止狀態。
6 確定性的TS
談及TS的確定性,一般可以分爲以下兩種類型。
6.1 關於action的確定TS
對所有狀態s和動作α,如有∣I∣≤1並且∣Post(s,α)∣≤1,即任意狀態經任意動作最多跳轉到1個狀態去,此時稱這個TS是action−deterministic的。
6.2 關於AP的確定TS
對所有狀態s和AP的子集A∈2AP(其實就是A⊆AP),如有∣I∣≤1並且∣Post(s)∩{s′∈S∣L(s′)=A}∣≤1,即從某一狀態出發的直接後繼,其Label函數的計算結果一定是不一樣的,此時稱這個TS是AP−deterministic的。
7 執行片段與執行
7.1 有限執行片段
TS的有限執行片段定義爲:
ϱ=s0α1s1α2...αnsn
其中對所有的0≤i<n,有si⟶αi+1si+1成立。其中n≥0是有限執行片段的長度。
7.2 無限執行片段
TS的無限執行片段定義爲:
ρ=s0α1s1α2s2α3...
其中對所有的0≤i,有si⟶αi+1si+1成立。
7.3 最大/初始的執行片段
一個最大(maximal)執行片段是一個以終止狀態結束的有限片段,或是一個無限執行片段。
當執行片段從初始狀態開始時,稱其爲初始(initial)的片段。
7.4 執行
TS的執行是指一個初始的、最大的執行片段。
7.5 可達狀態
狀態s∈S是可達的,意爲存在這樣的初始、有限的執行片段:
s0⟶α1s1⟶α2...⟶αn(sn=s)
記Reach(TS)爲TS的所有可達狀態。