# The large locale of subtypes

```agda
module foundation.large-locale-of-subtypes where
```

<details><summary>Imports</summary>

```agda
open import foundation.large-binary-relations
open import foundation.large-locale-of-propositions
open import foundation.universe-levels

open import foundation-core.identity-types
open import foundation-core.sets

open import order-theory.greatest-lower-bounds-large-posets
open import order-theory.large-locales
open import order-theory.large-meet-semilattices
open import order-theory.large-posets
open import order-theory.large-suplattices
open import order-theory.least-upper-bounds-large-posets
open import order-theory.powers-of-large-locales
```

</details>

## Idea

The **large locale of subtypes** of a type `A` is the
[power locale](order-theory.powers-of-large-locales.md) `A → Prop-Large-Locale`.

## Definition

```agda
module _
  {l1 : Level} (A : UU l1)
  where

  powerset-Large-Locale :
    Large-Locale  l2  l1  lsuc l2)  l2 l3  l1  l2  l3) lzero
  powerset-Large-Locale = power-Large-Locale A Prop-Large-Locale

  large-poset-powerset-Large-Locale :
    Large-Poset  l2  l1  lsuc l2)  l2 l3  l1  l2  l3)
  large-poset-powerset-Large-Locale =
    large-poset-Large-Locale powerset-Large-Locale

  set-powerset-Large-Locale : (l : Level)  Set (l1  lsuc l)
  set-powerset-Large-Locale =
    set-Large-Locale powerset-Large-Locale

  type-powerset-Large-Locale : (l : Level)  UU (l1  lsuc l)
  type-powerset-Large-Locale =
    type-Large-Locale powerset-Large-Locale

  is-set-type-powerset-Large-Locale :
    {l : Level}  is-set (type-powerset-Large-Locale l)
  is-set-type-powerset-Large-Locale =
    is-set-type-Large-Locale powerset-Large-Locale

  large-meet-semilattice-powerset-Large-Locale :
    Large-Meet-Semilattice  l2  l1  lsuc l2)  l2 l3  l1  l2  l3)
  large-meet-semilattice-powerset-Large-Locale =
    large-meet-semilattice-Large-Locale powerset-Large-Locale

  large-suplattice-powerset-Large-Locale :
    Large-Suplattice  l2  l1  lsuc l2)  l2 l3  l1  l2  l3) lzero
  large-suplattice-powerset-Large-Locale =
    large-suplattice-Large-Locale powerset-Large-Locale

module _
  {l1 : Level} {A : UU l1}
  where

  leq-prop-powerset-Large-Locale :
    Large-Relation-Prop
      ( λ l2 l3  l1  l2  l3)
      ( type-powerset-Large-Locale A)
  leq-prop-powerset-Large-Locale =
    leq-prop-Large-Locale (powerset-Large-Locale A)

  leq-powerset-Large-Locale :
    Large-Relation
      ( λ l2 l3  l1  l2  l3)
      ( type-powerset-Large-Locale A)
  leq-powerset-Large-Locale =
    leq-Large-Locale (powerset-Large-Locale A)

  is-prop-leq-powerset-Large-Locale :
    is-prop-Large-Relation
      ( type-powerset-Large-Locale A)
      ( leq-powerset-Large-Locale)
  is-prop-leq-powerset-Large-Locale =
    is-prop-leq-Large-Locale (powerset-Large-Locale A)

  refl-leq-powerset-Large-Locale :
    is-reflexive-Large-Relation
      ( type-powerset-Large-Locale A)
      ( leq-powerset-Large-Locale)
  refl-leq-powerset-Large-Locale =
    refl-leq-Large-Locale (powerset-Large-Locale A)

  antisymmetric-leq-powerset-Large-Locale :
    is-antisymmetric-Large-Relation
      ( type-powerset-Large-Locale A)
      ( leq-powerset-Large-Locale)
  antisymmetric-leq-powerset-Large-Locale =
    antisymmetric-leq-Large-Locale (powerset-Large-Locale A)

  transitive-leq-powerset-Large-Locale :
    is-transitive-Large-Relation
      ( type-powerset-Large-Locale A)
      ( leq-powerset-Large-Locale)
  transitive-leq-powerset-Large-Locale =
    transitive-leq-Large-Locale (powerset-Large-Locale A)

  has-meets-powerset-Large-Locale :
    has-meets-Large-Poset (large-poset-powerset-Large-Locale A)
  has-meets-powerset-Large-Locale =
    has-meets-Large-Locale (powerset-Large-Locale A)

  meet-powerset-Large-Locale :
    {l2 l3 : Level} 
    type-powerset-Large-Locale A l2 
    type-powerset-Large-Locale A l3 
    type-powerset-Large-Locale A (l2  l3)
  meet-powerset-Large-Locale =
    meet-Large-Locale (powerset-Large-Locale A)

  is-greatest-binary-lower-bound-meet-powerset-Large-Locale :
    {l2 l3 : Level}
    (x : type-powerset-Large-Locale A l2)
    (y : type-powerset-Large-Locale A l3) 
    is-greatest-binary-lower-bound-Large-Poset
      ( large-poset-powerset-Large-Locale A)
      ( x)
      ( y)
      ( meet-powerset-Large-Locale x y)
  is-greatest-binary-lower-bound-meet-powerset-Large-Locale =
    is-greatest-binary-lower-bound-meet-Large-Locale (powerset-Large-Locale A)

  is-large-suplattice-powerset-Large-Locale :
    is-large-suplattice-Large-Poset lzero (large-poset-powerset-Large-Locale A)
  is-large-suplattice-powerset-Large-Locale =
    is-large-suplattice-Large-Locale (powerset-Large-Locale A)

  sup-powerset-Large-Locale :
    {l2 l3 : Level} {J : UU l2} (x : J  type-powerset-Large-Locale A l3) 
    type-powerset-Large-Locale A (l2  l3)
  sup-powerset-Large-Locale =
    sup-Large-Locale (powerset-Large-Locale A)

  is-least-upper-bound-sup-powerset-Large-Locale :
    {l2 l3 : Level} {J : UU l2} (x : J  type-powerset-Large-Locale A l3) 
    is-least-upper-bound-family-of-elements-Large-Poset
      ( large-poset-powerset-Large-Locale A)
      ( x)
      ( sup-powerset-Large-Locale x)
  is-least-upper-bound-sup-powerset-Large-Locale =
    is-least-upper-bound-sup-Large-Locale (powerset-Large-Locale A)

  distributive-meet-sup-powerset-Large-Locale :
    {l2 l3 l4 : Level}
    (x : type-powerset-Large-Locale A l2)
    {J : UU l3} (y : J  type-powerset-Large-Locale A l4) 
    meet-powerset-Large-Locale x (sup-powerset-Large-Locale y) 
    sup-powerset-Large-Locale  j  meet-powerset-Large-Locale x (y j))
  distributive-meet-sup-powerset-Large-Locale =
    distributive-meet-sup-Large-Locale (powerset-Large-Locale A)
```