# Large meet-semilattices

```agda
module order-theory.large-meet-semilattices where
```

<details><summary>Imports</summary>

```agda
open import foundation.action-on-identifications-binary-functions
open import foundation.dependent-pair-types
open import foundation.identity-types
open import foundation.large-binary-relations
open import foundation.sets
open import foundation.universe-levels

open import order-theory.greatest-lower-bounds-large-posets
open import order-theory.large-posets
open import order-theory.meet-semilattices
open import order-theory.posets
open import order-theory.top-elements-large-posets
```

</details>

## Idea

A **large meet-semilattice** is a
[large semigroup](group-theory.large-semigroups.md) which is commutative and
idempotent.

## Definition

### The predicate that a large poset has meets

```agda
record
  has-meets-Large-Poset
    { α : Level  Level}
    { β : Level  Level  Level}
    ( P : Large-Poset α β) :
    UUω
  where
  constructor
    make-has-meets-Large-Poset
  field
    meet-has-meets-Large-Poset :
      {l1 l2 : Level}
      (x : type-Large-Poset P l1) (y : type-Large-Poset P l2) 
      type-Large-Poset P (l1  l2)
    is-greatest-binary-lower-bound-meet-has-meets-Large-Poset :
      {l1 l2 : Level}
      (x : type-Large-Poset P l1) (y : type-Large-Poset P l2) 
      is-greatest-binary-lower-bound-Large-Poset P x y
        ( meet-has-meets-Large-Poset x y)

open has-meets-Large-Poset public
```

### The predicate of being a large meet-semilattice

```agda
record
  is-large-meet-semilattice-Large-Poset
    { α : Level  Level}
    { β : Level  Level  Level}
    ( P : Large-Poset α β) :
    UUω
  where
  field
    has-meets-is-large-meet-semilattice-Large-Poset :
      has-meets-Large-Poset P
    has-top-element-is-large-meet-semilattice-Large-Poset :
      has-top-element-Large-Poset P

open is-large-meet-semilattice-Large-Poset public

module _
  {α : Level  Level}
  {β : Level  Level  Level}
  (P : Large-Poset α β)
  (H : is-large-meet-semilattice-Large-Poset P)
  where

  meet-is-large-meet-semilattice-Large-Poset :
    {l1 l2 : Level} (x : type-Large-Poset P l1) (y : type-Large-Poset P l2) 
    type-Large-Poset P (l1  l2)
  meet-is-large-meet-semilattice-Large-Poset =
    meet-has-meets-Large-Poset
      ( has-meets-is-large-meet-semilattice-Large-Poset H)

  is-greatest-binary-lower-bound-meet-is-large-meet-semilattice-Large-Poset :
    {l1 l2 : Level} (x : type-Large-Poset P l1) (y : type-Large-Poset P l2) 
    is-greatest-binary-lower-bound-Large-Poset P x y
      ( meet-is-large-meet-semilattice-Large-Poset x y)
  is-greatest-binary-lower-bound-meet-is-large-meet-semilattice-Large-Poset =
    is-greatest-binary-lower-bound-meet-has-meets-Large-Poset
      ( has-meets-is-large-meet-semilattice-Large-Poset H)

  top-is-large-meet-semilattice-Large-Poset :
    type-Large-Poset P lzero
  top-is-large-meet-semilattice-Large-Poset =
    top-has-top-element-Large-Poset
      ( has-top-element-is-large-meet-semilattice-Large-Poset H)

  is-top-element-top-is-large-meet-semilattice-Large-Poset :
    {l1 : Level} (x : type-Large-Poset P l1) 
    leq-Large-Poset P x top-is-large-meet-semilattice-Large-Poset
  is-top-element-top-is-large-meet-semilattice-Large-Poset =
    is-top-element-top-has-top-element-Large-Poset
      ( has-top-element-is-large-meet-semilattice-Large-Poset H)
```

### Large meet-semilattices

