(*This is an [F,V]-independent definition of meminj_preserves_globals*)
Definition meminj_preserves_globals_ind (globals: (block->Prop)*(block->Prop)) f :=
  (forall b, fst globals b -> f b = Some (b, 0)) /\
  (forall b, snd globals b -> f b = Some (b, 0)) /\
  (forall b1 b2 delta, snd globals b2 -> f b1 = Some (b2, delta) -> b1=b2).Definition genv2blocks {F V: Type} (ge: Genv.t F V) :=
  (fun b => exists id, Genv.find_symbol ge id = Some b,
   fun b => exists gv, Genv.find_var_info ge b = Some gv).

(* Specifications: *)
Lemma meminj_preserves_genv2blocks: forall {F V: Type} (ge: Genv.t F V) j, meminj_preserves_globals_ind (genv2blocks ge) j <-> Events.meminj_preserves_globals ge j.
Lemma meminj_preserves_genv2blocks: forall {F V: Type} (ge: Genv.t F V) j, meminj_preserves_globals_ind (genv2blocks ge) j <-> Events.meminj_preserves_globals ge j.
Lemma meminj_preserves_genv2blocks: forall {F V: Type} (ge: Genv.t F V) j, meminj_preserves_globals_ind (genv2blocks ge) j <-> Events.meminj_preserves_globals ge j.