Martin Escardo 1st May 2020.
This is ported from the Midlands Graduate School 2019 lecture notes
https://www.cs.bham.ac.uk/~mhe/HoTT-UF.in-Agda-Lecture-Notes/HoTT-UF-Agda.html
https://github.com/martinescardo/HoTT-UF.Agda-Lecture-Notes
\begin{code}
{-# OPTIONS --without-K --exact-split --safe --auto-inline #-}
module MGS.HAE where
open import MGS.Equivalence-Induction public
is-hae : {X : 𝓤 ̇ } {Y : 𝓥 ̇ } → (X → Y) → 𝓤 ⊔ 𝓥 ̇
is-hae f = Σ g ꞉ (codomain f → domain f)
, Σ η ꞉ g ∘ f ∼ id
, Σ ε ꞉ f ∘ g ∼ id
, ((x : domain f) → ap f (η x) = ε (f x))
haes-are-invertible : {X : 𝓤 ̇ } {Y : 𝓥 ̇ } (f : X → Y)
→ is-hae f → invertible f
haes-are-invertible f (g , η , ε , τ) = g , η , ε
transport-ap-≃ : {X : 𝓤 ̇ } {Y : 𝓥 ̇ } (f : X → Y)
{x x' : X} (a : x' = x) (b : f x' = f x)
→ (transport (λ - → f - = f x) a b = refl (f x)) ≃ (ap f a = b)
transport-ap-≃ f (refl x) b = γ
where
γ : (b = refl (f x)) ≃ (refl (f x) = b)
γ = ⁻¹-≃ b (refl (f x))
haes-are-equivs : {X : 𝓤 ̇ } {Y : 𝓥 ̇ } (f : X → Y)
→ is-hae f → is-equiv f
haes-are-equivs f (g , η , ε , τ) y = γ
where
c : (φ : fiber f y) → (g y , ε y) = φ
c (x , refl .(f x)) = q
where
p : transport (λ - → f - = f x) (η x) (ε (f x)) = refl (f x)
p = ⌜ ≃-sym (transport-ap-≃ f (η x) (ε (f x))) ⌝ (τ x)
q : (g (f x) , ε (f x)) = (x , refl (f x))
q = to-Σ-= (η x , p)
γ : is-singleton (fiber f y)
γ = (g y , ε y) , c
id-is-hae : (X : 𝓤 ̇ ) → is-hae (𝑖𝑑 X)
id-is-hae X = 𝑖𝑑 X , refl , refl , (λ x → refl (refl x))
ua-equivs-are-haes : is-univalent 𝓤
→ {X Y : 𝓤 ̇ } (f : X → Y)
→ is-equiv f → is-hae f
ua-equivs-are-haes ua {X} {Y} = 𝕁-equiv ua (λ X Y f → is-hae f) id-is-hae X Y
equivs-are-haes : {X : 𝓤 ̇ } {Y : 𝓥 ̇ } (f : X → Y)
→ is-equiv f → is-hae f
equivs-are-haes {𝓤} {𝓥} {X} {Y} f i = (g , η , ε , τ)
where
g : Y → X
g = inverse f i
η : g ∘ f ∼ id
η = inverses-are-retractions f i
ε : f ∘ g ∼ id
ε = inverses-are-sections f i
τ : (x : X) → ap f (η x) = ε (f x)
τ x = γ
where
φ : fiber f (f x)
φ = center (fiber f (f x)) (i (f x))
by-definition-of-g : g (f x) = fiber-point φ
by-definition-of-g = refl _
p : φ = (x , refl (f x))
p = centrality (fiber f (f x)) (i (f x)) (x , refl (f x))
a : g (f x) = x
a = ap fiber-point p
b : f (g (f x)) = f x
b = fiber-identification φ
by-definition-of-η : η x = a
by-definition-of-η = refl _
by-definition-of-ε : ε (f x) = b
by-definition-of-ε = refl _
q = transport (λ - → f - = f x) a b =⟨ refl _ ⟩
transport (λ - → f - = f x) (ap pr₁ p) (pr₂ φ) =⟨ t ⟩
transport (λ - → f (pr₁ -) = f x) p (pr₂ φ) =⟨ apd pr₂ p ⟩
refl (f x) ∎
where
t = (transport-ap (λ - → f - = f x) pr₁ p b)⁻¹
γ : ap f (η x) = ε (f x)
γ = ⌜ transport-ap-≃ f a b ⌝ q
equivs-are-haes' : {X : 𝓤 ̇ } {Y : 𝓥 ̇ } (f : X → Y)
→ is-equiv f → is-hae f
equivs-are-haes' f e = (inverse f e ,
inverses-are-retractions f e ,
inverses-are-sections f e ,
τ)
where
τ : ∀ x → ap f (inverses-are-retractions f e x) = inverses-are-sections f e (f x)
τ x = ⌜ transport-ap-≃ f (ap pr₁ p) (pr₂ φ) ⌝ q
where
φ : fiber f (f x)
φ = pr₁ (e (f x))
p : φ = (x , refl (f x))
p = pr₂ (e (f x)) (x , refl (f x))
q : transport (λ - → f - = f x) (ap pr₁ p) (pr₂ φ) = refl (f x)
q = (transport-ap (λ - → f - = f x) pr₁ p ((pr₂ φ)))⁻¹ ∙ apd pr₂ p
equiv-invertible-hae-factorization : {X : 𝓤 ̇ } {Y : 𝓥 ̇ } (f : X → Y)
→ equivs-are-invertible f
∼ haes-are-invertible f ∘ equivs-are-haes f
equiv-invertible-hae-factorization f e = refl (equivs-are-invertible f e)
half-adjoint-condition : {X : 𝓤 ̇ } {Y : 𝓥 ̇ } (f : X → Y) (e : is-equiv f) (x : X)
→ ap f (inverses-are-retractions f e x) = inverses-are-sections f e (f x)
half-adjoint-condition f e = pr₂ (pr₂ (pr₂ (equivs-are-haes f e)))
Σ-change-of-variable : {X : 𝓤 ̇ } {Y : 𝓥 ̇ } (A : Y → 𝓦 ̇ ) (f : X → Y)
→ is-equiv f → (Σ y ꞉ Y , A y) ≃ (Σ x ꞉ X , A (f x))
Σ-change-of-variable {𝓤} {𝓥} {𝓦} {X} {Y} A f i = γ
where
g = inverse f i
η = inverses-are-retractions f i
ε = inverses-are-sections f i
τ = half-adjoint-condition f i
φ : Σ A → Σ (A ∘ f)
φ (y , a) = (g y , transport A ((ε y)⁻¹) a)
ψ : Σ (A ∘ f) → Σ A
ψ (x , a) = (f x , a)
ψφ : (z : Σ A) → ψ (φ z) = z
ψφ (y , a) = p
where
p : (f (g y) , transport A ((ε y)⁻¹) a) = (y , a)
p = to-Σ-= (ε y , transport-is-retraction A (ε y) a)
φψ : (t : Σ (A ∘ f)) → φ (ψ t) = t
φψ (x , a) = p
where
a' : A (f (g (f x)))
a' = transport A ((ε (f x))⁻¹) a
q = transport (A ∘ f) (η x) a' =⟨ transport-ap A f (η x) a' ⟩
transport A (ap f (η x)) a' =⟨ ap (λ - → transport A - a') (τ x) ⟩
transport A (ε (f x)) a' =⟨ transport-is-retraction A (ε (f x)) a ⟩
a ∎
p : (g (f x) , transport A ((ε (f x))⁻¹) a) = (x , a)
p = to-Σ-= (η x , q)
γ : Σ A ≃ Σ (A ∘ f)
γ = invertibility-gives-≃ φ (ψ , ψφ , φψ)
~-naturality : {X : 𝓤 ̇ } {A : 𝓥 ̇ }
(f g : X → A) (H : f ∼ g) {x y : X} {p : x = y}
→ H x ∙ ap g p = ap f p ∙ H y
~-naturality f g H {x} {_} {refl a} = refl-left ⁻¹
~-naturality' : {X : 𝓤 ̇ } {A : 𝓥 ̇ }
(f g : X → A) (H : f ∼ g) {x y : X} {p : x = y}
→ H x ∙ ap g p ∙ (H y)⁻¹ = ap f p
~-naturality' f g H {x} {x} {refl x} = ⁻¹-right∙ (H x)
~-id-naturality : {X : 𝓤 ̇ }
(h : X → X) (η : h ∼ id) {x : X}
→ η (h x) = ap h (η x)
~-id-naturality h η {x} =
η (h x) =⟨ refl _ ⟩
η (h x) ∙ refl (h x) =⟨ i ⟩
η (h x) ∙ (η x ∙ (η x)⁻¹) =⟨ ii ⟩
η (h x) ∙ η x ∙ (η x)⁻¹ =⟨ iii ⟩
η (h x) ∙ ap id (η x) ∙ (η x)⁻¹ =⟨ iv ⟩
ap h (η x) ∎
where
i = ap (η(h x) ∙_) ((⁻¹-right∙ (η x))⁻¹)
ii = (∙assoc (η (h x)) (η x) (η x ⁻¹))⁻¹
iii = ap (λ - → η (h x) ∙ - ∙ η x ⁻¹) ((ap-id (η x))⁻¹)
iv = ~-naturality' h id η {h x} {x} {η x}
invertibles-are-haes : {X : 𝓤 ̇ } {Y : 𝓥 ̇ } (f : X → Y)
→ invertible f → is-hae f
invertibles-are-haes f (g , η , ε) = g , η , ε' , τ
where
ε' = λ y → f (g y) =⟨ (ε (f (g y)))⁻¹ ⟩
f (g (f (g y))) =⟨ ap f (η (g y)) ⟩
f (g y) =⟨ ε y ⟩
y ∎
module _ (x : domain f) where
p = η (g (f x)) =⟨ ~-id-naturality (g ∘ f) η ⟩
ap (g ∘ f) (η x) =⟨ ap-∘ f g (η x) ⟩
ap g (ap f (η x)) ∎
q = ap f (η (g (f x))) ∙ ε (f x) =⟨ by-p ⟩
ap f (ap g (ap f (η x))) ∙ ε (f x) =⟨ by-ap-∘ ⟩
ap (f ∘ g) (ap f (η x)) ∙ ε (f x) =⟨ by-~-naturality ⟩
ε (f (g (f x))) ∙ ap id (ap f (η x)) =⟨ by-ap-id ⟩
ε (f (g (f x))) ∙ ap f (η x) ∎
where
by-p = ap (λ - → ap f - ∙ ε (f x)) p
by-ap-∘ = ap (_∙ ε (f x)) ((ap-∘ g f (ap f (η x)))⁻¹)
by-~-naturality = (~-naturality (f ∘ g) id ε {f (g (f x))} {f x} {ap f (η x)})⁻¹
by-ap-id = ap (ε (f (g (f x))) ∙_) (ap-id (ap f (η x)))
τ = ap f (η x) =⟨ refl-left ⁻¹ ⟩
refl (f (g (f x))) ∙ ap f (η x) =⟨ by-⁻¹-left∙ ⟩
(ε (f (g (f x))))⁻¹ ∙ ε (f (g (f x))) ∙ ap f (η x) =⟨ by-∙assoc ⟩
(ε (f (g (f x))))⁻¹ ∙ (ε (f (g (f x))) ∙ ap f (η x)) =⟨ by-q ⟩
(ε (f (g (f x))))⁻¹ ∙ (ap f (η (g (f x))) ∙ ε (f x)) =⟨ refl _ ⟩
ε' (f x) ∎
where
by-⁻¹-left∙ = ap (_∙ ap f (η x)) ((⁻¹-left∙ (ε (f (g (f x)))))⁻¹)
by-∙assoc = ∙assoc ((ε (f (g (f x))))⁻¹) (ε (f (g (f x)))) (ap f (η x))
by-q = ap ((ε (f (g (f x))))⁻¹ ∙_) (q ⁻¹)
\end{code}