Section heaps'.
Context (addr val: Type).
Definition Heap': Type := addr -> option val.
Instance Heap_Join': Join Heap' :=
@fun_Join _ _ (@option_Join _ (equiv_Join)).
Instance Heap_SA': SeparationAlgebra Heap' :=
@fun_SA _ _ _ (@option_SA _ _ (equiv_SA)).
(** * Discrete heap *)
Instance discHeap_R': Relation Heap' :=
eq.
Instance po_discHeap_R': PreOrder Krelation :=
eq_preorder _.
Program Instance discHeap_ikiM': IdentityKripkeIntuitionisticModel Heap'.
(*Upwards-closed*)
Instance discHeap_uSA':
@UpwardsClosedSeparationAlgebra Heap' discHeap_R' Heap_Join'.
(*Downwards-closed*)
Instance discHeap_dSA':
@DownwardsClosedSeparationAlgebra Heap' discHeap_R' Heap_Join'.

(*Empty heap is increasing element*)
Lemma discHeap_empty_increasing':
@increasing Heap' discHeap_R' Heap_Join' (fun _ => None).