Module ExtensionCompilability. Section ExtensionCompilability.
Variables
(F_S V_S F_T V_T: Type) (** source and target extension global environments *)
(xS xT: Type) (** corestates of source and target extended semantics *)
(fS fT vS vT: Type) (** global environments of core semantics *)
(cS cT: Type) (** corestates of source and target core semantics *)
(Z: Type) (** external states *)
(Zint: Type) (** portion of Z implemented by extension *)
(Zext: Type) (** portion of Z external to extension *)
(esemS: CoopCoreSem (Genv.t F_S V_S) xS) (** extended source semantics *)
(esemT: CoopCoreSem (Genv.t F_T V_T) xT) (** extended target semantics *)
(csemS: CoopCoreSem (Genv.t fS vS) cS) (** a set of core semantics *)
(csemT: CoopCoreSem (Genv.t fT vT) cT) (** a set of core semantics *)
(csig: ef_ext_spec mem Z) (** client signature *)
(esig: ef_ext_spec mem Zext). (** extension signature *)
Variables
(ge_S: Genv.t F_S V_S) (ge_T: Genv.t F_T V_T)
(ge_coreS: Genv.t fS vS) (ge_coreT: Genv.t fT vT).
Variable (E_S: @Extension.Sig mem Z Zint Zext (Genv.t F_S V_S) xS esemS _ cS csemS).
Variable (E_T: @Extension.Sig mem Z Zint Zext (Genv.t F_T V_T) xT esemT _ cT csemT).
Variable entry_points: list (val*val*signature).
Variable core_data: Type.
Variable match_state: core_data -> meminj -> cS -> mem -> cT -> mem -> Prop.
Implicit Arguments match_state [].
Variable core_ord: core_data -> core_data -> Prop.
Definition match_states (cd: core_data) (j: meminj) (s1: xS) m1 (s2: xT) m2 :=
match_state cd j (proj_core E_S s1) m1 (proj_core E_T s2) m2.

Lemma ExtensionCompilability:
EXTENSION_COMPILABILITY.Sig
esemS esemT csemS csemT ge_S ge_T ge_coreS ge_coreT E_S E_T
entry_points match_state core_ord.