Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/Isabelle/Archive-of-Formal-Proofs/thys/CCS/   (Sammlung formaler Beweise Version 2026-5©)  Datei vom 29.4.2026 mit Größe 8 kB image not shown  

Quelle  Weak_Bisim.thy

  Sprache: Isabelle
 

(* 
   Title: The Calculus of Communicating Systems   
   Author/Maintainer: Jesper Bengtson (jebe@itu.dk), 2012
*)

theory Weak_Bisim
  imports Weak_Sim Strong_Bisim_SC Struct_Cong
begin

lemma weakMonoCoinduct: "x y xa xb P Q.
                         x y ==>
                         (Q ^<{(xb, xa). x xb xa}> P)
                        (Q ^<{(xb, xa). y xb xa}> P)"
apply auto
apply(rule weakMonotonic)
by(auto dest: le_funE)

coinductive_set weakBisimulation :: "(ccs × ccs) set"
where
  "[P ^<weakBisimulation> Q; (Q, P) weakBisimulation] ==> (P, Q) weakBisimulation"
monos weakMonoCoinduct

abbreviation
  weakBisimJudge (_ _ [707065where "P Q (P, Q) weakBisimulation"

lemma weakBisimulationCoinductAux[consumes 1]:
  fixes P :: "ccs"
  and   Q :: "ccs"
  and   X :: "(ccs × ccs) set"

  assumes "(P, Q) X"
  and     "P Q. (P, Q) X ==> P ^<(X weakBisimulation)> Q (Q, P) X"

  shows "P Q"
proof -
  have "X weakBisimulation = {(P, Q). (P, Q) X (P, Q) weakBisimulation}" by auto
  with assms show ?thesis
    by coinduct simp
qed

lemma weakBisimulationCoinduct[consumes 1, case_names cSim cSym]:
  fixes P :: "ccs"
  and   Q :: "ccs"
  and   X :: "(ccs × ccs) set"

  assumes "(P, Q) X"
  and     "R S. (R, S) X ==> R ^<(X weakBisimulation)> S"
  and     "R S. (R, S) X ==> (S, R) X"

  shows "P Q"
proof -
  have "X weakBisimulation = {(P, Q). (P, Q) X (P, Q) weakBisimulation}" by auto
  with assms show ?thesis
    by coinduct simp
qed

lemma weakBisimWeakCoinductAux[consumes 1]:
  fixes P :: "ccs"
  and   Q :: "ccs"
  and   X :: "(ccs × ccs) set"

  assumes "(P, Q) X"
  and     "P Q. (P, Q) X ==> P ^<X> Q (Q, P) X" 

  shows "P Q"
using assms
by(coinduct rule: weakBisimulationCoinductAux) (blast intro: weakMonotonic)

lemma weakBisimWeakCoinduct[consumes 1, case_names cSim cSym]:
  fixes P :: "ccs"
  and   Q :: "ccs"
  and   X :: "(ccs × ccs) set"

  assumes "(P, Q) X"
  and     "P Q. (P, Q) X ==> P ^<X> Q"
  and     "P Q. (P, Q) X ==> (Q, P) X"

  shows "P Q"
proof -
  have "X weakBisim = {(P, Q). (P, Q) X (P, Q) weakBisim}" by auto
  with assms show ?thesis
  by(coinduct rule: weakBisimulationCoinduct) (blast intro: weakMonotonic)+
qed

lemma weakBisimulationE:
  fixes P  :: "ccs"
  and   Q  :: "ccs"

  assumes "P Q"

  shows "P ^<weakBisimulation> Q"
  and   "Q P"
using assms
by(auto simp add: intro: weakBisimulation.cases)

lemma weakBisimulationI:
  fixes P :: "ccs"
  and   Q :: "ccs"

  assumes "P ^<weakBisimulation> Q"
  and     "Q P"

  shows "P Q"
using assms
by(auto intro: weakBisimulation.intros)

lemma reflexive: 
  fixes P :: ccs

  shows "P P"
proof -
  have "(P, P) Id" by blast
  thus ?thesis
    by(coinduct rule: weakBisimulationCoinduct) (auto intro: Weak_Sim.reflexive)
qed

lemma symmetric: 
  fixes P :: ccs
  and   Q :: ccs

  assumes "P Q"

  shows "Q P"
using assms  
by(rule weakBisimulationE)

lemma transitive: 
  fixes P :: ccs
  and   Q :: ccs
  and   R :: ccs

  assumes "P Q"
  and     "Q R"

  shows "P R"
proof -
  from assms have "(P, R) weakBisimulation O weakBisimulation" by auto
  thus ?thesis
  proof(coinduct rule: weakBisimulationCoinduct)
    case(cSim P R)
    from (P, R) weakBisimulation O weakBisimulation
    obtain Q where "P Q" and "Q R" by auto
    note P Q
    moreover from Q R have "Q ^<weakBisimulation> R" by(rule weakBisimulationE)
    moreover have "weakBisimulation O weakBisimulation (weakBisimulation O weakBisimulation) weakBisimulation"
      by auto
    moreover note weakBisimulationE(1)
    ultimately show ?case by(rule Weak_Sim.transitive)
  next
    case(cSym P R)
    thus ?case by(blast dest: symmetric)
  qed
qed

lemma bisimWeakBisimulation:
  fixes P :: ccs
  and   Q :: ccs
  
  assumes "P Q"

  shows "P Q"
using assms
by(coinduct rule: weakBisimWeakCoinduct[where X=bisim])
  (auto dest: bisimE simWeakSim)

lemma structCongWeakBisimulation:
  fixes P :: ccs
  and   Q :: ccs

  assumes "P s Q"

  shows "P Q"
using assms

by(auto intro: bisimWeakBisimulation bisimStructCong)

lemma strongAppend:
  fixes P     :: ccs
  and   Q     :: ccs
  and   R     :: ccs
  and   Rel   :: "(ccs × ccs) set"
  and   Rel'  :: "(ccs × ccs) set"
  and   Rel'' :: "(ccs × ccs) set"

  assumes PSimQ: "P ^<Rel> Q"
  and     QSimR: "Q [Rel'] R"
  and     Trans: "Rel O Rel' Rel''"

  shows "P ^<Rel''> R"
using assms
by(simp add: weakSimulation_def simulation_def) blast

lemma weakBisimWeakUpto[case_names cSim cSym, consumes 1]:
  assumes p: "(P, Q) X"
  and rSim: "P Q. (P, Q) X ==> P ^<(weakBisimulation O X O bisim)> Q"
  and rSym: " P Q. (P, Q) X ==> (Q, P) X"

  shows "P Q"
proof -
  let ?X = "weakBisimulation O X O weakBisimulation"
  let ?Y = "weakBisimulation O X O bisim"
  from (P, Q) X have "(P, Q) ?X" by(blast intro: Strong_Bisim.reflexive reflexive)
  thus ?thesis
  proof(coinduct rule: weakBisimWeakCoinduct)
    case(cSim P Q)
    {
      fix P P' Q' Q
      assume "P P'" and "(P', Q') X" and "Q' Q"
      from (P', Q') X have "(P', Q') ?Y" by(blast intro: reflexive Strong_Bisim.reflexive)
      moreover from Q' Q have "Q' ^<weakBisimulation> Q" by(rule weakBisimulationE)
      moreover have "?Y O weakBisimulation ?X" by(blast dest: bisimWeakBisimulation transitive)
      moreover {
        fix P Q
        assume "(P, Q) ?Y"
        then obtain P' Q' where "P P'" and "(P', Q') X" and "Q' Q" by auto
        from (P', Q') X have "P' ^<?Y> Q'" by(rule rSim)
        moreover from Q' Q have "Q' [bisim] Q" by(rule bisimE)
        moreover have "?Y O bisim ?Y" by(auto dest: Strong_Bisim.transitive)
        ultimately have "P' ^<?Y> Q" by(rule strongAppend)
        moreover note P P'
        moreover have "weakBisimulation O ?Y ?Y" by(blast dest: transitive)
        ultimately have "P ^<?Y> Q" using weakBisimulationE(1)
          by(rule_tac Weak_Sim.transitive)
      }
      ultimately have "P' ^<?X> Q" by(rule Weak_Sim.transitive)
      moreover note P P'
      moreover have "weakBisimulation O ?X ?X" by(blast dest: transitive)
      ultimately have "P ^<?X> Q" using weakBisimulationE(1)
        by(rule_tac Weak_Sim.transitive)
    }
    with (P, Q) ?X show ?case by auto
  next
    case(cSym P Q)
    thus ?case 
      apply auto
      by(blast dest: bisimE rSym weakBisimulationE)
  qed
qed

lemma weakBisimUpto[case_names cSim cSym, consumes 1]:
  assumes p: "(P, Q) X"
  and rSim: "R S. (R, S) X ==> R ^<(weakBisimulation O (X weakBisimulation) O bisim)> S"
  and rSym: "R S. (R, S) X ==> (S, R) X"

  shows "P Q"
proof -
  from p have "(P, Q) X weakBisimulation" by simp
  thus ?thesis
    apply(coinduct rule: weakBisimWeakUpto)
    apply(auto dest: rSim rSym weakBisimulationE)
    apply(rule weakMonotonic)
    apply(blast dest: weakBisimulationE)
    apply(auto simp add: relcomp_unfold)
    by(metis reflexive Strong_Bisim.reflexive transitive)
qed

end

Messung V0.5 in Prozent
C=65 H=88 G=77

¤ Dauer der Verarbeitung: 0.10 Sekunden  (vorverarbeitet am  2026-06-10) ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.