Section BACKWARD_SIMULATIONS.
Context L1 L2 index order match_states (S: bsim_properties L1 L2 index order match_states).
Definition safe_along_behavior (s: state L1) (b: program_behavior) : Prop :=
forall t1 s' b2, Star L1 s t1 s' -> b = behavior_app t1 b2 ->
(exists r, final_state L1 s' r)
\/ (exists t2, exists s'', Step L1 s' t2 s'').
Remark safe_along_safe:
forall s b, safe_along_behavior s b -> safe L1 s.
Remark star_safe_along:
forall s b t1 s' b2,
safe_along_behavior s b ->
Star L1 s t1 s' -> b = behavior_app t1 b2 ->
safe_along_behavior s' b2.
Remark not_safe_along_behavior:
forall s b,
~ safe_along_behavior s b ->
exists t, exists s',
behavior_prefix t b
/\ Star L1 s t s'
/\ Nostep L1 s'
/\ (forall r, ~(final_state L1 s' r)).
End BACKWARD_SIMULATIONS.

Theorem backward_simulation_behavior_improves:
forall L1 L2, backward_simulation L1 L2 ->
forall beh2, program_behaves L2 beh2 ->
exists beh1, program_behaves L1 beh1 /\ behavior_improves beh1 beh2.