Definition memory_block (sh: share) (n: Z) (v: val) : mpred :=
match v with
| Vptr b ofs => (!!(Ptrofs.unsigned ofs + n < Ptrofs.modulus)) && memory_block' sh (nat_of_Z n) b (Ptrofs.unsigned ofs)
| _ => FF
end.

Lemma nonreadable_memory_block_mapsto: forall sh b ofs t ch v,
~ readable_share sh ->
access_mode t = By_value ch ->
type_is_volatile t = false ->
(align_chunk ch | Ptrofs.unsigned ofs) ->
Ptrofs.unsigned ofs + size_chunk ch < Ptrofs.modulus ->
tc_val' t v ->
memory_block sh (size_chunk ch) (Vptr b ofs) = mapsto sh t (Vptr b ofs) v.