From mathcomp.ssreflect Require Import ssreflect ssrbool ssrnat ssrfun eqtype.
Set Bullet Behavior "Strict Subproofs".
(*Clight Machine *)
(*Asm Machine*)
Module Concurrent_Safety (CC_correct: CompCert_correctness).
(*Import the Clight Hybrid Machine*)
(*Import the Asm X86 Hybrid Machine*)
Module ConcurCC_correct:= (Concurrent_correctness CC_correct).
Definition Clight_init_state (p: Clight.program):=
Clight.start_stack (Clight.globalenv p).
Definition Asm_init_state (p: Asm.program):=
Asm.start_stack (@the_ge p).
Notation valid Sem:=
(valid dryResources Sem OrdinalPool.OrdinalThreadPool).
Definition opt_init_mem_source (p : Clight.program):=
(Genv.init_mem (Ctypes.program_of_program p)).
Definition opt_init_mem_target {F V} (tp:AST.program F V ):=
(Genv.init_mem tp).

Lemma match_valid_equiv:
forall U (p : Clight.program) (tp : Asm.program) (asm_genv_safety : Asm_core.safe_genv the_ge),
let SemSource:= (ClightSemanticsForMachines.ClightSem (Clight.globalenv p)) in
let SemTarget:= @X86Sem tp asm_genv_safety in
forall (m_s m_t : Memory.Mem.mem)
(j : Values.Val.meminj)
(C_source : OrdinalPool.t(Sem:=SemSource))
(C_target : OrdinalPool.t(Sem:=SemTarget)) tr
(SIM : HybridMachine_simulation (ClightConcurSem (opt_init_mem_source p))
(AsmConcurSem (opt_init_mem_target tp))) (cd : index SIM)
(Hmatch: match_state SIM cd j C_source m_s C_target m_t),
(valid SemSource) (tr, C_source, m_s) U <-> (valid SemTarget) (tr, C_target, m_t) U.