Definition bnd_from_init m := bounded_maps.bounded_map (snd (getMaxPerm m)) /\ (Mem.mem_access m).1 = fun z k => None.

(* Specifications: *)
Lemma mem_storebytes_counded_init:
forall m m' b ofs bytes,
bnd_from_init m ->
Mem.storebytes m b ofs bytes = Some m' ->
bnd_from_init m'.
Lemma mem_alloc_bounded_init:
forall m lo hi m1 b,
bnd_from_init m ->
Mem.alloc m lo hi = (m1, b) ->
bnd_from_init m1.
Lemma mem_free_bounded_init:
forall m lo hi m' b,
bnd_from_init m ->
Mem.free m b lo hi = Some m' ->
bnd_from_init m'.
Lemma mem_drop_perm_bounded_init:
forall m b lo hi P m',
bnd_from_init m ->
Mem.drop_perm m b lo hi P = Some m' ->
bnd_from_init m'.
Lemma mem_free_list_bounded_init:
forall m l m',
bnd_from_init m ->
Mem.free_list m l = Some m' ->
bnd_from_init m'.
Lemma preserve_bnd: memstep_preserve (fun m m' => bnd_from_init m -> bnd_from_init m').
Lemma CLight_step_mem_bound' ge c m c' m':
veric.Clight_new.cl_step ge c m c' m' -> bnd_from_init m -> bnd_from_init m'.
(*This proof is already in juicy_machine. * move it to a more general position.*)
Lemma Mem_canonical_useful: forall m loc k,
fst (Mem.mem_access m) loc k = None.
Lemma mem_bound_init_mem_bound:
forall m,
bounded_maps.bounded_map (snd (getMaxPerm m)) <->
bnd_from_init m.
Lemma CLight_step_mem_bound ge c m c' m':
veric.Clight_new.cl_step ge c m c' m' ->
bounded_maps.bounded_map (snd (getMaxPerm m)) ->
bounded_maps.bounded_map (snd (getMaxPerm m')).
Lemma mem_storebytes_counded_init:
forall m m' b ofs bytes,
bnd_from_init m ->
Mem.storebytes m b ofs bytes = Some m' ->
bnd_from_init m'.
Lemma mem_alloc_bounded_init:
forall m lo hi m1 b,
bnd_from_init m ->
Mem.alloc m lo hi = (m1, b) ->
bnd_from_init m1.
Lemma mem_free_bounded_init:
forall m lo hi m' b,
bnd_from_init m ->
Mem.free m b lo hi = Some m' ->
bnd_from_init m'.
Lemma mem_drop_perm_bounded_init:
forall m b lo hi P m',
bnd_from_init m ->
Mem.drop_perm m b lo hi P = Some m' ->
bnd_from_init m'.
Lemma mem_free_list_bounded_init:
forall m l m',
bnd_from_init m ->
Mem.free_list m l = Some m' ->
bnd_from_init m'.
Lemma preserve_bnd: memstep_preserve (fun m m' => bnd_from_init m -> bnd_from_init m').
Lemma CLight_step_mem_bound' ge c m c' m':
veric.Clight_new.cl_step ge c m c' m' -> bnd_from_init m -> bnd_from_init m'.
(*This proof is already in juicy_machine. * move it to a more general position.*)
Lemma Mem_canonical_useful: forall m loc k,
fst (Mem.mem_access m) loc k = None.
Lemma mem_bound_init_mem_bound:
forall m,
bounded_maps.bounded_map (snd (getMaxPerm m)) <->
bnd_from_init m.
Lemma CLight_step_mem_bound ge c m c' m':
veric.Clight_new.cl_step ge c m c' m' ->
bounded_maps.bounded_map (snd (getMaxPerm m)) ->
bounded_maps.bounded_map (snd (getMaxPerm m')).