Corollary find_funct_ptr_inversion:
  forall p b f,
  find_funct_ptr (globalenv p) b = Some f ->
  exists id, In (id, Gfun f) (prog_defs p).Corollary find_funct_inversion:
  forall p v f,
  find_funct (globalenv p) v = Some f ->
  exists id, In (id, Gfun f) (prog_defs p).

(* Specifications: *)
Theorem find_funct_ptr_prop: forall (P: F -> Prop) p b f, (forall id f, In (id, Gfun f) (prog_defs p) -> P f) -> find_funct_ptr (globalenv p) b = Some f -> P f.
Theorem find_funct_prop: forall (P: F -> Prop) p v f, (forall id f, In (id, Gfun f) (prog_defs p) -> P f) -> find_funct (globalenv p) v = Some f -> P f.
Theorem global_addresses_distinct: forall ge id1 id2 b1 b2, id1 <> id2 -> find_symbol ge id1 = Some b1 -> find_symbol ge id2 = Some b2 -> b1 <> b2.
Theorem invert_find_symbol: forall ge id b, invert_symbol ge b = Some id -> find_symbol ge id = Some b.
Theorem find_invert_symbol: forall ge id b, find_symbol ge id = Some b -> invert_symbol ge b = Some id.
Theorem find_funct_ptr_prop: forall (P: F -> Prop) p b f, (forall id f, In (id, Gfun f) (prog_defs p) -> P f) -> find_funct_ptr (globalenv p) b = Some f -> P f.
Theorem find_funct_prop: forall (P: F -> Prop) p v f, (forall id f, In (id, Gfun f) (prog_defs p) -> P f) -> find_funct (globalenv p) v = Some f -> P f.
Theorem global_addresses_distinct: forall ge id1 id2 b1 b2, id1 <> id2 -> find_symbol ge id1 = Some b1 -> find_symbol ge id2 = Some b2 -> b1 <> b2.
Theorem invert_find_symbol: forall ge id b, invert_symbol ge b = Some id -> find_symbol ge id = Some b.
Theorem find_invert_symbol: forall ge id b, find_symbol ge id = Some b -> invert_symbol ge b = Some id.