Module Type ErasureSig.
(*  Module SCH: Scheduler with Module TID:=NatTID:= THESCH. Import SCH.*)
Declare Instance Sem (ge : Clight.genv) : Semantics.
Declare Instance JR : Resources.
Declare Instance JTP (ge : Clight.genv) : ThreadPool.ThreadPool(Sem := Sem ge).
Declare Instance JMS (ge : Clight.genv) : MachineSig(ThreadPool := JTP ge).
Declare Instance DilMem : DiluteMem.
Declare Instance scheduler : Scheduler.
Declare Instance JuicyMachine (ge : Clight.genv) : HybridMachine(machineSig:=JMS ge).
Notation JMachineSem ge := (MachineSemantics(HybridMachine := JuicyMachine ge)).
Notation jres := (@res JR).
Notation jstate ge := (@ThreadPool.t _ _ (JTP ge)).
Notation jmachine_state ge := (@MachState _ _ (JTP ge)).
Declare Instance DR : Resources.
Declare Instance DTP (ge : Clight.genv) : ThreadPool.ThreadPool(Sem := Sem ge).
Declare Instance DMS (ge : Clight.genv) : MachineSig(ThreadPool := DTP ge).
Declare Instance DryMachine (ge : Clight.genv) : HybridMachine(machineSig := DMS ge).
Notation DMachineSem ge := (MachineSemantics(HybridMachine := DryMachine ge)).
Notation dres := (@res DR).
Notation dstate ge := (@ThreadPool.t _ _ (DTP ge)).
Notation dmachine_state ge := (@MachState _ _ (DTP ge)).
(*Parameter parch_state : jstate ->  dstate.*)
Parameter match_st : forall (ge : Clight.genv), jstate ge -> dstate ge -> Prop.

(*match axioms*)
Axiom MTCH_cnt: forall {ge js tid ds},
match_st ge js ds ->
ThreadPool.containsThread js tid -> ThreadPool.containsThread ds tid.