(*CompCert imports*)
Definition main_sig : signature := mksignature nil (Some AST.Tint).

(* Specifications: *)
Lemma cc_sim_coop_sim: forall {F1 C1 V1 F2 C2 V2:Type}
(Sem1 : CoopCoreSem (Genv.t F1 V1) C1)
(Sem2 : CoopCoreSem(Genv.t F2 V2) C2)
(P1 : AST.program F1 V1)
(P2 : AST.program F2 V2) I epts ExternIdents
(CCSim: CompilerCorrectness.cc_sim I ExternIdents  epts F1 C1 V1 F2 C2 V2 Sem1 Sem2 P1 P2),
Forward_simulation.coop_sim Sem1 Sem2 (Genv.globalenv P1) (Genv.globalenv P2) epts.
Lemma coop_sim_cc_sim: forall {F1 C1 V1 F2 C2 V2:Type}
(Sem1 : CoopCoreSem (Genv.t F1 V1) C1)
(Sem2 : CoopCoreSem(Genv.t F2 V2) C2)
(P1 : AST.program F1 V1)
(P2 : AST.program F2 V2)
(I: forall F C V
(Sem : CoopCoreSem (Genv.t F V) C)
(P : AST.program F V), Prop)
epts ExternIdents
(InitMem: forall m1 : mem, Genv.init_mem P1 = Some m1 -> Genv.init_mem P2 = Some m1)
(Epts: CompilerCorrectness.entryPts_ok P1 P2 ExternIdents epts)
(Main: prog_main P1 = prog_main P2)
(GENV: CompilerCorrectness.GenvHyp P1 P2)
(HP1: I F1 C1 V1 Sem1 P1)
(HP2: I F2 C2 V2 Sem2 P2)
(Externs: CompilerCorrectness.externvars_ok P1 ExternIdents)
m (IM: Genv.init_mem P1 = Some m),
Forward_simulation.coop_sim Sem1 Sem2 (Genv.globalenv P1) (Genv.globalenv P2) epts ->
CompilerCorrectness.cc_sim I ExternIdents  epts F1 C1 V1 F2 C2 V2 Sem1 Sem2 P1 P2.