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.