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 6 kB image not shown  

Quelle  Weak_Sim.thy

  Sprache: Isabelle
 

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

theory Weak_Sim
  imports Weak_Semantics Strong_Sim
begin

definition weakSimulation :: "ccs ==> (ccs × ccs) set ==> ccs ==> bool"   (_ ^🪙 _ [80808080)
where
  "P ^<Rel> Q a Q'. Q a Q' (P'. P ==>^a P' (P', Q') Rel)"

lemma weakSimI[case_names Sim]:
  fixes P   :: ccs
  and   Rel :: "(ccs × ccs) set"
  and   Q   :: ccs

  assumes "α Q'. Q α Q' ==> P'. P ==>^α P' (P', Q') Rel"

  shows "P ^<Rel> Q"
using assms
by(auto simp add: weakSimulation_def)

lemma weakSimE:
  fixes P   :: ccs
  and   Rel :: "(ccs × ccs) set"
  and   Q   :: ccs
  and   α   :: act
  and   Q'  :: ccs

  assumes "P ^<Rel> Q"
  and     "Q α Q'"

  obtains P' where "P ==>^α P'" and "(P', Q') Rel"
using assms
by(auto simp add: weakSimulation_def)

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

  assumes "Q ==>\<tau> Q'"
  and     "(P, Q) Rel"
  and     Sim: "R S. (R, S) Rel ==> R ^<Rel> S"

  obtains P' where "P ==>\<tau> P'" and "(P', Q') Rel"
using Q ==>\τ Q' (P, Q) Rel
proof(induct arbitrary: thesis rule: tauChainInduct)
  case Base
  from (P, Q) Rel show ?case
    by(force intro: Base)
next
  case(Step Q'' Q')
  from (P, Q) Rel obtain P'' where "P ==>\<tau> P''" and "(P'', Q'') Rel"
    by(blast intro: Step)
  from (P'', Q'') Rel have "P'' ^<Rel> Q''" by(rule Sim)
  then obtain P' where "P'' ==>^τ P'" and "(P', Q') Rel" using Q'' τ Q' by(rule weakSimE)
  with P ==>\τ P'' show thesis
    by(force simp add: weakTrans_def weakCongTrans_def intro: Step)
qed

lemma simE2:
  fixes P   :: ccs
  and   Rel :: "(ccs × ccs) set"
  and   Q   :: ccs
  and   α   :: act
  and   Q'  :: ccs

  assumes "(P, Q) Rel"
  and     "Q ==>^α Q'"
  and     Sim: "R S. (R, S) Rel ==> R ^<Rel> S"
  
  obtains P' where "P ==>^α P'" and "(P', Q') Rel"
proof -
  assume Goal: "P'. [P ==>^α P'; (P', Q') Rel] ==> thesis"
  moreover from Q ==>^α Q' have "P'. P ==>^α P' (P', Q') Rel"
  proof(induct rule: weakTransCases)
    case Base
    from (P, Q) Rel show ?case by force
  next
    case Step
    from Q ==>α Q' obtain Q''' Q''
    where QChain: "Q ==>\<tau> Q'''" and Q'''Trans: "Q''' α Q''" and Q''Chain: "Q'' ==>\<tau> Q'"
      by(rule weakCongTransE)
    from QChain (P, Q) Rel Sim obtain P''' where PChain: "P ==>\<tau> P'''" and "(P''', Q''') Rel"
      by(rule simTauChain)
    from (P''', Q''') Rel have "P''' ^<Rel> Q'''" by(rule Sim)
    then obtain P'' where P'''Trans: "P''' ==>^α P''" and "(P'', Q'') Rel" using Q'''Trans by(rule weakSimE)
    from Q''Chain (P'', Q'') Rel Sim obtain P' where P''Chain: "P'' ==>\<tau> P'" and "(P', Q') Rel"
      by(rule simTauChain)
    from P'''Trans P''Chain Step show ?thesis
    proof(induct rule: weakTransCases)
      case Base
      from PChain P''' ==>\τ P' have "P ==>^τ P'"
      proof(induct rule: tauChainInduct)
        case Base
        from P ==>\τ P' show ?case
        proof(induct rule: tauChainInduct)
          case Base
          show ?case by simp
        next
          case(Step P' P'')
          thus ?case by(fastforce simp add: weakTrans_def weakCongTrans_def)
        qed
      next
        case(Step P''' P'')
        thus ?case by(fastforce simp add: weakTrans_def weakCongTrans_def)
      qed
      with (P', Q') Rel show ?case by blast
    next
      case Step
      thus ?case using (P', Q') Rel PChain
        by(rule_tac x=P' in exI) (force simp add: weakTrans_def weakCongTrans_def)
    qed
  qed
  ultimately show ?thesis
    by blast
qed

lemma reflexive:
  fixes P   :: ccs
  and   Rel :: "(ccs × ccs) set"
  
  assumes "Id Rel"

  shows "P ^<Rel> P"
using assms
by(auto simp add: weakSimulation_def intro: transitionWeakCongTransition weakCongTransitionWeakTransition)
  
lemma transitive:
  fixes P     :: ccs
  and   Rel   :: "(ccs × ccs) set"
  and   Q     :: ccs
  and   Rel'  :: "(ccs × ccs) set"
  and   R     :: ccs
  and   Rel'' :: "(ccs × ccs) set"
  
  assumes "(P, Q) Rel"
  and     "Q ^<Rel'> R"
  and     "Rel O Rel' Rel''"
  and     "S T. (S, T) Rel ==> S ^<Rel> T"
  
  shows "P ^<Rel''> R"
proof(induct rule: weakSimI)
  case(Sim α R')
  thus ?case using assms
    apply(drule_tac Q=R in weakSimE, auto)
    by(drule_tac Q=Q in simE2, auto)
qed

lemma weakMonotonic:
  fixes P :: ccs
  and   A :: "(ccs × ccs) set"
  and   Q :: ccs
  and   B :: "(ccs × ccs) set"

  assumes "P ^<A> Q"
  and     "A B"

  shows "P ^<B> Q"
using assms
by(fastforce simp add: weakSimulation_def)

lemma simWeakSim:
  fixes P   :: ccs
  and   Rel :: "(ccs × ccs) set"
  and   Q   :: ccs

  assumes "P [Rel] Q"
  
  shows "P ^<Rel> Q"
using assms
by(rule_tac weakSimI, auto)
  (blast dest: simE transitionWeakTransition)

end

Messung V0.5 in Prozent
C=73 H=97 G=85

¤ Dauer der Verarbeitung: 0.6 Sekunden  ¤

*© 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.