Documentation

Cslib.Languages.CCS.Basic

Calculus of Communicating Systems (CCS) #

CCS [Mil80], as presented in [San]. In the semantics (see CCS.lts), we adopt the option of constant definitions (K = P).

Main definitions #

Main results #

References #

inductive Cslib.CCS.Act (Name : Type u) :

Actions.

  • name {Name : Type u} (a : Name) : Act Name
  • coname {Name : Type u} (a : Name) : Act Name
  • τ {Name : Type u} : Act Name
Instances For
    inductive Cslib.CCS.Process (Name : Type u) (Constant : Type v) :
    Type (max u v)

    Processes.

    • nil {Name : Type u} {Constant : Type v} : Process Name Constant

      Terminated process.

    • pre {Name : Type u} {Constant : Type v} (μ : Act Name) (p : Process Name Constant) : Process Name Constant

      Do μ and proceed as p.

    • par {Name : Type u} {Constant : Type v} (p q : Process Name Constant) : Process Name Constant

      p parallel q.

    • choice {Name : Type u} {Constant : Type v} (p q : Process Name Constant) : Process Name Constant

      Do p or q (nondeterministically).

    • res {Name : Type u} {Constant : Type v} (a : Name) (p : Process Name Constant) : Process Name Constant

      Restriction.

    • const {Name : Type u} {Constant : Type v} (c : Constant) : Process Name Constant

      Constant.

    Instances For
      def Cslib.CCS.instDecidableEqProcess.decEq {Name✝ : Type u_1} {Constant✝ : Type u_2} [DecidableEq Name✝] [DecidableEq Constant✝] (x✝ x✝¹ : Process Name✝ Constant✝) :
      Decidable (x✝ = x✝¹)
      Equations
      Instances For
        @[instance_reducible]
        instance Cslib.CCS.instDecidableEqProcess {Name✝ : Type u_1} {Constant✝ : Type u_2} [DecidableEq Name✝] [DecidableEq Constant✝] :
        DecidableEq (Process Name✝ Constant✝)
        Equations
        Equations
        • One or more equations did not get rendered due to their size.
        Instances For

          Syntactic category for processes.

          Equations
          Instances For

            Terminated process.

            Equations
            Instances For

              Do μ and proceed as p.

              Equations
              • One or more equations did not get rendered due to their size.
              Instances For

                Do μ and proceed as p.

                Equations
                • One or more equations did not get rendered due to their size.
                Instances For

                  Do p or q (nondeterministically).

                  Equations
                  Instances For

                    Restriction.

                    Equations
                    • One or more equations did not get rendered due to their size.
                    Instances For

                      Processes.

                      Equations
                      • One or more equations did not get rendered due to their size.
                      Instances For

                        Processes.

                        Equations
                        • One or more equations did not get rendered due to their size.
                        Instances For
                          inductive Cslib.CCS.Act.IsVisible {Name : Type u_1} :
                          Act NameProp

                          An action is visible if it a name or a coname.

                          Instances For
                            @[simp]
                            theorem Cslib.CCS.Act.isVisible_neq_τ {Name : Type u_1} {μ : Act Name} (h : μ.IsVisible) :
                            μ τ

                            If an action is visible, it is not τ.

                            inductive Cslib.CCS.Act.Co {Name : Type u} :
                            Act NameAct NameProp

                            Checks that an action is the coaction of another.

                            Instances For
                              theorem Cslib.CCS.Act.Co.symm {Name✝ : Type u_1} {μ μ' : Act Name✝} (h : μ.Co μ') :
                              μ'.Co μ

                              Act.Co is symmetric.

                              theorem Cslib.CCS.Act.co_isVisible {Name✝ : Type u_1} {μ μ' : Act Name✝} (h : μ.Co μ') :

                              If two actions are one the coaction of the other, then they are both visible.

                              def Cslib.CCS.Act.isCo {Name : Type u_1} [DecidableEq Name] (μ μ' : Act Name) :

                              Checks that an action is the coaction of another. This is the Boolean version of Act.Co.

                              Equations
                              Instances For
                                theorem Cslib.CCS.Act.isCo_iff {Name : Type u_1} [DecidableEq Name] {μ μ' : Act Name} :
                                μ.isCo μ' = true μ.Co μ'
                                @[instance_reducible]
                                instance Cslib.CCS.Act.instDecidableCoOfDecidableEq {Name : Type u_1} [DecidableEq Name] {μ μ' : Act Name} :
                                Decidable (μ.Co μ')

                                Act.Co is decidable if Name equality is decidable.

                                Equations
                                inductive Cslib.CCS.Context (Name : Type u) (Constant : Type v) :
                                Type (max u v)

                                Contexts.

                                Instances For
                                  @[instance_reducible]
                                  instance Cslib.CCS.instDecidableEqContext {Name✝ : Type u_1} {Constant✝ : Type u_2} [DecidableEq Name✝] [DecidableEq Constant✝] :
                                  DecidableEq (Context Name✝ Constant✝)
                                  Equations
                                  def Cslib.CCS.instDecidableEqContext.decEq {Name✝ : Type u_1} {Constant✝ : Type u_2} [DecidableEq Name✝] [DecidableEq Constant✝] (x✝ x✝¹ : Context Name✝ Constant✝) :
                                  Decidable (x✝ = x✝¹)
                                  Equations
                                  Instances For
                                    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
                                    Instances For
                                      @[instance_reducible]
                                      instance Cslib.CCS.instHasContextProcess {Name : Type u_1} {Constant : Type u_2} :
                                      HasContext (Process Name Constant)
                                      Equations
                                      theorem Cslib.CCS.context_fill_def {Name : Type u_1} {Constant : Type u_2} (c : Context Name Constant) (p : Process Name Constant) :
                                      c<[p] = c.fill p

                                      Definition of context filling.

                                      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.