# Pointed equivalences
```agda
module structured-types.pointed-equivalences where
```
<details><summary>Imports</summary>
```agda
open import foundation.action-on-identifications-functions
open import foundation.binary-equivalences
open import foundation.cartesian-product-types
open import foundation.commuting-squares-of-identifications
open import foundation.contractible-maps
open import foundation.contractible-types
open import foundation.dependent-pair-types
open import foundation.embeddings
open import foundation.equivalences
open import foundation.fibers-of-maps
open import foundation.function-extensionality
open import foundation.function-types
open import foundation.functoriality-dependent-pair-types
open import foundation.homotopies
open import foundation.identity-types
open import foundation.injective-maps
open import foundation.path-algebra
open import foundation.propositions
open import foundation.retractions
open import foundation.sections
open import foundation.structure-identity-principle
open import foundation.torsorial-type-families
open import foundation.transposition-identifications-along-equivalences
open import foundation.type-arithmetic-dependent-pair-types
open import foundation.univalence
open import foundation.universe-levels
open import foundation.whiskering-identifications-concatenation
open import structured-types.pointed-homotopies
open import structured-types.pointed-maps
open import structured-types.pointed-retractions
open import structured-types.pointed-sections
open import structured-types.pointed-types
open import structured-types.postcomposition-pointed-maps
open import structured-types.precomposition-pointed-maps
open import structured-types.universal-property-pointed-equivalences
open import structured-types.whiskering-pointed-homotopies-composition
```
</details>
## Idea
A {{#concept "pointed equivalence" Agda=_≃∗_}} `e : A ≃∗ B` consists of an
[equivalence](foundation-core.equivalences.md) `e : A ≃ B` equipped with an
[identification](foundation-core.identity-types.md) `p : e * = *` witnessing
that the underlying map of `e` preserves the base point of `A`.
The notion of pointed equivalence is described equivalently as a
[pointed map](structured-types.pointed-maps.md) of which the underlying function
is an [equivalence](foundation-core.equivalences.md), i.e.,
```text
(A ≃∗ B) ≃ Σ (f : A →∗ B), is-equiv (map-pointed-map f)
```
Furthermore, a pointed equivalence can also be described equivalently as an
equivalence in the category of
[pointed types](structured-types.pointed-types.md).
## Definitions
### The predicate of being a pointed equivalence
```agda
module _
{l1 l2 : Level} {A : Pointed-Type l1} {B : Pointed-Type l2} (f : A →∗ B)
where
is-pointed-equiv : UU (l1 ⊔ l2)
is-pointed-equiv = is-equiv (map-pointed-map f)
is-prop-is-pointed-equiv : is-prop is-pointed-equiv
is-prop-is-pointed-equiv = is-property-is-equiv (map-pointed-map f)
is-pointed-equiv-Prop : Prop (l1 ⊔ l2)
is-pointed-equiv-Prop = is-equiv-Prop (map-pointed-map f)
module _
(H : is-pointed-equiv)
where
map-inv-is-pointed-equiv : type-Pointed-Type B → type-Pointed-Type A
map-inv-is-pointed-equiv = map-inv-is-equiv H
is-section-map-inv-is-pointed-equiv :
is-section (map-pointed-map f) map-inv-is-pointed-equiv
is-section-map-inv-is-pointed-equiv = is-section-map-inv-is-equiv H
is-retraction-map-inv-is-pointed-equiv :
is-retraction (map-pointed-map f) map-inv-is-pointed-equiv
is-retraction-map-inv-is-pointed-equiv =
is-retraction-map-inv-is-equiv H
preserves-point-map-inv-is-pointed-equiv :
map-inv-is-pointed-equiv (point-Pointed-Type B) = point-Pointed-Type A
preserves-point-map-inv-is-pointed-equiv =
preserves-point-is-retraction-pointed-map f
( map-inv-is-pointed-equiv)
( is-retraction-map-inv-is-pointed-equiv)
pointed-map-inv-is-pointed-equiv : B →∗ A
pointed-map-inv-is-pointed-equiv =
pointed-map-is-retraction-pointed-map f
( map-inv-is-pointed-equiv)
( is-retraction-map-inv-is-pointed-equiv)
coherence-point-is-retraction-map-inv-is-pointed-equiv :
coherence-point-unpointed-htpy-pointed-Π
( pointed-map-inv-is-pointed-equiv ∘∗ f)
( id-pointed-map)
( is-retraction-map-inv-is-pointed-equiv)
coherence-point-is-retraction-map-inv-is-pointed-equiv =
coherence-point-is-retraction-pointed-map f
( map-inv-is-pointed-equiv)
( is-retraction-map-inv-is-pointed-equiv)
is-pointed-retraction-pointed-map-inv-is-pointed-equiv :
is-pointed-retraction f pointed-map-inv-is-pointed-equiv
is-pointed-retraction-pointed-map-inv-is-pointed-equiv =
is-pointed-retraction-is-retraction-pointed-map f
( map-inv-is-pointed-equiv)
( is-retraction-map-inv-is-pointed-equiv)
coherence-point-is-section-map-inv-is-pointed-equiv :
coherence-point-unpointed-htpy-pointed-Π
( f ∘∗ pointed-map-inv-is-pointed-equiv)
( id-pointed-map)
( is-section-map-inv-is-pointed-equiv)
coherence-point-is-section-map-inv-is-pointed-equiv =
( right-whisker-concat
( ap-concat
( map-pointed-map f)
( inv (ap _ (preserves-point-pointed-map f)))
( _) ∙
( horizontal-concat-Id²
( ap-inv
( map-pointed-map f)
( ap _ (preserves-point-pointed-map f)) ∙
( inv
( ap
( inv)
( ap-comp
( map-pointed-map f)
( map-inv-is-pointed-equiv)
( preserves-point-pointed-map f)))))
( inv (coherence-map-inv-is-equiv H (point-Pointed-Type A)))))
( preserves-point-pointed-map f)) ∙
( assoc
( inv
( ap
( map-pointed-map f ∘ map-inv-is-pointed-equiv)
( preserves-point-pointed-map f)))
( is-section-map-inv-is-pointed-equiv _)
( preserves-point-pointed-map f)) ∙
( inv
( ( right-unit) ∙
( left-transpose-eq-concat
( ap
( map-pointed-map f ∘ map-inv-is-pointed-equiv)
( preserves-point-pointed-map f))
( is-section-map-inv-is-pointed-equiv _)
( ( is-section-map-inv-is-pointed-equiv _) ∙
( preserves-point-pointed-map f))
( ( inv (nat-htpy is-section-map-inv-is-pointed-equiv _)) ∙
( left-whisker-concat
( is-section-map-inv-is-pointed-equiv _)
( ap-id (preserves-point-pointed-map f)))))))
is-pointed-section-pointed-map-inv-is-pointed-equiv :
is-pointed-section f pointed-map-inv-is-pointed-equiv
pr1 is-pointed-section-pointed-map-inv-is-pointed-equiv =
is-section-map-inv-is-pointed-equiv
pr2 is-pointed-section-pointed-map-inv-is-pointed-equiv =
coherence-point-is-section-map-inv-is-pointed-equiv
```
### Pointed equivalences
```agda
pointed-equiv :
{l1 l2 : Level} (A : Pointed-Type l1) (B : Pointed-Type l2) → UU (l1 ⊔ l2)
pointed-equiv A B =
Σ ( type-Pointed-Type A ≃ type-Pointed-Type B)
( λ e → map-equiv e (point-Pointed-Type A) = point-Pointed-Type B)
infix 6 _≃∗_
_≃∗_ = pointed-equiv
module _
{l1 l2 : Level} {A : Pointed-Type l1} {B : Pointed-Type l2} (e : A ≃∗ B)
where
equiv-pointed-equiv : type-Pointed-Type A ≃ type-Pointed-Type B
equiv-pointed-equiv = pr1 e
map-pointed-equiv : type-Pointed-Type A → type-Pointed-Type B
map-pointed-equiv = map-equiv equiv-pointed-equiv
preserves-point-pointed-equiv :
map-pointed-equiv (point-Pointed-Type A) = point-Pointed-Type B
preserves-point-pointed-equiv = pr2 e
pointed-map-pointed-equiv : A →∗ B
pr1 pointed-map-pointed-equiv = map-pointed-equiv
pr2 pointed-map-pointed-equiv = preserves-point-pointed-equiv
is-equiv-map-pointed-equiv : is-equiv map-pointed-equiv
is-equiv-map-pointed-equiv = is-equiv-map-equiv equiv-pointed-equiv
is-pointed-equiv-pointed-equiv :
is-pointed-equiv pointed-map-pointed-equiv
is-pointed-equiv-pointed-equiv = is-equiv-map-pointed-equiv
pointed-map-inv-pointed-equiv : B →∗ A
pointed-map-inv-pointed-equiv =
pointed-map-inv-is-pointed-equiv
( pointed-map-pointed-equiv)
( is-pointed-equiv-pointed-equiv)
map-inv-pointed-equiv : type-Pointed-Type B → type-Pointed-Type A
map-inv-pointed-equiv =
map-inv-is-pointed-equiv
( pointed-map-pointed-equiv)
( is-pointed-equiv-pointed-equiv)
preserves-point-map-inv-pointed-equiv :
map-inv-pointed-equiv (point-Pointed-Type B) = point-Pointed-Type A
preserves-point-map-inv-pointed-equiv =
preserves-point-map-inv-is-pointed-equiv
( pointed-map-pointed-equiv)
( is-pointed-equiv-pointed-equiv)
is-pointed-section-pointed-map-inv-pointed-equiv :
is-pointed-section
( pointed-map-pointed-equiv)
( pointed-map-inv-pointed-equiv)
is-pointed-section-pointed-map-inv-pointed-equiv =
is-pointed-section-pointed-map-inv-is-pointed-equiv
( pointed-map-pointed-equiv)
( is-pointed-equiv-pointed-equiv)
is-section-map-inv-pointed-equiv :
is-section
( map-pointed-equiv)
( map-inv-pointed-equiv)
is-section-map-inv-pointed-equiv =
is-section-map-inv-is-pointed-equiv
( pointed-map-pointed-equiv)
( is-pointed-equiv-pointed-equiv)
coherence-point-is-section-map-inv-pointed-equiv :
coherence-point-unpointed-htpy-pointed-Π
( pointed-map-pointed-equiv ∘∗ pointed-map-inv-pointed-equiv)
( id-pointed-map)
( is-section-map-inv-pointed-equiv)
coherence-point-is-section-map-inv-pointed-equiv =
coherence-point-is-section-map-inv-is-pointed-equiv
( pointed-map-pointed-equiv)
( is-pointed-equiv-pointed-equiv)
is-pointed-retraction-pointed-map-inv-pointed-equiv :
is-pointed-retraction
( pointed-map-pointed-equiv)
( pointed-map-inv-pointed-equiv)
is-pointed-retraction-pointed-map-inv-pointed-equiv =
is-pointed-retraction-pointed-map-inv-is-pointed-equiv
( pointed-map-pointed-equiv)
( is-pointed-equiv-pointed-equiv)
is-retraction-map-inv-pointed-equiv :
is-retraction
( map-pointed-equiv)
( map-inv-pointed-equiv)
is-retraction-map-inv-pointed-equiv =
is-retraction-map-inv-is-pointed-equiv
( pointed-map-pointed-equiv)
( is-pointed-equiv-pointed-equiv)
coherence-point-is-retraction-map-inv-pointed-equiv :
coherence-point-unpointed-htpy-pointed-Π
( pointed-map-inv-pointed-equiv ∘∗ pointed-map-pointed-equiv)
( id-pointed-map)
( is-retraction-map-inv-pointed-equiv)
coherence-point-is-retraction-map-inv-pointed-equiv =
coherence-point-is-retraction-map-inv-is-pointed-equiv
( pointed-map-pointed-equiv)
( is-pointed-equiv-pointed-equiv)
```
### The equivalence between pointed equivalences and the type of pointed maps that are pointed equivalences
```agda
module _
{l1 l2 : Level} (A : Pointed-Type l1) (B : Pointed-Type l2)
where
compute-pointed-equiv : (A ≃∗ B) ≃ Σ (A →∗ B) is-pointed-equiv
compute-pointed-equiv = equiv-right-swap-Σ
inv-compute-pointed-equiv : Σ (A →∗ B) is-pointed-equiv ≃ (A ≃∗ B)
inv-compute-pointed-equiv = equiv-right-swap-Σ
```
### The identity pointed equivalence
```agda
module _
{l : Level} {A : Pointed-Type l}
where
id-pointed-equiv : A ≃∗ A
pr1 id-pointed-equiv = id-equiv
pr2 id-pointed-equiv = refl
```
### Composition of pointed equivalences
```agda
module _
{l1 l2 l3 : Level}
{A : Pointed-Type l1} {B : Pointed-Type l2} {C : Pointed-Type l3}
where
comp-pointed-equiv : (B ≃∗ C) → (A ≃∗ B) → (A ≃∗ C)
pr1 (comp-pointed-equiv f e) =
equiv-pointed-equiv f ∘e equiv-pointed-equiv e
pr2 (comp-pointed-equiv f e) =
preserves-point-comp-pointed-map
( pointed-map-pointed-equiv f)
( pointed-map-pointed-equiv e)
```
### Inverses of pointed equivalences
```agda
module _
{l1 l2 : Level} {A : Pointed-Type l1} {B : Pointed-Type l2}
(e : A ≃∗ B)
where
abstract
is-pointed-equiv-inv-pointed-equiv :
is-pointed-equiv (pointed-map-inv-pointed-equiv e)
is-pointed-equiv-inv-pointed-equiv =
is-equiv-is-invertible
( map-pointed-equiv e)
( is-retraction-map-inv-pointed-equiv e)
( is-section-map-inv-pointed-equiv e)
equiv-inv-pointed-equiv : type-Pointed-Type B ≃ type-Pointed-Type A
pr1 equiv-inv-pointed-equiv = map-inv-pointed-equiv e
pr2 equiv-inv-pointed-equiv = is-pointed-equiv-inv-pointed-equiv
inv-pointed-equiv : B ≃∗ A
pr1 inv-pointed-equiv = equiv-inv-pointed-equiv
pr2 inv-pointed-equiv = preserves-point-map-inv-pointed-equiv e
```
## Properties
### Extensionality of the universe of pointed types
```agda
module _
{l1 : Level} (A : Pointed-Type l1)
where
abstract
is-torsorial-pointed-equiv :
is-torsorial (λ (B : Pointed-Type l1) → A ≃∗ B)
is-torsorial-pointed-equiv =
is-torsorial-Eq-structure
( is-torsorial-equiv (type-Pointed-Type A))
( type-Pointed-Type A , id-equiv)
( is-torsorial-Id (point-Pointed-Type A))
extensionality-Pointed-Type : (B : Pointed-Type l1) → (A = B) ≃ (A ≃∗ B)
extensionality-Pointed-Type =
extensionality-Σ
( λ b e → map-equiv e (point-Pointed-Type A) = b)
( id-equiv)
( refl)
( λ B → equiv-univalence)
( λ a → id-equiv)
eq-pointed-equiv : (B : Pointed-Type l1) → A ≃∗ B → A = B
eq-pointed-equiv B = map-inv-equiv (extensionality-Pointed-Type B)
```
### Any pointed map satisfying the universal property of pointed equivalences is a pointed equivalence
In other words, any pointed map `f : A →∗ B` such that precomposing by `f`
```text
- ∘∗ f : (B →∗ C) → (A →∗ C)
```
is an equivalence for any pointed type `C`, is an equivalence.
```agda
module _
{l1 l2 : Level} {A : Pointed-Type l1} {B : Pointed-Type l2} (f : A →∗ B)
(H : universal-property-pointed-equiv f)
where
pointed-map-inv-is-pointed-equiv-universal-property-pointed-equiv : B →∗ A
pointed-map-inv-is-pointed-equiv-universal-property-pointed-equiv =
map-inv-is-equiv (H A) id-pointed-map
map-inv-is-pointed-equiv-universal-property-pointed-equiv :
type-Pointed-Type B → type-Pointed-Type A
map-inv-is-pointed-equiv-universal-property-pointed-equiv =
map-pointed-map
pointed-map-inv-is-pointed-equiv-universal-property-pointed-equiv
preserves-point-map-inv-is-pointed-equiv-universal-property-pointed-equiv :
map-inv-is-pointed-equiv-universal-property-pointed-equiv
( point-Pointed-Type B) =
point-Pointed-Type A
preserves-point-map-inv-is-pointed-equiv-universal-property-pointed-equiv =
preserves-point-pointed-map
pointed-map-inv-is-pointed-equiv-universal-property-pointed-equiv
is-pointed-retraction-pointed-map-inv-is-pointed-equiv-universal-property-pointed-equiv :
is-pointed-retraction f
pointed-map-inv-is-pointed-equiv-universal-property-pointed-equiv
is-pointed-retraction-pointed-map-inv-is-pointed-equiv-universal-property-pointed-equiv =
pointed-htpy-eq _ _ (is-section-map-inv-is-equiv (H A) (id-pointed-map))
is-retraction-map-inv-is-pointed-equiv-universal-property-pointed-equiv :
is-retraction
( map-pointed-map f)
( map-inv-is-pointed-equiv-universal-property-pointed-equiv)
is-retraction-map-inv-is-pointed-equiv-universal-property-pointed-equiv =
htpy-pointed-htpy
( is-pointed-retraction-pointed-map-inv-is-pointed-equiv-universal-property-pointed-equiv)
is-pointed-section-pointed-map-inv-is-pointed-equiv-universal-property-pointed-equiv :
is-pointed-section f
pointed-map-inv-is-pointed-equiv-universal-property-pointed-equiv
is-pointed-section-pointed-map-inv-is-pointed-equiv-universal-property-pointed-equiv =
pointed-htpy-eq _ _
( is-injective-is-equiv (H B)
( eq-pointed-htpy ((f ∘∗ _) ∘∗ f) (id-pointed-map ∘∗ f)
( concat-pointed-htpy
( associative-comp-pointed-map f _ f)
( concat-pointed-htpy
( left-whisker-comp-pointed-htpy f _ _
( is-pointed-retraction-pointed-map-inv-is-pointed-equiv-universal-property-pointed-equiv))
( concat-pointed-htpy
( right-unit-law-comp-pointed-map f)
( inv-left-unit-law-comp-pointed-map f))))))
is-section-map-inv-is-pointed-equiv-universal-property-pointed-equiv :
is-section
( map-pointed-map f)
( map-inv-is-pointed-equiv-universal-property-pointed-equiv)
is-section-map-inv-is-pointed-equiv-universal-property-pointed-equiv =
htpy-pointed-htpy
( is-pointed-section-pointed-map-inv-is-pointed-equiv-universal-property-pointed-equiv)
abstract
is-pointed-equiv-universal-property-pointed-equiv : is-pointed-equiv f
is-pointed-equiv-universal-property-pointed-equiv =
is-equiv-is-invertible
( map-inv-is-pointed-equiv-universal-property-pointed-equiv)
( is-section-map-inv-is-pointed-equiv-universal-property-pointed-equiv)
( is-retraction-map-inv-is-pointed-equiv-universal-property-pointed-equiv)
```
### Any pointed equivalence satisfies the universal property of pointed equivalences
```agda
module _
{l1 l2 : Level} {A : Pointed-Type l1} {B : Pointed-Type l2} (f : A →∗ B)
where
map-inv-universal-property-pointed-equiv-is-pointed-equiv :
(H : is-pointed-equiv f) {l : Level} (C : Pointed-Type l) →
(A →∗ C) → (B →∗ C)
map-inv-universal-property-pointed-equiv-is-pointed-equiv H C =
precomp-pointed-map
( pointed-map-inv-is-pointed-equiv f H)
( C)
is-section-map-inv-universal-property-pointed-equiv-is-pointed-equiv :
(H : is-pointed-equiv f) →
{l : Level} (C : Pointed-Type l) →
is-section
( precomp-pointed-map f C)
( map-inv-universal-property-pointed-equiv-is-pointed-equiv
( H)
( C))
is-section-map-inv-universal-property-pointed-equiv-is-pointed-equiv H C h =
eq-pointed-htpy
( (h ∘∗ pointed-map-inv-is-pointed-equiv f H) ∘∗ f)
( h)
( concat-pointed-htpy
( associative-comp-pointed-map h
( pointed-map-inv-is-pointed-equiv f H)
( f))
( left-whisker-comp-pointed-htpy h
( pointed-map-inv-is-pointed-equiv f H ∘∗ f)
( id-pointed-map)
( is-pointed-retraction-pointed-map-inv-is-pointed-equiv f H)))
section-universal-property-pointed-equiv-is-pointed-equiv :
(H : is-pointed-equiv f) →
{l : Level} (C : Pointed-Type l) →
section (precomp-pointed-map f C)
pr1 (section-universal-property-pointed-equiv-is-pointed-equiv H C) =
map-inv-universal-property-pointed-equiv-is-pointed-equiv H C
pr2 (section-universal-property-pointed-equiv-is-pointed-equiv H C) =
is-section-map-inv-universal-property-pointed-equiv-is-pointed-equiv
( H)
( C)
is-retraction-map-inv-universal-property-pointed-equiv-is-pointed-equiv :
(H : is-pointed-equiv f) →
{l : Level} (C : Pointed-Type l) →
is-retraction
( precomp-pointed-map f C)
( map-inv-universal-property-pointed-equiv-is-pointed-equiv
( H)
( C))
is-retraction-map-inv-universal-property-pointed-equiv-is-pointed-equiv
H C h =
eq-pointed-htpy
( (h ∘∗ f) ∘∗ pointed-map-inv-is-pointed-equiv f H)
( h)
( concat-pointed-htpy
( associative-comp-pointed-map h f
( pointed-map-inv-is-pointed-equiv f H))
( left-whisker-comp-pointed-htpy h
( f ∘∗ pointed-map-inv-is-pointed-equiv f H)
( id-pointed-map)
( is-pointed-section-pointed-map-inv-is-pointed-equiv f H)))
retraction-universal-property-pointed-equiv-is-pointed-equiv :
(H : is-pointed-equiv f) →
{l : Level} (C : Pointed-Type l) →
retraction (precomp-pointed-map f C)
pr1 (retraction-universal-property-pointed-equiv-is-pointed-equiv H C) =
map-inv-universal-property-pointed-equiv-is-pointed-equiv H C
pr2 (retraction-universal-property-pointed-equiv-is-pointed-equiv H C) =
is-retraction-map-inv-universal-property-pointed-equiv-is-pointed-equiv
( H)
( C)
abstract
universal-property-pointed-equiv-is-pointed-equiv :
is-pointed-equiv f →
universal-property-pointed-equiv f
pr1 (universal-property-pointed-equiv-is-pointed-equiv H C) =
section-universal-property-pointed-equiv-is-pointed-equiv H C
pr2 (universal-property-pointed-equiv-is-pointed-equiv H C) =
retraction-universal-property-pointed-equiv-is-pointed-equiv H C
equiv-precomp-pointed-map :
{l1 l2 l3 : Level} {A : Pointed-Type l1} {B : Pointed-Type l2}
(C : Pointed-Type l3) → (A ≃∗ B) → (B →∗ C) ≃ (A →∗ C)
pr1 (equiv-precomp-pointed-map C f) g =
g ∘∗ (pointed-map-pointed-equiv f)
pr2 (equiv-precomp-pointed-map C f) =
universal-property-pointed-equiv-is-pointed-equiv
( pointed-map-pointed-equiv f)
( is-equiv-map-pointed-equiv f)
( C)
```
### Postcomposing by pointed equivalences is a pointed equivalence
#### The predicate of being an equivalence by postcomposition of pointed maps
```agda
module _
{l1 l2 : Level} {A : Pointed-Type l1} {B : Pointed-Type l2} (f : A →∗ B)
where
is-equiv-postcomp-pointed-map : UUω
is-equiv-postcomp-pointed-map =
{l : Level} (X : Pointed-Type l) → is-equiv (postcomp-pointed-map f X)
```
#### Any pointed map that is an equivalence by postcomposition is a pointed equivalence
```agda
module _
{l1 l2 : Level} {A : Pointed-Type l1} {B : Pointed-Type l2} (f : A →∗ B)
(H : is-equiv-postcomp-pointed-map f)
where
pointed-map-inv-is-pointed-equiv-is-equiv-postcomp-pointed-map : B →∗ A
pointed-map-inv-is-pointed-equiv-is-equiv-postcomp-pointed-map =
map-inv-is-equiv (H B) id-pointed-map
map-inv-is-pointed-equiv-is-equiv-postcomp-pointed-map :
type-Pointed-Type B → type-Pointed-Type A
map-inv-is-pointed-equiv-is-equiv-postcomp-pointed-map =
map-pointed-map
( pointed-map-inv-is-pointed-equiv-is-equiv-postcomp-pointed-map)
is-pointed-section-pointed-map-inv-is-pointed-equiv-is-equiv-postcomp-pointed-map :
is-pointed-section f
( pointed-map-inv-is-pointed-equiv-is-equiv-postcomp-pointed-map)
is-pointed-section-pointed-map-inv-is-pointed-equiv-is-equiv-postcomp-pointed-map =
pointed-htpy-eq
( f ∘∗ pointed-map-inv-is-pointed-equiv-is-equiv-postcomp-pointed-map)
( id-pointed-map)
( is-section-map-inv-is-equiv (H B) id-pointed-map)
is-section-map-inv-is-pointed-equiv-is-equiv-postcomp-pointed-map :
is-section
( map-pointed-map f)
( map-inv-is-pointed-equiv-is-equiv-postcomp-pointed-map)
is-section-map-inv-is-pointed-equiv-is-equiv-postcomp-pointed-map =
htpy-pointed-htpy
( is-pointed-section-pointed-map-inv-is-pointed-equiv-is-equiv-postcomp-pointed-map)
is-pointed-retraction-pointed-map-inv-is-pointed-equiv-is-equiv-postcomp-pointed-map :
is-pointed-retraction f
( pointed-map-inv-is-pointed-equiv-is-equiv-postcomp-pointed-map)
is-pointed-retraction-pointed-map-inv-is-pointed-equiv-is-equiv-postcomp-pointed-map =
pointed-htpy-eq
( pointed-map-inv-is-pointed-equiv-is-equiv-postcomp-pointed-map ∘∗ f)
( id-pointed-map)
( is-injective-is-equiv
( H A)
( eq-pointed-htpy
( ( f) ∘∗
( ( pointed-map-inv-is-pointed-equiv-is-equiv-postcomp-pointed-map) ∘∗
( f)))
( f ∘∗ id-pointed-map)
( concat-pointed-htpy
( inv-associative-comp-pointed-map f _ f)
( concat-pointed-htpy
( right-whisker-comp-pointed-htpy
( f ∘∗ _)
( id-pointed-map)
( is-pointed-section-pointed-map-inv-is-pointed-equiv-is-equiv-postcomp-pointed-map)
( f))
( concat-pointed-htpy
( left-unit-law-comp-pointed-map f)
( inv-pointed-htpy (right-unit-law-comp-pointed-map f)))))))
is-retraction-map-inv-is-pointed-equiv-is-equiv-postcomp-pointed-map :
is-retraction
( map-pointed-map f)
( map-inv-is-pointed-equiv-is-equiv-postcomp-pointed-map)
is-retraction-map-inv-is-pointed-equiv-is-equiv-postcomp-pointed-map =
htpy-pointed-htpy
( is-pointed-retraction-pointed-map-inv-is-pointed-equiv-is-equiv-postcomp-pointed-map)
abstract
is-pointed-equiv-is-equiv-postcomp-pointed-map : is-pointed-equiv f
is-pointed-equiv-is-equiv-postcomp-pointed-map =
is-equiv-is-invertible
( map-inv-is-pointed-equiv-is-equiv-postcomp-pointed-map)
( is-section-map-inv-is-pointed-equiv-is-equiv-postcomp-pointed-map)
( is-retraction-map-inv-is-pointed-equiv-is-equiv-postcomp-pointed-map)
```
#### Any pointed equivalence is an equivalence by postcomposition
```agda
module _
{l1 l2 : Level} {A : Pointed-Type l1} {B : Pointed-Type l2} (f : A →∗ B)
(H : is-pointed-equiv f)
where
map-inv-is-equiv-postcomp-is-pointed-equiv :
{l : Level} (X : Pointed-Type l) → (X →∗ B) → (X →∗ A)
map-inv-is-equiv-postcomp-is-pointed-equiv =
postcomp-pointed-map (pointed-map-inv-is-pointed-equiv f H)
is-section-map-inv-is-equiv-postcomp-is-pointed-equiv :
{l : Level} (X : Pointed-Type l) →
is-section
( postcomp-pointed-map f X)
( map-inv-is-equiv-postcomp-is-pointed-equiv X)
is-section-map-inv-is-equiv-postcomp-is-pointed-equiv X h =
eq-pointed-htpy
( f ∘∗ (pointed-map-inv-is-pointed-equiv f H ∘∗ h))
( h)
( concat-pointed-htpy
( inv-associative-comp-pointed-map f
( pointed-map-inv-is-pointed-equiv f H)
( h))
( concat-pointed-htpy
( right-whisker-comp-pointed-htpy
( f ∘∗ pointed-map-inv-is-pointed-equiv f H)
( id-pointed-map)
( is-pointed-section-pointed-map-inv-is-pointed-equiv f H)
( h))
( left-unit-law-comp-pointed-map h)))
is-retraction-map-inv-is-equiv-postcomp-is-pointed-equiv :
{l : Level} (X : Pointed-Type l) →
is-retraction
( postcomp-pointed-map f X)
( map-inv-is-equiv-postcomp-is-pointed-equiv X)
is-retraction-map-inv-is-equiv-postcomp-is-pointed-equiv X h =
eq-pointed-htpy
( pointed-map-inv-is-pointed-equiv f H ∘∗ (f ∘∗ h))
( h)
( concat-pointed-htpy
( inv-associative-comp-pointed-map
( pointed-map-inv-is-pointed-equiv f H)
( f)
( h))
( concat-pointed-htpy
( right-whisker-comp-pointed-htpy
( pointed-map-inv-is-pointed-equiv f H ∘∗ f)
( id-pointed-map)
( is-pointed-retraction-pointed-map-inv-is-pointed-equiv f H)
( h))
( left-unit-law-comp-pointed-map h)))
abstract
is-equiv-postcomp-is-pointed-equiv : is-equiv-postcomp-pointed-map f
is-equiv-postcomp-is-pointed-equiv X =
is-equiv-is-invertible
( map-inv-is-equiv-postcomp-is-pointed-equiv X)
( is-section-map-inv-is-equiv-postcomp-is-pointed-equiv X)
( is-retraction-map-inv-is-equiv-postcomp-is-pointed-equiv X)
equiv-postcomp-pointed-map :
{l1 l2 l3 : Level} {A : Pointed-Type l1} {B : Pointed-Type l2}
(C : Pointed-Type l3) → (A ≃∗ B) → (C →∗ A) ≃ (C →∗ B)
pr1 (equiv-postcomp-pointed-map C e) =
postcomp-pointed-map (pointed-map-pointed-equiv e) C
pr2 (equiv-postcomp-pointed-map C e) =
is-equiv-postcomp-is-pointed-equiv
( pointed-map-pointed-equiv e)
( is-pointed-equiv-pointed-equiv e)
( C)
```
### The composition operation on pointed equivalences is a binary equivalence
```agda
module _
{l1 l2 l3 : Level}
{A : Pointed-Type l1} {B : Pointed-Type l2} {C : Pointed-Type l3}
where
abstract
is-equiv-comp-pointed-equiv :
(f : B ≃∗ C) → is-equiv (λ (e : A ≃∗ B) → comp-pointed-equiv f e)
is-equiv-comp-pointed-equiv f =
is-equiv-map-Σ _
( is-equiv-postcomp-equiv-equiv (equiv-pointed-equiv f))
( λ e →
is-equiv-comp _
( ap (map-pointed-equiv f))
( is-emb-is-equiv (is-equiv-map-pointed-equiv f) _ _)
( is-equiv-concat' _ (preserves-point-pointed-equiv f)))
equiv-comp-pointed-equiv : (f : B ≃∗ C) → (A ≃∗ B) ≃ (A ≃∗ C)
pr1 (equiv-comp-pointed-equiv f) = comp-pointed-equiv f
pr2 (equiv-comp-pointed-equiv f) = is-equiv-comp-pointed-equiv f
abstract
is-equiv-comp-pointed-equiv' :
(e : A ≃∗ B) → is-equiv (λ (f : B ≃∗ C) → comp-pointed-equiv f e)
is-equiv-comp-pointed-equiv' e =
is-equiv-map-Σ _
( is-equiv-precomp-equiv-equiv (equiv-pointed-equiv e))
( λ f →
is-equiv-concat
( ap (map-equiv f) (preserves-point-pointed-equiv e))
( _))
equiv-comp-pointed-equiv' :
(e : A ≃∗ B) → (B ≃∗ C) ≃ (A ≃∗ C)
pr1 (equiv-comp-pointed-equiv' e) f = comp-pointed-equiv f e
pr2 (equiv-comp-pointed-equiv' e) = is-equiv-comp-pointed-equiv' e
abstract
is-binary-equiv-comp-pointed-equiv :
is-binary-equiv (λ (f : B ≃∗ C) (e : A ≃∗ B) → comp-pointed-equiv f e)
pr1 is-binary-equiv-comp-pointed-equiv = is-equiv-comp-pointed-equiv'
pr2 is-binary-equiv-comp-pointed-equiv = is-equiv-comp-pointed-equiv
```