Definition FreelistEffect m (L: list (Values.block * Z * Z)) (b:Values.block) (ofs:Z): bool :=
  List.fold_right (fun X E b z => match X with (bb,lo,hi) =>
                                   E b z || FreeEffect m lo hi bb b z
                                 end)
                 EmptyEffect L b ofs.

(* Specifications: *)
Lemma FreelistEffect_Dfalse: forall m bb lo hi L b ofs (F:FreelistEffect m ((bb, lo, hi) :: L) b ofs = false), FreelistEffect m L b ofs = false /\ FreeEffect m lo hi bb b ofs = false.
Lemma FreelistEffect_Dtrue: forall m bb lo hi L b ofs (F:FreelistEffect m ((bb, lo, hi) :: L) b ofs = true), FreelistEffect m L b ofs = true \/ FreeEffect m lo hi bb b ofs = true.
Lemma FreelistEffect_same: forall m bb lo hi mm L (F:Mem.free m bb lo hi = Some mm) b (VB: Mem.valid_block mm b) ofs, FreelistEffect mm L b ofs = false <-> FreelistEffect m L b ofs = false.
Lemma FreelistEffect_freelist: forall L m m' (FL: Mem.free_list m L = Some m'), Mem.unchanged_on (fun b ofs => FreelistEffect m L b ofs = false) m m'.