Zulip Chat Archive

Stream: computer science

Topic: Bisimulation


Fabrizio Montesi (Jul 26 2025 at 18:09):

I've completed the proof that (strong) Bisimulations equipped with union form a BoundedOrder and a SemilatticeSup (a join-semilattice). As expected, the bottom element is the empty relation and the top element is Bisimilarity. :)

I've used Subtype to formalise the type of all bisimulations, so things look like this:

instance : SemilatticeSup ({r // Bisimulation lts r}) where ...
instance : BoundedOrder ({r // Bisimulation lts r}) where ...

Fabrizio Montesi (Jul 28 2025 at 19:13):

calc, grind, and simp are very nice helpers in bisimilarity proofs. Here's a proof for CCS that 0 | P ~ P knowing that P | Q ~ Q | P and P | 0 ~ P.

theorem bisimilarity_nil_par : (par nil p) ~[@lts Name Constant defs] p :=
  calc
    (par nil p) ~[@lts Name Constant defs] (par p nil) := by grind -- 0 | P ~ P | 0
    _ ~[@lts Name Constant defs] p := by simp -- P | 0 ~ P

Fabrizio Montesi (Sep 07 2025 at 18:28):

Testing a bundled definition of Bisimulation, and holy cow does grind shine. With the right annotations, it managed to prove that bisimilarity is a bisimulation.

def Bisimilarity (lts : Lts State Label) : Bisimulation lts where
  rel s1 s2 :=  r : Bisimulation lts, r s1 s2
  is_bisimulation := by grind

Last updated: Dec 20 2025 at 21:32 UTC