# Subuniverses
```agda
module foundation.subuniverses where
```
<details><summary>Imports</summary>
```agda
open import foundation.dependent-pair-types
open import foundation.equality-dependent-function-types
open import foundation.equivalences
open import foundation.fundamental-theorem-of-identity-types
open import foundation.subtype-identity-principle
open import foundation.univalence
open import foundation.universe-levels
open import foundation-core.contractible-types
open import foundation-core.embeddings
open import foundation-core.fibers-of-maps
open import foundation-core.functoriality-dependent-pair-types
open import foundation-core.identity-types
open import foundation-core.propositions
open import foundation-core.subtypes
open import foundation-core.torsorial-type-families
open import foundation-core.transport-along-identifications
```
</details>
## Idea
**Subuniverses** are [subtypes](foundation-core.subtypes.md) of the universe.
## Definitions
### Subuniverses
```agda
is-subuniverse :
{l1 l2 : Level} (P : UU l1 → UU l2) → UU (lsuc l1 ⊔ l2)
is-subuniverse P = is-subtype P
subuniverse :
(l1 l2 : Level) → UU (lsuc l1 ⊔ lsuc l2)
subuniverse l1 l2 = subtype l2 (UU l1)
is-subtype-subuniverse :
{l1 l2 : Level} (P : subuniverse l1 l2) (X : UU l1) →
is-prop (is-in-subtype P X)
is-subtype-subuniverse P X = is-prop-is-in-subtype P X
module _
{l1 l2 : Level} (P : subuniverse l1 l2)
where
type-subuniverse : UU (lsuc l1 ⊔ l2)
type-subuniverse = type-subtype P
is-in-subuniverse : UU l1 → UU l2
is-in-subuniverse = is-in-subtype P
is-prop-is-in-subuniverse : (X : UU l1) → is-prop (is-in-subuniverse X)
is-prop-is-in-subuniverse = is-prop-is-in-subtype P
inclusion-subuniverse : type-subuniverse → UU l1
inclusion-subuniverse = inclusion-subtype P
is-in-subuniverse-inclusion-subuniverse :
(X : type-subuniverse) → is-in-subuniverse (inclusion-subuniverse X)
is-in-subuniverse-inclusion-subuniverse = pr2
is-emb-inclusion-subuniverse : is-emb inclusion-subuniverse
is-emb-inclusion-subuniverse = is-emb-inclusion-subtype P
emb-inclusion-subuniverse : type-subuniverse ↪ UU l1
emb-inclusion-subuniverse = emb-subtype P
```
### The predicate of essentially being in a subuniverse
```agda
module _
{l1 l2 : Level} (P : subuniverse l1 l2)
where
is-essentially-in-subuniverse :
{l3 : Level} (X : UU l3) → UU (lsuc l1 ⊔ l2 ⊔ l3)
is-essentially-in-subuniverse X =
Σ (type-subuniverse P) (λ Y → inclusion-subuniverse P Y ≃ X)
is-prop-is-essentially-in-subuniverse :
{l3 : Level} (X : UU l3) → is-prop (is-essentially-in-subuniverse X)
is-prop-is-essentially-in-subuniverse X =
is-prop-is-proof-irrelevant
( λ ((X' , p) , e) →
is-torsorial-Eq-subtype
( is-contr-equiv'
( Σ (UU _) (λ T → T ≃ X'))
( equiv-tot (equiv-postcomp-equiv e))
( is-torsorial-equiv' X'))
( is-prop-is-in-subuniverse P)
( X')
( e)
( p))
is-essentially-in-subuniverse-Prop :
{l3 : Level} (X : UU l3) → Prop (lsuc l1 ⊔ l2 ⊔ l3)
pr1 (is-essentially-in-subuniverse-Prop X) =
is-essentially-in-subuniverse X
pr2 (is-essentially-in-subuniverse-Prop X) =
is-prop-is-essentially-in-subuniverse X
```
## Properties
### Subuniverses are closed under equivalences
```agda
module _
{l1 l2 : Level} (P : subuniverse l1 l2) {X Y : UU l1}
where
is-in-subuniverse-equiv :
X ≃ Y → is-in-subuniverse P X → is-in-subuniverse P Y
is-in-subuniverse-equiv e = tr (is-in-subuniverse P) (eq-equiv e)
is-in-subuniverse-equiv' :
X ≃ Y → is-in-subuniverse P Y → is-in-subuniverse P X
is-in-subuniverse-equiv' e = tr (is-in-subuniverse P) (inv (eq-equiv e))
```
### Characterization of the identity type of subuniverses
```agda
module _
{l1 l2 : Level} (P : subuniverse l1 l2)
where
equiv-subuniverse : (X Y : type-subuniverse P) → UU l1
equiv-subuniverse X Y = (pr1 X) ≃ (pr1 Y)
equiv-eq-subuniverse :
(X Y : type-subuniverse P) → X = Y → equiv-subuniverse X Y
equiv-eq-subuniverse X .X refl = id-equiv
abstract
is-torsorial-equiv-subuniverse :
(X : type-subuniverse P) →
is-torsorial (λ Y → equiv-subuniverse X Y)
is-torsorial-equiv-subuniverse (X , p) =
is-torsorial-Eq-subtype
( is-torsorial-equiv X)
( is-subtype-subuniverse P)
( X)
( id-equiv)
( p)
is-torsorial-equiv-subuniverse' :
(X : type-subuniverse P) →
is-torsorial (λ Y → equiv-subuniverse Y X)
is-torsorial-equiv-subuniverse' (X , p) =
is-torsorial-Eq-subtype
( is-torsorial-equiv' X)
( is-subtype-subuniverse P)
( X)
( id-equiv)
( p)
abstract
is-equiv-equiv-eq-subuniverse :
(X Y : type-subuniverse P) → is-equiv (equiv-eq-subuniverse X Y)
is-equiv-equiv-eq-subuniverse X =
fundamental-theorem-id
( is-torsorial-equiv-subuniverse X)
( equiv-eq-subuniverse X)
extensionality-subuniverse :
(X Y : type-subuniverse P) → (X = Y) ≃ equiv-subuniverse X Y
pr1 (extensionality-subuniverse X Y) = equiv-eq-subuniverse X Y
pr2 (extensionality-subuniverse X Y) = is-equiv-equiv-eq-subuniverse X Y
eq-equiv-subuniverse :
{X Y : type-subuniverse P} → equiv-subuniverse X Y → X = Y
eq-equiv-subuniverse {X} {Y} =
map-inv-is-equiv (is-equiv-equiv-eq-subuniverse X Y)
compute-eq-equiv-id-equiv-subuniverse :
{X : type-subuniverse P} →
eq-equiv-subuniverse {X} {X} (id-equiv {A = pr1 X}) = refl
compute-eq-equiv-id-equiv-subuniverse =
is-retraction-map-inv-equiv (extensionality-subuniverse _ _) refl
```
### Equivalences of families of types in a subuniverse
```agda
fam-subuniverse :
{l1 l2 l3 : Level} (P : subuniverse l1 l2) (X : UU l3) →
UU (lsuc l1 ⊔ l2 ⊔ l3)
fam-subuniverse P X = X → type-subuniverse P
module _
{l1 l2 l3 : Level} (P : subuniverse l1 l2) {X : UU l3}
where
equiv-fam-subuniverse :
(Y Z : fam-subuniverse P X) → UU (l1 ⊔ l3)
equiv-fam-subuniverse Y Z = (x : X) → equiv-subuniverse P (Y x) (Z x)
id-equiv-fam-subuniverse :
(Y : fam-subuniverse P X) → equiv-fam-subuniverse Y Y
id-equiv-fam-subuniverse Y x = id-equiv
is-torsorial-equiv-fam-subuniverse :
(Y : fam-subuniverse P X) →
is-torsorial (equiv-fam-subuniverse Y)
is-torsorial-equiv-fam-subuniverse Y =
is-torsorial-Eq-Π (λ x → is-torsorial-equiv-subuniverse P (Y x))
equiv-eq-fam-subuniverse :
(Y Z : fam-subuniverse P X) → Y = Z → equiv-fam-subuniverse Y Z
equiv-eq-fam-subuniverse Y .Y refl = id-equiv-fam-subuniverse Y
is-equiv-equiv-eq-fam-subuniverse :
(Y Z : fam-subuniverse P X) → is-equiv (equiv-eq-fam-subuniverse Y Z)
is-equiv-equiv-eq-fam-subuniverse Y =
fundamental-theorem-id
( is-torsorial-equiv-fam-subuniverse Y)
( equiv-eq-fam-subuniverse Y)
extensionality-fam-subuniverse :
(Y Z : fam-subuniverse P X) → (Y = Z) ≃ equiv-fam-subuniverse Y Z
pr1 (extensionality-fam-subuniverse Y Z) = equiv-eq-fam-subuniverse Y Z
pr2 (extensionality-fam-subuniverse Y Z) =
is-equiv-equiv-eq-fam-subuniverse Y Z
eq-equiv-fam-subuniverse :
(Y Z : fam-subuniverse P X) → equiv-fam-subuniverse Y Z → (Y = Z)
eq-equiv-fam-subuniverse Y Z =
map-inv-is-equiv (is-equiv-equiv-eq-fam-subuniverse Y Z)
```
## See also
- [Σ-closed subuniverses](foundation.sigma-closed-subuniverses.md)