\import Algebra.Pointed
\import Set

\class SubPointed \extends SubSet {
  \override S : Pointed
  | contains_ide : contains 1

  \func struct : Pointed \cowith
    | BaseSet => SubSet.struct
    | ide => (1, contains_ide)
} \where {
  \func max {A : Pointed} : SubPointed \cowith
    | SubSet => DecSubSet.max {A}
    | contains_ide => ()
}

\class DecSubPointed \extends SubPointed, DecSubSet

\class SubAddPointed \extends SubSet {
  \override S : AddPointed
  | contains_zro : contains 0

  \func struct : AddPointed \cowith
    | BaseSet => SubSet.struct
    | zro => (0, contains_zro)
} \where {
  \func max {A : AddPointed} : SubAddPointed \cowith
    | SubSet => DecSubSet.max {A}
    | contains_zro => ()
}