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 memory_block_split:
forall (sh : share) (b : block) (ofs n m : Z),
0 <= n ->
0 <= m ->
n + m <= n + m + ofs < Ptrofs.modulus ->
memory_block sh (n + m) (Vptr b (Ptrofs.repr ofs)) =
memory_block sh n (Vptr b (Ptrofs.repr ofs)) *
memory_block sh m (Vptr b (Ptrofs.repr (ofs + n))).