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.Solved-Exercises where open import MGS.Equivalences public subsingleton-criterion : {X : π€ Μ } β (X β is-singleton X) β is-subsingleton X subsingleton-criterion' : {X : π€ Μ } β (X β is-subsingleton X) β is-subsingleton X retract-of-subsingleton : {X : π€ Μ } {Y : π₯ Μ } β Y β X β is-subsingleton X β is-subsingleton Y left-cancellable : {X : π€ Μ } {Y : π₯ Μ } β (X β Y) β π€ β π₯ Μ left-cancellable f = {x x' : domain f} β f x οΌ f x' β x οΌ x' lc-maps-reflect-subsingletons : {X : π€ Μ } {Y : π₯ Μ } (f : X β Y) β left-cancellable f β is-subsingleton Y β is-subsingleton X has-retraction : {X : π€ Μ } {Y : π₯ Μ } β (X β Y) β π€ β π₯ Μ has-retraction s = Ξ£ r κ (codomain s β domain s), r β s βΌ id sections-are-lc : {X : π€ Μ } {A : π₯ Μ } (s : X β A) β has-retraction s β left-cancellable s equivs-have-retractions : {X : π€ Μ } {Y : π₯ Μ } (f : X β Y) β is-equiv f β has-retraction f equivs-have-sections : {X : π€ Μ } {Y : π₯ Μ } (f : X β Y) β is-equiv f β has-section f equivs-are-lc : {X : π€ Μ } {Y : π₯ Μ } (f : X β Y) β is-equiv f β left-cancellable f equiv-to-subsingleton : {X : π€ Μ } {Y : π₯ Μ } β X β Y β is-subsingleton Y β is-subsingleton X comp-inverses : {X : π€ Μ } {Y : π₯ Μ } {Z : π¦ Μ } (f : X β Y) (g : Y β Z) (i : is-equiv f) (j : is-equiv g) (f' : Y β X) (g' : Z β Y) β f' βΌ inverse f i β g' βΌ inverse g j β f' β g' βΌ inverse (g β f) (β-is-equiv j i) equiv-to-set : {X : π€ Μ } {Y : π₯ Μ } β X β Y β is-set Y β is-set X sections-closed-under-βΌ : {X : π€ Μ } {Y : π₯ Μ } (f g : X β Y) β has-retraction f β g βΌ f β has-retraction g retractions-closed-under-βΌ : {X : π€ Μ } {Y : π₯ Μ } (f g : X β Y) β has-section f β g βΌ f β has-section g is-joyal-equiv : {X : π€ Μ } {Y : π₯ Μ } β (X β Y) β π€ β π₯ Μ is-joyal-equiv f = has-section f Γ has-retraction f one-inverse : (X : π€ Μ ) (Y : π₯ Μ ) (f : X β Y) (r s : Y β X) β (r β f βΌ id) β (f β s βΌ id) β r βΌ s joyal-equivs-are-invertible : {X : π€ Μ } {Y : π₯ Μ } (f : X β Y) β is-joyal-equiv f β invertible f joyal-equivs-are-equivs : {X : π€ Μ } {Y : π₯ Μ } (f : X β Y) β is-joyal-equiv f β is-equiv f invertibles-are-joyal-equivs : {X : π€ Μ } {Y : π₯ Μ } (f : X β Y) β invertible f β is-joyal-equiv f equivs-are-joyal-equivs : {X : π€ Μ } {Y : π₯ Μ } (f : X β Y) β is-equiv f β is-joyal-equiv f equivs-closed-under-βΌ : {X : π€ Μ } {Y : π₯ Μ } {f g : X β Y} β is-equiv f β g βΌ f β is-equiv g equiv-to-singleton' : {X : π€ Μ } {Y : π₯ Μ } β X β Y β is-singleton X β is-singleton Y subtypes-of-sets-are-sets : {X : π€ Μ } {Y : π₯ Μ } (m : X β Y) β left-cancellable m β is-set Y β is-set X prβ-lc : {X : π€ Μ } {A : X β π₯ Μ } β ((x : X) β is-subsingleton (A x)) β left-cancellable (Ξ» (t : Ξ£ A) β prβ t) subsets-of-sets-are-sets : (X : π€ Μ ) (A : X β π₯ Μ ) β is-set X β ((x : X) β is-subsingleton (A x)) β is-set (Ξ£ x κ X , A x) to-subtype-οΌ : {X : π¦ Μ } {A : X β π₯ Μ } {x y : X} {a : A x} {b : A y} β ((x : X) β is-subsingleton (A x)) β x οΌ y β (x , a) οΌ (y , b) prβ-equiv : {X : π€ Μ } {A : X β π₯ Μ } β ((x : X) β is-singleton (A x)) β is-equiv (Ξ» (t : Ξ£ A) β prβ t) prβ-β : {X : π€ Μ } {A : X β π₯ Μ } β ((x : X) β is-singleton (A x)) β Ξ£ A β X prβ-β i = prβ , prβ-equiv i Ξ Ξ£-distr-β : {X : π€ Μ } {A : X β π₯ Μ } {P : (x : X) β A x β π¦ Μ } β (Ξ x κ X , Ξ£ a κ A x , P x a) β (Ξ£ f κ Ξ A , Ξ x κ X , P x (f x)) Ξ£-assoc : {X : π€ Μ } {Y : X β π₯ Μ } {Z : Ξ£ Y β π¦ Μ } β Ξ£ Z β (Ξ£ x κ X , Ξ£ y κ Y x , Z (x , y)) β»ΒΉ-β : {X : π€ Μ } (x y : X) β (x οΌ y) β (y οΌ x) singleton-types-β : {X : π€ Μ } (x : X) β singleton-type' x β singleton-type x singletons-β : {X : π€ Μ } {Y : π₯ Μ } β is-singleton X β is-singleton Y β X β Y maps-of-singletons-are-equivs : {X : π€ Μ } {Y : π₯ Μ } (f : X β Y) β is-singleton X β is-singleton Y β is-equiv f logically-equivalent-subsingletons-are-equivalent : (X : π€ Μ ) (Y : π₯ Μ ) β is-subsingleton X β is-subsingleton Y β X β Y β X β Y singletons-are-equivalent : (X : π€ Μ ) (Y : π₯ Μ ) β is-singleton X β is-singleton Y β X β Y NatΞ£-fiber-equiv : {X : π€ Μ } (A : X β π₯ Μ ) (B : X β π¦ Μ ) (Ο : Nat A B) (x : X) (b : B x) β fiber (Ο x) b β fiber (NatΞ£ Ο) (x , b) NatΞ£-equiv-gives-fiberwise-equiv : {X : π€ Μ } {A : X β π₯ Μ } {B : X β π¦ Μ } (Ο : Nat A B) β is-equiv (NatΞ£ Ο) β ((x : X) β is-equiv (Ο x)) Ξ£-is-subsingleton : {X : π€ Μ } {A : X β π₯ Μ } β is-subsingleton X β ((x : X) β is-subsingleton (A x)) β is-subsingleton (Ξ£ A) Γ-is-singleton : {X : π€ Μ } {Y : π₯ Μ } β is-singleton X β is-singleton Y β is-singleton (X Γ Y) Γ-is-subsingleton : {X : π€ Μ } {Y : π₯ Μ } β is-subsingleton X β is-subsingleton Y β is-subsingleton (X Γ Y) Γ-is-subsingleton' : {X : π€ Μ } {Y : π₯ Μ } β ((Y β is-subsingleton X) Γ (X β is-subsingleton Y)) β is-subsingleton (X Γ Y) Γ-is-subsingleton'-back : {X : π€ Μ } {Y : π₯ Μ } β is-subsingleton (X Γ Y) β (Y β is-subsingleton X) Γ (X β is-subsingleton Y) apβ : {X : π€ Μ } {Y : π₯ Μ } {Z : π¦ Μ } (f : X β Y β Z) {x x' : X} {y y' : Y} β x οΌ x' β y οΌ y' β f x y οΌ f x' y' subsingleton-criterion = sol where sol : {X : π€ Μ } β (X β is-singleton X) β is-subsingleton X sol f x = singletons-are-subsingletons (domain f) (f x) x subsingleton-criterion' = sol where sol : {X : π€ Μ } β (X β is-subsingleton X) β is-subsingleton X sol f x y = f x x y retract-of-subsingleton = sol where sol : {X : π€ Μ } {Y : π₯ Μ } β Y β X β is-subsingleton X β is-subsingleton Y sol (r , s , Ξ·) i = subsingleton-criterion (Ξ» x β retract-of-singleton (r , s , Ξ·) (pointed-subsingletons-are-singletons (codomain s) (s x) i)) lc-maps-reflect-subsingletons = sol where sol : {X : π€ Μ } {Y : π₯ Μ } (f : X β Y) β left-cancellable f β is-subsingleton Y β is-subsingleton X sol f l s x x' = l (s (f x) (f x')) sections-are-lc = sol where sol : {X : π€ Μ } {A : π₯ Μ } (s : X β A) β has-retraction s β left-cancellable s sol s (r , Ξ΅) {x} {y} p = x οΌβ¨ (Ξ΅ x)β»ΒΉ β© r (s x) οΌβ¨ ap r p β© r (s y) οΌβ¨ Ξ΅ y β© y β equivs-have-retractions = sol where sol : {X : π€ Μ } {Y : π₯ Μ } (f : X β Y) β is-equiv f β has-retraction f sol f e = (inverse f e , inverses-are-retractions f e) equivs-have-sections = sol where sol : {X : π€ Μ } {Y : π₯ Μ } (f : X β Y) β is-equiv f β has-section f sol f e = (inverse f e , inverses-are-sections f e) equivs-are-lc = sol where sol : {X : π€ Μ } {Y : π₯ Μ } (f : X β Y) β is-equiv f β left-cancellable f sol f e = sections-are-lc f (equivs-have-retractions f e) equiv-to-subsingleton = sol where sol : {X : π€ Μ } {Y : π₯ Μ } β X β Y β is-subsingleton Y β is-subsingleton X sol (f , i) = lc-maps-reflect-subsingletons f (equivs-are-lc f i) comp-inverses = sol where sol : {X : π€ Μ } {Y : π₯ Μ } {Z : π¦ Μ } (f : X β Y) (g : Y β Z) (i : is-equiv f) (j : is-equiv g) (f' : Y β X) (g' : Z β Y) β f' βΌ inverse f i β g' βΌ inverse g j β f' β g' βΌ inverse (g β f) (β-is-equiv j i) sol f g i j f' g' h k z = f' (g' z) οΌβ¨ h (g' z) β© inverse f i (g' z) οΌβ¨ ap (inverse f i) (k z) β© inverse f i (inverse g j z) οΌβ¨ inverse-of-β f g i j z β© inverse (g β f) (β-is-equiv j i) z β equiv-to-set = sol where sol : {X : π€ Μ } {Y : π₯ Μ } β X β Y β is-set Y β is-set X sol e = subtypes-of-sets-are-sets β e β (equivs-are-lc β e β (ββ-is-equiv e)) sections-closed-under-βΌ = sol where sol : {X : π€ Μ } {Y : π₯ Μ } (f g : X β Y) β has-retraction f β g βΌ f β has-retraction g sol f g (r , rf) h = (r , Ξ» x β r (g x) οΌβ¨ ap r (h x) β© r (f x) οΌβ¨ rf x β© x β) retractions-closed-under-βΌ = sol where sol : {X : π€ Μ } {Y : π₯ Μ } (f g : X β Y) β has-section f β g βΌ f β has-section g sol f g (s , fs) h = (s , Ξ» y β g (s y) οΌβ¨ h (s y) β© f (s y) οΌβ¨ fs y β© y β) one-inverse = sol where sol : (X : π€ Μ ) (Y : π₯ Μ ) (f : X β Y) (r s : Y β X) β (r β f βΌ id) β (f β s βΌ id) β r βΌ s sol X Y f r s h k y = r y οΌβ¨ ap r ((k y)β»ΒΉ) β© r (f (s y)) οΌβ¨ h (s y) β© s y β joyal-equivs-are-invertible = sol where sol : {X : π€ Μ } {Y : π₯ Μ } (f : X β Y) β is-joyal-equiv f β invertible f sol f ((s , Ξ΅) , (r , Ξ·)) = (s , sf , Ξ΅) where sf = Ξ» (x : domain f) β s (f x) οΌβ¨ (Ξ· (s (f x)))β»ΒΉ β© r (f (s (f x))) οΌβ¨ ap r (Ξ΅ (f x)) β© r (f x) οΌβ¨ Ξ· x β© x β joyal-equivs-are-equivs = sol where sol : {X : π€ Μ } {Y : π₯ Μ } (f : X β Y) β is-joyal-equiv f β is-equiv f sol f j = invertibles-are-equivs f (joyal-equivs-are-invertible f j) invertibles-are-joyal-equivs = sol where sol : {X : π€ Μ } {Y : π₯ Μ } (f : X β Y) β invertible f β is-joyal-equiv f sol f (g , Ξ· , Ξ΅) = ((g , Ξ΅) , (g , Ξ·)) equivs-are-joyal-equivs = sol where sol : {X : π€ Μ } {Y : π₯ Μ } (f : X β Y) β is-equiv f β is-joyal-equiv f sol f e = invertibles-are-joyal-equivs f (equivs-are-invertible f e) equivs-closed-under-βΌ = sol where sol : {X : π€ Μ } {Y : π₯ Μ } {f g : X β Y} β is-equiv f β g βΌ f β is-equiv g sol {π€} {π₯} {X} {Y} {f} {g} e h = joyal-equivs-are-equivs g (retractions-closed-under-βΌ f g (equivs-have-sections f e) h , sections-closed-under-βΌ f g (equivs-have-retractions f e) h) equiv-to-singleton' = sol where sol : {X : π€ Μ } {Y : π₯ Μ } β X β Y β is-singleton X β is-singleton Y sol e = retract-of-singleton (β-gives-β· e) subtypes-of-sets-are-sets = sol where sol : {X : π€ Μ } {Y : π₯ Μ } (m : X β Y) β left-cancellable m β is-set Y β is-set X sol {π€} {π₯} {X} m i h = types-with-wconstant-οΌ-endomaps-are-sets X c where f : (x x' : X) β x οΌ x' β x οΌ x' f x x' r = i (ap m r) ΞΊ : (x x' : X) (r s : x οΌ x') β f x x' r οΌ f x x' s ΞΊ x x' r s = ap i (h (m x) (m x') (ap m r) (ap m s)) c : wconstant-οΌ-endomaps X c x x' = f x x' , ΞΊ x x' prβ-lc = sol where sol : {X : π€ Μ } {A : X β π₯ Μ } β ((x : X) β is-subsingleton (A x)) β left-cancellable (Ξ» (t : Ξ£ A) β prβ t) sol i p = to-Ξ£-οΌ (p , i _ _ _) subsets-of-sets-are-sets = sol where sol : (X : π€ Μ ) (A : X β π₯ Μ ) β is-set X β ((x : X) β is-subsingleton (A x)) β is-set (Ξ£ x κ X , A x) sol X A h p = subtypes-of-sets-are-sets prβ (prβ-lc p) h to-subtype-οΌ = sol where sol : {X : π€ Μ } {A : X β π₯ Μ } {x y : X} {a : A x} {b : A y} β ((x : X) β is-subsingleton (A x)) β x οΌ y β (x , a) οΌ (y , b) sol {π€} {π₯} {X} {A} {x} {y} {a} {b} s p = to-Ξ£-οΌ (p , s y (transport A p a) b) prβ-equiv = sol where sol : {X : π€ Μ } {A : X β π₯ Μ } β ((x : X) β is-singleton (A x)) β is-equiv (Ξ» (t : Ξ£ A) β prβ t) sol {π€} {π₯} {X} {A} s = invertibles-are-equivs prβ (g , Ξ· , Ξ΅) where g : X β Ξ£ A g x = x , prβ (s x) Ξ΅ : (x : X) β prβ (g x) οΌ x Ξ΅ x = refl (prβ (g x)) Ξ· : (Ο : Ξ£ A) β g (prβ Ο) οΌ Ο Ξ· (x , a) = to-subtype-οΌ (Ξ» x β singletons-are-subsingletons (A x) (s x)) (Ξ΅ x) Ξ Ξ£-distr-β = sol where sol : {X : π€ Μ } {A : X β π₯ Μ } {P : (x : X) β A x β π¦ Μ } β (Ξ x κ X , Ξ£ a κ A x , P x a) β (Ξ£ f κ Ξ A , Ξ x κ X , P x (f x)) sol {π€} {π₯} {π¦} {X} {A} {P} = invertibility-gives-β Ο (Ξ³ , Ξ· , Ξ΅) where Ο : (Ξ x κ X , Ξ£ a κ A x , P x a) β Ξ£ f κ Ξ A , Ξ x κ X , P x (f x) Ο g = ((Ξ» x β prβ (g x)) , Ξ» x β prβ (g x)) Ξ³ : (Ξ£ f κ Ξ A , Ξ x κ X , P x (f x)) β Ξ x κ X , Ξ£ a κ A x , P x a Ξ³ (f , Ο) x = f x , Ο x Ξ· : Ξ³ β Ο βΌ id Ξ· = refl Ξ΅ : Ο β Ξ³ βΌ id Ξ΅ = refl Ξ£-assoc = sol where sol : {X : π€ Μ } {Y : X β π₯ Μ } {Z : Ξ£ Y β π¦ Μ } β Ξ£ Z β (Ξ£ x κ X , Ξ£ y κ Y x , Z (x , y)) sol {π€} {π₯} {π¦} {X} {Y} {Z} = invertibility-gives-β f (g , refl , refl) where f : Ξ£ Z β Ξ£ x κ X , Ξ£ y κ Y x , Z (x , y) f ((x , y) , z) = (x , (y , z)) g : (Ξ£ x κ X , Ξ£ y κ Y x , Z (x , y)) β Ξ£ Z g (x , (y , z)) = ((x , y) , z) β»ΒΉ-is-equiv : {X : π€ Μ } (x y : X) β is-equiv (Ξ» (p : x οΌ y) β p β»ΒΉ) β»ΒΉ-is-equiv x y = invertibles-are-equivs _β»ΒΉ (_β»ΒΉ , β»ΒΉ-involutive , β»ΒΉ-involutive) β»ΒΉ-β = sol where sol : {X : π€ Μ } (x y : X) β (x οΌ y) β (y οΌ x) sol x y = (_β»ΒΉ , β»ΒΉ-is-equiv x y) singleton-types-β = sol where sol : {X : π€ Μ } (x : X) β singleton-type' x β singleton-type x sol x = Ξ£-cong (Ξ» y β β»ΒΉ-β x y) singletons-β = sol where sol : {X : π€ Μ } {Y : π₯ Μ } β is-singleton X β is-singleton Y β X β Y sol {π€} {π₯} {X} {Y} i j = invertibility-gives-β f (g , Ξ· , Ξ΅) where f : X β Y f x = center Y j g : Y β X g y = center X i Ξ· : (x : X) β g (f x) οΌ x Ξ· = centrality X i Ξ΅ : (y : Y) β f (g y) οΌ y Ξ΅ = centrality Y j maps-of-singletons-are-equivs = sol where sol : {X : π€ Μ } {Y : π₯ Μ } (f : X β Y) β is-singleton X β is-singleton Y β is-equiv f sol {π€} {π₯} {X} {Y} f i j = invertibles-are-equivs f (g , Ξ· , Ξ΅) where g : Y β X g y = center X i Ξ· : (x : X) β g (f x) οΌ x Ξ· = centrality X i Ξ΅ : (y : Y) β f (g y) οΌ y Ξ΅ y = singletons-are-subsingletons Y j (f (g y)) y logically-equivalent-subsingletons-are-equivalent = sol where sol : (X : π€ Μ ) (Y : π₯ Μ ) β is-subsingleton X β is-subsingleton Y β X β Y β X β Y sol X Y i j (f , g) = invertibility-gives-β f (g , (Ξ» x β i (g (f x)) x) , (Ξ» y β j (f (g y)) y)) singletons-are-equivalent = sol where sol : (X : π€ Μ ) (Y : π₯ Μ ) β is-singleton X β is-singleton Y β X β Y sol X Y i j = invertibility-gives-β (Ξ» _ β center Y j) ((Ξ» _ β center X i) , centrality X i , centrality Y j) NatΞ£-fiber-equiv = sol where sol : {X : π€ Μ } (A : X β π₯ Μ ) (B : X β π¦ Μ ) (Ο : Nat A B) (x : X) (b : B x) β fiber (Ο x) b β fiber (NatΞ£ Ο) (x , b) sol A B Ο x b = invertibility-gives-β f (g , Ξ΅ , Ξ·) where f : fiber (Ο x) b β fiber (NatΞ£ Ο) (x , b) f (a , refl _) = ((x , a) , refl (x , Ο x a)) g : fiber (NatΞ£ Ο) (x , b) β fiber (Ο x) b g ((x , a) , refl _) = (a , refl (Ο x a)) Ξ΅ : (w : fiber (Ο x) b) β g (f w) οΌ w Ξ΅ (a , refl _) = refl (a , refl (Ο x a)) Ξ· : (t : fiber (NatΞ£ Ο) (x , b)) β f (g t) οΌ t Ξ· ((x , a) , refl _) = refl ((x , a) , refl (NatΞ£ Ο (x , a))) NatΞ£-equiv-gives-fiberwise-equiv = sol where sol : {X : π€ Μ } {A : X β π₯ Μ } {B : X β π¦ Μ } (Ο : Nat A B) β is-equiv (NatΞ£ Ο) β ((x : X) β is-equiv (Ο x)) sol {π€} {π₯} {π¦} {X} {A} {B} Ο e x b = Ξ³ where d : fiber (Ο x) b β fiber (NatΞ£ Ο) (x , b) d = NatΞ£-fiber-equiv A B Ο x b s : is-singleton (fiber (NatΞ£ Ο) (x , b)) s = e (x , b) Ξ³ : is-singleton (fiber (Ο x) b) Ξ³ = equiv-to-singleton d s Ξ£-is-subsingleton = sol where sol : {X : π€ Μ } {A : X β π₯ Μ } β is-subsingleton X β ((x : X) β is-subsingleton (A x)) β is-subsingleton (Ξ£ A) sol i j (x , _) (y , _) = to-subtype-οΌ j (i x y) Γ-is-singleton = sol where sol : {X : π€ Μ } {Y : π₯ Μ } β is-singleton X β is-singleton Y β is-singleton (X Γ Y) sol (x , Ο) (y , Ξ³) = (x , y) , Ξ΄ where Ξ΄ : β z β x , y οΌ z Ξ΄ (x' , y' ) = to-Γ-οΌ (Ο x' , Ξ³ y') Γ-is-subsingleton = sol where sol : {X : π€ Μ } {Y : π₯ Μ } β is-subsingleton X β is-subsingleton Y β is-subsingleton (X Γ Y) sol i j = Ξ£-is-subsingleton i (Ξ» _ β j) Γ-is-subsingleton' = sol where sol : {X : π€ Μ } {Y : π₯ Μ } β ((Y β is-subsingleton X) Γ (X β is-subsingleton Y)) β is-subsingleton (X Γ Y) sol {π€} {π₯} {X} {Y} (i , j) = k where k : is-subsingleton (X Γ Y) k (x , y) (x' , y') = to-Γ-οΌ (i y x x' , j x y y') Γ-is-subsingleton'-back = sol where sol : {X : π€ Μ } {Y : π₯ Μ } β is-subsingleton (X Γ Y) β (Y β is-subsingleton X) Γ (X β is-subsingleton Y) sol {π€} {π₯} {X} {Y} k = i , j where i : Y β is-subsingleton X i y x x' = ap prβ (k (x , y) (x' , y)) j : X β is-subsingleton Y j x y y' = ap prβ (k (x , y) (x , y')) apβ = sol where sol : {X : π€ Μ } {Y : π₯ Μ } {Z : π¦ Μ } (f : X β Y β Z) {x x' : X} {y y' : Y} β x οΌ x' β y οΌ y' β f x y οΌ f x' y' sol f (refl x) (refl y) = refl (f x y) \end{code}