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:
forall id u defs,
(PTree_Properties.of_list (filter_globdefs u nil (List.rev defs)))! id =
if IS.mem id u then (PTree_Properties.of_list defs)!id else None.