End ANALYSIS.
(** Properties of the elimination of unused global definitions. *)
Section TRANSFORMATION.
Variable p: program.
Variable used: IS.t.
Let add_def (m: prog_map) idg := PTree.set (fst idg) (snd idg) m.
Remark filter_globdefs_accu:
forall defs accu1 accu2 u,
filter_globdefs u (accu1 ++ accu2) defs = filter_globdefs u accu1 defs ++ accu2.
Remark filter_globdefs_nil:
forall u accu defs,
filter_globdefs u accu defs = filter_globdefs u nil defs ++ accu.

Lemma filter_globdefs_map_1:
forall id l u m1,
IS.mem id u = false ->
m1!id = None ->
(fold_left add_def (filter_globdefs u nil l) m1)!id = None.