(*TODO: Move to ev_semantics*)
    Definition in_free_list (b : block) ofs xs :=
      exists x, List.In x xs /\
           let '(b', lo, hi) := x in
           b = b' /\
           (lo <= ofs < hi)%Z.

Lemma elim_perm_valid_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') (Hvalid: Mem.valid_block m b), (** Either the location was freed*) (permission_at m b ofs' Cur = Some Freeable /\ permission_at m' b ofs' Cur = None) \/ (** or it wasn't and the operation denoted by the event implies the permission*) ((List.In (event_semantics.Write b ofs bytes) T -> Mem.perm_order'' (permission_at m b ofs' Cur) (Some Writable) /\ Mem.perm_order'' (permission_at m' b ofs' Cur) (Some Writable)) /\ (forall n, List.In (event_semantics.Read b ofs n bytes) T -> Mem.perm_order'' (permission_at m b ofs' Cur) (Some Readable) /\ Mem.perm_order'' (permission_at m' b ofs' Cur) (Some Readable))).