Opaque OrdinalPool.containsThread.
(** *** Safety and simulation lemmas *)

Lemma strong_tsim_stop:
forall tpc trc tpc' trc' tpf mc mc' mf i fi fg
(pfc: containsThread tpc i) (pff: containsThread tpf i)
(Hcompc: mem_compatible tpc mc) (Hcompf: mem_compatible tpf mf)
(Hfg: forall b1 b2, fg b1 = Some b2 -> b1 = b2)
(Hge_wd: ge_wd fg the_ge)
(Hge_incr: ren_incr fg fi)
(HinvF: invariant tpf)
(Hstrong_sim: strong_tsim fi pfc pff Hcompc Hcompf)
(Hmem_wd: valid_mem mc)
(Hstep: cmachine_step ([:: i], trc, tpc) mc ([::], trc', tpc') mc'),
let mrestr := restrPermMap ((compat_th _ _ Hcompc pfc).1) in
forall (Hsuspend: pfc$mrestr @ S),
exists tpf',
suspend_thread mf pff tpf' /\
forall (Hcompc': mem_compatible tpc' mc') (Hcompf' : mem_compatible tpf' mf)
(pfc': containsThread tpc' i) (pff': containsThread tpf' i),
strong_tsim fi pfc' pff' Hcompc' Hcompf'.