# Connected components of universes ```agda module foundation.connected-components-universes where ``` <details><summary>Imports</summary> ```agda open import foundation.0-connected-types open import foundation.dependent-pair-types open import foundation.empty-types open import foundation.functoriality-propositional-truncation open import foundation.fundamental-theorem-of-identity-types open import foundation.mere-equivalences open import foundation.propositional-truncations open import foundation.raising-universe-levels open import foundation.subtype-identity-principle open import foundation.subuniverses open import foundation.univalence open import foundation.universe-levels open import foundation-core.contractible-types open import foundation-core.equivalences open import foundation-core.identity-types open import foundation-core.subtypes open import foundation-core.torsorial-type-families ``` </details> ## Idea The **connected component** of a universe `UU l` at a type `A : UU l` is the type of all `X : UU l` that are [merely equivalent](foundation.mere-equivalences.md) to `A`. More generally, we define the component of a universe `UU l1` of types [merely equal](foundation.mere-equality.md) to `A : UU l2`. ## Definition ### The connected component of a universe with variable universe ```agda component-UU-Level : (l1 : Level) {l2 : Level} (A : UU l2) → UU (lsuc l1 ⊔ l2) component-UU-Level l1 A = type-subtype (mere-equiv-Prop {l2 = l1} A) type-component-UU-Level : {l1 l2 : Level} {A : UU l2} → component-UU-Level l1 A → UU l1 type-component-UU-Level X = pr1 X abstract mere-equiv-component-UU-Level : {l1 l2 : Level} {A : UU l2} (X : component-UU-Level l1 A) → mere-equiv A (type-component-UU-Level X) mere-equiv-component-UU-Level X = pr2 X ``` ### The connected component of a universe ```agda component-UU : {l1 : Level} (A : UU l1) → UU (lsuc l1) component-UU {l1} A = component-UU-Level l1 A type-component-UU : {l1 : Level} {A : UU l1} (X : component-UU A) → UU l1 type-component-UU X = type-component-UU-Level X abstract mere-equiv-component-UU : {l1 : Level} {A : UU l1} (X : component-UU A) → mere-equiv A (type-component-UU X) mere-equiv-component-UU X = mere-equiv-component-UU-Level X ``` ## Properties ### Characterization of the identity types of `component-UU` ```agda equiv-component-UU-Level : {l1 l2 : Level} {A : UU l2} (X Y : component-UU-Level l1 A) → UU l1 equiv-component-UU-Level X Y = type-component-UU-Level X ≃ type-component-UU-Level Y id-equiv-component-UU-Level : {l1 l2 : Level} {A : UU l2} (X : component-UU-Level l1 A) → equiv-component-UU-Level X X id-equiv-component-UU-Level X = id-equiv equiv-eq-component-UU-Level : {l1 l2 : Level} {A : UU l2} {X Y : component-UU-Level l1 A} → X = Y → equiv-component-UU-Level X Y equiv-eq-component-UU-Level {X = X} refl = id-equiv-component-UU-Level X abstract is-torsorial-equiv-component-UU-Level : {l1 l2 : Level} {A : UU l2} (X : component-UU-Level l1 A) → is-torsorial (equiv-component-UU-Level X) is-torsorial-equiv-component-UU-Level X = is-torsorial-Eq-subtype ( is-torsorial-equiv (type-component-UU-Level X)) ( λ Y → is-prop-mere-equiv _ Y) ( type-component-UU-Level X) ( id-equiv) ( mere-equiv-component-UU-Level X) abstract is-equiv-equiv-eq-component-UU-Level : {l1 l2 : Level} {A : UU l2} (X Y : component-UU-Level l1 A) → is-equiv (equiv-eq-component-UU-Level {X = X} {Y}) is-equiv-equiv-eq-component-UU-Level X = fundamental-theorem-id ( is-torsorial-equiv-component-UU-Level X) ( λ Y → equiv-eq-component-UU-Level {X = X} {Y}) eq-equiv-component-UU-Level : {l1 l2 : Level} {A : UU l2} (X Y : component-UU-Level l1 A) → equiv-component-UU-Level X Y → X = Y eq-equiv-component-UU-Level X Y = map-inv-is-equiv (is-equiv-equiv-eq-component-UU-Level X Y) equiv-component-UU : {l1 : Level} {A : UU l1} (X Y : component-UU A) → UU l1 equiv-component-UU X Y = equiv-component-UU-Level X Y id-equiv-component-UU : {l1 : Level} {A : UU l1} (X : component-UU A) → equiv-component-UU X X id-equiv-component-UU X = id-equiv-component-UU-Level X equiv-eq-component-UU : {l1 : Level} {A : UU l1} {X Y : component-UU A} → X = Y → equiv-component-UU X Y equiv-eq-component-UU p = equiv-eq-component-UU-Level p abstract is-torsorial-equiv-component-UU : {l1 : Level} {A : UU l1} (X : component-UU A) → is-torsorial (equiv-component-UU X) is-torsorial-equiv-component-UU X = is-torsorial-equiv-component-UU-Level X abstract is-equiv-equiv-eq-component-UU : {l1 : Level} {A : UU l1} (X Y : component-UU A) → is-equiv (equiv-eq-component-UU {X = X} {Y}) is-equiv-equiv-eq-component-UU X Y = is-equiv-equiv-eq-component-UU-Level X Y eq-equiv-component-UU : {l1 : Level} {A : UU l1} (X Y : component-UU A) → equiv-component-UU X Y → X = Y eq-equiv-component-UU X Y = eq-equiv-component-UU-Level X Y ``` ```agda abstract is-contr-component-UU-Level-empty : (l : Level) → is-contr (component-UU-Level l empty) pr1 (pr1 (is-contr-component-UU-Level-empty l)) = raise-empty l pr2 (pr1 (is-contr-component-UU-Level-empty l)) = unit-trunc-Prop (compute-raise l empty) pr2 (is-contr-component-UU-Level-empty l) X = eq-equiv-subuniverse ( mere-equiv-Prop empty) ( equiv-is-empty ( map-inv-equiv (compute-raise l empty)) ( λ x → apply-universal-property-trunc-Prop ( pr2 X) ( empty-Prop) ( λ e → map-inv-equiv e x))) abstract is-contr-component-UU-empty : is-contr (component-UU empty) is-contr-component-UU-empty = is-contr-component-UU-Level-empty lzero ``` ### The connected components of universes are `0`-connected ```agda abstract is-0-connected-component-UU : {l : Level} (X : UU l) → is-0-connected (component-UU X) is-0-connected-component-UU X = is-0-connected-mere-eq ( pair X (refl-mere-equiv X)) ( λ Y → map-trunc-Prop ( eq-equiv-component-UU (pair X (refl-mere-equiv X)) Y) ( mere-equiv-component-UU Y)) ```