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

175 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

定义

  • Channel System(Channel \ System(通道系统,简称CS)CS)的状态有:l1,...,ln,η,ξl_1, . . . , l_n, \eta , \xi
    • η\eta表示跟踪变量的当前值
    • ξ\xi表示记录各种通道的当前内容
    • liLoc0,il_i \in Loc_{0,i}表示初始条件,变量η\eta必须满足初始条件g0,ig_{0,i}
    • 如果初始通道为空,则表示为ξ0(c)=ε\xi_0(c) = \varepsilon
  • 公式定义:
    • 通道系统CS=PG1...PGnCS = |PG_1|...|PG_n|是一个在通道和变量(Chan,Var)Chan,Var)上基于PGi=(Loci,Acti,Effecti,i,Loc0,i,g0,i)PG_i=(Loc_i,Act_i,Effect_i,\hookrightarrow_i,Loc_{0,i},g_{0,i} )的系统,其中,0<in0 < i \leq n
    • CSCSTSTS表示为一个元组:TS(CS)=(S,Act,,I,AP,L)TS(CS)=(S,Act,\to,I,AP,L)
      • S=(Loc1×...×Locn)×Eval(Var)×Eval(Chan)S = (Loc_1 \times ... \times Loc_n) \times Eval(Var) \times Eval(Chan)
      • Act=0<inActi  τAct=\uplus_{0<i \leq n}Act_{i} \ \uplus \ \tau
      • I={l1,l2,...,ln,η,ξ00<in(liLoc0,iη)g0,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}
      • AP=0<inLociCond(Var)AP=\uplus_{0<i \leq n}Loc_i \uplus Cond(Var)
      • L(l1,l2,...,ln,η,ξ)={l1,..,ln}gCond(Var)ηgL( \left \langle l_1,l_2,...,l_n,\eta,\xi \right \rangle )=\{l_1,..,l_n \} \cup {g \in Cond(Var)|\eta \models g}
      • \to表示进行转移,总共有三种转移情况:
        • 对于InterleavingInterleaving(交错)的情况,当αActi\alpha \in Act_i时,表示每一个lil_i进行各自的转移

l1g:α1l1  ηgl1,l2,...,li,...,ln,η,ξαl1,l2,...,li,...,ln,η,ξ\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 }

其中η=Effect(α,η){\eta}'=Effect(\alpha,\eta) - 在异步通信中,cap(c)>0,(cChan)cap(c)>0,(c \in Chan) - 沿通道cc接收一个值,并将其分配给变量xx

lig:c?xliηlen(ξ(c))=k>0ξ(c)=v1...vkl1,l2,...,li,...,ln,η,ξτl1,l2,...,li,...,ln,η,ξ\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 }

其中η=η[x:=v1]{\eta}′ = \eta[x := v_1]ξ=ξ[c:=v2...vk]{\xi}′ = \xi [c := v_2 ...v_k] - 信道cc上传输值vv,且vdom(C)v\in dom(C)

lig:c!vliηlen(ξ(c))=k<cap(c)ξ(c)=v1...vkl1,l2,...,li,...,ln,η,ξτl1,l2,...,li,...,ln,η,ξ\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 } 其中ξ=ξ[c:=v1v2...vkv]{\xi}′ = \xi [c := v_1 v_2 ...v_k v] > len(ξ(c))=klen(\xi(c))=k表示信道内消息的数量,如果k>0k>0表示通道内有消息 - 在同步通信中,cap(c)=0(cChan)cap(c)=0,(c \in Chan)

li g1:c?x li  η  g1  η  g2  lj g2:c!v lj  i  jl1,l2,...,li,...,lj,...,ln,η,ξτl1,l2,...,li,...,lj,...,ln,η,ξ\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 } 其中η=η[x:=v]{\eta}′ = \eta[x := v]

应用:NanoPromela

  • 介绍:NanoPromela是Promela语言的核心,用于SPIN工具进行模型检测,这种语言支持共享变量间的通信,支持同步或异步(缓冲区输入输出通道)进行消息传递,形式化语义可以通过通道系统(CSCS)提供,通道系统可以展开为转移系统(TSTS)。语言不指定使用动作名称,而是指定动作的效果。
  • 简单的语法介绍:
    • skipskip表示跳转语句
    • atomicatomic表示原子赋值
    • dodo表示循环语句
    • {}\{\}表示括号内所有变量赋值语句执行一遍
  • 范例:

image.png

  • NanoPromela实现彼得森互斥算法(peterson’s mutual exclusion algorithm):

image.png

  • NanoPromela实现自动售货机(peterson’s mutual exclusion algorithm):

image.png

同步并行(Synchronous Parallelism)

  • 解释:表示同时往前走,比如同步机的各项操作必须同步进行
  • 公式定义:
    • 两个结构相同的TS:TSi=(Si,Act,i,Ii,APi,Li),i=1,2TS:TS_i = (S_i,Act,\to_i,I_i,AP_i,L_i),i=1,2
    • TSiTS_i具有相同动作集ActActAct×ActActAct \times Act \to Act。如果α\alphaS1S_1进行变换,β\betaS2S_2进行变换,那么αβ\alpha * \beta表示在一次ActAct中同时给S1S_1S2S_2变换
    • TS1TS1=(S1×S2,Act,,I1×I2,AP1AP2,L)TS_1 \otimes TS_1 = (S_1 \times S_2,Act,\to,I_1 \times I_2,AP_1 \cup AP_2,L)

image.png

  • L(S1,S2)=L1(S1)L2(S2)L(\left \langle S_1,S_2 \right \rangle) = L_1(S_1) \cup L_2(S_2)
  • 例题一:
    • 计算两条电路的同步乘积 在这里插入图片描述

    • 答案: 首先,分别计算两条电路的TSTS 在这里插入图片描述TS1TS_1TS2TS_2同步并行 在这里插入图片描述

状态爆炸问题(the State-Space Explosion Problem)

  • 原因:每一个状态变量都有一定的取值范围,如果状态变量多了,状态变量之间的组合会更多,由此导致无法在有限的时间内求出预期结果
  • PGPG表示为: LocxVardom(x)|Loc| \cdot \prod_{x \in Var} |dom(x)| \cdot
  • CSCS表示为: xVarn(LocxVardom(x))cChandom(x)cp(c)\prod_{x \in Var}^{n}(|Loc| \cdot \prod_{x \in Var} |dom(x)| )\cdot \prod_{c \in Chan} |dom(x)|^{cp(c)}