module Order.Semilattice.Join where
Join semilattices🔗
A join semilattice is a partially ordered set which has all finite joins. This means, in particular, that it has a bottom element, since that is the join of the empty family. Note that, even though join-semilattices are presented as being equipped with a binary operation this is not actual structure on the partially-ordered set: joins are uniquely determined, so “being a join-semilattice” is always a proposition.
record is-join-semilattice {o ℓ} (P : Poset o ℓ) : Type (o ⊔ ℓ) where
field
_∪_ : ⌞ P ⌟ → ⌞ P ⌟ → ⌞ P ⌟
: ∀ x y → is-join P x y (x ∪ y)
∪-joins : Bottom P has-bottom
Morphisms of join semilattices are monotone functions which additionally send joins to joins: we have and Note that, since was already assumed to be order-preserving, it suffices to have less than with an inequality. This is because we always have the reverse direction by the universal property.
record
is-join-slat-hom{P : Poset o ℓ} {Q : Poset o' ℓ'} (f : Monotone P Q)
(P-slat : is-join-semilattice P)
(Q-slat : is-join-semilattice Q) : Type (o ⊔ ℓ')
where
field
: ∀ x y → f # (x Pₗ.∪ y) Q.≤ (f # x) Qₗ.∪ (f # y)
∪-≤ : f # Pₗ.bot Q.≤ Qₗ.bot bot-≤
The category of join-semilattices🔗
It is clear from the definition that join semilatice homomorphisms are closed under identity and composition: therefore, we can define the category of join-semilattices as a subcategory of that of posets. However, this subcategory is not full: there are monotone functions between semilattices that do not preserve joins.
id-join-slat-hom: (Pₗ : is-join-semilattice P)
→ is-join-slat-hom idₘ Pₗ Pₗ
∘-join-slat-hom: ∀ {Pₗ Qₗ Rₗ} {f : Monotone Q R} {g : Monotone P Q}
→ is-join-slat-hom f Qₗ Rₗ
→ is-join-slat-hom g Pₗ Qₗ
→ is-join-slat-hom (f ∘ₘ g) Pₗ Rₗ