diff --git a/src/foundation/contractible-types.lagda.md b/src/foundation/contractible-types.lagda.md index bfb117148d..34bcad6ead 100644 --- a/src/foundation/contractible-types.lagda.md +++ b/src/foundation/contractible-types.lagda.md @@ -23,6 +23,7 @@ open import foundation-core.contractible-maps open import foundation-core.equivalences 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 @@ -197,7 +198,7 @@ module _ is-equiv-is-invertible ( ev-point' (center H)) ( λ f → eq-htpy (λ x → ap f (contraction H x))) - ( λ x → refl) + ( refl-htpy) equiv-diagonal-exponential-is-contr : {l : Level} (X : UU l) → is-contr A → X ≃ (A → X) @@ -205,4 +206,26 @@ module _ diagonal-exponential X A pr2 (equiv-diagonal-exponential-is-contr X H) = is-equiv-diagonal-exponential-is-contr H X + + abstract + is-equiv-diagonal-exponential-is-contr' : + is-contr A → + {l : Level} (X : UU l) → is-equiv (diagonal-exponential A X) + is-equiv-diagonal-exponential-is-contr' H X = + is-equiv-is-invertible + ( λ _ → center H) + ( λ x → eq-htpy (contraction H ∘ x)) + ( contraction H) + + equiv-diagonal-exponential-is-contr' : + {l : Level} (X : UU l) → is-contr A → A ≃ (X → A) + equiv-diagonal-exponential-is-contr' X H = + ( diagonal-exponential A X , is-equiv-diagonal-exponential-is-contr' H X) + + abstract + is-contr-is-equiv-diagonal-exponential' : + ({l : Level} (X : UU l) → is-equiv (diagonal-exponential A X)) → + is-contr A + is-contr-is-equiv-diagonal-exponential' H = + is-contr-is-equiv-self-diagonal-exponential (H A) ``` diff --git a/src/foundation/diagonal-maps-of-types.lagda.md b/src/foundation/diagonal-maps-of-types.lagda.md index b4a0135888..d0651b3b44 100644 --- a/src/foundation/diagonal-maps-of-types.lagda.md +++ b/src/foundation/diagonal-maps-of-types.lagda.md @@ -20,6 +20,7 @@ open import foundation.universe-levels open import foundation-core.cartesian-product-types open import foundation-core.constant-maps +open import foundation-core.contractible-types open import foundation-core.equivalences open import foundation-core.fibers-of-maps open import foundation-core.function-types @@ -70,7 +71,7 @@ module _ inv-htpy htpy-diagonal-exponential-Id-ap-diagonal-exponential-htpy-eq ``` -### Given an element of the exponent the diagonal map is injective +### If the exponent has an element then the diagonal map is injective ```agda module _ @@ -86,7 +87,7 @@ module _ pr2 diagonal-exponential-injection = is-injective-diagonal-exponential ``` -### The action on identifications of an (exponential) diagonal is a diagonal +### The action on identifications of a diagonal is a diagonal ```agda module _ diff --git a/src/group-theory/invertible-elements-monoids.lagda.md b/src/group-theory/invertible-elements-monoids.lagda.md index cece924e20..1a27aa4589 100644 --- a/src/group-theory/invertible-elements-monoids.lagda.md +++ b/src/group-theory/invertible-elements-monoids.lagda.md @@ -33,7 +33,7 @@ An element `x : M` in a [monoid](group-theory.monoids.md) `M` is said to be is said to be **right invertible** if there is an element `y : M` such that `xy = e`. The element `x` is said to be {{#concept "invertible" WD="invertible element" WDID=Q67474638 Agda=is-invertible-element-Monoid}} -if it has a two-sided inverse, i.e., if if there is an element `y : M` such that +if it has a two-sided inverse, i.e., if there is an element `y : M` such that `xy = e` and `yx = e`. Left inverses of elements are also called **retractions** and right inverses are also called **sections**. diff --git a/src/orthogonal-factorization-systems.lagda.md b/src/orthogonal-factorization-systems.lagda.md index a2928944db..6a1e039af0 100644 --- a/src/orthogonal-factorization-systems.lagda.md +++ b/src/orthogonal-factorization-systems.lagda.md @@ -13,11 +13,15 @@ open import orthogonal-factorization-systems.anodyne-maps public open import orthogonal-factorization-systems.cd-structures public open import orthogonal-factorization-systems.cellular-maps public open import orthogonal-factorization-systems.closed-modalities public +open import orthogonal-factorization-systems.connected-maps-at-subuniverses public +open import orthogonal-factorization-systems.connected-maps-at-subuniverses-over-type public +open import orthogonal-factorization-systems.connected-types-at-subuniverses public open import orthogonal-factorization-systems.continuation-modalities public open import orthogonal-factorization-systems.double-lifts-families-of-elements public open import orthogonal-factorization-systems.double-negation-sheaves public open import orthogonal-factorization-systems.equality-extensions-dependent-maps public open import orthogonal-factorization-systems.equality-extensions-maps public +open import orthogonal-factorization-systems.equivalences-at-subuniverses public open import orthogonal-factorization-systems.extensions-dependent-maps public open import orthogonal-factorization-systems.extensions-double-lifts-families-of-elements public open import orthogonal-factorization-systems.extensions-lifts-families-of-elements public diff --git a/src/orthogonal-factorization-systems/connected-maps-at-subuniverses-over-type.lagda.md b/src/orthogonal-factorization-systems/connected-maps-at-subuniverses-over-type.lagda.md new file mode 100644 index 0000000000..1e5fc15893 --- /dev/null +++ b/src/orthogonal-factorization-systems/connected-maps-at-subuniverses-over-type.lagda.md @@ -0,0 +1,128 @@ +# `K`-connected maps over a type, with respect to a subuniverse `K` + +```agda +module orthogonal-factorization-systems.connected-maps-at-subuniverses-over-type where +``` + +
Imports + +```agda +open import foundation.dependent-pair-types +open import foundation.equivalences +open import foundation.fundamental-theorem-of-identity-types +open import foundation.structure-identity-principle +open import foundation.subuniverses +open import foundation.univalence +open import foundation.universe-levels + +open import foundation-core.function-types +open import foundation-core.homotopies +open import foundation-core.identity-types +open import foundation-core.torsorial-type-families + +open import orthogonal-factorization-systems.connected-maps-at-subuniverses +``` + +
+ +## Idea + +Given a [subuniverse](foundation.subuniverses.md) `K` we consider the type of +`K`-[connected maps](orthogonal-factorization-systems.connected-maps-at-subuniverses.md) +into a type `X`. I.e., the collection of types `A` +[equipped](foundation.structure.md) with `K`-connected maps from `A` into `X`. + +## Definitions + +### The type of `K`-connected maps over a type + +```agda +Subuniverse-Connected-Map : + {l1 l2 l3 : Level} (l4 : Level) (K : subuniverse l1 l2) (A : UU l3) → + UU (lsuc l1 ⊔ l2 ⊔ l3 ⊔ lsuc l4) +Subuniverse-Connected-Map l4 K A = Σ (UU l4) (subuniverse-connected-map K A) + +module _ + {l1 l2 l3 l4 : Level} (K : subuniverse l1 l2) + {A : UU l3} (f : Subuniverse-Connected-Map l4 K A) + where + + type-Subuniverse-Connected-Map : UU l4 + type-Subuniverse-Connected-Map = pr1 f + + subuniverse-connected-map-Subuniverse-Connected-Map : + subuniverse-connected-map K A type-Subuniverse-Connected-Map + subuniverse-connected-map-Subuniverse-Connected-Map = pr2 f + + map-Subuniverse-Connected-Map : A → type-Subuniverse-Connected-Map + map-Subuniverse-Connected-Map = + map-subuniverse-connected-map K + ( subuniverse-connected-map-Subuniverse-Connected-Map) + + is-subuniverse-connected-map-Subuniverse-Connected-Map : + is-subuniverse-connected-map K map-Subuniverse-Connected-Map + is-subuniverse-connected-map-Subuniverse-Connected-Map = + is-subuniverse-connected-map-subuniverse-connected-map K + ( subuniverse-connected-map-Subuniverse-Connected-Map) +``` + +## Properties + +### Characterization of equality + +```agda +equiv-Subuniverse-Connected-Map : + {l1 l2 l3 l4 : Level} (K : subuniverse l1 l2) {A : UU l3} → + (f g : Subuniverse-Connected-Map l4 K A) → UU (l3 ⊔ l4) +equiv-Subuniverse-Connected-Map K f g = + Σ ( type-Subuniverse-Connected-Map K f ≃ type-Subuniverse-Connected-Map K g) + ( λ e → + map-equiv e ∘ map-Subuniverse-Connected-Map K f ~ + map-Subuniverse-Connected-Map K g) + +module _ + {l1 l2 l3 l4 : Level} (K : subuniverse l1 l2) {A : UU l3} + (f : Subuniverse-Connected-Map l4 K A) + where + + id-equiv-Subuniverse-Connected-Map : equiv-Subuniverse-Connected-Map K f f + id-equiv-Subuniverse-Connected-Map = (id-equiv , refl-htpy) + + abstract + is-torsorial-equiv-Subuniverse-Connected-Map : + is-torsorial (equiv-Subuniverse-Connected-Map K f) + is-torsorial-equiv-Subuniverse-Connected-Map = + is-torsorial-Eq-structure + ( is-torsorial-equiv (type-Subuniverse-Connected-Map K f)) + ( type-Subuniverse-Connected-Map K f , id-equiv) + ( is-torsorial-htpy-subuniverse-connected-map K + ( subuniverse-connected-map-Subuniverse-Connected-Map K f)) + + equiv-eq-Subuniverse-Connected-Map : + (g : Subuniverse-Connected-Map l4 K A) → + f = g → equiv-Subuniverse-Connected-Map K f g + equiv-eq-Subuniverse-Connected-Map .f refl = + id-equiv-Subuniverse-Connected-Map + + abstract + is-equiv-equiv-eq-Subuniverse-Connected-Map : + (g : Subuniverse-Connected-Map l4 K A) → + is-equiv (equiv-eq-Subuniverse-Connected-Map g) + is-equiv-equiv-eq-Subuniverse-Connected-Map = + fundamental-theorem-id + ( is-torsorial-equiv-Subuniverse-Connected-Map) + ( equiv-eq-Subuniverse-Connected-Map) + + extensionality-Subuniverse-Connected-Map : + (g : Subuniverse-Connected-Map l4 K A) → + (f = g) ≃ equiv-Subuniverse-Connected-Map K f g + extensionality-Subuniverse-Connected-Map g = + ( equiv-eq-Subuniverse-Connected-Map g , + is-equiv-equiv-eq-Subuniverse-Connected-Map g) + + eq-equiv-Subuniverse-Connected-Map : + (g : Subuniverse-Connected-Map l4 K A) → + equiv-Subuniverse-Connected-Map K f g → f = g + eq-equiv-Subuniverse-Connected-Map g = + map-inv-equiv (extensionality-Subuniverse-Connected-Map g) +``` diff --git a/src/orthogonal-factorization-systems/connected-maps-at-subuniverses.lagda.md b/src/orthogonal-factorization-systems/connected-maps-at-subuniverses.lagda.md new file mode 100644 index 0000000000..191cb040a6 --- /dev/null +++ b/src/orthogonal-factorization-systems/connected-maps-at-subuniverses.lagda.md @@ -0,0 +1,870 @@ +# `K`-Connected maps, with respect to a subuniverse `K` + +```agda +module orthogonal-factorization-systems.connected-maps-at-subuniverses where +``` + +
Imports + +```agda +open import foundation.action-on-identifications-functions +open import foundation.contractible-types +open import foundation.coproduct-types +open import foundation.dependent-pair-types +open import foundation.dependent-universal-property-equivalences +open import foundation.equivalences +open import foundation.equivalences-arrows +open import foundation.function-extensionality +open import foundation.functoriality-cartesian-product-types +open import foundation.functoriality-coproduct-types +open import foundation.functoriality-dependent-function-types +open import foundation.fundamental-theorem-of-identity-types +open import foundation.homotopy-induction +open import foundation.inhabited-types +open import foundation.precomposition-dependent-functions +open import foundation.precomposition-functions +open import foundation.propositional-truncations +open import foundation.retracts-of-maps +open import foundation.sections +open import foundation.split-surjective-maps +open import foundation.subtype-identity-principle +open import foundation.subuniverses +open import foundation.surjective-maps +open import foundation.unit-type +open import foundation.universal-property-coproduct-types +open import foundation.universal-property-dependent-pair-types +open import foundation.universal-property-family-of-fibers-of-maps +open import foundation.universal-property-unit-type +open import foundation.universe-levels + +open import foundation-core.contractible-maps +open import foundation-core.embeddings +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.injective-maps +open import foundation-core.propositions +open import foundation-core.subtypes +open import foundation-core.torsorial-type-families + +open import orthogonal-factorization-systems.connected-types-at-subuniverses +open import orthogonal-factorization-systems.equivalences-at-subuniverses +open import orthogonal-factorization-systems.extensions-dependent-maps +open import orthogonal-factorization-systems.localizations-at-subuniverses + +open import synthetic-homotopy-theory.cocones-under-spans +open import synthetic-homotopy-theory.dependent-pullback-property-pushouts +open import synthetic-homotopy-theory.pushouts +``` + +
+ +## Idea + +Given a [subuniverse](foundation.subuniverses.md) `K`, a map `f : A → B` is said +to be +{{#concept "`K`-connected" Disambiguation="map of types, with respect to a subuniverse" Agda=is-subuniverse-connected-map}} +if it satisfies the +{{#concept "universal property" Disambiguation="subuniverse connected map of types"}} +of `K`-connected maps: + +For every `K`-valued family `U` over `B`, the +[dependent precomposition map](foundation-core.precomposition-dependent-functions.md) + +```text + - ∘ f : ((b : B) → U b) → ((a : A) → U (f a)) +``` + +is an [equivalence](foundation-core.equivalences.md). + +We give a series of increasingly stronger conditions for a map `f` to be +`K`-connected. In particular, if `unit ∈ K`, then condition 4 recovers the usual +definition of a `K`-connected map as in Definition 5.5.1 {{#cite Rij19}}, i.e., +as a map whose [fibers](foundation-core.fibers-of-maps.md) have +[contractible](foundation-core.contractible-types.md) +`K`-[localizations](orthogonal-factorization-systems.localizations-at-subuniverses.md). + +1. The map `f` is `K`-connected. +2. For every `K`-valued family `U` over `B` and every map + `u : (x : A) → U (f x)`, the type of + [extensions](orthogonal-factorization-systems.extensions-dependent-maps.md) + of `u` along `f` is contractible. +3. The map `f` is + [left orthogonal](orthogonal-factorization-systems.orthogonal-maps.md) to + maps `h : C → B` whose fibers are in `K`. +4. The [terminal projections](foundation.unit-type.md) of the fibers of `f` are + `K`-[equivalences](orthogonal-factorization-systems.equivalences-at-subuniverses.md). +5. The fibers of `f` are `K`-connected in the sense that for every `U` in `K`, + the [diagonal map](foundation.diagonal-maps-of-types.md) + `U → (fiber f y → U)` is an equivalence. +6. Every fiber of `f` satisfies the condition that for every `U` in `K` and + every function `u : fiber f y → U` there + [uniquely exists](foundation.uniqueness-quantification.md) an element + `v : U` such that `const v ~ u`. +7. The fibers of `f` have `K`-localizations, and for every `y` there + [merely exists](foundation.existential-quantification.md) a + `u : K(fiber f y)` such that for all `a` and `p : f a = y` we have a + [dependent identification](foundation-core.dependent-identifications.md) + over `p` + ```text + u =ₚ^[y ↦ K(fiber f y)] (η (f a) (a , refl)) + ``` +8. The fibers of `f` have `K`-localizations, and the dependent precomposition + map of `f` is [surjective](foundation.surjective-maps.md) at every + `K`-valued family `U` over `B`. +9. The fibers of `f` have `K`-localizations, and the dependent precomposition + map of `f` has a [section](foundation-core.sections.md) at every `K`-valued + family `U` over `B`. + +If the fibers of `f` have `K`-localizations then these conditions are all +[equivalent](foundation.logical-equivalences.md). More generally we always have +that conditions 1-3 are equivalent, conditions 4-6 are equivalent, and +conditions 7-9 are equivalent. + +## Definitions + +### The predicate on maps of being `K`-connected + +```agda +module _ + {l1 l2 l3 l4 : Level} (K : subuniverse l1 l2) {A : UU l3} {B : UU l4} + (f : A → B) + where + + is-subuniverse-connected-map-Prop : Prop (lsuc l1 ⊔ l2 ⊔ l3 ⊔ l4) + is-subuniverse-connected-map-Prop = + Π-Prop + ( B → type-subuniverse K) + ( λ U → is-equiv-Prop (precomp-Π f (pr1 ∘ U))) + + is-subuniverse-connected-map : UU (lsuc l1 ⊔ l2 ⊔ l3 ⊔ l4) + is-subuniverse-connected-map = + (U : B → type-subuniverse K) → is-equiv (precomp-Π f (pr1 ∘ U)) + + is-prop-is-subuniverse-connected-map : + is-prop is-subuniverse-connected-map + is-prop-is-subuniverse-connected-map = + is-prop-type-Prop is-subuniverse-connected-map-Prop +``` + +### The type of `K`-connected maps between two types + +```agda +subuniverse-connected-map : + {l1 l2 l3 l4 : Level} (K : subuniverse l1 l2) → + UU l3 → UU l4 → UU (lsuc l1 ⊔ l2 ⊔ l3 ⊔ l4) +subuniverse-connected-map K A B = + type-subtype (is-subuniverse-connected-map-Prop K {A} {B}) + +module _ + {l1 l2 l3 l4 : Level} (K : subuniverse l1 l2) {A : UU l3} {B : UU l4} + where + + map-subuniverse-connected-map : subuniverse-connected-map K A B → A → B + map-subuniverse-connected-map = + inclusion-subtype (is-subuniverse-connected-map-Prop K) + + is-subuniverse-connected-map-subuniverse-connected-map : + (f : subuniverse-connected-map K A B) → + is-subuniverse-connected-map K (map-subuniverse-connected-map f) + is-subuniverse-connected-map-subuniverse-connected-map = + is-in-subtype-inclusion-subtype (is-subuniverse-connected-map-Prop K) + + emb-inclusion-subuniverse-connected-map : + subuniverse-connected-map K A B ↪ (A → B) + emb-inclusion-subuniverse-connected-map = + emb-subtype (is-subuniverse-connected-map-Prop K) +``` + +### The extension condition of `K`-connected maps + +```agda +module _ + {l1 l2 l3 l4 : Level} (K : subuniverse l1 l2) + {A : UU l3} {B : UU l4} (f : A → B) + where + + is-subuniverse-connected-map-extension-condition : + UU (lsuc l1 ⊔ l2 ⊔ l3 ⊔ l4) + is-subuniverse-connected-map-extension-condition = + (U : B → type-subuniverse K) (u : (x : A) → pr1 (U (f x))) → + is-contr (extension-dependent-map f (pr1 ∘ U) u) + + abstract + is-prop-is-subuniverse-connected-map-extension-condition : + is-prop is-subuniverse-connected-map-extension-condition + is-prop-is-subuniverse-connected-map-extension-condition = + is-prop-Π (λ U → is-prop-Π (λ u → is-property-is-contr)) + + is-subuniverse-connected-map-extension-condition-Prop : + Prop (lsuc l1 ⊔ l2 ⊔ l3 ⊔ l4) + is-subuniverse-connected-map-extension-condition-Prop = + ( is-subuniverse-connected-map-extension-condition , + is-prop-is-subuniverse-connected-map-extension-condition) +``` + +## Properties + +### Equivalent characterizations of `K`-connected maps + +#### Extension condition + +A map `f : A → B` is `K`-connected if and only if, for every `K`-valued family +`U` over `B` and every map `u : (x : A) → U (f x)`, the type of dependent +extensions of `u` along `f` is contractible. + +```agda +module _ + {l1 l2 l3 l4 : Level} (K : subuniverse l1 l2) + {A : UU l3} {B : UU l4} (f : A → B) + where + + is-subuniverse-connected-map-is-subuniverse-connected-map-extension-condition : + is-subuniverse-connected-map-extension-condition K f → + is-subuniverse-connected-map K f + is-subuniverse-connected-map-is-subuniverse-connected-map-extension-condition + H U = + is-equiv-is-contr-map + ( λ u → + is-contr-equiv + ( extension-dependent-map f (pr1 ∘ U) u) + ( compute-extension-fiber-precomp-Π f (pr1 ∘ U) u) + ( H U u)) + + is-subuniverse-connected-map-extension-condition-is-subuniverse-connected-map : + is-subuniverse-connected-map K f → + is-subuniverse-connected-map-extension-condition K f + is-subuniverse-connected-map-extension-condition-is-subuniverse-connected-map + H U u = + is-contr-equiv' + ( fiber (precomp-Π f (pr1 ∘ U)) u) + ( compute-extension-fiber-precomp-Π f (pr1 ∘ U) u) + ( is-contr-map-is-equiv (H U) u) +``` + +#### Contractible fiber-localization condition + +Given a subuniverse `K` then a map `f` is `K`-connected if the fibers are +`K`-equivalent to contractible types. + +**Proof.** We have an equivalence of arrows + +```text + ~ + ((b : B) → unit → U b) --------> ((b : B) → U b) + | | + | | precomp-Π f U + | | + ∨ ~ ∨ + ((b : B) → fiber f b → U b) ---> ((a : A) → U (f a)) +``` + +where the left-hand map is +`map-Π (λ b → precomp (terminal-map (fiber f b)) (U b))`, hence if each terminal +map is a `K`-equivalence then this is an equivalence as well. ∎ + +```agda +module _ + {l1 l2 l3 l4 : Level} (K : subuniverse l1 l2) + {A : UU l3} {B : UU l4} (f : A → B) + where + + is-subuniverse-connected-map-is-subuniverse-equiv-terminal-map-fibers : + ((b : B) → is-subuniverse-equiv K (terminal-map (fiber f b))) → + is-subuniverse-connected-map K f + is-subuniverse-connected-map-is-subuniverse-equiv-terminal-map-fibers H U = + is-equiv-target-is-equiv-source-equiv-arrow + ( map-Π (λ b → precomp (terminal-map (fiber f b)) (pr1 (U b)))) + ( precomp-Π f (pr1 ∘ U)) + ( ( equiv-Π-equiv-family + ( λ b → equiv-universal-property-unit (pr1 (U b)))) , + ( equiv-universal-property-family-of-fibers f (pr1 ∘ U)) , + ( refl-htpy)) + ( is-equiv-map-Π-is-fiberwise-equiv (λ b → H b (U b))) +``` + +#### Fiber condition + +```agda +module _ + {l1 l2 l3 l4 : Level} (K : subuniverse l1 l2) + {A : UU l3} {B : UU l4} (f : A → B) + where + + is-subuniverse-connected-map-is-subuniverse-connected-fibers : + ( (b : B) → is-subuniverse-connected K (fiber f b)) → + is-subuniverse-connected-map K f + is-subuniverse-connected-map-is-subuniverse-connected-fibers H = + is-subuniverse-connected-map-is-subuniverse-equiv-terminal-map-fibers K f + ( is-subuniverse-equiv-terminal-map-is-subuniverse-connected K ∘ H) +``` + +#### Constancy condition on fibers + +```agda +module _ + {l1 l2 l3 l4 : Level} (K : subuniverse l1 l2) + {A : UU l3} {B : UU l4} (f : A → B) + where + + is-subuniverse-connected-map-is-subuniverse-connected-const-condition-fibers : + ( (b : B) → is-subuniverse-connected-const-condition K (fiber f b)) → + is-subuniverse-connected-map K f + is-subuniverse-connected-map-is-subuniverse-connected-const-condition-fibers + H = + is-subuniverse-connected-map-is-subuniverse-connected-fibers K f + ( λ b → + is-subuniverse-connected-is-subuniverse-connected-const-condition K + ( H b)) +``` + +#### Section condition + +A map is `K`-connected if and only if its dependent precomposition maps admit +sections and the fibers have `K`-localizations. + +```agda +module _ + {l1 l2 l3 : Level} {A : UU l1} {B : UU l2} (f : A → B) + (Kfib : B → UU l3) (η : (b : B) → fiber f b → Kfib b) + (is-htpy-injective-precomp-η-Kfib : + (b : B) {g h : Kfib b → Kfib b} → + precomp (η b) (Kfib b) g ~ precomp (η b) (Kfib b) h → g ~ h) + where + + abstract + is-contr-subuniverse-localization-fiber-has-section-precomp-Π'' : + ( dependent-product-fiber-precomp-Π' f Kfib (λ a → η (f a) (a , refl))) → + ((b : B) → is-contr (Kfib b)) + is-contr-subuniverse-localization-fiber-has-section-precomp-Π'' Fη b = + ( pr1 (Fη b) , + is-htpy-injective-precomp-η-Kfib b + ( λ where (a , refl) → pr2 (Fη b) (a , refl))) + + abstract + is-contr-subuniverse-localization-fiber-has-section-precomp-Π' : + fiber (precomp-Π f Kfib) (λ a → η (f a) (a , refl)) → + ((b : B) → is-contr (Kfib b)) + is-contr-subuniverse-localization-fiber-has-section-precomp-Π' (s , H) b = + ( s b , + is-htpy-injective-precomp-η-Kfib b (λ where (a , refl) → htpy-eq H a)) + +module _ + {l1 l2 l3 l4 : Level} (K : subuniverse l1 l2) + {A : UU l3} {B : UU l4} (f : A → B) + (Kfib : (b : B) → subuniverse-localization K (fiber f b)) + (s : (U : B → type-subuniverse K) → section (precomp-Π f (pr1 ∘ U))) + where + + is-contr-subuniverse-localization-fiber-has-section-precomp-Π : + ((b : B) → is-contr (pr1 (Kfib b))) + is-contr-subuniverse-localization-fiber-has-section-precomp-Π = + is-contr-subuniverse-localization-fiber-has-section-precomp-Π' f + ( type-subuniverse-localization K ∘ Kfib) + ( unit-subuniverse-localization K ∘ Kfib) + ( λ b H → + htpy-eq + ( is-injective-is-equiv + ( is-subuniverse-equiv-unit-subuniverse-localization K (Kfib b) + ( type-subuniverse-subuniverse-localization K (Kfib b))) + ( eq-htpy H))) + ( is-split-surjective-section + ( precomp-Π f (type-subuniverse-localization K ∘ Kfib)) + ( s (type-subuniverse-subuniverse-localization K ∘ Kfib)) + ( λ a → unit-subuniverse-localization K (Kfib (f a)) (a , refl))) + + is-subuniverse-equiv-terminal-map-fibers-has-section-precomp-Π : + (b : B) → is-subuniverse-equiv K (terminal-map (fiber f b)) + is-subuniverse-equiv-terminal-map-fibers-has-section-precomp-Π b = + is-subuniverse-equiv-comp K + ( terminal-map (type-subuniverse-localization K (Kfib b))) + ( unit-subuniverse-localization K (Kfib b)) + ( is-subuniverse-equiv-unit-subuniverse-localization K (Kfib b)) + ( is-subuniverse-equiv-is-equiv K + ( terminal-map (type-subuniverse-localization K (Kfib b))) + ( is-equiv-terminal-map-is-contr + ( is-contr-subuniverse-localization-fiber-has-section-precomp-Π b))) + + is-subuniverse-connected-map-has-section-precomp-Π : + is-subuniverse-connected-map K f + is-subuniverse-connected-map-has-section-precomp-Π = + is-subuniverse-connected-map-is-subuniverse-equiv-terminal-map-fibers K f + ( is-subuniverse-equiv-terminal-map-fibers-has-section-precomp-Π) +``` + +#### Surjection condition + +A map is `K`-connected if its dependent precomposition maps are surjective and +the fibers have `K`-localizations. + +In fact, it suffices that the fibers have `K`-localizations and that for every +`y` there merely exists a `u : K(fiber f y)` such that for all `a` and +`p : f a = y` we have a dependent identification over `p` + +```text + u =ₚ^[y ↦ K(fiber f y)] (η (f a) (a , refl)). +``` + +This is in turn a slightly weaker condition than inhabitedness of the fiber of +`precomp-Π f` over the map `a ↦ η (f a) (a , refl)`. + +```agda +module _ + {l1 l2 l3 : Level} {A : UU l1} {B : UU l2} (f : A → B) + (Kfib : B → UU l3) + (η : (b : B) → fiber f b → Kfib b) + (is-htpy-injective-precomp-η-Kfib : + (b : B) {g h : Kfib b → Kfib b} → + precomp (η b) (Kfib b) g ~ precomp (η b) (Kfib b) h → g ~ h) + where + + abstract + is-contr-subuniverse-localization-fiber-is-inhabited-family-dependent-product-fiber-precomp-Π' : + ( (b : B) → + is-inhabited + ( family-dependent-product-fiber-precomp-Π' f Kfib + ( λ a → η (f a) (a , refl)) + ( b))) → + ((b : B) → is-contr (Kfib b)) + is-contr-subuniverse-localization-fiber-is-inhabited-family-dependent-product-fiber-precomp-Π' + Fη b = + rec-trunc-Prop + ( is-contr-Prop (Kfib b)) + ( λ (sb , Hb) → + ( sb , + is-htpy-injective-precomp-η-Kfib b + ( λ where (a , refl) → Hb (a , refl)))) + ( Fη b) + + is-contr-subuniverse-localization-fiber-is-inhabited-fiber-precomp-Π : + is-inhabited (fiber (precomp-Π f Kfib) (λ a → η (f a) (a , refl))) → + ((b : B) → is-contr (Kfib b)) + is-contr-subuniverse-localization-fiber-is-inhabited-fiber-precomp-Π + s b = + rec-trunc-Prop + ( is-contr-Prop (Kfib b)) + ( λ s → + is-contr-subuniverse-localization-fiber-has-section-precomp-Π' + f Kfib η is-htpy-injective-precomp-η-Kfib s b) + ( s) + +module _ + {l1 l2 l3 l4 : Level} (K : subuniverse l1 l2) + {A : UU l3} {B : UU l4} (f : A → B) + (Kfib : (b : B) → subuniverse-localization K (fiber f b)) + where + + is-contr-subuniverse-localization-fiber-is-inhabited-family-dependent-product-fiber-precomp-Π : + ( (b : B) → + is-inhabited + ( family-dependent-product-fiber-precomp-Π' f + ( type-subuniverse-localization K ∘ Kfib) + ( λ a → unit-subuniverse-localization K (Kfib (f a)) (a , refl)) + ( b))) → + ((b : B) → is-contr (type-subuniverse-localization K (Kfib b))) + is-contr-subuniverse-localization-fiber-is-inhabited-family-dependent-product-fiber-precomp-Π = + is-contr-subuniverse-localization-fiber-is-inhabited-family-dependent-product-fiber-precomp-Π' + ( f) + ( type-subuniverse-localization K ∘ Kfib) + ( unit-subuniverse-localization K ∘ Kfib) + ( λ b H → + htpy-eq + ( is-injective-is-equiv + ( is-subuniverse-equiv-unit-subuniverse-localization K (Kfib b) + ( type-subuniverse-subuniverse-localization K (Kfib b))) + ( eq-htpy H))) + + is-subuniverse-equiv-terminal-map-fibers-is-inhabited-family-dependent-product-fiber-precomp-Π : + ( (b : B) → + is-inhabited + ( family-dependent-product-fiber-precomp-Π' f + ( type-subuniverse-localization K ∘ Kfib) + ( λ a → unit-subuniverse-localization K (Kfib (f a)) (a , refl)) + ( b))) → + (b : B) → is-subuniverse-equiv K (terminal-map (fiber f b)) + is-subuniverse-equiv-terminal-map-fibers-is-inhabited-family-dependent-product-fiber-precomp-Π + s b = + is-subuniverse-equiv-comp K + ( terminal-map (type-subuniverse-localization K (Kfib b))) + ( unit-subuniverse-localization K (Kfib b)) + ( is-subuniverse-equiv-unit-subuniverse-localization K (Kfib b)) + ( is-subuniverse-equiv-is-equiv K + ( terminal-map (type-subuniverse-localization K (Kfib b))) + ( is-equiv-terminal-map-is-contr + ( is-contr-subuniverse-localization-fiber-is-inhabited-family-dependent-product-fiber-precomp-Π + s b))) + + is-subuniverse-connected-map-is-inhabited-family-dependent-product-fiber-precomp-Π : + ( (b : B) → + is-inhabited + ( family-dependent-product-fiber-precomp-Π' f + ( type-subuniverse-localization K ∘ Kfib) + ( λ a → unit-subuniverse-localization K (Kfib (f a)) (a , refl)) + ( b))) → + is-subuniverse-connected-map K f + is-subuniverse-connected-map-is-inhabited-family-dependent-product-fiber-precomp-Π + Fη = + is-subuniverse-connected-map-is-subuniverse-equiv-terminal-map-fibers K f + ( is-subuniverse-equiv-terminal-map-fibers-is-inhabited-family-dependent-product-fiber-precomp-Π + ( Fη)) + + is-contr-subuniverse-localization-fiber-is-surjective-precomp-Π : + ((U : B → type-subuniverse K) → is-surjective (precomp-Π f (pr1 ∘ U))) → + ((b : B) → is-contr (pr1 (Kfib b))) + is-contr-subuniverse-localization-fiber-is-surjective-precomp-Π H = + is-contr-subuniverse-localization-fiber-is-inhabited-fiber-precomp-Π f + ( type-subuniverse-localization K ∘ Kfib) + ( unit-subuniverse-localization K ∘ Kfib) + ( λ b H → + htpy-eq + ( is-injective-is-equiv + ( is-subuniverse-equiv-unit-subuniverse-localization K (Kfib b) + ( type-subuniverse-subuniverse-localization K (Kfib b))) + ( eq-htpy H))) + ( H ( type-subuniverse-subuniverse-localization K ∘ Kfib) + ( λ a → unit-subuniverse-localization K (Kfib (f a)) (a , refl))) + + is-subuniverse-equiv-terminal-map-fibers-is-surjective-precomp-Π : + ((U : B → type-subuniverse K) → is-surjective (precomp-Π f (pr1 ∘ U))) → + (b : B) → is-subuniverse-equiv K (terminal-map (fiber f b)) + is-subuniverse-equiv-terminal-map-fibers-is-surjective-precomp-Π H b = + is-subuniverse-equiv-comp K + ( terminal-map (type-subuniverse-localization K (Kfib b))) + ( unit-subuniverse-localization K (Kfib b)) + ( is-subuniverse-equiv-unit-subuniverse-localization K (Kfib b)) + ( is-subuniverse-equiv-is-equiv K + ( terminal-map (type-subuniverse-localization K (Kfib b))) + ( is-equiv-terminal-map-is-contr + ( is-contr-subuniverse-localization-fiber-is-surjective-precomp-Π + H b))) + + is-subuniverse-connected-map-is-surjective-precomp-Π : + ((U : B → type-subuniverse K) → is-surjective (precomp-Π f (pr1 ∘ U))) → + is-subuniverse-connected-map K f + is-subuniverse-connected-map-is-surjective-precomp-Π H = + is-subuniverse-connected-map-is-subuniverse-equiv-terminal-map-fibers K f + ( is-subuniverse-equiv-terminal-map-fibers-is-surjective-precomp-Π H) +``` + +### Characterizing equality of `K`-connected maps + +```agda +module _ + {l1 l2 l3 l4 : Level} (K : subuniverse l1 l2) {A : UU l3} {B : UU l4} + where + + htpy-subuniverse-connected-map : + (f g : subuniverse-connected-map K A B) → UU (l3 ⊔ l4) + htpy-subuniverse-connected-map f g = + map-subuniverse-connected-map K f ~ map-subuniverse-connected-map K g + + refl-htpy-subuniverse-connected-map : + (f : subuniverse-connected-map K A B) → htpy-subuniverse-connected-map f f + refl-htpy-subuniverse-connected-map f = refl-htpy + + abstract + is-torsorial-htpy-subuniverse-connected-map : + (f : subuniverse-connected-map K A B) → + is-torsorial (htpy-subuniverse-connected-map f) + is-torsorial-htpy-subuniverse-connected-map f = + is-torsorial-Eq-subtype + ( is-torsorial-htpy (map-subuniverse-connected-map K f)) + ( is-prop-is-subuniverse-connected-map K) + ( map-subuniverse-connected-map K f) + ( refl-htpy-subuniverse-connected-map f) + ( is-subuniverse-connected-map-subuniverse-connected-map K f) + + htpy-eq-subuniverse-connected-map : + (f g : subuniverse-connected-map K A B) → + f = g → htpy-subuniverse-connected-map f g + htpy-eq-subuniverse-connected-map f g H = htpy-eq (ap pr1 H) + + abstract + is-equiv-htpy-eq-subuniverse-connected-map : + (f g : subuniverse-connected-map K A B) → + is-equiv (htpy-eq-subuniverse-connected-map f g) + is-equiv-htpy-eq-subuniverse-connected-map f = + fundamental-theorem-id + ( is-torsorial-htpy-subuniverse-connected-map f) + ( htpy-eq-subuniverse-connected-map f) + + extensionality-subuniverse-connected-map : + (f g : subuniverse-connected-map K A B) → + (f = g) ≃ htpy-subuniverse-connected-map f g + pr1 (extensionality-subuniverse-connected-map f g) = + htpy-eq-subuniverse-connected-map f g + pr2 (extensionality-subuniverse-connected-map f g) = + is-equiv-htpy-eq-subuniverse-connected-map f g + + eq-htpy-subuniverse-connected-map : + (f g : subuniverse-connected-map K A B) → + htpy-subuniverse-connected-map f g → (f = g) + eq-htpy-subuniverse-connected-map f g = + map-inv-equiv (extensionality-subuniverse-connected-map f g) +``` + +### All maps are `Contr`-connected + +```agda +module _ + {l1 l2 l3 : Level} {A : UU l1} {B : UU l2} (f : A → B) + where + + is-Contr-connected-map : is-subuniverse-connected-map (is-contr-Prop {l3}) f + is-Contr-connected-map U = + is-equiv-is-contr + ( precomp-Π f (pr1 ∘ U)) + ( is-contr-Π (pr2 ∘ U)) + ( is-contr-Π (pr2 ∘ U ∘ f)) +``` + +### Equivalences are `K`-connected for any `K` + +```agda +module _ + {l1 l2 l3 l4 : Level} (K : subuniverse l1 l2) {A : UU l3} {B : UU l4} + where + + is-subuniverse-connected-map-is-equiv : + {f : A → B} → is-equiv f → is-subuniverse-connected-map K f + is-subuniverse-connected-map-is-equiv H U = + is-equiv-precomp-Π-is-equiv H (pr1 ∘ U) + + is-subuniverse-connected-map-equiv : + (e : A ≃ B) → is-subuniverse-connected-map K (map-equiv e) + is-subuniverse-connected-map-equiv e = + is-subuniverse-connected-map-is-equiv (is-equiv-map-equiv e) + + subuniverse-connected-map-equiv : + (A ≃ B) → subuniverse-connected-map K A B + subuniverse-connected-map-equiv e = + ( map-equiv e , is-subuniverse-connected-map-equiv e) +``` + +### `K`-connected maps are `K`-equivalences + +```agda +module _ + {l1 l2 l3 l4 : Level} (K : subuniverse l1 l2) + {A : UU l3} {B : UU l4} (f : A → B) + where + + is-subuniverse-equiv-is-subuniverse-connected-map : + is-subuniverse-connected-map K f → is-subuniverse-equiv K f + is-subuniverse-equiv-is-subuniverse-connected-map F U = F (λ _ → U) +``` + +### The composition of two `K`-connected maps is `K`-connected + +```agda +module _ + {l1 l2 l3 l4 l5 : Level} (K : subuniverse l1 l2) + {A : UU l3} {B : UU l4} {C : UU l5} + where + + is-subuniverse-connected-map-comp : + {g : B → C} {f : A → B} → + is-subuniverse-connected-map K g → + is-subuniverse-connected-map K f → + is-subuniverse-connected-map K (g ∘ f) + is-subuniverse-connected-map-comp {g} {f} G F U = + is-equiv-comp + ( precomp-Π f (pr1 ∘ U ∘ g)) + ( precomp-Π g (pr1 ∘ U)) + ( G U) + ( F (U ∘ g)) + + comp-subuniverse-connected-map : + subuniverse-connected-map K B C → + subuniverse-connected-map K A B → + subuniverse-connected-map K A C + pr1 (comp-subuniverse-connected-map g f) = + map-subuniverse-connected-map K g ∘ map-subuniverse-connected-map K f + pr2 (comp-subuniverse-connected-map g f) = + is-subuniverse-connected-map-comp + ( is-subuniverse-connected-map-subuniverse-connected-map K g) + ( is-subuniverse-connected-map-subuniverse-connected-map K f) +``` + +### Right cancellation of `K`-connected maps + +```agda +is-subuniverse-connected-map-left-factor : + {l1 l2 l3 l4 l5 : Level} (K : subuniverse l1 l2) + {A : UU l3} {B : UU l4} {C : UU l5} + {g : B → C} {h : A → B} → + is-subuniverse-connected-map K h → + is-subuniverse-connected-map K (g ∘ h) → + is-subuniverse-connected-map K g +is-subuniverse-connected-map-left-factor K {g = g} {h} H GH U = + is-equiv-right-factor + ( precomp-Π h (pr1 ∘ U ∘ g)) + ( precomp-Π g (pr1 ∘ U)) + ( H (U ∘ g)) + ( GH U) +``` + +### `K`-connected maps are closed under cobase change + +```agda +module _ + {l1 l2 l3 l4 l5 l6 : Level} (K : subuniverse l1 l2) + {S : UU l3} {A : UU l4} {B : UU l5} + (f : S → A) (g : S → B) {X : UU l6} (c : cocone f g X) + where + + is-subuniverse-connected-map-cobase-change' : + dependent-pullback-property-pushout f g c → + is-subuniverse-connected-map K g → + is-subuniverse-connected-map K (horizontal-map-cocone f g c) + is-subuniverse-connected-map-cobase-change' H G U = + is-equiv-vertical-map-is-pullback _ _ + ( cone-dependent-pullback-property-pushout f g c (pr1 ∘ U)) + ( G (U ∘ vertical-map-cocone f g c)) + ( H (pr1 ∘ U)) + + is-subuniverse-connected-map-cobase-change : + is-pushout f g c → + is-subuniverse-connected-map K g → + is-subuniverse-connected-map K (horizontal-map-cocone f g c) + is-subuniverse-connected-map-cobase-change H = + is-subuniverse-connected-map-cobase-change' + ( dependent-pullback-property-pushout-is-pushout f g c H) +``` + +### `K`-connected maps are closed under retracts of maps + +**Proof.** Given a retract of maps + +```text + i r + A' ------> A ------> A' + | | | + f'| I f R | f' + ∨ ∨ ∨ + B' ------> B ------> B' + i' r' +``` + +with higher coherence `α`, and a `K`-valued family `U` over `B'` there is by +functoriality an induced retract of dependent precomposition maps + +```text + Π(A'),(U∘f') <--- Π(A'),(U∘r'∘i'∘f) <--- Π(A),(U∘r'∘f) <--- Π(A'),(U∘f') + ∧ ∧ ∧ + | α* □ Π(I),(U∘r') | Π(R),U | + Π(f'),U | Π(f),(U∘r') | Π(f'),U + | | | + Π(B'),U <--------- Π(B'),(U∘r'∘i') <----- Π(B),(U∘r') <--- Π(B'),(U), +``` + +and since equivalences are closed under retracts of maps, if `f` is +`K`-connected then so is `f'`. ∎ + +> This remains to be formalized. + +The formalization below takes a shortcut via the fiber condition. + +```agda +module _ + {l1 l2 l3 l4 l5 l6 : Level} (K : subuniverse l1 l2) + {A : UU l3} {B : UU l4} {C : UU l5} {D : UU l6} + {f : A → B} {g : C → D} (R : f retract-of-map g) + where + + is-subuniverse-connected-map-retract-map' : + ((y : D) → is-subuniverse-connected K (fiber g y)) → + is-subuniverse-connected-map K f + is-subuniverse-connected-map-retract-map' H = + is-subuniverse-connected-map-is-subuniverse-connected-fibers K f + ( λ b → + is-subuniverse-connected-retract K + ( retract-fiber-retract-map f g R b) + ( H (map-codomain-inclusion-retract-map f g R b))) +``` + +### 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 l4 l5 : Level} (K : subuniverse l1 l2) + {A : UU l3} {B : A → UU l4} {C : A → UU l5} + (f : (x : A) → B x → C x) + where + + is-subuniverse-connected-map-tot-is-fiberwise-subuniverse-connected-map : + ((x : A) → is-subuniverse-connected-map K (f x)) → + is-subuniverse-connected-map K (tot f) + is-subuniverse-connected-map-tot-is-fiberwise-subuniverse-connected-map H U = + is-equiv-source-is-equiv-target-equiv-arrow + ( precomp-Π (tot f) (pr1 ∘ U)) + ( map-Π (λ i → precomp-Π (f i) (pr1 ∘ U ∘ (i ,_)))) + ( equiv-ev-pair , equiv-ev-pair , refl-htpy) + ( is-equiv-map-Π-is-fiberwise-equiv (λ i → H i (U ∘ (i ,_)))) +``` + +### Coproducts of `K`-connected maps + +```agda +module _ + {l1 l2 l3 l4 l5 l6 : Level} (K : subuniverse l1 l2) + {A : UU l3} {B : UU l4} {A' : UU l5} {B' : UU l6} + {f : A → B} {f' : A' → B'} + where + + is-subuniverse-connected-map-coproduct : + is-subuniverse-connected-map K f → + is-subuniverse-connected-map K f' → + is-subuniverse-connected-map K (map-coproduct f f') + is-subuniverse-connected-map-coproduct F F' U = + is-equiv-source-is-equiv-target-equiv-arrow + ( precomp-Π (map-coproduct f f') (pr1 ∘ U)) + ( map-product + ( precomp-Π f (pr1 ∘ U ∘ inl)) + ( precomp-Π f' (pr1 ∘ U ∘ inr))) + ( equiv-dependent-universal-property-coproduct + ( pr1 ∘ U) , + equiv-dependent-universal-property-coproduct + ( pr1 ∘ U ∘ map-coproduct f f') , + refl-htpy) + ( is-equiv-map-product _ _ (F (U ∘ inl)) (F' (U ∘ inr))) +``` + +### The map on dependent pair types induced by a `K`-connected map is a `K`-equivalence + +This requires the added assumption that `K` is closed under exponentiation by +arbitrary types. + +This is a generalization of Lemma 2.27 in {{#cite CORS20}}, since the unit map +of the $ΣK$-localization is a $ΣK$-equivalence, and $ΣK$-equivalences are in +particular $K$-connected. + +```agda +module _ + {l1 l2 l3 l4 : Level} (K : subuniverse l1 l2) + {A : UU l3} {B : UU l4} (f : subuniverse-connected-map K A B) + (P : B → UU l1) + where + + map-Σ-map-base-subuniverse-connected-map : + Σ A (P ∘ map-subuniverse-connected-map K f) → Σ B P + map-Σ-map-base-subuniverse-connected-map = + map-Σ-map-base (map-subuniverse-connected-map K f) P + + is-subuniverse-equiv-map-Σ-map-base-subuniverse-connected-map : + ((V : UU l1) (U : type-subuniverse K) → is-in-subuniverse K (V → pr1 U)) → + is-subuniverse-equiv K map-Σ-map-base-subuniverse-connected-map + is-subuniverse-equiv-map-Σ-map-base-subuniverse-connected-map H U = + is-equiv-source-is-equiv-target-equiv-arrow + ( precomp map-Σ-map-base-subuniverse-connected-map (pr1 U)) + ( precomp-Π (map-subuniverse-connected-map K f) (λ y → (b : P y) → pr1 U)) + ( equiv-ev-pair , equiv-ev-pair , refl-htpy) + ( is-subuniverse-connected-map-subuniverse-connected-map K f + ( λ y → ((P y → pr1 U) , H (P y) U))) +``` + +## References + +{{#bibliography}} diff --git a/src/orthogonal-factorization-systems/connected-types-at-subuniverses.lagda.md b/src/orthogonal-factorization-systems/connected-types-at-subuniverses.lagda.md new file mode 100644 index 0000000000..85b4d8156b --- /dev/null +++ b/src/orthogonal-factorization-systems/connected-types-at-subuniverses.lagda.md @@ -0,0 +1,290 @@ +# `K`-Connected types, with respect to a subuniverse `K` + +```agda +module orthogonal-factorization-systems.connected-types-at-subuniverses where +``` + +
Imports + +```agda +open import foundation.contractible-types +open import foundation.dependent-pair-types +open import foundation.diagonal-maps-of-types +open import foundation.equivalences +open import foundation.retracts-of-maps +open import foundation.retracts-of-types +open import foundation.subuniverses +open import foundation.unit-type +open import foundation.universal-property-unit-type +open import foundation.universe-levels + +open import foundation-core.contractible-maps +open import foundation-core.embeddings +open import foundation-core.fibers-of-maps +open import foundation-core.identity-types +open import foundation-core.propositions +open import foundation-core.subtypes + +open import orthogonal-factorization-systems.equivalences-at-subuniverses +``` + +
+ +## Idea + +Given a [subuniverse](foundation.subuniverses.md) `K`, a type `A` is said to be +{{#concept "`K`-connected" Disambiguation="type, with respect to a subuniverse" Agda=is-subuniverse-connected}} +if it satisfies the +{{#concept "universal property" Disambiguation="subuniverse connected types"}} +of `K`-connected types: + +For every `U` in `K`, the [diagonal map](foundation.diagonal-maps-of-types.md) + +```text + U → (A → U) +``` + +is an [equivalence](foundation-core.equivalences.md). + +Equivalently, a type is `K`-connected if + +1. Its [terminal projection map](foundation.unit-type.md) is a + `K`-[equivalence](orthogonal-factorization-systems.equivalences-at-subuniverses.md). +2. For every `U` in `K` and `u : A → U` there + [uniquely exists](foundation.uniqueness-quantification.md) an element `v : U` + and a [homotopy](foundation-core.homotopies.md) `const v ~ u`. I.e., every + function out of `A` into a `K`-type is uniquely constant. + +## Definitions + +### The predicate on types of being `K`-connected + +```agda +module _ + {l1 l2 l3 : Level} (K : subuniverse l1 l2) (A : UU l3) + where + + is-subuniverse-connected-Prop : Prop (lsuc l1 ⊔ l2 ⊔ l3) + is-subuniverse-connected-Prop = + Π-Prop + ( type-subuniverse K) + ( λ U → is-equiv-Prop (diagonal-exponential (pr1 U) A)) + + is-subuniverse-connected : UU (lsuc l1 ⊔ l2 ⊔ l3) + is-subuniverse-connected = + (U : type-subuniverse K) → is-equiv (diagonal-exponential (pr1 U) A) + + is-prop-is-subuniverse-connected : + is-prop is-subuniverse-connected + is-prop-is-subuniverse-connected = + is-prop-type-Prop is-subuniverse-connected-Prop +``` + +### The universe of `K`-connected types + +```agda +subuniverse-connected-type : + {l1 l2 : Level} (l3 : Level) (K : subuniverse l1 l2) → + UU (lsuc l1 ⊔ l2 ⊔ lsuc l3) +subuniverse-connected-type l3 K = + type-subtype (is-subuniverse-connected-Prop {l3 = l3} K) + +module _ + {l1 l2 l3 : Level} (K : subuniverse l1 l2) + where + + type-subuniverse-connected-type : subuniverse-connected-type l3 K → UU l3 + type-subuniverse-connected-type = + inclusion-subtype (is-subuniverse-connected-Prop K) + + is-subuniverse-connected-type-subuniverse-connected-type : + (A : subuniverse-connected-type l3 K) → + is-subuniverse-connected K (type-subuniverse-connected-type A) + is-subuniverse-connected-type-subuniverse-connected-type = + is-in-subtype-inclusion-subtype (is-subuniverse-connected-Prop K) + + emb-inclusion-subuniverse-connected-type : + subuniverse-connected-type l3 K ↪ UU l3 + emb-inclusion-subuniverse-connected-type = + emb-subtype (is-subuniverse-connected-Prop K) +``` + +### The constancy condition of `K`-connected types + +```agda +module _ + {l1 l2 l3 : Level} (K : subuniverse l1 l2) (A : UU l3) + where + + is-subuniverse-connected-const-condition : + UU (lsuc l1 ⊔ l2 ⊔ l3) + is-subuniverse-connected-const-condition = + (U : type-subuniverse K) (u : A → pr1 U) → + is-contr (Σ (pr1 U) (λ v → (x : A) → v = u x)) + + abstract + is-prop-is-subuniverse-connected-const-condition : + is-prop is-subuniverse-connected-const-condition + is-prop-is-subuniverse-connected-const-condition = + is-prop-Π (λ U → is-prop-Π (λ u → is-property-is-contr)) + + is-subuniverse-connected-const-condition-Prop : + Prop (lsuc l1 ⊔ l2 ⊔ l3) + is-subuniverse-connected-const-condition-Prop = + ( is-subuniverse-connected-const-condition , + is-prop-is-subuniverse-connected-const-condition) +``` + +## Properties + +### A type is `K`-connected if and only if the terminal map is a `K`-equivalence + +```agda +module _ + {l1 l2 l3 : Level} (K : subuniverse l1 l2) {A : UU l3} + where + + is-subuniverse-connected-is-subuniverse-equiv-terminal-map : + is-subuniverse-equiv K (terminal-map A) → + is-subuniverse-connected K A + is-subuniverse-connected-is-subuniverse-equiv-terminal-map H U = + is-equiv-diagonal-exponential-is-equiv-precomp-terminal-map (H U) + + is-subuniverse-equiv-terminal-map-is-subuniverse-connected : + is-subuniverse-connected K A → + is-subuniverse-equiv K (terminal-map A) + is-subuniverse-equiv-terminal-map-is-subuniverse-connected H U = + is-equiv-precomp-terminal-map-is-equiv-diagonal-exponential (H U) +``` + +### A type is `K`-connected if and only if it satisfies the constancy condition + +```agda +module _ + {l1 l2 l3 : Level} (K : subuniverse l1 l2) {A : UU l3} + where abstract + + is-subuniverse-connected-is-subuniverse-connected-const-condition : + is-subuniverse-connected-const-condition K A → + is-subuniverse-connected K A + is-subuniverse-connected-is-subuniverse-connected-const-condition H U = + is-equiv-is-contr-map + ( λ u → + is-contr-equiv + ( Σ (pr1 U) (λ v → (x : A) → v = u x)) + ( compute-fiber-diagonal-exponential u) + ( H U u)) + + is-subuniverse-connected-const-condition-is-subuniverse-connected : + is-subuniverse-connected K A → + is-subuniverse-connected-const-condition K A + is-subuniverse-connected-const-condition-is-subuniverse-connected H U u = + is-contr-equiv' + ( fiber (diagonal-exponential (pr1 U) A) u) + ( compute-fiber-diagonal-exponential u) + ( is-contr-map-is-equiv (H U) u) +``` + +### All types are `Contr`-connected + +```agda +module _ + {l1 l2 : Level} {A : UU l1} + where + + is-Contr-connected : is-subuniverse-connected (is-contr-Prop {l2}) A + is-Contr-connected U = is-equiv-diagonal-exponential-is-contr' (pr2 U) A +``` + +### Contractible types are `K`-connected + +```agda +module _ + {l1 l2 l3 : Level} (K : subuniverse l1 l2) {A : UU l3} + where + + is-subuniverse-connected-is-contr : + is-contr A → is-subuniverse-connected K A + is-subuniverse-connected-is-contr H U = + is-equiv-diagonal-exponential-is-contr H (pr1 U) +``` + +### `K`-connected types are closed under retracts + +```agda +module _ + {l1 l2 l3 l4 : Level} (K : subuniverse l1 l2) {A : UU l3} {B : UU l4} + where + + is-subuniverse-connected-retract : + A retract-of B → + is-subuniverse-connected K B → + is-subuniverse-connected K A + is-subuniverse-connected-retract R H U = + is-equiv-retract-map-is-equiv + ( diagonal-exponential (pr1 U) A) + ( diagonal-exponential (pr1 U) B) + ( retract-map-diagonal-exponential-retract id-retract R) + ( H U) +``` + +### `K`-connected types are closed under equivalences + +```agda +module _ + {l1 l2 l3 l4 : Level} (K : subuniverse l1 l2) {A : UU l3} {B : UU l4} + where + + is-subuniverse-connected-equiv : + A ≃ B → + is-subuniverse-connected K B → + is-subuniverse-connected K A + is-subuniverse-connected-equiv e = + is-subuniverse-connected-retract K (retract-equiv e) + + is-subuniverse-connected-equiv' : + A ≃ B → + is-subuniverse-connected K A → + is-subuniverse-connected K B + is-subuniverse-connected-equiv' e = + is-subuniverse-connected-retract K (retract-inv-equiv e) +``` + +### `K`-connected types are closed under `K`-equivalences + +```agda +module _ + {l1 l2 l3 l4 : Level} (K : subuniverse l1 l2) {A : UU l3} {B : UU l4} + where + + is-subuniverse-connected-is-subuniverse-equiv : + (f : A → B) → is-subuniverse-equiv K f → + is-subuniverse-connected K B → is-subuniverse-connected K A + is-subuniverse-connected-is-subuniverse-equiv f F H = + is-subuniverse-connected-is-subuniverse-equiv-terminal-map K + ( is-subuniverse-equiv-comp K (terminal-map B) f F + ( is-subuniverse-equiv-terminal-map-is-subuniverse-connected K H)) + + is-subuniverse-connected-is-subuniverse-equiv' : + (f : A → B) → is-subuniverse-equiv K f → + is-subuniverse-connected K A → is-subuniverse-connected K B + is-subuniverse-connected-is-subuniverse-equiv' f F H = + is-subuniverse-connected-is-subuniverse-equiv-terminal-map K + ( is-subuniverse-equiv-left-factor K (terminal-map B) f + ( is-subuniverse-equiv-terminal-map-is-subuniverse-connected K H) + ( F)) + + is-subuniverse-connected-subuniverse-equiv : + subuniverse-equiv K A B → + is-subuniverse-connected K B → + is-subuniverse-connected K A + is-subuniverse-connected-subuniverse-equiv (f , F) = + is-subuniverse-connected-is-subuniverse-equiv f F + + is-subuniverse-connected-subuniverse-equiv' : + subuniverse-equiv K A B → + is-subuniverse-connected K A → + is-subuniverse-connected K B + is-subuniverse-connected-subuniverse-equiv' (f , F) = + is-subuniverse-connected-is-subuniverse-equiv' f F +``` diff --git a/src/orthogonal-factorization-systems/equivalences-at-subuniverses.lagda.md b/src/orthogonal-factorization-systems/equivalences-at-subuniverses.lagda.md new file mode 100644 index 0000000000..79ab40f0f2 --- /dev/null +++ b/src/orthogonal-factorization-systems/equivalences-at-subuniverses.lagda.md @@ -0,0 +1,374 @@ +# `K`-Equivalences, with respect to a subuniverse `K` + +```agda +module orthogonal-factorization-systems.equivalences-at-subuniverses where +``` + +
Imports + +```agda +open import foundation.contractible-types +open import foundation.dependent-pair-types +open import foundation.equivalences +open import foundation.precomposition-functions +open import foundation.propositions +open import foundation.subuniverses +open import foundation.universal-property-equivalences +open import foundation.universe-levels + +open import foundation-core.contractible-maps +open import foundation-core.fibers-of-maps +open import foundation-core.function-types +open import foundation-core.homotopies +open import foundation-core.retractions +open import foundation-core.sections + +open import orthogonal-factorization-systems.extensions-maps +``` + +
+ +## Idea + +Given a [subuniverse](foundation.subuniverses.md) `K`, a map `f : A → B` is said +to be a +{{#concept "`K`-equivalence" Disambiguation="map of types, with respect to a subuniverse" Agda=is-subuniverse-equiv}} +if it satisfies the +{{#concept "universal property" Disambiguation="subuniverse connected map of types"}} +of `K`-equivalences: + +For every `K`-type `U`, the +[precomposition map](foundation-core.precomposition-functions.md) + +```text + - ∘ f : (B → U) → (A → U) +``` + +is an [equivalence](foundation-core.equivalences.md). + +Equivalently, a map `f : A → B` is a `K`-equivalence if + +1. For every `U` in `K` and every `u : A → U` has a + [unique](foundation-core.contractible-types.md) + [extension](orthogonal-factorization-systems.extensions-maps.md) along `f`. + I.e., the type of maps `u' : B → U` such that the following triangle + [commutes](foundation-core.commuting-triangles-of-maps.md) + ```text + A + | \ + f | \ u + | \ + ∨ u' ∨ + B ------> U + ``` + is contractible. + +## Definition + +### The predicate on maps of being `K`-equivalences + +```agda +module _ + {l1 l2 l3 l4 : Level} (K : subuniverse l1 l2) + {A : UU l3} {B : UU l4} (f : A → B) + where + + is-subuniverse-equiv : UU (lsuc l1 ⊔ l2 ⊔ l3 ⊔ l4) + is-subuniverse-equiv = + (U : type-subuniverse K) → is-equiv (precomp f (pr1 U)) + + is-prop-is-subuniverse-equiv : is-prop is-subuniverse-equiv + is-prop-is-subuniverse-equiv = + is-prop-Π (λ U → is-property-is-equiv (precomp f (pr1 U))) + + is-subuniverse-equiv-Prop : Prop (lsuc l1 ⊔ l2 ⊔ l3 ⊔ l4) + is-subuniverse-equiv-Prop = + ( is-subuniverse-equiv , is-prop-is-subuniverse-equiv) +``` + +### The type of `K`-equivalences + +```agda +subuniverse-equiv : + {l1 l2 l3 l4 : Level} (K : subuniverse l1 l2) → + UU l3 → UU l4 → UU (lsuc l1 ⊔ l2 ⊔ l3 ⊔ l4) +subuniverse-equiv K A B = Σ (A → B) (is-subuniverse-equiv K) + +module _ + {l1 l2 l3 l4 : Level} + (K : subuniverse l1 l2) {A : UU l3} {B : UU l4} + (f : subuniverse-equiv K A B) + where + + map-subuniverse-equiv : A → B + map-subuniverse-equiv = pr1 f + + is-subuniverse-equiv-subuniverse-equiv : + is-subuniverse-equiv K map-subuniverse-equiv + is-subuniverse-equiv-subuniverse-equiv = pr2 f +``` + +### The extension condition for `K`-equivalences + +```agda +module _ + {l1 l2 l3 l4 : Level} (K : subuniverse l1 l2) + {A : UU l3} {B : UU l4} (f : A → B) + where + + is-subuniverse-equiv-extension-condition : UU (lsuc l1 ⊔ l2 ⊔ l3 ⊔ l4) + is-subuniverse-equiv-extension-condition = + (U : type-subuniverse K) (u : A → pr1 U) → is-contr (extension-map f u) + + is-prop-is-subuniverse-equiv-extension-condition : + is-prop is-subuniverse-equiv-extension-condition + is-prop-is-subuniverse-equiv-extension-condition = + is-prop-Π (λ U → is-prop-Π (λ u → is-property-is-contr)) + + is-subuniverse-equiv-extension-condition-Prop : Prop (lsuc l1 ⊔ l2 ⊔ l3 ⊔ l4) + is-subuniverse-equiv-extension-condition-Prop = + ( is-subuniverse-equiv-extension-condition , + is-prop-is-subuniverse-equiv-extension-condition) +``` + +## Properties + +### A map is a `K`-equivalence if and only if it satisfies the extension condition + +A map `f : A → B` is a `K`-equivalence if and only if, for every `U` in `K` and +every map `u : A → U`, there is a unique extension of `u` along `f`. + +```agda +module _ + {l1 l2 l3 l4 : Level} (K : subuniverse l1 l2) + {A : UU l3} {B : UU l4} (f : A → B) + where abstract + + is-subuniverse-equiv-is-subuniverse-equiv-extension-condition : + is-subuniverse-equiv-extension-condition K f → + is-subuniverse-equiv K f + is-subuniverse-equiv-is-subuniverse-equiv-extension-condition H U = + is-equiv-is-contr-map + ( λ u → + is-contr-equiv + ( extension-map f u) + ( compute-extension-fiber-precomp f u) + ( H U u)) + + is-subuniverse-equiv-extension-condition-is-subuniverse-equiv : + is-subuniverse-equiv K f → + is-subuniverse-equiv-extension-condition K f + is-subuniverse-equiv-extension-condition-is-subuniverse-equiv H U u = + is-contr-equiv' + ( fiber (precomp f (pr1 U)) u) + ( compute-extension-fiber-precomp f u) + ( is-contr-map-is-equiv (H U) u) +``` + +### Equivalences are `K`-equivalences for all `K` + +```agda +module _ + {l1 l2 l3 l4 : Level} (K : subuniverse l1 l2) + {A : UU l3} {B : UU l4} (f : A → B) + where + + is-subuniverse-equiv-is-equiv : is-equiv f → is-subuniverse-equiv K f + is-subuniverse-equiv-is-equiv H U = is-equiv-precomp-is-equiv f H (pr1 U) +``` + +### The identity map is a `K`-equivalence for all `K` + +```agda +is-subuniverse-equiv-id : + {l1 l2 l3 : Level} (K : subuniverse l1 l2) {A : UU l3} → + is-subuniverse-equiv K (id' A) +is-subuniverse-equiv-id K = is-subuniverse-equiv-is-equiv K id is-equiv-id +``` + +### The `K`-equivalences are closed under homotopies + +```agda +module _ + {l1 l2 l3 l4 : Level} (K : subuniverse l1 l2) + {A : UU l3} {B : UU l4} {f g : A → B} + where + + is-subuniverse-equiv-htpy : + f ~ g → is-subuniverse-equiv K g → is-subuniverse-equiv K f + is-subuniverse-equiv-htpy H G U = + is-equiv-htpy (precomp g (pr1 U)) (htpy-precomp H (pr1 U)) (G U) + + is-subuniverse-equiv-htpy' : + f ~ g → is-subuniverse-equiv K f → is-subuniverse-equiv K g + is-subuniverse-equiv-htpy' H G U = + is-equiv-htpy' (precomp f (pr1 U)) (htpy-precomp H (pr1 U)) (G U) +``` + +### The `K`-equivalences are closed under composition + +```agda +module _ + {l1 l2 l3 l4 l5 : Level} (K : subuniverse l1 l2) + {A : UU l3} {B : UU l4} {C : UU l5} + where + + is-subuniverse-equiv-comp : + (g : B → C) (f : A → B) → + is-subuniverse-equiv K f → + is-subuniverse-equiv K g → + is-subuniverse-equiv K (g ∘ f) + is-subuniverse-equiv-comp g f F G U = + is-equiv-comp (precomp f (pr1 U)) (precomp g (pr1 U)) (G U) (F U) + + subuniverse-equiv-comp : + subuniverse-equiv K B C → + subuniverse-equiv K A B → + subuniverse-equiv K A C + pr1 (subuniverse-equiv-comp g f) = + map-subuniverse-equiv K g ∘ map-subuniverse-equiv K f + pr2 (subuniverse-equiv-comp g f) = + is-subuniverse-equiv-comp + ( map-subuniverse-equiv K g) + ( map-subuniverse-equiv K f) + ( is-subuniverse-equiv-subuniverse-equiv K f) + ( is-subuniverse-equiv-subuniverse-equiv K g) +``` + +### The class of `K`-equivalences has the left and right cancellation property + +```agda +module _ + {l1 l2 l3 l4 l5 : Level} (K : subuniverse l1 l2) + {A : UU l3} {B : UU l4} {C : UU l5} + (g : B → C) (f : A → B) (GF : is-subuniverse-equiv K (g ∘ f)) + where + + is-subuniverse-equiv-left-factor : + is-subuniverse-equiv K f → is-subuniverse-equiv K g + is-subuniverse-equiv-left-factor F U = + is-equiv-right-factor (precomp f (pr1 U)) (precomp g (pr1 U)) (F U) (GF U) + + is-subuniverse-equiv-right-factor : + is-subuniverse-equiv K g → is-subuniverse-equiv K f + is-subuniverse-equiv-right-factor G U = + is-equiv-left-factor (precomp f (pr1 U)) (precomp g (pr1 U)) (GF U) (G U) +``` + +### The class of `K`-equivalences satisfies the 3-for-2 property + +```agda +module _ + {l1 l2 l3 l4 l5 : Level} (K : subuniverse l1 l2) + {A : UU l3} {B : UU l4} {X : UU l5} + (f : A → X) (g : B → X) (h : A → B) (p : f ~ g ∘ h) + where + + is-subuniverse-equiv-top-map-triangle : + is-subuniverse-equiv K g → + is-subuniverse-equiv K f → + is-subuniverse-equiv K h + is-subuniverse-equiv-top-map-triangle G F = + is-subuniverse-equiv-right-factor K g h + ( is-subuniverse-equiv-htpy' K p F) + ( G) + + is-subuniverse-equiv-right-map-triangle : + is-subuniverse-equiv K f → + is-subuniverse-equiv K h → + is-subuniverse-equiv K g + is-subuniverse-equiv-right-map-triangle F = + is-subuniverse-equiv-left-factor K g h (is-subuniverse-equiv-htpy' K p F) + + is-subuniverse-equiv-left-map-triangle : + is-subuniverse-equiv K h → + is-subuniverse-equiv K g → + is-subuniverse-equiv K f + is-subuniverse-equiv-left-map-triangle H G = + is-subuniverse-equiv-htpy K p (is-subuniverse-equiv-comp K g h H G) +``` + +### Sections of `K`-equivalences are `K`-equivalences + +```agda +module _ + {l1 l2 l3 l4 : Level} (K : subuniverse l1 l2) + {A : UU l3} {B : UU l4} {f : A → B} + where + + is-subuniverse-equiv-map-section : + (s : section f) → + is-subuniverse-equiv K f → + is-subuniverse-equiv K (map-section f s) + is-subuniverse-equiv-map-section (s , h) = + is-subuniverse-equiv-right-factor K f s + ( is-subuniverse-equiv-is-equiv K (f ∘ s) (is-equiv-htpy-id h)) +``` + +### Retractions of `K`-equivalences are `K`-equivalences + +```agda +module _ + {l1 l2 l3 l4 : Level} (K : subuniverse l1 l2) + {A : UU l3} {B : UU l4} {f : A → B} + where + + is-subuniverse-equiv-map-retraction : + (r : retraction f) → + is-subuniverse-equiv K f → + is-subuniverse-equiv K (map-retraction f r) + is-subuniverse-equiv-map-retraction (r , h) = + is-subuniverse-equiv-left-factor K r f + ( is-subuniverse-equiv-is-equiv K (r ∘ f) (is-equiv-htpy-id h)) +``` + +### Composing `K`-equivalences with equivalences + +```agda +module _ + {l1 l2 l3 l4 l5 : Level} (K : subuniverse l1 l2) + {A : UU l3} {B : UU l4} {C : UU l5} + where + + is-subuniverse-equiv-is-equiv-is-subuniverse-equiv : + (g : B → C) (f : A → B) → + is-subuniverse-equiv K g → + is-equiv f → + is-subuniverse-equiv K (g ∘ f) + is-subuniverse-equiv-is-equiv-is-subuniverse-equiv g f eg ef = + is-subuniverse-equiv-comp K g f + ( is-subuniverse-equiv-is-equiv K f ef) + ( eg) + + is-subuniverse-equiv-is-subuniverse-equiv-is-equiv : + (g : B → C) (f : A → B) → + is-equiv g → + is-subuniverse-equiv K f → + is-subuniverse-equiv K (g ∘ f) + is-subuniverse-equiv-is-subuniverse-equiv-is-equiv g f eg ef = + is-subuniverse-equiv-comp K g f + ( ef) + ( is-subuniverse-equiv-is-equiv K g eg) + + is-subuniverse-equiv-equiv-is-subuniverse-equiv : + (g : B → C) (f : A ≃ B) → + is-subuniverse-equiv K g → + is-subuniverse-equiv K (g ∘ map-equiv f) + is-subuniverse-equiv-equiv-is-subuniverse-equiv g (f , ef) eg = + is-subuniverse-equiv-is-equiv-is-subuniverse-equiv g f eg ef + + is-subuniverse-equiv-is-subuniverse-equiv-equiv : + (g : B ≃ C) (f : A → B) → + is-subuniverse-equiv K f → + is-subuniverse-equiv K (map-equiv g ∘ f) + is-subuniverse-equiv-is-subuniverse-equiv-equiv (g , eg) f ef = + is-subuniverse-equiv-is-subuniverse-equiv-is-equiv g f eg ef +``` + +## References + +- The notion of `K`-equivalence is a generalization of the notion of + `L`-equivalence, where `L` is a reflective subuniverse. These were studied in + {{#cite CORS20}}. + +{{#bibliography}} diff --git a/src/orthogonal-factorization-systems/localizations-at-maps.lagda.md b/src/orthogonal-factorization-systems/localizations-at-maps.lagda.md index 1144d685d4..416c112fd3 100644 --- a/src/orthogonal-factorization-systems/localizations-at-maps.lagda.md +++ b/src/orthogonal-factorization-systems/localizations-at-maps.lagda.md @@ -21,7 +21,7 @@ open import orthogonal-factorization-systems.types-local-at-maps Let `f` be a map of type `A → B` and let `X` be a type. The **localization** of `X` at `f`, or **`f`-localization**, is an -`f`[-local](orthogonal-factorization-systems.types-local-at-maps.md) type `Y` +`f`-[local](orthogonal-factorization-systems.types-local-at-maps.md) type `Y` together with a map `η : X → Y` with the property that every type that is `f`-local is also `η`-local. @@ -81,8 +81,8 @@ module _ pr1 is-localization-Y pr1 (pr2 (is-subuniverse-localization-is-localization is-localization-Y)) = η pr2 (pr2 (is-subuniverse-localization-is-localization is-localization-Y)) - Z is-local-Z = - pr2 is-localization-Y Z is-local-Z + (Z , is-local-Z) = + pr2 is-localization-Y Z is-local-Z ``` It remains to construct a converse. diff --git a/src/orthogonal-factorization-systems/localizations-at-subuniverses.lagda.md b/src/orthogonal-factorization-systems/localizations-at-subuniverses.lagda.md index c12ced2306..542ea55aa3 100644 --- a/src/orthogonal-factorization-systems/localizations-at-subuniverses.lagda.md +++ b/src/orthogonal-factorization-systems/localizations-at-subuniverses.lagda.md @@ -12,6 +12,7 @@ open import foundation.dependent-pair-types open import foundation.subuniverses open import foundation.universe-levels +open import orthogonal-factorization-systems.equivalences-at-subuniverses open import orthogonal-factorization-systems.types-local-at-maps ``` @@ -20,19 +21,30 @@ open import orthogonal-factorization-systems.types-local-at-maps ## Idea Let `P` be a [subuniverse](foundation.subuniverses.md). Given a type `X`, its -**localization** at `P`, or **`P`-localization**, is a type `Y` in `P` and a map -`η : X → Y` such that every type in `P` is -`η`[-local](orthogonal-factorization-systems.types-local-at-maps.md). I.e., for -every `Z` in `P`, the [precomposition map](foundation-core.function-types.md) +{{#concept "localization" Disambiguation="of a type at a subuniverse" Agda=subuniverse-localization}} +at `P`, or **`P`-localization**, is a type `Y` in `P` and a `P`-equivalence +`η : X → Y`, i.e., a map such that for every `Z` in `P` the +[precomposition map](foundation-core.function-types.md) ```text - ∘ η : (Y → Z) → (X → Z) ``` -is an [equivalence](foundation-core.equivalences.md). +is an [equivalence](foundation-core.equivalences.md). In other words, every type +in `P` is `η`-[local](orthogonal-factorization-systems.types-local-at-maps.md). ## Definition +### The predicate on a map of being a localization at a subuniverse + +```agda +is-subuniverse-localization-map : + {l1 l2 lP : Level} (P : subuniverse l1 lP) {A : UU l2} {PA : UU l1} + (η : A → PA) → UU (lsuc l1 ⊔ l2 ⊔ lP) +is-subuniverse-localization-map P {A} {PA} η = + is-in-subuniverse P PA × is-subuniverse-equiv P η +``` + ### The predicate of being a localization at a subuniverse ```agda @@ -40,9 +52,7 @@ is-subuniverse-localization : {l1 l2 lP : Level} (P : subuniverse l1 lP) → UU l2 → UU l1 → UU (lsuc l1 ⊔ l2 ⊔ lP) is-subuniverse-localization {l1} {l2} P X Y = - ( is-in-subuniverse P Y) × - ( Σ ( X → Y) - ( λ η → (Z : UU l1) → is-in-subuniverse P Z → is-local η Z)) + (is-in-subuniverse P Y) × (subuniverse-equiv P X Y) ``` ```agda @@ -58,8 +68,7 @@ module _ unit-is-subuniverse-localization = pr1 (pr2 is-localization-Y) is-local-at-unit-is-in-subuniverse-is-subuniverse-localization : - (Z : UU l1) → is-in-subuniverse P Z → - is-local unit-is-subuniverse-localization Z + (Z : type-subuniverse P) → is-local unit-is-subuniverse-localization (pr1 Z) is-local-at-unit-is-in-subuniverse-is-subuniverse-localization = pr2 (pr2 is-localization-Y) ``` @@ -91,15 +100,19 @@ module _ is-in-subuniverse-is-subuniverse-localization P ( is-subuniverse-localization-subuniverse-localization) + type-subuniverse-subuniverse-localization : type-subuniverse P + type-subuniverse-subuniverse-localization = + ( type-subuniverse-localization , + is-in-subuniverse-subuniverse-localization) + unit-subuniverse-localization : X → type-subuniverse-localization unit-subuniverse-localization = unit-is-subuniverse-localization P ( is-subuniverse-localization-subuniverse-localization) - is-local-at-unit-is-in-subuniverse-subuniverse-localization : - (Z : UU l1) → - is-in-subuniverse P Z → is-local unit-subuniverse-localization Z - is-local-at-unit-is-in-subuniverse-subuniverse-localization = + is-subuniverse-equiv-unit-subuniverse-localization : + is-subuniverse-equiv P unit-subuniverse-localization + is-subuniverse-equiv-unit-subuniverse-localization = is-local-at-unit-is-in-subuniverse-is-subuniverse-localization P ( is-subuniverse-localization-subuniverse-localization) ``` diff --git a/src/orthogonal-factorization-systems/reflective-subuniverses.lagda.md b/src/orthogonal-factorization-systems/reflective-subuniverses.lagda.md index 41a30148b0..f00277ed1d 100644 --- a/src/orthogonal-factorization-systems/reflective-subuniverses.lagda.md +++ b/src/orthogonal-factorization-systems/reflective-subuniverses.lagda.md @@ -167,7 +167,7 @@ module _ pr1 (pr2 (pr2 (has-all-localizations-is-reflective-subuniverse A))) = unit-is-reflective-subuniverse 𝒫 is-reflective-𝒫 pr2 (pr2 (pr2 (has-all-localizations-is-reflective-subuniverse A))) - X is-in-subuniverse-X = + ( X , is-in-subuniverse-X) = is-local-is-in-subuniverse-is-reflective-subuniverse 𝒫 is-reflective-𝒫 X A is-in-subuniverse-X @@ -186,8 +186,9 @@ module _ is-in-subuniverse-subuniverse-localization 𝒫 (L A) pr2 (pr2 (pr2 is-reflective-has-all-localizations-subuniverse)) A B is-in-subuniverse-A = - is-local-at-unit-is-in-subuniverse-subuniverse-localization - 𝒫 (L B) A is-in-subuniverse-A + is-subuniverse-equiv-unit-subuniverse-localization 𝒫 + ( L B) + ( A , is-in-subuniverse-A) ``` ## Recursion for reflective subuniverses diff --git a/src/orthogonal-factorization-systems/types-local-at-maps.lagda.md b/src/orthogonal-factorization-systems/types-local-at-maps.lagda.md index e84d837cd0..61cd3a03c0 100644 --- a/src/orthogonal-factorization-systems/types-local-at-maps.lagda.md +++ b/src/orthogonal-factorization-systems/types-local-at-maps.lagda.md @@ -14,6 +14,7 @@ open import foundation.contractible-maps open import foundation.contractible-types open import foundation.dependent-pair-types open import foundation.dependent-universal-property-equivalences +open import foundation.embeddings open import foundation.empty-types open import foundation.equivalences open import foundation.families-of-equivalences @@ -28,6 +29,7 @@ open import foundation.logical-equivalences open import foundation.postcomposition-functions open import foundation.precomposition-dependent-functions open import foundation.precomposition-functions +open import foundation.propositional-maps open import foundation.propositions open import foundation.retractions open import foundation.retracts-of-maps @@ -312,32 +314,42 @@ module _ ### If the domain and codomain of `f` is `f`-local, then `f` is an equivalence +More generally, this is true as soon as the precomposition map of `f` has a +section at `X` and is an embedding at `Y`. + ```agda module _ {l1 l2 : Level} {X : UU l1} {Y : UU l2} (f : X → Y) where - section-is-local-domains' : section (precomp f X) → is-local f Y → section f - pr1 (section-is-local-domains' section-precomp-X is-local-Y) = - pr1 section-precomp-X id - pr2 (section-is-local-domains' section-precomp-X is-local-Y) = + section-is-epi-at-codomain-section-precomp-domain : + section (precomp f X) → is-emb (precomp f Y) → section f + pr1 (section-is-epi-at-codomain-section-precomp-domain sX _) = + pr1 sX id + pr2 (section-is-epi-at-codomain-section-precomp-domain sX eY) = htpy-eq ( ap ( pr1) - { ( f ∘ pr1 (section-is-local-domains' section-precomp-X is-local-Y)) , - ( ap (postcomp X f) (pr2 section-precomp-X id))} + { f ∘ pr1 sX id , ap (postcomp X f) (pr2 sX id)} { id , refl} - ( eq-is-contr (is-contr-map-is-equiv is-local-Y f))) + ( eq-is-prop (is-prop-map-is-emb eY f))) + + section-is-local-at-codomain-section-precomp-domain : + section (precomp f X) → is-local f Y → section f + section-is-local-at-codomain-section-precomp-domain sX lY = + section-is-epi-at-codomain-section-precomp-domain sX (is-emb-is-equiv lY) - is-equiv-is-local-domains' : section (precomp f X) → is-local f Y → is-equiv f - pr1 (is-equiv-is-local-domains' section-precomp-X is-local-Y) = - section-is-local-domains' section-precomp-X is-local-Y - pr2 (is-equiv-is-local-domains' section-precomp-X is-local-Y) = - retraction-map-section-precomp f section-precomp-X + is-equiv-is-epi-at-codomain-section-precomp-domain : + section (precomp f X) → is-emb (precomp f Y) → is-equiv f + is-equiv-is-epi-at-codomain-section-precomp-domain sX eY = + ( section-is-epi-at-codomain-section-precomp-domain sX eY , + retraction-map-section-precomp f sX) is-equiv-is-local-domains : is-local f X → is-local f Y → is-equiv f - is-equiv-is-local-domains is-local-X = - is-equiv-is-local-domains' (pr1 is-local-X) + is-equiv-is-local-domains lX lY = + is-equiv-is-epi-at-codomain-section-precomp-domain + ( section-is-equiv lX) + ( is-emb-is-equiv lY) ``` ### If `f` has a retraction and the codomain of `f` is `f`-local, then `f` is an equivalence @@ -350,7 +362,7 @@ module _ is-equiv-retraction-is-local-codomain : retraction f → is-local f Y → is-equiv f is-equiv-retraction-is-local-codomain r is-local-Y = - section-is-local-domains' f + section-is-local-at-codomain-section-precomp-domain f ( section-precomp-retraction-map f r) ( is-local-Y) , r