eapply concur_stable_thread_step_source; eauto.
-- admit. (*Follows from mem_sem and the step proven in the follwoing goal*)
(*Prove the machine step*)
-- left.
eapply machine_semantics_lemmas.thread_step_plus_one.
econstructor; simpl; eauto.
econstructor; eauto.
* admit. (*Invariant: going to need to add this to the match relation *)
* econstructor; simpl.
instantiate (3 := (memcompat2 H0)).
inversion TINJ; subst.
(*Have the step STEP, but have to show it's an internal step!*)
admit.
* simpl; repeat f_equal. apply proof_irr. apply proof_irr.
Admitted.
End HybridThreadDiagram.
Section MachineThreadDiagram.

(* Specifications: *)
(*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'.