module Algebra.Group.Action where

Group actions🔗

A useful way to think about groups is to think of their elements as encoding “symmetries” of a particular object. For a concrete example, consider the group (R,+,0)(\mathbb{R}, +, 0) of real numbers under addition, and consider the unit circle1 sitting in C\mathbb{C}. Given a real number x:Rx : \mathbb{R}, we can consider the “action” on the circle defined by

a↩eixa, a \mapsto e^{ix}a\text{,}

which “visually” has the effect of rotating the point aa so it lands xx radians around the circle, in the counterclockwise direction. Each xx-radian rotation has an inverse, given by rotation xx radians in the clockwise direction; but observe that this is the same as rotating −x-x degrees counterclockwise. Additionally, observe that rotating by zero radians does nothing to the circle.

We say that R\mathbb{R} acts on the circle by counterclockwise rotation; What this means is that to each element x:Rx : \mathbb{R}, we assign a map C→C\mathbb{C} \to \mathbb{C} in a way compatible with the group structure: Additive inverses “translate to” inverse maps, addition translates to function composition, and the additive identity is mapped to the identity function. Note that since C\mathbb{C} is a set, this is equivalently a group homomorphism

R→Sym(C), \mathbb{R} \to \mathrm{Sym}(\mathbb{C})\text{,}

where the codomain is the group of symmetries of C\mathbb{C}. But what if we want a group GG to act on an object XX of a more general category, rather than an object of Sets\mathbf{Sets}?

Automorphism groups🔗

The answer is that, for an object XX of some category C\mathcal{C}, the collection of all isomorphisms X≅XX \cong X forms a group under composition, generalising the construction of Sym(X)\mathrm{Sym}(X) to objects beyond sets! We refer to a “self-isomorphism” as an automorphism, and denote their group by Aut(X)\mathrm{Aut}(X).

module _ {o ℓ} (C : Precategory o ℓ) where
  private module C = Cat C

  Aut : C.Ob → Group _
  Aut X = to-group mg where
    mg : make-group (X C.≅ X)
    mg .make-group.group-is-set = C.≅-is-set
    mg .make-group.unit = C.id-iso
    mg .make-group.mul g f = g C.∘Iso f
    mg .make-group.inv = C._Iso⁻Âč
    mg .make-group.assoc x y z = C.≅-pathp refl refl (sym (C.assoc _ _ _))
    mg .make-group.invl x = C.≅-pathp refl refl (x .C.invl)
    mg .make-group.idl x = C.≅-pathp refl refl (C.idr _)

Suppose we have a category C\mathcal{C}, an object X:CX : \mathcal{C}, and a group GG; A GG-action on XX is a group homomorphism G→Aut(X)G \to \mathrm{Aut}(X).

  Action : Group ℓ → C.Ob → Type _
  Action G X = Groups.Hom G (Aut X)

As functors🔗

Recall that we defined the delooping of a monoid MM into a category as the category BM\mathbf{B}M with a single object ∙\bull, and Hom(∙,∙)=M\mathbf{Hom}(\bull, \bull) = M. If we instead deloop a group GG into a group BG\mathbf{B}G, then functors F:BG→CF : \mathbf{B}G \to \mathcal{C} correspond precisely to actions of GG on the object F(∙)F(\bull)!

    Functor→action : (F : Functor BG C) → Action G (F .F₀ tt)
    Functor→action F .hom it = C.make-iso
        (F .F₁ it) (F .F₁ (it ⁻Âč))
        (F.annihilate inversel) (F.annihilate inverser)
      where
        open Group-on (G .snd)
        module F = Functor-kit F
    Functor→action F .preserves .is-group-hom.pres-⋆ x y = C.≅-pathp refl refl (F .F-∘ _ _)

    Action→functor : {X : C.Ob} (A : Action G X) → Functor BG C
    Action→functor {X = X} A .F₀ _ = X
    Action→functor A .F₁ e = (A # e) .C.to
    Action→functor A .F-id = ap C.to (is-group-hom.pres-id (A .preserves))
    Action→functor A .F-∘ f g = ap C.to (is-group-hom.pres-⋆ (A .preserves) _ _)

After constructing these functions in either direction, it’s easy enough to show that they are inverse equivalences, but we must be careful about the codomain: rather than taking “XX with a GG-action” for any particular XX, we take the total space of C\mathcal{C}-objects equipped with GG-actions.

After this small correction, the proof is almost definitional: after applying the right helpers for pushing paths inwards, we’re left with refl at all the leaves.

    Functor≃action : is-equiv {B = ÎŁ _ (Action G)} λ i → _ , Functor→action i
    Functor≃action = is-iso→is-equiv λ where
      .is-iso.inv (x , act) → Action→functor act
      .is-iso.rinv x → Σ-pathp refl $
        total-hom-pathp _ _ _ (funext (λ i → C.≅-pathp _ _ refl))
          (is-prop→pathp (λ i → is-group-hom-is-prop) _ _)
      .is-iso.linv x → Functor-path (λ _ → refl) λ _ → refl

  1. this is not the higher inductive type S1S^1, but rather the usual definition of the circle as a subset of C\mathbb{C}.↩