# `k`-Equivalences ```agda module foundation.truncation-equivalences where ``` <details><summary>Imports</summary> ```agda open import foundation.commuting-squares-of-maps open import foundation.connected-maps open import foundation.connected-types open import foundation.contractible-types open import foundation.dependent-pair-types open import foundation.functoriality-truncation open import foundation.identity-types open import foundation.precomposition-functions-into-subuniverses open import foundation.propositional-truncations open import foundation.truncations open import foundation.type-arithmetic-dependent-pair-types open import foundation.universal-property-dependent-pair-types open import foundation.universal-property-equivalences open import foundation.universal-property-truncation open import foundation.universe-levels open import foundation-core.contractible-maps 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.precomposition-functions open import foundation-core.sections open import foundation-core.transport-along-identifications open import foundation-core.truncated-types open import foundation-core.truncation-levels ``` </details> ## Idea A map `f : A β B` is said to be a `k`-equivalence if the map `map-trunc k f : trunc k A β trunc k B` is an equivalence. ## Definition ```agda is-truncation-equivalence : {l1 l2 : Level} (k : π) {A : UU l1} {B : UU l2} β (A β B) β UU (l1 β l2) is-truncation-equivalence k f = is-equiv (map-trunc k f) truncation-equivalence : {l1 l2 : Level} (k : π) β UU l1 β UU l2 β UU (l1 β l2) truncation-equivalence k A B = Ξ£ (A β B) (is-truncation-equivalence k) module _ {l1 l2 : Level} (k : π) {A : UU l1} {B : UU l2} (f : truncation-equivalence k A B) where map-truncation-equivalence : A β B map-truncation-equivalence = pr1 f is-truncation-equivalence-truncation-equivalence : is-truncation-equivalence k map-truncation-equivalence is-truncation-equivalence-truncation-equivalence = pr2 f ``` ## Properties ### A map `f : A β B` is a `k`-equivalence if and only if `- β f : (B β X) β (A β X)` is an equivalence for every `k`-truncated type `X` ```agda is-equiv-precomp-is-truncation-equivalence : {l1 l2 l3 : Level} (k : π) {A : UU l1} {B : UU l2} (f : A β B) β is-truncation-equivalence k f β (X : Truncated-Type l3 k) β is-equiv (precomp f (type-Truncated-Type X)) is-equiv-precomp-is-truncation-equivalence k f H X = is-equiv-bottom-is-equiv-top-square ( precomp unit-trunc (type-Truncated-Type X)) ( precomp unit-trunc (type-Truncated-Type X)) ( precomp (map-trunc k f) (type-Truncated-Type X)) ( precomp f (type-Truncated-Type X)) ( precomp-coherence-square-maps ( unit-trunc) ( f) ( map-trunc k f) ( unit-trunc) ( inv-htpy (coherence-square-map-trunc k f)) ( type-Truncated-Type X)) ( is-truncation-trunc X) ( is-truncation-trunc X) ( is-equiv-precomp-is-equiv (map-trunc k f) H (type-Truncated-Type X)) is-truncation-equivalence-is-equiv-precomp : {l1 l2 : Level} (k : π) {A : UU l1} {B : UU l2} (f : A β B) β ( (l : Level) (X : Truncated-Type l k) β is-equiv (precomp f (type-Truncated-Type X))) β is-truncation-equivalence k f is-truncation-equivalence-is-equiv-precomp k {A} {B} f H = is-equiv-is-equiv-precomp-Truncated-Type k ( trunc k A) ( trunc k B) ( map-trunc k f) ( Ξ» X β is-equiv-top-is-equiv-bottom-square ( precomp unit-trunc (type-Truncated-Type X)) ( precomp unit-trunc (type-Truncated-Type X)) ( precomp (map-trunc k f) (type-Truncated-Type X)) ( precomp f (type-Truncated-Type X)) ( precomp-coherence-square-maps ( unit-trunc) ( f) ( map-trunc k f) ( unit-trunc) ( inv-htpy (coherence-square-map-trunc k f)) ( type-Truncated-Type X)) ( is-truncation-trunc X) ( is-truncation-trunc X) ( H _ X)) ``` ### An equivalence is a `k`-equivalence for all `k` ```agda module _ {l1 l2 : Level} {k : π} {A : UU l1} {B : UU l2} (f : A β B) where is-truncation-equivalence-is-equiv : is-equiv f β is-truncation-equivalence k f is-truncation-equivalence-is-equiv e = is-equiv-map-equiv-trunc k (f , e) ``` ### Every `k`-connected map is a `k`-equivalence ```agda module _ {l1 l2 : Level} {k : π} {A : UU l1} {B : UU l2} (f : A β B) where is-truncation-equivalence-is-connected-map : is-connected-map k f β is-truncation-equivalence k f is-truncation-equivalence-is-connected-map c = is-truncation-equivalence-is-equiv-precomp k f ( Ξ» l X β dependent-universal-property-is-connected-map k c (Ξ» _ β X)) ``` ### The `k`-equivalences are closed under composition ```agda module _ {l1 l2 l3 : Level} {k : π} {A : UU l1} {B : UU l2} {C : UU l3} where is-truncation-equivalence-comp : (g : B β C) (f : A β B) β is-truncation-equivalence k f β is-truncation-equivalence k g β is-truncation-equivalence k (g β f) is-truncation-equivalence-comp g f ef eg = is-equiv-htpy ( map-trunc k g β map-trunc k f) ( preserves-comp-map-trunc k g f) ( is-equiv-comp (map-trunc k g) (map-trunc k f) ef eg) truncation-equivalence-comp : truncation-equivalence k B C β truncation-equivalence k A B β truncation-equivalence k A C pr1 (truncation-equivalence-comp g f) = map-truncation-equivalence k g β map-truncation-equivalence k f pr2 (truncation-equivalence-comp g f) = is-truncation-equivalence-comp ( map-truncation-equivalence k g) ( map-truncation-equivalence k f) ( is-truncation-equivalence-truncation-equivalence k f) ( is-truncation-equivalence-truncation-equivalence k g) ``` ### The class of `k`-equivalences has the 3-for-2 property ```agda module _ {l1 l2 l3 : Level} {k : π} {A : UU l1} {B : UU l2} {C : UU l3} (g : B β C) (f : A β B) (e : is-truncation-equivalence k (g β f)) where is-truncation-equivalence-left-factor : is-truncation-equivalence k f β is-truncation-equivalence k g is-truncation-equivalence-left-factor ef = is-equiv-left-factor ( map-trunc k g) ( map-trunc k f) ( is-equiv-htpy ( map-trunc k (g β f)) ( inv-htpy (preserves-comp-map-trunc k g f)) e) ( ef) is-truncation-equivalence-right-factor : is-truncation-equivalence k g β is-truncation-equivalence k f is-truncation-equivalence-right-factor eg = is-equiv-right-factor ( map-trunc k g) ( map-trunc k f) ( eg) ( is-equiv-htpy ( map-trunc k (g β f)) ( inv-htpy (preserves-comp-map-trunc k g f)) ( e)) ``` ### Composing `k`-equivalences with equivalences ```agda module _ {l1 l2 l3 : Level} {k : π} {A : UU l1} {B : UU l2} {C : UU l3} where is-truncation-equivalence-is-equiv-is-truncation-equivalence : (g : B β C) (f : A β B) β is-truncation-equivalence k g β is-equiv f β is-truncation-equivalence k (g β f) is-truncation-equivalence-is-equiv-is-truncation-equivalence g f eg ef = is-truncation-equivalence-comp g f ( is-truncation-equivalence-is-equiv f ef) ( eg) is-truncation-equivalence-is-truncation-equivalence-is-equiv : (g : B β C) (f : A β B) β is-equiv g β is-truncation-equivalence k f β is-truncation-equivalence k (g β f) is-truncation-equivalence-is-truncation-equivalence-is-equiv g f eg ef = is-truncation-equivalence-comp g f ( ef) ( is-truncation-equivalence-is-equiv g eg) is-truncation-equivalence-equiv-is-truncation-equivalence : (g : B β C) (f : A β B) β is-truncation-equivalence k g β is-truncation-equivalence k (g β map-equiv f) is-truncation-equivalence-equiv-is-truncation-equivalence g f eg = is-truncation-equivalence-is-equiv-is-truncation-equivalence g ( map-equiv f) ( eg) ( is-equiv-map-equiv f) is-truncation-equivalence-is-truncation-equivalence-equiv : (g : B β C) (f : A β B) β is-truncation-equivalence k f β is-truncation-equivalence k (map-equiv g β f) is-truncation-equivalence-is-truncation-equivalence-equiv g f ef = is-truncation-equivalence-is-truncation-equivalence-is-equiv ( map-equiv g) ( f) ( is-equiv-map-equiv g) ( ef) ``` ### The map on dependent pair types induced by the unit of the `(k+1)`-truncation is a `k`-equivalence This is an instance of Lemma 2.27 in {{#cite CORS20}} listed below. ```agda module _ {l1 l2 : Level} {k : π} {X : UU l1} (P : (type-trunc (succ-π k) X) β UU l2) where map-Ξ£-map-base-unit-trunc : Ξ£ X (P β unit-trunc) β Ξ£ (type-trunc (succ-π k) X) P map-Ξ£-map-base-unit-trunc = map-Ξ£-map-base unit-trunc P is-truncation-equivalence-map-Ξ£-map-base-unit-trunc : is-truncation-equivalence k map-Ξ£-map-base-unit-trunc is-truncation-equivalence-map-Ξ£-map-base-unit-trunc = is-truncation-equivalence-is-equiv-precomp k ( map-Ξ£-map-base-unit-trunc) ( Ξ» l X β is-equiv-equiv ( equiv-ev-pair) ( equiv-ev-pair) ( refl-htpy) ( dependent-universal-property-trunc ( Ξ» t β ( ( P t β type-Truncated-Type X) , ( is-trunc-succ-is-trunc k ( is-trunc-function-type k ( is-trunc-type-Truncated-Type X))))))) ``` ### There is an `k`-equivalence between the fiber of a map and the fiber of its `(k+1)`-truncation This is an instance of Corollary 2.29 in {{#cite CORS20}}. We consider the following composition of maps ```text fiber f b = Ξ£ A (Ξ» a β f a = b) β Ξ£ A (Ξ» a β β₯ f a οΌ b β₯) β Ξ£ A (Ξ» a β | f a | = | b | β Ξ£ A (Ξ» a β β₯ f β₯ | a | = | b |) β Ξ£ β₯ A β₯ (Ξ» t β β₯ f β₯ t = | b |) = fiber β₯ f β₯ | b | ``` where the first and last maps are `k`-equivalences. ```agda module _ {l1 l2 : Level} {k : π} {A : UU l1} {B : UU l2} (f : A β B) (b : B) where fiber-map-trunc-fiber : fiber f b β fiber (map-trunc (succ-π k) f) (unit-trunc b) fiber-map-trunc-fiber = ( map-Ξ£-map-base-unit-trunc ( Ξ» t β map-trunc (succ-π k) f t οΌ unit-trunc b)) β ( tot ( Ξ» a β ( concat (naturality-unit-trunc (succ-π k) f a) (unit-trunc b)) β ( map-effectiveness-trunc k (f a) b) β ( unit-trunc))) is-truncation-equivalence-fiber-map-trunc-fiber : is-truncation-equivalence k fiber-map-trunc-fiber is-truncation-equivalence-fiber-map-trunc-fiber = is-truncation-equivalence-comp ( map-Ξ£-map-base-unit-trunc ( Ξ» t β map-trunc (succ-π k) f t οΌ unit-trunc b)) ( tot ( Ξ» a β ( concat (naturality-unit-trunc (succ-π k) f a) (unit-trunc b)) β ( map-effectiveness-trunc k (f a) b) β ( unit-trunc))) ( is-truncation-equivalence-is-truncation-equivalence-equiv ( equiv-tot ( Ξ» a β ( equiv-concat ( naturality-unit-trunc (succ-π k) f a) ( unit-trunc b)) βe ( effectiveness-trunc k (f a) b))) ( Ξ» (a , p) β a , unit-trunc p) ( is-equiv-map-equiv (equiv-trunc-Ξ£ k))) ( is-truncation-equivalence-map-Ξ£-map-base-unit-trunc ( Ξ» t β map-trunc (succ-π k) f t οΌ unit-trunc b)) truncation-equivalence-fiber-map-trunc-fiber : truncation-equivalence k ( fiber f b) ( fiber (map-trunc (succ-π k) f) (unit-trunc b)) pr1 truncation-equivalence-fiber-map-trunc-fiber = fiber-map-trunc-fiber pr2 truncation-equivalence-fiber-map-trunc-fiber = is-truncation-equivalence-fiber-map-trunc-fiber ``` ### Being `k`-connected is invariant under `k`-equivalences ```agda module _ {l1 l2 : Level} {k : π} {A : UU l1} {B : UU l2} where is-connected-is-truncation-equivalence-is-connected : (f : A β B) β is-truncation-equivalence k f β is-connected k B β is-connected k A is-connected-is-truncation-equivalence-is-connected f e = is-contr-equiv (type-trunc k B) (map-trunc k f , e) is-connected-truncation-equivalence-is-connected : truncation-equivalence k A B β is-connected k B β is-connected k A is-connected-truncation-equivalence-is-connected f = is-connected-is-truncation-equivalence-is-connected ( map-truncation-equivalence k f) ( is-truncation-equivalence-truncation-equivalence k f) ``` ### Every `(k+1)`-equivalence is `k`-connected This is an instance of Proposition 2.30 in {{#cite CORS20}}. ```agda module _ {l1 l2 : Level} {k : π} {A : UU l1} {B : UU l2} (f : A β B) where is-connected-map-is-succ-truncation-equivalence : is-truncation-equivalence (succ-π k) f β is-connected-map k f is-connected-map-is-succ-truncation-equivalence e b = is-connected-truncation-equivalence-is-connected ( truncation-equivalence-fiber-map-trunc-fiber f b) ( is-connected-is-contr k (is-contr-map-is-equiv e (unit-trunc b))) ``` ### The codomain of a `k`-connected map is `(k+1)`-connected if its domain is `(k+1)`-connected This follows part of the proof of Proposition 2.31 in {{#cite CORS20}}. ```agda module _ {l1 l2 : Level} {k : π} {A : UU l1} {B : UU l2} (f : A β B) where is-trunc-fiber-map-trunc-is-succ-connected : is-connected (succ-π k) A β (b : B) β is-trunc k (fiber (map-trunc (succ-π k) f) (unit-trunc b)) is-trunc-fiber-map-trunc-is-succ-connected c b = is-trunc-equiv k ( map-trunc (succ-π k) f (center c) οΌ unit-trunc b) ( left-unit-law-Ξ£-is-contr c (center c)) ( is-trunc-type-trunc (map-trunc (succ-π k) f (center c)) (unit-trunc b)) is-succ-connected-is-connected-map-is-succ-connected : is-connected (succ-π k) A β is-connected-map k f β is-connected (succ-π k) B is-succ-connected-is-connected-map-is-succ-connected cA cf = is-contr-is-equiv' ( type-trunc (succ-π k) A) ( map-trunc (succ-π k) f) ( is-equiv-is-contr-map ( Ξ» t β apply-universal-property-trunc-Prop ( is-surjective-is-truncation ( trunc (succ-π k) B) ( is-truncation-trunc) ( t)) ( is-contr-Prop (fiber (map-trunc (succ-π k) f) t)) ( Ξ» (b , p) β tr ( Ξ» s β is-contr (fiber (map-trunc (succ-π k) f) s)) ( p) ( is-contr-equiv' ( type-trunc k (fiber f b)) ( ( inv-equiv ( equiv-unit-trunc ( fiber (map-trunc (succ-π k) f) (unit-trunc b) , is-trunc-fiber-map-trunc-is-succ-connected cA b))) βe ( map-trunc k (fiber-map-trunc-fiber f b) , is-truncation-equivalence-fiber-map-trunc-fiber f b)) ( cf b))))) ( cA) ``` ### If `g β f` is `(k+1)`-connected, then `f` is `k`-connected if and only if `g` is `(k+1)`-connected This is an instance of Proposition 2.31 in {{#cite CORS20}}. ```agda module _ {l1 l2 l3 : Level} {k : π} {A : UU l1} {B : UU l2} {C : UU l3} (g : B β C) (f : A β B) (cgf : is-connected-map (succ-π k) (g β f)) where is-connected-map-right-factor-is-succ-connected-map-left-factor : is-connected-map (succ-π k) g β is-connected-map k f is-connected-map-right-factor-is-succ-connected-map-left-factor cg = is-connected-map-is-succ-truncation-equivalence f ( is-truncation-equivalence-right-factor g f ( is-truncation-equivalence-is-connected-map (g β f) cgf) ( is-truncation-equivalence-is-connected-map g cg)) is-connected-map-right-factor-is-succ-connected-map-right-factor : is-connected-map k f β is-connected-map (succ-π k) g is-connected-map-right-factor-is-succ-connected-map-right-factor cf c = is-succ-connected-is-connected-map-is-succ-connected ( pr1) ( is-connected-equiv' (compute-fiber-comp g f c) (cgf c)) ( Ξ» p β is-connected-equiv ( equiv-fiber-pr1 (fiber f β pr1) p) ( cf (pr1 p))) ``` ### A `k`-equivalence with a section is `k`-connected ```agda module _ {l1 l2 : Level} {A : UU l1} {B : UU l2} (f : A β B) where is-connected-map-is-truncation-equivalence-section : (k : π) β section f β is-truncation-equivalence k f β is-connected-map k f is-connected-map-is-truncation-equivalence-section neg-two-π (s , h) e = is-neg-two-connected-map f is-connected-map-is-truncation-equivalence-section (succ-π k) (s , h) e = is-connected-map-right-factor-is-succ-connected-map-right-factor f s ( is-connected-map-is-equiv (is-equiv-htpy id h is-equiv-id)) ( is-connected-map-is-succ-truncation-equivalence s ( is-truncation-equivalence-right-factor f s ( is-truncation-equivalence-is-equiv ( f β s) ( is-equiv-htpy id h is-equiv-id)) ( e))) ``` ## References - The notion of `k`-equivalence is a special case of the notion of `L`-equivalence, where `L` is a reflective subuniverse. They were studied in the paper {{#cite CORS20}}. - The class of `k`-equivalences is left orthogonal to the class of `k`-Γ©tale maps. This was shown in {{#cite CR21}}. {{#bibliography}}