# Meet-semilattices
```agda
module order-theory.meet-semilattices where
```
<details><summary>Imports</summary>
```agda
open import foundation.action-on-identifications-functions
open import foundation.binary-relations
open import foundation.dependent-pair-types
open import foundation.identity-types
open import foundation.logical-equivalences
open import foundation.propositions
open import foundation.sets
open import foundation.subtypes
open import foundation.universe-levels
open import group-theory.isomorphisms-semigroups
open import group-theory.semigroups
open import order-theory.greatest-lower-bounds-posets
open import order-theory.lower-bounds-posets
open import order-theory.posets
open import order-theory.preorders
```
</details>
## Idea
A **meet-semilattice** is a poset in which every pair of elements has a greatest
binary-lower bound. Alternatively, meet-semilattices can be defined
algebraically as a set `X` equipped with a binary operation `∧ : X → X → X`
satisfying
1. Asociativity: `(x ∧ y) ∧ z = x ∧ (y ∧ z)`,
2. Commutativity: `x ∧ y = y ∧ x`,
3. Idempotency: `x ∧ x = x`.
We will follow the algebraic approach for our principal definition of
meet-semilattices, since it requires only one universe level. This is necessary
in order to consider the [large category](category-theory.large-categories.md)
of meet-semilattices.
## Definitions
### The predicate on semigroups of being a meet-semilattice
```agda
module _
{l : Level} (X : Semigroup l)
where
is-meet-semilattice-prop-Semigroup : Prop l
is-meet-semilattice-prop-Semigroup =
product-Prop
( Π-Prop
( type-Semigroup X)
( λ x →
Π-Prop
( type-Semigroup X)
( λ y →
Id-Prop
( set-Semigroup X)
( mul-Semigroup X x y)
( mul-Semigroup X y x))))
( Π-Prop
( type-Semigroup X)
( λ x →
Id-Prop
( set-Semigroup X)
( mul-Semigroup X x x)
( x)))
is-meet-semilattice-Semigroup : UU l
is-meet-semilattice-Semigroup =
type-Prop is-meet-semilattice-prop-Semigroup
is-prop-is-meet-semilattice-Semigroup :
is-prop is-meet-semilattice-Semigroup
is-prop-is-meet-semilattice-Semigroup =
is-prop-type-Prop is-meet-semilattice-prop-Semigroup
```
### The algebraic definition of meet-semilattices
```agda
Meet-Semilattice : (l : Level) → UU (lsuc l)
Meet-Semilattice l = type-subtype is-meet-semilattice-prop-Semigroup
module _
{l : Level} (X : Meet-Semilattice l)
where
semigroup-Meet-Semilattice : Semigroup l
semigroup-Meet-Semilattice = pr1 X
set-Meet-Semilattice : Set l
set-Meet-Semilattice = set-Semigroup semigroup-Meet-Semilattice
type-Meet-Semilattice : UU l
type-Meet-Semilattice = type-Semigroup semigroup-Meet-Semilattice
is-set-type-Meet-Semilattice : is-set type-Meet-Semilattice
is-set-type-Meet-Semilattice =
is-set-type-Semigroup semigroup-Meet-Semilattice
meet-Meet-Semilattice : (x y : type-Meet-Semilattice) → type-Meet-Semilattice
meet-Meet-Semilattice = mul-Semigroup semigroup-Meet-Semilattice
meet-Meet-Semilattice' : (x y : type-Meet-Semilattice) → type-Meet-Semilattice
meet-Meet-Semilattice' x y = meet-Meet-Semilattice y x
private
_∧_ = meet-Meet-Semilattice
associative-meet-Meet-Semilattice :
(x y z : type-Meet-Semilattice) → ((x ∧ y) ∧ z) = (x ∧ (y ∧ z))
associative-meet-Meet-Semilattice =
associative-mul-Semigroup semigroup-Meet-Semilattice
is-meet-semilattice-Meet-Semilattice :
is-meet-semilattice-Semigroup semigroup-Meet-Semilattice
is-meet-semilattice-Meet-Semilattice = pr2 X
commutative-meet-Meet-Semilattice :
(x y : type-Meet-Semilattice) → (x ∧ y) = (y ∧ x)
commutative-meet-Meet-Semilattice =
pr1 is-meet-semilattice-Meet-Semilattice
idempotent-meet-Meet-Semilattice :
(x : type-Meet-Semilattice) → (x ∧ x) = x
idempotent-meet-Meet-Semilattice =
pr2 is-meet-semilattice-Meet-Semilattice
leq-Meet-Semilattice-Prop :
(x y : type-Meet-Semilattice) → Prop l
leq-Meet-Semilattice-Prop x y =
Id-Prop set-Meet-Semilattice (x ∧ y) x
leq-Meet-Semilattice :
(x y : type-Meet-Semilattice) → UU l
leq-Meet-Semilattice x y = type-Prop (leq-Meet-Semilattice-Prop x y)
is-prop-leq-Meet-Semilattice :
(x y : type-Meet-Semilattice) → is-prop (leq-Meet-Semilattice x y)
is-prop-leq-Meet-Semilattice x y =
is-prop-type-Prop (leq-Meet-Semilattice-Prop x y)
private
_≤_ = leq-Meet-Semilattice
refl-leq-Meet-Semilattice : is-reflexive leq-Meet-Semilattice
refl-leq-Meet-Semilattice x = idempotent-meet-Meet-Semilattice x
transitive-leq-Meet-Semilattice : is-transitive leq-Meet-Semilattice
transitive-leq-Meet-Semilattice x y z H K =
equational-reasoning
x ∧ z
= (x ∧ y) ∧ z
by ap (meet-Meet-Semilattice' z) (inv K)
= x ∧ (y ∧ z)
by associative-meet-Meet-Semilattice x y z
= x ∧ y
by ap (meet-Meet-Semilattice x) H
= x
by K
antisymmetric-leq-Meet-Semilattice : is-antisymmetric leq-Meet-Semilattice
antisymmetric-leq-Meet-Semilattice x y H K =
equational-reasoning
x = x ∧ y
by inv H
= y ∧ x
by commutative-meet-Meet-Semilattice x y
= y
by K
preorder-Meet-Semilattice : Preorder l l
pr1 preorder-Meet-Semilattice = type-Meet-Semilattice
pr1 (pr2 preorder-Meet-Semilattice) = leq-Meet-Semilattice-Prop
pr1 (pr2 (pr2 preorder-Meet-Semilattice)) = refl-leq-Meet-Semilattice
pr2 (pr2 (pr2 preorder-Meet-Semilattice)) = transitive-leq-Meet-Semilattice
poset-Meet-Semilattice : Poset l l
pr1 poset-Meet-Semilattice = preorder-Meet-Semilattice
pr2 poset-Meet-Semilattice = antisymmetric-leq-Meet-Semilattice
is-binary-lower-bound-meet-Meet-Semilattice :
(x y : type-Meet-Semilattice) →
is-binary-lower-bound-Poset
( poset-Meet-Semilattice)
( x)
( y)
( meet-Meet-Semilattice x y)
pr1 (is-binary-lower-bound-meet-Meet-Semilattice x y) =
equational-reasoning
(x ∧ y) ∧ x
= x ∧ (x ∧ y)
by
commutative-meet-Meet-Semilattice (meet-Meet-Semilattice x y) x
= (x ∧ x) ∧ y
by
inv (associative-meet-Meet-Semilattice x x y)
= x ∧ y
by
ap (meet-Meet-Semilattice' y) (idempotent-meet-Meet-Semilattice x)
pr2 (is-binary-lower-bound-meet-Meet-Semilattice x y) =
equational-reasoning
(x ∧ y) ∧ y
= x ∧ (y ∧ y)
by
associative-meet-Meet-Semilattice x y y
= x ∧ y
by
ap (meet-Meet-Semilattice x) (idempotent-meet-Meet-Semilattice y)
is-greatest-binary-lower-bound-meet-Meet-Semilattice :
(x y : type-Meet-Semilattice) →
is-greatest-binary-lower-bound-Poset
( poset-Meet-Semilattice)
( x)
( y)
( meet-Meet-Semilattice x y)
is-greatest-binary-lower-bound-meet-Meet-Semilattice x y =
prove-is-greatest-binary-lower-bound-Poset
( poset-Meet-Semilattice)
( is-binary-lower-bound-meet-Meet-Semilattice x y)
( λ z (H , K) →
equational-reasoning
z ∧ (x ∧ y)
= (z ∧ x) ∧ y
by inv (associative-meet-Meet-Semilattice z x y)
= z ∧ y
by ap (meet-Meet-Semilattice' y) H
= z
by K)
has-greatest-binary-lower-bound-Meet-Semilattice :
(x y : type-Meet-Semilattice) →
has-greatest-binary-lower-bound-Poset (poset-Meet-Semilattice) x y
pr1 (has-greatest-binary-lower-bound-Meet-Semilattice x y) =
meet-Meet-Semilattice x y
pr2 (has-greatest-binary-lower-bound-Meet-Semilattice x y) =
is-greatest-binary-lower-bound-meet-Meet-Semilattice x y
```
### The predicate on posets of being a meet-semilattice
```agda
module _
{l1 l2 : Level} (P : Poset l1 l2)
where
is-meet-semilattice-Poset-Prop : Prop (l1 ⊔ l2)
is-meet-semilattice-Poset-Prop =
Π-Prop
( type-Poset P)
( λ x →
Π-Prop
( type-Poset P)
( has-greatest-binary-lower-bound-Poset-Prop P x))
is-meet-semilattice-Poset : UU (l1 ⊔ l2)
is-meet-semilattice-Poset = type-Prop is-meet-semilattice-Poset-Prop
is-prop-is-meet-semilattice-Poset :
is-prop is-meet-semilattice-Poset
is-prop-is-meet-semilattice-Poset =
is-prop-type-Prop is-meet-semilattice-Poset-Prop
module _
(H : is-meet-semilattice-Poset)
where
meet-is-meet-semilattice-Poset :
type-Poset P → type-Poset P → type-Poset P
meet-is-meet-semilattice-Poset x y = pr1 (H x y)
is-greatest-binary-lower-bound-meet-is-meet-semilattice-Poset :
(x y : type-Poset P) →
is-greatest-binary-lower-bound-Poset P x y
( meet-is-meet-semilattice-Poset x y)
is-greatest-binary-lower-bound-meet-is-meet-semilattice-Poset x y =
pr2 (H x y)
```
### The order-theoretic definition of meet semilattices
```agda
Order-Theoretic-Meet-Semilattice : (l1 l2 : Level) → UU (lsuc l1 ⊔ lsuc l2)
Order-Theoretic-Meet-Semilattice l1 l2 =
Σ (Poset l1 l2) is-meet-semilattice-Poset
module _
{l1 l2 : Level} (A : Order-Theoretic-Meet-Semilattice l1 l2)
where
poset-Order-Theoretic-Meet-Semilattice : Poset l1 l2
poset-Order-Theoretic-Meet-Semilattice = pr1 A
type-Order-Theoretic-Meet-Semilattice : UU l1
type-Order-Theoretic-Meet-Semilattice =
type-Poset poset-Order-Theoretic-Meet-Semilattice
is-set-type-Order-Theoretic-Meet-Semilattice :
is-set type-Order-Theoretic-Meet-Semilattice
is-set-type-Order-Theoretic-Meet-Semilattice =
is-set-type-Poset poset-Order-Theoretic-Meet-Semilattice
set-Order-Theoretic-Meet-Semilattice : Set l1
set-Order-Theoretic-Meet-Semilattice =
set-Poset poset-Order-Theoretic-Meet-Semilattice
leq-Order-Theoretic-Meet-Semilattice-Prop :
(x y : type-Order-Theoretic-Meet-Semilattice) → Prop l2
leq-Order-Theoretic-Meet-Semilattice-Prop =
leq-Poset-Prop poset-Order-Theoretic-Meet-Semilattice
leq-Order-Theoretic-Meet-Semilattice :
(x y : type-Order-Theoretic-Meet-Semilattice) → UU l2
leq-Order-Theoretic-Meet-Semilattice =
leq-Poset poset-Order-Theoretic-Meet-Semilattice
is-prop-leq-Order-Theoretic-Meet-Semilattice :
(x y : type-Order-Theoretic-Meet-Semilattice) →
is-prop (leq-Order-Theoretic-Meet-Semilattice x y)
is-prop-leq-Order-Theoretic-Meet-Semilattice =
is-prop-leq-Poset poset-Order-Theoretic-Meet-Semilattice
refl-leq-Order-Theoretic-Meet-Semilattice :
(x : type-Order-Theoretic-Meet-Semilattice) →
leq-Order-Theoretic-Meet-Semilattice x x
refl-leq-Order-Theoretic-Meet-Semilattice =
refl-leq-Poset poset-Order-Theoretic-Meet-Semilattice
antisymmetric-leq-Order-Theoretic-Meet-Semilattice :
{x y : type-Order-Theoretic-Meet-Semilattice} →
leq-Order-Theoretic-Meet-Semilattice x y →
leq-Order-Theoretic-Meet-Semilattice y x →
x = y
antisymmetric-leq-Order-Theoretic-Meet-Semilattice {x} {y} =
antisymmetric-leq-Poset poset-Order-Theoretic-Meet-Semilattice x y
transitive-leq-Order-Theoretic-Meet-Semilattice :
(x y z : type-Order-Theoretic-Meet-Semilattice) →
leq-Order-Theoretic-Meet-Semilattice y z →
leq-Order-Theoretic-Meet-Semilattice x y →
leq-Order-Theoretic-Meet-Semilattice x z
transitive-leq-Order-Theoretic-Meet-Semilattice =
transitive-leq-Poset poset-Order-Theoretic-Meet-Semilattice
is-meet-semilattice-Order-Theoretic-Meet-Semilattice :
is-meet-semilattice-Poset poset-Order-Theoretic-Meet-Semilattice
is-meet-semilattice-Order-Theoretic-Meet-Semilattice = pr2 A
meet-Order-Theoretic-Meet-Semilattice :
(x y : type-Order-Theoretic-Meet-Semilattice) →
type-Order-Theoretic-Meet-Semilattice
meet-Order-Theoretic-Meet-Semilattice =
meet-is-meet-semilattice-Poset
poset-Order-Theoretic-Meet-Semilattice
is-meet-semilattice-Order-Theoretic-Meet-Semilattice
private
_∧_ = meet-Order-Theoretic-Meet-Semilattice
is-greatest-binary-lower-bound-meet-Order-Theoretic-Meet-Semilattice :
(x y : type-Order-Theoretic-Meet-Semilattice) →
is-greatest-binary-lower-bound-Poset
( poset-Order-Theoretic-Meet-Semilattice)
( x)
( y)
( x ∧ y)
is-greatest-binary-lower-bound-meet-Order-Theoretic-Meet-Semilattice =
is-greatest-binary-lower-bound-meet-is-meet-semilattice-Poset
poset-Order-Theoretic-Meet-Semilattice
is-meet-semilattice-Order-Theoretic-Meet-Semilattice
is-binary-lower-bound-meet-Order-Theoretic-Meet-Semilattice :
(x y : type-Order-Theoretic-Meet-Semilattice) →
is-binary-lower-bound-Poset
( poset-Order-Theoretic-Meet-Semilattice)
( x)
( y)
( x ∧ y)
is-binary-lower-bound-meet-Order-Theoretic-Meet-Semilattice x y =
is-binary-lower-bound-is-greatest-binary-lower-bound-Poset
( poset-Order-Theoretic-Meet-Semilattice)
( is-greatest-binary-lower-bound-meet-Order-Theoretic-Meet-Semilattice
( x)
( y))
leq-left-meet-Order-Theoretic-Meet-Semilattice :
(x y : type-Order-Theoretic-Meet-Semilattice) →
leq-Order-Theoretic-Meet-Semilattice (x ∧ y) x
leq-left-meet-Order-Theoretic-Meet-Semilattice x y =
leq-left-is-binary-lower-bound-Poset
( poset-Order-Theoretic-Meet-Semilattice)
( is-binary-lower-bound-meet-Order-Theoretic-Meet-Semilattice x y)
leq-right-meet-Order-Theoretic-Meet-Semilattice :
(x y : type-Order-Theoretic-Meet-Semilattice) →
leq-Order-Theoretic-Meet-Semilattice (x ∧ y) y
leq-right-meet-Order-Theoretic-Meet-Semilattice x y =
leq-right-is-binary-lower-bound-Poset
( poset-Order-Theoretic-Meet-Semilattice)
( is-binary-lower-bound-meet-Order-Theoretic-Meet-Semilattice x y)
leq-meet-Order-Theoretic-Meet-Semilattice :
{x y z : type-Order-Theoretic-Meet-Semilattice} →
leq-Order-Theoretic-Meet-Semilattice z x →
leq-Order-Theoretic-Meet-Semilattice z y →
leq-Order-Theoretic-Meet-Semilattice z (x ∧ y)
leq-meet-Order-Theoretic-Meet-Semilattice {x} {y} {z} H K =
forward-implication
( is-greatest-binary-lower-bound-meet-Order-Theoretic-Meet-Semilattice
( x)
( y)
( z))
( H , K)
```
## Properties
### The meet operation of order theoretic meet-semilattices is associative
```agda
module _
{l1 l2 : Level} (A : Order-Theoretic-Meet-Semilattice l1 l2)
(x y z : type-Order-Theoretic-Meet-Semilattice A)
where
private
_∧_ = meet-Order-Theoretic-Meet-Semilattice A
_≤_ = leq-Order-Theoretic-Meet-Semilattice A
leq-left-triple-meet-Order-Theoretic-Meet-Semilattice :
((x ∧ y) ∧ z) ≤ x
leq-left-triple-meet-Order-Theoretic-Meet-Semilattice =
calculate-in-Poset
( poset-Order-Theoretic-Meet-Semilattice A)
chain-of-inequalities
(x ∧ y) ∧ z
≤ x ∧ y
by leq-left-meet-Order-Theoretic-Meet-Semilattice A (x ∧ y) z
in-Poset poset-Order-Theoretic-Meet-Semilattice A
≤ x
by leq-left-meet-Order-Theoretic-Meet-Semilattice A x y
in-Poset poset-Order-Theoretic-Meet-Semilattice A
leq-center-triple-meet-Order-Theoretic-Meet-Semilattice :
((x ∧ y) ∧ z) ≤ y
leq-center-triple-meet-Order-Theoretic-Meet-Semilattice =
calculate-in-Poset
( poset-Order-Theoretic-Meet-Semilattice A)
chain-of-inequalities
(x ∧ y) ∧ z
≤ x ∧ y
by leq-left-meet-Order-Theoretic-Meet-Semilattice A (x ∧ y) z
in-Poset poset-Order-Theoretic-Meet-Semilattice A
≤ y
by leq-right-meet-Order-Theoretic-Meet-Semilattice A x y
in-Poset poset-Order-Theoretic-Meet-Semilattice A
leq-right-triple-meet-Order-Theoretic-Meet-Semilattice :
((x ∧ y) ∧ z) ≤ z
leq-right-triple-meet-Order-Theoretic-Meet-Semilattice =
leq-right-meet-Order-Theoretic-Meet-Semilattice A (x ∧ y) z
leq-left-triple-meet-Order-Theoretic-Meet-Semilattice' :
(x ∧ (y ∧ z)) ≤ x
leq-left-triple-meet-Order-Theoretic-Meet-Semilattice' =
leq-left-meet-Order-Theoretic-Meet-Semilattice A x (y ∧ z)
leq-center-triple-meet-Order-Theoretic-Meet-Semilattice' :
(x ∧ (y ∧ z)) ≤ y
leq-center-triple-meet-Order-Theoretic-Meet-Semilattice' =
calculate-in-Poset
( poset-Order-Theoretic-Meet-Semilattice A)
chain-of-inequalities
x ∧ (y ∧ z)
≤ y ∧ z
by leq-right-meet-Order-Theoretic-Meet-Semilattice A x (y ∧ z)
in-Poset poset-Order-Theoretic-Meet-Semilattice A
≤ y
by leq-left-meet-Order-Theoretic-Meet-Semilattice A y z
in-Poset poset-Order-Theoretic-Meet-Semilattice A
leq-right-triple-meet-Order-Theoretic-Meet-Semilattice' :
(x ∧ (y ∧ z)) ≤ z
leq-right-triple-meet-Order-Theoretic-Meet-Semilattice' =
calculate-in-Poset
( poset-Order-Theoretic-Meet-Semilattice A)
chain-of-inequalities
x ∧ (y ∧ z)
≤ y ∧ z
by leq-right-meet-Order-Theoretic-Meet-Semilattice A x (y ∧ z)
in-Poset poset-Order-Theoretic-Meet-Semilattice A
≤ z
by leq-right-meet-Order-Theoretic-Meet-Semilattice A y z
in-Poset poset-Order-Theoretic-Meet-Semilattice A
leq-associative-meet-Order-Theoretic-Meet-Semilattice :
((x ∧ y) ∧ z) ≤ (x ∧ (y ∧ z))
leq-associative-meet-Order-Theoretic-Meet-Semilattice =
leq-meet-Order-Theoretic-Meet-Semilattice A
( leq-left-triple-meet-Order-Theoretic-Meet-Semilattice)
( leq-meet-Order-Theoretic-Meet-Semilattice A
( leq-center-triple-meet-Order-Theoretic-Meet-Semilattice)
( leq-right-triple-meet-Order-Theoretic-Meet-Semilattice))
leq-associative-meet-Order-Theoretic-Meet-Semilattice' :
(x ∧ (y ∧ z)) ≤ ((x ∧ y) ∧ z)
leq-associative-meet-Order-Theoretic-Meet-Semilattice' =
leq-meet-Order-Theoretic-Meet-Semilattice A
( leq-meet-Order-Theoretic-Meet-Semilattice A
( leq-left-triple-meet-Order-Theoretic-Meet-Semilattice')
( leq-center-triple-meet-Order-Theoretic-Meet-Semilattice'))
( leq-right-triple-meet-Order-Theoretic-Meet-Semilattice')
associative-meet-Order-Theoretic-Meet-Semilattice :
((x ∧ y) ∧ z) = (x ∧ (y ∧ z))
associative-meet-Order-Theoretic-Meet-Semilattice =
antisymmetric-leq-Order-Theoretic-Meet-Semilattice A
leq-associative-meet-Order-Theoretic-Meet-Semilattice
leq-associative-meet-Order-Theoretic-Meet-Semilattice'
```
### The meet operation of order theoretic meet-semilattices is commutative
```agda
module _
{l1 l2 : Level} (A : Order-Theoretic-Meet-Semilattice l1 l2)
(x y : type-Order-Theoretic-Meet-Semilattice A)
where
private
_∧_ = meet-Order-Theoretic-Meet-Semilattice A
_≤_ = leq-Order-Theoretic-Meet-Semilattice A
leq-commutative-meet-Order-Theoretic-Meet-Semilattice :
(x ∧ y) ≤ (y ∧ x)
leq-commutative-meet-Order-Theoretic-Meet-Semilattice =
leq-meet-Order-Theoretic-Meet-Semilattice A
( leq-right-meet-Order-Theoretic-Meet-Semilattice A x y)
( leq-left-meet-Order-Theoretic-Meet-Semilattice A x y)
leq-commutative-meet-Order-Theoretic-Meet-Semilattice' :
(y ∧ x) ≤ (x ∧ y)
leq-commutative-meet-Order-Theoretic-Meet-Semilattice' =
leq-meet-Order-Theoretic-Meet-Semilattice A
( leq-right-meet-Order-Theoretic-Meet-Semilattice A y x)
( leq-left-meet-Order-Theoretic-Meet-Semilattice A y x)
commutative-meet-Order-Theoretic-Meet-Semilattice :
(x ∧ y) = (y ∧ x)
commutative-meet-Order-Theoretic-Meet-Semilattice =
antisymmetric-leq-Order-Theoretic-Meet-Semilattice A
leq-commutative-meet-Order-Theoretic-Meet-Semilattice
leq-commutative-meet-Order-Theoretic-Meet-Semilattice'
```
### The meet operation of order theoretic meet-semilattices is idempotent
```agda
module _
{l1 l2 : Level} (A : Order-Theoretic-Meet-Semilattice l1 l2)
(x : type-Order-Theoretic-Meet-Semilattice A)
where
private
_∧_ = meet-Order-Theoretic-Meet-Semilattice A
_≤_ = leq-Order-Theoretic-Meet-Semilattice A
idempotent-meet-Order-Theoretic-Meet-Semilattice :
(x ∧ x) = x
idempotent-meet-Order-Theoretic-Meet-Semilattice =
antisymmetric-leq-Order-Theoretic-Meet-Semilattice A
( leq-left-meet-Order-Theoretic-Meet-Semilattice A x x)
( leq-meet-Order-Theoretic-Meet-Semilattice A
( refl-leq-Order-Theoretic-Meet-Semilattice A x)
( refl-leq-Order-Theoretic-Meet-Semilattice A x))
```
### Any order theoretic meet-semilattice is an algebraic meet semilattice
```agda
module _
{l1 l2 : Level} (A : Order-Theoretic-Meet-Semilattice l1 l2)
where
semigroup-Order-Theoretic-Meet-Semilattice : Semigroup l1
pr1 semigroup-Order-Theoretic-Meet-Semilattice =
set-Order-Theoretic-Meet-Semilattice A
pr1 (pr2 semigroup-Order-Theoretic-Meet-Semilattice) =
meet-Order-Theoretic-Meet-Semilattice A
pr2 (pr2 semigroup-Order-Theoretic-Meet-Semilattice) =
associative-meet-Order-Theoretic-Meet-Semilattice A
meet-semilattice-Order-Theoretic-Meet-Semilattice :
Meet-Semilattice l1
pr1 meet-semilattice-Order-Theoretic-Meet-Semilattice =
semigroup-Order-Theoretic-Meet-Semilattice
pr1 (pr2 meet-semilattice-Order-Theoretic-Meet-Semilattice) =
commutative-meet-Order-Theoretic-Meet-Semilattice A
pr2 (pr2 meet-semilattice-Order-Theoretic-Meet-Semilattice) =
idempotent-meet-Order-Theoretic-Meet-Semilattice A
```
### Any meet-semilattice `A` is isomorphic to the meet-semilattice obtained from the order theoretic meet-semilattice obtained from `A`
```agda
module _
{l1 : Level} (A : Meet-Semilattice l1)
where
order-theoretic-meet-semilattice-Meet-Semilattice :
Order-Theoretic-Meet-Semilattice l1 l1
pr1 order-theoretic-meet-semilattice-Meet-Semilattice =
poset-Meet-Semilattice A
pr1 (pr2 order-theoretic-meet-semilattice-Meet-Semilattice x y) =
meet-Meet-Semilattice A x y
pr2 (pr2 order-theoretic-meet-semilattice-Meet-Semilattice x y) =
is-greatest-binary-lower-bound-meet-Meet-Semilattice A x y
compute-meet-order-theoretic-meet-semilattice-Meet-Semilattice :
(x y : type-Meet-Semilattice A) →
meet-Meet-Semilattice A x y =
meet-Order-Theoretic-Meet-Semilattice
( order-theoretic-meet-semilattice-Meet-Semilattice)
( x)
( y)
compute-meet-order-theoretic-meet-semilattice-Meet-Semilattice x y = refl
compute-order-theoretic-meet-semilattice-Meet-Semilattice :
iso-Semigroup
( semigroup-Meet-Semilattice A)
( semigroup-Meet-Semilattice
( meet-semilattice-Order-Theoretic-Meet-Semilattice
( order-theoretic-meet-semilattice-Meet-Semilattice)))
compute-order-theoretic-meet-semilattice-Meet-Semilattice =
id-iso-Semigroup (semigroup-Meet-Semilattice A)
```