diff --git a/src/foundation/commuting-triangles-of-maps.lagda.md b/src/foundation/commuting-triangles-of-maps.lagda.md index f657e5d08d..ef0e081b0a 100644 --- a/src/foundation/commuting-triangles-of-maps.lagda.md +++ b/src/foundation/commuting-triangles-of-maps.lagda.md @@ -56,6 +56,18 @@ module _ (left : A → X) (right : B → X) (e : A ≃ B) where + equiv-coherence-triangle-maps-inv-top' : + coherence-triangle-maps left right (map-equiv e) ≃ + coherence-triangle-maps' right left (map-inv-equiv e) + equiv-coherence-triangle-maps-inv-top' = + equiv-Π + ( λ b → left (map-inv-equiv e b) = right b) + ( e) + ( λ a → + equiv-concat + ( ap left (is-retraction-map-inv-equiv e a)) + ( right (map-equiv e a))) + equiv-coherence-triangle-maps-inv-top : coherence-triangle-maps left right (map-equiv e) ≃ coherence-triangle-maps right left (map-inv-equiv e) @@ -63,13 +75,7 @@ module _ ( equiv-inv-htpy ( left ∘ (map-inv-equiv e)) ( right)) ∘e - ( equiv-Π - ( λ b → left (map-inv-equiv e b) = right b) - ( e) - ( λ a → - equiv-concat - ( ap left (is-retraction-map-inv-equiv e a)) - ( right (map-equiv e a)))) + ( equiv-coherence-triangle-maps-inv-top') coherence-triangle-maps-inv-top : coherence-triangle-maps left right (map-equiv e) → diff --git a/src/foundation/equivalences.lagda.md b/src/foundation/equivalences.lagda.md index 0a3a32779f..354fa98d51 100644 --- a/src/foundation/equivalences.lagda.md +++ b/src/foundation/equivalences.lagda.md @@ -16,6 +16,7 @@ open import foundation.equivalence-extensionality open import foundation.function-extensionality open import foundation.functoriality-fibers-of-maps open import foundation.logical-equivalences +open import foundation.transport-along-identifications open import foundation.transposition-identifications-along-equivalences open import foundation.truncated-maps open import foundation.universal-property-equivalences @@ -572,6 +573,19 @@ pr1 (equiv-precomp-equiv e C) = _∘e e pr2 (equiv-precomp-equiv e C) = is-equiv-precomp-equiv-equiv e ``` +### Computing transport in the type of equivalences + +```agda +module _ + {l1 l2 l3 : Level} {A : UU l1} (B : A → UU l2) (C : A → UU l3) + where + + tr-equiv-type : + {x y : A} (p : x = y) (e : B x ≃ C x) → + tr (λ x → B x ≃ C x) p e = equiv-tr C p ∘e e ∘e equiv-tr B (inv p) + tr-equiv-type refl e = eq-htpy-equiv refl-htpy +``` + ### A cospan in which one of the legs is an equivalence is a pullback if and only if the corresponding map on the cone is an equivalence ```agda diff --git a/src/synthetic-homotopy-theory.lagda.md b/src/synthetic-homotopy-theory.lagda.md index 307d4ac9a6..4717610eb4 100644 --- a/src/synthetic-homotopy-theory.lagda.md +++ b/src/synthetic-homotopy-theory.lagda.md @@ -47,6 +47,9 @@ open import synthetic-homotopy-theory.descent-circle-dependent-pair-types public open import synthetic-homotopy-theory.descent-circle-equivalence-types public open import synthetic-homotopy-theory.descent-circle-function-types public open import synthetic-homotopy-theory.descent-circle-subtypes public +open import synthetic-homotopy-theory.descent-data-equivalence-types-over-pushouts public +open import synthetic-homotopy-theory.descent-data-function-types-over-pushouts public +open import synthetic-homotopy-theory.descent-data-identity-types-over-pushouts public open import synthetic-homotopy-theory.descent-data-pushouts public open import synthetic-homotopy-theory.descent-data-sequential-colimits public open import synthetic-homotopy-theory.descent-property-pushouts public @@ -103,6 +106,7 @@ open import synthetic-homotopy-theory.recursion-principle-pushouts public open import synthetic-homotopy-theory.retracts-of-sequential-diagrams public open import synthetic-homotopy-theory.rewriting-pushouts public open import synthetic-homotopy-theory.sections-descent-circle public +open import synthetic-homotopy-theory.sections-descent-data-pushouts public open import synthetic-homotopy-theory.sequential-colimits public open import synthetic-homotopy-theory.sequential-diagrams public open import synthetic-homotopy-theory.sequentially-compact-types public diff --git a/src/synthetic-homotopy-theory/dependent-cocones-under-spans.lagda.md b/src/synthetic-homotopy-theory/dependent-cocones-under-spans.lagda.md index f3b33ac51b..cfba684dd3 100644 --- a/src/synthetic-homotopy-theory/dependent-cocones-under-spans.lagda.md +++ b/src/synthetic-homotopy-theory/dependent-cocones-under-spans.lagda.md @@ -27,6 +27,7 @@ open import foundation.homotopy-induction open import foundation.identity-types open import foundation.retractions open import foundation.sections +open import foundation.span-diagrams open import foundation.structure-identity-principle open import foundation.torsorial-type-families open import foundation.transport-along-higher-identifications @@ -104,6 +105,13 @@ module _ ( horizontal-map-dependent-cocone (f s)) ( vertical-map-dependent-cocone (g s)) coherence-square-dependent-cocone = pr2 (pr2 d) + +dependent-cocone-span-diagram : + { l1 l2 l3 l4 l5 : Level} {𝒮 : span-diagram l1 l2 l3} {X : UU l4} + ( c : cocone-span-diagram 𝒮 X) (P : X → UU l5) → + UU (l1 ⊔ l2 ⊔ l3 ⊔ l5) +dependent-cocone-span-diagram {𝒮 = 𝒮} = + dependent-cocone (left-map-span-diagram 𝒮) (right-map-span-diagram 𝒮) ``` ### Cocones equipped with dependent cocones @@ -188,6 +196,13 @@ pr1 (pr2 (dependent-cocone-map f g c P h)) b = h (vertical-map-cocone f g c b) pr2 (pr2 (dependent-cocone-map f g c P h)) s = apd h (coherence-square-cocone f g c s) + +dependent-cocone-map-span-diagram : + { l1 l2 l3 l4 l5 : Level} {𝒮 : span-diagram l1 l2 l3} {X : UU l4} + ( c : cocone-span-diagram 𝒮 X) (P : X → UU l5) → + ( (x : X) → P x) → dependent-cocone-span-diagram c P +dependent-cocone-map-span-diagram {𝒮 = 𝒮} c = + dependent-cocone-map (left-map-span-diagram 𝒮) (right-map-span-diagram 𝒮) c ``` ## Properties diff --git a/src/synthetic-homotopy-theory/descent-data-equivalence-types-over-pushouts.lagda.md b/src/synthetic-homotopy-theory/descent-data-equivalence-types-over-pushouts.lagda.md new file mode 100644 index 0000000000..7095433e23 --- /dev/null +++ b/src/synthetic-homotopy-theory/descent-data-equivalence-types-over-pushouts.lagda.md @@ -0,0 +1,385 @@ +# Descent data for type families of equivalence types over pushouts + +```agda +{-# OPTIONS --lossy-unification #-} + +module synthetic-homotopy-theory.descent-data-equivalence-types-over-pushouts where +``` + +
Imports + +```agda +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.equivalence-extensionality +open import foundation.equivalences +open import foundation.fibers-of-maps +open import foundation.function-types +open import foundation.functoriality-dependent-function-types +open import foundation.functoriality-dependent-pair-types +open import foundation.homotopies +open import foundation.homotopy-algebra +open import foundation.postcomposition-functions +open import foundation.span-diagrams +open import foundation.transport-along-identifications +open import foundation.universal-property-equivalences +open import foundation.universe-levels +open import foundation.whiskering-homotopies-composition + +open import synthetic-homotopy-theory.cocones-under-spans +open import synthetic-homotopy-theory.descent-data-pushouts +open import synthetic-homotopy-theory.equivalences-descent-data-pushouts +open import synthetic-homotopy-theory.families-descent-data-pushouts +open import synthetic-homotopy-theory.morphisms-descent-data-pushouts +open import synthetic-homotopy-theory.sections-descent-data-pushouts +open import synthetic-homotopy-theory.universal-property-pushouts +``` + +
+ +## Idea + +Given two +[families with descent data](synthetic-homotopy-theory.families-descent-data-pushouts.md) +for [pushouts](synthetic-homotopy-theory.pushouts.md) `P ≈ (PA, PB, PS)` and +`R ≈ (RA, RB, RS)`, we show that +[fiberwise equivalences](foundation-core.families-of-equivalences.md) +`(x : X) → P x ≃ R x` correspond to +[equivalences](synthetic-homotopy-theory.equivalences-descent-data-pushouts.md) +`(PA, PB, PS) ≃ (RA, RB, RS)`. + +**Proof:** The proof follows exactly the same pattern as the one in +[`descent-data-function-types-over-pushouts`](synthetic-homotopy-theory.descent-data-function-types-over-pushouts.md). + +## Definitions + +### The type family of fiberwise equivalences with corresponding descent data for pushouts + +```agda +module _ + {l1 l2 l3 l4 l5 l6 : Level} {𝒮 : span-diagram l1 l2 l3} + {X : UU l4} {c : cocone-span-diagram 𝒮 X} + (P : family-with-descent-data-pushout c l5) + (R : family-with-descent-data-pushout c l6) + where + + family-cocone-equivalence-type-pushout : X → UU (l5 ⊔ l6) + family-cocone-equivalence-type-pushout x = + family-cocone-family-with-descent-data-pushout P x ≃ + family-cocone-family-with-descent-data-pushout R x + + descent-data-equivalence-type-pushout : descent-data-pushout 𝒮 (l5 ⊔ l6) + pr1 descent-data-equivalence-type-pushout a = + left-family-family-with-descent-data-pushout P a ≃ + left-family-family-with-descent-data-pushout R a + pr1 (pr2 descent-data-equivalence-type-pushout) b = + right-family-family-with-descent-data-pushout P b ≃ + right-family-family-with-descent-data-pushout R b + pr2 (pr2 descent-data-equivalence-type-pushout) s = + ( equiv-postcomp-equiv + ( equiv-family-family-with-descent-data-pushout R s) + ( _)) ∘e + ( equiv-precomp-equiv + ( inv-equiv (equiv-family-family-with-descent-data-pushout P s)) + ( _)) + + left-equiv-equiv-descent-data-equivalence-type-pushout : + (a : domain-span-diagram 𝒮) → + ( family-cocone-family-with-descent-data-pushout P + ( horizontal-map-cocone _ _ c a) ≃ + family-cocone-family-with-descent-data-pushout R + ( horizontal-map-cocone _ _ c a)) ≃ + ( left-family-family-with-descent-data-pushout P a ≃ + left-family-family-with-descent-data-pushout R a) + left-equiv-equiv-descent-data-equivalence-type-pushout a = + ( equiv-postcomp-equiv + ( left-equiv-family-with-descent-data-pushout R a) + ( _)) ∘e + ( equiv-precomp-equiv + ( inv-equiv (left-equiv-family-with-descent-data-pushout P a)) + ( _)) + + right-equiv-equiv-descent-data-equivalence-type-pushout : + (b : codomain-span-diagram 𝒮) → + ( family-cocone-family-with-descent-data-pushout P + ( vertical-map-cocone _ _ c b) ≃ + family-cocone-family-with-descent-data-pushout R + ( vertical-map-cocone _ _ c b)) ≃ + ( right-family-family-with-descent-data-pushout P b ≃ + right-family-family-with-descent-data-pushout R b) + right-equiv-equiv-descent-data-equivalence-type-pushout b = + ( equiv-postcomp-equiv + ( right-equiv-family-with-descent-data-pushout R b) + ( _)) ∘e + ( equiv-precomp-equiv + ( inv-equiv (right-equiv-family-with-descent-data-pushout P b)) + ( _)) + + coherence-equiv-descent-data-equivalence-type-pushout : + (s : spanning-type-span-diagram 𝒮) → + coherence-square-maps + ( map-equiv + ( left-equiv-equiv-descent-data-equivalence-type-pushout + ( left-map-span-diagram 𝒮 s))) + ( tr + ( family-cocone-equivalence-type-pushout) + ( coherence-square-cocone _ _ c s)) + ( map-family-descent-data-pushout + ( descent-data-equivalence-type-pushout) + ( s)) + ( map-equiv + ( right-equiv-equiv-descent-data-equivalence-type-pushout + ( right-map-span-diagram 𝒮 s))) + coherence-equiv-descent-data-equivalence-type-pushout s = + ( ( map-equiv + ( right-equiv-equiv-descent-data-equivalence-type-pushout + ( right-map-span-diagram 𝒮 s))) ·l + ( tr-equiv-type + ( family-cocone-family-with-descent-data-pushout P) + ( family-cocone-family-with-descent-data-pushout R) + ( coherence-square-cocone _ _ c s))) ∙h + ( λ e → + eq-htpy-equiv + ( horizontal-concat-htpy + ( coherence-family-with-descent-data-pushout R s ·r map-equiv e) + ( coherence-square-maps-inv-equiv + ( equiv-tr + ( family-cocone-family-with-descent-data-pushout P) + ( coherence-square-cocone _ _ c s)) + ( left-equiv-family-with-descent-data-pushout P + ( left-map-span-diagram 𝒮 s)) + ( right-equiv-family-with-descent-data-pushout P + ( right-map-span-diagram 𝒮 s)) + ( equiv-family-family-with-descent-data-pushout P s) + ( inv-htpy (coherence-family-with-descent-data-pushout P s))))) + + equiv-descent-data-equivalence-type-pushout : + equiv-descent-data-pushout + ( descent-data-family-cocone-span-diagram c + ( family-cocone-equivalence-type-pushout)) + ( descent-data-equivalence-type-pushout) + pr1 equiv-descent-data-equivalence-type-pushout = + left-equiv-equiv-descent-data-equivalence-type-pushout + pr1 (pr2 equiv-descent-data-equivalence-type-pushout) = + right-equiv-equiv-descent-data-equivalence-type-pushout + pr2 (pr2 equiv-descent-data-equivalence-type-pushout) = + coherence-equiv-descent-data-equivalence-type-pushout + + family-with-descent-data-equivalence-type-pushout : + family-with-descent-data-pushout c (l5 ⊔ l6) + pr1 family-with-descent-data-equivalence-type-pushout = + family-cocone-equivalence-type-pushout + pr1 (pr2 family-with-descent-data-equivalence-type-pushout) = + descent-data-equivalence-type-pushout + pr2 (pr2 family-with-descent-data-equivalence-type-pushout) = + equiv-descent-data-equivalence-type-pushout +``` + +## Properties + +### Sections of descent data for families of equivalences correspond to equivalences of descent data + +```agda +module _ + {l1 l2 l3 l4 l5 l6 : Level} {𝒮 : span-diagram l1 l2 l3} + {X : UU l4} {c : cocone-span-diagram 𝒮 X} + (P : family-with-descent-data-pushout c l5) + (R : family-with-descent-data-pushout c l6) + where + + equiv-section-descent-data-equivalence-type-pushout : + section-descent-data-pushout + ( descent-data-equivalence-type-pushout P R) → + equiv-descent-data-pushout + ( descent-data-family-with-descent-data-pushout P) + ( descent-data-family-with-descent-data-pushout R) + equiv-section-descent-data-equivalence-type-pushout = + tot + ( λ tA → + tot + ( λ tB tS s → + inv-htpy + ( map-inv-equiv + ( equiv-coherence-triangle-maps-inv-top' + ( ( map-family-family-with-descent-data-pushout R s) ∘ + ( map-equiv (tA (left-map-span-diagram 𝒮 s)))) + ( map-equiv (tB (right-map-span-diagram 𝒮 s))) + ( equiv-family-family-with-descent-data-pushout P s)) + ( htpy-eq-equiv (tS s))))) + + abstract + is-equiv-equiv-section-descent-data-equivalence-type-pushout : + is-equiv equiv-section-descent-data-equivalence-type-pushout + is-equiv-equiv-section-descent-data-equivalence-type-pushout = + is-equiv-tot-is-fiberwise-equiv + ( λ tA → + is-equiv-tot-is-fiberwise-equiv + ( λ tB → + is-equiv-map-Π-is-fiberwise-equiv + ( λ s → + is-equiv-comp _ _ + ( is-equiv-map-equiv (extensionality-equiv _ _)) + ( is-equiv-comp _ _ + ( is-equiv-map-inv-equiv + ( equiv-coherence-triangle-maps-inv-top' + ( (map-family-family-with-descent-data-pushout R s) ∘ + ( map-equiv (tA (left-map-span-diagram 𝒮 s)))) + ( map-equiv (tB (right-map-span-diagram 𝒮 s))) + ( equiv-family-family-with-descent-data-pushout P s))) + ( is-equiv-inv-htpy _ _))))) + + equiv-descent-data-equiv-family-cocone-span-diagram : + ( (x : X) → + family-cocone-family-with-descent-data-pushout P x ≃ + family-cocone-family-with-descent-data-pushout R x) → + equiv-descent-data-pushout + ( descent-data-family-with-descent-data-pushout P) + ( descent-data-family-with-descent-data-pushout R) + equiv-descent-data-equiv-family-cocone-span-diagram = + ( equiv-section-descent-data-equivalence-type-pushout) ∘ + ( section-descent-data-section-family-cocone-span-diagram + ( family-with-descent-data-equivalence-type-pushout P R)) + + abstract + is-equiv-equiv-descent-data-equiv-family-cocone-span-diagram : + universal-property-pushout _ _ c → + is-equiv equiv-descent-data-equiv-family-cocone-span-diagram + is-equiv-equiv-descent-data-equiv-family-cocone-span-diagram up-c = + is-equiv-comp _ _ + ( is-equiv-section-descent-data-section-family-cocone-span-diagram _ + ( up-c)) + ( is-equiv-equiv-section-descent-data-equivalence-type-pushout) +``` + +As a corollary, given an equivalence +`(hA, hB, hS) : (PA, PB, PS) ≃ (RA, RB, RS)`, there is a unique family of +equivalences `h : (x : X) → P x → R x` such that its induced equivalence is +homotopic to `(hA, hB, hS)`. The homotopy provides us in particular with the +component-wise [homotopies](foundation-core.homotopies.md) + +```text + hA a hB a + PA a --------> RA a PB b --------> RB b + | ∧ | ∧ + (eᴾA a)⁻¹ | | eᴿA a (eᴾB b)⁻¹ | | eᴿB b + | | | | + ∨ | ∨ | + P (ia) ------> R (ia) P (jb) ------> R (jb) + h (ia) h (jb) +``` + +which we can turn into the computation rules + +```text + eᴾA a eᴾB a + P (ia) -------> PA a P (jb) -------> PB b + | | | | + h (ia) | | hA a h (jb) | | hB b + | | | | + ∨ ∨ ∨ ∨ + R (ia) -------> RA a R (jb) -------> RB b + eᴿA a eᴿB b +``` + +by inverting the inverted equivalences. + +```agda +module _ + {l1 l2 l3 l4 l5 l6 : Level} {𝒮 : span-diagram l1 l2 l3} + {X : UU l4} {c : cocone-span-diagram 𝒮 X} + (up-c : universal-property-pushout _ _ c) + (P : family-with-descent-data-pushout c l5) + (R : family-with-descent-data-pushout c l6) + (e : + equiv-descent-data-pushout + ( descent-data-family-with-descent-data-pushout P) + ( descent-data-family-with-descent-data-pushout R)) + where + + abstract + uniqueness-equiv-equiv-descent-data-pushout : + is-contr + ( Σ ( (x : X) → + family-cocone-family-with-descent-data-pushout P x ≃ + family-cocone-family-with-descent-data-pushout R x) + ( λ h → + htpy-equiv-descent-data-pushout + ( descent-data-family-with-descent-data-pushout P) + ( descent-data-family-with-descent-data-pushout R) + ( equiv-descent-data-equiv-family-cocone-span-diagram P R h) + ( e))) + uniqueness-equiv-equiv-descent-data-pushout = + is-contr-equiv' + ( fiber (equiv-descent-data-equiv-family-cocone-span-diagram P R) e) + ( equiv-tot + ( λ f → extensionality-equiv-descent-data-pushout _ e)) + ( is-contr-map-is-equiv + ( is-equiv-equiv-descent-data-equiv-family-cocone-span-diagram P R + ( up-c)) + ( e)) + + equiv-equiv-descent-data-pushout : + (x : X) → + family-cocone-family-with-descent-data-pushout P x ≃ + family-cocone-family-with-descent-data-pushout R x + equiv-equiv-descent-data-pushout = + pr1 (center uniqueness-equiv-equiv-descent-data-pushout) + + map-equiv-descent-data-pushout : + (x : X) → + family-cocone-family-with-descent-data-pushout P x → + family-cocone-family-with-descent-data-pushout R x + map-equiv-descent-data-pushout x = + map-equiv (equiv-equiv-descent-data-pushout x) + + compute-left-map-equiv-equiv-descent-data-pushout : + (a : domain-span-diagram 𝒮) → + coherence-square-maps + ( left-map-family-with-descent-data-pushout P a) + ( map-equiv-descent-data-pushout (horizontal-map-cocone _ _ c a)) + ( left-map-equiv-descent-data-pushout + ( descent-data-family-with-descent-data-pushout P) + ( descent-data-family-with-descent-data-pushout R) + ( e) + ( a)) + ( left-map-family-with-descent-data-pushout R a) + compute-left-map-equiv-equiv-descent-data-pushout a = + map-inv-equiv + ( equiv-coherence-triangle-maps-inv-top' + ( left-map-family-with-descent-data-pushout R a ∘ + map-equiv-descent-data-pushout (horizontal-map-cocone _ _ c a)) + ( left-map-equiv-descent-data-pushout + ( descent-data-family-with-descent-data-pushout P) + ( descent-data-family-with-descent-data-pushout R) + ( e) + ( a)) + ( left-equiv-family-with-descent-data-pushout P a)) + ( pr1 (pr2 (center uniqueness-equiv-equiv-descent-data-pushout)) a) + + compute-right-map-equiv-equiv-descent-data-pushout : + (b : codomain-span-diagram 𝒮) → + coherence-square-maps + ( right-map-family-with-descent-data-pushout P b) + ( map-equiv-descent-data-pushout (vertical-map-cocone _ _ c b)) + ( right-map-equiv-descent-data-pushout + ( descent-data-family-with-descent-data-pushout P) + ( descent-data-family-with-descent-data-pushout R) + ( e) + ( b)) + ( right-map-family-with-descent-data-pushout R b) + compute-right-map-equiv-equiv-descent-data-pushout b = + map-inv-equiv + ( equiv-coherence-triangle-maps-inv-top' + ( right-map-family-with-descent-data-pushout R b ∘ + map-equiv-descent-data-pushout (vertical-map-cocone _ _ c b)) + ( right-map-equiv-descent-data-pushout + ( descent-data-family-with-descent-data-pushout P) + ( descent-data-family-with-descent-data-pushout R) + ( e) + ( b)) + ( right-equiv-family-with-descent-data-pushout P b)) + ( pr1 (pr2 (pr2 (center uniqueness-equiv-equiv-descent-data-pushout))) b) +``` diff --git a/src/synthetic-homotopy-theory/descent-data-function-types-over-pushouts.lagda.md b/src/synthetic-homotopy-theory/descent-data-function-types-over-pushouts.lagda.md new file mode 100644 index 0000000000..ac284b320a --- /dev/null +++ b/src/synthetic-homotopy-theory/descent-data-function-types-over-pushouts.lagda.md @@ -0,0 +1,415 @@ +# Descent data for type families of function types over pushouts + +```agda +{-# OPTIONS --lossy-unification #-} + +module synthetic-homotopy-theory.descent-data-function-types-over-pushouts where +``` + +
Imports + +```agda +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-function-types +open import foundation.functoriality-dependent-pair-types +open import foundation.homotopies +open import foundation.homotopy-algebra +open import foundation.postcomposition-functions +open import foundation.span-diagrams +open import foundation.transport-along-identifications +open import foundation.universal-property-equivalences +open import foundation.universe-levels +open import foundation.whiskering-homotopies-composition + +open import synthetic-homotopy-theory.cocones-under-spans +open import synthetic-homotopy-theory.descent-data-pushouts +open import synthetic-homotopy-theory.equivalences-descent-data-pushouts +open import synthetic-homotopy-theory.families-descent-data-pushouts +open import synthetic-homotopy-theory.morphisms-descent-data-pushouts +open import synthetic-homotopy-theory.sections-descent-data-pushouts +open import synthetic-homotopy-theory.universal-property-pushouts +``` + +
+ +## Idea + +Given two +[families with descent data](synthetic-homotopy-theory.families-descent-data-pushouts.md) +for [pushouts](synthetic-homotopy-theory.pushouts.md) `P ≈ (PA, PB, PS)` and +`R ≈ (RA, RB, RS)`, we show that +[fiberwise maps](foundation.families-of-maps.md) `(x : X) → P x → R x` +correspond to +[morphisms](synthetic-homotopy-theory.morphisms-descent-data-pushouts.md) +`(PA, PB, PS) → (RA, RB, RS)`. + +**Proof:** We first characterize the type family `x ↦ (P x → R x)`. The +corresponding [descent data](synthetic-homotopy-theory.descent-data-pushouts.md) +consists of the type families + +```text + a ↦ (PA a → RA a) + b ↦ (PB b → RB b), +``` + +and the gluing data sending `h : PA (fs) → RA (fs)` to +`(RS s ∘ h ∘ (PS s)⁻¹) : PB (gs) → RB (gs)`. + +**Note:** It is important to differentiate between families of _function types_, +i.e. a type family that to every `x : X` assigns the _type_ `P x → R x`, and +families of _functions_, i.e. a family that to every `x : X` assigns a +_function_ from `P x` to R x`. Descent data plays the role of a family of types, +so it makes sense to talk about "descent data corresponding to a family of +function types", but it doesn't make sense to talk about "descent data +corresponding to a family of functions". The kind of data that corresponds to +families of functions are the _sections_ of the descent data of a family of +function types. + +It suffices to show that the sections correspond to morphisms. The first two +components of a section and a morphism agree, namely they are + +```text + sA : (a : A) → PA a → RA a + sB : (b : B) → PB b → RB b, +``` + +respectively. The coherence datum of a section has the type + +```text + (s : S) → RS s ∘ sA (fs) ∘ (RS s)⁻¹ = sB (gs), +``` + +which we can massage into a coherence of the morphism as + +```text + RS s ∘ sA (fs) ∘ (PS s)⁻¹ = sB (gs) + ≃ RS s ∘ sA (fs) ∘ (PS s)⁻¹ ~ sB (gs) by function extensionality + ≃ RS s ∘ sA (fs) ~ sB (gs) ∘ PS s by transposition of (PS s) + ≃ sB (gs) ∘ PS s ~ RS s ∘ sA (fs) by symmetry of homotopies. +``` + +## Definitions + +### The type family of fiberwise functions with corresponding descent data for pushouts + +```agda +module _ + {l1 l2 l3 l4 l5 l6 : Level} {𝒮 : span-diagram l1 l2 l3} + {X : UU l4} {c : cocone-span-diagram 𝒮 X} + (P : family-with-descent-data-pushout c l5) + (R : family-with-descent-data-pushout c l6) + where + + family-cocone-function-type-pushout : X → UU (l5 ⊔ l6) + family-cocone-function-type-pushout x = + family-cocone-family-with-descent-data-pushout P x → + family-cocone-family-with-descent-data-pushout R x + + descent-data-function-type-pushout : descent-data-pushout 𝒮 (l5 ⊔ l6) + pr1 descent-data-function-type-pushout a = + left-family-family-with-descent-data-pushout P a → + left-family-family-with-descent-data-pushout R a + pr1 (pr2 descent-data-function-type-pushout) b = + right-family-family-with-descent-data-pushout P b → + right-family-family-with-descent-data-pushout R b + pr2 (pr2 descent-data-function-type-pushout) s = + ( equiv-postcomp _ + ( equiv-family-family-with-descent-data-pushout R s)) ∘e + ( equiv-precomp + ( inv-equiv (equiv-family-family-with-descent-data-pushout P s)) + ( _)) + + left-equiv-equiv-descent-data-function-type-pushout : + (a : domain-span-diagram 𝒮) → + ( family-cocone-family-with-descent-data-pushout P + ( horizontal-map-cocone _ _ c a) → + family-cocone-family-with-descent-data-pushout R + ( horizontal-map-cocone _ _ c a)) ≃ + ( left-family-family-with-descent-data-pushout P a → + left-family-family-with-descent-data-pushout R a) + left-equiv-equiv-descent-data-function-type-pushout a = + ( equiv-postcomp _ + ( left-equiv-family-with-descent-data-pushout R a)) ∘e + ( equiv-precomp + ( inv-equiv (left-equiv-family-with-descent-data-pushout P a)) + ( _)) + + right-equiv-equiv-descent-data-function-type-pushout : + (b : codomain-span-diagram 𝒮) → + ( family-cocone-family-with-descent-data-pushout P + ( vertical-map-cocone _ _ c b) → + family-cocone-family-with-descent-data-pushout R + ( vertical-map-cocone _ _ c b)) ≃ + ( right-family-family-with-descent-data-pushout P b → + right-family-family-with-descent-data-pushout R b) + right-equiv-equiv-descent-data-function-type-pushout b = + ( equiv-postcomp _ + ( right-equiv-family-with-descent-data-pushout R b)) ∘e + ( equiv-precomp + ( inv-equiv (right-equiv-family-with-descent-data-pushout P b)) + ( _)) + + coherence-equiv-descent-data-function-type-pushout : + (s : spanning-type-span-diagram 𝒮) → + coherence-square-maps + ( map-equiv + ( left-equiv-equiv-descent-data-function-type-pushout + ( left-map-span-diagram 𝒮 s))) + ( tr + ( family-cocone-function-type-pushout) + ( coherence-square-cocone _ _ c s)) + ( map-family-descent-data-pushout + ( descent-data-function-type-pushout) + ( s)) + ( map-equiv + ( right-equiv-equiv-descent-data-function-type-pushout + ( right-map-span-diagram 𝒮 s))) + coherence-equiv-descent-data-function-type-pushout s = + ( ( map-equiv + ( right-equiv-equiv-descent-data-function-type-pushout + ( right-map-span-diagram 𝒮 s))) ·l + ( tr-function-type + ( family-cocone-family-with-descent-data-pushout P) + ( family-cocone-family-with-descent-data-pushout R) + ( coherence-square-cocone _ _ c s))) ∙h + ( λ h → + eq-htpy + ( horizontal-concat-htpy + ( coherence-family-with-descent-data-pushout R s ·r h) + ( coherence-square-maps-inv-equiv + ( equiv-tr + ( family-cocone-family-with-descent-data-pushout P) + ( coherence-square-cocone _ _ c s)) + ( left-equiv-family-with-descent-data-pushout P + ( left-map-span-diagram 𝒮 s)) + ( right-equiv-family-with-descent-data-pushout P + ( right-map-span-diagram 𝒮 s)) + ( equiv-family-family-with-descent-data-pushout P s) + ( inv-htpy (coherence-family-with-descent-data-pushout P s))))) + + equiv-descent-data-function-type-pushout : + equiv-descent-data-pushout + ( descent-data-family-cocone-span-diagram c + ( family-cocone-function-type-pushout)) + ( descent-data-function-type-pushout) + pr1 equiv-descent-data-function-type-pushout = + left-equiv-equiv-descent-data-function-type-pushout + pr1 (pr2 equiv-descent-data-function-type-pushout) = + right-equiv-equiv-descent-data-function-type-pushout + pr2 (pr2 equiv-descent-data-function-type-pushout) = + coherence-equiv-descent-data-function-type-pushout + + family-with-descent-data-function-type-pushout : + family-with-descent-data-pushout c (l5 ⊔ l6) + pr1 family-with-descent-data-function-type-pushout = + family-cocone-function-type-pushout + pr1 (pr2 family-with-descent-data-function-type-pushout) = + descent-data-function-type-pushout + pr2 (pr2 family-with-descent-data-function-type-pushout) = + equiv-descent-data-function-type-pushout +``` + +## Properties + +### Sections of descent data for families of functions correspond to morphisms of descent data + +```agda +module _ + {l1 l2 l3 l4 l5 l6 : Level} {𝒮 : span-diagram l1 l2 l3} + {X : UU l4} {c : cocone-span-diagram 𝒮 X} + (P : family-with-descent-data-pushout c l5) + (R : family-with-descent-data-pushout c l6) + where + + hom-section-descent-data-function-type-pushout : + section-descent-data-pushout (descent-data-function-type-pushout P R) → + hom-descent-data-pushout + ( descent-data-family-with-descent-data-pushout P) + ( descent-data-family-with-descent-data-pushout R) + hom-section-descent-data-function-type-pushout = + tot + ( λ tA → + tot + ( λ tB tS s → + inv-htpy + ( map-inv-equiv + ( equiv-coherence-triangle-maps-inv-top' + ( ( map-family-family-with-descent-data-pushout R s) ∘ + ( tA (left-map-span-diagram 𝒮 s))) + ( tB (right-map-span-diagram 𝒮 s)) + ( equiv-family-family-with-descent-data-pushout P s)) + ( htpy-eq (tS s))))) + + abstract + is-equiv-hom-section-descent-data-function-type-pushout : + is-equiv + ( hom-section-descent-data-function-type-pushout) + is-equiv-hom-section-descent-data-function-type-pushout = + is-equiv-tot-is-fiberwise-equiv + ( λ tA → + is-equiv-tot-is-fiberwise-equiv + ( λ tB → + is-equiv-map-Π-is-fiberwise-equiv + ( λ s → + is-equiv-comp _ _ + ( funext _ _) + ( is-equiv-comp _ _ + ( is-equiv-map-inv-equiv + ( equiv-coherence-triangle-maps-inv-top' + ( ( map-family-family-with-descent-data-pushout R s) ∘ + ( tA (left-map-span-diagram 𝒮 s))) + ( tB (right-map-span-diagram 𝒮 s)) + ( equiv-family-family-with-descent-data-pushout P s))) + ( is-equiv-inv-htpy _ _))))) + + hom-descent-data-map-family-cocone-span-diagram : + ( (x : X) → + family-cocone-family-with-descent-data-pushout P x → + family-cocone-family-with-descent-data-pushout R x) → + hom-descent-data-pushout + ( descent-data-family-with-descent-data-pushout P) + ( descent-data-family-with-descent-data-pushout R) + hom-descent-data-map-family-cocone-span-diagram = + ( hom-section-descent-data-function-type-pushout) ∘ + ( section-descent-data-section-family-cocone-span-diagram + ( family-with-descent-data-function-type-pushout P R)) + + abstract + is-equiv-hom-descent-data-map-family-cocone-span-diagram : + universal-property-pushout _ _ c → + is-equiv hom-descent-data-map-family-cocone-span-diagram + is-equiv-hom-descent-data-map-family-cocone-span-diagram up-c = + is-equiv-comp _ _ + ( is-equiv-section-descent-data-section-family-cocone-span-diagram _ + ( up-c)) + ( is-equiv-hom-section-descent-data-function-type-pushout) +``` + +As a corollary, given a morphism `(hA, hB, hS) : (PA, PB, PS) → (RA, RB, RS)`, +there is a unique family of maps `h : (x : X) → P x → R x` such that its induced +morphism is homotopic to `(hA, hB, hS)`. The homotopy provides us in particular +with the component-wise [homotopies](foundation-core.homotopies.md) + +```text + hA a hB a + PA a --------> RA a PB b --------> RB b + | ∧ | ∧ + (eᴾA a)⁻¹ | | eᴿA a (eᴾB b)⁻¹ | | eᴿB b + | | | | + ∨ | ∨ | + P (ia) ------> R (ia) P (jb) ------> R (jb) + h (ia) h (jb) +``` + +which we can turn into the computation rules + +```text + eᴾA a eᴾB a + P (ia) -------> PA a P (jb) -------> PB b + | | | | + h (ia) | | hA a h (jb) | | hB b + | | | | + ∨ ∨ ∨ ∨ + R (ia) -------> RA a R (jb) -------> RB b + eᴿA a eᴿB b +``` + +by inverting the inverted equivalences. + +```agda +module _ + {l1 l2 l3 l4 l5 l6 : Level} {𝒮 : span-diagram l1 l2 l3} + {X : UU l4} {c : cocone-span-diagram 𝒮 X} + (up-c : universal-property-pushout _ _ c) + (P : family-with-descent-data-pushout c l5) + (R : family-with-descent-data-pushout c l6) + (m : + hom-descent-data-pushout + ( descent-data-family-with-descent-data-pushout P) + ( descent-data-family-with-descent-data-pushout R)) + where + + abstract + uniqueness-map-hom-descent-data-pushout : + is-contr + ( Σ ( (x : X) → + family-cocone-family-with-descent-data-pushout P x → + family-cocone-family-with-descent-data-pushout R x) + ( λ h → + htpy-hom-descent-data-pushout + ( descent-data-family-with-descent-data-pushout P) + ( descent-data-family-with-descent-data-pushout R) + ( hom-descent-data-map-family-cocone-span-diagram P R h) + ( m))) + uniqueness-map-hom-descent-data-pushout = + is-contr-equiv' + ( fiber (hom-descent-data-map-family-cocone-span-diagram P R) m) + ( equiv-tot + ( λ h → extensionality-hom-descent-data-pushout _ _ _ m)) + ( is-contr-map-is-equiv + ( is-equiv-hom-descent-data-map-family-cocone-span-diagram P R up-c) + ( m)) + + map-hom-descent-data-pushout : + (x : X) → + family-cocone-family-with-descent-data-pushout P x → + family-cocone-family-with-descent-data-pushout R x + map-hom-descent-data-pushout = + pr1 (center uniqueness-map-hom-descent-data-pushout) + + compute-left-map-map-hom-descent-data-pushout : + (a : domain-span-diagram 𝒮) → + coherence-square-maps + ( left-map-family-with-descent-data-pushout P a) + ( map-hom-descent-data-pushout (horizontal-map-cocone _ _ c a)) + ( left-map-hom-descent-data-pushout + ( descent-data-family-with-descent-data-pushout P) + ( descent-data-family-with-descent-data-pushout R) + ( m) + ( a)) + ( left-map-family-with-descent-data-pushout R a) + compute-left-map-map-hom-descent-data-pushout a = + map-inv-equiv + ( equiv-coherence-triangle-maps-inv-top' + ( left-map-family-with-descent-data-pushout R a ∘ + map-hom-descent-data-pushout (horizontal-map-cocone _ _ c a)) + ( left-map-hom-descent-data-pushout + ( descent-data-family-with-descent-data-pushout P) + ( descent-data-family-with-descent-data-pushout R) + ( m) + ( a)) + ( left-equiv-family-with-descent-data-pushout P a)) + ( pr1 (pr2 (center uniqueness-map-hom-descent-data-pushout)) a) + + compute-right-map-map-hom-descent-data-pushout : + (b : codomain-span-diagram 𝒮) → + coherence-square-maps + ( right-map-family-with-descent-data-pushout P b) + ( map-hom-descent-data-pushout (vertical-map-cocone _ _ c b)) + ( right-map-hom-descent-data-pushout + ( descent-data-family-with-descent-data-pushout P) + ( descent-data-family-with-descent-data-pushout R) + ( m) + ( b)) + ( right-map-family-with-descent-data-pushout R b) + compute-right-map-map-hom-descent-data-pushout b = + map-inv-equiv + ( equiv-coherence-triangle-maps-inv-top' + ( right-map-family-with-descent-data-pushout R b ∘ + map-hom-descent-data-pushout (vertical-map-cocone _ _ c b)) + ( right-map-hom-descent-data-pushout + ( descent-data-family-with-descent-data-pushout P) + ( descent-data-family-with-descent-data-pushout R) + ( m) + ( b)) + ( right-equiv-family-with-descent-data-pushout P b)) + ( pr1 (pr2 (pr2 (center uniqueness-map-hom-descent-data-pushout))) b) +``` diff --git a/src/synthetic-homotopy-theory/descent-data-identity-types-over-pushouts.lagda.md b/src/synthetic-homotopy-theory/descent-data-identity-types-over-pushouts.lagda.md new file mode 100644 index 0000000000..6244d587ce --- /dev/null +++ b/src/synthetic-homotopy-theory/descent-data-identity-types-over-pushouts.lagda.md @@ -0,0 +1,95 @@ +# Descent data for type families of identity types over pushouts + +```agda +{-# OPTIONS --lossy-unification #-} + +module synthetic-homotopy-theory.descent-data-identity-types-over-pushouts where +``` + +
Imports + +```agda +open import foundation.dependent-pair-types +open import foundation.equivalences +open import foundation.identity-types +open import foundation.span-diagrams +open import foundation.transport-along-identifications +open import foundation.universe-levels + +open import synthetic-homotopy-theory.cocones-under-spans +open import synthetic-homotopy-theory.descent-data-pushouts +open import synthetic-homotopy-theory.equivalences-descent-data-pushouts +open import synthetic-homotopy-theory.families-descent-data-pushouts +``` + +
+ +## Idea + +Given a [cocone](synthetic-homotopy-theory.cocones-under-spans.md) under a +[span diagram](foundation.span-diagrams.md) + +```text + g + S -----> B + | | + f | | j + ∨ ∨ + A -----> X + i +``` + +and a point `x₀ : X`, the type family of +[identity types](foundation-core.identity-types.md) based at `x₀`, +`x ↦ (x₀ = x)`, is +[characterized](synthetic-homotopy-theory.families-descent-data-pushouts.md) by +the [descent data](synthetic-homotopy-theory.descent-data-pushouts.md) +`(IA, IB, IS)`, where `IA` and `IB` are families of identity types + +```text + IA a := (x₀ = ia) + IB b := (x₀ = jb), +``` + +and the gluing data `IS s : (x₀ = ifs) ≃ (x₀ = jgs)` is given by concatenation +with the coherence of the cocone `H s : ifs = jgs`. + +## Definitions + +```agda +module _ + {l1 l2 l3 l4 : Level} {𝒮 : span-diagram l1 l2 l3} + {X : UU l4} (c : cocone-span-diagram 𝒮 X) + (x₀ : X) + where + + family-cocone-identity-type-pushout : X → UU l4 + family-cocone-identity-type-pushout x = x₀ = x + + descent-data-identity-type-pushout : descent-data-pushout 𝒮 l4 + pr1 descent-data-identity-type-pushout a = + x₀ = horizontal-map-cocone _ _ c a + pr1 (pr2 descent-data-identity-type-pushout) b = + x₀ = vertical-map-cocone _ _ c b + pr2 (pr2 descent-data-identity-type-pushout) s = + equiv-concat' x₀ (coherence-square-cocone _ _ c s) + + equiv-descent-data-identity-type-pushout : + equiv-descent-data-pushout + ( descent-data-family-cocone-span-diagram c + ( family-cocone-identity-type-pushout)) + ( descent-data-identity-type-pushout) + pr1 equiv-descent-data-identity-type-pushout a = id-equiv + pr1 (pr2 equiv-descent-data-identity-type-pushout) b = id-equiv + pr2 (pr2 equiv-descent-data-identity-type-pushout) s = + tr-Id-right (coherence-square-cocone _ _ c s) + + family-with-descent-data-identity-type-pushout : + family-with-descent-data-pushout c l4 + pr1 family-with-descent-data-identity-type-pushout = + family-cocone-identity-type-pushout + pr1 (pr2 family-with-descent-data-identity-type-pushout) = + descent-data-identity-type-pushout + pr2 (pr2 family-with-descent-data-identity-type-pushout) = + equiv-descent-data-identity-type-pushout +``` diff --git a/src/synthetic-homotopy-theory/equivalences-descent-data-pushouts.lagda.md b/src/synthetic-homotopy-theory/equivalences-descent-data-pushouts.lagda.md index 66b2c0803f..a95a4a12a1 100644 --- a/src/synthetic-homotopy-theory/equivalences-descent-data-pushouts.lagda.md +++ b/src/synthetic-homotopy-theory/equivalences-descent-data-pushouts.lagda.md @@ -121,6 +121,13 @@ module _ is-equiv-left-map-equiv-descent-data-pushout a = is-equiv-map-equiv (left-equiv-equiv-descent-data-pushout a) + inv-left-map-equiv-descent-data-pushout : + (a : domain-span-diagram 𝒮) → + left-family-descent-data-pushout Q a → + left-family-descent-data-pushout P a + inv-left-map-equiv-descent-data-pushout a = + map-inv-equiv (left-equiv-equiv-descent-data-pushout a) + right-equiv-equiv-descent-data-pushout : (b : codomain-span-diagram 𝒮) → right-family-descent-data-pushout P b ≃ @@ -140,6 +147,13 @@ module _ is-equiv-right-map-equiv-descent-data-pushout b = is-equiv-map-equiv (right-equiv-equiv-descent-data-pushout b) + inv-right-map-equiv-descent-data-pushout : + (b : codomain-span-diagram 𝒮) → + right-family-descent-data-pushout Q b → + right-family-descent-data-pushout P b + inv-right-map-equiv-descent-data-pushout b = + map-inv-equiv (right-equiv-equiv-descent-data-pushout b) + coherence-equiv-descent-data-pushout : (s : spanning-type-span-diagram 𝒮) → coherence-square-maps diff --git a/src/synthetic-homotopy-theory/families-descent-data-pushouts.lagda.md b/src/synthetic-homotopy-theory/families-descent-data-pushouts.lagda.md index ec5d935b6c..573147d1a5 100644 --- a/src/synthetic-homotopy-theory/families-descent-data-pushouts.lagda.md +++ b/src/synthetic-homotopy-theory/families-descent-data-pushouts.lagda.md @@ -145,6 +145,18 @@ module _ ( descent-data-family-with-descent-data-pushout) ( equiv-descent-data-family-with-descent-data-pushout) + inv-left-map-family-with-descent-data-pushout : + (a : domain-span-diagram 𝒮) → + left-family-family-with-descent-data-pushout a → + family-cocone-family-with-descent-data-pushout + ( horizontal-map-cocone _ _ c a) + inv-left-map-family-with-descent-data-pushout = + inv-left-map-equiv-descent-data-pushout + ( descent-data-family-cocone-span-diagram c + ( family-cocone-family-with-descent-data-pushout)) + ( descent-data-family-with-descent-data-pushout) + ( equiv-descent-data-family-with-descent-data-pushout) + right-equiv-family-with-descent-data-pushout : (b : codomain-span-diagram 𝒮) → family-cocone-family-with-descent-data-pushout @@ -169,6 +181,28 @@ module _ ( descent-data-family-with-descent-data-pushout) ( equiv-descent-data-family-with-descent-data-pushout) + is-equiv-right-map-family-with-descent-data-pushout : + (b : codomain-span-diagram 𝒮) → + is-equiv (right-map-family-with-descent-data-pushout b) + is-equiv-right-map-family-with-descent-data-pushout = + is-equiv-right-map-equiv-descent-data-pushout + ( descent-data-family-cocone-span-diagram c + ( family-cocone-family-with-descent-data-pushout)) + ( descent-data-family-with-descent-data-pushout) + ( equiv-descent-data-family-with-descent-data-pushout) + + inv-right-map-family-with-descent-data-pushout : + (b : codomain-span-diagram 𝒮) → + right-family-family-with-descent-data-pushout b → + family-cocone-family-with-descent-data-pushout + ( vertical-map-cocone _ _ c b) + inv-right-map-family-with-descent-data-pushout = + inv-right-map-equiv-descent-data-pushout + ( descent-data-family-cocone-span-diagram c + ( family-cocone-family-with-descent-data-pushout)) + ( descent-data-family-with-descent-data-pushout) + ( equiv-descent-data-family-with-descent-data-pushout) + coherence-family-with-descent-data-pushout : (s : spanning-type-span-diagram 𝒮) → coherence-square-maps diff --git a/src/synthetic-homotopy-theory/sections-descent-data-pushouts.lagda.md b/src/synthetic-homotopy-theory/sections-descent-data-pushouts.lagda.md new file mode 100644 index 0000000000..583235db13 --- /dev/null +++ b/src/synthetic-homotopy-theory/sections-descent-data-pushouts.lagda.md @@ -0,0 +1,429 @@ +# Sections of descent data for pushouts + +```agda +module synthetic-homotopy-theory.sections-descent-data-pushouts where +``` + +
Imports + +```agda +open import foundation.action-on-identifications-dependent-functions +open import foundation.action-on-identifications-functions +open import foundation.commuting-squares-of-identifications +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.embeddings +open import foundation.equivalences +open import foundation.fibers-of-maps +open import foundation.functoriality-dependent-function-types +open import foundation.functoriality-dependent-pair-types +open import foundation.fundamental-theorem-of-identity-types +open import foundation.homotopies +open import foundation.homotopy-induction +open import foundation.identity-types +open import foundation.span-diagrams +open import foundation.structure-identity-principle +open import foundation.torsorial-type-families +open import foundation.universe-levels + +open import synthetic-homotopy-theory.cocones-under-spans +open import synthetic-homotopy-theory.dependent-cocones-under-spans +open import synthetic-homotopy-theory.dependent-universal-property-pushouts +open import synthetic-homotopy-theory.descent-data-pushouts +open import synthetic-homotopy-theory.families-descent-data-pushouts +open import synthetic-homotopy-theory.universal-property-pushouts +``` + +
+ +## Idea + +Given [descent data](synthetic-homotopy-theory.descent-data-pushouts.md) +`(PA, PB, PS)` for the [pushout](synthetic-homotopy-theory.pushouts.md) of a +[span diagram](foundation.span-diagrams.md) `𝒮`, we define the type of +{{#concept "sections" Disambiguation="descent data for pushouts" Agda=section-descent-data-pushout}} +to be the type of triples `(tA, tB, tS)`, where + +```text + tA : (a : A) → PA a + tB : (b : B) → PB b +``` + +are [sections](foundation.dependent-function-types.md) of the type families `PA` +and `PB`, respectively, and `tS` is a coherence datum, witnessing that for every +`s : S`, the dependent triangle + +```text + tA ∘ f + (s : S) --------> PA (f s) + \ / + tB ∘ g \ / PS s + ∨ ∨ + PB (g s) +``` + +[commutes](foundation.commuting-triangles-of-maps.md). + +We show that for a +[family with descent data](synthetic-homotopy-theory.families-descent-data-pushouts.md) +`P ≈ (PA, PB, PS)`, the type of sections `(x : X) → P x` of `P` is +[equivalent](foundation-core.equivalences.md) to the type of sections of +`(PA, PB, PS)`. + +Furthermore, a +{{#concept "homotopy" Disambiguation="sections of descent data for pushouts" Agda=htpy-section-descent-data-pushout}} +between sections `(tA, tB, tS)` and `(rA, rB, rS)` consists of component-wise +[homotopies](foundation-core.homotopies.md) + +```text + HA : tA ~ rA + HB : tB ~ rB +``` + +and a coherence datum `HS`, witnessing that for each `s : S`, the square of +identifications + +```text + PS s ·l HA fs + PS s (tA fs) ------------> PS s (rA fs) + | | + tS s | | rS s + | | + ∨ ∨ + tB gs -------------------> rB gs + HB gs +``` + +[commutes](foundation-core.commuting-squares-of-identifications.md). + +We show that the identity types of sections of descent data are characterized by +homotopies between them. + +## Definitions + +### Sections of descent data for pushouts + +```agda +module _ + {l1 l2 l3 l4 : Level} {𝒮 : span-diagram l1 l2 l3} + (P : descent-data-pushout 𝒮 l4) + where + + section-descent-data-pushout : UU (l1 ⊔ l2 ⊔ l3 ⊔ l4) + section-descent-data-pushout = + Σ ( (a : domain-span-diagram 𝒮) → left-family-descent-data-pushout P a) + ( λ tA → + Σ ( (b : codomain-span-diagram 𝒮) → + right-family-descent-data-pushout P b) + ( λ tB → + (s : spanning-type-span-diagram 𝒮) → + map-family-descent-data-pushout P s + ( tA (left-map-span-diagram 𝒮 s)) = + tB (right-map-span-diagram 𝒮 s))) + + module _ + (t : section-descent-data-pushout) + where + + left-map-section-descent-data-pushout : + (a : domain-span-diagram 𝒮) → left-family-descent-data-pushout P a + left-map-section-descent-data-pushout = pr1 t + + right-map-section-descent-data-pushout : + (b : codomain-span-diagram 𝒮) → right-family-descent-data-pushout P b + right-map-section-descent-data-pushout = pr1 (pr2 t) + + coherence-section-descent-data-pushout : + (s : spanning-type-span-diagram 𝒮) → + map-family-descent-data-pushout P s + ( left-map-section-descent-data-pushout (left-map-span-diagram 𝒮 s)) = + right-map-section-descent-data-pushout (right-map-span-diagram 𝒮 s) + coherence-section-descent-data-pushout = pr2 (pr2 t) +``` + +### Homotopies of sections of descent data for pushouts + +```agda +module _ + {l1 l2 l3 l4 : Level} {𝒮 : span-diagram l1 l2 l3} + (P : descent-data-pushout 𝒮 l4) + (r t : section-descent-data-pushout P) + where + + htpy-section-descent-data-pushout : UU (l1 ⊔ l2 ⊔ l3 ⊔ l4) + htpy-section-descent-data-pushout = + Σ ( left-map-section-descent-data-pushout P r ~ + left-map-section-descent-data-pushout P t) + ( λ HA → + Σ ( right-map-section-descent-data-pushout P r ~ + right-map-section-descent-data-pushout P t) + ( λ HB → + (s : spanning-type-span-diagram 𝒮) → + coherence-square-identifications + ( ap + ( map-family-descent-data-pushout P s) + ( HA (left-map-span-diagram 𝒮 s))) + ( coherence-section-descent-data-pushout P r s) + ( coherence-section-descent-data-pushout P t s) + ( HB (right-map-span-diagram 𝒮 s)))) +``` + +### The reflexive homotopy of sections of descent data for pushouts + +```agda +module _ + {l1 l2 l3 l4 : Level} {𝒮 : span-diagram l1 l2 l3} + (P : descent-data-pushout 𝒮 l4) + (r : section-descent-data-pushout P) + where + + refl-htpy-section-descent-data-pushout : + htpy-section-descent-data-pushout P r r + pr1 refl-htpy-section-descent-data-pushout = refl-htpy + pr1 (pr2 refl-htpy-section-descent-data-pushout) = refl-htpy + pr2 (pr2 refl-htpy-section-descent-data-pushout) = right-unit-htpy +``` + +## Properties + +### Characterization of identity types of sections of descent data for pushouts + +```agda +module _ + {l1 l2 l3 l4 : Level} {𝒮 : span-diagram l1 l2 l3} + (P : descent-data-pushout 𝒮 l4) + (r : section-descent-data-pushout P) + where + + htpy-eq-section-descent-data-pushout : + (t : section-descent-data-pushout P) → + (r = t) → htpy-section-descent-data-pushout P r t + htpy-eq-section-descent-data-pushout .r refl = + refl-htpy-section-descent-data-pushout P r + + abstract + is-torsorial-htpy-section-descent-data-pushout : + is-torsorial (htpy-section-descent-data-pushout P r) + is-torsorial-htpy-section-descent-data-pushout = + is-torsorial-Eq-structure + ( is-torsorial-htpy (left-map-section-descent-data-pushout P r)) + ( left-map-section-descent-data-pushout P r , refl-htpy) + ( is-torsorial-Eq-structure + ( is-torsorial-htpy (right-map-section-descent-data-pushout P r)) + ( right-map-section-descent-data-pushout P r , refl-htpy) + ( is-torsorial-htpy + ( coherence-section-descent-data-pushout P r ∙h refl-htpy))) + + is-equiv-htpy-eq-section-descent-data-pushout : + (t : section-descent-data-pushout P) → + is-equiv (htpy-eq-section-descent-data-pushout t) + is-equiv-htpy-eq-section-descent-data-pushout = + fundamental-theorem-id + ( is-torsorial-htpy-section-descent-data-pushout) + ( htpy-eq-section-descent-data-pushout) + + extensionality-section-descent-data-pushout : + (t : section-descent-data-pushout P) → + (r = t) ≃ htpy-section-descent-data-pushout P r t + pr1 (extensionality-section-descent-data-pushout t) = + htpy-eq-section-descent-data-pushout t + pr2 (extensionality-section-descent-data-pushout t) = + is-equiv-htpy-eq-section-descent-data-pushout t +``` + +### Sections of families over a pushout correspond to sections of the corresponding descent data + +**Proof:** Given a family with descent data `P ≈ (PA, PB, PS)`, note that a +section `t : (x : X) → P x` of `P` induces a section `(tA, tB, tS)` of +`(PA, PB, PS)`, where + +```text + tA a := eA (tia) + tB b := eB (tjb), +``` + +and `tS s` is given by the chain of identifications + +```text + PS s (eA (tifs)) + = eB (tr P (H s) (tifs)) by coherence of P ≈ (PA, PB, PS) + = eB (tjgs) by apd t (H s) +``` + +This map factors through the dependent cocone map + +```text + dependent-cocone-map + (x : X) → P x --------------------> dependent-cocone P + \ / + \ / + \ / + ∨ ∨ + section (PA, PB, PS), +``` + +where the right map takes `(dA, dB, dS)` to + +```text + tA a := eA (dA a) + tB b := eB (dB a) + tS s : PS s (eA (dA fs)) + = eB (tr P (H s) (dA fs)) by coherence of P ≈ (PA, PB, PS) + = eB (dB gs) by dS. +``` + +The top map is an equivalence, since we assume `X` to be a pushout, and the +right map is an equivalence, since concatenating an identification is an +equivalence, and the action on identifications of equivalences is an +equivalence. It follows that the left map is an equivalence + +```agda +module _ + {l1 l2 l3 l4 l5 : Level} {𝒮 : span-diagram l1 l2 l3} + {X : UU l4} {c : cocone-span-diagram 𝒮 X} + (P : family-with-descent-data-pushout c l5) + where + + section-descent-data-section-family-cocone-span-diagram : + ((x : X) → family-cocone-family-with-descent-data-pushout P x) → + section-descent-data-pushout + ( descent-data-family-with-descent-data-pushout P) + pr1 (section-descent-data-section-family-cocone-span-diagram f) a = + left-map-family-with-descent-data-pushout P a + ( f (horizontal-map-cocone _ _ c a)) + pr1 (pr2 (section-descent-data-section-family-cocone-span-diagram f)) b = + right-map-family-with-descent-data-pushout P b + ( f (vertical-map-cocone _ _ c b)) + pr2 (pr2 (section-descent-data-section-family-cocone-span-diagram f)) s = + ( inv + ( coherence-family-with-descent-data-pushout P s + ( f (horizontal-map-cocone _ _ c (left-map-span-diagram 𝒮 s))))) ∙ + ( ap + ( right-map-family-with-descent-data-pushout P + ( right-map-span-diagram 𝒮 s)) + ( apd f (coherence-square-cocone _ _ c s))) + + section-descent-data-dependent-cocone-span-diagram : + dependent-cocone-span-diagram c + ( family-cocone-family-with-descent-data-pushout P) → + section-descent-data-pushout + ( descent-data-family-with-descent-data-pushout P) + pr1 (section-descent-data-dependent-cocone-span-diagram d) a = + left-map-family-with-descent-data-pushout P a + ( horizontal-map-dependent-cocone _ _ _ _ d a) + pr1 (pr2 (section-descent-data-dependent-cocone-span-diagram d)) b = + right-map-family-with-descent-data-pushout P b + ( vertical-map-dependent-cocone _ _ _ _ d b) + pr2 (pr2 (section-descent-data-dependent-cocone-span-diagram d)) s = + ( inv (coherence-family-with-descent-data-pushout P s _)) ∙ + ( ap + ( right-map-family-with-descent-data-pushout P + ( right-map-span-diagram 𝒮 s)) + ( coherence-square-dependent-cocone _ _ _ _ d s)) + + abstract + is-equiv-section-descent-data-depedent-cocone-span-diagram : + is-equiv section-descent-data-dependent-cocone-span-diagram + is-equiv-section-descent-data-depedent-cocone-span-diagram = + is-equiv-map-Σ _ + ( is-equiv-map-Π-is-fiberwise-equiv + ( is-equiv-left-map-family-with-descent-data-pushout P)) + ( λ tA → + is-equiv-map-Σ _ + ( is-equiv-map-Π-is-fiberwise-equiv + ( is-equiv-right-map-family-with-descent-data-pushout P)) + ( λ tB → + is-equiv-map-Π-is-fiberwise-equiv + ( λ s → + is-equiv-comp _ _ + ( is-emb-equiv + ( right-equiv-family-with-descent-data-pushout P + ( right-map-span-diagram 𝒮 s)) + ( _) + ( _)) + ( is-equiv-inv-concat _ _)))) + + triangle-section-descent-data-section-family-cocone-span-diagram : + coherence-triangle-maps + ( section-descent-data-section-family-cocone-span-diagram) + ( section-descent-data-dependent-cocone-span-diagram) + ( dependent-cocone-map-span-diagram c + ( family-cocone-family-with-descent-data-pushout P)) + triangle-section-descent-data-section-family-cocone-span-diagram = refl-htpy + + abstract + is-equiv-section-descent-data-section-family-cocone-span-diagram : + universal-property-pushout _ _ c → + is-equiv (section-descent-data-section-family-cocone-span-diagram) + is-equiv-section-descent-data-section-family-cocone-span-diagram up-c = + is-equiv-left-map-triangle + ( section-descent-data-section-family-cocone-span-diagram) + ( section-descent-data-dependent-cocone-span-diagram) + ( dependent-cocone-map-span-diagram c + ( family-cocone-family-with-descent-data-pushout P)) + ( triangle-section-descent-data-section-family-cocone-span-diagram) + ( dependent-universal-property-universal-property-pushout _ _ _ up-c + ( family-cocone-family-with-descent-data-pushout P)) + ( is-equiv-section-descent-data-depedent-cocone-span-diagram) +``` + +As a corollary, for any given section `(tA, tB, tS)` of `(PA, PB, PS)`, there is +a unique section `t : (x : X) → P x` of `P` such that its induced section of +`(PA, PB, PS)` is homotopic to `(tA, tB, tS)`. + +**Proof:** Since the map taking sections of `P` to sections of `(PA, PB, PS)` is +an equivalence, it has contractible fibers. The fiber at `(tA, tB, tS)` is the +type of sections of `P` that induce a section of `(PA, PB, PS)` which is +identified with `(tA, tB, tS)`, and such identifications are characterized by +homotopies of sections of `(PA, PB, PS)`. + +```agda +module _ + {l1 l2 l3 l4 l5 : Level} {𝒮 : span-diagram l1 l2 l3} + {X : UU l4} {c : cocone-span-diagram 𝒮 X} + (up-c : universal-property-pushout _ _ c) + (P : family-with-descent-data-pushout c l5) + (t : + section-descent-data-pushout + ( descent-data-family-with-descent-data-pushout P)) + where + + abstract + uniqueness-section-family-section-descent-data-pushout : + is-contr + ( Σ ( (x : X) → family-cocone-family-with-descent-data-pushout P x) + ( λ h → + htpy-section-descent-data-pushout + ( descent-data-family-with-descent-data-pushout P) + ( section-descent-data-section-family-cocone-span-diagram P h) + ( t))) + uniqueness-section-family-section-descent-data-pushout = + is-contr-equiv' + ( fiber (section-descent-data-section-family-cocone-span-diagram P) t) + ( equiv-tot + ( λ h → + extensionality-section-descent-data-pushout + ( descent-data-family-with-descent-data-pushout P) + ( _) + ( t))) + ( is-contr-map-is-equiv + ( is-equiv-section-descent-data-section-family-cocone-span-diagram P + ( up-c)) + ( t)) + + section-family-section-descent-data-pushout : + (x : X) → family-cocone-family-with-descent-data-pushout P x + section-family-section-descent-data-pushout = + pr1 (center uniqueness-section-family-section-descent-data-pushout) + + htpy-section-family-section-descent-data-pushout : + htpy-section-descent-data-pushout + ( descent-data-family-with-descent-data-pushout P) + ( section-descent-data-section-family-cocone-span-diagram P + ( section-family-section-descent-data-pushout)) + ( t) + htpy-section-family-section-descent-data-pushout = + pr2 (center uniqueness-section-family-section-descent-data-pushout) +```