# Connected maps ```agda module foundation.connected-maps where ``` <details><summary>Imports</summary> ```agda open import foundation.connected-types open import foundation.dependent-pair-types open import foundation.function-extensionality open import foundation.fundamental-theorem-of-identity-types open import foundation.homotopy-induction open import foundation.precomposition-dependent-functions open import foundation.structure-identity-principle open import foundation.subtype-identity-principle open import foundation.truncated-types open import foundation.truncation-levels open import foundation.truncations open import foundation.univalence open import foundation.universal-property-family-of-fibers-of-maps open import foundation.universe-levels open import foundation-core.contractible-maps open import foundation-core.embeddings open import foundation-core.equivalences open import foundation-core.fibers-of-maps open import foundation-core.function-types open import foundation-core.functoriality-dependent-pair-types open import foundation-core.homotopies 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.truncated-maps ``` </details> ## Idea A map is said to be **`k`-connected** if its [fibers](foundation-core.fibers-of-maps.md) are [`k`-connected types](foundation.connected-types.md). ## Definitions ### Connected maps ```agda is-connected-map-Prop : {l1 l2 : Level} (k : π) {A : UU l1} {B : UU l2} β (A β B) β Prop (l1 β l2) is-connected-map-Prop k {B = B} f = Ξ -Prop B (Ξ» b β is-connected-Prop k (fiber f b)) is-connected-map : {l1 l2 : Level} (k : π) {A : UU l1} {B : UU l2} β (A β B) β UU (l1 β l2) is-connected-map k f = type-Prop (is-connected-map-Prop k f) is-prop-is-connected-map : {l1 l2 : Level} (k : π) {A : UU l1} {B : UU l2} (f : A β B) β is-prop (is-connected-map k f) is-prop-is-connected-map k f = is-prop-type-Prop (is-connected-map-Prop k f) ``` ### The type of connected maps between two types ```agda connected-map : {l1 l2 : Level} (k : π) β UU l1 β UU l2 β UU (l1 β l2) connected-map k A B = type-subtype (is-connected-map-Prop k {A} {B}) module _ {l1 l2 : Level} {k : π} {A : UU l1} {B : UU l2} where map-connected-map : connected-map k A B β A β B map-connected-map = inclusion-subtype (is-connected-map-Prop k) is-connected-map-connected-map : (f : connected-map k A B) β is-connected-map k (map-connected-map f) is-connected-map-connected-map = is-in-subtype-inclusion-subtype (is-connected-map-Prop k) emb-inclusion-connected-map : connected-map k A B βͺ (A β B) emb-inclusion-connected-map = emb-subtype (is-connected-map-Prop k) htpy-connected-map : (f g : connected-map k A B) β UU (l1 β l2) htpy-connected-map f g = (map-connected-map f) ~ (map-connected-map g) refl-htpy-connected-map : (f : connected-map k A B) β htpy-connected-map f f refl-htpy-connected-map f = refl-htpy is-torsorial-htpy-connected-map : (f : connected-map k A B) β is-torsorial (htpy-connected-map f) is-torsorial-htpy-connected-map f = is-torsorial-Eq-subtype ( is-torsorial-htpy (map-connected-map f)) ( is-prop-is-connected-map k) ( map-connected-map f) ( refl-htpy-connected-map f) ( is-connected-map-connected-map f) htpy-eq-connected-map : (f g : connected-map k A B) β f οΌ g β htpy-connected-map f g htpy-eq-connected-map f .f refl = refl-htpy-connected-map f is-equiv-htpy-eq-connected-map : (f g : connected-map k A B) β is-equiv (htpy-eq-connected-map f g) is-equiv-htpy-eq-connected-map f = fundamental-theorem-id ( is-torsorial-htpy-connected-map f) ( htpy-eq-connected-map f) extensionality-connected-map : (f g : connected-map k A B) β (f οΌ g) β htpy-connected-map f g pr1 (extensionality-connected-map f g) = htpy-eq-connected-map f g pr2 (extensionality-connected-map f g) = is-equiv-htpy-eq-connected-map f g eq-htpy-connected-map : (f g : connected-map k A B) β htpy-connected-map f g β (f οΌ g) eq-htpy-connected-map f g = map-inv-equiv (extensionality-connected-map f g) ``` ### The type of connected maps into a type ```agda Connected-Map : {l1 : Level} (l2 : Level) (k : π) (A : UU l1) β UU (l1 β lsuc l2) Connected-Map l2 k A = Ξ£ (UU l2) (Ξ» X β connected-map k A X) module _ {l1 l2 : Level} {k : π} {A : UU l1} (f : Connected-Map l2 k A) where type-Connected-Map : UU l2 type-Connected-Map = pr1 f connected-map-Connected-Map : connected-map k A type-Connected-Map connected-map-Connected-Map = pr2 f map-Connected-Map : A β type-Connected-Map map-Connected-Map = map-connected-map connected-map-Connected-Map is-connected-map-Connected-Map : is-connected-map k map-Connected-Map is-connected-map-Connected-Map = is-connected-map-connected-map connected-map-Connected-Map ``` ### The type of connected maps into a truncated type ```agda Connected-Map-Into-Truncated-Type : {l1 : Level} (l2 : Level) (k l : π) (A : UU l1) β UU (l1 β lsuc l2) Connected-Map-Into-Truncated-Type l2 k l A = Ξ£ (Truncated-Type l2 l) (Ξ» X β connected-map k A (type-Truncated-Type X)) module _ {l1 l2 : Level} {k l : π} {A : UU l1} (f : Connected-Map-Into-Truncated-Type l2 k l A) where truncated-type-Connected-Map-Into-Truncated-Type : Truncated-Type l2 l truncated-type-Connected-Map-Into-Truncated-Type = pr1 f type-Connected-Map-Into-Truncated-Type : UU l2 type-Connected-Map-Into-Truncated-Type = type-Truncated-Type truncated-type-Connected-Map-Into-Truncated-Type is-trunc-type-Connected-Map-Into-Truncated-Type : is-trunc l type-Connected-Map-Into-Truncated-Type is-trunc-type-Connected-Map-Into-Truncated-Type = is-trunc-type-Truncated-Type truncated-type-Connected-Map-Into-Truncated-Type connected-map-Connected-Map-Into-Truncated-Type : connected-map k A type-Connected-Map-Into-Truncated-Type connected-map-Connected-Map-Into-Truncated-Type = pr2 f map-Connected-Map-Into-Truncated-Type : A β type-Connected-Map-Into-Truncated-Type map-Connected-Map-Into-Truncated-Type = map-connected-map connected-map-Connected-Map-Into-Truncated-Type is-connected-map-Connected-Map-Into-Truncated-Type : is-connected-map k map-Connected-Map-Into-Truncated-Type is-connected-map-Connected-Map-Into-Truncated-Type = is-connected-map-connected-map connected-map-Connected-Map-Into-Truncated-Type ``` ## Properties ### All maps are `(-2)`-connected ```agda module _ {l1 l2 : Level} {A : UU l1} {B : UU l2} (f : A β B) where is-neg-two-connected-map : is-connected-map neg-two-π f is-neg-two-connected-map b = is-neg-two-connected (fiber f b) ``` ### Equivalences are `k`-connected for any `k` ```agda module _ {l1 l2 : Level} {k : π} {A : UU l1} {B : UU l2} where is-connected-map-is-equiv : {f : A β B} β is-equiv f β is-connected-map k f is-connected-map-is-equiv H b = is-connected-is-contr k (is-contr-map-is-equiv H b) is-connected-map-equiv : (e : A β B) β is-connected-map k (map-equiv e) is-connected-map-equiv e = is-connected-map-is-equiv (is-equiv-map-equiv e) connected-map-equiv : (A β B) β connected-map k A B pr1 (connected-map-equiv e) = map-equiv e pr2 (connected-map-equiv e) = is-connected-map-equiv e ``` ### A `(k+1)`-connected map is `k`-connected ```agda module _ {l1 l2 : Level} (k : π) {A : UU l1} {B : UU l2} {f : A β B} where is-connected-map-is-connected-map-succ-π : is-connected-map (succ-π k) f β is-connected-map k f is-connected-map-is-connected-map-succ-π H b = is-connected-is-connected-succ-π k (H b) ``` ### The composition of two `k`-connected maps is `k`-connected ```agda module _ {l1 l2 l3 : Level} (k : π) {A : UU l1} {B : UU l2} {C : UU l3} where is-connected-map-comp : {g : B β C} {f : A β B} β is-connected-map k g β is-connected-map k f β is-connected-map k (g β f) is-connected-map-comp K H c = is-connected-equiv ( compute-fiber-comp _ _ c) ( is-connected-Ξ£ k (K c) (H β pr1)) comp-connected-map : connected-map k B C β connected-map k A B β connected-map k A C pr1 (comp-connected-map g f) = map-connected-map g β map-connected-map f pr2 (comp-connected-map g f) = is-connected-map-comp ( is-connected-map-connected-map g) ( is-connected-map-connected-map f) ``` ### The total map induced by a family of maps is `k`-connected if and only if all maps in the family are `k`-connected ```agda module _ {l1 l2 l3 : Level} (k : π) {A : UU l1} {B : A β UU l2} {C : A β UU l3} (f : (x : A) β B x β C x) where is-connected-map-tot-is-fiberwise-connected-map : ((x : A) β is-connected-map k (f x)) β is-connected-map k (tot f) is-connected-map-tot-is-fiberwise-connected-map H (x , y) = is-connected-equiv (compute-fiber-tot f (x , y)) (H x y) is-fiberwise-connected-map-is-connected-map-tot : is-connected-map k (tot f) β (x : A) β is-connected-map k (f x) is-fiberwise-connected-map-is-connected-map-tot H x y = is-connected-equiv (inv-compute-fiber-tot f (x , y)) (H (x , y)) ``` ### Dependent universal property for connected maps ```agda module _ {l1 l2 : Level} (k : π) {A : UU l1} {B : UU l2} (f : A β B) where dependent-universal-property-connected-map : UUΟ dependent-universal-property-connected-map = {l3 : Level} (P : B β Truncated-Type l3 k) β is-equiv (precomp-Ξ f (Ξ» b β type-Truncated-Type (P b))) module _ {l1 l2 : Level} (k : π) {A : UU l1} {B : UU l2} {f : A β B} where dependent-universal-property-is-connected-map : is-connected-map k f β dependent-universal-property-connected-map k f dependent-universal-property-is-connected-map H P = is-equiv-precomp-Ξ -fiber-condition ( Ξ» b β is-equiv-diagonal-exponential-is-connected (P b) (H b)) module _ {l1 l2 : Level} (k : π) {A : UU l1} {B : UU l2} (f : connected-map k A B) where equiv-dependent-universal-property-is-connected-map : {l3 : Level} (P : B β Truncated-Type l3 k) β ((b : B) β type-Truncated-Type (P b)) β ((a : A) β type-Truncated-Type (P (map-connected-map f a))) pr1 (equiv-dependent-universal-property-is-connected-map P) = precomp-Ξ (map-connected-map f) (Ξ» b β type-Truncated-Type (P b)) pr2 (equiv-dependent-universal-property-is-connected-map P) = dependent-universal-property-is-connected-map k ( is-connected-map-connected-map f) ( P) ``` ### A map that satisfies the dependent universal property for connected maps is a connected map **Proof:** Consider a map `f : A β B` such that the precomposition function ```text - β f : ((b : B) β P b) β ((a : A) β P (f a)) ``` is an equivalence for every family `P` of `k`-truncated types. Then it follows that the precomposition function ```text - β f : ((b : B) β β₯fiber f bβ₯_k) β ((a : A) β β₯fiber f (f a)β₯_k) ``` is an equivalence. In particular, the element `Ξ» a β Ξ· (a , refl)` in the codomain of this equivalence induces an element `c b : β₯fiber f bβ₯_k` for each `b : B`. We take these elements as our centers of contraction. Note that by construction, we have an identification `c (f a) οΌ Ξ· (a , refl)`. To construct a contraction of `β₯fiber f bβ₯_k` for each `b : B`, we have to show that ```text (b : B) (u : β₯fiber f bβ₯_k) β c b οΌ u. ``` Since the type `c b οΌ u` is `k`-truncated, this type is equivalent to the type `(b : B) (u : fiber f b) β c b οΌ Ξ· u`. By reduction of the universal quantification over the fibers we see that this type is equivalent to the type ```text (a : A) β c (f a) οΌ Ξ· (a , refl). ``` This identification holds by construction of `c`. ```agda module _ {l1 l2 : Level} (k : π) {A : UU l1} {B : UU l2} {f : A β B} (H : dependent-universal-property-connected-map k f) where center-is-connected-map-dependent-universal-property-connected-map : (b : B) β type-trunc k (fiber f b) center-is-connected-map-dependent-universal-property-connected-map = map-inv-is-equiv ( H (Ξ» b β trunc k (fiber f b))) ( Ξ» a β unit-trunc (a , refl)) compute-center-is-connected-map-dependent-universal-property-connected-map : (a : A) β center-is-connected-map-dependent-universal-property-connected-map (f a) οΌ unit-trunc (a , refl) compute-center-is-connected-map-dependent-universal-property-connected-map = htpy-eq ( is-section-map-inv-is-equiv ( H (Ξ» b β trunc k (fiber f b))) ( Ξ» a β unit-trunc (a , refl))) contraction-is-connected-map-dependent-universal-property-connected-map : (b : B) (u : type-trunc k (fiber f b)) β center-is-connected-map-dependent-universal-property-connected-map b οΌ u contraction-is-connected-map-dependent-universal-property-connected-map = map-Ξ ( Ξ» b β function-dependent-universal-property-trunc ( Id-Truncated-Type' (trunc k (fiber f b)) _)) ( extend-lift-family-of-elements-fiber f ( Ξ» b u β _ οΌ unit-trunc u) ( compute-center-is-connected-map-dependent-universal-property-connected-map)) abstract is-connected-map-dependent-universal-property-connected-map : is-connected-map k f pr1 (is-connected-map-dependent-universal-property-connected-map b) = center-is-connected-map-dependent-universal-property-connected-map b pr2 (is-connected-map-dependent-universal-property-connected-map b) = contraction-is-connected-map-dependent-universal-property-connected-map b ``` ### The map `unit-trunc {k}` is `k`-connected ```agda module _ {l1 : Level} (k : π) {A : UU l1} where is-connected-map-unit-trunc : is-connected-map k (unit-trunc {k = k} {A = A}) is-connected-map-unit-trunc = is-connected-map-dependent-universal-property-connected-map k dependent-universal-property-trunc ``` ### A map `f : A β B` is `k`-connected if and only if precomposing dependent functions into `k + n`-truncated types is an `n-2`-truncated map for all `n : β` ```agda is-trunc-map-precomp-Ξ -is-connected-map : {l1 l2 l3 : Level} (k l n : π) β k +π (succ-π (succ-π n)) οΌ l β {A : UU l1} {B : UU l2} {f : A β B} β is-connected-map k f β (P : B β Truncated-Type l3 l) β is-trunc-map ( n) ( precomp-Ξ f (Ξ» b β type-Truncated-Type (P b))) is-trunc-map-precomp-Ξ -is-connected-map {l1} {l2} {l3} k ._ neg-two-π refl {A} {B} H P = is-contr-map-is-equiv ( dependent-universal-property-is-connected-map k H ( Ξ» b β pair ( type-Truncated-Type (P b)) ( is-trunc-eq ( right-unit-law-add-π k) ( is-trunc-type-Truncated-Type (P b))))) is-trunc-map-precomp-Ξ -is-connected-map k ._ (succ-π n) refl {A} {B} {f} H P = is-trunc-map-succ-precomp-Ξ ( Ξ» g h β is-trunc-map-precomp-Ξ -is-connected-map k _ n refl H ( Ξ» b β pair ( eq-value g h b) ( is-trunc-eq ( right-successor-law-add-π k n) ( is-trunc-type-Truncated-Type (P b)) ( g b) ( h b)))) ``` ### Characterization of the identity type of `Connected-Map l2 k A` ```agda equiv-Connected-Map : {l1 l2 : Level} {k : π} {A : UU l1} β (f g : Connected-Map l2 k A) β UU (l1 β l2) equiv-Connected-Map f g = Ξ£ ( type-Connected-Map f β type-Connected-Map g) ( Ξ» e β (map-equiv e β map-Connected-Map f) ~ map-Connected-Map g) module _ {l1 l2 : Level} {k : π} {A : UU l1} (f : Connected-Map l2 k A) where id-equiv-Connected-Map : equiv-Connected-Map f f pr1 id-equiv-Connected-Map = id-equiv pr2 id-equiv-Connected-Map = refl-htpy is-torsorial-equiv-Connected-Map : is-torsorial (equiv-Connected-Map f) is-torsorial-equiv-Connected-Map = is-torsorial-Eq-structure ( is-torsorial-equiv (type-Connected-Map f)) ( pair (type-Connected-Map f) id-equiv) ( is-torsorial-htpy-connected-map (connected-map-Connected-Map f)) equiv-eq-Connected-Map : (g : Connected-Map l2 k A) β (f οΌ g) β equiv-Connected-Map f g equiv-eq-Connected-Map .f refl = id-equiv-Connected-Map is-equiv-equiv-eq-Connected-Map : (g : Connected-Map l2 k A) β is-equiv (equiv-eq-Connected-Map g) is-equiv-equiv-eq-Connected-Map = fundamental-theorem-id is-torsorial-equiv-Connected-Map equiv-eq-Connected-Map extensionality-Connected-Map : (g : Connected-Map l2 k A) β (f οΌ g) β equiv-Connected-Map f g pr1 (extensionality-Connected-Map g) = equiv-eq-Connected-Map g pr2 (extensionality-Connected-Map g) = is-equiv-equiv-eq-Connected-Map g eq-equiv-Connected-Map : (g : Connected-Map l2 k A) β equiv-Connected-Map f g β (f οΌ g) eq-equiv-Connected-Map g = map-inv-equiv (extensionality-Connected-Map g) ``` ### Characterization of the identity type of `Connected-Map-Into-Truncated-Type l2 k A` ```agda equiv-Connected-Map-Into-Truncated-Type : {l1 l2 : Level} {k l : π} {A : UU l1} β (f g : Connected-Map-Into-Truncated-Type l2 k l A) β UU (l1 β l2) equiv-Connected-Map-Into-Truncated-Type f g = Ξ£ ( type-Connected-Map-Into-Truncated-Type f β type-Connected-Map-Into-Truncated-Type g) ( Ξ» e β ( map-equiv e β map-Connected-Map-Into-Truncated-Type f) ~ ( map-Connected-Map-Into-Truncated-Type g)) module _ {l1 l2 : Level} {k l : π} {A : UU l1} (f : Connected-Map-Into-Truncated-Type l2 k l A) where id-equiv-Connected-Map-Into-Truncated-Type : equiv-Connected-Map-Into-Truncated-Type f f pr1 id-equiv-Connected-Map-Into-Truncated-Type = id-equiv pr2 id-equiv-Connected-Map-Into-Truncated-Type = refl-htpy is-torsorial-equiv-Connected-Map-Into-Truncated-Type : is-torsorial (equiv-Connected-Map-Into-Truncated-Type f) is-torsorial-equiv-Connected-Map-Into-Truncated-Type = is-torsorial-Eq-structure ( is-torsorial-equiv-Truncated-Type ( truncated-type-Connected-Map-Into-Truncated-Type f)) ( pair (truncated-type-Connected-Map-Into-Truncated-Type f) id-equiv) ( is-torsorial-htpy-connected-map ( connected-map-Connected-Map-Into-Truncated-Type f)) equiv-eq-Connected-Map-Into-Truncated-Type : (g : Connected-Map-Into-Truncated-Type l2 k l A) β (f οΌ g) β equiv-Connected-Map-Into-Truncated-Type f g equiv-eq-Connected-Map-Into-Truncated-Type .f refl = id-equiv-Connected-Map-Into-Truncated-Type is-equiv-equiv-eq-Connected-Map-Into-Truncated-Type : (g : Connected-Map-Into-Truncated-Type l2 k l A) β is-equiv (equiv-eq-Connected-Map-Into-Truncated-Type g) is-equiv-equiv-eq-Connected-Map-Into-Truncated-Type = fundamental-theorem-id is-torsorial-equiv-Connected-Map-Into-Truncated-Type equiv-eq-Connected-Map-Into-Truncated-Type extensionality-Connected-Map-Into-Truncated-Type : (g : Connected-Map-Into-Truncated-Type l2 k l A) β (f οΌ g) β equiv-Connected-Map-Into-Truncated-Type f g pr1 (extensionality-Connected-Map-Into-Truncated-Type g) = equiv-eq-Connected-Map-Into-Truncated-Type g pr2 (extensionality-Connected-Map-Into-Truncated-Type g) = is-equiv-equiv-eq-Connected-Map-Into-Truncated-Type g eq-equiv-Connected-Map-Into-Truncated-Type : (g : Connected-Map-Into-Truncated-Type l2 k l A) β equiv-Connected-Map-Into-Truncated-Type f g β (f οΌ g) eq-equiv-Connected-Map-Into-Truncated-Type g = map-inv-equiv (extensionality-Connected-Map-Into-Truncated-Type g) ``` ### The type `Connected-Map-Into-Truncated-Type l2 k k A` is contractible This remains to be shown. [#733](https://github.com/UniMath/agda-unimath/issues/733) ### The type `Connected-Map-Into-Truncated-Type l2 k l A` is `k - l - 2`-truncated This remains to be shown. [#733](https://github.com/UniMath/agda-unimath/issues/733)