Definition bmatch (m: mem) (b: block) (ab: ablock) : Prop :=
smatch m b ab.(ab_summary) /\
forall chunk ofs v, Mem.load chunk m b ofs = Some v -> vmatch v (ablock_load chunk ab ofs).

(* Specifications: *)
Lemma bmatch_ext:
forall m b ab m',
bmatch m b ab ->
(forall ofs n bytes, Mem.loadbytes m' b ofs n = Some bytes -> n >= 0 -> Mem.loadbytes m b ofs n = Some bytes) ->
bmatch m' b ab.
Lemma bmatch_inv:
forall m b ab m',
bmatch m b ab ->
(forall ofs n, n >= 0 -> Mem.loadbytes m' b ofs n = Mem.loadbytes m b ofs n) ->
bmatch m' b ab.
Lemma ablock_load_sound:
forall chunk m b ofs v ab,
Mem.load chunk m b ofs = Some v ->
bmatch m b ab ->
vmatch v (ablock_load chunk ab ofs).
Lemma ablock_load_anywhere_sound:
forall chunk m b ofs v ab,
Mem.load chunk m b ofs = Some v ->
bmatch m b ab ->
vmatch v (ablock_load_anywhere chunk ab).
Lemma ablock_init_sound:
forall m b p, smatch m b p -> bmatch m b (ablock_init p).
Lemma ablock_store_anywhere_sound:
forall chunk m b ofs v m' b' ab av,
Mem.store chunk m b ofs v = Some m' ->
bmatch m b' ab ->
vmatch v av ->
bmatch m' b' (ablock_store_anywhere chunk ab av).