Definition natPlus_R: Relation natPlus:= lep.Definition po_natPlus_R: PreOrder (@Krelation _ natPlus_R) :=
    lep_preorder.Definition sumpAlg: @SeparationAlgebra _ sump_Join.(* it is NOT upwards-closed*)
Instance sumpAlg_uSA:
  @UpwardsClosedSeparationAlgebra _ natPlus_R sump_Join.(* downwards-closed*)
Instance sumpAlg_dSA:
  @DownwardsClosedSeparationAlgebra _ natPlus_R sump_Join.(*it is NOT Residual*)
  Instance sumpAlg_residual:
    @ResidualSeparationAlgebra _ natPlus_R sump_Join.(** *sum Algebra inverted*)

Definition suminvAlg: @SeparationAlgebra _ sum_Join.(* upwards-closed*)
Instance suminvAlg_uSA:
  @UpwardsClosedSeparationAlgebra _ nat_leR sum_Join.(* downwards-closed*)
Instance suminvAlg_dSA:
  @DownwardsClosedSeparationAlgebra _ nat_leR sum_Join.(*Residual*)
  Instance suminvAlg_increasing:
    @IncreasingSeparationAlgebra _ nat_leR sum_Join.(*Residual*)
  Instance suminvAlg_residual:
    @ResidualSeparationAlgebra _ nat_leR sum_Join.(* Unital *)
  Instance suminvAlg_unital:
    @UnitalSeparationAlgebra _ nat_leR sum_Join.Definition Heap: Type := addr -> option val.Instance Heap_Join: Join Heap :=
  @fun_Join _ _ (@option_Join _ (trivial_Join)).Instance Heap_SA: SeparationAlgebra Heap :=
  @fun_SA _ _ _ (@option_SA _ _ (trivial_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.

Lemma discHeap_empty_increasing: @increasing Heap discHeap_R Heap_Join (fun _ => None).