End Injection.
End ExposingMemory.
(* Section InductiveDefinitions.   Variables L1 L2: semantics. Variable get_mem1: state L1 -> mem. Variable get_mem2: state L2 -> mem.  Arguments fsim_properties_eq: clear implicits.  Inductive forward_equality: Prop := Forward_equality (index: Type) (order: index -> index -> Prop) (match_states: index -> state L1 -> state L2 -> Prop) (props: fsim_properties_eq L1 L2 get_mem1 get_mem2 index order match_states).  Arguments fsim_properties_ext: clear implicits.  Inductive forward_extension: Prop := Forward_extension (index: Type) (order: index -> index -> Prop) (match_states: index -> state L1 -> state L2 -> Prop) (props: fsim_properties_ext L1 L2 get_mem1 get_mem2 index order match_states).  Lemma EqEx_sim: forward_equality -> forward_extension.   Arguments fsim_properties_inj: clear implicits.  Inductive forward_injection: Prop := Forward_injection (index: Type) (order: index -> index -> Prop) (match_states: index -> meminj -> state L1 -> state L2 -> Prop) (props: fsim_properties_inj L1 L2 get_mem1 get_mem2 index order match_states).  End InductiveDefinitions. *)
Section Composition.
Variables L1 L2 L3: semantics.
Variable get_mem1: state L1 -> mem.
Variable get_mem2: state L2 -> mem.
Variable get_mem3: state L3 -> mem.

(* Specifications: *)
Lemma injection_extension_composition:
@fsim_properties_inj L1 L2 get_mem1 get_mem2 ->
@fsim_properties_ext L2 L3 get_mem2 get_mem3 ->
@fsim_properties_inj L1 L3 get_mem1 get_mem3.
Lemma injection_extension_composition:
@fsim_properties_inj L1 L2 get_mem1 get_mem2 ->
@fsim_properties_ext L2 L3 get_mem2 get_mem3 ->
@fsim_properties_inj L1 L3 get_mem1 get_mem3.