(*Safety from CSL to Coarse Asm*)
  Definition SemSource p:= (ClightSemanticsForMachines.ClightSem (Clight.globalenv p)).Definition THM m:=
    (HybridMachineSig.HybridMachineSig.ConcurMachineSemantics
       (Sem:=SemTarget)
       (ThreadPool:= threadPool.OrdinalPool.OrdinalThreadPool(Sem:=SemTarget))
       (HybridMachine:=concurrent_compiler_safety.TargetHybridMachine)
       (machineSig:= HybridMachine.DryHybridMachine.DryHybridMachineSig) m).Definition EHM m:=
    (HybridMachineSig.HybridMachineSig.ConcurMachineSemantics
       (Sem:=SemTarget)
       (ThreadPool:= threadPool.OrdinalPool.OrdinalThreadPool(Sem:=SemTarget))
       (HybridMachine:=@bareMach SemTarget)
       (machineSig:= BareMachine.BareMachineSig) m).

Lemma CSL2CoarseAsm_safety: forall U, exists init_mem_target init_mem_target' init_thread_target, let res_target := permissions.getCurPerm init_mem_target' in let res:=(res_target, permissions.empty_map) in let init_tp_target := threadPool.ThreadPool.mkPool (Sem:=SemTarget) (resources:=erasure_proof.Parching.DR) (Krun init_thread_target) res in let init_MachState_target := (U, nil, init_tp_target) in machine_semantics.initial_machine (THM (Genv.init_mem Asm_prog)) (Some res) init_mem_target init_tp_target init_mem_target' Main_ptr nil /\ forall n, HybridMachineSig.HybridMachineSig.HybridCoarseMachine.csafe (ThreadPool:=threadPool.OrdinalPool.OrdinalThreadPool (Sem:=SemTarget)) (machineSig:= HybridMachine.DryHybridMachine.DryHybridMachineSig) init_MachState_target init_mem_target' n.