# Global subuniverses
```agda
module foundation.global-subuniverses where
```
<details><summary>Imports</summary>
```agda
open import foundation.dependent-pair-types
open import foundation.iterated-dependent-product-types
open import foundation.subuniverses
open import foundation.universe-levels
open import foundation-core.equivalences
open import foundation-core.fibers-of-maps
open import foundation-core.identity-types
open import foundation-core.propositions
```
</details>
## Idea
**Global subuniverses** are [subtypes](foundation-core.subtypes.md) of the large
universe that are defined at every level, and are closed under
[equivalences of types](foundation-core.equivalences.md). This does not follow
from [univalence](foundation.univalence.md), as equivalence induction only holds
for homogeneous equivalences, i.e. equivalences in a single universe.
## Definitions
### The predicate on families of subuniverses of being closed under equivalences
```agda
module _
(α : Level → Level) (P : (l : Level) → subuniverse l (α l))
(l1 l2 : Level)
where
is-closed-under-equiv-subuniverses : UU (α l1 ⊔ α l2 ⊔ lsuc l1 ⊔ lsuc l2)
is-closed-under-equiv-subuniverses =
(X : UU l1) (Y : UU l2) → X ≃ Y → type-Prop (P l1 X) → type-Prop (P l2 Y)
is-prop-is-closed-under-equiv-subuniverses :
is-prop is-closed-under-equiv-subuniverses
is-prop-is-closed-under-equiv-subuniverses =
is-prop-iterated-Π 4 (λ X Y e x → is-prop-type-Prop (P l2 Y))
is-closed-under-equiv-subuniverses-Prop :
Prop (α l1 ⊔ α l2 ⊔ lsuc l1 ⊔ lsuc l2)
pr1 is-closed-under-equiv-subuniverses-Prop =
is-closed-under-equiv-subuniverses
pr2 is-closed-under-equiv-subuniverses-Prop =
is-prop-is-closed-under-equiv-subuniverses
```
### The global type of global subuniverses
```agda
record global-subuniverse (α : Level → Level) : UUω where
field
subuniverse-global-subuniverse :
(l : Level) → subuniverse l (α l)
is-closed-under-equiv-global-subuniverse :
(l1 l2 : Level) →
is-closed-under-equiv-subuniverses α subuniverse-global-subuniverse l1 l2
is-in-global-subuniverse : {l : Level} → UU l → UU (α l)
is-in-global-subuniverse {l} X =
is-in-subuniverse (subuniverse-global-subuniverse l) X
is-prop-is-in-global-subuniverse :
{l : Level} (X : UU l) → is-prop (is-in-global-subuniverse X)
is-prop-is-in-global-subuniverse {l} X =
is-prop-type-Prop (subuniverse-global-subuniverse l X)
type-global-subuniverse : (l : Level) → UU (α l ⊔ lsuc l)
type-global-subuniverse l =
type-subuniverse (subuniverse-global-subuniverse l)
inclusion-global-subuniverse :
{l : Level} → type-global-subuniverse l → UU l
inclusion-global-subuniverse {l} =
inclusion-subuniverse (subuniverse-global-subuniverse l)
open global-subuniverse public
```
### The predicate of essentially being in a subuniverse
We say a type is _essentially in_ a global universe at universe level `l` if it
is essentially in the subuniverse at level `l`.
```agda
module _
{α : Level → Level} (P : global-subuniverse α)
{l1 : Level} (l2 : Level) (X : UU l1)
where
is-essentially-in-global-subuniverse : UU (α l2 ⊔ l1 ⊔ lsuc l2)
is-essentially-in-global-subuniverse =
is-essentially-in-subuniverse (subuniverse-global-subuniverse P l2) X
is-prop-is-essentially-in-global-subuniverse :
is-prop is-essentially-in-global-subuniverse
is-prop-is-essentially-in-global-subuniverse =
is-prop-is-essentially-in-subuniverse
( subuniverse-global-subuniverse P l2) X
is-essentially-in-global-subuniverse-Prop : Prop (α l2 ⊔ l1 ⊔ lsuc l2)
is-essentially-in-global-subuniverse-Prop =
is-essentially-in-subuniverse-Prop (subuniverse-global-subuniverse P l2) X
```
## Properties
### Global subuniverses are closed under homogenous equivalences
This is true for any family of subuniverses indexed by universe levels.
```agda
module _
{α : Level → Level} (P : global-subuniverse α)
{l : Level} {X Y : UU l}
where
is-in-global-subuniverse-homogenous-equiv :
X ≃ Y → is-in-global-subuniverse P X → is-in-global-subuniverse P Y
is-in-global-subuniverse-homogenous-equiv =
is-in-subuniverse-equiv (subuniverse-global-subuniverse P l)
is-in-global-subuniverse-homogenous-equiv' :
X ≃ Y → is-in-global-subuniverse P Y → is-in-global-subuniverse P X
is-in-global-subuniverse-homogenous-equiv' =
is-in-subuniverse-equiv' (subuniverse-global-subuniverse P l)
```
### Characterization of the identity type of global subuniverses at a universe level
```agda
module _
{α : Level → Level} {l : Level} (P : global-subuniverse α)
where
equiv-global-subuniverse-Level : (X Y : type-global-subuniverse P l) → UU l
equiv-global-subuniverse-Level =
equiv-subuniverse (subuniverse-global-subuniverse P l)
equiv-eq-global-subuniverse-Level :
(X Y : type-global-subuniverse P l) →
X = Y → equiv-global-subuniverse-Level X Y
equiv-eq-global-subuniverse-Level =
equiv-eq-subuniverse (subuniverse-global-subuniverse P l)
abstract
is-equiv-equiv-eq-global-subuniverse-Level :
(X Y : type-global-subuniverse P l) →
is-equiv (equiv-eq-global-subuniverse-Level X Y)
is-equiv-equiv-eq-global-subuniverse-Level =
is-equiv-equiv-eq-subuniverse (subuniverse-global-subuniverse P l)
extensionality-global-subuniverse-Level :
(X Y : type-global-subuniverse P l) →
(X = Y) ≃ equiv-global-subuniverse-Level X Y
extensionality-global-subuniverse-Level =
extensionality-subuniverse (subuniverse-global-subuniverse P l)
eq-equiv-global-subuniverse-Level :
{X Y : type-global-subuniverse P l} →
equiv-global-subuniverse-Level X Y → X = Y
eq-equiv-global-subuniverse-Level =
eq-equiv-subuniverse (subuniverse-global-subuniverse P l)
compute-eq-equiv-id-equiv-global-subuniverse-Level :
{X : type-global-subuniverse P l} →
eq-equiv-global-subuniverse-Level {X} {X} (id-equiv {A = pr1 X}) = refl
compute-eq-equiv-id-equiv-global-subuniverse-Level =
compute-eq-equiv-id-equiv-subuniverse (subuniverse-global-subuniverse P l)
```
### Equivalences of families of types in a global subuniverse
```agda
fam-global-subuniverse :
{α : Level → Level} (P : global-subuniverse α)
{l1 : Level} (l2 : Level) (X : UU l1) → UU (α l2 ⊔ l1 ⊔ lsuc l2)
fam-global-subuniverse P l2 X = X → type-global-subuniverse P l2
module _
{α : Level → Level} (P : global-subuniverse α)
{l1 : Level} (l2 : Level) {X : UU l1}
(Y Z : fam-global-subuniverse P l2 X)
where
equiv-fam-global-subuniverse : UU (l1 ⊔ l2)
equiv-fam-global-subuniverse =
equiv-fam-subuniverse (subuniverse-global-subuniverse P l2) Y Z
equiv-eq-fam-global-subuniverse :
Y = Z → equiv-fam-global-subuniverse
equiv-eq-fam-global-subuniverse =
equiv-eq-fam-subuniverse (subuniverse-global-subuniverse P l2) Y Z
is-equiv-equiv-eq-fam-global-subuniverse :
is-equiv equiv-eq-fam-global-subuniverse
is-equiv-equiv-eq-fam-global-subuniverse =
is-equiv-equiv-eq-fam-subuniverse (subuniverse-global-subuniverse P l2) Y Z
extensionality-fam-global-subuniverse :
(Y = Z) ≃ equiv-fam-global-subuniverse
extensionality-fam-global-subuniverse =
extensionality-fam-subuniverse (subuniverse-global-subuniverse P l2) Y Z
eq-equiv-fam-global-subuniverse : equiv-fam-global-subuniverse → Y = Z
eq-equiv-fam-global-subuniverse =
map-inv-is-equiv is-equiv-equiv-eq-fam-global-subuniverse
```
## See also
- [Large categories](category-theory.large-categories.md)