diff --git a/src/foundation/surjective-maps.lagda.md b/src/foundation/surjective-maps.lagda.md
index 0f9dde78f7..af5aa60f28 100644
--- a/src/foundation/surjective-maps.lagda.md
+++ b/src/foundation/surjective-maps.lagda.md
@@ -52,7 +52,9 @@ open import foundation-core.torsorial-type-families
open import foundation-core.truncated-maps
open import foundation-core.truncation-levels
+open import orthogonal-factorization-systems.equality-extensions-maps
open import orthogonal-factorization-systems.extensions-maps
+open import orthogonal-factorization-systems.postcomposition-extensions-maps
```
@@ -831,8 +833,8 @@ module _
( g ∘ i)
( postcomp-extension f i g (j , N))
( h , L)
- ( M)
- ( λ a →
+ ( M ,
+ λ a →
( ap
( concat' (g (i a)) (M (f a)))
( is-section-map-inv-is-equiv
diff --git a/src/orthogonal-factorization-systems.lagda.md b/src/orthogonal-factorization-systems.lagda.md
index e2a8bf7286..e412d0e8ef 100644
--- a/src/orthogonal-factorization-systems.lagda.md
+++ b/src/orthogonal-factorization-systems.lagda.md
@@ -16,6 +16,8 @@ open import orthogonal-factorization-systems.closed-modalities 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-maps 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
open import orthogonal-factorization-systems.extensions-maps public
@@ -56,6 +58,7 @@ open import orthogonal-factorization-systems.null-types public
open import orthogonal-factorization-systems.open-modalities public
open import orthogonal-factorization-systems.orthogonal-factorization-systems public
open import orthogonal-factorization-systems.orthogonal-maps public
+open import orthogonal-factorization-systems.postcomposition-extensions-maps public
open import orthogonal-factorization-systems.precomposition-lifts-families-of-elements public
open import orthogonal-factorization-systems.pullback-hom public
open import orthogonal-factorization-systems.raise-modalities public
diff --git a/src/orthogonal-factorization-systems/equality-extensions-maps.lagda.md b/src/orthogonal-factorization-systems/equality-extensions-maps.lagda.md
new file mode 100644
index 0000000000..fca5f920a3
--- /dev/null
+++ b/src/orthogonal-factorization-systems/equality-extensions-maps.lagda.md
@@ -0,0 +1,189 @@
+# Equality of extensions of maps
+
+```agda
+module orthogonal-factorization-systems.equality-extensions-maps where
+```
+
+Imports
+
+```agda
+open import foundation.dependent-pair-types
+open import foundation.equivalences
+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.structure-identity-principle
+open import foundation.universe-levels
+open import foundation.whiskering-homotopies-composition
+
+open import foundation-core.torsorial-type-families
+
+open import orthogonal-factorization-systems.extensions-dependent-maps
+```
+
+
+
+## Idea
+
+We characterize equality of
+[extensions](orthogonal-factorization-systems.extensions-maps.md) of
+([dependent](orthogonal-factorization-systems.extensions-dependent-maps.md))
+maps.
+
+On this page we conflate extensions of dependent maps and extensions of
+nondependent maps, as the characterization of equality coincides for the two
+notions.
+
+## Definition
+
+### Homotopies of extensions
+
+```agda
+module _
+ {l1 l2 l3 : Level} {A : UU l1} {B : UU l2} (i : A → B)
+ {P : B → UU l3} (f : (x : A) → P (i x))
+ where
+
+ coherence-htpy-extension :
+ (e e' : extension-dependent-type i P f) →
+ map-extension-dependent-type e ~ map-extension-dependent-type e' →
+ UU (l1 ⊔ l3)
+ coherence-htpy-extension e e' K =
+ ( is-extension-map-extension-dependent-type e ∙h (K ·r i)) ~
+ ( is-extension-map-extension-dependent-type e')
+
+ htpy-extension : (e e' : extension-dependent-type i P f) → UU (l1 ⊔ l2 ⊔ l3)
+ htpy-extension e e' =
+ Σ ( map-extension-dependent-type e ~ map-extension-dependent-type e')
+ ( coherence-htpy-extension e e')
+
+ refl-htpy-extension :
+ (e : extension-dependent-type i P f) → htpy-extension e e
+ pr1 (refl-htpy-extension e) = refl-htpy
+ pr2 (refl-htpy-extension e) = right-unit-htpy
+```
+
+### Homotopies of extensions with homotopies going the other way
+
+```agda
+module _
+ {l1 l2 l3 : Level} {A : UU l1} {B : UU l2} (i : A → B)
+ {P : B → UU l3} (f : (x : A) → P (i x))
+ where
+
+ coherence-htpy-extension' :
+ (e e' : extension-dependent-type' i P f) →
+ map-extension-dependent-type' e ~ map-extension-dependent-type' e' →
+ UU (l1 ⊔ l3)
+ coherence-htpy-extension' e e' K =
+ ( is-extension-map-extension-dependent-type' e) ~
+ ( K ·r i ∙h is-extension-map-extension-dependent-type' e')
+
+ htpy-extension' :
+ (e e' : extension-dependent-type' i P f) → UU (l1 ⊔ l2 ⊔ l3)
+ htpy-extension' e e' =
+ Σ ( map-extension-dependent-type' e ~ map-extension-dependent-type' e')
+ ( coherence-htpy-extension' e e')
+
+ refl-htpy-extension' :
+ (e : extension-dependent-type' i P f) → htpy-extension' e e
+ pr1 (refl-htpy-extension' e) = refl-htpy
+ pr2 (refl-htpy-extension' e) = refl-htpy
+```
+
+## Properties
+
+### Homotopies characterize equality
+
+```agda
+module _
+ {l1 l2 l3 : Level} {A : UU l1} {B : UU l2} (i : A → B)
+ {P : B → UU l3} (f : (x : A) → P (i x))
+ where
+
+ htpy-eq-extension :
+ (e e' : extension-dependent-type i P f) → e = e' → htpy-extension i f e e'
+ htpy-eq-extension e .e refl = refl-htpy-extension i f e
+
+ abstract
+ is-torsorial-htpy-extension :
+ (e : extension-dependent-type i P f) → is-torsorial (htpy-extension i f e)
+ is-torsorial-htpy-extension e =
+ is-torsorial-Eq-structure
+ ( is-torsorial-htpy (map-extension-dependent-type e))
+ ( map-extension-dependent-type e , refl-htpy)
+ ( is-torsorial-htpy
+ ( is-extension-map-extension-dependent-type e ∙h
+ refl-htpy))
+
+ abstract
+ is-equiv-htpy-eq-extension :
+ (e e' : extension-dependent-type i P f) →
+ is-equiv (htpy-eq-extension e e')
+ is-equiv-htpy-eq-extension e =
+ fundamental-theorem-id
+ ( is-torsorial-htpy-extension e)
+ ( htpy-eq-extension e)
+
+ extensionality-extension :
+ (e e' : extension-dependent-type i P f) →
+ (e = e') ≃ htpy-extension i f e e'
+ pr1 (extensionality-extension e e') = htpy-eq-extension e e'
+ pr2 (extensionality-extension e e') = is-equiv-htpy-eq-extension e e'
+
+ eq-htpy-extension :
+ (e e' : extension-dependent-type i P f) →
+ htpy-extension i f e e' → e = e'
+ eq-htpy-extension e e' =
+ map-inv-equiv (extensionality-extension e e')
+```
+
+### Characterizing equality of extensions of dependent maps with homotopies going the other way
+
+```agda
+module _
+ {l1 l2 l3 : Level} {A : UU l1} {B : UU l2} (i : A → B)
+ {P : B → UU l3} (f : (x : A) → P (i x))
+ where
+
+ htpy-eq-extension' :
+ (e e' : extension-dependent-type' i P f) →
+ e = e' → htpy-extension' i f e e'
+ htpy-eq-extension' e .e refl =
+ refl-htpy-extension' i f e
+
+ abstract
+ is-torsorial-htpy-extension' :
+ (e : extension-dependent-type' i P f) →
+ is-torsorial (htpy-extension' i f e)
+ is-torsorial-htpy-extension' e =
+ is-torsorial-Eq-structure
+ ( is-torsorial-htpy (map-extension-dependent-type' e))
+ ( map-extension-dependent-type' e , refl-htpy)
+ ( is-torsorial-htpy
+ ( is-extension-map-extension-dependent-type' e))
+
+ abstract
+ is-equiv-htpy-eq-extension' :
+ (e e' : extension-dependent-type' i P f) →
+ is-equiv (htpy-eq-extension' e e')
+ is-equiv-htpy-eq-extension' e =
+ fundamental-theorem-id
+ ( is-torsorial-htpy-extension' e)
+ ( htpy-eq-extension' e)
+
+ extensionality-extension' :
+ (e e' : extension-dependent-type' i P f) →
+ (e = e') ≃ (htpy-extension' i f e e')
+ pr1 (extensionality-extension' e e') =
+ htpy-eq-extension' e e'
+ pr2 (extensionality-extension' e e') =
+ is-equiv-htpy-eq-extension' e e'
+
+ eq-htpy-extension' :
+ (e e' : extension-dependent-type' i P f) →
+ htpy-extension' i f e e' → e = e'
+ eq-htpy-extension' e e' =
+ map-inv-equiv (extensionality-extension' e e')
+```
diff --git a/src/orthogonal-factorization-systems/extensions-dependent-maps.lagda.md b/src/orthogonal-factorization-systems/extensions-dependent-maps.lagda.md
new file mode 100644
index 0000000000..4c827b9f7c
--- /dev/null
+++ b/src/orthogonal-factorization-systems/extensions-dependent-maps.lagda.md
@@ -0,0 +1,319 @@
+# Extensions of dependent maps
+
+```agda
+module orthogonal-factorization-systems.extensions-dependent-maps where
+```
+
+Imports
+
+```agda
+open import foundation.action-on-identifications-dependent-functions
+open import foundation.action-on-identifications-functions
+open import foundation.contractible-types
+open import foundation.dependent-pair-types
+open import foundation.equivalences
+open import foundation.function-types
+open import foundation.homotopies
+open import foundation.homotopy-induction
+open import foundation.identity-types
+open import foundation.propositions
+open import foundation.sets
+open import foundation.transport-along-identifications
+open import foundation.truncated-types
+open import foundation.truncation-levels
+open import foundation.type-arithmetic-dependent-pair-types
+open import foundation.universe-levels
+```
+
+
+
+## Idea
+
+An
+{{#concept "extension" Disambiguation="of a dependent map along a map, types" Agda=extension-dependent-type}}
+of a dependent map `f : (x : A) → P (i x)` along a map `i : A → B` is a map
+`g : (y : B) → P y` such that `g` restricts along `i` to `f`.
+
+```text
+ A
+ | \
+ i | \ f
+ | \
+ ∨ g ∨
+ b ∈ B -----> P b
+```
+
+## Definition
+
+### Extensions of dependent maps
+
+```agda
+module _
+ {l1 l2 l3 : Level} {A : UU l1} {B : UU l2} (i : A → B)
+ where
+
+ is-extension-dependent-type :
+ {P : B → UU l3} →
+ ((x : A) → P (i x)) → ((y : B) → P y) → UU (l1 ⊔ l3)
+ is-extension-dependent-type f g = (f ~ g ∘ i)
+
+ extension-dependent-type :
+ (P : B → UU l3) →
+ ((x : A) → P (i x)) → UU (l1 ⊔ l2 ⊔ l3)
+ extension-dependent-type P f =
+ Σ ((y : B) → P y) (is-extension-dependent-type f)
+
+ total-extension-dependent-type : (P : B → UU l3) → UU (l1 ⊔ l2 ⊔ l3)
+ total-extension-dependent-type P =
+ Σ ((x : A) → P (i x)) (extension-dependent-type P)
+
+module _
+ {l1 l2 l3 : Level} {A : UU l1} {B : UU l2} {i : A → B}
+ {P : B → UU l3} {f : (x : A) → P (i x)}
+ where
+
+ map-extension-dependent-type : extension-dependent-type i P f → (y : B) → P y
+ map-extension-dependent-type = pr1
+
+ is-extension-map-extension-dependent-type :
+ (E : extension-dependent-type i P f) →
+ is-extension-dependent-type i f (map-extension-dependent-type E)
+ is-extension-map-extension-dependent-type = pr2
+```
+
+### Extensions of dependent maps with homotopies going the other way
+
+```agda
+module _
+ {l1 l2 l3 : Level} {A : UU l1} {B : UU l2} (i : A → B)
+ where
+
+ is-extension-dependent-type' :
+ {P : B → UU l3} →
+ ((x : A) → P (i x)) → ((y : B) → P y) → UU (l1 ⊔ l3)
+ is-extension-dependent-type' f g = (g ∘ i ~ f)
+
+ extension-dependent-type' :
+ (P : B → UU l3) →
+ ((x : A) → P (i x)) → UU (l1 ⊔ l2 ⊔ l3)
+ extension-dependent-type' P f =
+ Σ ((y : B) → P y) (is-extension-dependent-type' f)
+
+ total-extension-dependent-type' : (P : B → UU l3) → UU (l1 ⊔ l2 ⊔ l3)
+ total-extension-dependent-type' P =
+ Σ ((x : A) → P (i x)) (extension-dependent-type' P)
+
+module _
+ {l1 l2 l3 : Level} {A : UU l1} {B : UU l2} {i : A → B}
+ {P : B → UU l3} {f : (x : A) → P (i x)}
+ where
+
+ map-extension-dependent-type' :
+ extension-dependent-type' i P f → (y : B) → P y
+ map-extension-dependent-type' = pr1
+
+ is-extension-map-extension-dependent-type' :
+ (E : extension-dependent-type' i P f) →
+ is-extension-dependent-type' i f (map-extension-dependent-type' E)
+ is-extension-map-extension-dependent-type' = pr2
+```
+
+## Operations
+
+### Vertical composition of extensions of dependent maps
+
+```text
+ A
+ | \
+ i | \ f
+ | \
+ ∨ g ∨
+ B ------> P
+ | ∧
+ j | /
+ | / h
+ ∨ /
+ C
+```
+
+```agda
+module _
+ {l1 l2 l3 l4 : Level} {A : UU l1} {B : UU l2} {C : UU l3} {P : C → UU l4}
+ {i : A → B} {j : B → C}
+ {f : (x : A) → P (j (i x))} {g : (x : B) → P (j x)} {h : (x : C) → P x}
+ where
+
+ is-extension-dependent-type-comp-vertical :
+ is-extension-dependent-type j g h →
+ is-extension-dependent-type i f g →
+ is-extension-dependent-type (j ∘ i) f h
+ is-extension-dependent-type-comp-vertical H G x = G x ∙ H (i x)
+```
+
+### Horizontal composition of extensions of dependent maps
+
+```text
+ A
+ / | \
+ f / g | \ h
+ / | \
+ ∨ i ∨ j ∨
+ B ------> C ------> P
+```
+
+```agda
+module _
+ {l1 l2 l3 l4 : Level} {A : UU l1} {B : UU l2} {C : UU l3} {P : C → UU l4}
+ {f : A → B} {g : A → C} {h : (x : A) → P (g x)}
+ {i : B → C} {j : (z : C) → P z}
+ where
+
+ is-extension-dependent-type-comp-horizontal :
+ (I : is-extension-dependent-type f g i) →
+ is-extension-dependent-type g h j →
+ is-extension-dependent-type f (λ x → tr P (I x) (h x)) (j ∘ i)
+ is-extension-dependent-type-comp-horizontal I J x =
+ ap (tr P (I x)) (J x) ∙ apd j (I x)
+```
+
+### Left whiskering of extensions of dependent maps
+
+```text
+ A
+ | \
+ i | \ f
+ | \
+ ∨ g ∨ h
+ B ------> C ------> P
+```
+
+```agda
+module _
+ {l1 l2 l3 l4 : Level} {A : UU l1} {B : UU l2} {C : UU l3} {P : C → UU l4}
+ {i : A → B} {f : A → C} {g : B → C}
+ where
+
+ is-extension-dependent-type-left-whisker :
+ (h : (x : C) → P x) (F : is-extension-dependent-type i f g) →
+ is-extension-dependent-type i (λ x → tr P (F x) (h (f x))) (h ∘ g)
+ is-extension-dependent-type-left-whisker h F = apd h ∘ F
+```
+
+### Right whiskering of extensions of dependent maps
+
+```text
+ h
+ X ------> A
+ | \
+ i | \ f
+ | \
+ ∨ g ∨
+ B ------> P
+```
+
+```agda
+module _
+ {l1 l2 l3 l4 : Level} {A : UU l1} {B : UU l2} {P : B → UU l3} {X : UU l4}
+ {i : A → B} {f : (x : A) → P (i x)} {g : (y : B) → P y}
+ where
+
+ is-extension-dependent-type-right-whisker :
+ is-extension-dependent-type i f g →
+ (h : X → A) →
+ is-extension-dependent-type (i ∘ h) (f ∘ h) g
+ is-extension-dependent-type-right-whisker F h = F ∘ h
+```
+
+## Properties
+
+### The total type of extensions is equivalent to `(y : B) → P y`
+
+```agda
+module _
+ {l1 l2 l3 : Level} {A : UU l1} {B : UU l2} (i : A → B)
+ where
+
+ inv-compute-total-extension-dependent-type :
+ {P : B → UU l3} → total-extension-dependent-type i P ≃ ((y : B) → P y)
+ inv-compute-total-extension-dependent-type =
+ ( right-unit-law-Σ-is-contr (λ f → is-torsorial-htpy' (f ∘ i))) ∘e
+ ( equiv-left-swap-Σ)
+
+ compute-total-extension-dependent-type :
+ {P : B → UU l3} → ((y : B) → P y) ≃ total-extension-dependent-type i P
+ compute-total-extension-dependent-type =
+ inv-equiv (inv-compute-total-extension-dependent-type)
+```
+
+### The truncation level of the type of extensions is bounded by the truncation level of the codomain
+
+```agda
+module _
+ {l1 l2 l3 : Level} (k : 𝕋) {A : UU l1} {B : UU l2} (i : A → B)
+ where
+
+ is-trunc-is-extension-dependent-type :
+ {P : B → UU l3} (f : (x : A) → P (i x)) →
+ ((x : A) → is-trunc (succ-𝕋 k) (P (i x))) →
+ (g : (x : B) → P x) → is-trunc k (is-extension-dependent-type i f g)
+ is-trunc-is-extension-dependent-type f is-trunc-P g =
+ is-trunc-Π k (λ x → is-trunc-P x (f x) (g (i x)))
+
+ is-trunc-extension-dependent-type :
+ {P : B → UU l3} (f : (x : A) → P (i x)) →
+ ((x : B) → is-trunc k (P x)) → is-trunc k (extension-dependent-type i P f)
+ is-trunc-extension-dependent-type f is-trunc-P =
+ is-trunc-Σ
+ ( is-trunc-Π k is-trunc-P)
+ ( is-trunc-is-extension-dependent-type f
+ ( is-trunc-succ-is-trunc k ∘ (is-trunc-P ∘ i)))
+
+ is-trunc-total-extension-dependent-type :
+ {P : B → UU l3} →
+ ((x : B) → is-trunc k (P x)) →
+ is-trunc k (total-extension-dependent-type i P)
+ is-trunc-total-extension-dependent-type {P} is-trunc-P =
+ is-trunc-equiv' k
+ ( (y : B) → P y)
+ ( compute-total-extension-dependent-type i)
+ ( is-trunc-Π k is-trunc-P)
+
+module _
+ {l1 l2 l3 : Level} {A : UU l1} {B : UU l2} (i : A → B)
+ where
+
+ is-contr-is-extension-dependent-type :
+ {P : B → UU l3} (f : (x : A) → P (i x)) →
+ ((x : A) → is-prop (P (i x))) →
+ (g : (x : B) → P x) → is-contr (is-extension-dependent-type i f g)
+ is-contr-is-extension-dependent-type f is-prop-P g =
+ is-contr-Π (λ x → is-prop-P x (f x) (g (i x)))
+
+ is-prop-is-extension-dependent-type :
+ {P : B → UU l3} (f : (x : A) → P (i x)) →
+ ((x : A) → is-set (P (i x))) →
+ (g : (x : B) → P x) → is-prop (is-extension-dependent-type i f g)
+ is-prop-is-extension-dependent-type f is-set-P g =
+ is-prop-Π (λ x → is-set-P x (f x) (g (i x)))
+```
+
+## Examples
+
+### Every dependent map is an extension of itself along the identity
+
+```agda
+module _
+ {l1 l2 : Level} {A : UU l1} {P : A → UU l2} (f : (x : A) → P x)
+ where
+
+ is-extension-dependent-type-self : is-extension-dependent-type id f f
+ is-extension-dependent-type-self = refl-htpy
+
+ extension-self : extension-dependent-type id P f
+ extension-self = (f , is-extension-dependent-type-self)
+```
+
+## See also
+
+- [`orthogonal-factorization-systems.lifts-maps`](orthogonal-factorization-systems.lifts-maps.md)
+ for the dual notion.
diff --git a/src/orthogonal-factorization-systems/extensions-maps.lagda.md b/src/orthogonal-factorization-systems/extensions-maps.lagda.md
index ccdc296bd0..fed94382cf 100644
--- a/src/orthogonal-factorization-systems/extensions-maps.lagda.md
+++ b/src/orthogonal-factorization-systems/extensions-maps.lagda.md
@@ -7,151 +7,69 @@ module orthogonal-factorization-systems.extensions-maps where
Imports
```agda
-open import foundation.action-on-identifications-dependent-functions
open import foundation.action-on-identifications-functions
-open import foundation.contractible-types
open import foundation.dependent-pair-types
-open import foundation.embeddings
open import foundation.equivalences
open import foundation.function-types
-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.monomorphisms
-open import foundation.postcomposition-functions
-open import foundation.propositions
-open import foundation.sets
-open import foundation.structure-identity-principle
-open import foundation.transport-along-identifications
-open import foundation.truncated-types
-open import foundation.truncation-levels
-open import foundation.type-arithmetic-dependent-pair-types
open import foundation.universe-levels
-open import foundation.whiskering-homotopies-composition
-open import foundation-core.torsorial-type-families
+open import orthogonal-factorization-systems.extensions-dependent-maps
```
## Idea
-An **extension** of a map `f : (x : A) → P x` along a map `i : A → B` is a map
-`g : (y : B) → Q y` such that `Q` restricts along `i` to `P` and `g` restricts
-along `i` to `f`.
+An
+{{#concept "extension" Disambiguation="of a map along a map, types" Agda=extension}}
+of a map `f : A → X` along a map `i : A → B` is a map `g : B → X` such that `g`
+restricts along `i` to `f`.
```text
- A
- | \
- i f
- | \
- ∨ ∨
- B - g -> P
+ A
+ | \
+ i | \ f
+ | \
+ ∨ g ∨
+ B ------> X
```
## Definition
-### Extensions of dependent functions
+### Extensions of functions
```agda
module _
{l1 l2 l3 : Level} {A : UU l1} {B : UU l2} (i : A → B)
where
- is-extension :
- {P : B → UU l3} →
- ((x : A) → P (i x)) → ((y : B) → P y) → UU (l1 ⊔ l3)
- is-extension f g = f ~ (g ∘ i)
-
- extension-dependent-type :
- (P : B → UU l3) →
- ((x : A) → P (i x)) → UU (l1 ⊔ l2 ⊔ l3)
- extension-dependent-type P f = Σ ((y : B) → P y) (is-extension f)
+ is-extension : {X : UU l3} → (A → X) → (B → X) → UU (l1 ⊔ l3)
+ is-extension = is-extension-dependent-type i
extension :
{X : UU l3} → (A → X) → UU (l1 ⊔ l2 ⊔ l3)
- extension {X} = extension-dependent-type (λ _ → X)
-
- total-extension-dependent-type : (P : B → UU l3) → UU (l1 ⊔ l2 ⊔ l3)
- total-extension-dependent-type P =
- Σ ((x : A) → P (i x)) (extension-dependent-type P)
+ extension {X} = extension-dependent-type i (λ _ → X)
total-extension : (X : UU l3) → UU (l1 ⊔ l2 ⊔ l3)
- total-extension X = total-extension-dependent-type (λ _ → X)
+ total-extension X = total-extension-dependent-type i (λ _ → X)
module _
{l1 l2 l3 : Level} {A : UU l1} {B : UU l2} {i : A → B}
- {P : B → UU l3} {f : (x : A) → P (i x)}
+ {X : UU l3} {f : A → X}
where
- map-extension : extension-dependent-type i P f → (y : B) → P y
+ map-extension : extension i f → B → X
map-extension = pr1
is-extension-map-extension :
- (E : extension-dependent-type i P f) → is-extension i f (map-extension E)
+ (E : extension i f) → is-extension i f (map-extension E)
is-extension-map-extension = pr2
```
## Operations
-### Vertical composition of extensions of maps
-
-```text
- A
- | \
- i f
- | \
- ∨ ∨
- B - g -> P
- | ∧
- j /
- | h
- ∨ /
- C
-```
-
-```agda
-module _
- {l1 l2 l3 l4 : Level} {A : UU l1} {B : UU l2} {C : UU l3} {P : C → UU l4}
- {i : A → B} {j : B → C}
- {f : (x : A) → P (j (i x))} {g : (x : B) → P (j x)} {h : (x : C) → P x}
- where
-
- is-extension-comp-vertical :
- is-extension j g h → is-extension i f g → is-extension (j ∘ i) f h
- is-extension-comp-vertical H G x = G x ∙ H (i x)
-```
-
-### Horizontal composition of extensions of maps
-
-```text
- A
- / | \
- f g h
- / | \
- ∨ ∨ ∨
- B - i -> C - j -> P
-```
-
-#### Horizontal composition of extensions of dependent functions
-
-```agda
-module _
- {l1 l2 l3 l4 : Level} {A : UU l1} {B : UU l2} {C : UU l3} {P : C → UU l4}
- {f : A → B} {g : A → C} {h : (x : A) → P (g x)}
- {i : B → C} {j : (z : C) → P z}
- where
-
- is-extension-dependent-type-comp-horizontal :
- (I : is-extension f g i) →
- is-extension g h j → is-extension f (λ x → tr P (I x) (h x)) (j ∘ i)
- is-extension-dependent-type-comp-horizontal I J x =
- ap (tr P (I x)) (J x) ∙ apd j (I x)
-```
-
#### Horizontal composition of extensions of ordinary maps
```agda
@@ -162,223 +80,30 @@ module _
where
is-extension-comp-horizontal :
- (I : is-extension f g i) → is-extension g h j → is-extension f h (j ∘ i)
- is-extension-comp-horizontal I J x = (J x) ∙ ap j (I x)
-```
-
-### Left whiskering of extensions of maps
-
-```text
- A
- | \
- i f
- | \
- ∨ ∨
- B - g -> C - h -> P
-```
-
-```agda
-module _
- {l1 l2 l3 l4 : Level} {A : UU l1} {B : UU l2} {C : UU l3} {P : C → UU l4}
- {i : A → B} {f : A → C} {g : B → C}
- where
-
- is-extension-left-whisker :
- (h : (x : C) → P x) (F : is-extension i f g) →
- (is-extension i (λ x → tr P (F x) (h (f x))) (h ∘ g))
- is-extension-left-whisker h F = apd h ∘ F
-```
-
-### Right whiskering of extensions of maps
-
-```text
- X - h -> A
- | \
- i f
- | \
- ∨ ∨
- B - g -> P
-```
-
-```agda
-module _
- {l1 l2 l3 l4 : Level} {A : UU l1} {B : UU l2} {P : B → UU l3} {X : UU l4}
- {i : A → B} {f : (x : A) → P (i x)} {g : (y : B) → P y}
- where
-
- is-extension-right-whisker :
- (F : is-extension i f g) (h : X → A) → is-extension (i ∘ h) (f ∘ h) g
- is-extension-right-whisker F h = F ∘ h
-```
-
-### Postcomposition of extensions
-
-```agda
-module _
- {l1 l2 l3 l4 : Level} {A : UU l1} {B : UU l2} {X : UU l3} {Y : UU l4}
- where
-
- postcomp-extension :
- (f : A → B) (i : A → X) (g : X → Y) →
- extension f i → extension f (g ∘ i)
- postcomp-extension f i g =
- map-Σ (is-extension f (g ∘ i)) (postcomp B g) (λ j H → g ·l H)
+ is-extension f g i → is-extension g h j → is-extension f h (j ∘ i)
+ is-extension-comp-horizontal I J x = J x ∙ ap j (I x)
```
## Properties
-### Characterizing identifications of extensions of maps
-
-```agda
-module _
- {l1 l2 l3 : Level} {A : UU l1} {B : UU l2} (i : A → B)
- {P : B → UU l3}
- (f : (x : A) → P (i x))
- where
-
- coherence-htpy-extension :
- (e e' : extension-dependent-type i P f) →
- map-extension e ~ map-extension e' → UU (l1 ⊔ l3)
- coherence-htpy-extension e e' K =
- (is-extension-map-extension e ∙h (K ·r i)) ~ is-extension-map-extension e'
-
- htpy-extension : (e e' : extension-dependent-type i P f) → UU (l1 ⊔ l2 ⊔ l3)
- htpy-extension e e' =
- Σ ( map-extension e ~ map-extension e')
- ( coherence-htpy-extension e e')
-
- refl-htpy-extension :
- (e : extension-dependent-type i P f) → htpy-extension e e
- pr1 (refl-htpy-extension e) = refl-htpy
- pr2 (refl-htpy-extension e) = right-unit-htpy
-
- htpy-eq-extension :
- (e e' : extension-dependent-type i P f) → e = e' → htpy-extension e e'
- htpy-eq-extension e .e refl = refl-htpy-extension e
-
- is-torsorial-htpy-extension :
- (e : extension-dependent-type i P f) → is-torsorial (htpy-extension e)
- is-torsorial-htpy-extension e =
- is-torsorial-Eq-structure
- ( is-torsorial-htpy (map-extension e))
- ( map-extension e , refl-htpy)
- ( is-torsorial-htpy (is-extension-map-extension e ∙h refl-htpy))
-
- is-equiv-htpy-eq-extension :
- (e e' : extension-dependent-type i P f) → is-equiv (htpy-eq-extension e e')
- is-equiv-htpy-eq-extension e =
- fundamental-theorem-id
- ( is-torsorial-htpy-extension e)
- ( htpy-eq-extension e)
-
- extensionality-extension :
- (e e' : extension-dependent-type i P f) → (e = e') ≃ (htpy-extension e e')
- pr1 (extensionality-extension e e') = htpy-eq-extension e e'
- pr2 (extensionality-extension e e') = is-equiv-htpy-eq-extension e e'
-
- eq-htpy-extension :
- (e e' : extension-dependent-type i P f)
- (H : map-extension e ~ map-extension e') →
- coherence-htpy-extension e e' H → e = e'
- eq-htpy-extension e e' H K =
- map-inv-equiv (extensionality-extension e e') (H , K)
-```
-
-### The total type of extensions is equivalent to `(y : B) → P y`
+### The total type of extensions is equivalent to `B → X`
```agda
module _
{l1 l2 l3 : Level} {A : UU l1} {B : UU l2} (i : A → B)
where
- inv-compute-total-extension-dependent-type :
- {P : B → UU l3} → total-extension-dependent-type i P ≃ ((y : B) → P y)
- inv-compute-total-extension-dependent-type =
- ( right-unit-law-Σ-is-contr (λ f → is-torsorial-htpy' (f ∘ i))) ∘e
- ( equiv-left-swap-Σ)
-
- compute-total-extension-dependent-type :
- {P : B → UU l3} → ((y : B) → P y) ≃ total-extension-dependent-type i P
- compute-total-extension-dependent-type =
- inv-equiv (inv-compute-total-extension-dependent-type)
-
inv-compute-total-extension :
{X : UU l3} → total-extension i X ≃ (B → X)
- inv-compute-total-extension = inv-compute-total-extension-dependent-type
+ inv-compute-total-extension = inv-compute-total-extension-dependent-type i
compute-total-extension :
{X : UU l3} → (B → X) ≃ total-extension i X
- compute-total-extension = compute-total-extension-dependent-type
-```
-
-### The truncation level of the type of extensions is bounded by the truncation level of the codomains
-
-```agda
-module _
- {l1 l2 l3 : Level} (k : 𝕋) {A : UU l1} {B : UU l2} (i : A → B)
- where
-
- is-trunc-is-extension-dependent-type :
- {P : B → UU l3} (f : (x : A) → P (i x)) →
- ((x : A) → is-trunc (succ-𝕋 k) (P (i x))) →
- (g : (x : B) → P x) → is-trunc k (is-extension i f g)
- is-trunc-is-extension-dependent-type f is-trunc-P g =
- is-trunc-Π k λ x → is-trunc-P x (f x) (g (i x))
-
- is-trunc-extension-dependent-type :
- {P : B → UU l3} (f : (x : A) → P (i x)) →
- ((x : B) → is-trunc k (P x)) → is-trunc k (extension-dependent-type i P f)
- is-trunc-extension-dependent-type f is-trunc-P =
- is-trunc-Σ
- ( is-trunc-Π k is-trunc-P)
- ( is-trunc-is-extension-dependent-type f
- ( is-trunc-succ-is-trunc k ∘ (is-trunc-P ∘ i)))
-
- is-trunc-total-extension-dependent-type :
- {P : B → UU l3} →
- ((x : B) → is-trunc k (P x)) →
- is-trunc k (total-extension-dependent-type i P)
- is-trunc-total-extension-dependent-type {P} is-trunc-P =
- is-trunc-equiv' k
- ( (y : B) → P y)
- ( compute-total-extension-dependent-type i)
- ( is-trunc-Π k is-trunc-P)
-
-module _
- {l1 l2 l3 : Level} {A : UU l1} {B : UU l2} (i : A → B)
- where
-
- is-contr-is-extension :
- {P : B → UU l3} (f : (x : A) → P (i x)) →
- ((x : A) → is-prop (P (i x))) →
- (g : (x : B) → P x) → is-contr (is-extension i f g)
- is-contr-is-extension f is-prop-P g =
- is-contr-Π λ x → is-prop-P x (f x) (g (i x))
-
- is-prop-is-extension :
- {P : B → UU l3} (f : (x : A) → P (i x)) →
- ((x : A) → is-set (P (i x))) →
- (g : (x : B) → P x) → is-prop (is-extension i f g)
- is-prop-is-extension f is-set-P g =
- is-prop-Π (λ x → is-set-P x (f x) (g (i x)))
+ compute-total-extension = compute-total-extension-dependent-type i
```
## Examples
-### Every map is an extension of itself along the identity
-
-```agda
-module _
- {l1 l2 : Level} {A : UU l1} {P : A → UU l2} (f : (x : A) → P x)
- where
-
- is-extension-self : is-extension id f f
- is-extension-self = refl-htpy
-
- extension-self : extension-dependent-type id P f
- extension-self = f , is-extension-self
-```
-
### The identity is an extension of every map along themselves
```agda
@@ -390,27 +115,7 @@ module _
is-extension-along-self = refl-htpy
extension-along-self : extension f f
- extension-along-self = id , is-extension-along-self
-```
-
-### Postcomposition of extensions by an embedding is an embedding
-
-```agda
-module _
- {l1 l2 l3 l4 : Level} {A : UU l1} {B : UU l2} {X : UU l3} {Y : UU l4}
- where
-
- is-emb-postcomp-extension :
- (f : A → B) (i : A → X) (g : X → Y) → is-emb g →
- is-emb (postcomp-extension f i g)
- is-emb-postcomp-extension f i g H =
- is-emb-map-Σ
- ( is-extension f (g ∘ i))
- ( is-mono-is-emb g H B)
- ( λ j →
- is-emb-is-equiv
- ( is-equiv-map-Π-is-fiberwise-equiv
- ( λ x → H (i x) (j (f x)))))
+ extension-along-self = (id , is-extension-along-self)
```
## See also
diff --git a/src/orthogonal-factorization-systems/postcomposition-extensions-maps.lagda.md b/src/orthogonal-factorization-systems/postcomposition-extensions-maps.lagda.md
new file mode 100644
index 0000000000..5383538aef
--- /dev/null
+++ b/src/orthogonal-factorization-systems/postcomposition-extensions-maps.lagda.md
@@ -0,0 +1,137 @@
+# Postcomposition of extensions of maps
+
+```agda
+module orthogonal-factorization-systems.postcomposition-extensions-maps where
+```
+
+Imports
+
+```agda
+open import foundation.action-on-identifications-functions
+open import foundation.dependent-pair-types
+open import foundation.embeddings
+open import foundation.equivalences
+open import foundation.function-types
+open import foundation.functoriality-dependent-function-types
+open import foundation.functoriality-dependent-pair-types
+open import foundation.functoriality-function-types
+open import foundation.monomorphisms
+open import foundation.postcomposition-functions
+open import foundation.truncated-maps
+open import foundation.truncation-levels
+open import foundation.universe-levels
+open import foundation.whiskering-homotopies-composition
+
+open import orthogonal-factorization-systems.extensions-maps
+```
+
+
+
+## Idea
+
+Given a map `i : A → B` and a map `f : A → X`, then we may
+{{#concept "postcompose" Disambiguation="extension of map by map" Agda=postcomp-extension}}
+any [extension](orthogonal-factorization-systems.extensions-maps.md)
+`α : extension i f` by a map `g : X → Y` to obtain an extension of `g ∘ f` along
+`i`, `gα : extension i (g ∘ f)`.
+
+## Definition
+
+### Postcomposition of extensions
+
+```agda
+module _
+ {l1 l2 l3 l4 : Level} {A : UU l1} {B : UU l2} {X : UU l3} {Y : UU l4}
+ where
+
+ postcomp-extension :
+ (i : A → B) (f : A → X) (g : X → Y) →
+ extension i f → extension i (g ∘ f)
+ postcomp-extension i f g =
+ map-Σ (is-extension i (g ∘ f)) (postcomp B g) (λ j H → g ·l H)
+```
+
+## Properties
+
+### Postcomposition of extensions by an equivalence is an equivalence
+
+```agda
+module _
+ {l1 l2 l3 l4 : Level} {A : UU l1} {B : UU l2} {X : UU l3} {Y : UU l4}
+ where
+
+ is-equiv-postcomp-extension :
+ (f : A → B) (i : A → X) (g : X → Y) → is-equiv g →
+ is-equiv (postcomp-extension f i g)
+ is-equiv-postcomp-extension f i g G =
+ is-equiv-map-Σ
+ ( is-extension f (g ∘ i))
+ ( is-equiv-postcomp-is-equiv g G B)
+ ( λ j →
+ is-equiv-map-Π-is-fiberwise-equiv
+ ( λ x → is-emb-is-equiv G (i x) (j (f x))))
+
+ equiv-postcomp-extension :
+ (f : A → B) (i : A → X) (g : X ≃ Y) →
+ extension f i ≃ extension f (map-equiv g ∘ i)
+ equiv-postcomp-extension f i (g , G) =
+ ( postcomp-extension f i g , is-equiv-postcomp-extension f i g G)
+```
+
+### Postcomposition of extensions by an embedding is an embedding
+
+```agda
+module _
+ {l1 l2 l3 l4 : Level} {A : UU l1} {B : UU l2} {X : UU l3} {Y : UU l4}
+ where
+
+ is-emb-postcomp-extension :
+ (f : A → B) (i : A → X) (g : X → Y) → is-emb g →
+ is-emb (postcomp-extension f i g)
+ is-emb-postcomp-extension f i g H =
+ is-emb-map-Σ
+ ( is-extension f (g ∘ i))
+ ( is-mono-is-emb g H B)
+ ( λ j →
+ is-emb-is-equiv
+ ( is-equiv-map-Π-is-fiberwise-equiv
+ (λ x → H (i x) (j (f x)))))
+
+ emb-postcomp-extension :
+ (f : A → B) (i : A → X) (g : X ↪ Y) →
+ extension f i ↪ extension f (map-emb g ∘ i)
+ emb-postcomp-extension f i (g , G) =
+ postcomp-extension f i g , is-emb-postcomp-extension f i g G
+```
+
+### Postcomposition of extensions by a `k`-truncated map is `k`-truncated
+
+```agda
+module _
+ {l1 l2 l3 l4 : Level} (k : 𝕋) {A : UU l1} {B : UU l2} {X : UU l3} {Y : UU l4}
+ where
+
+ is-trunc-map-postcomp-extension :
+ (f : A → B) (i : A → X) (g : X → Y) → is-trunc-map k g →
+ is-trunc-map k (postcomp-extension f i g)
+ is-trunc-map-postcomp-extension f i g G =
+ is-trunc-map-map-Σ k
+ ( is-extension f (g ∘ i))
+ ( is-trunc-map-postcomp-is-trunc-map k g G B)
+ ( λ j →
+ is-trunc-map-map-Π k
+ ( λ a → ap g)
+ ( λ a → is-trunc-map-ap-is-trunc-map k g G (i a) (j (f a))))
+
+ trunc-map-postcomp-extension :
+ (f : A → B) (i : A → X) (g : trunc-map k X Y) →
+ trunc-map k (extension f i) (extension f (map-trunc-map g ∘ i))
+ trunc-map-postcomp-extension f i (g , G) =
+ ( postcomp-extension f i g , is-trunc-map-postcomp-extension f i g G)
+```
+
+## See also
+
+- In [`foundation.surjective-maps`](foundation.surjective-maps.md) it is shown
+ that postcomposition of extensions along surjective maps by an embedding is an
+ equivalence.
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 1ebbc9e3de..6d9f82230b 100644
--- a/src/orthogonal-factorization-systems/types-local-at-maps.lagda.md
+++ b/src/orthogonal-factorization-systems/types-local-at-maps.lagda.md
@@ -41,6 +41,7 @@ open import foundation.universal-property-empty-type
open import foundation.universal-property-equivalences
open import foundation.universe-levels
+open import orthogonal-factorization-systems.extensions-dependent-maps
open import orthogonal-factorization-systems.extensions-maps
```
diff --git a/src/orthogonal-factorization-systems/universal-property-localizations-at-global-subuniverses.lagda.md b/src/orthogonal-factorization-systems/universal-property-localizations-at-global-subuniverses.lagda.md
index a3c2143af4..74825118eb 100644
--- a/src/orthogonal-factorization-systems/universal-property-localizations-at-global-subuniverses.lagda.md
+++ b/src/orthogonal-factorization-systems/universal-property-localizations-at-global-subuniverses.lagda.md
@@ -28,6 +28,7 @@ open import foundation.unit-type
open import foundation.univalence
open import foundation.universe-levels
+open import orthogonal-factorization-systems.extensions-dependent-maps
open import orthogonal-factorization-systems.extensions-maps
open import orthogonal-factorization-systems.types-local-at-maps
```