Goal forall m1 mu (WD: SM_wd mu) vals b, pubBlocksSrc mu b = true ->
           REACH m1 (exportedSrc mu vals) b = true.Definition local_out_of_reach mu (m : mem) (b : block) (ofs : Z): Prop :=
  locBlocksTgt mu b = true /\
  forall b0 delta, local_of mu b0 = Some (b, delta) ->
                  (~ Mem.perm m b0 (ofs - delta) Max Nonempty \/
                   pubBlocksSrc mu b0 = false).Definition genv2blocksBool {F V : Type} (ge : Genv.t F V):=
  (fun b =>
      match Genv.invert_symbol ge b with
        Some id => true
      | None => false
      end,
   fun b => match Genv.find_var_info ge b with
                  Some gv => true
                | None => false
            end).

(* Specifications: *)
Lemma genvs_domain_eq_match_genvsB: forall {F1 V1 F2 V2:Type} (ge1: Genv.t F1 V1) (ge2: Genv.t F2 V2), genvs_domain_eq ge1 ge2 -> genv2blocksBool ge1 = genv2blocksBool ge2.
Lemma genv2blocksBool_char1: forall F V (ge : Genv.t F V) b, (fst (genv2blocksBool ge)) b = true <-> fst (genv2blocks ge) b.
Lemma genv2blocksBool_char2: forall F V (ge : Genv.t F V) b, (snd (genv2blocksBool ge)) b = true <-> snd (genv2blocks ge) b.
Lemma genv2blocksBool_char1': forall F V (ge : Genv.t F V) b, (fst (genv2blocksBool ge)) b = false <-> ~ fst (genv2blocks ge) b.
Lemma genv2blocksBool_char2': forall F V (ge : Genv.t F V) b, (snd (genv2blocksBool ge)) b = false <-> ~ snd (genv2blocks ge) b.