interleaving
interleaving P|||Q はプロセスP,Q がイベントで同期せずに、完全に独立して動作することを表す。例えば、以下のようなMIKEとRISAの動作を考える。
channel coin, coke, cider,lemonade, drink MIKE = coin -> ( coke -> drink -> SKIP |~| cider -> drink -> SKIP ) RISA = coin -> lemonade -> drink -> SKIP
MIKEはコーラかサイダーを飲み、RISAはレモネードしか飲まないとする。MIKEとRISAは共通のイベントcoin, drink を持つが、このイベントで2人が同期するわけではない。2人で一緒にコインを入れるわけではないし、2人で同時に飲むとは限らないだろう。このような場合はinterleavingで記述する。
PEOPLE = MIKE ||| RISA aPEOPLE = {coin,coke,cider,lemonade,drink} -- = aMIKE ∪ aRISA
この記述ではMIKEとRISAはすべてのイベントをそれぞれ別々に起こす。
さらにVMSとの関係を記述してみよう。
VMS = coin -> ( coke -> VMS [] lemonade -> VMS [] cider -> VMS ) aVMS = {coin,coke,lemonade,cider} SYSTEM = VMS [aVMS||aPEOPLE] PEOPLE -- SYSTEMの実行例 -- <coin(MIKE),coke,coin(RISA),drink(MIKE),lemonade,drink(RISA)>
MIKEが先に coin のイベントを起こした後は MIKEがジュースを選びVMSが再び最初の状態に戻るまで、RISAはイベントcoinを起こすことはできない。(VMSのcoinと同期する必要があるので。)
VMSはMIKEとRISAの起こすイベントcoin,coke,lemonade,ciderで同期しているが、これらを起こしたのが MIKE であるか RISA であるかは考慮していない。プロセスPEOPLE とイベント同期しているだけである。