End BACKWARD_SIMU_DIAGRAMS.
(** ** Backward simulation of transition sequences *)
Section BACKWARD_SIMULATION_SEQUENCES.
Context L1 L2 index order match_states (S: bsim_properties L1 L2 index order match_states).

(* Specifications: *)
Lemma bsim_E0_star:
forall s2 s2', Star L2 s2 E0 s2' ->
forall i s1, match_states i s1 s2 -> safe L1 s1 ->
exists i', exists s1', Star L1 s1 E0 s1' /\ match_states i' s1' s2'.
Lemma bsim_safe:
forall i s1 s2,
match_states i s1 s2 -> safe L1 s1 -> safe L2 s2.
Lemma bsim_E0_plus:
forall s2 t s2', Plus L2 s2 t s2' -> t = E0 ->
forall i s1, match_states i s1 s2 -> safe L1 s1 ->
(exists i', exists s1', Plus L1 s1 E0 s1' /\ match_states i' s1' s2')
\/ (exists i', clos_trans _ order i' i /\ match_states i' s1 s2').
Lemma star_non_E0_split:
forall s2 t s2', Star L2 s2 t s2' -> (length t = 1)%nat ->
exists s2x, exists s2y, Star L2 s2 E0 s2x /\ Step L2 s2x t s2y /\ Star L2 s2y E0 s2'.
Lemma bsim_E0_star:
forall s2 s2', Star L2 s2 E0 s2' ->
forall i s1, match_states i s1 s2 -> safe L1 s1 ->
exists i', exists s1', Star L1 s1 E0 s1' /\ match_states i' s1' s2'.
Lemma bsim_safe:
forall i s1 s2,
match_states i s1 s2 -> safe L1 s1 -> safe L2 s2.
Lemma bsim_E0_plus:
forall s2 t s2', Plus L2 s2 t s2' -> t = E0 ->
forall i s1, match_states i s1 s2 -> safe L1 s1 ->
(exists i', exists s1', Plus L1 s1 E0 s1' /\ match_states i' s1' s2')
\/ (exists i', clos_trans _ order i' i /\ match_states i' s1 s2').
Lemma star_non_E0_split:
forall s2 t s2', Star L2 s2 t s2' -> (length t = 1)%nat ->
exists s2x, exists s2y, Star L2 s2 E0 s2x /\ Step L2 s2x t s2y /\ Star L2 s2y E0 s2'.