Theory Bisimulation
section ‹Proof Infrastructure›
subsection ‹Bisimulation›
theory Bisimulation
imports
Stuttering
begin
inductive weak_bisimilar :: "ID ⇒ IRGraph ⇒ IRGraph ⇒ bool"
("_ . _ ∼ _") for nid where
"⟦∀P'. (g m p h ⊢ nid ↝ P') ⟶ (∃Q' . (g' m p h ⊢ nid ↝ Q') ∧ P' = Q');
∀Q'. (g' m p h ⊢ nid ↝ Q') ⟶ (∃P' . (g m p h ⊢ nid ↝ P') ∧ P' = Q')⟧
⟹ nid . g ∼ g'"
text ‹A strong bisimilution between no-op transitions›
inductive strong_noop_bisimilar :: "ID ⇒ IRGraph ⇒ IRGraph ⇒ bool"
("_ | _ ∼ _") for nid where
"⟦∀P'. (g, p ⊢ (nid, m, h) → P') ⟶ (∃Q' . (g', p ⊢ (nid, m, h) → Q') ∧ P' = Q');
∀Q'. (g', p ⊢ (nid, m, h) → Q') ⟶ (∃P' . (g, p ⊢ (nid, m, h) → P') ∧ P' = Q')⟧
⟹ nid | g ∼ g'"
lemma lockstep_strong_bisimilulation:
assumes "g' = replace_node nid node g"
assumes "g, p ⊢ (nid, m, h) → (nid', m, h)"
assumes "g', p ⊢ (nid, m, h) → (nid', m, h)"
shows "nid | g ∼ g'"
by (metis strong_noop_bisimilar.simps stepDet assms(2,3))
lemma no_step_bisimulation:
assumes "∀m p h nid' m' h'. ¬(g, p ⊢ (nid, m, h) → (nid', m', h'))"
assumes "∀m p h nid' m' h'. ¬(g', p ⊢ (nid, m, h) → (nid', m', h'))"
shows "nid | g ∼ g'"
by (simp add: assms(1,2) strong_noop_bisimilar.intros)
end