(* upwards-closed *)
(* downwards-closed *)
Instance minAlg_dSA:
@DownwardsClosedSeparationAlgebra _ nat_geR min_Join.
(* Increasing *)
Instance minAlg_increasing:
@IncreasingSeparationAlgebra _ nat_geR min_Join.
(*Residual*)
Instance minAlg_residual:
@ResidualSeparationAlgebra _ nat_geR min_Join.
(* Unital *)
Instance minAlg_unital:
@UnitalSeparationAlgebra _ nat_geR min_Join.
(** *Sum Algebra on NAT*)
Inductive sum_Join: nat -> nat -> nat -> Prop:=
|sum_j x y z: x + y = z -> sum_Join x y z.
Definition sumAlg: @SeparationAlgebra _ sum_Join.
(* upwards-closed*)
Instance sumAlg_uSA:
@UpwardsClosedSeparationAlgebra _ nat_geR sum_Join.
(* downwards-closed*)
Instance sumAlg_dSA:
@DownwardsClosedSeparationAlgebra _ nat_geR sum_Join.

(* Specifications: *)
(* The only increasing is 0*)
Lemma sumAlg_zero_decreasing:
@increasing nat nat_geR sum_Join 0.
Lemma sumAlg_zero_decreasing_only:
forall x,
@increasing nat nat_geR sum_Join x -> x = 0.