```agda
record
  Large-Meet-Semilattice
    ( α : Level  Level)
    ( β : Level  Level  Level) :
    UUω
  where
  constructor
    make-Large-Meet-Semilattice
  field
    large-poset-Large-Meet-Semilattice :
      Large-Poset α β
    is-large-meet-semilattice-Large-Meet-Semilattice :
      is-large-meet-semilattice-Large-Poset
        large-poset-Large-Meet-Semilattice

open Large-Meet-Semilattice public

module _
  {α : Level  Level} {β : Level  Level  Level}
  (L : Large-Meet-Semilattice α β)
  where

  type-Large-Meet-Semilattice : (l : Level)  UU (α l)
  type-Large-Meet-Semilattice =
    type-Large-Poset (large-poset-Large-Meet-Semilattice L)

  set-Large-Meet-Semilattice : (l : Level)  Set (α l)
  set-Large-Meet-Semilattice =
    set-Large-Poset (large-poset-Large-Meet-Semilattice L)

  is-set-type-Large-Meet-Semilattice :
    {l : Level}  is-set (type-Large-Meet-Semilattice l)
  is-set-type-Large-Meet-Semilattice =
    is-set-type-Large-Poset (large-poset-Large-Meet-Semilattice L)

  leq-Large-Meet-Semilattice : Large-Relation β type-Large-Meet-Semilattice
  leq-Large-Meet-Semilattice =
    leq-Large-Poset (large-poset-Large-Meet-Semilattice L)

  refl-leq-Large-Meet-Semilattice :
    is-reflexive-Large-Relation
      ( type-Large-Meet-Semilattice)
      ( leq-Large-Meet-Semilattice)
  refl-leq-Large-Meet-Semilattice =
    refl-leq-Large-Poset (large-poset-Large-Meet-Semilattice L)

  antisymmetric-leq-Large-Meet-Semilattice :
    is-antisymmetric-Large-Relation
      ( type-Large-Meet-Semilattice)
      ( leq-Large-Meet-Semilattice)
  antisymmetric-leq-Large-Meet-Semilattice =
    antisymmetric-leq-Large-Poset (large-poset-Large-Meet-Semilattice L)

  transitive-leq-Large-Meet-Semilattice :
    is-transitive-Large-Relation
      ( type-Large-Meet-Semilattice)
      ( leq-Large-Meet-Semilattice)
  transitive-leq-Large-Meet-Semilattice =
    transitive-leq-Large-Poset (large-poset-Large-Meet-Semilattice L)

  has-meets-Large-Meet-Semilattice :
    has-meets-Large-Poset (large-poset-Large-Meet-Semilattice L)
  has-meets-Large-Meet-Semilattice =
    has-meets-is-large-meet-semilattice-Large-Poset
      ( is-large-meet-semilattice-Large-Meet-Semilattice L)

  meet-Large-Meet-Semilattice :
    {l1 l2 : Level}
    (x : type-Large-Meet-Semilattice l1)
    (y : type-Large-Meet-Semilattice l2) 
    type-Large-Meet-Semilattice (l1  l2)
  meet-Large-Meet-Semilattice =
    meet-is-large-meet-semilattice-Large-Poset
      ( large-poset-Large-Meet-Semilattice L)
      ( is-large-meet-semilattice-Large-Meet-Semilattice L)

  is-greatest-binary-lower-bound-meet-Large-Meet-Semilattice :
    {l1 l2 : Level}
    (x : type-Large-Meet-Semilattice l1)
    (y : type-Large-Meet-Semilattice l2) 
    is-greatest-binary-lower-bound-Large-Poset
      ( large-poset-Large-Meet-Semilattice L)
      ( x)
      ( y)
      ( meet-Large-Meet-Semilattice x y)
  is-greatest-binary-lower-bound-meet-Large-Meet-Semilattice =
    is-greatest-binary-lower-bound-meet-is-large-meet-semilattice-Large-Poset
      ( large-poset-Large-Meet-Semilattice L)
      ( is-large-meet-semilattice-Large-Meet-Semilattice L)

  ap-meet-Large-Meet-Semilattice :
    {l1 l2 : Level}
    {x x' : type-Large-Meet-Semilattice l1}
    {y y' : type-Large-Meet-Semilattice l2} 
    (x  x')  (y  y') 
    meet-Large-Meet-Semilattice x y  meet-Large-Meet-Semilattice x' y'
  ap-meet-Large-Meet-Semilattice p q =
    ap-binary meet-Large-Meet-Semilattice p q

  has-top-element-Large-Meet-Semilattice :
    has-top-element-Large-Poset (large-poset-Large-Meet-Semilattice L)
  has-top-element-Large-Meet-Semilattice =
    has-top-element-is-large-meet-semilattice-Large-Poset
      ( is-large-meet-semilattice-Large-Meet-Semilattice L)

  top-Large-Meet-Semilattice :
    type-Large-Meet-Semilattice lzero
  top-Large-Meet-Semilattice =
    top-is-large-meet-semilattice-Large-Poset
      ( large-poset-Large-Meet-Semilattice L)
      ( is-large-meet-semilattice-Large-Meet-Semilattice L)

  is-top-element-top-Large-Meet-Semilattice :
    {l1 : Level} (x : type-Large-Meet-Semilattice l1) 
    leq-Large-Meet-Semilattice x top-Large-Meet-Semilattice
  is-top-element-top-Large-Meet-Semilattice =
    is-top-element-top-is-large-meet-semilattice-Large-Poset
      ( large-poset-Large-Meet-Semilattice L)
      ( is-large-meet-semilattice-Large-Meet-Semilattice L)
```

### Small meet semilattices from large meet semilattices

```agda
module _
  {α : Level  Level} {β : Level  Level  Level}
  (L : Large-Meet-Semilattice α β)
  where

  poset-Large-Meet-Semilattice : (l : Level)  Poset (α l) (β l l)
  poset-Large-Meet-Semilattice =
    poset-Large-Poset (large-poset-Large-Meet-Semilattice L)

  is-meet-semilattice-poset-Large-Meet-Semilattice :
    {l : Level}  is-meet-semilattice-Poset (poset-Large-Meet-Semilattice l)
  pr1 (is-meet-semilattice-poset-Large-Meet-Semilattice x y) =
    meet-Large-Meet-Semilattice L x y
  pr2 (is-meet-semilattice-poset-Large-Meet-Semilattice x y) =
    is-greatest-binary-lower-bound-meet-Large-Meet-Semilattice L x y

  order-theoretic-meet-semilattice-Large-Meet-Semilattice :
    (l : Level)  Order-Theoretic-Meet-Semilattice (α l) (β l l)
  pr1 (order-theoretic-meet-semilattice-Large-Meet-Semilattice l) =
    poset-Large-Meet-Semilattice l
  pr2 (order-theoretic-meet-semilattice-Large-Meet-Semilattice l) =
    is-meet-semilattice-poset-Large-Meet-Semilattice

  meet-semilattice-Large-Meet-Semilattice :
    (l : Level)  Meet-Semilattice (α l)
  meet-semilattice-Large-Meet-Semilattice l =
    meet-semilattice-Order-Theoretic-Meet-Semilattice
      ( order-theoretic-meet-semilattice-Large-Meet-Semilattice l)
```