Section MachineThreadDiagram.

(*One threas takes a "machine step" (or synchronization-step) *)
Lemma machine_thread_diagram:
forall (U0 : seq.seq nat) (tr : seq.seq machine_event) (st1 : C1)
(m1 : mem) (U' : seq.seq nat) (tr' : seq.seq machine_event) (st1' : C1)
(m1' : mem),
machine_semantics.machine_step (HCSem Sems Semt hb1 U) genv U0 tr st1 m1 U' tr' st1' m1' ->
forall (cd : option (Injindex compiler_simulation)) (st2 : C2) (mu : meminj) (m2 : mem),
concur_match cd mu st1 m1 st2 m2 ->
exists (st2' : C2) (m2' : mem) (cd' : option (Injindex compiler_simulation)),
concur_match cd' mu st1' m1' st2' m2' /\
machine_semantics.machine_step (HCSem Sems Semt hb2 U) genv U0 tr st2 m2 U' tr' st2' m2'.