# The descent property of the circle ```agda module synthetic-homotopy-theory.descent-circle where ``` <details><summary>Imports</summary> ```agda open import foundation.automorphisms open import foundation.commuting-squares-of-maps open import foundation.commuting-triangles-of-maps open import foundation.contractible-maps open import foundation.contractible-types open import foundation.dependent-pair-types open import foundation.equivalences open import foundation.fibers-of-maps open import foundation.function-extensionality open import foundation.function-types open import foundation.functoriality-dependent-pair-types open import foundation.identity-types open import foundation.torsorial-type-families open import foundation.transport-along-identifications open import foundation.univalence open import foundation.universe-levels open import structured-types.equivalences-types-equipped-with-automorphisms open import structured-types.types-equipped-with-automorphisms open import synthetic-homotopy-theory.free-loops open import synthetic-homotopy-theory.universal-property-circle ``` </details> ## Idea The **descent property** of the [circle](synthetic-homotopy-theory.circle.md) uniquely characterizes type families over the circle. ## Definitions ### Descent data for the circle By the [universal property of the circle](synthetic-homotopy-theory.universal-property-circle.md) and [univalence](foundation.univalence.md), a type family `A : ๐ยน โ U` over the [circle](synthetic-homotopy-theory.circle.md) is equivalent to a type `X : U` equipped with an [automorphism](foundation.automorphisms.md) `e : X โ X`, in a way made precise in further sections of this file. The pair `(X, e)` is called **descent data** for the circle. ```agda descent-data-circle : ( l1 : Level) โ UU (lsuc l1) descent-data-circle = Type-With-Automorphism module _ { l1 : Level} (P : descent-data-circle l1) where type-descent-data-circle : UU l1 type-descent-data-circle = type-Type-With-Automorphism P aut-descent-data-circle : Aut type-descent-data-circle aut-descent-data-circle = automorphism-Type-With-Automorphism P map-descent-data-circle : type-descent-data-circle โ type-descent-data-circle map-descent-data-circle = map-Type-With-Automorphism P ``` ### Canonical descent data for a family over the circle A type family over the circle gives rise to its canonical descent data, obtained by evaluation at `base` and [transporting](foundation-core.transport-along-identifications.md) along `loop`. ```agda descent-data-family-circle : { l1 l2 : Level} {S : UU l1} (l : free-loop S) โ ( S โ UU l2) โ descent-data-circle l2 pr1 (descent-data-family-circle l A) = A (base-free-loop l) pr2 (descent-data-family-circle l A) = equiv-tr A (loop-free-loop l) ``` ### The identity type of descent data for the circle An [equivalence](foundation.equivalences.md) between `(X, e)` and `(Y, f)` is an equivalence between `X` and `Y` which commutes with the automorphisms. ```agda equiv-descent-data-circle : { l1 l2 : Level} โ descent-data-circle l1 โ descent-data-circle l2 โ UU (l1 โ l2) equiv-descent-data-circle = equiv-Type-With-Automorphism module _ { l1 l2 : Level} (P : descent-data-circle l1) (Q : descent-data-circle l2) ( ฮฑ : equiv-descent-data-circle P Q) where equiv-equiv-descent-data-circle : type-descent-data-circle P โ type-descent-data-circle Q equiv-equiv-descent-data-circle = equiv-equiv-Type-With-Automorphism P Q ฮฑ map-equiv-descent-data-circle : type-descent-data-circle P โ type-descent-data-circle Q map-equiv-descent-data-circle = map-equiv-Type-With-Automorphism P Q ฮฑ coherence-square-equiv-descent-data-circle : coherence-square-maps ( map-equiv-descent-data-circle) ( map-descent-data-circle P) ( map-descent-data-circle Q) ( map-equiv-descent-data-circle) coherence-square-equiv-descent-data-circle = coherence-square-equiv-Type-With-Automorphism P Q ฮฑ ``` ### A family over the circle equipped with corresponding descent data A **family for descent data** `(X, e)` is a family over the circle, along with a proof that `(X, e)` is equivalent to the canonical descent data of the family. **Descent data for a family** `A : ๐ยน โ U` is descent data with a proof that it's equivalent to the canonical descent data of `A`. A **family with descent data** is a family `A : ๐ยน โ U` over the circle, equipped with descent data `(X, e)`, and a proof of their equivalence. This can be described as a diagram ```text ฮฑ X -----> A base | | e| | tr A loop โจ โจ X -----> A base ฮฑ ``` Ideally, every section characterizing descent data of a particular type family should include an element of type `family-with-descent-data-circle`, whose type family is the one being described. Note on naming: a `-for-` in a name indicates that the particular entry contains a proof that it's somehow equivalent to the structure it's "for". ```agda module _ { l1 : Level} {S : UU l1} (l : free-loop S) where family-for-descent-data-circle : { l2 : Level} โ descent-data-circle l2 โ UU (l1 โ lsuc l2) family-for-descent-data-circle {l2} P = ฮฃ ( S โ UU l2) ( ฮป A โ equiv-descent-data-circle ( P) ( descent-data-family-circle l A)) descent-data-circle-for-family : { l2 : Level} โ (S โ UU l2) โ UU (lsuc l2) descent-data-circle-for-family {l2} A = ฮฃ ( descent-data-circle l2) ( ฮป P โ equiv-descent-data-circle ( P) ( descent-data-family-circle l A)) family-with-descent-data-circle : ( l2 : Level) โ UU (l1 โ lsuc l2) family-with-descent-data-circle l2 = ฮฃ ( S โ UU l2) descent-data-circle-for-family module _ { l1 l2 : Level} {S : UU l1} {l : free-loop S} ( A : family-with-descent-data-circle l l2) where family-family-with-descent-data-circle : S โ UU l2 family-family-with-descent-data-circle = pr1 A descent-data-for-family-with-descent-data-circle : descent-data-circle-for-family l family-family-with-descent-data-circle descent-data-for-family-with-descent-data-circle = pr2 A descent-data-family-with-descent-data-circle : descent-data-circle l2 descent-data-family-with-descent-data-circle = pr1 descent-data-for-family-with-descent-data-circle type-family-with-descent-data-circle : UU l2 type-family-with-descent-data-circle = type-descent-data-circle descent-data-family-with-descent-data-circle aut-family-with-descent-data-circle : Aut type-family-with-descent-data-circle aut-family-with-descent-data-circle = aut-descent-data-circle descent-data-family-with-descent-data-circle map-aut-family-with-descent-data-circle : type-family-with-descent-data-circle โ type-family-with-descent-data-circle map-aut-family-with-descent-data-circle = map-descent-data-circle descent-data-family-with-descent-data-circle eq-family-with-descent-data-circle : equiv-descent-data-circle ( descent-data-family-with-descent-data-circle) ( descent-data-family-circle l family-family-with-descent-data-circle) eq-family-with-descent-data-circle = pr2 descent-data-for-family-with-descent-data-circle equiv-family-with-descent-data-circle : type-family-with-descent-data-circle โ family-family-with-descent-data-circle (base-free-loop l) equiv-family-with-descent-data-circle = equiv-equiv-descent-data-circle ( descent-data-family-with-descent-data-circle) ( descent-data-family-circle l family-family-with-descent-data-circle) ( eq-family-with-descent-data-circle) map-equiv-family-with-descent-data-circle : type-family-with-descent-data-circle โ family-family-with-descent-data-circle (base-free-loop l) map-equiv-family-with-descent-data-circle = map-equiv equiv-family-with-descent-data-circle coherence-square-family-with-descent-data-circle : coherence-square-maps ( map-equiv-family-with-descent-data-circle) ( map-aut-family-with-descent-data-circle) ( tr family-family-with-descent-data-circle (loop-free-loop l)) ( map-equiv-family-with-descent-data-circle) coherence-square-family-with-descent-data-circle = coherence-square-equiv-descent-data-circle ( descent-data-family-with-descent-data-circle) ( descent-data-family-circle l family-family-with-descent-data-circle) ( eq-family-with-descent-data-circle) family-for-family-with-descent-data-circle : family-for-descent-data-circle l descent-data-family-with-descent-data-circle pr1 family-for-family-with-descent-data-circle = family-family-with-descent-data-circle pr2 family-for-family-with-descent-data-circle = eq-family-with-descent-data-circle ``` ## Properties ### Characterization of the identity type of descent data for the circle ```agda id-equiv-descent-data-circle : { l1 : Level} (P : descent-data-circle l1) โ equiv-descent-data-circle P P id-equiv-descent-data-circle = id-equiv-Type-With-Automorphism equiv-eq-descent-data-circle : { l1 : Level} (P Q : descent-data-circle l1) โ P ๏ผ Q โ equiv-descent-data-circle P Q equiv-eq-descent-data-circle = equiv-eq-Type-With-Automorphism is-torsorial-equiv-descent-data-circle : { l1 : Level} (P : descent-data-circle l1) โ is-torsorial (equiv-descent-data-circle P) is-torsorial-equiv-descent-data-circle = is-torsorial-equiv-Type-With-Automorphism is-equiv-equiv-eq-descent-data-circle : { l1 : Level} (P Q : descent-data-circle l1) โ is-equiv (equiv-eq-descent-data-circle P Q) is-equiv-equiv-eq-descent-data-circle = is-equiv-equiv-eq-Type-With-Automorphism eq-equiv-descent-data-circle : { l1 : Level} (P Q : descent-data-circle l1) โ equiv-descent-data-circle P Q โ P ๏ผ Q eq-equiv-descent-data-circle = eq-equiv-Type-With-Automorphism ``` ### Alternative definition of equality of descent data as homomorphisms which are equivalences ```agda module _ { l1 l2 : Level} ( P : descent-data-circle l1) ( Q : descent-data-circle l2) where equiv-descent-data-circle' : UU (l1 โ l2) equiv-descent-data-circle' = equiv-Type-With-Automorphism' P Q compute-equiv-descent-data-circle : equiv-descent-data-circle' โ equiv-descent-data-circle P Q compute-equiv-descent-data-circle = compute-equiv-Type-With-Automorphism P Q ``` ### Uniqueness of descent data characterizing a type family over the circle Given a type `X` and an automorphism `e : X โ X`, there is a unique type family `๐(X, e) : ๐ยน โ U` for which `(X, e)` is descent data. ```agda comparison-descent-data-circle : ( l1 : Level) โ free-loop (UU l1) โ descent-data-circle l1 comparison-descent-data-circle l1 = tot (ฮป Y โ equiv-eq) is-equiv-comparison-descent-data-circle : ( l1 : Level) โ is-equiv (comparison-descent-data-circle l1) is-equiv-comparison-descent-data-circle l1 = is-equiv-tot-is-fiberwise-equiv (ฮป Y โ univalence Y Y) module _ { l1 l2 : Level} {S : UU l1} (l : free-loop S) where triangle-comparison-descent-data-circle : coherence-triangle-maps ( descent-data-family-circle l) ( comparison-descent-data-circle l2) ( ev-free-loop l (UU l2)) triangle-comparison-descent-data-circle A = eq-equiv-descent-data-circle ( descent-data-family-circle l A) ( comparison-descent-data-circle l2 (ev-free-loop l (UU l2) A)) ( id-equiv , (htpy-eq (inv (compute-map-eq-ap (loop-free-loop l))))) is-equiv-descent-data-family-circle-universal-property-circle : ( up-circle : universal-property-circle l) โ is-equiv (descent-data-family-circle l) is-equiv-descent-data-family-circle-universal-property-circle up-circle = is-equiv-left-map-triangle ( descent-data-family-circle l) ( comparison-descent-data-circle l2) ( ev-free-loop l (UU l2)) ( triangle-comparison-descent-data-circle) ( up-circle (UU l2)) ( is-equiv-comparison-descent-data-circle l2) unique-family-property-circle : { l1 : Level} (l2 : Level) {S : UU l1} (l : free-loop S) โ UU (l1 โ lsuc l2) unique-family-property-circle l2 {S} l = ( Q : descent-data-circle l2) โ is-contr (family-for-descent-data-circle l Q) module _ { l1 l2 : Level} {S : UU l1} (l : free-loop S) ( up-circle : universal-property-circle l) where unique-family-property-universal-property-circle : unique-family-property-circle l2 l unique-family-property-universal-property-circle Q = is-contr-is-equiv' ( fiber (descent-data-family-circle l) Q) ( tot ( ฮป P โ equiv-eq-descent-data-circle Q (descent-data-family-circle l P) โ inv)) ( is-equiv-tot-is-fiberwise-equiv ( ฮป P โ is-equiv-comp _ _ ( is-equiv-inv _ _) ( is-equiv-equiv-eq-descent-data-circle ( Q) ( descent-data-family-circle l P)))) ( is-contr-map-is-equiv ( is-equiv-descent-data-family-circle-universal-property-circle ( l) ( up-circle)) ( Q)) family-for-descent-data-circle-descent-data : ( P : descent-data-circle l2) โ family-for-descent-data-circle l P family-for-descent-data-circle-descent-data P = center (unique-family-property-universal-property-circle P) family-with-descent-data-circle-descent-data : ( P : descent-data-circle l2) โ ( family-with-descent-data-circle l l2) pr1 (family-with-descent-data-circle-descent-data P) = pr1 (family-for-descent-data-circle-descent-data P) pr1 (pr2 (family-with-descent-data-circle-descent-data P)) = P pr2 (pr2 (family-with-descent-data-circle-descent-data P)) = pr2 (family-for-descent-data-circle-descent-data P) ```