Next Obligation.
intros; intro; intros.
destruct H0 as [sh [rsh ?]]; exists sh, rsh.
apply (age1_YES a a'); auto.
Qed.
Next Obligation.     intros; intro; intros. auto.
Qed.
Program Definition core_load' (ch: memory_chunk) (l: address) (v: val) (bl: list memval)
: pred rmap :=
!!(length bl = size_chunk_nat ch /\ decode_val ch bl = v /\ (align_chunk ch | snd l)) &&
allp (jam (adr_range_dec l (size_chunk ch))
(fun l' phi => exists sh, exists rsh, phi @ l'
= YES sh rsh (VAL (nth (nat_of_Z (snd l' - snd l)) bl Undef)) NoneP)
(fun _ _ => True)).
Next Obligation.
intros; intro; intros.
destruct H0 as [sh [rsh ?]]; exists sh, rsh.
apply (age1_YES a a'); auto.
Qed.
Next Obligation.     intros; intro; intros. auto.
Qed.

Lemma address_mapsto_overlap: forall sh l1 ch1 v1 l2 ch2 v2,
range_overlap l1 (size_chunk ch1) l2 (size_chunk ch2) ->
address_mapsto ch1 v1 sh l1 * address_mapsto ch2 v2 sh l2 |-- FF.