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)