本文已参与「新人创作礼」活动,一起开启掘金创作之路。
定义
- Channel System(通道系统,简称CS)的状态有:l1,...,ln,η,ξ
- η表示跟踪变量的当前值
- ξ表示记录各种通道的当前内容
- li∈Loc0,i表示初始条件,变量η必须满足初始条件g0,i
- 如果初始通道为空,则表示为ξ0(c)=ε
- 公式定义:
- 通道系统CS=∣PG1∣...∣PGn∣是一个在通道和变量(Chan,Var)上基于PGi=(Loci,Acti,Effecti,↪i,Loc0,i,g0,i)的系统,其中,0<i≤n
- CS的TS表示为一个元组:TS(CS)=(S,Act,→,I,AP,L)
- S=(Loc1×...×Locn)×Eval(Var)×Eval(Chan)
- Act=⊎0<i≤nActi ⊎ τ
- I={⟨l1,l2,...,ln,η,ξ0⟩∣∀0<i≤n(li∈Loc0,i∧η)⊨g0,i}
- AP=⊎0<i≤nLoci⊎Cond(Var)
- L(⟨l1,l2,...,ln,η,ξ⟩)={l1,..,ln}∪g∈Cond(Var)∣η⊨g
- →表示进行转移,总共有三种转移情况:
- 对于Interleaving(交错)的情况,当α∈Acti时,表示每一个li进行各自的转移
⟨l1,l2,...,li,...,ln,η,ξ⟩→α⟨l1,l2,...,li′,...,ln,η′,ξ′⟩l1g:α1l1′ ∧ η⊨g
其中η′=Effect(α,η)
- 在异步通信中,cap(c)>0,(c∈Chan)
- 沿通道c接收一个值,并将其分配给变量x:
⟨l1,l2,...,li,...,ln,η,ξ⟩→τ⟨l1,l2,...,li′,...,ln,η′,ξ′⟩lig:c?xli′∧η⊨len(ξ(c))=k>0∧ξ(c)=v1...vk
其中η′=η[x:=v1] 且 ξ′=ξ[c:=v2...vk]
- 信道c上传输值v,且v∈dom(C):
⟨l1,l2,...,li,...,ln,η,ξ⟩→τ⟨l1,l2,...,li′,...,ln,η,ξ′⟩lig:c!vli′∧η⊨len(ξ(c))=k<cap(c)∧ξ(c)=v1...vk
其中ξ′=ξ[c:=v1v2...vkv]
> len(ξ(c))=k表示信道内消息的数量,如果k>0表示通道内有消息
- 在同步通信中,cap(c)=0,(c∈Chan)
⟨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]
应用:NanoPromela
- 介绍:NanoPromela是Promela语言的核心,用于SPIN工具进行模型检测,这种语言支持共享变量间的通信,支持同步或异步(缓冲区输入输出通道)进行消息传递,形式化语义可以通过通道系统(CS)提供,通道系统可以展开为转移系统(TS)。语言不指定使用动作名称,而是指定动作的效果。
- 简单的语法介绍:
- skip表示跳转语句
- atomic表示原子赋值
- do表示循环语句
- {}表示括号内所有变量赋值语句执行一遍
- 范例:

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

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

同步并行(Synchronous Parallelism)
- 解释:表示同时往前走,比如同步机的各项操作必须同步进行
- 公式定义:
- 两个结构相同的TS:TSi=(Si,Act,→i,Ii,APi,Li),i=1,2
- TSi具有相同动作集Act,Act×Act→Act。如果α给S1进行变换,β给S2进行变换,那么α∗β表示在一次Act中同时给S1和S2变换
- TS1⊗TS1=(S1×S2,Act,→,I1×I2,AP1∪AP2,L)

- L(⟨S1,S2⟩)=L1(S1)∪L2(S2)
- 例题一:
状态爆炸问题(the State-Space Explosion Problem)
- 原因:每一个状态变量都有一定的取值范围,如果状态变量多了,状态变量之间的组合会更多,由此导致无法在有限的时间内求出预期结果
- 用PG表示为:
∣Loc∣⋅∏x∈Var∣dom(x)∣⋅
- 用CS表示为:
∏x∈Varn(∣Loc∣⋅∏x∈Var∣dom(x)∣)⋅∏c∈Chan∣dom(x)∣cp(c)