Theory Broadcast_Thms

theory Broadcast_Thms
  imports Broadcast_Chain Broadcast_Frame Semantics Simulation Bisimulation Sim_Pres
  Sim_Struct_Cong Bisim_Pres Bisim_Struct_Cong Bisim_Subst
begin

context env
begin

  subsection ‹Syntax›

  subsubsection ‹Psi calculus agents~-- Definition~2›

  text @{term M}, @{term N} range over message terms. @{term P}, @{term Q} range over processes.
    @{term C} ranges over cases.

     Output: @{term "MN⟩.P"}
     Input: @{term "M⦇λ*xvec N⦈.P"}
     Case: @{term "Case C"}
     Par: @{term "(P  Q)"}
     Res: @{term "⦇νx(P::('a,'b,'c) psi)"}
     Assert: @{term "Ψ"}
     Bang: @{term "!P"}

  text  Cases: @{term " φ  P C"}

  subsubsection ‹Parameters~-- Definition~1›

  text  Channel equivalence: @{term "M  N"}
     Composition: @{term "ΨP  ΨQ"}
     Unit: @{term "𝟭"}
     Entailment: @{term "Ψ  φ"}

  subsubsection ‹Extra predicates for broadcast~-- Definition~5›

  text  Output connectivity: @{term "M  N"}
     Input connectivity: @{term "M  N"}

  subsubsection ‹Transitions~-- Definition~3›

  text  @{term "Ψ  P α P'"}

  subsubsection ‹Actions (\texorpdfstring{@{term α}}{alpha})~-- Definition~7›

  text  Input: @{term "MN"}
     Output: @{term "M⦇ν*xvec⦈⟨N"}
     Broadcast input: @{term "¿MN"}
     Broadcast output: @{term "¡M⦇ν*xvec⦈⟨N"}
     Silent action: @{term "τ"}

  subsection ‹Semantics›

  subsubsection ‹Basic Psi semantics~-- Table~1›

  text  Theorem {\it Input}:
      @{thm [display] Input[no_vars]}
     Theorem {\it Output}:
      @{thm [display] Output[no_vars]}
     Theorem {\it Case}:
      @{thm [display] Case[no_vars]}
     Theorems {\it Par1} and {\it Par2}:
      @{thm [display] Par1[no_vars]}
      @{thm [display] Par2[no_vars]}
     Theorems {\it Comm1} and {\it Comm2}:
      @{thm [display] Comm1[no_vars]}
      @{thm [display] Comm2[no_vars]}
     Theorem {\it Open}:
      @{thm [display] Open[no_vars]}
     Theorem {\it Scope}:
      @{thm [display] Scope[no_vars]}
     Theorem {\it Bang}:
      @{thm [display] Bang[no_vars]}

  subsubsection ‹Broadcast rules~-- Table~2›

  text  Theorem {\it BrInput}:
      @{thm [display] BrInput[no_vars]}
     Theorem {\it BrOutput}:
      @{thm [display] BrOutput[no_vars]}
     Theorem {\it BrMerge}:
      @{thm [display] BrMerge[no_vars]}
     Theorems {\it BrComm1} and {\it BrComm2}:
      @{thm [display] BrComm1[no_vars]}
      @{thm [display] BrComm2[no_vars]}
     Theorem {\it BrClose}:
      @{thm [display] BrClose[no_vars]}
     Theorem {\it BrOpen}:
      @{thm [display] BrOpen[no_vars]}

  subsubsection ‹Requirements for broadcast~-- Definition~6›

  text  Theorem {\it chanOutConSupp}:
      @{thm [display] chanOutConSupp[no_vars]}
     Theorem {\it chanInConSupp}:
      @{thm [display] chanInConSupp[no_vars]}

  subsubsection ‹Strong bisimulation~-- Definition~4›

  text  Theorem {\it bisim.step}:
      @{thm [display] bisim.step[no_vars]}

  subsection ‹Theorems›

  subsubsection ‹Congruence properties of strong bisimulation~-- Theorem~8›

  text  Theorem {\it bisimOutputPres}:
      @{thm [display] bisimOutputPres[no_vars]}
     Theorem {\it bisimInputPres}:
      @{thm [display] bisimInputPres[no_vars]}
     Theorem {\it bisimCasePres}:
      @{thm [display] bisimCasePres[no_vars]}
     Theorems {\it bisimParPres} and {\it bisimParPresSym}:
      @{thm [display] bisimParPres[no_vars]}
      @{thm [display] bisimParPresSym[no_vars]}
     Theorem {\it bisimResPres}:
      @{thm [display] bisimResPres[no_vars]}
     Theorem {\it bisimBangPres}:
      @{thm [display] bisimBangPres[no_vars]}

  subsubsection ‹Strong congruence, bisimulation closed under substitution~-- Definition~9›

  text  Theorem {\it closeSubst\_def}:
      @{thm [display] closeSubst_def[no_vars]}
     @{term "Ψ  P s Q"}

  subsubsection ‹Strong congruence is a process congruence for all \texorpdfstring{@{term Ψ}}{Psi}~-- Theorem~10›

  text  Theorem {\it bisimSubstOutputPres}:
      @{thm [display] bisimSubstOutputPres[no_vars]}
     Theorem {\it bisimSubstInputPres}:
      @{thm [display] bisimSubstInputPres[no_vars]}
     Theorem {\it bisimSubstCasePres}:
      @{thm [display] bisimSubstCasePres[no_vars]}
     Theorem {\it bisimSubstParPres}:
      @{thm [display] bisimSubstParPres[no_vars]}
     Theorem {\it bisimSubstResPres}:
      @{thm [display] bisimSubstResPres[no_vars]}
     Theorem {\it bisimSubstBangPres}:
      @{thm [display] bisimSubstBangPres[no_vars]}

  subsubsection ‹Structural equivalence~-- Theorem~11›

  text  Theorem {\it bisimCasePushRes}:
      @{thm [display] bisimCasePushRes[no_vars]}
     Theorem {\it bisimInputPushRes}:
      @{thm [display] bisimInputPushRes[no_vars]}
     Theorem {\it bisimOutputPushRes}:
      @{thm [display] bisimOutputPushRes[no_vars]}
     Theorem {\it bisimParAssoc}:
      @{thm [display] bisimParAssoc[no_vars]}
     Theorem {\it bisimParComm}:
      @{thm [display] bisimParComm[no_vars]}
     Theorem {\it bisimResNil}:
      @{thm [display] bisimResNil[no_vars]}
     Theorem {\it bisimScopeExt}:
      @{thm [display] bisimScopeExt[no_vars]}
     Theorem {\it bisimResComm}:
      @{thm [display] bisimResComm[no_vars]}
     Theorem {\it bangExt}:
      @{thm [display] bangExt[no_vars]}
     Theorem {\it bisimParNil}:
      @{thm [display] bisimParNil[no_vars]}

  subsubsection ‹Support of processes in broadcast transitions~-- Lemma~14›

  text  Theorem {\it brInputTermSupp}:
      @{thm [display] brInputTermSupp[no_vars]}
     Theorem {\it brOutputTermSupp}:
      @{thm [display] brOutputTermSupp[no_vars]}

end

end