(** * Correctness of the CompCert compiler *)
(** Combining the results above, we obtain semantic preservation for two usage scenarios of CompCert: compilation of a single monolithic program, and separate compilation of multiple source files followed by linking.  In the monolithic case, we have a whole C program [p] that is compiled in one run of CompCert to a whole Asm program [tp]. Then, [tp] preserves the semantics of [p], in the sense that there exists a backward simulation of the dynamic semantics of [p] by the dynamic semantics of [tp]. *)

(* Specifications: *)
Theorem transf_c_program_correct:
forall p tp,
transf_c_program p = OK tp ->
backward_simulation (Csem.semantics p) (Asm.semantics tp).