module Order.Semilattice.Join.Reasoning
  {o } {P : Poset o } (slat : is-join-semilattice P)
  where

Reasoning about join semilattices🔗

This module proves some basic facts about join semilattices, and exposes reasoning combinators for working with them.

open is-join-semilattice slat public
open Order.Reasoning P public

The bottom element of a join semilattice is both a left and right identity element with respect to joins.

∪-idl :  {x}  bot  x  x
∪-idl = ≤-antisym (∪-universal _ ¡ ≤-refl) r≤∪

∪-idr :  {x}  x  bot  x
∪-idr = ≤-antisym (∪-universal _ ≤-refl ¡) l≤∪

Therefore, every join semilattice is a monoid.

∪-is-monoid : is-monoid bot _∪_
∪-is-monoid .has-is-semigroup = ∪-is-semigroup
∪-is-monoid .idl = ∪-idl
∪-is-monoid .idr = ∪-idr

∪-monoid : Monoid-on  P 
∪-monoid .Monoid-on.identity = bot
∪-monoid .Monoid-on._⋆_ = _∪_
∪-monoid .Monoid-on.has-is-monoid = ∪-is-monoid

module  = Cat.Reasoning (B ∪-monoid) hiding (Ob)