diff --git a/src/foundation-core.lagda.md b/src/foundation-core.lagda.md
index 4ac03848a2..d2a86967a1 100644
--- a/src/foundation-core.lagda.md
+++ b/src/foundation-core.lagda.md
@@ -25,7 +25,6 @@ open import foundation-core.equality-dependent-pair-types public
open import foundation-core.equivalence-relations public
open import foundation-core.equivalences public
open import foundation-core.fibers-of-maps public
-open import foundation-core.function-extensionality public
open import foundation-core.function-types public
open import foundation-core.functoriality-dependent-function-types public
open import foundation-core.functoriality-dependent-pair-types public
diff --git a/src/foundation-core/function-extensionality.lagda.md b/src/foundation-core/function-extensionality.lagda.md
deleted file mode 100644
index a1dba7e527..0000000000
--- a/src/foundation-core/function-extensionality.lagda.md
+++ /dev/null
@@ -1,86 +0,0 @@
-# Function extensionality
-
-```agda
-module foundation-core.function-extensionality where
-```
-
-Imports
-
-```agda
-open import foundation.action-on-identifications-functions
-open import foundation.universe-levels
-
-open import foundation-core.equivalences
-open import foundation-core.function-types
-open import foundation-core.homotopies
-open import foundation-core.identity-types
-```
-
-
-
-## Idea
-
-The function extensionality axiom asserts that identifications of (dependent)
-functions are equivalently described as pointwise equalities between them. In
-other words, a function is completely determined by its values.
-
-In this file, we define the statement of the axiom. The axiom itself is
-postulated in
-[`foundation.function-extensionality`](foundation.function-extensionality.md) as
-`funext`.
-
-## Statement
-
-```agda
-module _
- {l1 l2 : Level} {A : UU l1} {B : A → UU l2}
- where
-
- htpy-eq : {f g : (x : A) → B x} → f = g → f ~ g
- htpy-eq refl = refl-htpy
-
- instance-function-extensionality : (f g : (x : A) → B x) → UU (l1 ⊔ l2)
- instance-function-extensionality f g = is-equiv (htpy-eq {f} {g})
-
- based-function-extensionality : (f : (x : A) → B x) → UU (l1 ⊔ l2)
- based-function-extensionality f =
- (g : (x : A) → B x) → is-equiv (htpy-eq {f} {g})
-
-function-extensionality-Level : (l1 l2 : Level) → UU (lsuc l1 ⊔ lsuc l2)
-function-extensionality-Level l1 l2 =
- {A : UU l1} {B : A → UU l2}
- (f g : (x : A) → B x) →
- instance-function-extensionality f g
-
-function-extensionality : UUω
-function-extensionality = {l1 l2 : Level} → function-extensionality-Level l1 l2
-```
-
-## Properties
-
-### Naturality of `htpy-eq`
-
-```agda
-square-htpy-eq :
- {l1 l2 l3 : Level} {A : UU l1} {B : UU l2} {C : UU l3} (f : A → B) →
- ( g h : B → C) →
- ( (λ (p : (y : B) → g y = h y) (x : A) → p (f x)) ∘ htpy-eq) ~
- ( htpy-eq ∘ (ap (precomp f C)))
-square-htpy-eq f g .g refl = refl
-```
-
-### The action on paths of an evaluation map
-
-```agda
-ap-ev :
- {l1 l2 : Level} {A : UU l1} {B : UU l2} (a : A) → {f g : A → B} →
- (p : f = g) → (ap (λ h → h a) p) = htpy-eq p a
-ap-ev a refl = refl
-```
-
-## See also
-
-- That the univalence axiom implies function extensionality is proven in
- [`foundation.univalence-implies-function-extensionality`](foundation.univalence-implies-function-extensionality.md).
-- Weak function extensionality is defined in
- [`foundation.weak-function-extensionality`](foundation.weak-function-extensionality.md).
diff --git a/src/foundation-core/homotopies.lagda.md b/src/foundation-core/homotopies.lagda.md
index de3ee5e483..42205ec1a9 100644
--- a/src/foundation-core/homotopies.lagda.md
+++ b/src/foundation-core/homotopies.lagda.md
@@ -41,7 +41,7 @@ module _
map-compute-dependent-identification-eq-value :
{x y : X} (p : x = y) (q : eq-value x) (r : eq-value y) →
- coherence-square-identifications (apd f p) r (ap (tr P p) q) (apd g p) →
+ coherence-square-identifications (ap (tr P p) q) (apd f p) (apd g p) r →
dependent-identification eq-value p q r
map-compute-dependent-identification-eq-value refl q r =
inv ∘ (concat' r (right-unit ∙ ap-id q))
@@ -61,14 +61,14 @@ module _
map-compute-dependent-identification-eq-value-function :
{x y : X} (p : x = y) (q : eq-value f g x) (r : eq-value f g y) →
- coherence-square-identifications (ap f p) r q (ap g p) →
+ coherence-square-identifications q (ap f p) (ap g p) r →
dependent-identification eq-value-function p q r
map-compute-dependent-identification-eq-value-function refl q r =
inv ∘ concat' r right-unit
map-compute-dependent-identification-eq-value-id-id :
{l1 : Level} {A : UU l1} {a b : A} (p : a = b) (q : a = a) (r : b = b) →
- coherence-square-identifications p r q p →
+ coherence-square-identifications q p p r →
dependent-identification (eq-value id id) p q r
map-compute-dependent-identification-eq-value-id-id refl q r s =
inv (s ∙ right-unit)
@@ -76,7 +76,7 @@ map-compute-dependent-identification-eq-value-id-id refl q r s =
map-compute-dependent-identification-eq-value-comp-id :
{l1 l2 : Level} {A : UU l1} {B : UU l2} (g : B → A) (f : A → B) {a b : A}
(p : a = b) (q : eq-value (g ∘ f) id a) (r : eq-value (g ∘ f) id b) →
- coherence-square-identifications (ap g (ap f p)) r q p →
+ coherence-square-identifications q (ap g (ap f p)) p r →
dependent-identification (eq-value (g ∘ f) id) p q r
map-compute-dependent-identification-eq-value-comp-id g f refl q r s =
inv (s ∙ right-unit)
@@ -335,7 +335,7 @@ syntax step-homotopy-reasoning p h q = p ~ h by q
- We postulate that homotopies characterize identifications of (dependent)
functions in the file
- [`foundation-core.function-extensionality`](foundation-core.function-extensionality.md).
+ [`foundation.function-extensionality`](foundation.function-extensionality.md).
- [Multivariable homotopies](foundation.multivariable-homotopies.md).
- The [whiskering operations](foundation.whiskering-homotopies.md) on
homotopies.
diff --git a/src/foundation-core/propositions.lagda.md b/src/foundation-core/propositions.lagda.md
index f55b64f2b5..1b394e0c5a 100644
--- a/src/foundation-core/propositions.lagda.md
+++ b/src/foundation-core/propositions.lagda.md
@@ -8,13 +8,13 @@ module foundation-core.propositions where
```agda
open import foundation.dependent-pair-types
+open import foundation.function-extensionality
open import foundation.universe-levels
open import foundation-core.cartesian-product-types
open import foundation-core.contractible-types
open import foundation-core.equality-dependent-pair-types
open import foundation-core.equivalences
-open import foundation-core.function-extensionality
open import foundation-core.function-types
open import foundation-core.homotopies
open import foundation-core.identity-types
diff --git a/src/foundation-core/transport-along-identifications.lagda.md b/src/foundation-core/transport-along-identifications.lagda.md
index b3bccb86b3..c255397028 100644
--- a/src/foundation-core/transport-along-identifications.lagda.md
+++ b/src/foundation-core/transport-along-identifications.lagda.md
@@ -7,6 +7,7 @@ module foundation-core.transport-along-identifications where
Imports
```agda
+open import foundation.action-on-identifications-functions
open import foundation.universe-levels
open import foundation-core.identity-types
@@ -25,7 +26,7 @@ The fact that `tr B p` is an [equivalence](foundation-core.equivalences.md) is
recorded in
[`foundation.transport-along-identifications`](foundation.transport-along-identifications.md).
-## Definition
+## Definitions
### Transport
@@ -79,6 +80,17 @@ preserves-tr :
preserves-tr f refl x = refl
```
+### Transporting along the action on identifications of a function
+
+```agda
+tr-ap :
+ {l1 l2 l3 l4 : Level} {A : UU l1} {B : A → UU l2} {C : UU l3} {D : C → UU l4}
+ (f : A → C) (g : (x : A) → B x → D (f x))
+ {x y : A} (p : x = y) (z : B x) →
+ tr D (ap f p) (g x z) = g y (tr B p z)
+tr-ap f g refl z = refl
+```
+
### Computing maps out of identity types as transports
```agda
@@ -91,3 +103,21 @@ module _
(x : A) (p : a = x) → f x p = tr B p (f a refl)
compute-map-out-of-identity-type x refl = refl
```
+
+### Computing transport in the type family of identifications with a fixed target
+
+```agda
+tr-Id-left :
+ {l : Level} {A : UU l} {a b c : A} (q : b = c) (p : b = a) →
+ tr (_= a) q p = ((inv q) ∙ p)
+tr-Id-left refl p = refl
+```
+
+### Computing transport in the type family of identifications with a fixed source
+
+```agda
+tr-Id-right :
+ {l : Level} {A : UU l} {a b c : A} (q : b = c) (p : a = b) →
+ tr (a =_) q p = (p ∙ q)
+tr-Id-right refl refl = refl
+```
diff --git a/src/foundation.lagda.md b/src/foundation.lagda.md
index 98b8aa8bd7..1d473c3b33 100644
--- a/src/foundation.lagda.md
+++ b/src/foundation.lagda.md
@@ -83,6 +83,7 @@ open import foundation.decidable-types public
open import foundation.dependent-binary-homotopies public
open import foundation.dependent-binomial-theorem public
open import foundation.dependent-epimorphisms public
+open import foundation.dependent-homotopies public
open import foundation.dependent-identifications public
open import foundation.dependent-pair-types public
open import foundation.dependent-sequences public
@@ -290,6 +291,7 @@ open import foundation.towers public
open import foundation.transfinite-cocomposition-of-maps public
open import foundation.transport-along-equivalences public
open import foundation.transport-along-higher-identifications public
+open import foundation.transport-along-homotopies public
open import foundation.transport-along-identifications public
open import foundation.trivial-relaxed-sigma-decompositions public
open import foundation.trivial-sigma-decompositions public
diff --git a/src/foundation/action-on-identifications-functions.lagda.md b/src/foundation/action-on-identifications-functions.lagda.md
index 4fd28c92ed..d8627e45ac 100644
--- a/src/foundation/action-on-identifications-functions.lagda.md
+++ b/src/foundation/action-on-identifications-functions.lagda.md
@@ -12,7 +12,6 @@ open import foundation.universe-levels
open import foundation-core.constant-maps
open import foundation-core.function-types
open import foundation-core.identity-types
-open import foundation-core.transport-along-identifications
```
@@ -97,17 +96,6 @@ ap-const :
ap-const b refl = refl
```
-### Transporting along the action on identifications of a function
-
-```agda
-tr-ap :
- {l1 l2 l3 l4 : Level} {A : UU l1} {B : A → UU l2} {C : UU l3} {D : C → UU l4}
- (f : A → C) (g : (x : A) → B x → D (f x))
- {x y : A} (p : x = y) (z : B x) →
- tr D (ap f p) (g x z) = g y (tr B p z)
-tr-ap f g refl z = refl
-```
-
### The action on identifications of concatenating by `refl` on the right
Note that `_∙ refl` is only homotopic to the identity function. Therefore we
diff --git a/src/foundation/cantors-diagonal-argument.lagda.md b/src/foundation/cantors-diagonal-argument.lagda.md
index fba7fc9574..203101f83f 100644
--- a/src/foundation/cantors-diagonal-argument.lagda.md
+++ b/src/foundation/cantors-diagonal-argument.lagda.md
@@ -8,6 +8,7 @@ module foundation.cantors-diagonal-argument where
```agda
open import foundation.dependent-pair-types
+open import foundation.function-extensionality
open import foundation.logical-equivalences
open import foundation.negation
open import foundation.propositional-truncations
@@ -16,7 +17,6 @@ open import foundation.universe-levels
open import foundation-core.empty-types
open import foundation-core.fibers-of-maps
-open import foundation-core.function-extensionality
open import foundation-core.propositions
```
diff --git a/src/foundation/commuting-squares-of-identifications.lagda.md b/src/foundation/commuting-squares-of-identifications.lagda.md
index e84892d6ba..179914ea0d 100644
--- a/src/foundation/commuting-squares-of-identifications.lagda.md
+++ b/src/foundation/commuting-squares-of-identifications.lagda.md
@@ -42,9 +42,8 @@ module _
where
coherence-square-identifications :
- (left : x = z) (bottom : z = w)
- (top : x = y) (right : y = w) → UU l
- coherence-square-identifications left bottom top right =
+ (top : x = y) (left : x = z) (right : y = w) (bottom : z = w) → UU l
+ coherence-square-identifications top left right bottom =
(left ∙ bottom) = (top ∙ right)
```
@@ -65,10 +64,10 @@ module _
where
coherence-square-identifications-comp-horizontal :
- coherence-square-identifications p-left p-bottom p-top middle →
- coherence-square-identifications middle q-bottom q-top q-right →
+ coherence-square-identifications p-top p-left middle p-bottom →
+ coherence-square-identifications q-top middle q-right q-bottom →
coherence-square-identifications
- p-left (p-bottom ∙ q-bottom) (p-top ∙ q-top) q-right
+ (p-top ∙ q-top) p-left q-right (p-bottom ∙ q-bottom)
coherence-square-identifications-comp-horizontal p q =
( ( ( inv (assoc p-left p-bottom q-bottom) ∙
ap-binary (_∙_) p (refl {x = q-bottom})) ∙
@@ -85,10 +84,10 @@ module _
where
coherence-square-identifications-comp-vertical :
- coherence-square-identifications p-left middle p-top p-right →
- coherence-square-identifications q-left q-bottom middle q-right →
+ coherence-square-identifications p-top p-left p-right middle →
+ coherence-square-identifications middle q-left q-right q-bottom →
coherence-square-identifications
- (p-left ∙ q-left) q-bottom p-top (p-right ∙ q-right)
+ p-top (p-left ∙ q-left) (p-right ∙ q-right) q-bottom
coherence-square-identifications-comp-vertical p q =
( assoc p-left q-left q-bottom ∙
( ( ap-binary (_∙_) (refl {x = p-left}) q ∙
@@ -111,26 +110,26 @@ module _
coherence-square-identifications-left-paste :
{left' : x = z} (s : left = left') →
- coherence-square-identifications left bottom top right →
- coherence-square-identifications left' bottom top right
+ coherence-square-identifications top left right bottom →
+ coherence-square-identifications top left' right bottom
coherence-square-identifications-left-paste refl sq = sq
coherence-square-identifications-bottom-paste :
{bottom' : z = w} (s : bottom = bottom') →
- coherence-square-identifications left bottom top right →
- coherence-square-identifications left bottom' top right
+ coherence-square-identifications top left right bottom →
+ coherence-square-identifications top left right bottom'
coherence-square-identifications-bottom-paste refl sq = sq
coherence-square-identifications-top-paste :
{top' : x = y} (s : top = top') →
- coherence-square-identifications left bottom top right →
- coherence-square-identifications left bottom top' right
+ coherence-square-identifications top left right bottom →
+ coherence-square-identifications top' left right bottom
coherence-square-identifications-top-paste refl sq = sq
coherence-square-identifications-right-paste :
{right' : y = w} (s : right = right') →
- coherence-square-identifications left bottom top right →
- coherence-square-identifications left bottom top right'
+ coherence-square-identifications top left right bottom →
+ coherence-square-identifications top left right' bottom
coherence-square-identifications-right-paste refl sq = sq
```
@@ -147,36 +146,36 @@ module _
coherence-square-identifications-top-left-whisk' :
{x' : A} (p : x' = x) →
- coherence-square-identifications left bottom top right →
- coherence-square-identifications (p ∙ left) bottom (p ∙ top) right
+ coherence-square-identifications top left right bottom →
+ coherence-square-identifications (p ∙ top) (p ∙ left) right bottom
coherence-square-identifications-top-left-whisk' refl sq = sq
coherence-square-identifications-top-left-whisk :
{x' : A} (p : x = x') →
- coherence-square-identifications left bottom top right →
- coherence-square-identifications (inv p ∙ left) bottom (inv p ∙ top) right
+ coherence-square-identifications top left right bottom →
+ coherence-square-identifications (inv p ∙ top) (inv p ∙ left) right bottom
coherence-square-identifications-top-left-whisk refl sq = sq
coherence-square-identifications-top-right-whisk :
{y' : A} (p : y = y') →
- coherence-square-identifications left bottom top right →
- coherence-square-identifications left bottom (top ∙ p) (inv p ∙ right)
+ coherence-square-identifications top left right bottom →
+ coherence-square-identifications (top ∙ p) left (inv p ∙ right) bottom
coherence-square-identifications-top-right-whisk refl =
coherence-square-identifications-top-paste
left bottom top right (inv right-unit)
coherence-square-identifications-bottom-left-whisk :
{z' : A} (p : z = z') →
- coherence-square-identifications left bottom top right →
- coherence-square-identifications (left ∙ p) (inv p ∙ bottom) top right
+ coherence-square-identifications top left right bottom →
+ coherence-square-identifications top (left ∙ p) right (inv p ∙ bottom)
coherence-square-identifications-bottom-left-whisk refl =
coherence-square-identifications-left-paste
left bottom top right (inv right-unit)
coherence-square-identifications-bottom-right-whisk :
{w' : A} (p : w = w') →
- coherence-square-identifications left bottom top right →
- coherence-square-identifications left (bottom ∙ p) top (right ∙ p)
+ coherence-square-identifications top left right bottom →
+ coherence-square-identifications top left (right ∙ p) (bottom ∙ p)
coherence-square-identifications-bottom-right-whisk refl =
( coherence-square-identifications-bottom-paste
left bottom top (right ∙ refl) (inv right-unit)) ∘
diff --git a/src/foundation/constant-maps.lagda.md b/src/foundation/constant-maps.lagda.md
index 50da27c564..69dd9619d5 100644
--- a/src/foundation/constant-maps.lagda.md
+++ b/src/foundation/constant-maps.lagda.md
@@ -12,6 +12,7 @@ open import foundation-core.constant-maps public
open import foundation.0-maps
open import foundation.dependent-pair-types
open import foundation.faithful-maps
+open import foundation.function-extensionality
open import foundation.type-arithmetic-unit-type
open import foundation.unit-type
open import foundation.universe-levels
@@ -21,7 +22,6 @@ open import foundation-core.contractible-maps
open import foundation-core.embeddings
open import foundation-core.equivalences
open import foundation-core.fibers-of-maps
-open import foundation-core.function-extensionality
open import foundation-core.function-types
open import foundation-core.identity-types
open import foundation-core.injective-maps
diff --git a/src/foundation/dependent-homotopies.lagda.md b/src/foundation/dependent-homotopies.lagda.md
new file mode 100644
index 0000000000..27e973f0e3
--- /dev/null
+++ b/src/foundation/dependent-homotopies.lagda.md
@@ -0,0 +1,76 @@
+# Dependent homotopies
+
+```agda
+module foundation.dependent-homotopies where
+```
+
+Imports
+
+```agda
+open import foundation.universe-levels
+
+open import foundation-core.dependent-identifications
+open import foundation-core.homotopies
+```
+
+
+
+## Idea
+
+Consider a [homotopy](foundation-core.homotopies.md) `H : f ~ g` between two
+functions `f g : (x : A) → B x`. Furthermore, consider a type family
+`C : (x : A) → B x → 𝒰` and two functions
+
+```text
+ f' : (x : A) → C x (f x)
+ g' : (x : A) → C x (g x)
+```
+
+A **dependent homotopy** from `f'` to `g'` over `H` is a family of
+[dependent identifications](foundation-core.dependent-identifications.md) from
+`f' x` to `g' x` over `H x`.
+
+## Definitions
+
+### Dependent homotopies
+
+```agda
+module _
+ {l1 l2 l3 : Level} {A : UU l1} {B : A → UU l2} (C : (x : A) → B x → UU l3)
+ {f g : (x : A) → B x} (H : f ~ g)
+ where
+
+ dependent-homotopy :
+ ((x : A) → C x (f x)) → ((x : A) → C x (g x)) → UU (l1 ⊔ l3)
+ dependent-homotopy f' g' =
+ (x : A) → dependent-identification (C x) (H x) (f' x) (g' x)
+```
+
+### The reflexive dependent homotopy
+
+```agda
+module _
+ {l1 l2 l3 : Level} {A : UU l1} {B : A → UU l2} (C : (x : A) → B x → UU l3)
+ {f : (x : A) → B x}
+ where
+
+ refl-dependent-homotopy :
+ {f' : (x : A) → C x (f x)} → dependent-homotopy C refl-htpy f' f'
+ refl-dependent-homotopy = refl-htpy
+```
+
+### Iterated dependent homotopies
+
+```agda
+module _
+ {l1 l2 l3 : Level} {A : UU l1} {B : A → UU l2} (C : (x : A) → B x → UU l3)
+ {f g : (x : A) → B x} {H K : f ~ g} (L : H ~ K)
+ where
+
+ dependent-homotopy² :
+ {f' : (x : A) → C x (f x)} {g' : (x : A) → C x (g x)} →
+ dependent-homotopy C H f' g' →
+ dependent-homotopy C K f' g' → UU (l1 ⊔ l3)
+ dependent-homotopy² {f'} {g'} H' K' =
+ (x : A) → dependent-identification² (C x) (L x) (H' x) (K' x)
+```
diff --git a/src/foundation/function-extensionality.lagda.md b/src/foundation/function-extensionality.lagda.md
index a50b0c7de6..af9e61b9f9 100644
--- a/src/foundation/function-extensionality.lagda.md
+++ b/src/foundation/function-extensionality.lagda.md
@@ -2,8 +2,6 @@
```agda
module foundation.function-extensionality where
-
-open import foundation-core.function-extensionality public
```
Imports
@@ -24,24 +22,83 @@ open import foundation-core.identity-types
## Idea
-The function extensionality axiom asserts that identifications of (dependent)
-functions are equivalently described as pointwise equalities between them. In
-other words, a function is completely determined by its values.
+The **function extensionality axiom** asserts that
+[identifications](foundation-core.identity-types.md) of (dependent) functions
+are [equivalently](foundation-core.equivalences.md) described as pointwise
+equalities between them. In other words, a function is completely determined by
+its values.
-In this file we postulate the function extensionality axiom. Its statement is
-defined in
-[`foundation-core.function-extensionality`](foundation-core.function-extensionality.md).
+## Definitions
-## Postulate
+### Equalities induce homotopies
```agda
-postulate
- funext : function-extensionality
+module _
+ {l1 l2 : Level} {A : UU l1} {B : A → UU l2}
+ where
+
+ htpy-eq : {f g : (x : A) → B x} → f = g → f ~ g
+ htpy-eq refl = refl-htpy
+```
+
+### An instance of function extensionality
+
+This property asserts that, _given_ two functions `f` and `g`, the map
+
+```text
+ htpy-eq : f = g → f ~ g
+```
+
+is an equivalence.
+
+```agda
+module _
+ {l1 l2 : Level} {A : UU l1} {B : A → UU l2}
+ where
+
+ instance-function-extensionality : (f g : (x : A) → B x) → UU (l1 ⊔ l2)
+ instance-function-extensionality f g = is-equiv (htpy-eq {f = f} {g})
+```
+
+### Based function extensionality
+
+This property asserts that, _given_ a function `f`, the map
+
+```text
+ htpy-eq : f = g → f ~ g
```
-### Components of `funext`
+is an equivalence is an equivalence for any function `g` of the same type.
```agda
+module _
+ {l1 l2 : Level} {A : UU l1} {B : A → UU l2}
+ where
+
+ based-function-extensionality : (f : (x : A) → B x) → UU (l1 ⊔ l2)
+ based-function-extensionality f =
+ (g : (x : A) → B x) → is-equiv (htpy-eq {f = f} {g})
+```
+
+### The function extensionality principle with respect to a universe level
+
+```agda
+function-extensionality-Level : (l1 l2 : Level) → UU (lsuc l1 ⊔ lsuc l2)
+function-extensionality-Level l1 l2 =
+ {A : UU l1} {B : A → UU l2}
+ (f g : (x : A) → B x) →
+ instance-function-extensionality f g
+```
+
+### The function extensionality axiom
+
+```agda
+function-extensionality : UUω
+function-extensionality = {l1 l2 : Level} → function-extensionality-Level l1 l2
+
+postulate
+ funext : function-extensionality
+
module _
{l1 l2 : Level} {A : UU l1} {B : A → UU l2}
where
@@ -77,6 +134,26 @@ module _
## Properties
+### Naturality of `htpy-eq`
+
+```agda
+square-htpy-eq :
+ {l1 l2 l3 : Level} {A : UU l1} {B : UU l2} {C : UU l3} (f : A → B) →
+ ( g h : B → C) →
+ ( (λ (p : (y : B) → g y = h y) (x : A) → p (f x)) ∘ htpy-eq) ~
+ ( htpy-eq ∘ (ap (precomp f C)))
+square-htpy-eq f g .g refl = refl
+```
+
+### Computing the action on paths of an evaluation map
+
+```agda
+ap-ev :
+ {l1 l2 : Level} {A : UU l1} {B : UU l2} (a : A) → {f g : A → B} →
+ (p : f = g) → (ap (λ h → h a) p) = htpy-eq p a
+ap-ev a refl = refl
+```
+
### `htpy-eq` preserves concatenation of identifications
```agda
@@ -116,7 +193,10 @@ module _
## See also
-- That the univalence axiom implies function extensionality is proven in
+- The fact that the univalence axiom implies function extensionality is proven
+ in
[`foundation.univalence-implies-function-extensionality`](foundation.univalence-implies-function-extensionality.md).
- Weak function extensionality is defined in
[`foundation.weak-function-extensionality`](foundation.weak-function-extensionality.md).
+- Transporting along homotopies is defined in
+ [`foundation.transport-along-homotopies`](foundation.transport-along-homotopies.md).
diff --git a/src/foundation/functoriality-propositional-truncation.lagda.md b/src/foundation/functoriality-propositional-truncation.lagda.md
index 80eb4d34d1..0bec93023c 100644
--- a/src/foundation/functoriality-propositional-truncation.lagda.md
+++ b/src/foundation/functoriality-propositional-truncation.lagda.md
@@ -9,12 +9,12 @@ module foundation.functoriality-propositional-truncation where
```agda
open import foundation.action-on-identifications-functions
open import foundation.dependent-pair-types
+open import foundation.function-extensionality
open import foundation.propositional-truncations
open import foundation.universe-levels
open import foundation-core.contractible-types
open import foundation-core.equivalences
-open import foundation-core.function-extensionality
open import foundation-core.function-types
open import foundation-core.homotopies
open import foundation-core.propositions
diff --git a/src/foundation/functoriality-truncation.lagda.md b/src/foundation/functoriality-truncation.lagda.md
index 99719b5469..d41e07346c 100644
--- a/src/foundation/functoriality-truncation.lagda.md
+++ b/src/foundation/functoriality-truncation.lagda.md
@@ -9,13 +9,13 @@ module foundation.functoriality-truncation where
```agda
open import foundation.action-on-identifications-functions
open import foundation.dependent-pair-types
+open import foundation.function-extensionality
open import foundation.truncations
open import foundation.universe-levels
open import foundation-core.commuting-squares-of-maps
open import foundation-core.contractible-types
open import foundation-core.equivalences
-open import foundation-core.function-extensionality
open import foundation-core.function-types
open import foundation-core.homotopies
open import foundation-core.truncation-levels
diff --git a/src/foundation/homotopies.lagda.md b/src/foundation/homotopies.lagda.md
index ceb2020f8b..2d9062cd1d 100644
--- a/src/foundation/homotopies.lagda.md
+++ b/src/foundation/homotopies.lagda.md
@@ -12,6 +12,7 @@ open import foundation-core.homotopies public
open import foundation.action-on-identifications-dependent-functions
open import foundation.action-on-identifications-functions
open import foundation.binary-equivalences
+open import foundation.commuting-squares-of-identifications
open import foundation.dependent-pair-types
open import foundation.function-extensionality
open import foundation.homotopy-induction
@@ -234,7 +235,8 @@ module _
compute-dependent-identification-eq-value-function :
{a0 a1 : A} (p : a0 = a1) (q : f a0 = g a0) (q' : f a1 = g a1) →
- (((ap f p) ∙ q') = (q ∙ (ap g p))) ≃ ((tr (eq-value f g) p q) = q')
+ ( coherence-square-identifications q (ap f p) (ap g p) q') ≃
+ ( tr (eq-value f g) p q = q')
pr1 (compute-dependent-identification-eq-value-function p q q') =
map-compute-dependent-identification-eq-value-function f g p q q'
pr2 (compute-dependent-identification-eq-value-function p q q') =
diff --git a/src/foundation/homotopy-induction.lagda.md b/src/foundation/homotopy-induction.lagda.md
index d213deb6c4..3e8644fcfe 100644
--- a/src/foundation/homotopy-induction.lagda.md
+++ b/src/foundation/homotopy-induction.lagda.md
@@ -133,4 +133,4 @@ module _
## See also
- [Homotopies](foundation.homotopies.md).
-- [Function extensionality](foundation-core.function-extensionality.md).
+- [Function extensionality](foundation.function-extensionality.md).
diff --git a/src/foundation/lawveres-fixed-point-theorem.lagda.md b/src/foundation/lawveres-fixed-point-theorem.lagda.md
index 749b5aeac7..00323ca065 100644
--- a/src/foundation/lawveres-fixed-point-theorem.lagda.md
+++ b/src/foundation/lawveres-fixed-point-theorem.lagda.md
@@ -9,11 +9,11 @@ module foundation.lawveres-fixed-point-theorem where
```agda
open import foundation.dependent-pair-types
open import foundation.existential-quantification
+open import foundation.function-extensionality
open import foundation.propositional-truncations
open import foundation.surjective-maps
open import foundation.universe-levels
-open import foundation-core.function-extensionality
open import foundation-core.identity-types
```
diff --git a/src/foundation/negated-equality.lagda.md b/src/foundation/negated-equality.lagda.md
index 94b324dbad..4959d79292 100644
--- a/src/foundation/negated-equality.lagda.md
+++ b/src/foundation/negated-equality.lagda.md
@@ -10,11 +10,11 @@ module foundation.negated-equality where
open import foundation.action-on-identifications-functions
open import foundation.binary-relations
open import foundation.dependent-pair-types
+open import foundation.function-extensionality
open import foundation.negation
open import foundation.universe-levels
open import foundation-core.cartesian-product-types
-open import foundation-core.function-extensionality
open import foundation-core.identity-types
open import foundation-core.propositions
```
diff --git a/src/foundation/path-algebra.lagda.md b/src/foundation/path-algebra.lagda.md
index 45af40a7d8..4bf44f330e 100644
--- a/src/foundation/path-algebra.lagda.md
+++ b/src/foundation/path-algebra.lagda.md
@@ -66,11 +66,11 @@ horizontal-concat-square :
{l : Level} {A : UU l} {a b c d e f : A}
(p-lleft : a = b) (p-lbottom : b = d) (p-rbottom : d = f)
(p-middle : c = d) (p-ltop : a = c) (p-rtop : c = e) (p-rright : e = f)
- (s-left : coherence-square-identifications p-lleft p-lbottom p-ltop p-middle)
+ (s-left : coherence-square-identifications p-ltop p-lleft p-middle p-lbottom)
(s-right :
- coherence-square-identifications p-middle p-rbottom p-rtop p-rright) →
+ coherence-square-identifications p-rtop p-middle p-rright p-rbottom) →
coherence-square-identifications
- p-lleft (p-lbottom ∙ p-rbottom) (p-ltop ∙ p-rtop) p-rright
+ (p-ltop ∙ p-rtop) p-lleft p-rright (p-lbottom ∙ p-rbottom)
horizontal-concat-square {a = a} {f = f}
p-lleft p-lbottom p-rbottom p-middle p-ltop p-rtop p-rright s-left s-right =
( inv (assoc p-lleft p-lbottom p-rbottom)) ∙
@@ -81,13 +81,13 @@ horizontal-concat-square {a = a} {f = f}
horizontal-unit-square :
{l : Level} {A : UU l} {a b : A} (p : a = b) →
- coherence-square-identifications p refl refl p
+ coherence-square-identifications refl p p refl
horizontal-unit-square p = right-unit
left-unit-law-horizontal-concat-square :
{l : Level} {A : UU l} {a b c d : A}
(p-left : a = b) (p-bottom : b = d) (p-top : a = c) (p-right : c = d) →
- (s : coherence-square-identifications p-left p-bottom p-top p-right) →
+ (s : coherence-square-identifications p-top p-left p-right p-bottom) →
( horizontal-concat-square
p-left refl p-bottom p-left refl p-top p-right
( horizontal-unit-square p-left)
@@ -100,11 +100,11 @@ vertical-concat-square :
{l : Level} {A : UU l} {a b c d e f : A}
(p-tleft : a = b) (p-bleft : b = c) (p-bbottom : c = f)
(p-middle : b = e) (p-ttop : a = d) (p-tright : d = e) (p-bright : e = f)
- (s-top : coherence-square-identifications p-tleft p-middle p-ttop p-tright)
+ (s-top : coherence-square-identifications p-ttop p-tleft p-tright p-middle)
(s-bottom :
- coherence-square-identifications p-bleft p-bbottom p-middle p-bright) →
+ coherence-square-identifications p-middle p-bleft p-bright p-bbottom) →
coherence-square-identifications
- (p-tleft ∙ p-bleft) p-bbottom p-ttop (p-tright ∙ p-bright)
+ p-ttop (p-tleft ∙ p-bleft) (p-tright ∙ p-bright) p-bbottom
vertical-concat-square {a = a} {f = f}
p-tleft p-bleft p-bbottom p-middle p-ttop p-tright p-bright s-top s-bottom =
( assoc p-tleft p-bleft p-bbottom) ∙
@@ -300,10 +300,10 @@ module _
nat-sq-right-unit-Id² :
coherence-square-identifications
- ( right-unit)
- ( α)
( horizontal-concat-Id² α refl)
( right-unit)
+ ( right-unit)
+ ( α)
nat-sq-right-unit-Id² =
( ( horizontal-concat-Id² refl (inv (ap-id α))) ∙
( nat-htpy htpy-right-unit α)) ∙
@@ -311,10 +311,10 @@ module _
nat-sq-left-unit-Id² :
coherence-square-identifications
- ( left-unit)
- ( α)
( horizontal-concat-Id² (refl {x = refl}) α)
( left-unit)
+ ( left-unit)
+ ( α)
nat-sq-left-unit-Id² =
( ( (inv (ap-id α) ∙ (nat-htpy htpy-left-unit α)) ∙ right-unit) ∙
( inv (left-unit-law-horizontal-concat-Id² α))) ∙ inv right-unit
@@ -353,20 +353,20 @@ module _
path-swap-nat-identification-left-whisk :
{q q' : y = z} (β : q = q') {p p' : x = y} (α : p = p') →
coherence-square-identifications
- ( identification-left-whisk p β)
- ( identification-right-whisk α q')
( identification-right-whisk α q)
+ ( identification-left-whisk p β)
( identification-left-whisk p' β)
+ ( identification-right-whisk α q')
path-swap-nat-identification-left-whisk β =
nat-htpy (htpy-identification-left-whisk β)
path-swap-nat-identification-right-whisk :
{p p' : x = y} (α : p = p') {q q' : y = z} (β : q = q') →
coherence-square-identifications
- ( identification-right-whisk α q)
- ( identification-left-whisk p' β)
( identification-left-whisk p β)
+ ( identification-right-whisk α q)
( identification-right-whisk α q')
+ ( identification-left-whisk p' β)
path-swap-nat-identification-right-whisk α =
nat-htpy (identification-right-whisk α)
@@ -400,10 +400,10 @@ module _
nat-sq-right-inv-Id² :
coherence-square-identifications
- ( right-inv p)
- ( refl)
( horizontal-concat-Id² α (horizontal-inv-Id² α))
+ ( right-inv p)
( right-inv p')
+ ( refl)
nat-sq-right-inv-Id² =
( ( ( horizontal-concat-Id² refl (inv (ap-const refl α))) ∙
( nat-htpy right-inv α)) ∙
@@ -416,10 +416,10 @@ module _
nat-sq-left-inv-Id² :
coherence-square-identifications
- ( left-inv p)
- ( refl)
( horizontal-concat-Id² (horizontal-inv-Id² α) α)
+ ( left-inv p)
( left-inv p')
+ ( refl)
nat-sq-left-inv-Id² =
( ( ( horizontal-concat-Id² refl (inv (ap-const refl α))) ∙
( nat-htpy left-inv α)) ∙
@@ -499,10 +499,10 @@ module _
nat-sq-ap-inv-Id² :
coherence-square-identifications
- ( ap-inv f p)
- ( horizontal-inv-Id² (ap² f α))
( ap² f (horizontal-inv-Id² α))
+ ( ap-inv f p)
( ap-inv f p')
+ ( horizontal-inv-Id² (ap² f α))
nat-sq-ap-inv-Id² =
(inv (horizontal-concat-Id² refl (ap-comp inv (ap f) α)) ∙
(nat-htpy (ap-inv f) α)) ∙
@@ -518,17 +518,17 @@ module _
where
nat-sq-ap-id-Id² :
- coherence-square-identifications (ap-id p) α (ap² id α) (ap-id p')
+ coherence-square-identifications (ap² id α) (ap-id p) (ap-id p') α
nat-sq-ap-id-Id² =
((horizontal-concat-Id² refl (inv (ap-id α))) ∙ (nat-htpy ap-id α))
nat-sq-ap-const-Id² :
(b : B) →
coherence-square-identifications
- ( ap-const b p)
- ( refl)
( ap² (const A B b) α)
+ ( ap-const b p)
( ap-const b p')
+ ( refl)
nat-sq-ap-const-Id² b =
( inv (horizontal-concat-Id² refl (ap-const refl α))) ∙
( nat-htpy (ap-const b) α)
@@ -544,10 +544,10 @@ module _
nat-sq-ap-comp-Id² :
coherence-square-identifications
- ( ap-comp g f p)
- ( (ap² g ∘ ap² f) α)
( ap² (g ∘ f) α)
+ ( ap-comp g f p)
( ap-comp g f p')
+ ( (ap² g ∘ ap² f) α)
nat-sq-ap-comp-Id² =
(horizontal-concat-Id² refl (inv (ap-comp (ap g) (ap f) α)) ∙
(nat-htpy (ap-comp g f) α))
@@ -725,12 +725,12 @@ module _
(p00̂1 : x001 = x011) (p0̂01 : x001 = x101) (p010̂ : x010 = x011)
(p0̂10 : x010 = x110) (p100̂ : x100 = x101) (p10̂0 : x100 = x110)
(p0̂11 : x011 = x111) (p10̂1 : x101 = x111) (p110̂ : x110 = x111)
- (p00̂0̂ : coherence-square-identifications p000̂ p00̂1 p00̂0 p010̂)
- (p0̂00̂ : coherence-square-identifications p000̂ p0̂01 p0̂00 p100̂)
- (p0̂0̂0 : coherence-square-identifications p00̂0 p0̂10 p0̂00 p10̂0)
- (p0̂0̂1 : coherence-square-identifications p00̂1 p0̂11 p0̂01 p10̂1)
- (p0̂10̂ : coherence-square-identifications p010̂ p0̂11 p0̂10 p110̂)
- (p10̂0̂ : coherence-square-identifications p100̂ p10̂1 p10̂0 p110̂) → UU l
+ (p00̂0̂ : coherence-square-identifications p00̂0 p000̂ p010̂ p00̂1)
+ (p0̂00̂ : coherence-square-identifications p0̂00 p000̂ p100̂ p0̂01)
+ (p0̂0̂0 : coherence-square-identifications p0̂00 p00̂0 p10̂0 p0̂10)
+ (p0̂0̂1 : coherence-square-identifications p0̂01 p00̂1 p10̂1 p0̂11)
+ (p0̂10̂ : coherence-square-identifications p0̂10 p010̂ p110̂ p0̂11)
+ (p10̂0̂ : coherence-square-identifications p10̂0 p100̂ p110̂ p10̂1) → UU l
cube
p000̂ p00̂0 p0̂00 p00̂1 p0̂01 p010̂ p0̂10 p100̂ p10̂0 p0̂11 p10̂1 p110̂
p00̂0̂ p0̂00̂ p0̂0̂0 p0̂0̂1 p0̂10̂ p10̂0̂ =
diff --git a/src/foundation/set-quotients.lagda.md b/src/foundation/set-quotients.lagda.md
index 22ec38744d..02f23d8a97 100644
--- a/src/foundation/set-quotients.lagda.md
+++ b/src/foundation/set-quotients.lagda.md
@@ -13,6 +13,7 @@ open import foundation.effective-maps-equivalence-relations
open import foundation.embeddings
open import foundation.equivalence-classes
open import foundation.equivalences
+open import foundation.function-extensionality
open import foundation.identity-types
open import foundation.inhabited-subtypes
open import foundation.reflecting-maps-equivalence-relations
@@ -25,7 +26,6 @@ open import foundation.universal-property-set-quotients
open import foundation.universe-levels
open import foundation-core.equivalence-relations
-open import foundation-core.function-extensionality
open import foundation-core.function-types
open import foundation-core.functoriality-dependent-function-types
open import foundation-core.homotopies
diff --git a/src/foundation/transport-along-higher-identifications.lagda.md b/src/foundation/transport-along-higher-identifications.lagda.md
index 44efce26a7..babae89b03 100644
--- a/src/foundation/transport-along-higher-identifications.lagda.md
+++ b/src/foundation/transport-along-higher-identifications.lagda.md
@@ -13,9 +13,10 @@ open import foundation.dependent-pair-types
open import foundation.homotopies
open import foundation.identity-types
open import foundation.path-algebra
-open import foundation.transport-along-identifications
open import foundation.universe-levels
open import foundation.whiskering-homotopies
+
+open import foundation-core.transport-along-identifications
```
@@ -49,10 +50,10 @@ module _
tr²-Id-right :
(α : q = q') (p : a = b) →
coherence-square-identifications
- ( tr² (Id a) α p)
- ( tr-Id-right q' p)
( tr-Id-right q p)
+ ( tr² (Id a) α p)
( identification-left-whisk p α)
+ ( tr-Id-right q' p)
tr²-Id-right α p =
inv-nat-htpy (λ (t : b = c) → tr-Id-right t p) α
```
@@ -78,19 +79,19 @@ module _
tr²-left-whisk :
(p : x = y) {q q' : y = z} (β : q = q') (b : B x) →
coherence-square-identifications
- ( tr² B (identification-left-whisk p β) b)
- ( tr-concat p q' b)
( tr-concat p q b)
+ ( tr² B (identification-left-whisk p β) b)
( htpy-right-whisk (tr² B β) (tr B p) b)
+ ( tr-concat p q' b)
tr²-left-whisk refl refl b = refl
tr²-right-whisk :
{p p' : x = y} (α : p = p') (q : y = z) (b : B x) →
coherence-square-identifications
- ( tr² B (identification-right-whisk α q) b)
- ( tr-concat p' q b)
( tr-concat p q b)
+ ( tr² B (identification-right-whisk α q) b)
( htpy-left-whisk (tr B q) (tr² B α) b)
+ ( tr-concat p' q b)
tr²-right-whisk refl refl b = inv right-unit
```
@@ -105,43 +106,43 @@ module _
tr³-htpy-swap-path-swap :
{q q' : y = z} (β : q = q') {p p' : x = y} (α : p = p') (b : B x) →
coherence-square-identifications
+ ( ( identification-right-whisk
+ ( tr²-concat (identification-left-whisk p β)
+ ( identification-right-whisk α q') b)
+ ( tr-concat p' q' b)) ∙
+ ( vertical-concat-square
+ ( tr² B (identification-left-whisk p β) b)
+ ( tr² B (identification-right-whisk α q') b)
+ ( tr-concat p' q' b)
+ ( tr-concat p q' b)
+ ( tr-concat p q b)
+ ( htpy-right-whisk (tr² B β) (tr B p) b)
+ ( htpy-left-whisk (tr B q') (tr² B α) b)
+ ( tr²-left-whisk p β b)
+ ( tr²-right-whisk α q' b)))
( identification-right-whisk
( tr³
( B)
( path-swap-nat-identification-left-whisk β α)
( b))
( tr-concat p' q' b))
+ ( identification-left-whisk
+ ( tr-concat p q b)
+ ( htpy-swap-nat-right-htpy (tr² B β) (tr² B α) b))
( ( identification-right-whisk
( tr²-concat
( identification-right-whisk α q)
( identification-left-whisk p' β) b)
( tr-concat p' q' b)) ∙
- ( vertical-concat-square
- ( tr² B (identification-right-whisk α q) b)
- ( tr² B (identification-left-whisk p' β) b)
- ( tr-concat p' q' b)
- ( tr-concat p' q b)
- ( tr-concat p q b)
- ( htpy-left-whisk (tr B q) (tr² B α) b)
- ( htpy-right-whisk (tr² B β) (tr B p') b)
- ( tr²-right-whisk α q b)
- ( tr²-left-whisk p' β b)))
- ( ( identification-right-whisk
- ( tr²-concat (identification-left-whisk p β)
- ( identification-right-whisk α q') b)
- ( tr-concat p' q' b)) ∙
- ( vertical-concat-square
- ( tr² B (identification-left-whisk p β) b)
- ( tr² B (identification-right-whisk α q') b)
- ( tr-concat p' q' b)
- ( tr-concat p q' b)
- ( tr-concat p q b)
- ( htpy-right-whisk (tr² B β) (tr B p) b)
- ( htpy-left-whisk (tr B q') (tr² B α) b)
- ( tr²-left-whisk p β b)
- ( tr²-right-whisk α q' b)))
- ( identification-left-whisk
- ( tr-concat p q b)
- ( htpy-swap-nat-right-htpy (tr² B β) (tr² B α) b))
+ ( vertical-concat-square
+ ( tr² B (identification-right-whisk α q) b)
+ ( tr² B (identification-left-whisk p' β) b)
+ ( tr-concat p' q' b)
+ ( tr-concat p' q b)
+ ( tr-concat p q b)
+ ( htpy-left-whisk (tr B q) (tr² B α) b)
+ ( htpy-right-whisk (tr² B β) (tr B p') b)
+ ( tr²-right-whisk α q b)
+ ( tr²-left-whisk p' β b)))
tr³-htpy-swap-path-swap {q = refl} refl {p = refl} refl b = refl
```
diff --git a/src/foundation/transport-along-homotopies.lagda.md b/src/foundation/transport-along-homotopies.lagda.md
new file mode 100644
index 0000000000..7d6f72b731
--- /dev/null
+++ b/src/foundation/transport-along-homotopies.lagda.md
@@ -0,0 +1,84 @@
+# Transport along homotopies
+
+```agda
+module foundation.transport-along-homotopies where
+```
+
+Imports
+
+```agda
+open import foundation.action-on-identifications-functions
+open import foundation.function-extensionality
+open import foundation.homotopies
+open import foundation.homotopy-induction
+open import foundation.transport-along-higher-identifications
+open import foundation.universe-levels
+
+open import foundation-core.identity-types
+open import foundation-core.transport-along-identifications
+```
+
+
+
+## Idea
+
+If `C : (x : A) → B x → 𝒰` is a type family, and `H : f ~ g` is a homotopy
+between functions `f g : (x : A) → B x`, then there is a natural transport
+operation that transports an element `z : C x (f x)` along the homotopy `H` to
+an element of type `C x (g x)`.
+
+## Definitions
+
+### Transporting along homotopies
+
+```agda
+module _
+ {l1 l2 l3 : Level} {A : UU l1} {B : A → UU l2} (C : (x : A) → B x → UU l3)
+ {f g : (x : A) → B x}
+ where
+
+ tr-htpy :
+ (f ~ g) → ((x : A) → C x (f x)) → ((x : A) → C x (g x))
+ tr-htpy H f' x = tr (C x) (H x) (f' x)
+
+ tr-htpy² :
+ {H K : f ~ g} (L : H ~ K) (f' : (x : A) → C x (f x)) →
+ tr-htpy H f' ~ tr-htpy K f'
+ tr-htpy² L f' x = tr² (C x) (L x) (f' x)
+```
+
+## Properties
+
+### Transport along a homotopy `H` is homotopic to transport along the identification `eq-htpy H`
+
+```agda
+module _
+ {l1 l2 l3 : Level} {A : UU l1} {B : A → UU l2} (C : (x : A) → B x → UU l3)
+ where
+
+ statement-compute-tr-htpy :
+ {f g : (x : A) → B x} (H : f ~ g) → UU (l1 ⊔ l3)
+ statement-compute-tr-htpy H =
+ tr (λ u → (x : A) → C x (u x)) (eq-htpy H) ~ tr-htpy C H
+
+ base-case-compute-tr-htpy :
+ {f : (x : A) → B x} → statement-compute-tr-htpy (refl-htpy' f)
+ base-case-compute-tr-htpy =
+ htpy-eq (ap (tr (λ u → (x : A) → C x (u x))) (eq-htpy-refl-htpy _))
+
+ abstract
+ compute-tr-htpy :
+ {f g : (x : A) → B x} (H : f ~ g) → statement-compute-tr-htpy H
+ compute-tr-htpy {f} {g} =
+ ind-htpy f
+ ( λ _ → statement-compute-tr-htpy)
+ ( base-case-compute-tr-htpy)
+
+ compute-tr-htpy-refl-htpy :
+ {f : (x : A) → B x} →
+ compute-tr-htpy (refl-htpy' f) = base-case-compute-tr-htpy
+ compute-tr-htpy-refl-htpy {f} =
+ compute-ind-htpy f
+ ( λ _ → statement-compute-tr-htpy)
+ ( base-case-compute-tr-htpy)
+```
diff --git a/src/foundation/transport-along-identifications.lagda.md b/src/foundation/transport-along-identifications.lagda.md
index 19aee17a05..12cf640e41 100644
--- a/src/foundation/transport-along-identifications.lagda.md
+++ b/src/foundation/transport-along-identifications.lagda.md
@@ -12,12 +12,13 @@ open import foundation-core.transport-along-identifications public
open import foundation.action-on-identifications-functions
open import foundation.commuting-squares-of-identifications
open import foundation.dependent-pair-types
+open import foundation.homotopies
open import foundation.path-algebra
+open import foundation.transport-along-higher-identifications
open import foundation.universe-levels
open import foundation-core.equivalences
open import foundation-core.function-types
-open import foundation-core.homotopies
open import foundation-core.identity-types
open import foundation-core.whiskering-homotopies
```
@@ -84,24 +85,6 @@ substitution-law-tr :
substitution-law-tr B f refl = refl
```
-### Computing transport in the type family of identifications with a fixed target
-
-```agda
-tr-Id-left :
- {l : Level} {A : UU l} {a b c : A} (q : b = c) (p : b = a) →
- tr (_= a) q p = ((inv q) ∙ p)
-tr-Id-left refl p = refl
-```
-
-### Computing transport in the type family of identifications with a fixed source
-
-```agda
-tr-Id-right :
- {l : Level} {A : UU l} {a b c : A} (q : b = c) (p : a = b) →
- tr (a =_) q p = (p ∙ q)
-tr-Id-right refl refl = refl
-```
-
### Computing transport of loops
```agda
diff --git a/src/foundation/uniqueness-set-quotients.lagda.md b/src/foundation/uniqueness-set-quotients.lagda.md
index e93f996528..5afe565939 100644
--- a/src/foundation/uniqueness-set-quotients.lagda.md
+++ b/src/foundation/uniqueness-set-quotients.lagda.md
@@ -10,6 +10,7 @@ module foundation.uniqueness-set-quotients where
open import foundation.action-on-identifications-functions
open import foundation.dependent-pair-types
open import foundation.equivalences
+open import foundation.function-extensionality
open import foundation.reflecting-maps-equivalence-relations
open import foundation.sets
open import foundation.subtype-identity-principle
@@ -18,7 +19,6 @@ open import foundation.universe-levels
open import foundation-core.contractible-types
open import foundation-core.equivalence-relations
-open import foundation-core.function-extensionality
open import foundation-core.function-types
open import foundation-core.functoriality-function-types
open import foundation-core.homotopies
diff --git a/src/foundation/univalence-implies-function-extensionality.lagda.md b/src/foundation/univalence-implies-function-extensionality.lagda.md
index 3722baad26..7eb97ba0d2 100644
--- a/src/foundation/univalence-implies-function-extensionality.lagda.md
+++ b/src/foundation/univalence-implies-function-extensionality.lagda.md
@@ -9,6 +9,7 @@ module foundation.univalence-implies-function-extensionality where
```agda
open import foundation.dependent-pair-types
open import foundation.equivalence-induction
+open import foundation.function-extensionality
open import foundation.type-arithmetic-dependent-pair-types
open import foundation.universe-levels
open import foundation.weak-function-extensionality
@@ -16,7 +17,6 @@ open import foundation.weak-function-extensionality
open import foundation-core.contractible-maps
open import foundation-core.contractible-types
open import foundation-core.fibers-of-maps
-open import foundation-core.function-extensionality
open import foundation-core.function-types
open import foundation-core.homotopies
open import foundation-core.identity-types
@@ -28,7 +28,7 @@ open import foundation-core.transport-along-identifications
## Idea
The [univalence axiom](foundation-core.univalence.md) implies
-[function extensionality](foundation-core.function-extensionality.md).
+[function extensionality](foundation.function-extensionality.md).
## Theorem
diff --git a/src/foundation/weak-function-extensionality.lagda.md b/src/foundation/weak-function-extensionality.lagda.md
index 34f2b61906..0e41c31c87 100644
--- a/src/foundation/weak-function-extensionality.lagda.md
+++ b/src/foundation/weak-function-extensionality.lagda.md
@@ -11,6 +11,7 @@ open import foundation.action-on-identifications-functions
open import foundation.decidable-equality
open import foundation.decidable-types
open import foundation.dependent-pair-types
+open import foundation.function-extensionality
open import foundation.fundamental-theorem-of-identity-types
open import foundation.universe-levels
@@ -19,7 +20,6 @@ open import foundation-core.coproduct-types
open import foundation-core.empty-types
open import foundation-core.equality-dependent-pair-types
open import foundation-core.equivalences
-open import foundation-core.function-extensionality
open import foundation-core.function-types
open import foundation-core.identity-types
open import foundation-core.propositions
@@ -32,7 +32,7 @@ open import foundation-core.propositions
**Weak function extensionality** is the principle that any dependent product of
[contractible types](foundation-core.contractible-types.md) is contractible.
This principle is [equivalent](foundation-core.equivalences.md) to
-[the function extensionality axiom](foundation-core.function-extensionality.md).
+[the function extensionality axiom](foundation.function-extensionality.md).
## Definition
diff --git a/src/group-theory/isomorphisms-semigroups.lagda.md b/src/group-theory/isomorphisms-semigroups.lagda.md
index 7a3dd8cf15..9b02b7058e 100644
--- a/src/group-theory/isomorphisms-semigroups.lagda.md
+++ b/src/group-theory/isomorphisms-semigroups.lagda.md
@@ -13,6 +13,7 @@ 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-extensionality
open import foundation.function-types
open import foundation.functoriality-dependent-pair-types
open import foundation.homotopies
@@ -23,8 +24,6 @@ open import foundation.torsorial-type-families
open import foundation.type-arithmetic-dependent-pair-types
open import foundation.universe-levels
-open import foundation-core.function-extensionality
-
open import group-theory.equivalences-semigroups
open import group-theory.homomorphisms-semigroups
open import group-theory.precategory-of-semigroups
diff --git a/src/synthetic-homotopy-theory/acyclic-types.lagda.md b/src/synthetic-homotopy-theory/acyclic-types.lagda.md
index d138ed4669..63214580ab 100644
--- a/src/synthetic-homotopy-theory/acyclic-types.lagda.md
+++ b/src/synthetic-homotopy-theory/acyclic-types.lagda.md
@@ -18,7 +18,9 @@ open import synthetic-homotopy-theory.suspensions-of-types
## Idea
-A type `A` is said to be **acyclic** if its suspension is contractible.
+A type `A` is said to be **acyclic** if its
+[suspension](synthetic-homotopy-theory.suspensions-of-types.md) is
+[contractible](foundation.contractible-types.md).
## Definition
diff --git a/src/synthetic-homotopy-theory/cavallos-trick.lagda.md b/src/synthetic-homotopy-theory/cavallos-trick.lagda.md
index 0baefe38cf..a147b24389 100644
--- a/src/synthetic-homotopy-theory/cavallos-trick.lagda.md
+++ b/src/synthetic-homotopy-theory/cavallos-trick.lagda.md
@@ -24,10 +24,13 @@ open import structured-types.pointed-types
## Idea
-Cavallo's trick is a way of upgrading an unpointed homotopy between pointed maps
-to a pointed homotopy. Originally, this trick was formulated by Evan Cavallo for
-homogeneous spaces, but it works as soon as the evaluation map `(id ~ id) → Ω B`
-has a section.
+**Cavallo's trick** is a way of upgrading an unpointed
+[homotopy](foundation.homotopies.md) between
+[pointed maps](structured-types.pointed-maps.md) to a
+[pointed homotopy](structured-types.pointed-homotopies.md).
+
+Originally, this trick was formulated by Evan Cavallo for homogeneous spaces,
+but it works as soon as the evaluation map `(id ~ id) → Ω B` has a section.
## Theorem
diff --git a/src/synthetic-homotopy-theory/circle.lagda.md b/src/synthetic-homotopy-theory/circle.lagda.md
index d4f1738a83..469a67856c 100644
--- a/src/synthetic-homotopy-theory/circle.lagda.md
+++ b/src/synthetic-homotopy-theory/circle.lagda.md
@@ -43,6 +43,11 @@ open import univalent-combinatorics.standard-finite-types
+## Idea
+
+**The circle** is the initial type equipped with a base point and a
+[loop](synthetic-homotopy-theory.loop-spaces.md).
+
## Postulates
```agda
@@ -301,13 +306,13 @@ sphere-1-circle-sphere-1-south-sphere-1 =
apply-up-suspension-meridian-suspension-sphere-1-circle-sphere-1 :
( n : Fin 2) →
coherence-square-identifications
- ( ap sphere-1-circle (ap circle-sphere-1 (meridian-suspension n)))
- ( sphere-1-circle-sphere-1-south-sphere-1)
( ap
( sphere-1-circle)
( ( circle-sphere-1-north-sphere-1-eq-base-𝕊¹) ∙
( map-sphere-0-eq-base-𝕊¹ n)))
+ ( ap sphere-1-circle (ap circle-sphere-1 (meridian-suspension n)))
( sphere-1-circle-base-𝕊¹-eq-south-sphere-1)
+ ( sphere-1-circle-sphere-1-south-sphere-1)
apply-up-suspension-meridian-suspension-sphere-1-circle-sphere-1 n =
( inv
( assoc
@@ -333,10 +338,10 @@ apply-up-suspension-meridian-suspension-sphere-1-circle-sphere-1 n =
apply-loop-universal-property-𝕊¹-sphere-1-circle-sphere-1 :
coherence-square-identifications
- ( ap sphere-1-circle loop-𝕊¹)
- ( sphere-1-circle-base-𝕊¹-eq-south-sphere-1)
( sphere-1-circle-base-𝕊¹-eq-north-sphere-1)
+ ( ap sphere-1-circle loop-𝕊¹)
( meridian-sphere 0 (zero-Fin 1))
+ ( sphere-1-circle-base-𝕊¹-eq-south-sphere-1)
apply-loop-universal-property-𝕊¹-sphere-1-circle-sphere-1 =
( inv
( assoc
@@ -447,10 +452,10 @@ circle-sphere-1-circle-base-𝕊¹ =
apply-up-suspension-meridian-one-suspension-circle-sphere-1-circle :
coherence-square-identifications
- ( ap circle-sphere-1 (inv (meridian-sphere 0 (one-Fin 1))))
- ( circle-sphere-1-north-sphere-1-eq-base-𝕊¹)
( refl)
+ ( ap circle-sphere-1 (inv (meridian-sphere 0 (one-Fin 1))))
( circle-sphere-1-south-sphere-1-eq-base-𝕊¹)
+ ( circle-sphere-1-north-sphere-1-eq-base-𝕊¹)
apply-up-suspension-meridian-one-suspension-circle-sphere-1-circle =
( identification-right-whisk
( ap-inv
@@ -478,10 +483,10 @@ apply-up-suspension-meridian-one-suspension-circle-sphere-1-circle =
apply-up-suspension-meridian-zero-suspension-circle-sphere-1-circle :
coherence-square-identifications
- ( ap (circle-sphere-1) (north-sphere-1-loop))
- ( circle-sphere-1-north-sphere-1-eq-base-𝕊¹)
( circle-sphere-1-north-sphere-1-eq-base-𝕊¹)
+ ( ap (circle-sphere-1) (north-sphere-1-loop))
( loop-𝕊¹)
+ ( circle-sphere-1-north-sphere-1-eq-base-𝕊¹)
apply-up-suspension-meridian-zero-suspension-circle-sphere-1-circle =
( identification-right-whisk
( ap-concat
@@ -504,10 +509,10 @@ apply-up-suspension-meridian-zero-suspension-circle-sphere-1-circle =
circle-sphere-1-circle-loop-𝕊¹ :
coherence-square-identifications
- ( ap circle-sphere-1 (ap sphere-1-circle loop-𝕊¹))
- ( circle-sphere-1-circle-base-𝕊¹)
( circle-sphere-1-circle-base-𝕊¹)
+ ( ap circle-sphere-1 (ap sphere-1-circle loop-𝕊¹))
( loop-𝕊¹)
+ ( circle-sphere-1-circle-base-𝕊¹)
circle-sphere-1-circle-loop-𝕊¹ =
( inv
( assoc
diff --git a/src/synthetic-homotopy-theory/cocones-under-spans-of-pointed-types.lagda.md b/src/synthetic-homotopy-theory/cocones-under-spans-of-pointed-types.lagda.md
index a6a1a67148..6c606499df 100644
--- a/src/synthetic-homotopy-theory/cocones-under-spans-of-pointed-types.lagda.md
+++ b/src/synthetic-homotopy-theory/cocones-under-spans-of-pointed-types.lagda.md
@@ -24,8 +24,12 @@ open import synthetic-homotopy-theory.cocones-under-spans
## Idea
-A cocone under a span of pointed types is a **pointed cocone** if it consists of
-pointed maps such that the proofs of point-preservation cohere.
+A [cocone under a span](synthetic-homotopy-theory.cocones-under-spans.md) of
+[pointed types](structured-types.pointed-types.md) is a **pointed cocone** if it
+consists of [pointed maps](structured-types.pointed-maps.md) equipped with a
+[pointed homotopy](structured-types.pointed-homotopies.md) witnessing that the
+naturality square
+[commutes](structured-types.commuting-squares-of-pointed-maps.md).
The type of pointed cocones under a span of pointed types is again canonically
pointed at the constant cocone, with `refl` as coherence proof.
diff --git a/src/synthetic-homotopy-theory/cocones-under-spans.lagda.md b/src/synthetic-homotopy-theory/cocones-under-spans.lagda.md
index a96698838e..9cd48baab3 100644
--- a/src/synthetic-homotopy-theory/cocones-under-spans.lagda.md
+++ b/src/synthetic-homotopy-theory/cocones-under-spans.lagda.md
@@ -31,8 +31,9 @@ open import foundation-core.torsorial-type-families
## Idea
-A cocone under a span `A <-f- S -g-> B` with vertex `X` consists of two maps
-`i : A → X` and `j : B → X` equipped with a homotopy witnessing that the square
+A **cocone under a [span](foundation.spans.md)** `A <-f- S -g-> B` with codomain
+`X` consists of two maps `i : A → X` and `j : B → X` equipped with a
+[homotopy](foundation.homotopies.md) witnessing that the square
```text
g
@@ -44,7 +45,7 @@ A cocone under a span `A <-f- S -g-> B` with vertex `X` consists of two maps
i
```
-commutes.
+[commutes](foundation.commuting-squares-of-maps.md).
## Definitions
diff --git a/src/synthetic-homotopy-theory/dependent-cocones-under-spans.lagda.md b/src/synthetic-homotopy-theory/dependent-cocones-under-spans.lagda.md
index 067b64566a..2a7e9afd49 100644
--- a/src/synthetic-homotopy-theory/dependent-cocones-under-spans.lagda.md
+++ b/src/synthetic-homotopy-theory/dependent-cocones-under-spans.lagda.md
@@ -44,7 +44,8 @@ functions
j' : (b : B) → P (j b)
```
-and a family of dependent identifications
+and a family of
+[dependent identifications](foundation.dependent-identifications.md)
```text
(s : S) → dependent-identification P (H s) (i' (f s)) (j' (g s)).
diff --git a/src/synthetic-homotopy-theory/dependent-pullback-property-pushouts.lagda.md b/src/synthetic-homotopy-theory/dependent-pullback-property-pushouts.lagda.md
index 2017650ebe..1f55709c41 100644
--- a/src/synthetic-homotopy-theory/dependent-pullback-property-pushouts.lagda.md
+++ b/src/synthetic-homotopy-theory/dependent-pullback-property-pushouts.lagda.md
@@ -22,6 +22,11 @@ open import synthetic-homotopy-theory.cocones-under-spans
## Idea
+The **dependent pullback property** of
+[pushouts](synthetic-homotopy-theory.pushouts.md) asserts that the type of
+sections of a type family over a pushout can be expressed as a
+[pullback](foundation.pullbacks.md).
+
The fact that the dependent pullback property of pushouts is
[logically equivalent](foundation.logical-equivalences.md) to the
[dependent universal property](synthetic-homotopy-theory.dependent-universal-property-pushouts.md)
diff --git a/src/synthetic-homotopy-theory/dependent-suspension-structures.lagda.md b/src/synthetic-homotopy-theory/dependent-suspension-structures.lagda.md
index 16f582a0c6..8f3ca5a3f0 100644
--- a/src/synthetic-homotopy-theory/dependent-suspension-structures.lagda.md
+++ b/src/synthetic-homotopy-theory/dependent-suspension-structures.lagda.md
@@ -226,12 +226,12 @@ module _
( λ S-htpy →
(x : X) →
coherence-square-identifications
- ( meridian-dependent-suspension-structure d x)
- ( S-htpy)
( ap
( tr B (meridian-suspension-structure c x))
( N-htpy))
- ( meridian-dependent-suspension-structure d' x)))
+ ( meridian-dependent-suspension-structure d x)
+ ( meridian-dependent-suspension-structure d' x)
+ ( S-htpy)))
module _
{l1 l2 l3 : Level} {X : UU l1} {Y : UU l2} (B : Y → UU l3)
@@ -256,12 +256,12 @@ module _
htpy-dependent-suspension-structure B d-susp-str0 d-susp-str1) →
( x : X) →
coherence-square-identifications
- ( meridian-dependent-suspension-structure d-susp-str0 x)
- ( south-htpy-dependent-suspension-structure d-susp-str)
( ap
( tr B (meridian-suspension-structure susp-str x))
( north-htpy-dependent-suspension-structure d-susp-str))
+ ( meridian-dependent-suspension-structure d-susp-str0 x)
( meridian-dependent-suspension-structure d-susp-str1 x)
+ ( south-htpy-dependent-suspension-structure d-susp-str)
meridian-htpy-dependent-suspension-structure = pr2 ∘ pr2
module _
@@ -281,10 +281,10 @@ module _
( λ S-htpy →
(x : X) →
coherence-square-identifications
- ( meridian-dependent-suspension-structure d x)
- ( S-htpy)
( ap (tr B (meridian-suspension-structure c x)) N-htpy)
- ( m x)))
+ ( meridian-dependent-suspension-structure d x)
+ ( m x)
+ ( S-htpy)))
( refl)
( refl , λ x → right-unit)
( λ N → id-equiv)
diff --git a/src/synthetic-homotopy-theory/double-loop-spaces.lagda.md b/src/synthetic-homotopy-theory/double-loop-spaces.lagda.md
index 4ff850188b..ecfdc7c547 100644
--- a/src/synthetic-homotopy-theory/double-loop-spaces.lagda.md
+++ b/src/synthetic-homotopy-theory/double-loop-spaces.lagda.md
@@ -24,6 +24,12 @@ open import synthetic-homotopy-theory.loop-spaces
+## Idea
+
+The **double loop space** of a [pointed type](structured-types.pointed-types.md)
+`A` is the [loop space](synthetic-homotopy-theory.loop-spaces.md) of the loop
+space of `A`.
+
## Definition
```agda
diff --git a/src/synthetic-homotopy-theory/free-loops.lagda.md b/src/synthetic-homotopy-theory/free-loops.lagda.md
index d97584d218..cfb9301b46 100644
--- a/src/synthetic-homotopy-theory/free-loops.lagda.md
+++ b/src/synthetic-homotopy-theory/free-loops.lagda.md
@@ -25,8 +25,9 @@ open import foundation.universe-levels
## Idea
-A free loop in a type `X` consists of a point `x : X` and an identification
-`x = x`. The type of free loops in `X` is equivalent to the type of maps
+A **free loop** in a type `X` consists of a point `x : X` and an
+[identification](foundation.identity-types.md) `x = x`. The type of free loops
+in `X` is [equivalent](foundation-core.equivalences.md) to the type of maps
`𝕊¹ → X`.
## Definitions
diff --git a/src/synthetic-homotopy-theory/functoriality-loop-spaces.lagda.md b/src/synthetic-homotopy-theory/functoriality-loop-spaces.lagda.md
index d489f066fd..af5d1a3962 100644
--- a/src/synthetic-homotopy-theory/functoriality-loop-spaces.lagda.md
+++ b/src/synthetic-homotopy-theory/functoriality-loop-spaces.lagda.md
@@ -28,9 +28,9 @@ open import synthetic-homotopy-theory.loop-spaces
## Idea
Any [pointed map](structured-types.pointed-maps.md) `f : A →∗ B` induces a
-pointed map `pointed-map-Ω f : Ω A →∗ Ω B`. Furthermore, this operation respects
-the groupoidal operations on
-[loop spaces](synthetic-homotopy-theory.loop-spaces.md).
+pointed map `pointed-map-Ω f : Ω A →∗ Ω B`` on
+[loop spaces](synthetic-homotopy-theory.loop-spaces.md). Furthermore, this
+operation respects the groupoidal operations on loop spaces.
## Definition
diff --git a/src/synthetic-homotopy-theory/groups-of-loops-in-1-types.lagda.md b/src/synthetic-homotopy-theory/groups-of-loops-in-1-types.lagda.md
index 07921e3055..cfa1ef495a 100644
--- a/src/synthetic-homotopy-theory/groups-of-loops-in-1-types.lagda.md
+++ b/src/synthetic-homotopy-theory/groups-of-loops-in-1-types.lagda.md
@@ -23,6 +23,14 @@ open import synthetic-homotopy-theory.loop-spaces
+## Idea
+
+The [loop space](synthetic-homotopy-theory.loop-spaces.md) of any
+[pointed](structured-types.pointed-types.md) [1-type](foundation.1-types.md) is
+a [group](group-theory.groups.md).
+
+## Definitions
+
```agda
module _
{l : Level} (A : Pointed-Type l)
diff --git a/src/synthetic-homotopy-theory/hatchers-acyclic-type.lagda.md b/src/synthetic-homotopy-theory/hatchers-acyclic-type.lagda.md
index 5e9c5ae4d4..68d89269b2 100644
--- a/src/synthetic-homotopy-theory/hatchers-acyclic-type.lagda.md
+++ b/src/synthetic-homotopy-theory/hatchers-acyclic-type.lagda.md
@@ -18,6 +18,7 @@ open import foundation.functoriality-cartesian-product-types
open import foundation.functoriality-dependent-pair-types
open import foundation.fundamental-theorem-of-identity-types
open import foundation.identity-types
+open import foundation.path-algebra
open import foundation.structure-identity-principle
open import foundation.torsorial-type-families
open import foundation.type-arithmetic-cartesian-product-types
@@ -38,9 +39,12 @@ open import synthetic-homotopy-theory.powers-of-loops
## Idea
-**Hatcher's** example of an acyclic type is a higher inductive type equipped
-with a point and two loops `a` and `b`, and identifications witnessing that
-`a⁵ = b³` and `b³ = (ab)²`.
+**Hatcher's [acyclic type](synthetic-homotopy-theory.acyclic-types.md)** is a
+higher inductive type [equipped](foundation.structure.md) with a base point and
+two [loops](synthetic-homotopy-theory.loop-spaces.md) `a` and `b`, and
+[identifications](foundation.identity-types.md) witnessing that `a⁵ = b³` and
+`b³ = (ab)²`. This type is acyclic, because the structure on Hatcher's acyclic
+type on any loop space is [contractible](foundation.contractible-types.md).
## Definitions
@@ -80,19 +84,19 @@ hom-algebra-Hatcher-Acyclic-Type
Σ ( map-Ω f a2 = b2)
( λ v →
( coherence-square-identifications
- ( map-power-nat-Ω 5 f a1 ∙ ap (power-nat-Ω 5 B) u)
- ( s1)
( ap (map-Ω f) r1)
- ( map-power-nat-Ω 3 f a2 ∙ ap (power-nat-Ω 3 B) v)) ×
- coherence-square-identifications
+ ( map-power-nat-Ω 5 f a1 ∙ ap (power-nat-Ω 5 B) u)
( map-power-nat-Ω 3 f a2 ∙ ap (power-nat-Ω 3 B) v)
- ( s2)
+ ( s1)) ×
+ ( coherence-square-identifications
( ap (map-Ω f) r2)
+ ( map-power-nat-Ω 3 f a2 ∙ ap (power-nat-Ω 3 B) v)
( ( map-power-nat-Ω 2 f (a1 ∙ a2)) ∙
( ap
( power-nat-Ω 2 B)
( ( preserves-mul-map-Ω f a1 a2) ∙
- ( ap-binary _∙_ u v)))))))
+ ( horizontal-concat-Id² u v))))
+ ( s2)))))
```
### The Hatcher acyclic type is the initial Hatcher acyclic algebra
diff --git a/src/synthetic-homotopy-theory/infinite-cyclic-types.lagda.md b/src/synthetic-homotopy-theory/infinite-cyclic-types.lagda.md
index c4f43f2b0e..d56de3d21a 100644
--- a/src/synthetic-homotopy-theory/infinite-cyclic-types.lagda.md
+++ b/src/synthetic-homotopy-theory/infinite-cyclic-types.lagda.md
@@ -16,6 +16,7 @@ open import foundation.contractible-maps
open import foundation.contractible-types
open import foundation.dependent-pair-types
open import foundation.equivalences
+open import foundation.function-extensionality
open import foundation.function-types
open import foundation.functoriality-dependent-function-types
open import foundation.functoriality-dependent-pair-types
@@ -28,8 +29,6 @@ open import foundation.torsorial-type-families
open import foundation.type-arithmetic-dependent-pair-types
open import foundation.universe-levels
-open import foundation-core.function-extensionality
-
open import structured-types.equivalences-types-equipped-with-endomorphisms
open import structured-types.initial-pointed-type-equipped-with-automorphism
open import structured-types.mere-equivalences-types-equipped-with-endomorphisms
@@ -44,6 +43,8 @@ open import univalent-combinatorics.cyclic-finite-types
+## Definitions
+
```agda
Infinite-Cyclic-Type : (l : Level) → UU (lsuc l)
Infinite-Cyclic-Type l = Cyclic-Type l zero-ℕ
diff --git a/src/synthetic-homotopy-theory/interval-type.lagda.md b/src/synthetic-homotopy-theory/interval-type.lagda.md
index 1492581343..eb421618ba 100644
--- a/src/synthetic-homotopy-theory/interval-type.lagda.md
+++ b/src/synthetic-homotopy-theory/interval-type.lagda.md
@@ -9,10 +9,13 @@ module synthetic-homotopy-theory.interval-type where
```agda
open import foundation.action-on-identifications-dependent-functions
open import foundation.action-on-identifications-functions
+open import foundation.commuting-squares-of-identifications
open import foundation.contractible-types
+open import foundation.dependent-identifications
open import foundation.dependent-pair-types
open import foundation.equivalences
open import foundation.function-extensionality
+open import foundation.homotopies
open import foundation.identity-types
open import foundation.structure-identity-principle
open import foundation.transport-along-identifications
@@ -23,8 +26,8 @@ open import foundation.universe-levels
## Idea
-The interval type is a higher inductive type with two points and an
-identification between them.
+**The interval type** is a higher inductive type with two points and an
+[identification](foundation.identity-types.md) between them.
## Postulates
@@ -41,22 +44,24 @@ postulate
ind-𝕀 :
{l : Level} (P : 𝕀 → UU l) (u : P source-𝕀) (v : P target-𝕀)
- (q : Id (tr P path-𝕀 u) v) → (x : 𝕀) → P x
+ (q : dependent-identification P path-𝕀 u v) → (x : 𝕀) → P x
compute-source-𝕀 :
{l : Level} {P : 𝕀 → UU l} (u : P source-𝕀) (v : P target-𝕀)
- (q : Id (tr P path-𝕀 u) v) → Id (ind-𝕀 P u v q source-𝕀) u
+ (q : dependent-identification P path-𝕀 u v) → Id (ind-𝕀 P u v q source-𝕀) u
compute-target-𝕀 :
{l : Level} {P : 𝕀 → UU l} (u : P source-𝕀) (v : P target-𝕀)
- (q : Id (tr P path-𝕀 u) v) → Id (ind-𝕀 P u v q target-𝕀) v
+ (q : dependent-identification P path-𝕀 u v) → Id (ind-𝕀 P u v q target-𝕀) v
compute-path-𝕀 :
{l : Level} {P : 𝕀 → UU l} (u : P source-𝕀) (v : P target-𝕀)
- (q : Id (tr P path-𝕀 u) v) →
- Id
- ( apd (ind-𝕀 P u v q) path-𝕀 ∙ compute-target-𝕀 u v q)
- ( ap (tr P path-𝕀) (compute-source-𝕀 u v q) ∙ q)
+ (q : dependent-identification P path-𝕀 u v) →
+ coherence-square-identifications
+ ( ap (tr P path-𝕀) (compute-source-𝕀 u v q))
+ ( apd (ind-𝕀 P u v q) path-𝕀)
+ ( q)
+ ( compute-target-𝕀 u v q)
```
## Properties
@@ -65,7 +70,10 @@ postulate
```agda
Data-𝕀 : {l : Level} → (𝕀 → UU l) → UU l
-Data-𝕀 P = Σ (P source-𝕀) (λ u → Σ (P target-𝕀) (λ v → Id (tr P path-𝕀 u) v))
+Data-𝕀 P =
+ Σ ( P source-𝕀)
+ ( λ u →
+ Σ ( P target-𝕀) (dependent-identification P path-𝕀 u))
ev-𝕀 : {l : Level} {P : 𝕀 → UU l} → ((x : 𝕀) → P x) → Data-𝕀 P
ev-𝕀 f = triple (f source-𝕀) (f target-𝕀) (apd f path-𝕀)
@@ -76,15 +84,27 @@ module _
Eq-Data-𝕀 : (x y : Data-𝕀 P) → UU l
Eq-Data-𝕀 x y =
- Σ ( Id (pr1 x) (pr1 y)) (λ α →
- Σ ( Id (pr1 (pr2 x)) (pr1 (pr2 y))) (λ β →
- Id ( pr2 (pr2 x) ∙ β) ( (ap (tr P path-𝕀) α) ∙ pr2 (pr2 y))))
+ Σ ( pr1 x = pr1 y)
+ ( λ α →
+ Σ ( pr1 (pr2 x) = pr1 (pr2 y))
+ ( λ β →
+ coherence-square-identifications
+ ( ap (tr P path-𝕀) α)
+ ( pr2 (pr2 x))
+ ( pr2 (pr2 y))
+ ( β)))
extensionality-Data-𝕀 : (x y : Data-𝕀 P) → Id x y ≃ Eq-Data-𝕀 x y
extensionality-Data-𝕀 (pair u (pair v α)) =
extensionality-Σ
( λ {u'} vα' p →
- Σ (Id v (pr1 vα')) (λ q → Id (α ∙ q) (ap (tr P path-𝕀) p ∙ pr2 vα')))
+ Σ ( v = pr1 vα')
+ ( λ q →
+ coherence-square-identifications
+ ( ap (tr P path-𝕀) p)
+ ( α)
+ ( pr2 vα')
+ ( q)))
( refl)
( pair refl right-unit)
( λ u' → id-equiv)
@@ -105,10 +125,14 @@ module _
eq-Eq-Data-𝕀' {x} {y} = map-inv-equiv (extensionality-Data-𝕀 x y)
eq-Eq-Data-𝕀 :
- {x y : Data-𝕀 P} (α : Id (pr1 x) (pr1 y))
- (β : Id (pr1 (pr2 x)) (pr1 (pr2 y)))
- (γ : Id (pr2 (pr2 x) ∙ β) (ap (tr P path-𝕀) α ∙ pr2 (pr2 y))) →
- Id x y
+ {x y : Data-𝕀 P} (α : pr1 x = pr1 y) (β : pr1 (pr2 x) = pr1 (pr2 y))
+ (γ :
+ coherence-square-identifications
+ ( ap (tr P path-𝕀) α)
+ ( pr2 (pr2 x))
+ ( pr2 (pr2 y))
+ ( β)) →
+ x = y
eq-Eq-Data-𝕀 α β γ = eq-Eq-Data-𝕀' (triple α β γ)
```
@@ -138,10 +162,13 @@ is-retraction-inv-ev-𝕀 :
is-retraction-inv-ev-𝕀 {l} {P} f =
eq-htpy
( ind-𝕀
- ( λ x → Id (inv-ev-𝕀 (ev-𝕀 f) x) (f x))
+ ( eq-value (inv-ev-𝕀 (ev-𝕀 f)) f)
( compute-source-𝕀 (f source-𝕀) (f target-𝕀) (apd f path-𝕀))
( compute-target-𝕀 (f source-𝕀) (f target-𝕀) (apd f path-𝕀))
- ( tr-value (inv-ev-𝕀 (ev-𝕀 f)) f path-𝕀
+ ( map-compute-dependent-identification-eq-value
+ ( inv-ev-𝕀 (ev-𝕀 f))
+ ( f)
+ ( path-𝕀)
( compute-source-𝕀 (f source-𝕀) (f target-𝕀) (apd f path-𝕀))
( compute-target-𝕀 (f source-𝕀) (f target-𝕀) (apd f path-𝕀))
( compute-path-𝕀 (f source-𝕀) (f target-𝕀) (apd f path-𝕀))))
@@ -152,16 +179,13 @@ abstract
is-equiv-ev-𝕀 P =
is-equiv-is-invertible inv-ev-𝕀 is-section-inv-ev-𝕀 is-retraction-inv-ev-𝕀
-tr-eq : {l : Level} {A : UU l} {x y : A} (p : Id x y) → Id (tr (Id x) p refl) p
-tr-eq refl = refl
-
contraction-𝕀 : (x : 𝕀) → Id source-𝕀 x
contraction-𝕀 =
ind-𝕀
( Id source-𝕀)
( refl)
( path-𝕀)
- ( tr-eq path-𝕀)
+ ( tr-Id-right path-𝕀 refl)
abstract
is-contr-𝕀 : is-contr 𝕀
diff --git a/src/synthetic-homotopy-theory/iterated-loop-spaces.lagda.md b/src/synthetic-homotopy-theory/iterated-loop-spaces.lagda.md
index bca49b8f41..b6d2d3f159 100644
--- a/src/synthetic-homotopy-theory/iterated-loop-spaces.lagda.md
+++ b/src/synthetic-homotopy-theory/iterated-loop-spaces.lagda.md
@@ -9,6 +9,7 @@ module synthetic-homotopy-theory.iterated-loop-spaces where
```agda
open import elementary-number-theory.natural-numbers
+open import foundation.iterating-functions
open import foundation.universe-levels
open import structured-types.pointed-types
@@ -18,12 +19,24 @@ open import synthetic-homotopy-theory.loop-spaces
+## Idea
+
+An **iterated loop space** `Ωⁿ A` is the
+[pointed type](structured-types.pointed-types.md) obtained by `n` times
+[iterating](foundation.iterating-functions.md) the
+[loop space](synthetic-homotopy-theory.loop-spaces.md) functor
+`Ω : Pointed-Type → Pointed-Type`.
+
```agda
module _
{l : Level}
where
iterated-loop-space : ℕ → Pointed-Type l → Pointed-Type l
- iterated-loop-space zero-ℕ A = A
- iterated-loop-space (succ-ℕ n) A = Ω (iterated-loop-space n A)
+ iterated-loop-space n = iterate n Ω
```
+
+## See also
+
+- [Double loop spaces](synthetic-homotopy-theory.double-loop-spaces.md)
+- [Triple loop spaces](synthetic-homotopy-theory.triple-loop-spaces.md)
diff --git a/src/synthetic-homotopy-theory/joins-of-types.lagda.md b/src/synthetic-homotopy-theory/joins-of-types.lagda.md
index fb4759be46..b1bf34beb5 100644
--- a/src/synthetic-homotopy-theory/joins-of-types.lagda.md
+++ b/src/synthetic-homotopy-theory/joins-of-types.lagda.md
@@ -32,7 +32,9 @@ open import synthetic-homotopy-theory.universal-property-pushouts
## Idea
-The join of `A` and `B` is the pushout of the span `A ← A × B → B`.
+The **join** of `A` and `B` is the
+[pushout](synthetic-homotopy-theory.pushouts.md) of the
+[span](foundation.spans.md) `A ← A × B → B`.
## Definition
diff --git a/src/synthetic-homotopy-theory/multiplication-circle.lagda.md b/src/synthetic-homotopy-theory/multiplication-circle.lagda.md
index 9e1ac9c52c..99ce5de1b9 100644
--- a/src/synthetic-homotopy-theory/multiplication-circle.lagda.md
+++ b/src/synthetic-homotopy-theory/multiplication-circle.lagda.md
@@ -30,7 +30,8 @@ Classically, the circle can be viewed as the subset of the complex numbers of
absolute value 1. The absolute value of a product of complex numbers is the
product of their absolute values. This implies that when we multiply two complex
numbers on the unit circle, the result is a complex number on the unit circle.
-This multiplicative structure carries over to the homotopy type of the circle.
+This multiplicative structure carries over to the homotopy type of the
+[circle](synthetic-homotopy-theory.circle.md).
## Definition
diff --git a/src/synthetic-homotopy-theory/plus-principle.lagda.md b/src/synthetic-homotopy-theory/plus-principle.lagda.md
index 546cc8f517..30af8ac24a 100644
--- a/src/synthetic-homotopy-theory/plus-principle.lagda.md
+++ b/src/synthetic-homotopy-theory/plus-principle.lagda.md
@@ -19,8 +19,10 @@ open import synthetic-homotopy-theory.acyclic-types
## Idea
-The **plus-principle** asserts that any acyclic 1-connected type is
-contractible.
+The **plus-principle** asserts that any
+[acyclic](synthetic-homotopy-theory.acyclic-types.md)
+[1-connected type](foundation.connected-types.md) is
+[contractible](foundation.contractible-types.md).
## Definition
diff --git a/src/synthetic-homotopy-theory/powers-of-loops.lagda.md b/src/synthetic-homotopy-theory/powers-of-loops.lagda.md
index 68d4b8f229..6a1e1c3b88 100644
--- a/src/synthetic-homotopy-theory/powers-of-loops.lagda.md
+++ b/src/synthetic-homotopy-theory/powers-of-loops.lagda.md
@@ -30,8 +30,9 @@ open import synthetic-homotopy-theory.loop-spaces
## Idea
-The `n`-th power of a loop `ω` in a type `A` is defined by iterated
-concatenation of `ω` with itself.
+The **`n`-th power of a [loop](synthetic-homotopy-theory.loop-spaces.md)** `ω`
+in a type `A` is defined by [iterated](foundation.iterating-functions.md)
+[concatenation](foundation.identity-types.md) of `ω` with itself.
## Definitions
diff --git a/src/synthetic-homotopy-theory/pullback-property-pushouts.lagda.md b/src/synthetic-homotopy-theory/pullback-property-pushouts.lagda.md
index 7b328268d2..e781819a3a 100644
--- a/src/synthetic-homotopy-theory/pullback-property-pushouts.lagda.md
+++ b/src/synthetic-homotopy-theory/pullback-property-pushouts.lagda.md
@@ -36,9 +36,11 @@ pushout of `S` if and only if the square
Y^A -----> Y^S
```
-is a pullback square for every type `Y`. Below, we first define the cone of this
-commuting square, and then we introduce the type pullback-property-pushout,
-which states that the above square is a pullback.
+is a [pullback square](foundation.pullback-squares.md) for every type `Y`.
+Below, we first define the [cone](foundation.cones-over-cospans.md) of this
+[commuting square](foundation.commuting-squares-of-maps.md), and then we
+introduce the type `pullback-property-pushout`, which states that the above
+square is a [pullback](foundation-core.universal-property-pullbacks.md).
## Definition
diff --git a/src/synthetic-homotopy-theory/pushouts-of-pointed-types.lagda.md b/src/synthetic-homotopy-theory/pushouts-of-pointed-types.lagda.md
index 0e17c56180..3ddcacfc23 100644
--- a/src/synthetic-homotopy-theory/pushouts-of-pointed-types.lagda.md
+++ b/src/synthetic-homotopy-theory/pushouts-of-pointed-types.lagda.md
@@ -23,8 +23,9 @@ open import synthetic-homotopy-theory.pushouts
## Idea
-Given a span of pointed maps, then the pushout is in fact a pushout diagram in
-the category of pointed types.
+Given a span of [pointed maps](structured-types.pointed-maps.md), then the
+[pushout](synthetic-homotopy-theory.pushouts.md) is in fact a pushout diagram in
+the (wild) category of [pointed types](structured-types.pointed-types.md).
## Definition
diff --git a/src/synthetic-homotopy-theory/smash-products-of-pointed-types.lagda.md b/src/synthetic-homotopy-theory/smash-products-of-pointed-types.lagda.md
index de94056b1e..2cf1d0ac32 100644
--- a/src/synthetic-homotopy-theory/smash-products-of-pointed-types.lagda.md
+++ b/src/synthetic-homotopy-theory/smash-products-of-pointed-types.lagda.md
@@ -24,8 +24,9 @@ open import synthetic-homotopy-theory.wedges-of-pointed-types
## Idea
-Given two pointed types `a : A` and `b : B` we may form their **smash product**
-as the following pushout
+Given two [pointed types](structured-types.pointed-types.md) `a : A` and `b : B`
+we may form their **smash product** as the following
+[pushout](synthetic-homotopy-theory.pushouts.md)
```text
A ∨∗ B ----> A ×∗ B
@@ -36,7 +37,9 @@ as the following pushout
```
where the map `A ∨∗ B → A ×∗ B` is the canonical inclusion
-`map-wedge-prod-Pointed-Type`.
+`map-wedge-prod-Pointed-Type` from the
+[wedge](synthetic-homotopy-theory.wedges-of-pointed-types.md) into the
+[pointed cartesian product](structured-types.pointed-cartesian-product-types.md).
## Definition
diff --git a/src/synthetic-homotopy-theory/suspensions-of-types.lagda.md b/src/synthetic-homotopy-theory/suspensions-of-types.lagda.md
index b69dfaa20f..a19d91dedd 100644
--- a/src/synthetic-homotopy-theory/suspensions-of-types.lagda.md
+++ b/src/synthetic-homotopy-theory/suspensions-of-types.lagda.md
@@ -279,14 +279,14 @@ module _
( suspension-structure-suspension X))
(x : X) →
coherence-square-identifications
- ( apd
- ( map-inv-dependent-up-suspension d)
- ( meridian-suspension x))
- ( dependent-up-suspension-south-suspension d)
( ap
( tr B (meridian-suspension x))
( dependent-up-suspension-north-suspension d))
+ ( apd
+ ( map-inv-dependent-up-suspension d)
+ ( meridian-suspension x))
( meridian-dependent-suspension-structure d x)
+ ( dependent-up-suspension-south-suspension d)
dependent-up-suspension-meridian-suspension d =
meridian-htpy-dependent-suspension-structure
( B)
@@ -315,10 +315,10 @@ module _
( λ q →
(x : X) →
coherence-square-identifications
- ( ap f (meridian-suspension x))
- ( q)
( p)
- ( ap g (meridian-suspension x))))
+ ( ap f (meridian-suspension x))
+ ( ap g (meridian-suspension x))
+ ( q)))
north-htpy-function-out-of-suspension :
htpy-function-out-of-suspension →
@@ -334,45 +334,31 @@ module _
(h : htpy-function-out-of-suspension) →
(x : X) →
coherence-square-identifications
- ( ap f (meridian-suspension x))
- ( south-htpy-function-out-of-suspension h)
( north-htpy-function-out-of-suspension h)
+ ( ap f (meridian-suspension x))
( ap g (meridian-suspension x))
+ ( south-htpy-function-out-of-suspension h)
meridian-htpy-function-out-of-suspension = pr2 ∘ pr2
equiv-htpy-function-out-of-suspension-htpy :
(f ~ g) ≃ htpy-function-out-of-suspension
equiv-htpy-function-out-of-suspension-htpy =
- equivalence-reasoning
- (f ~ g)
- ≃ dependent-suspension-structure
- ( eq-value f g)
- ( suspension-structure-suspension X)
- by equiv-dependent-up-suspension (eq-value f g)
- ≃ htpy-function-out-of-suspension
- by
+ ( equiv-tot
+ ( λ p →
equiv-tot
- ( λ p →
- equiv-tot
- ( λ q →
- equiv-Π
- ( λ x →
- coherence-square-identifications
- ( ap f (meridian-suspension x))
- ( q)
- ( p)
- ( ap g (meridian-suspension x)))
- ( id-equiv)
- ( λ x →
- inv-equiv
- ( compute-dependent-identification-eq-value-function
- ( f)
- ( g)
- ( meridian-suspension-structure
- ( suspension-structure-suspension X)
- ( x))
- ( p)
- ( q)))))
+ ( λ q →
+ equiv-Π-equiv-family
+ ( λ x →
+ inv-equiv
+ ( compute-dependent-identification-eq-value-function
+ ( f)
+ ( g)
+ ( meridian-suspension-structure
+ ( suspension-structure-suspension X)
+ ( x))
+ ( p)
+ ( q)))))) ∘e
+ ( equiv-dependent-up-suspension (eq-value f g))
htpy-function-out-of-suspension-htpy :
(f ~ g) → htpy-function-out-of-suspension
diff --git a/src/synthetic-homotopy-theory/triple-loop-spaces.lagda.md b/src/synthetic-homotopy-theory/triple-loop-spaces.lagda.md
index 255444edda..755771796b 100644
--- a/src/synthetic-homotopy-theory/triple-loop-spaces.lagda.md
+++ b/src/synthetic-homotopy-theory/triple-loop-spaces.lagda.md
@@ -22,6 +22,11 @@ open import synthetic-homotopy-theory.iterated-loop-spaces
+## Idea
+
+A **triple loop space** is a three times
+[iterated loop space](synthetic-homotopy-theory.iterated-loop-spaces.md).
+
## Definition
```agda