Definition bisimulation {A: Type} (bis: relation A) (R: relation A): Prop :=
  forall m n, bis m n ->
    (forall m', R m m' -> exists n', R n n' /\ bis m' n') /\
    (forall n', R n n' -> exists m', R m m' /\ bis m' n').Class Bisimulation {A: Type} (bis: relation A) (R: relation A): Prop := {
  bis_l: forall m n, bis m n ->
            forall m', R m m' -> exists n', R n n' /\ bis m' n';
  bis_r: forall m n, bis m n ->
            forall n', R n n' -> exists m', R m m' /\ bis m' n'
}.Class Bisimulation {A: Type} (bis: relation A) (R: relation A): Prop := {
  bis_l: forall m n, bis m n ->
            forall m', R m m' -> exists n', R n n' /\ bis m' n';
  bis_r: forall m n, bis m n ->
            forall n', R n n' -> exists m', R m m' /\ bis m' n'
}.Class Bisimulation {A: Type} (bis: relation A) (R: relation A): Prop := {
  bis_l: forall m n, bis m n ->
            forall m', R m m' -> exists n', R n n' /\ bis m' n';
  bis_r: forall m n, bis m n ->
            forall n', R n n' -> exists m', R m m' /\ bis m' n'
}.

(* Specifications: *)
Lemma eq_bis {A: Type} (R: relation A): Bisimulation eq R.
Lemma full_bis {A: Type} (R: relation A) {_: Serial R}: Bisimulation full_relation R.