(** Either the location was freed*)
(** or it wasn't and the operation denoted by the event implies the permission*)

(* Specifications: *)
Lemma free_list_valid_block:
forall m m' l b,
Mem.free_list m l = Some m' ->
Mem.valid_block m b <-> Mem.valid_block m' b.
Lemma elim_perm_invalid_block:
forall m T m' b ofs ofs' bytes
(Hintv: Intv.In ofs' (ofs, (ofs + Z.of_nat (length bytes))%Z))
(Helim: ev_elim m T m')
(Hinvalid: ~ Mem.valid_block m b),
(List.In (event_semantics.Write b ofs bytes) T ->
(permission_at m' b ofs' Cur = Some Freeable \/ permission_at m' b ofs' Cur = None)
/\ Mem.valid_block m' b) /\
(forall n,
List.In (event_semantics.Read b ofs n bytes) T ->
(permission_at m' b ofs' Cur = Some Freeable \/ permission_at m' b ofs' Cur =  None) /\ Mem.valid_block m' b).