Martin Escardo, 2017, written in Agda November 2019. If X is discrete then (X + π) Γ Aut X β Aut (X + π), where Aut X := (X β X) is the type of automorphisms of the type X. This is proved by Danielsson in http://www.cse.chalmers.se/~nad/listings/equality/Function-universe.html#[β€βββ€β]β[β€βΓβ] See also Coquand's https://github.com/simhu/cubical/blob/master/examples/finite.cub and our https://www.cs.bham.ac.uk/~mhe/TypeTopology/PlusOneLC.html More generally, for an arbitraty type X, we prove that co-derived-set (X + π) Γ Aut X β Aut (X + π), where the co-derived-set of a type is the subtype of isolated points. In particular, if X is discrete (all its points are isolated), then we get the "factorial equivalence" (X + π) Γ Aut X β Aut (X + π). On the other hand, if X is perfect (has no isolated points), then Aut X β Aut (X + π), This is the case, for example, if X is the circle SΒΉ. But if P is a proposition, then P + π β Aut (P + π). \begin{code} {-# OPTIONS --safe --without-K #-} open import UF.FunExt \end{code} We need functional extensionality (but not propositional extensionality or univalence). \begin{code} module Factorial.Law (fe : FunExt) where open import Factorial.Swap open import MLTT.Plus-Properties open import MLTT.Spartan open import UF.Base open import UF.DiscreteAndSeparated open import UF.Embeddings open import UF.Equiv open import UF.Equiv-FunExt open import UF.EquivalenceExamples open import UF.Retracts open import UF.Subsingletons \end{code} We refer to set of isolated points as the co derived set (for complement of the derived set, in the sense of Cantor, consisting of the limit points, i.e. non-isolated points). Recall that a point x : X is isolated if the identity type x οΌ y is decidable for every y : X. \begin{code} co-derived-set : π€ Μ β π€ Μ co-derived-set X = Ξ£ x κ X , is-isolated x cods-embedding : (X : π€ Μ ) β co-derived-set X β X cods-embedding X = prβ cods-embedding-is-embedding : (X : π€ Μ ) β is-embedding (cods-embedding X) cods-embedding-is-embedding X = prβ-is-embedding (being-isolated-is-prop fe) cods-embedding-is-equiv : (X : π€ Μ ) β is-discrete X β is-equiv (cods-embedding X) cods-embedding-is-equiv X d = prβ-is-equiv X is-isolated (Ξ» x β pointed-props-are-singletons (d x) (being-isolated-is-prop fe x)) β-cods : (X : π€ Μ ) β is-discrete X β co-derived-set X β X β-cods X d = cods-embedding X , cods-embedding-is-equiv X d \end{code} Exercise. Prove that the co derived set is a set in the sense of univalent mathematics. Recall that a type is perfect if it has no isolated points. \begin{code} perfect-coderived-empty : (X : π€ Μ ) β is-perfect X β is-empty (co-derived-set X) perfect-coderived-empty X i (x , j) = i (x , j) perfect-coderived-singleton : (X : π€ Μ ) β is-perfect X β is-singleton (co-derived-set (X + π {π₯})) perfect-coderived-singleton X i = (inr β , new-point-is-isolated) , Ξ³ where Ξ³ : (c : co-derived-set (X + π)) β inr β , new-point-is-isolated οΌ c Ξ³ (inl x , j) = π-elim (i (x , a)) where a : is-isolated x a = embeddings-reflect-isolatedness inl (inl-is-embedding X π) x j Ξ³ (inr β , j) = to-Ξ£-οΌ' (being-isolated-is-prop fe (inr β) new-point-is-isolated j) \end{code} For a type A, denote by A' the co-derived set of A. Then we get a map (Y+π)' Γ (X β Y) β (X+π β Y+π), where the choice of isolated point a:Y+π controls which equivalence X+πβY+π we get from the equivalence f: XβY: f+π swap (a , inr (β)) X+π ----> Y+π --------------------> Y+π The claim is that the above map is an equivalence. We construct/prove this in four steps: (1) (X β Y) β Ξ£ f κ X + π β Y + π , f (inr β) οΌ inr β Hence (2) (Y + π)' Γ (X β Y) β (Y + π)' Γ Ξ£ f κ X + π β Y + π , f (inr β) οΌ inr β Also (3) (Y + π)' Γ (Ξ£ f κ X + π β Y + π , f (inr β) οΌ inr β) β (X + π β Y + π) And therefore (4) (Y + π)' Γ (X β Y) β (X + π β Y + π) \end{code} \begin{code} module factorial-steps {π€ π₯ : Universe} (π¦ π£ : Universe) (X : π€ Μ ) (Y : π₯ Μ ) where X+π = X + π {π¦} Y+π = Y + π {π£} \end{code} In the following, we use the fact that if f (inr β) οΌ inr β for a function, f : X+π β Y+π, then f (inl x) is of the form inl y (inl-preservation). \begin{code} lemma : (f : X+π β Y+π) β f (inr β) οΌ inr β β is-equiv f β Ξ£ f' κ (X β Y), is-equiv f' Γ (f βΌ +functor f' unique-to-π) lemma f p i = Ξ³ (equivs-are-qinvs f i) where Ξ³ : qinv f β Ξ£ f' κ (X β Y), is-equiv f' Γ (f βΌ +functor f' unique-to-π) Ξ³ (g , Ξ· , Ξ΅) = f' , qinvs-are-equivs f' (g' , Ξ·' , Ξ΅') , h where f' : X β Y f' x = prβ (inl-preservation f p (sections-are-lc f (g , Ξ·)) x) a : (x : X) β f (inl x) οΌ inl (f' x) a x = prβ (inl-preservation f p (sections-are-lc f (g , Ξ·)) x) q = g (inr β) οΌβ¨ (ap g p)β»ΒΉ β© g (f (inr β)) οΌβ¨ Ξ· (inr β) β© inr β β g' : Y β X g' x = prβ (inl-preservation g q (sections-are-lc g (f , Ξ΅)) x) b : (y : Y) β g (inl y) οΌ inl (g' y) b y = prβ (inl-preservation g q (sections-are-lc g (f , Ξ΅)) y) Ξ·' : g' β f' βΌ id Ξ·' x = inl-lc (inl (g' (f' x)) οΌβ¨ (b (f' x))β»ΒΉ β© g (inl (f' x)) οΌβ¨ (ap g (a x))β»ΒΉ β© g (f (inl x)) οΌβ¨ Ξ· (inl x) β© inl x β) Ξ΅' : f' β g' βΌ id Ξ΅' y = inl-lc (inl (f' (g' y)) οΌβ¨ (a (g' y))β»ΒΉ β© f (inl (g' y)) οΌβ¨ (ap f (b y))β»ΒΉ β© f (g (inl y)) οΌβ¨ Ξ΅ (inl y) β© inl y β) h : f βΌ +functor f' unique-to-π h (inl x) = a x h (inr β) = p stepβ : (X β Y) β (Ξ£ f κ X+π β Y+π , β f β (inr β) οΌ inr β) stepβ = qinveq Ο (Ξ³ , Ξ· , Ξ΅) where a : (g : X β Y) β qinv g β Y+π β X+π a g (g' , Ξ· , Ξ΅) = +functor g' unique-to-π b : (g : X β Y) (q : qinv g) β a g q β +functor g unique-to-π βΌ id b g (g' , Ξ· , Ξ΅) (inl x) = ap inl (Ξ· x) b g (g' , Ξ· , Ξ΅) (inr β) = refl c : (g : X β Y) (q : qinv g) β +functor g unique-to-π β a g q βΌ id c g (g' , Ξ· , Ξ΅) (inl y) = ap inl (Ξ΅ y) c g (g' , Ξ· , Ξ΅) (inr β) = refl d : (g : X β Y) β qinv g β is-equiv (+functor g unique-to-π) d g q = qinvs-are-equivs (+functor g unique-to-π) (a g q , b g q , c g q) Ο : (X β Y) β Ξ£ e κ X+π β Y+π , β e β (inr β) οΌ inr β Ο (g , i) = (+functor g unique-to-π , d g (equivs-are-qinvs g i)) , refl Ξ³ : (Ξ£ e κ X+π β Y+π , β e β (inr β) οΌ inr β) β (X β Y) Ξ³ ((f , i) , p) = prβ (lemma f p i) , prβ (prβ (lemma f p i)) Ξ· : Ξ³ β Ο βΌ id Ξ· (g , i) = to-Ξ£-οΌ (refl , being-equiv-is-prop fe g _ i) Ξ΅ : Ο β Ξ³ βΌ id Ξ΅ ((f , i) , p) = to-Ξ£-οΌ (to-subtype-οΌ (being-equiv-is-prop fe) r , isolated-is-h-isolated (f (inr β)) (equivs-preserve-isolatedness f i (inr β) new-point-is-isolated) _ p) where s : f βΌ prβ (prβ ((Ο β Ξ³) ((f , i) , p))) s (inl x) = prβ (prβ (lemma f p i)) (inl x) s (inr β) = p r : prβ (prβ ((Ο β Ξ³) ((f , i) , p))) οΌ f r = dfunext (fe _ _) (Ξ» z β (s z)β»ΒΉ) stepβ : co-derived-set (Y+π) Γ (X β Y) β co-derived-set (Y+π) Γ (Ξ£ e κ X+π β Y+π , β e β (inr β) οΌ inr β) stepβ = Γ-cong (β-refl (co-derived-set (Y+π))) stepβ stepβ : (co-derived-set (Y+π) Γ (Ξ£ e κ X+π β Y+π , β e β (inr β) οΌ inr β)) β (X+π β Y+π) stepβ = qinveq Ο (Ξ³ , Ξ· , Ξ΅) where A = co-derived-set (Y+π) Γ (Ξ£ e κ X+π β Y+π , β e β (inr β) οΌ inr β) B = X+π β Y+π Ο : A β B Ο ((t , i) , ((f , j) , p)) = g , k where g : X+π β Y+π g = swap t (inr β) i new-point-is-isolated β f k : is-equiv g k = β-is-equiv-abstract j (swap-is-equiv t (inr β) i new-point-is-isolated) Ξ³ : B β A Ξ³ (g , k) = (t , i) , ((f , j) , p) where t : Y+π t = g (inr β) i : is-isolated t i = equivs-preserve-isolatedness g k (inr β) new-point-is-isolated f : X+π β Y+π f = swap t (inr β) i new-point-is-isolated β g j : is-equiv f j = β-is-equiv-abstract k (swap-is-equiv t (inr β) i new-point-is-isolated) p : f (inr β) οΌ inr β p = swap-equationβ t (inr β) i new-point-is-isolated Ξ· : Ξ³ β Ο βΌ id Ξ· ((t , i) , ((f , j) , p)) = s where g : X+π β Y+π g = swap t (inr β) i new-point-is-isolated β f k : is-equiv g k = β-is-equiv-abstract j (swap-is-equiv t (inr β) i new-point-is-isolated) t' : Y+π t' = g (inr β) i' : is-isolated t' i' = equivs-preserve-isolatedness g k (inr β) new-point-is-isolated q : t' οΌ t q = g (inr β) οΌβ¨ a β© swap t (inr β) i new-point-is-isolated (inr β) οΌβ¨ b β© t β where a = ap (swap t (inr β) i new-point-is-isolated) p b = swap-equationβ t (inr β) i new-point-is-isolated r : (t' , i') οΌ (t , i) r = to-subtype-οΌ (being-isolated-is-prop fe) q f' : X+π β Y+π f' = swap t' (inr β) i' new-point-is-isolated β g j' : is-equiv f' j' = β-is-equiv-abstract k (swap-is-equiv t' (inr β) i' new-point-is-isolated) h : f' βΌ f h z = swap t' (inr β) i' new-point-is-isolated (swap t (inr β) i new-point-is-isolated (f z)) οΌβ¨ a β© swap t (inr β) i new-point-is-isolated (swap t (inr β) i new-point-is-isolated (f z)) οΌβ¨ b β© f z β where Ο : co-derived-set (Y+π) β Y+π Ο (t' , i') = swap t' (inr β) i' new-point-is-isolated (swap t (inr β) i new-point-is-isolated (f z)) a = ap Ο r b = swap-involutive t (inr β) i new-point-is-isolated (f z) m : is-isolated (f (inr β)) m = equivs-preserve-isolatedness f j (inr β) new-point-is-isolated n : {t : Y+π} β is-prop (f (inr β) οΌ t) n = isolated-is-h-isolated (f (inr β)) m o : f' , j' οΌ f , j o = to-subtype-οΌ (being-equiv-is-prop fe) (dfunext (fe _ _) h) p' : f' (inr β) οΌ inr β p' = swap-equationβ t' (inr β) i' new-point-is-isolated s : ((t' , i') , ((f' , j') , p')) οΌ ((t , i) , ((f , j) , p)) s = to-Γ-οΌ r (to-Ξ£-οΌ (o , n top' p)) where top' = transport (Ξ» - β β - β (inr β) οΌ inr β) o p' Ξ΅ : Ο β Ξ³ βΌ id Ξ΅ (g , k) = r where z : Y+π z = g (inr β) i : is-isolated z i = equivs-preserve-isolatedness g k (inr β) new-point-is-isolated h : (swap (g (inr β)) (inr β) i new-point-is-isolated) β (swap (g (inr β)) (inr β) i new-point-is-isolated) β g βΌ g h = swap-involutive z (inr β) i new-point-is-isolated β g r : Ο (Ξ³ (g , k)) οΌ (g , k) r = to-Ξ£-οΌ (dfunext (fe _ _) h , being-equiv-is-prop fe g _ k) stepβ : co-derived-set (Y+π) Γ (X β Y) β (X+π β Y+π) stepβ = stepβ β stepβ \end{code} This is the end of the submodule, which has the following corollaries: \begin{code} general-factorial : (X : π€ Μ ) β co-derived-set (X + π) Γ Aut X β Aut (X + π) general-factorial {π€} X = factorial-steps.stepβ π€ π€ X X discrete-factorial : (X : π€ Μ ) β is-discrete X β (X + π) Γ Aut X β Aut (X + π) discrete-factorial X d = Ξ³ where i = Γ-cong (β-sym (β-cods (X + π) ( +-is-discrete d π-is-discrete))) (β-refl (Aut X)) Ξ³ = (X + π) Γ Aut X ββ¨ i β© co-derived-set (X + π) Γ Aut X ββ¨ general-factorial X β© Aut (X + π) β perfect-factorial : (X : π€ Μ ) β is-perfect X β Aut X β Aut (X + π) perfect-factorial {π€} X i = Aut X ββ¨ I β© π Γ Aut X ββ¨ II β© co-derived-set (X + π) Γ Aut X ββ¨ III β© Aut (X + π) β where I = β-sym (π-lneutral {π€} {π€}) II = Γ-cong (β-sym (singleton-β-π (perfect-coderived-singleton X i))) (β-refl (Aut X)) III = general-factorial X \end{code} Exercise. Conclude that the map (-)+π : π€ Μ β π€ Μ, although it is left-cancellable, is not an embedding, but that it is an embedding when restricted to perfect types. We should not forget the (trivial) "base case": \begin{code} factorial-base : π {π₯} β Aut (π {π€}) factorial-base = f , ((g , Ξ·) , (g , Ξ΅)) where f : π β Aut π f _ = id , ((id , (Ξ» _ β refl)) , (id , (Ξ» _ β refl))) g : Aut π β π g = unique-to-π Ξ· : (e : Aut π) β f (g e) οΌ e Ξ· _ = to-subtype-οΌ (being-equiv-is-prop fe) (dfunext (fe _ _) (Ξ» y β π-elim y)) Ξ΅ : (x : π) β g (f x) οΌ x Ξ΅ β = refl \end{code} Added 21st November 2022. \begin{code} Aut-of-prop-is-singleton : (P : π€ Μ ) β is-prop P β is-singleton (Aut P) Aut-of-prop-is-singleton P i = β-refl P , h where h : (e : P β P) β β-refl P οΌ e h (f , _) = to-subtype-οΌ (being-equiv-is-prop fe) (dfunext (fe _ _) (Ξ» p β i p (f p))) factorial-base-generalized : (P : π€ Μ ) β is-prop P β π {π₯} β Aut P factorial-base-generalized P i = singleton-β-π' (Aut-of-prop-is-singleton P i) propositional-factorial : (P : π€ Μ ) β is-prop P β (P + π) β Aut (P + π) propositional-factorial {π€} P i = P + π ββ¨ I β© (P + π) Γ (π {π€}) ββ¨ II β© (P + π) Γ Aut P ββ¨ III β© Aut (P + π) β where I = β-sym π-rneutral II = Γ-cong (β-refl (P + π)) (factorial-base-generalized P i) III = discrete-factorial P (props-are-discrete i) \end{code} Is the converse also true?