Class IncreasingJoinSelfSeparationAlgebra
      (worlds: Type)
      {R: Relation worlds}
      {J: Join worlds}: Type :=
  incr_join_self:
    forall m, increasing m -> join m m m.Class IncreasingJoinSelfSeparationAlgebra
      (worlds: Type)
      {R: Relation worlds}
      {J: Join worlds}: Type :=
  incr_join_self:
    forall m, increasing m -> join m m m.Class IncreasingSplitSmallerSeparationAlgebra
      (worlds: Type)
      {R: Relation worlds}
      {J: Join worlds}: Type :=
  incr_split_smaller:
    forall m1 m2 m, increasing m -> join m1 m2 m -> m1 <= m.Class IncreasingSplitSmallerSeparationAlgebra
      (worlds: Type)
      {R: Relation worlds}
      {J: Join worlds}: Type :=
  incr_split_smaller:
    forall m1 m2 m, increasing m -> join m1 m2 m -> m1 <= m.Class UpwardsClosedSeparationAlgebra
      (worlds: Type)
      {R: Relation worlds}
      {J: Join worlds}: Type :=
  join_Korder_up: forall m n m1 m2: worlds,
    join m1 m2 m -> m <= n ->
    exists n1 n2, join n1 n2 n /\ m1 <= n1 /\ m2 <= n2.Class UpwardsClosedSeparationAlgebra
      (worlds: Type)
      {R: Relation worlds}
      {J: Join worlds}: Type :=
  join_Korder_up: forall m n m1 m2: worlds,
    join m1 m2 m -> m <= n ->
    exists n1 n2, join n1 n2 n /\ m1 <= n1 /\ m2 <= n2.Class DownwardsClosedSeparationAlgebra
      (worlds: Type)
      {R: Relation worlds}
      {J: Join worlds}: Type :=
  join_Korder_down: forall m1 m2 m n1 n2: worlds,
    join m1 m2 m -> n1 <= m1 -> n2 <= m2 ->
    exists n, join n1 n2 n /\ n <= m.Class DownwardsClosedSeparationAlgebra
      (worlds: Type)
      {R: Relation worlds}
      {J: Join worlds}: Type :=
  join_Korder_down: forall m1 m2 m n1 n2: worlds,
    join m1 m2 m -> n1 <= m1 -> n2 <= m2 ->
    exists n, join n1 n2 n /\ n <= m.

Lemma residual_extensible {worlds: Type} {R: Relation worlds} {po_R: PreOrder Krelation} {J: Join worlds} {SA: SeparationAlgebra worlds} {dSA: DownwardsClosedSeparationAlgebra worlds} {resSA: ResidualSeparationAlgebra worlds}: forall u, exists e v, join u e v.