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

Lemma start_step_diagram:
forall (m : option mem) (tge : HybridMachineSig.G)
(U : list nat) (st1 : ThreadPool (Some hb))
(m1 : mem) (tr1 tr2 : HybridMachineSig.event_trace)
(st1' : ThreadPool (Some hb)) (m' : mem)
(cd : option compiler_index) (st2 : ThreadPool (Some (S hb)))
(mu : meminj) (m2 : mem) (tid : nat)
(Htid : ThreadPool.containsThread st1 tid),
concur_match cd mu st1 m1 st2 m2 ->
List.Forall2 (inject_mevent mu) tr1 tr2 ->
HybridMachineSig.schedPeek U = Some tid ->
HybridMachineSig.start_thread m1 Htid st1' m' ->
exists
(st2' : ThreadPool (Some (S hb))) (m2' : mem)
(cd' : option compiler_index) (mu' : meminj),
concur_match cd' mu' st1' (HybridMachineSig.diluteMem m') st2'
m2' /\
List.Forall2 (inject_mevent mu') tr1 tr2 /\
machine_semantics.machine_step(HybConcSem (Some (S hb)) m) tge
U tr2 st2 m2 (HybridMachineSig.yield
(Scheduler:=HybridMachineSig.HybridCoarseMachine.scheduler)
U) tr2 st2' m2'.