Transport along equivalences
Content created by Fredrik Bakke and Egbert Rijke.
Created on 2023-09-11.
Last modified on 2024-03-20.
module foundation.transport-along-equivalences where
Imports
open import foundation.action-on-equivalences-functions open import foundation.action-on-equivalences-type-families open import foundation.action-on-identifications-functions open import foundation.dependent-pair-types open import foundation.equivalence-extensionality open import foundation.equivalence-induction open import foundation.equivalences open import foundation.function-extensionality open import foundation.transport-along-identifications open import foundation.univalence open import foundation.universe-levels open import foundation-core.commuting-triangles-of-maps open import foundation-core.function-types open import foundation-core.homotopies open import foundation-core.identity-types open import foundation-core.injective-maps open import foundation-core.retractions open import foundation-core.sections
Idea
Given a map between universes f : 𝒰 → 𝒱
, applying
transport along identifications
to identifications arising from the
univalence axiom gives us
transport along equivalences¶:
tr-equiv f : X ≃ Y → f X ≃ f Y.
Alternatively, we could apply the action on identifications to get another action on equivalences. However, by univalence such a map must also be unique, hence these two constructions coincide.
Definitions
Transporting along equivalences
module _ {l1 l2 : Level} (f : UU l1 → UU l2) {X Y : UU l1} where map-tr-equiv : X ≃ Y → f X → f Y map-tr-equiv e = tr f (eq-equiv e) abstract is-equiv-map-tr-equiv : (e : X ≃ Y) → is-equiv (map-tr-equiv e) is-equiv-map-tr-equiv e = is-equiv-tr f (eq-equiv e) tr-equiv : X ≃ Y → f X ≃ f Y pr1 (tr-equiv e) = map-tr-equiv e pr2 (tr-equiv e) = is-equiv-map-tr-equiv e eq-tr-equiv : X ≃ Y → f X = f Y eq-tr-equiv = eq-equiv ∘ tr-equiv
Transporting along inverse equivalences
module _ {l1 l2 : Level} (f : UU l1 → UU l2) {X Y : UU l1} where map-tr-inv-equiv : X ≃ Y → f Y → f X map-tr-inv-equiv e = tr f (eq-equiv (inv-equiv e)) abstract is-equiv-map-tr-inv-equiv : (e : X ≃ Y) → is-equiv (map-tr-inv-equiv e) is-equiv-map-tr-inv-equiv e = is-equiv-tr f (eq-equiv (inv-equiv e)) tr-inv-equiv : X ≃ Y → f Y ≃ f X pr1 (tr-inv-equiv e) = map-tr-inv-equiv e pr2 (tr-inv-equiv e) = is-equiv-map-tr-inv-equiv e eq-tr-inv-equiv : X ≃ Y → f Y = f X eq-tr-inv-equiv = eq-equiv ∘ tr-inv-equiv
Properties
Transporting along id-equiv
is the identity equivalence
module _ {l1 l2 : Level} (f : UU l1 → UU l2) {X : UU l1} where compute-map-tr-equiv-id-equiv : map-tr-equiv f id-equiv = id compute-map-tr-equiv-id-equiv = ap (tr f) (compute-eq-equiv-id-equiv X) compute-tr-equiv-id-equiv : tr-equiv f id-equiv = id-equiv compute-tr-equiv-id-equiv = is-injective-map-equiv (ap (tr f) (compute-eq-equiv-id-equiv X))
Transport along equivalences preserves composition of equivalences
For any operation f : 𝒰₁ → 𝒰₂
and any two composable equivalences e : X ≃ Y
and e' : Y ≃ Z
in 𝒰₁
we obtain a commuting triangle
tr-equiv f e
f X ----------> f Y
\ /
tr-equiv f (e' ∘ e) \ / tr-equiv f e'
\ /
∨ ∨
f Z
module _ {l1 l2 : Level} (f : UU l1 → UU l2) {X Y Z : UU l1} (e : X ≃ Y) (e' : Y ≃ Z) where distributive-map-tr-equiv-equiv-comp : coherence-triangle-maps ( map-tr-equiv f (e' ∘e e)) ( map-tr-equiv f e') ( map-tr-equiv f e) distributive-map-tr-equiv-equiv-comp x = ( inv (ap (λ p → tr f p x) (compute-eq-equiv-comp-equiv e e'))) ∙ ( tr-concat (eq-equiv e) (eq-equiv e') x) distributive-tr-equiv-equiv-comp : tr-equiv f (e' ∘e e) = tr-equiv f e' ∘e tr-equiv f e distributive-tr-equiv-equiv-comp = eq-htpy-equiv distributive-map-tr-equiv-equiv-comp
Transporting along an inverse equivalence is inverse to transporting along the original equivalence
module _ {l1 l2 : Level} (f : UU l1 → UU l2) {X Y : UU l1} (e : X ≃ Y) where is-section-map-tr-inv-equiv : is-section (map-tr-equiv f e) (map-tr-equiv f (inv-equiv e)) is-section-map-tr-inv-equiv x = ( inv ( ap ( map-tr-equiv f e ∘ (λ p → tr f p x)) ( commutativity-inv-eq-equiv e))) ∙ ( is-section-inv-tr f (eq-equiv e) x) is-retraction-map-tr-inv-equiv : is-retraction (map-tr-equiv f e) (map-tr-equiv f (inv-equiv e)) is-retraction-map-tr-inv-equiv x = ( inv ( ap ( λ p → tr f p (map-tr-equiv f e x)) ( commutativity-inv-eq-equiv e))) ∙ ( is-retraction-inv-tr f (eq-equiv e) x)
Transposing transport along the inverse of an equivalence
module _ {l1 l2 : Level} (f : UU l1 → UU l2) {X Y : UU l1} (e : X ≃ Y) {u : f X} {v : f Y} where eq-transpose-map-tr-equiv : v = map-tr-equiv f e u → map-tr-equiv f (inv-equiv e) v = u eq-transpose-map-tr-equiv p = ap (map-tr-equiv f (inv-equiv e)) p ∙ is-retraction-map-tr-inv-equiv f e u eq-transpose-map-tr-equiv' : map-tr-equiv f e u = v → u = map-tr-equiv f (inv-equiv e) v eq-transpose-map-tr-equiv' p = ( inv (is-retraction-map-tr-inv-equiv f e u)) ∙ ( ap (map-tr-equiv f (inv-equiv e)) p)
Substitution law for transport along equivalences
module _ {l1 l2 l3 : Level} (g : UU l2 → UU l3) (f : UU l1 → UU l2) {X Y : UU l1} (e : X ≃ Y) where substitution-map-tr-equiv : map-tr-equiv g (action-equiv-family f e) ~ map-tr-equiv (g ∘ f) e substitution-map-tr-equiv X' = ( ap ( λ p → tr g p X') ( is-retraction-eq-equiv (action-equiv-function f e))) ∙ ( substitution-law-tr g f (eq-equiv e)) substitution-law-tr-equiv : tr-equiv g (action-equiv-family f e) = tr-equiv (g ∘ f) e substitution-law-tr-equiv = eq-htpy-equiv substitution-map-tr-equiv
Transporting along the action on equivalences of a function
compute-map-tr-equiv-action-equiv-family : {l1 l2 l3 l4 : Level} {B : UU l1 → UU l2} {D : UU l3 → UU l4} (f : UU l1 → UU l3) (g : (X : UU l1) → B X → D (f X)) {X Y : UU l1} (e : X ≃ Y) (X' : B X) → map-tr-equiv D (action-equiv-family f e) (g X X') = g Y (map-tr-equiv B e X') compute-map-tr-equiv-action-equiv-family {D = D} f g {X} e X' = ( ap ( λ p → tr D p (g X X')) ( is-retraction-eq-equiv (action-equiv-function f e))) ∙ ( tr-ap f g (eq-equiv e) X')
Transport along equivalences and the action on equivalences in the universe coincide
module _ {l1 l2 : Level} (f : UU l1 → UU l2) {X Y : UU l1} (e : X ≃ Y) where eq-tr-equiv-action-equiv-family : tr-equiv f e = action-equiv-family f e eq-tr-equiv-action-equiv-family = ind-equiv ( λ Y d → tr-equiv f d = action-equiv-family f d) ( compute-tr-equiv-id-equiv f ∙ inv (compute-action-equiv-family-id-equiv f)) ( e) eq-map-tr-equiv-map-action-equiv-family : map-tr-equiv f e = map-action-equiv-family f e eq-map-tr-equiv-map-action-equiv-family = ap map-equiv eq-tr-equiv-action-equiv-family
Recent changes
- 2024-03-20. Fredrik Bakke. chore: Janitorial work in foundation (#1086).
- 2024-02-06. Egbert Rijke and Fredrik Bakke. Refactor files about identity types and homotopies (#1014).
- 2024-01-28. Egbert Rijke. Span diagrams (#1007).
- 2024-01-12. Fredrik Bakke. Make type arguments implicit for
eq-equiv
(#998). - 2023-09-15. Fredrik Bakke. Define representations of monoids (#765).