open import 1Lab.Prelude

open import Algebra.Group

open import Data.Set.Truncation

module Algebra.Group.Homotopy.BAut where

Deloopings of automorphism groupsπŸ”—

Recall that any set XX generates a group Sym(X)\id{Sym}(X), given by the automorphisms X≃XX \simeq X. We also have a generic construction of deloopings: special spaces K(G,1)K(G,1) (for a group GG), where the fundamental group Ο€1(K(G,1))\pi_1(K(G,1)) recovers GG. For the specific case of deloping automorphism groups, we can give an alternative construction: The type of small types merely equivalent to XX has a fundamental group of Sym(X)\id{Sym}(X).

module _ {β„“} (T : Type β„“) where
  BAut : Type (lsuc β„“)
  BAut = Ξ£[ B ∈ Type β„“ ] βˆ₯ T ≃ B βˆ₯

  base : BAut
  base = T , inc (id , id-equiv)

The first thing we note is that BAut is a connected type, meaning that it only has β€œa single point”, or, more precisely, that all of its interesting information is in its (higher) path spaces:

  connected : βˆ€ b β†’ βˆ₯ b ≑ base βˆ₯
  connected (b , x) =
    βˆ₯-βˆ₯-elim {P = Ξ» x β†’ βˆ₯ (b , x) ≑ base βˆ₯} (Ξ» _ β†’ squash) (Ξ» e β†’ inc (p _ _)) x
      p : βˆ€ b e β†’ (b , inc e) ≑ base
      p _ = EquivJ (Ξ» B e β†’ (B , inc e) ≑ base) refl

We now turn to proving that Ο€1(B⁑(X))≃(X≃X)\pi_1(\baut(X)) \simeq (X \simeq X). We will define a type family Code(b)\id{Code}(b), where a value p:Code(x)p : \id{Code}(x) codes for an identification p≑basep \equiv \id{base}. Correspondingly, there are functions to and from these types: The core of the proof is showing that these functions, encode and decode, are inverses.

  Code : BAut β†’ Type β„“
  Code b = T ≃ b .fst

  encode : βˆ€ b β†’ base ≑ b β†’ Code b
  encode x p = path→equiv (ap fst p)

  decode : βˆ€ b β†’ Code b β†’ base ≑ b
  decode (b , eqv) rot = Σ-pathp (ua rot) (is-prop→pathp (λ _ → squash) _ _)

Recall that base\id{base} is the type TT itself, equipped with the identity equivalence. Hence, to code for an identification base≑(X,e)\id{base} \equiv (X, e), it suffices to record ee β€” which by univalence corresponds to a path ua(e):T≑X\id{ua}(e) : T \equiv X. We can not directly extract the equivalence from a given point (X,e):B⁑(X)(X, e) : \baut(X): it is β€œhidden away” under a truncation. But, given an identification p:b≑basep : b \equiv \id{base}, we can recover the equivalence by seeing how pp identifies X≑TX \equiv T.

  decode∘encode : βˆ€ b (p : base ≑ b) β†’ decode b (encode b p) ≑ p
  decode∘encode b =
    J (Ξ» b p β†’ decode b (encode b p) ≑ p)
      (Ξ£-prop-square (Ξ» _ β†’ squash) sq)
      sq : ua (encode base refl) ≑ refl
      sq = ap ua pathβ†’equiv-refl βˆ™ ua-id-equiv

Encode and decode are inverses by a direct application of univalence.

  encode∘decode : βˆ€ b (p : Code b) β†’ encode b (decode b p) ≑ p
  encode∘decode b p = equivβ†’counit univalence _

We now have the core result: Specialising encode and decode to the basepoint, we conclude that loop space base≑base\id{base} \equiv \id{base} is equivalent to Sym(X)\id{Sym}(X).

  Ω¹BAut : (base ≑ base) ≃ (T ≃ T)
  Ω¹BAut = Isoβ†’Equiv
    (encode base , iso (decode base) (encode∘decode base) (decode∘encode base))

We can also characterise the h-level of these connected components. Intuitively the h-level should be one more than that of the type we’re delooping, because BAut β€œonly has one point” (it’s connected), and as we established right above, the space of loops of that point is the automorphism group we delooped. The trouble here is that BAut has many points, and while we can pick paths between any two of them, we can not do so continuously (otherwise BAut would be a proposition).

This turns out not to matter! Since β€œbeing of h-level nn” is a proposition, our discontinuous (i.e.: truncated) method of picking paths is just excellent. In the case when TT is contractible, we can directly get at the underlying equivalences, but for the higher h-levels, we proceed exactly by using connectedness.

  BAut-is-hlevel : βˆ€ n β†’ is-hlevel T n β†’ is-hlevel BAut (1 + n)
  BAut-is-hlevel zero hl (x , f) (y , g) =
    Ξ£-prop-path (Ξ» _ β†’ squash) (sym (ua fβ€²) βˆ™ ua gβ€²)
      extract : βˆ€ {X} β†’ is-prop (T ≃ X)
      extract f g = Ξ£-prop-path is-equiv-is-prop $ funext Ξ» x β†’
        ap fst (is-contrβ†’is-prop ((f e⁻¹) .snd .is-eqv (hl .centre))
          (f .fst x , is-contr→is-prop hl _ _)
          (g .fst x , is-contr→is-prop hl _ _))

      fβ€² = βˆ₯-βˆ₯-rec extract (Ξ» x β†’ x) f
      gβ€² = βˆ₯-βˆ₯-rec extract (Ξ» x β†’ x) g
  BAut-is-hlevel (suc n) hl x y =
    βˆ₯-βˆ₯-elimβ‚‚ {P = Ξ» _ _ β†’ is-hlevel (x ≑ y) (1 + n)}
      (Ξ» _ _ β†’ is-hlevel-is-prop _)
      (Ξ» p q β†’ transport (apβ‚‚ (Ξ» a b β†’ is-hlevel (a ≑ b) (1 + n)) (sym p) (sym q))
        (is-hlevel≃ (1 + n) (Ω¹BAut e⁻¹) (≃-is-hlevel (1 + n) hl hl)))
      (connected x) (connected y)