# 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)
```