(* the inheritance from PCMs *)
Definition heapUMCMix :=
UMCMixin ftE tfE defE undefE emptyE updE domE dom_eqE freeE
findE unionE umfiltE empbE undefbE ptsE.
Canonical heapUMC := Eval hnf in UMC heap heapUMCMix.
Definition heapPCMMix := union_map_classPCMMix heapUMC.
Canonical heapPCM := Eval hnf in PCM heap heapPCMMix.
Definition heapCPCMMix := union_map_classCPCMMix heapUMC.
Canonical heapCPCM := Eval hnf in CPCM heap heapCPCMMix.
Definition heapTPCMMix := union_map_classTPCMMix heapUMC.
Canonical heapTPCM := Eval hnf in TPCM heap heapTPCMMix.
End Exports.
End Heap.
Export Heap.Exports.
Notation heap := Heap.heap.
Definition heap_pts A (x : ptr) (v : A) :=
@UMC.pts _ _ heapUMC x (idyn v).
Notation "x :-> v" := (@heap_pts _ x v) (at level 30).
(*****************************)
(* Specific points-to lemmas *)
(*****************************)
Section HeapPointsToLemmas.
Implicit Types (x : ptr) (h : heap).

Lemma updiP x y xs :
reflect (y != null /\ exists m, x = y.+m /\ m < size xs)
(x \in dom (updi y xs)).