(** Properties related to [load] *)
Definition read_as_zero (m: mem) (b: block) (ofs len: Z) : Prop :=
forall chunk p,
ofs <= p -> p + size_chunk chunk <= ofs + len ->
(align_chunk chunk | p) ->
Mem.load chunk m b p =
Some (match chunk with
| Mint8unsigned | Mint8signed | Mint16unsigned | Mint16signed | Mint32 => Vint Int.zero
| Mint64 => Vlong Int64.zero
| Mfloat32 => Vsingle Float32.zero
| Mfloat64 => Vfloat Float.zero
| Many32 | Many64 => Vundef
end).
Remark read_as_zero_unchanged:
forall (P: block -> Z -> Prop) m b ofs len m',
read_as_zero m b ofs len ->
Mem.unchanged_on P m m' ->
(forall i, ofs <= i < ofs + len -> P b i) ->
read_as_zero m' b ofs len.

(* Specifications: *)
Lemma store_zeros_read_as_zero:
forall m b p n m',
store_zeros m b p n = Some m' ->
read_as_zero m' b p n.
Lemma store_zeros_read_as_zero:
forall m b p n m',
store_zeros m b p n = Some m' ->
read_as_zero m' b p n.