Local Hint Resolve storebytes_valid_block_1 storebytes_valid_block_2: mem.

(* Specifications: *)
Theorem storebytes_range_perm:
range_perm m1 b ofs (ofs + Z.of_nat (length bytes)) Cur Writable.
Theorem loadbytes_storebytes_same:
loadbytes m2 b ofs (Z.of_nat (length bytes)) = Some bytes.
Theorem loadbytes_storebytes_disjoint:
forall b' ofs' len,
len >= 0 ->
b' <> b \/ Intv.disjoint (ofs', ofs' + len) (ofs, ofs + Z.of_nat (length bytes)) ->
loadbytes m2 b' ofs' len = loadbytes m1 b' ofs' len.
Theorem loadbytes_storebytes_other:
forall b' ofs' len,
len >= 0 ->
b' <> b
\/ ofs' + len <= ofs
\/ ofs + Z.of_nat (length bytes) <= ofs' ->
loadbytes m2 b' ofs' len = loadbytes m1 b' ofs' len.
Theorem load_storebytes_other:
forall chunk b' ofs',
b' <> b
\/ ofs' + size_chunk chunk <= ofs
\/ ofs + Z.of_nat (length bytes) <= ofs' ->
load chunk m2 b' ofs' = load chunk m1 b' ofs'.
Theorem storebytes_range_perm:
range_perm m1 b ofs (ofs + Z.of_nat (length bytes)) Cur Writable.
Theorem loadbytes_storebytes_same:
loadbytes m2 b ofs (Z.of_nat (length bytes)) = Some bytes.
Theorem loadbytes_storebytes_disjoint:
forall b' ofs' len,
len >= 0 ->
b' <> b \/ Intv.disjoint (ofs', ofs' + len) (ofs, ofs + Z.of_nat (length bytes)) ->
loadbytes m2 b' ofs' len = loadbytes m1 b' ofs' len.
Theorem loadbytes_storebytes_other:
forall b' ofs' len,
len >= 0 ->
b' <> b
\/ ofs' + len <= ofs
\/ ofs + Z.of_nat (length bytes) <= ofs' ->
loadbytes m2 b' ofs' len = loadbytes m1 b' ofs' len.
Theorem load_storebytes_other:
forall chunk b' ofs',
b' <> b
\/ ofs' + size_chunk chunk <= ofs
\/ ofs + Z.of_nat (length bytes) <= ofs' ->
load chunk m2 b' ofs' = load chunk m1 b' ofs'.