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

(* Specifications: *)
Theorem find_funct_ptr_transf_partial:
forall b f,
find_funct_ptr (globalenv p) b = Some f ->
exists tf,
find_funct_ptr (globalenv tp) b = Some tf /\ transf f = OK tf.
Theorem find_funct_transf_partial:
forall v f,
find_funct (globalenv p) v = Some f ->
exists tf,
find_funct (globalenv tp) v = Some tf /\ transf f = OK tf.
Theorem find_symbol_transf_partial:
forall (s : ident),
find_symbol (globalenv tp) s = find_symbol (globalenv p) s.
Theorem senv_transf_partial:
Senv.equiv (to_senv (globalenv p)) (to_senv (globalenv tp)).
Theorem init_mem_transf_partial:
forall m, init_mem p = Some m -> init_mem tp = Some m.
Theorem find_funct_ptr_transf_partial:
forall b f,
find_funct_ptr (globalenv p) b = Some f ->
exists tf,
find_funct_ptr (globalenv tp) b = Some tf /\ transf f = OK tf.
Theorem find_funct_transf_partial:
forall v f,
find_funct (globalenv p) v = Some f ->
exists tf,
find_funct (globalenv tp) v = Some tf /\ transf f = OK tf.
Theorem find_symbol_transf_partial:
forall (s : ident),
find_symbol (globalenv tp) s = find_symbol (globalenv p) s.
Theorem senv_transf_partial:
Senv.equiv (to_senv (globalenv p)) (to_senv (globalenv tp)).
Theorem init_mem_transf_partial:
forall m, init_mem p = Some m -> init_mem tp = Some m.