(* 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 hcancelPtT A1 A2 x (v1 : A1) (v2 : A2) :
valid (x :-> v1) -> x :-> v1 = x :-> v2 -> A1 = A2.