(* The converse is not quite true, because "readable" does constraint to NoneP *)
(* NOT TRUE, because of CompCert_AV.valid problems. Lemma jam_con: forall A (S: A -> Prop) P Q, allp (jam S P Q) |-- allp (jam S P (fun _ => emp)) * (allp (jam S (fun _ => emp) Q)). *)

(* Specifications: *)
Lemma address_mapsto_VALspec:
forall ch v sh l i, 0 <= i < size_chunk ch ->
address_mapsto ch v sh l |-- VALspec sh (adr_add l i) * TT.
Lemma address_mapsto_exists:
forall ch v sh (rsh: readable_share sh) loc w0
(RESERVE: forall l', adr_range loc (size_chunk ch) l' -> w0 @ l' = NO Share.bot bot_unreadable)
(Hg: identity (ghost_of w0)),
(align_chunk ch | snd loc) ->
exists w, address_mapsto ch (decode_val ch (encode_val ch v)) sh loc w
/\ core w = core w0.