Retracts
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
{-# OPTIONS --safe --without-K #-}
module MGS.Retracts where
open import MGS.hlevels public
has-section : {X : 𝓤 ̇ } {Y : 𝓥 ̇ } → (X → Y) → 𝓤 ⊔ 𝓥 ̇
has-section r = Σ s ꞉ (codomain r → domain r), r ∘ s ∼ id
_◁_ : 𝓤 ̇ → 𝓥 ̇ → 𝓤 ⊔ 𝓥 ̇
X ◁ Y = Σ r ꞉ (Y → X), has-section r
retraction : {X : 𝓤 ̇ } {Y : 𝓥 ̇ } → X ◁ Y → Y → X
retraction (r , s , η) = r
section : {X : 𝓤 ̇ } {Y : 𝓥 ̇ } → X ◁ Y → X → Y
section (r , s , η) = s
retract-equation : {X : 𝓤 ̇ } {Y : 𝓥 ̇ } (ρ : X ◁ Y)
→ retraction ρ ∘ section ρ ∼ 𝑖𝑑 X
retract-equation (r , s , η) = η
retraction-has-section : {X : 𝓤 ̇ } {Y : 𝓥 ̇ } (ρ : X ◁ Y)
→ has-section (retraction ρ)
retraction-has-section (r , h) = h
id-◁ : (X : 𝓤 ̇ ) → X ◁ X
id-◁ X = 𝑖𝑑 X , 𝑖𝑑 X , refl
_◁∘_ : {X : 𝓤 ̇ } {Y : 𝓥 ̇ } {Z : 𝓦 ̇ } → X ◁ Y → Y ◁ Z → X ◁ Z
(r , s , η) ◁∘ (r' , s' , η') = (r ∘ r' , s' ∘ s , η'')
where
η'' = λ x → r (r' (s' (s x))) =⟨ ap r (η' (s x)) ⟩
r (s x) =⟨ η x ⟩
x ∎
_◁⟨_⟩_ : (X : 𝓤 ̇ ) {Y : 𝓥 ̇ } {Z : 𝓦 ̇ } → X ◁ Y → Y ◁ Z → X ◁ Z
X ◁⟨ ρ ⟩ σ = ρ ◁∘ σ
_◀ : (X : 𝓤 ̇ ) → X ◁ X
X ◀ = id-◁ X
Σ-retract : {X : 𝓤 ̇ } {A : X → 𝓥 ̇ } {B : X → 𝓦 ̇ }
→ ((x : X) → A x ◁ B x) → Σ A ◁ Σ B
Σ-retract {𝓤} {𝓥} {𝓦} {X} {A} {B} ρ = NatΣ r , NatΣ s , η'
where
r : (x : X) → B x → A x
r x = retraction (ρ x)
s : (x : X) → A x → B x
s x = section (ρ x)
η : (x : X) (a : A x) → r x (s x a) = a
η x = retract-equation (ρ x)
η' : (σ : Σ A) → NatΣ r (NatΣ s σ) = σ
η' (x , a) = x , r x (s x a) =⟨ to-Σ-=' (η x a) ⟩
x , a ∎
transport-is-retraction : {X : 𝓤 ̇ } (A : X → 𝓥 ̇ ) {x y : X} (p : x = y)
→ transport A p ∘ transport A (p ⁻¹) ∼ 𝑖𝑑 (A y)
transport-is-retraction A (refl x) = refl
transport-is-section : {X : 𝓤 ̇ } (A : X → 𝓥 ̇ ) {x y : X} (p : x = y)
→ transport A (p ⁻¹) ∘ transport A p ∼ 𝑖𝑑 (A x)
transport-is-section A (refl x) = refl
Σ-reindexing-retract : {X : 𝓤 ̇ } {Y : 𝓥 ̇ } {A : X → 𝓦 ̇ } (r : Y → X)
→ has-section r
→ (Σ x ꞉ X , A x) ◁ (Σ y ꞉ Y , A (r y))
Σ-reindexing-retract {𝓤} {𝓥} {𝓦} {X} {Y} {A} r (s , η) = γ , φ , γφ
where
γ : Σ (A ∘ r) → Σ A
γ (y , a) = (r y , a)
φ : Σ A → Σ (A ∘ r)
φ (x , a) = (s x , transport A ((η x)⁻¹) a)
γφ : (σ : Σ A) → γ (φ σ) = σ
γφ (x , a) = p
where
p : (r (s x) , transport A ((η x)⁻¹) a) = (x , a)
p = to-Σ-= (η x , transport-is-retraction A (η x) a)
singleton-type : {X : 𝓤 ̇ } → X → 𝓤 ̇
singleton-type {𝓤} {X} x = Σ y ꞉ X , y = x
singleton-type-center : {X : 𝓤 ̇ } (x : X) → singleton-type x
singleton-type-center x = (x , refl x)
singleton-type-centered : {X : 𝓤 ̇ } (x : X) (σ : singleton-type x)
→ singleton-type-center x = σ
singleton-type-centered x (x , refl x) = refl (x , refl x)
singleton-types-are-singletons : (X : 𝓤 ̇ ) (x : X)
→ is-singleton (singleton-type x)
singleton-types-are-singletons X x = singleton-type-center x ,
singleton-type-centered x
retract-of-singleton : {X : 𝓤 ̇ } {Y : 𝓥 ̇ }
→ Y ◁ X → is-singleton X → is-singleton Y
retract-of-singleton (r , s , η) (c , φ) = r c , γ
where
γ = λ y → r c =⟨ ap r (φ (s y)) ⟩
r (s y) =⟨ η y ⟩
y ∎
singleton-type' : {X : 𝓤 ̇ } → X → 𝓤 ̇
singleton-type' {𝓤} {X} x = Σ y ꞉ X , x = y
singleton-type'-center : {X : 𝓤 ̇ } (x : X) → singleton-type' x
singleton-type'-center x = (x , refl x)
singleton-type'-centered : {X : 𝓤 ̇ } (x : X) (σ : singleton-type' x)
→ singleton-type'-center x = σ
singleton-type'-centered x (x , refl x) = refl (x , refl x)
singleton-types'-are-singletons : (X : 𝓤 ̇ ) (x : X)
→ is-singleton (singleton-type' x)
singleton-types'-are-singletons X x = singleton-type'-center x ,
singleton-type'-centered x
infix 10 _◁_
infixr 0 _◁⟨_⟩_
infix 1 _◀