End TRANSFORM_PARTIAL.
(** Special case for total transformations that do not depend on the compilation unit *)
Section TRANSFORM_TOTAL.
Context {A B V: Type} {LA: Linker A} {LV: Linker V}.
Context {transf: A -> B} {p: program A V} {tp: program B V}.
Hypothesis progmatch: match_program (fun cu f tf => tf = transf f) eq p tp.

(* Specifications: *)
Theorem find_funct_ptr_transf:
forall b f,
find_funct_ptr (globalenv p) b = Some f ->
find_funct_ptr (globalenv tp) b = Some (transf f).
Theorem find_funct_transf:
forall v f,
find_funct (globalenv p) v = Some f ->
find_funct (globalenv tp) v = Some (transf f).
Theorem find_symbol_transf:
forall (s : ident),
find_symbol (globalenv tp) s = find_symbol (globalenv p) s.
Theorem senv_transf:
Senv.equiv (to_senv (globalenv p)) (to_senv (globalenv tp)).
Theorem init_mem_transf:
forall m, init_mem p = Some m -> init_mem tp = Some m.
Theorem find_funct_ptr_transf:
forall b f,
find_funct_ptr (globalenv p) b = Some f ->
find_funct_ptr (globalenv tp) b = Some (transf f).
Theorem find_funct_transf:
forall v f,
find_funct (globalenv p) v = Some f ->
find_funct (globalenv tp) v = Some (transf f).
Theorem find_symbol_transf:
forall (s : ident),
find_symbol (globalenv tp) s = find_symbol (globalenv p) s.
Theorem senv_transf:
Senv.equiv (to_senv (globalenv p)) (to_senv (globalenv tp)).
Theorem init_mem_transf:
forall m, init_mem p = Some m -> init_mem tp = Some m.