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.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 _β
\end{code}