(*Some (ThreadPool.getThreadR Htid, virtue1)*)
(*Some virtue2*)

Lemma external_step_diagram:
forall (U : list nat) (tr1 tr2 : HybridMachineSig.event_trace) (st1 : ThreadPool.t)
(m1 : mem) (st1' : ThreadPool.t) (m1' : mem) (tid : nat) (ev : Events.sync_event),
forall (cd : option compiler_index) (st2 : ThreadPool.t) (mu : meminj) (m2 : mem),
concur_match cd mu st1 m1 st2 m2 ->
List.Forall2 (inject_mevent mu) tr1 tr2 ->
forall (Htid : ThreadPool.containsThread st1 tid) (Hcmpt : mem_compatible st1 m1),
HybridMachineSig.schedPeek U = Some tid ->
syncStep true Htid Hcmpt st1' m1' ev ->
exists ev' (st2' : t) (m2' : mem) (cd' : option compiler_index)
(mu' : meminj),
concur_match cd' mu' st1' m1' st2' m2' /\
List.Forall2 (inject_mevent mu') (seq.cat tr1 (Events.external tid ev :: nil)) (seq.cat tr2 (Events.external tid ev' :: nil)) /\
HybridMachineSig.external_step
(scheduler:=HybridMachineSig.HybridCoarseMachine.scheduler) U tr2 st2 m2 (HybridMachineSig.schedSkip U)
(seq.cat tr2 (Events.external tid ev' :: nil)) st2' m2'.