(***********************************)
(* ALGEBRAS ON NATURALS            *)
(***********************************)
Section nat_algs.
Definition nat_leR: Relation nat := le.
Definition nat_geR: Relation nat := ge.
Instance po_nat_leR: PreOrder (@Krelation _ nat_leR) := Nat.le_preorder.
Instance po_nat_geR: PreOrder (@Krelation _ nat_geR).
Definition indexAlg: @SeparationAlgebra nat equiv_Join.
(* Increasing*)
Instance IndexAlg_increasing:
@IncreasingSeparationAlgebra _ nat_geR equiv_Join.
(* Residual*)
Instance IndexAlg_residual:
@ResidualSeparationAlgebra _ nat_geR equiv_Join.
(* Unital *)
Instance IndexAlg_unital:
@UnitalSeparationAlgebra _ nat_geR equiv_Join.
(* Minimum Algebra *)
Inductive min_Join: nat -> nat -> nat -> Prop:=
| min_j x y z: z <= x -> z <= y -> min_Join x y z.
Definition minAlg: @SeparationAlgebra nat min_Join.

(* Specifications: *)
(* downwards closure of Index algebra *)
Lemma min_Join_is_downwards_closure: min_Join = @DownwardsClosure_J _ nat_geR equiv_Join.
Instance minAlg_uSA:
@UpwardsClosedSeparationAlgebra _ nat_geR min_Join.