【进程代数学习笔记】3:[CSP]进程与不确定性
前面一二章所学习的进程分裂或协作的方式有:选择(P∣QP|QP∣Q):用于和环境交互,由环境(CSP里亦用进程表示)选择当前动作以决定进程接下来的分支。并发(P∣∣QP||QP∣∣Q):用于进程间的协作,或用于为进程施加影响它的环境进程。如上面所述的,一条竖线表达的选择即是确定性(deterministic)选择,确定性选择是环境能把控的。与之相对地可以引入不确定性(nondeterm...
前面一二章所学习的进程分裂或协作的方式有:
- 选择(P∣QP|QP∣Q):用于和环境交互,由环境(CSP里亦用进程表示)选择当前动作以决定进程接下来的分支。
- 并发(P∣∣QP||QP∣∣Q):用于进程间的协作,或用于为进程施加影响它的环境进程。
如上面所述的,一条竖线表达的选择即是确定性(deterministic)选择,确定性选择是环境能把控的。
与之相对地可以引入不确定性(nondeterministic)。不确定性指不仅无法控制,甚至无法被预测,这可以基于以下的考虑:
- 对环境无法充分了解(如天气的不确定)
- 刻意忽视决定选择的条件(如换零机coin的存储顺序决定出币序列)
- 量子力学中的不确定性(uncertainty principle)
总之,引入不确定性可以提高对物理系统的抽象程度。
1 不确定的或关系(Nondeterministic or)
1.1 简述
记P⊓QP \sqcap QP⊓Q是进程PPP和进程QQQ之间的不确定选择,这表示在PPP和QQQ中只选择其一,但遇到⊓\sqcap⊓符号时总是无法预测选择的是哪一个。
不确定的或关系P⊓QP \sqcap QP⊓Q实际使用场景很有限,一般用于表示在需求上只要实现PPP或QQQ其一即可。
1.2 例子
例如,由
CH5A=(in3p→out2p→out1p→CH5A)CH5B=(in3p→out1p→out2p→CH5B) CH5A=(in3p \to out2p \to out1p \to CH5A) \\ CH5B=(in3p \to out1p \to out2p \to CH5B) CH5A=(in3p→out2p→out1p→CH5A)CH5B=(in3p→out1p→out2p→CH5B)
构造的
CH5E=CH5A⊓CH5B CH5E = CH5A \sqcap CH5B CH5E=CH5A⊓CH5B
表示CH5ECH5ECH5E是从CH5ACH5ACH5A和CH5BCH5BCH5B中选择其一实现,使用时出币的序列组合不变,只是使用前并不知道实现的是哪一个。
而
CH5D=(in3p→((out2p→out1p→CH5D)⊓(out1p→out2p→CH5D))) \begin{aligned} CH5D =& (in3p \to ((out2p \to out1p \to CH5D) \\ & \sqcap (out1p \to out2p \to CH5D))) \end{aligned} CH5D=(in3p→((out2p→out1p→CH5D)⊓(out1p→out2p→CH5D)))
则表示CH5DCH5DCH5D每次出币的序列都是无法预测的,每次都会不确定地选择两种出币序列中的其一。
1.3 规则
相关规则见课本P83~84。其中值得注意的是,不确定选择不能在递归操作内部展开:
P=μ⋅X((a→X)⊓(b→X))Q=(μX⋅(a→X))⊓(μX⋅(b→X)) \begin{aligned} P &= \mu \cdot X ((a \to X) \sqcap (b \to X)) \\ Q &= (\mu X \cdot (a \to X)) \sqcap (\mu X \cdot (b \to X)) \end{aligned} PQ=μ⋅X((a→X)⊓(b→X))=(μX⋅(a→X))⊓(μX⋅(b→X))
两进程不同,因为它们的traces不同,显然traces(Q)⊆traces(P)traces(Q) \subseteq traces(P)traces(Q)⊆traces(P),仅当a=ba=ba=b时取到等号。
注意,不确定选择没有"单位元"(因为⊓\sqcap⊓是幂等的),不确定选择唯一的"零"是CHAOSCHAOSCHAOS(CHAOSCHAOSCHAOS同时也是很多算子的"零"),这在7
中给出。
2 通用选择(General choice)
2.1 简述
通用选择(P□QP \Box QP□Q)结合了确定性选择(P∣QP|QP∣Q)和不确定选择(P⊓QP\sqcap QP⊓Q)。具体是,当第一个动作相同时它是确定选择,当第一个动作不同时它是不确定选择:
(c→P)□(d→Q)=(c→P ∣ d→Q)if c≠d(c→P)□(c→Q)=(c→P)⊓(c→Q)=c→(P⊓Q) \begin{aligned} (c \to P) \Box (d \to Q) &= (c \to P \ | \ d \to Q) & if \ c \neq d \\ (c \to P) \Box (c \to Q) &= (c \to P) \sqcap (c \to Q) = c \to (P \sqcap Q) \end{aligned} (c→P)□(d→Q)(c→P)□(c→Q)=(c→P ∣ d→Q)=(c→P)⊓(c→Q)=c→(P⊓Q)if c=d
2.2 规则
因为STOPSTOPSTOP中没有开始动作,认为STOPSTOPSTOP是通用选择的单位元:
P□STOP=PP \Box STOP = PP□STOP=P
通用选择的一般描述,应对所选的首个动作分情形讨论:
(x:A→P(x))□(y:B→Q(y))=(z:(A∪B)→(if z∈(A−B) then P(z)else if z∈(B−A) then Q(z)else if z∈(A∩B) then (P(z)∩Q(z)))) \begin{aligned} (x:A \to P(x)) \Box & (y:B \to Q(y)) = \\ & (z:(A \cup B) \to \\ &(if \ z \in (A-B) \ then \ P(z) \\ & else \ if \ z \in (B-A) \ then \ Q(z) \\ & else \ if \ z \in (A \cap B) \ then \ (P(z) \cap Q(z)) \\ & )) \end{aligned} (x:A→P(x))□(y:B→Q(y))=(z:(A∪B)→(if z∈(A−B) then P(z)else if z∈(B−A) then Q(z)else if z∈(A∩B) then (P(z)∩Q(z))))
通用选择的after操作,应对所经过的trace分情形讨论:
(P□Q)/s=P/sif s∈traces(P)−traces(Q)=Q/sif s∈traces(Q)−traces(P)=(P/s)⊓(Q/s)if s∈traces(P)∩traces(Q) \begin{aligned} (P \Box Q)/s &= P/s & if \ s \in traces(P) - traces(Q) \\ & = Q/s & if \ s \in traces(Q) - traces(P) \\ &= (P/s) \sqcap(Q/s) & if \ s \in traces(P) \cap traces(Q) \end{aligned} (P□Q)/s=P/s=Q/s=(P/s)⊓(Q/s)if s∈traces(P)−traces(Q)if s∈traces(Q)−traces(P)if s∈traces(P)∩traces(Q)
3 Refusal
3.1 简述
由于使用traces无法区分不确定选择和通用选择:
traces(P□Q)=traces(P⊓Q)=traces(P)∪traces(Q)traces(P \Box Q) = traces(P \sqcap Q) = traces(P) \cup traces(Q)traces(P□Q)=traces(P⊓Q)=traces(P)∪traces(Q)
引入refusals操作,定义为与PPP并发时,使PPP在首个动作上即发生死锁的所有动作集合XXX的幂集:
2X=refusals(P)2^X=refusals(P)2X=refusals(P)
注意,引入Refusal同引入Trace一样,都可作为观测进程行为的重要手段,特别是在6
中定义存在不确定性的进程的规范时尤为重要。
3.2 规则
相关规则在课本P89~90,只记录些关键部分:
- L1:refusals(STOPA)=2Arefusals(STOP_A)=2^Arefusals(STOPA)=2A
- L3:refusals(x:B→P(x))={X∣X⊆(αP−B)}refusals(x:B \to P(x)) = \{X|X \subseteq (\alpha P-B)\}refusals(x:B→P(x))={X∣X⊆(αP−B)}
- L4:refusals(P⊓Q)=refusals(P)∪refusals(Q)refusals(P \sqcap Q) = refusals(P) \cup refusals(Q)refusals(P⊓Q)=refusals(P)∪refusals(Q)
- L5:refusals(P□Q)=refusals(P)∩refusals(Q)refusals(P \Box Q) = refusals(P) \cap refusals(Q)refusals(P□Q)=refusals(P)∩refusals(Q)
- L6:refusals(P ∣∣ Q)={X∪Y ∣ X∈refusals(P)∧Y∈refusals(Q)}refusals(P \ || \ Q) = \{X \cup Y \ | \ X \in refusals(P) \wedge Y \in refusals(Q)\}refusals(P ∣∣ Q)={X∪Y ∣ X∈refusals(P)∧Y∈refusals(Q)}
4 隐藏(Concealment)
4.1 简述
与投影(↾\upharpoonright↾)操作相对立,隐藏(∖\setminus∖)会将进程中指定集合里的动作从字母表中移除:
α(P∖C)=(αP)−C\alpha(P \setminus C) = (\alpha P) - Cα(P∖C)=(αP)−C
注意区分,进程的隐藏使用的是反斜杠(∖\setminus∖),而迹的after操作使用的是正斜杠(///)。
同样可以定义与之相对的,将进程的字母表扩展:
α(P+B)=αP∪BP+B=(P ∣∣ STOPB) 当B∩αP=ϕ \alpha (P_{+B}) = \alpha P \cup B \\ P_{+B} = (P \ || \ STOP_B) \ \ \ 当B \cap \alpha P = \phi α(P+B)=αP∪BP+B=(P ∣∣ STOPB) 当B∩αP=ϕ
扩展后的进程实际还是只执行了之前那些动作,至于字母表中新加进来的动作,仍不在执行序列中:
traces(P+B)=traces(P)traces(P_{+B}) = traces(P)traces(P+B)=traces(P)
4.2 规则
隐藏相关规则见课本P92~93,两条基本的规则如下:
- L4:STOPA∖C=STOPA−CSTOP_A \setminus C = STOP_{A-C}STOPA∖C=STOPA−C
- L8:若B∩C=ϕB \cap C = \phiB∩C=ϕ,则(x:B→P(x))∖C=(x:B→(P(x)∖C))(x:B \to P(x)) \setminus C = (x:B \to (P(x) \setminus C))(x:B→P(x))∖C=(x:B→(P(x)∖C))
- L9:若BBB是CCC的有限非空子集,则(x:B→P(x))∖C=⊓x∈B(P(x)∖C)(x:B \to P(x)) \setminus C = \sqcap_{x\in B}(P(x) \setminus C)(x:B→P(x))∖C=⊓x∈B(P(x)∖C)
这条是说对每个x∈Bx \in Bx∈B求其接下来进程在CCC上的隐藏,再合起来做不确定选择。
隐藏(∖\setminus∖)和投影(↾\upharpoonright↾)操作的关系,可从traces里得出:
traces(P∖C)={t↾(αP−C) ∣ t∈traces(P)}traces(P \setminus C) = \{t \upharpoonright (\alpha P-C) \ | \ t \in traces(P)\}traces(P∖C)={t↾(αP−C) ∣ t∈traces(P)}
5 Interleaving
5.1 简述
Interleaving(∣∣∣|||∣∣∣)描述一种最单纯的并发关系,即若干进程可以以任意次序各自推进,同一时刻只能推进一个进程的一个动作,动作之间互不影响。
如两个VMS=(coin→choc→VMS)VMS = (coin \to choc \to VMS)VMS=(coin→choc→VMS)的interleaving是:
VMS∣∣∣VMS=(coin→μX⋅(coin→choc→X∣ choc→coin→X)) \begin{aligned} VMS|||VMS = (coin \to \mu X \cdot ( & coin \to choc \to X \\ & | \ choc \to coin \to X)) \end{aligned} VMS∣∣∣VMS=(coin→μX⋅(coin→choc→X∣ choc→coin→X))
5.2 规则
Interleaving的"单位元"是STOPSTOPSTOP,“零"是RUNRUNRUN,对”⊓\sqcap⊓“满足分配律,但对”□\Box□"不满足分配律。
两进程使用Interleaving结合:
(x→P) ∣∣∣ (y→Q)=(x→(P∣∣∣(y→Q)) □ y→((x→P)∣∣∣Q)))(x \to P) \ ||| \ (y \to Q) = (x \to (P ||| (y \to Q)) \ \Box \ y\to ((x \to P) ||| Q)))(x→P) ∣∣∣ (y→Q)=(x→(P∣∣∣(y→Q)) □ y→((x→P)∣∣∣Q)))
注意refusals无法区分Interleaving和通用选择:
refusals(P∣∣∣Q)=refusals(P□Q)=refusals(P)∩refusals(Q)refusals(P ||| Q) = refusals(P \Box Q) = refusals(P) \cap refusals(Q)refusals(P∣∣∣Q)=refusals(P□Q)=refusals(P)∩refusals(Q)
6 规范(specification)
6.1 简述
在本章学习中,引入的refusalsrefusalsrefusals操作和之前的tracestracestraces操作共同描述进程的规范:
P sat S(tr,ref)P \ sat \ S(tr,ref)P sat S(tr,ref)
即是说:
∀tr,ref⋅tr∈traces(P)∧ref∈refusals(P/tr)⇒S(tr,ref)\forall tr,ref \cdot tr \in traces(P) \wedge ref \in refusals(P/tr) \Rightarrow S(tr,ref)∀tr,ref⋅tr∈traces(P)∧ref∈refusals(P/tr)⇒S(tr,ref)
6.2 例子
为了付了款的用户不会得不到巧克力,支付的硬币比吐出的巧克力多时,不能拒绝吐出巧克力:
FAIR=(tr↓choc<tr↓coin⇒choc∉ref)FAIR = (tr \downarrow choc < tr \downarrow coin \Rightarrow choc \notin ref)FAIR=(tr↓choc<tr↓coin⇒choc∈/ref)
为了商家能持续盈利,吐出的巧克力和支付的硬币一样多时,不能拒绝支付硬币:
PROFIT1=(tr↓choc=tr↓coin⇒coin∉ref)PROFIT1 = (tr \downarrow choc = tr \downarrow coin \Rightarrow coin \notin ref)PROFIT1=(tr↓choc=tr↓coin⇒coin∈/ref)
7 发散(Divergence)
7.1 CHAOSCHAOSCHAOS进程
定义混乱的、最不确定的进程CHAOSCHAOSCHAOS,以下算子对CHAOSCHAOSCHAOS是严格的,也即CHAOSCHAOSCHAOS是以下算子的"零"(即结合后的进程仍是CHAOSCHAOSCHAOS):
⊓, /s, ∣∣, f, □, ∖C, ∣∣∣, μX\sqcap, \ / s, \ ||, \ f, \ \Box, \ \setminus C, \ |||, \ \mu X⊓, /s, ∣∣, f, □, ∖C, ∣∣∣, μX
CHAOSCHAOSCHAOS进程的特殊行为,在描述规范的tracestracestraces和refusalsrefusalsrefusals操作上,既表现出RUNRUNRUN的特性又表现出STOPSTOPSTOP的特性:
traces(CHAOSA)=traces(RUNA)=A∗refusals(CHAOSA)=refusals(STOPA)=2A traces(CHAOS_A) = traces(RUN_A) = A^* \\ refusals(CHAOS_A) = refusals(STOP_A) = 2^A traces(CHAOSA)=traces(RUNA)=A∗refusals(CHAOSA)=refusals(STOPA)=2A
7.2 divergencesdivergencesdivergences操作
进程PPP的divergencesdivergencesdivergences操作得到的是其tracestracestraces操作的子集,仅保留那些经过后会使进程变成混乱的CHAOSCHAOSCHAOS进程的迹:
divergences(P)={s ∣ s∈traces(P)∧(P/s)=CHAOSαP}divergences(P) = \{ s \ | \ s \in traces(P) \wedge (P/s)=CHAOS_{\alpha P}\}divergences(P)={s ∣ s∈traces(P)∧(P/s)=CHAOSαP}
从7.1
可以看到,refusalsrefusalsrefusals操作无法区分STOPSTOPSTOP和CHAOSCHAOSCHAOS,而divergencesdivergencesdivergences操作可将其区分:
divergences(STOP)=ϕdivergences(CHAOS)=A∗ divergences(STOP) = \phi \\ divergences(CHAOS) = A^* divergences(STOP)=ϕdivergences(CHAOS)=A∗
但无法区分"⊓\sqcap⊓“和”□\Box□"算子:
divergences(P⊓Q)=divergences(P□Q)=divergences(P)∪divergences(Q)divergences(P \sqcap Q) = divergences(P \Box Q) =divergences(P) \cup divergences(Q)divergences(P⊓Q)=divergences(P□Q)=divergences(P)∪divergences(Q)
8 整理
整理一下各个操作在特殊进程上的操作结果:
进程\操作 | traces()traces()traces() | refusals()refusals()refusals() | divergences()divergences()divergences() |
---|---|---|---|
P ∣ QP\ \vert \ QP ∣ Q | traces(P)∪traces(Q)traces(P) \cup traces(Q)traces(P)∪traces(Q) | refusals(P)∩refusals(Q)refusals(P) \cap refusals(Q)refusals(P)∩refusals(Q) | divergences(P)∪divergences(Q)divergences(P) \cup divergences(Q)divergences(P)∪divergences(Q) |
P ∣∣ QP \ \vert\vert \ QP ∣∣ Q | 课本P53-L1 | 课本P90-L6 | 课本P108-L8 |
P ⊓ QP \ \sqcap \ QP ⊓ Q | traces(P)∪traces(Q)traces(P) \cup traces(Q)traces(P)∪traces(Q) | refusals(P)∪refusals(Q)refusals(P) \cup refusals(Q)refusals(P)∪refusals(Q) | divergences(P)∪divergences(Q)divergences(P) \cup divergences(Q)divergences(P)∪divergences(Q) |
P □ QP \ \Box \ QP □ Q | traces(P)∪traces(Q)traces(P) \cup traces(Q)traces(P)∪traces(Q) | refusals(P)∩refusals(Q)refusals(P) \cap refusals(Q)refusals(P)∩refusals(Q) | divergences(P)∪divergences(Q)divergences(P) \cup divergences(Q)divergences(P)∪divergences(Q) |
P ∣∣∣ QP \ \vert\vert\vert \ QP ∣∣∣ Q | 课本P101-L1 | refusals(P)∩refusals(Q)refusals(P) \cap refusals(Q)refusals(P)∩refusals(Q) | 课本P108-L9 |
STOPASTOP_ASTOPA | {⟨⟩}\{ \langle \rangle \}{⟨⟩} | 2A2^A2A | ϕ\phiϕ |
RUNARUN_ARUNA | A∗A^*A∗ | ||
CHAOSACHAOS_ACHAOSA | A∗A^*A∗ | 2A2^A2A | A∗A^*A∗ |
其中,2A2^A2A指AAA的幂集,即AAA的所有子集组成的集合。注意和A∗A^*A∗(见第一篇2.4
)的区分。其实也就是要注意,traces()traces()traces()和divergences()divergences()divergences()操作得到的都是迹集合,而refusals()refusals()refusals()操作得到的是动作集合。
另外,还要注意区分"{⟨⟩}\{ \langle \rangle \}{⟨⟩}“和”ϕ\phiϕ",前者是仅包含一个单位迹"⟨⟩\langle \rangle⟨⟩"的集合,后者则是不包含任何元素的空集。
更多推荐
所有评论(0)