Notation syncStepF := (@syncStep DryHybridMachine.dryResources _ OrdinalPool.OrdinalThreadPool
                                     DryHybridMachine.DryHybridMachineSig).Notation syncStepE := (@syncStep BareMachine.resources _ OrdinalPool.OrdinalThreadPool
                                     BareMachine.BareMachineSig).Notation start_threadF := (@start_thread DryHybridMachine.dryResources _ OrdinalPool.OrdinalThreadPool
                                             DryHybridMachine.DryHybridMachineSig).Notation start_threadE := (@start_thread BareMachine.resources _ OrdinalPool.OrdinalThreadPool
                                             BareMachine.BareMachineSig).Notation resume_threadF := (@resume_thread DryHybridMachine.dryResources _ OrdinalPool.OrdinalThreadPool
                                               DryHybridMachine.DryHybridMachineSig).Notation resume_threadE := (@resume_thread BareMachine.resources _ OrdinalPool.OrdinalThreadPool
                                               BareMachine.BareMachineSig).Notation suspend_threadF := (@suspend_thread DryHybridMachine.dryResources _ OrdinalPool.OrdinalThreadPool
                                                 DryHybridMachine.DryHybridMachineSig).Notation suspend_threadE := (@suspend_thread BareMachine.resources _ OrdinalPool.OrdinalThreadPool
                                                 BareMachine.BareMachineSig).Notation threadStepF := (@threadStep DryHybridMachine.dryResources _ OrdinalPool.OrdinalThreadPool
                                         DryHybridMachine.DryHybridMachineSig).Notation threadStepE := (@threadStep BareMachine.resources _ OrdinalPool.OrdinalThreadPool
                                         BareMachine.BareMachineSig).Notation fstep := (corestep (@fine_semantics _ initU)).Notation scstep := (corestep (@bare_semantics _ initU)).Notation fsafe := (@HybridFineMachine.fsafe DryHybridMachine.dryResources _ OrdinalPool.OrdinalThreadPool
                                                  DryHybridMachine.DryHybridMachineSig FineDilMem).Notation sc_safe := (@HybridFineMachine.fsafe BareMachine.resources _ OrdinalPool.OrdinalThreadPool
                                                  BareMachine.BareMachineSig BareDilMem).Notation fexecution := (@fine_execution _ FineDilMem DryHybridMachine.dryResources).Notation sc_execution := (@fine_execution _ BareDilMem BareMachine.resources).

Lemma sc_sim: forall tp1 tp1' i U tr1 tr1' tr2 m1 m1' tp2 m2 (HerasePool: threadPool_erasure tp1 tp1') (Hmem_erasure: mem_erasure m1 m1') (Hfstep: fstep (i :: U, tr1, tp1) m1 (U, tr2, tp2) m2), exists tp2' m2' tr2', scstep (i :: U, tr1', tp1') m1' (U, tr2', tp2') m2' /\ threadPool_erasure tp2 tp2' /\ mem_erasure m2 m2' /\ (trace_erasure tr1 tr1' -> trace_erasure tr2 tr2').