(** * Semantic preservation *)
(** We now prove that the whole CompCert compiler (as characterized by the [match_prog] relation) preserves semantics by constructing the following simulations: - Forward simulations from [Cstrategy] to [Asm] (composition of the forward simulations for each pass). - Backward simulations for the same languages (derived from the forward simulation, using receptiveness of the source language and determinacy of [Asm]). - Backward simulation from [Csem] to [Asm] (composition of two backward simulations). *)
Remark forward_simulation_identity:
forall sem, forward_simulation sem sem.

Theorem cstrategy_semantic_preservation:
forall p tp,
match_prog p tp ->
forward_simulation (Cstrategy.semantics p) (Asm.semantics tp)
/\ backward_simulation (atomic (Cstrategy.semantics p)) (Asm.semantics tp).