End SIMULATION_STEP.
(** Simulation when one transition in the first program corresponds to zero or one transitions in the second program. However, there is no stuttering: infinitely many transitions in the source program must correspond to infinitely many transitions in the second program. *)
Section SIMULATION_OPT.
Variable measure: state L1 -> nat.
Hypothesis simulation:
forall s1 t s1', Step L1 s1 t s1' ->
forall s2, match_states s1 s2 ->
(exists s2', Step L2 s2 t s2' /\ match_states s1' s2')
\/ (measure s1' < measure s1 /\ t = E0 /\ match_states s1' s2)%nat.

Lemma forward_simulation_opt: forward_simulation L1 L2.