定义
-
C
h
a
n
n
e
l
S
y
s
t
e
m
(
Channel \ System(
Channel System(通道系统,简称
C
S
)
CS)
CS)的状态有:
l
1
,
.
.
.
,
l
n
,
η
,
ξ
l_1, . . . , l_n, \eta , \xi
l1,...,ln,η,ξ
- η \eta η表示跟踪变量的当前值
- ξ \xi ξ表示记录各种通道的当前内容
- l i ∈ L o c 0 , i l_i \in Loc_{0,i} li∈Loc0,i表示初始条件,变量 η \eta η必须满足初始条件 g 0 , i g_{0,i} g0,i
- 如果初始通道为空,则表示为 ξ 0 ( c ) = ε \xi_0(c) = \varepsilon ξ0(c)=ε
- 公式定义:
- 通道系统 C S = ∣ P G 1 ∣ . . . ∣ P G n ∣ CS = |PG_1|...|PG_n| CS=∣PG1∣...∣PGn∣是一个在通道和变量( C h a n , V a r ) Chan,Var) Chan,Var)上基于 P G i = ( L o c i , A c t i , E f f e c t i , ↪ i , L o c 0 , i , g 0 , i ) PG_i=(Loc_i,Act_i,Effect_i,\hookrightarrow_i,Loc_{0,i},g_{0,i} ) PGi=(Loci,Acti,Effecti,↪i,Loc0,i,g0,i)的系统,其中, 0 < i ≤ n 0 < i \leq n 0<i≤n
-
C
S
CS
CS的
T
S
TS
TS表示为一个元组:
T
S
(
C
S
)
=
(
S
,
A
c
t
,
→
,
I
,
A
P
,
L
)
TS(CS)=(S,Act,\to,I,AP,L)
TS(CS)=(S,Act,→,I,AP,L)
- S = ( L o c 1 × . . . × L o c n ) × E v a l ( V a r ) × E v a l ( C h a n ) S = (Loc_1 \times ... \times Loc_n) \times Eval(Var) \times Eval(Chan) S=(Loc1×...×Locn)×Eval(Var)×Eval(Chan)
- A c t = ⊎ 0 < i ≤ n A c t i ⊎ τ Act=\uplus_{0<i \leq n}Act_{i} \ \uplus \ \tau Act=⊎0<i≤nActi ⊎ τ
- I = { ⟨ l 1 , l 2 , . . . , l n , η , ξ 0 ⟩ ∣ ∀ 0 < i ≤ n ( l i ∈ L o c 0 , i ∧ η ) ⊨ g 0 , i } I = \begin{Bmatrix} \left \langle l_1,l_2,...,l_n,\eta,\xi_0 \right \rangle | \forall 0<i \leq n(l_i \in Loc_{0,i} \wedge \eta )\models g_{0,i} \end{Bmatrix} I={⟨l1,l2,...,ln,η,ξ0⟩∣∀0<i≤n(li∈Loc0,i∧η)⊨g0,i}
- A P = ⊎ 0 < i ≤ n L o c i ⊎ C o n d ( V a r ) AP=\uplus_{0<i \leq n}Loc_i \uplus Cond(Var) AP=⊎0<i≤nLoci⊎Cond(Var)
- L ( ⟨ l 1 , l 2 , . . . , l n , η , ξ ⟩ ) = { l 1 , . . , l n } ∪ g ∈ C o n d ( V a r ) ∣ η ⊨ g L( \left \langle l_1,l_2,...,l_n,\eta,\xi \right \rangle )=\{l_1,..,l_n \} \cup {g \in Cond(Var)|\eta \models g} L(⟨l1,l2,...,ln,η,ξ⟩)={l1,..,ln}∪g∈Cond(Var)∣η⊨g
-
→
\to
→表示进行转移,总共有三种转移情况:
- 对于
I
n
t
e
r
l
e
a
v
i
n
g
Interleaving
Interleaving(交错)的情况,当
α
∈
A
c
t
i
\alpha \in Act_i
α∈Acti时,表示每一个
l
i
l_i
li进行各自的转移
l 1 ↪ g : α 1 l 1 ′ ∧ η ⊨ g ⟨ l 1 , l 2 , . . . , l i , . . . , l n , η , ξ ⟩ → α ⟨ l 1 , l 2 , . . . , l i ′ , . . . , l n , η ′ , ξ ′ ⟩ \tfrac {l_{1} \xhookrightarrow[]{g : \alpha }_{1}{l_{1}'} \ \wedge \ \eta \models g} {\langle l_{1},l_{2},...,l_i,...,l_n,\eta,\xi \rangle \overset{\alpha}{\rightarrow} \langle l_{1},l_{2},...,{l_i}',...,l_n,{\eta}',\xi' \rangle } ⟨l1,l2,...,li,...,ln,η,ξ⟩→α⟨l1,l2,...,li′,...,ln,η′,ξ′⟩l1g:α 1l1′ ∧ η⊨g
其中 η ′ = E f f e c t ( α , η ) {\eta}'=Effect(\alpha,\eta) η′=Effect(α,η) - 在异步通信中,
c
a
p
(
c
)
>
0
,
(
c
∈
C
h
a
n
)
cap(c)>0,(c \in Chan)
cap(c)>0,(c∈Chan)
- 沿通道
c
c
c接收一个值,并将其分配给变量
x
x
x:
l i ↪ g : c ? x l i ′ ∧ η ⊨ l e n ( ξ ( c ) ) = k > 0 ∧ ξ ( c ) = v 1 . . . v k ⟨ l 1 , l 2 , . . . , l i , . . . , l n , η , ξ ⟩ → τ ⟨ l 1 , l 2 , . . . , l i ′ , . . . , l n , η ′ , ξ ′ ⟩ \tfrac {l_{i} \xhookrightarrow[]{g : c?x }{l_i}' \wedge \eta \models len(\xi(c))=k>0 \wedge \xi(c)=v_1...v_k} {\langle l_{1},l_{2},...,l_i,...,l_n,\eta,\xi \rangle \overset{\tau}{\rightarrow} \langle l_{1},l_{2},...,{l_i}',...,l_n,{\eta}',\xi' \rangle } ⟨l1,l2,...,li,...,ln,η,ξ⟩→τ⟨l1,l2,...,li′,...,ln,η′,ξ′⟩lig:c?x li′∧η⊨len(ξ(c))=k>0∧ξ(c)=v1...vk
其中 η ′ = η [ x : = v 1 ] {\eta}′ = \eta[x := v_1] η′=η[x:=v1] 且 ξ ′ = ξ [ c : = v 2 . . . v k ] {\xi}′ = \xi [c := v_2 ...v_k] ξ′=ξ[c:=v2...vk] - 信道
c
c
c上传输值
v
v
v,且
v
∈
d
o
m
(
C
)
v\in dom(C)
v∈dom(C):
l i ↪ g : c ! v l i ′ ∧ η ⊨ l e n ( ξ ( c ) ) = k < c a p ( c ) ∧ ξ ( c ) = v 1 . . . v k ⟨ l 1 , l 2 , . . . , l i , . . . , l n , η , ξ ⟩ → τ ⟨ l 1 , l 2 , . . . , l i ′ , . . . , l n , η , ξ ′ ⟩ \tfrac {l_{i} \xhookrightarrow[]{g : c!v }{l_i}' \wedge \eta \models len(\xi(c))=k<cap(c) \wedge \xi(c)=v_1...v_k} {\langle l_{1},l_{2},...,l_i,...,l_n,\eta,\xi \rangle \overset{\tau}{\rightarrow} \langle l_{1},l_{2},...,{l_i}',...,l_n,\eta,\xi' \rangle } ⟨l1,l2,...,li,...,ln,η,ξ⟩→τ⟨l1,l2,...,li′,...,ln,η,ξ′⟩lig:c!v li′∧η⊨len(ξ(c))=k<cap(c)∧ξ(c)=v1...vk
其中 ξ ′ = ξ [ c : = v 1 v 2 . . . v k v ] {\xi}′ = \xi [c := v_1 v_2 ...v_k v] ξ′=ξ[c:=v1v2...vkv]
l e n ( ξ ( c ) ) = k len(\xi(c))=k len(ξ(c))=k表示信道内消息的数量,如果 k > 0 k>0 k>0表示通道内有消息
- 沿通道
c
c
c接收一个值,并将其分配给变量
x
x
x:
- 在同步通信中,
c
a
p
(
c
)
=
0
,
(
c
∈
C
h
a
n
)
cap(c)=0,(c \in Chan)
cap(c)=0,(c∈Chan)
l i ↪ g 1 : c ? x l i ′ ∧ η ⊨ g 1 ∧ η ⊨ g 2 ∧ l j ↪ g 2 : c ! v l j ′ ∧ i ≠ j ⟨ l 1 , l 2 , . . . , l i , . . . , l j , . . . , l n , η , ξ ⟩ → τ ⟨ l 1 , l 2 , . . . , l i ′ , . . . , l j ′ , . . . , l n , η ′ , ξ ⟩ \tfrac {l_{i} \ \xhookrightarrow[]{g_1 : c?x } \ {l_i}' \ \wedge \ \eta \ \models \ g_1 \ \wedge \ \eta \ \models \ g_2 \ \wedge \ l_j \ \xhookrightarrow[]{g_2 : c!v } \ {l_j}' \ \wedge \ i \ \neq \ j} {\langle l_{1},l_{2},...,l_i,...,l_j,...,l_n,\eta,\xi \rangle \overset{\tau}{\rightarrow} \langle l_{1},l_{2},...,{l_i}',...,{l_j}',...,l_n,\eta',\xi \rangle } ⟨l1,l2,...,li,...,lj,...,ln,η,ξ⟩→τ⟨l1,l2,...,li′,...,lj′,...,ln,η′,ξ⟩li g1:c?x li′ ∧ η ⊨ g1 ∧ η ⊨ g2 ∧ lj g2:c!v lj′ ∧ i = j
其中 η ′ = η [ x : = v ] {\eta}′ = \eta[x := v] η′=η[x:=v]
- 对于
I
n
t
e
r
l
e
a
v
i
n
g
Interleaving
Interleaving(交错)的情况,当
α
∈
A
c
t
i
\alpha \in Act_i
α∈Acti时,表示每一个
l
i
l_i
li进行各自的转移
应用:NanoPromela
- 介绍:NanoPromela是Promela语言的核心,用于SPIN工具进行模型检测,这种语言支持共享变量间的通信,支持同步或异步(缓冲区输入输出通道)进行消息传递,形式化语义可以通过通道系统( C S CS CS)提供,通道系统可以展开为转移系统( T S TS TS)。语言不指定使用动作名称,而是指定动作的效果。
- 简单的语法介绍:
- s k i p skip skip表示跳转语句
- a t o m i c atomic atomic表示原子赋值
- d o do do表示循环语句
- { } \{\} {}表示括号内所有变量赋值语句执行一遍
- 范例:
s t m t : : = s k i p ∣ x : = e x p r ∣ c ? x ∣ c ! e x p r ∣ s t m t 1 ; s t m t 2 ∣ a t o m i c a s s i g n m e n t s ∣ i f : : g 1 ⇒ s t m t 1 . . . : : g n ⇒ s t m t n f i ∣ d o : : g 1 ⇒ s t m t 1 . . . : : g n ⇒ s t m t n d o \begin{aligned} stmt ::= & skip | x := expr | c?x | c!expr | \\ &stmt_1 ; stmt_2 | atomic{assignments} |\\ &\mathbf{if} :: g_1 ⇒ stmt_1 ... :: g_n ⇒ stmt_n \ \mathbf{fi} |\\ &\mathbf{do }:: g_1 ⇒ stmt_1 ... :: g_n ⇒ stmt_n \ \mathbf{do}\\ \end{aligned} stmt::=skip∣x:=expr∣c?x∣c!expr∣stmt1;stmt2∣atomicassignments∣if::g1⇒stmt1...::gn⇒stmtn fi∣do::g1⇒stmt1...::gn⇒stmtn do - NanoPromela实现彼得森互斥算法(peterson’s mutual exclusion algorithm):
d o : : t r u e ⇒ s k i p ; a t o m i c b 1 : = t r u e ; x : = 2 ; i f : : ( x = 1 ) ∨ ¬ b 2 ⇒ c r i t 1 : = t r u e f i a t o m i c c r i t 1 : = f a l s e ; b 1 : = f a l s e o d \begin{aligned} &\mathbf{do}:: true ⇒ && skip; \\ &&&atomic{b_1 := true; x := 2}; \\ &&&\mathbf{if }:: (x = 1) ∨ ¬b_2 ⇒ crit_1 := true \mathbf{fi}\\ &&&atomic{crit_1 := false; b_1 := false}\\ &\mathbf{od} \end{aligned} do::true⇒odskip;atomicb1:=true;x:=2;if::(x=1)∨¬b2⇒crit1:=truefiatomiccrit1:=false;b1:=false - NanoPromela实现自动售货机(peterson’s mutual exclusion algorithm):
d o : : t r u e ⇒ s k i p ; i f : : n s o d a > 0 ⇒ n s o d a : = n s o d a − 1 : : n b e e r > 0 ⇒ n b e e r : = n b e e r − 1 : : n s o d a = n b e e r = 0 ⇒ s k i p f i : : t r u e ⇒ a t o m i c n b e e r : = m a x ; n s o d a : = m a x o d \begin{aligned} &\mathbf{do}:: true ⇒ && skip; \\ &&&\mathbf{if } && :: nsoda > 0 ⇒ nsoda := nsoda − 1\\ &&&&&:: nbeer > 0 ⇒ nbeer := nbeer − 1\\ &&&&&:: nsoda = nbeer = 0 ⇒ skip\\ &&&\mathbf{fi } && :: true ⇒ atomic{nbeer := max; nsoda := max}\\ &\mathbf{od} \end{aligned} do::true⇒odskip;iffi::nsoda>0⇒nsoda:=nsoda−1::nbeer>0⇒nbeer:=nbeer−1::nsoda=nbeer=0⇒skip::true⇒atomicnbeer:=max;nsoda:=max
同步并行(Synchronous Parallelism)
- 解释:表示同时往前走,比如同步机的各项操作必须同步进行
- 公式定义:
- 两个结构相同的 T S : T S i = ( S i , A c t , → i , I i , A P i , L i ) , i = 1 , 2 TS:TS_i = (S_i,Act,\to_i,I_i,AP_i,L_i),i=1,2 TS:TSi=(Si,Act,→i,Ii,APi,Li),i=1,2
- T S i TS_i TSi具有相同动作集 A c t Act Act, A c t × A c t → A c t Act \times Act \to Act Act×Act→Act。如果 α \alpha α给 S 1 S_1 S1进行变换, β \beta β给 S 2 S_2 S2进行变换,那么 α ∗ β \alpha * \beta α∗β表示在一次 A c t Act Act中同时给 S 1 S_1 S1和 S 2 S_2 S2变换
- T S 1 ⊗ T S 1 = ( S 1 × S 2 , A c t , → , I 1 × I 2 , A P 1 ∪ A P 2 , L ) TS_1 \otimes TS_1 = (S_1 \times S_2,Act,\to,I_1 \times I_2,AP_1 \cup AP_2,L) TS1⊗TS1=(S1×S2,Act,→,I1×I2,AP1∪AP2,L)
- S 1 → α S 1 ′ ∧ S 2 → β 2 S 2 ′ ⟨ S 1 , S 2 ⟩ → α ∗ β ⟨ S 1 ′ , S 2 ′ ⟩ \tfrac{ S_1 \overset{\alpha}{\rightarrow} S_1' \wedge S_2 \overset{\beta} {\rightarrow}_2 S_2' }{ \left \langle S_1,S_2 \right \rangle \overset{\alpha*\beta}{\rightarrow} \left \langle S_1',S_2' \right \rangle } ⟨S1,S2⟩→α∗β⟨S1′,S2′⟩S1→αS1′∧S2→β2S2′
- L ( ⟨ S 1 , S 2 ⟩ ) = L 1 ( S 1 ) ∪ L 2 ( S 2 ) L(\left \langle S_1,S_2 \right \rangle) = L_1(S_1) \cup L_2(S_2) L(⟨S1,S2⟩)=L1(S1)∪L2(S2)
- 例题一:
-
计算两条电路的同步乘积
-
答案:
首先,分别计算两条电路的 T S TS TS
将 T S 1 TS_1 TS1和 T S 2 TS_2 TS2同步并行
-
状态爆炸问题(the State-Space Explosion Problem)
- 原因:每一个状态变量都有一定的取值范围,如果状态变量多了,状态变量之间的组合会更多,由此导致无法在有限的时间内求出预期结果
- 用
P
G
PG
PG表示为:
∣ L o c ∣ ⋅ ∏ x ∈ V a r ∣ d o m ( x ) ∣ ⋅ |Loc| \cdot \prod_{x \in Var} |dom(x)| \cdot ∣Loc∣⋅x∈Var∏∣dom(x)∣⋅ - 用
C
S
CS
CS表示为:
∏ x ∈ V a r n ( ∣ L o c ∣ ⋅ ∏ x ∈ V a r ∣ d o m ( x ) ∣ ) ⋅ ∏ c ∈ C h a n ∣ d o m ( x ) ∣ c p ( c ) \prod_{x \in Var}^{n}(|Loc| \cdot \prod_{x \in Var} |dom(x)| )\cdot \prod_{c \in Chan} |dom(x)|^{cp(c)} x∈Var∏n(∣Loc∣⋅x∈Var∏∣dom(x)∣)⋅c∈Chan∏∣dom(x)∣cp(c)