Calculus of Communicating Systems (CCS) #
CCS [Milner80], as presented in [Sangiorgi2011]. In the semantics (see CCS.lts), we adopt the
option of constant definitions (K = P).
Main definitions #
CCS.Process: processes.CCS.Context: contexts.
Main results #
CCS.Context.complete: any process is equal to some context filled an atomic process (nil or a constant).
References #
- [R. Milner, A Calculus of Communicating Systems][Milner80]
- [D. Sangiorgi, Introduction to Bisimulation and Coinduction][Sangiorgi2011]
instance
Cslib.CCS.instDecidableEqAct
{Name✝ : Type u_1}
[DecidableEq Name✝]
:
DecidableEq (Act Name✝)
def
Cslib.CCS.instDecidableEqAct.decEq
{Name✝ : Type u_1}
[DecidableEq Name✝]
(x✝ x✝¹ : Act Name✝)
:
Equations
- Cslib.CCS.instDecidableEqAct.decEq (Cslib.CCS.Act.name a) (Cslib.CCS.Act.name b) = if h : a = b then h ▸ isTrue ⋯ else isFalse ⋯
- Cslib.CCS.instDecidableEqAct.decEq (Cslib.CCS.Act.name a) (Cslib.CCS.Act.coname a_1) = isFalse ⋯
- Cslib.CCS.instDecidableEqAct.decEq (Cslib.CCS.Act.name a) Cslib.CCS.Act.τ = isFalse ⋯
- Cslib.CCS.instDecidableEqAct.decEq (Cslib.CCS.Act.coname a) (Cslib.CCS.Act.name a_1) = isFalse ⋯
- Cslib.CCS.instDecidableEqAct.decEq (Cslib.CCS.Act.coname a) (Cslib.CCS.Act.coname b) = if h : a = b then h ▸ isTrue ⋯ else isFalse ⋯
- Cslib.CCS.instDecidableEqAct.decEq (Cslib.CCS.Act.coname a) Cslib.CCS.Act.τ = isFalse ⋯
- Cslib.CCS.instDecidableEqAct.decEq Cslib.CCS.Act.τ (Cslib.CCS.Act.name a) = isFalse ⋯
- Cslib.CCS.instDecidableEqAct.decEq Cslib.CCS.Act.τ (Cslib.CCS.Act.coname a) = isFalse ⋯
- Cslib.CCS.instDecidableEqAct.decEq Cslib.CCS.Act.τ Cslib.CCS.Act.τ = isTrue ⋯
Instances For
Processes.
- nil {Name : Type u} {Constant : Type v} : Process Name Constant
- pre {Name : Type u} {Constant : Type v} (μ : Act Name) (p : Process Name Constant) : Process Name Constant
- par {Name : Type u} {Constant : Type v} (p q : Process Name Constant) : Process Name Constant
- choice {Name : Type u} {Constant : Type v} (p q : Process Name Constant) : Process Name Constant
- res {Name : Type u} {Constant : Type v} (a : Name) (p : Process Name Constant) : Process Name Constant
- const {Name : Type u} {Constant : Type v} (c : Constant) : Process Name Constant
Instances For
instance
Cslib.CCS.instDecidableEqProcess
{Name✝ : Type u_1}
{Constant✝ : Type u_2}
[DecidableEq Name✝]
[DecidableEq Constant✝]
:
DecidableEq (Process Name✝ Constant✝)
def
Cslib.CCS.instDecidableEqProcess.decEq
{Name✝ : Type u_1}
{Constant✝ : Type u_2}
[DecidableEq Name✝]
[DecidableEq Constant✝]
(x✝ x✝¹ : Process Name✝ Constant✝)
:
Equations
- One or more equations did not get rendered due to their size.
- Cslib.CCS.instDecidableEqProcess.decEq Cslib.CCS.Process.nil Cslib.CCS.Process.nil = isTrue ⋯
- Cslib.CCS.instDecidableEqProcess.decEq Cslib.CCS.Process.nil (Cslib.CCS.Process.pre μ p) = isFalse ⋯
- Cslib.CCS.instDecidableEqProcess.decEq Cslib.CCS.Process.nil (p.par q) = isFalse ⋯
- Cslib.CCS.instDecidableEqProcess.decEq Cslib.CCS.Process.nil (p.choice q) = isFalse ⋯
- Cslib.CCS.instDecidableEqProcess.decEq Cslib.CCS.Process.nil (Cslib.CCS.Process.res a p) = isFalse ⋯
- Cslib.CCS.instDecidableEqProcess.decEq Cslib.CCS.Process.nil (Cslib.CCS.Process.const c) = isFalse ⋯
- Cslib.CCS.instDecidableEqProcess.decEq (Cslib.CCS.Process.pre μ p) Cslib.CCS.Process.nil = isFalse ⋯
- Cslib.CCS.instDecidableEqProcess.decEq (Cslib.CCS.Process.pre μ p) (p_1.par q) = isFalse ⋯
- Cslib.CCS.instDecidableEqProcess.decEq (Cslib.CCS.Process.pre μ p) (p_1.choice q) = isFalse ⋯
- Cslib.CCS.instDecidableEqProcess.decEq (Cslib.CCS.Process.pre μ p) (Cslib.CCS.Process.res a p_1) = isFalse ⋯
- Cslib.CCS.instDecidableEqProcess.decEq (Cslib.CCS.Process.pre μ p) (Cslib.CCS.Process.const c) = isFalse ⋯
- Cslib.CCS.instDecidableEqProcess.decEq (p.par q) Cslib.CCS.Process.nil = isFalse ⋯
- Cslib.CCS.instDecidableEqProcess.decEq (p.par q) (Cslib.CCS.Process.pre μ p_1) = isFalse ⋯
- Cslib.CCS.instDecidableEqProcess.decEq (p.par q) (p_1.choice q_1) = isFalse ⋯
- Cslib.CCS.instDecidableEqProcess.decEq (p.par q) (Cslib.CCS.Process.res a p_1) = isFalse ⋯
- Cslib.CCS.instDecidableEqProcess.decEq (p.par q) (Cslib.CCS.Process.const c) = isFalse ⋯
- Cslib.CCS.instDecidableEqProcess.decEq (p.choice q) Cslib.CCS.Process.nil = isFalse ⋯
- Cslib.CCS.instDecidableEqProcess.decEq (p.choice q) (Cslib.CCS.Process.pre μ p_1) = isFalse ⋯
- Cslib.CCS.instDecidableEqProcess.decEq (p.choice q) (p_1.par q_1) = isFalse ⋯
- Cslib.CCS.instDecidableEqProcess.decEq (p.choice q) (Cslib.CCS.Process.res a p_1) = isFalse ⋯
- Cslib.CCS.instDecidableEqProcess.decEq (p.choice q) (Cslib.CCS.Process.const c) = isFalse ⋯
- Cslib.CCS.instDecidableEqProcess.decEq (Cslib.CCS.Process.res a p) Cslib.CCS.Process.nil = isFalse ⋯
- Cslib.CCS.instDecidableEqProcess.decEq (Cslib.CCS.Process.res a p) (Cslib.CCS.Process.pre μ p_1) = isFalse ⋯
- Cslib.CCS.instDecidableEqProcess.decEq (Cslib.CCS.Process.res a p) (p_1.par q) = isFalse ⋯
- Cslib.CCS.instDecidableEqProcess.decEq (Cslib.CCS.Process.res a p) (p_1.choice q) = isFalse ⋯
- Cslib.CCS.instDecidableEqProcess.decEq (Cslib.CCS.Process.res a p) (Cslib.CCS.Process.const c) = isFalse ⋯
- Cslib.CCS.instDecidableEqProcess.decEq (Cslib.CCS.Process.const c) Cslib.CCS.Process.nil = isFalse ⋯
- Cslib.CCS.instDecidableEqProcess.decEq (Cslib.CCS.Process.const c) (Cslib.CCS.Process.pre μ p) = isFalse ⋯
- Cslib.CCS.instDecidableEqProcess.decEq (Cslib.CCS.Process.const c) (p.par q) = isFalse ⋯
- Cslib.CCS.instDecidableEqProcess.decEq (Cslib.CCS.Process.const c) (p.choice q) = isFalse ⋯
- Cslib.CCS.instDecidableEqProcess.decEq (Cslib.CCS.Process.const c) (Cslib.CCS.Process.res a p) = isFalse ⋯
- Cslib.CCS.instDecidableEqProcess.decEq (Cslib.CCS.Process.const a) (Cslib.CCS.Process.const b) = if h : a = b then h ▸ isTrue ⋯ else isFalse ⋯
Instances For
If two actions are one the coaction of the other, then they are both visible.
Checks that an action is the coaction of another. This is the Boolean version of Act.Co.
Equations
- (Cslib.CCS.Act.name a).isCo (Cslib.CCS.Act.coname b) = decide (a = b)
- (Cslib.CCS.Act.coname a).isCo (Cslib.CCS.Act.name b) = decide (a = b)
- μ.isCo μ' = false
Instances For
instance
Cslib.CCS.Act.instDecidableCoOfDecidableEq
{Name : Type u_1}
[DecidableEq Name]
{μ μ' : Act Name}
:
Act.Co is decidable if Name equality is decidable.
Contexts.
- hole {Name : Type u} {Constant : Type v} : Context Name Constant
- pre {Name : Type u} {Constant : Type v} (μ : Act Name) (c : Context Name Constant) : Context Name Constant
- parL {Name : Type u} {Constant : Type v} (c : Context Name Constant) (q : Process Name Constant) : Context Name Constant
- parR {Name : Type u} {Constant : Type v} (p : Process Name Constant) (c : Context Name Constant) : Context Name Constant
- choiceL {Name : Type u} {Constant : Type v} (c : Context Name Constant) (q : Process Name Constant) : Context Name Constant
- choiceR {Name : Type u} {Constant : Type v} (p : Process Name Constant) (c : Context Name Constant) : Context Name Constant
- res {Name : Type u} {Constant : Type v} (a : Name) (c : Context Name Constant) : Context Name Constant
Instances For
def
Cslib.CCS.instDecidableEqContext.decEq
{Name✝ : Type u_1}
{Constant✝ : Type u_2}
[DecidableEq Name✝]
[DecidableEq Constant✝]
(x✝ x✝¹ : Context Name✝ Constant✝)
:
Equations
- One or more equations did not get rendered due to their size.
- Cslib.CCS.instDecidableEqContext.decEq Cslib.CCS.Context.hole Cslib.CCS.Context.hole = isTrue ⋯
- Cslib.CCS.instDecidableEqContext.decEq Cslib.CCS.Context.hole (Cslib.CCS.Context.pre μ c) = isFalse ⋯
- Cslib.CCS.instDecidableEqContext.decEq Cslib.CCS.Context.hole (c.parL q) = isFalse ⋯
- Cslib.CCS.instDecidableEqContext.decEq Cslib.CCS.Context.hole (Cslib.CCS.Context.parR p c) = isFalse ⋯
- Cslib.CCS.instDecidableEqContext.decEq Cslib.CCS.Context.hole (c.choiceL q) = isFalse ⋯
- Cslib.CCS.instDecidableEqContext.decEq Cslib.CCS.Context.hole (Cslib.CCS.Context.choiceR p c) = isFalse ⋯
- Cslib.CCS.instDecidableEqContext.decEq Cslib.CCS.Context.hole (Cslib.CCS.Context.res a c) = isFalse ⋯
- Cslib.CCS.instDecidableEqContext.decEq (Cslib.CCS.Context.pre μ c) Cslib.CCS.Context.hole = isFalse ⋯
- Cslib.CCS.instDecidableEqContext.decEq (Cslib.CCS.Context.pre μ c) (c_1.parL q) = isFalse ⋯
- Cslib.CCS.instDecidableEqContext.decEq (Cslib.CCS.Context.pre μ c) (Cslib.CCS.Context.parR p c_1) = isFalse ⋯
- Cslib.CCS.instDecidableEqContext.decEq (Cslib.CCS.Context.pre μ c) (c_1.choiceL q) = isFalse ⋯
- Cslib.CCS.instDecidableEqContext.decEq (Cslib.CCS.Context.pre μ c) (Cslib.CCS.Context.choiceR p c_1) = isFalse ⋯
- Cslib.CCS.instDecidableEqContext.decEq (Cslib.CCS.Context.pre μ c) (Cslib.CCS.Context.res a c_1) = isFalse ⋯
- Cslib.CCS.instDecidableEqContext.decEq (c.parL q) Cslib.CCS.Context.hole = isFalse ⋯
- Cslib.CCS.instDecidableEqContext.decEq (c.parL q) (Cslib.CCS.Context.pre μ c_1) = isFalse ⋯
- Cslib.CCS.instDecidableEqContext.decEq (c.parL q) (Cslib.CCS.Context.parR p c_1) = isFalse ⋯
- Cslib.CCS.instDecidableEqContext.decEq (c.parL q) (c_1.choiceL q_1) = isFalse ⋯
- Cslib.CCS.instDecidableEqContext.decEq (c.parL q) (Cslib.CCS.Context.choiceR p c_1) = isFalse ⋯
- Cslib.CCS.instDecidableEqContext.decEq (c.parL q) (Cslib.CCS.Context.res a c_1) = isFalse ⋯
- Cslib.CCS.instDecidableEqContext.decEq (Cslib.CCS.Context.parR p c) Cslib.CCS.Context.hole = isFalse ⋯
- Cslib.CCS.instDecidableEqContext.decEq (Cslib.CCS.Context.parR p c) (Cslib.CCS.Context.pre μ c_1) = isFalse ⋯
- Cslib.CCS.instDecidableEqContext.decEq (Cslib.CCS.Context.parR p c) (c_1.parL q) = isFalse ⋯
- Cslib.CCS.instDecidableEqContext.decEq (Cslib.CCS.Context.parR p c) (c_1.choiceL q) = isFalse ⋯
- Cslib.CCS.instDecidableEqContext.decEq (Cslib.CCS.Context.parR p c) (Cslib.CCS.Context.choiceR p_1 c_1) = isFalse ⋯
- Cslib.CCS.instDecidableEqContext.decEq (Cslib.CCS.Context.parR p c) (Cslib.CCS.Context.res a c_1) = isFalse ⋯
- Cslib.CCS.instDecidableEqContext.decEq (c.choiceL q) Cslib.CCS.Context.hole = isFalse ⋯
- Cslib.CCS.instDecidableEqContext.decEq (c.choiceL q) (Cslib.CCS.Context.pre μ c_1) = isFalse ⋯
- Cslib.CCS.instDecidableEqContext.decEq (c.choiceL q) (c_1.parL q_1) = isFalse ⋯
- Cslib.CCS.instDecidableEqContext.decEq (c.choiceL q) (Cslib.CCS.Context.parR p c_1) = isFalse ⋯
- Cslib.CCS.instDecidableEqContext.decEq (c.choiceL q) (Cslib.CCS.Context.choiceR p c_1) = isFalse ⋯
- Cslib.CCS.instDecidableEqContext.decEq (c.choiceL q) (Cslib.CCS.Context.res a c_1) = isFalse ⋯
- Cslib.CCS.instDecidableEqContext.decEq (Cslib.CCS.Context.choiceR p c) Cslib.CCS.Context.hole = isFalse ⋯
- Cslib.CCS.instDecidableEqContext.decEq (Cslib.CCS.Context.choiceR p c) (Cslib.CCS.Context.pre μ c_1) = isFalse ⋯
- Cslib.CCS.instDecidableEqContext.decEq (Cslib.CCS.Context.choiceR p c) (c_1.parL q) = isFalse ⋯
- Cslib.CCS.instDecidableEqContext.decEq (Cslib.CCS.Context.choiceR p c) (Cslib.CCS.Context.parR p_1 c_1) = isFalse ⋯
- Cslib.CCS.instDecidableEqContext.decEq (Cslib.CCS.Context.choiceR p c) (c_1.choiceL q) = isFalse ⋯
- Cslib.CCS.instDecidableEqContext.decEq (Cslib.CCS.Context.choiceR p c) (Cslib.CCS.Context.res a c_1) = isFalse ⋯
- Cslib.CCS.instDecidableEqContext.decEq (Cslib.CCS.Context.res a c) Cslib.CCS.Context.hole = isFalse ⋯
- Cslib.CCS.instDecidableEqContext.decEq (Cslib.CCS.Context.res a c) (Cslib.CCS.Context.pre μ c_1) = isFalse ⋯
- Cslib.CCS.instDecidableEqContext.decEq (Cslib.CCS.Context.res a c) (c_1.parL q) = isFalse ⋯
- Cslib.CCS.instDecidableEqContext.decEq (Cslib.CCS.Context.res a c) (Cslib.CCS.Context.parR p c_1) = isFalse ⋯
- Cslib.CCS.instDecidableEqContext.decEq (Cslib.CCS.Context.res a c) (c_1.choiceL q) = isFalse ⋯
- Cslib.CCS.instDecidableEqContext.decEq (Cslib.CCS.Context.res a c) (Cslib.CCS.Context.choiceR p c_1) = isFalse ⋯
Instances For
instance
Cslib.CCS.instDecidableEqContext
{Name✝ : Type u_1}
{Constant✝ : Type u_2}
[DecidableEq Name✝]
[DecidableEq Constant✝]
:
DecidableEq (Context Name✝ Constant✝)
def
Cslib.CCS.Context.fill
{Name : Type u_1}
{Constant : Type u_2}
(c : Context Name Constant)
(p : Process Name Constant)
:
Process Name Constant
Replaces the hole in a Context with a Process.
Equations
- Cslib.CCS.Context.hole.fill p = p
- (Cslib.CCS.Context.pre μ c_2).fill p = Cslib.CCS.Process.pre μ (c_2.fill p)
- (c_2.parL r).fill p = (c_2.fill p).par r
- (Cslib.CCS.Context.parR r c_2).fill p = r.par (c_2.fill p)
- (c_2.choiceL r).fill p = (c_2.fill p).choice r
- (Cslib.CCS.Context.choiceR r c_2).fill p = r.choice (c_2.fill p)
- (Cslib.CCS.Context.res a c_2).fill p = Cslib.CCS.Process.res a (c_2.fill p)
Instances For
instance
Cslib.CCS.instHasContextProcess
{Name : Type u_1}
{Constant : Type u_2}
:
HasContext (Process Name Constant)
Equations
- Cslib.CCS.instHasContextProcess = { Context := Cslib.CCS.Context Name Constant, fill := Cslib.CCS.Context.fill }
theorem
Cslib.CCS.Context.complete
{Name : Type u_1}
{Constant : Type u_2}
(p : Process Name Constant)
:
∃ (c : Context Name Constant), p = c[Process.nil] ∨ ∃ (k : Constant), p = c[Process.const k]
Any Process can be obtained by filling a Context with an atom. This proves that Context
is a complete formalisation of syntactic contexts for CCS.