【系统分析与验证笔记】Channel System转移为Transition System

定义

  • 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} liLoc0,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<in
    • 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<inActi  τ
      • 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,η,ξ00<in(liLoc0,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<inLociCond(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}gCond(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,(cChan)
          • 沿通道 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) vdom(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 a p ( c ) = 0 , ( c ∈ C h a n ) cap(c)=0,(c \in Chan) cap(c)=0(cChan)

          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]

应用: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::=skipx:=exprc?xc!exprstmt1;stmt2atomicassignmentsif::g1stmt1...::gnstmtn fido::g1stmt1...::gnstmtn 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::trueodskip;atomicb1:=true;x:=2;if::(x=1)¬b2crit1:=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::trueodskip;iffi::nsoda>0nsoda:=nsoda1::nbeer>0nbeer:=nbeer1::nsoda=nbeer=0skip::trueatomicnbeer:=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×ActAct。如果 α \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) TS1TS1=(S1×S2,Act,,I1×I2,AP1AP2,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,S2S1αS1S2β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 LocxVardom(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)} xVarn(LocxVardom(x))cChandom(x)cp(c)
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

print_Hyon

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

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

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

打赏作者

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

抵扣说明:

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

余额充值