Definition bb_order : bb_index -> bb_index -> Prop := lex_ord (clos_trans _ order) order'.Inductive bb_match_states: bb_index -> state L1 -> state L3 -> Prop :=
  | bb_match_later: forall i1 i2 s1 s3 s2x s2y,
      match_states i1 s1 s2x -> Star L2 s2x E0 s2y -> match_states' i2 s2y s3 ->
      bb_match_states (i1, i2) s1 s3.Inductive bb_match_states: bb_index -> state L1 -> state L3 -> Prop :=
  | bb_match_later: forall i1 i2 s1 s3 s2x s2y,
      match_states i1 s1 s2x -> Star L2 s2x E0 s2y -> match_states' i2 s2y s3 ->
      bb_match_states (i1, i2) s1 s3.

(* Specifications: *)
Lemma bb_match_at: forall i1 i2 s1 s3 s2, match_states i1 s1 s2 -> match_states' i2 s2 s3 -> bb_match_states (i1, i2) s1 s3.
Lemma bb_simulation_base: forall s3 t s3', Step L3 s3 t s3' -> forall i1 s1 i2 s2, match_states i1 s1 s2 -> match_states' i2 s2 s3 -> safe L1 s1 -> exists i', exists s1', (Plus L1 s1 t s1' \/ (Star L1 s1 t s1' /\ bb_order i' (i1, i2))) /\ bb_match_states i' s1' s3'.
Lemma bb_simulation: forall s3 t s3', Step L3 s3 t s3' -> forall i s1, bb_match_states i s1 s3 -> safe L1 s1 -> exists i', exists s1', (Plus L1 s1 t s1' \/ (Star L1 s1 t s1' /\ bb_order i' i)) /\ bb_match_states i' s1' s3'.
Lemma compose_backward_simulation: forall L1 L2 L3, single_events L3 -> backward_simulation L1 L2 -> backward_simulation L2 L3 -> backward_simulation L1 L3.
Lemma bb_match_at: forall i1 i2 s1 s3 s2, match_states i1 s1 s2 -> match_states' i2 s2 s3 -> bb_match_states (i1, i2) s1 s3.
Lemma bb_simulation_base: forall s3 t s3', Step L3 s3 t s3' -> forall i1 s1 i2 s2, match_states i1 s1 s2 -> match_states' i2 s2 s3 -> safe L1 s1 -> exists i', exists s1', (Plus L1 s1 t s1' \/ (Star L1 s1 t s1' /\ bb_order i' (i1, i2))) /\ bb_match_states i' s1' s3'.
Lemma bb_simulation: forall s3 t s3', Step L3 s3 t s3' -> forall i s1, bb_match_states i s1 s3 -> safe L1 s1 -> exists i', exists s1', (Plus L1 s1 t s1' \/ (Star L1 s1 t s1' /\ bb_order i' i)) /\ bb_match_states i' s1' s3'.
Lemma compose_backward_simulation: forall L1 L2 L3, single_events L3 -> backward_simulation L1 L2 -> backward_simulation L2 L3 -> backward_simulation L1 L3.