The substitution functor of group actions

module group-theory.substitution-functor-group-actions where
Imports
open import category-theory.functors-large-precategories

open import foundation.cartesian-product-types
open import foundation.dependent-pair-types
open import foundation.equivalence-classes
open import foundation.equivalence-relations
open import foundation.existential-quantification
open import foundation.identity-types
open import foundation.propositional-truncations
open import foundation.sets
open import foundation.universe-levels

open import group-theory.group-actions
open import group-theory.groups
open import group-theory.homomorphisms-group-actions
open import group-theory.homomorphisms-groups
open import group-theory.precategory-of-group-actions
open import group-theory.symmetric-groups

Idea

Given a group homomorphism f : G → H and an H-set Y, we obtain a G-actio on Y by g,x ↦ f(g)x. This operation is functorial in Y.

Definition

module _
  {l1 l2 : Level} {G : Group l1} {H : Group l2} (f : type-hom-Group G H)
  where

  obj-subst-Abstract-Group-Action :
    {l3 : Level}  Abstract-Group-Action H l3  Abstract-Group-Action G l3
  pr1 (obj-subst-Abstract-Group-Action X) = set-Abstract-Group-Action H X
  pr2 (obj-subst-Abstract-Group-Action X) =
    comp-hom-Group G H
      ( symmetric-Group (set-Abstract-Group-Action H X))
      ( pr2 X)
      ( f)

  hom-subst-Abstract-Group-Action :
    {l3 l4 : Level}
    (X : Abstract-Group-Action H l3) (Y : Abstract-Group-Action H l4) 
    type-hom-Abstract-Group-Action H X Y 
    type-hom-Abstract-Group-Action G
      ( obj-subst-Abstract-Group-Action X)
      ( obj-subst-Abstract-Group-Action Y)
  pr1 (hom-subst-Abstract-Group-Action X Y h) = pr1 h
  pr2 (hom-subst-Abstract-Group-Action X Y h) x = pr2 h (map-hom-Group G H f x)

  preserves-id-subst-Abstract-Group-Action :
    {l3 : Level} (X : Abstract-Group-Action H l3) 
    Id
      ( hom-subst-Abstract-Group-Action X X (id-hom-Abstract-Group-Action H X))
      ( id-hom-Abstract-Group-Action G (obj-subst-Abstract-Group-Action X))
  preserves-id-subst-Abstract-Group-Action X = refl

  preserves-comp-subst-Abstract-Group-Action :
    {l3 l4 l5 : Level} (X : Abstract-Group-Action H l3)
    (Y : Abstract-Group-Action H l4) (Z : Abstract-Group-Action H l5)
    (g : type-hom-Abstract-Group-Action H Y Z)
    (f : type-hom-Abstract-Group-Action H X Y) 
    Id
      ( hom-subst-Abstract-Group-Action X Z
        ( comp-hom-Abstract-Group-Action H X Y Z g f))
      ( comp-hom-Abstract-Group-Action G
        ( obj-subst-Abstract-Group-Action X)
        ( obj-subst-Abstract-Group-Action Y)
        ( obj-subst-Abstract-Group-Action Z)
        ( hom-subst-Abstract-Group-Action Y Z g)
        ( hom-subst-Abstract-Group-Action X Y f))
  preserves-comp-subst-Abstract-Group-Action X Y Z g f = refl

  subst-Abstract-Group-Action :
    functor-Large-Precategory
      ( Abstract-Group-Action-Large-Precategory H)
      ( Abstract-Group-Action-Large-Precategory G)
      ( λ l  l)
  obj-functor-Large-Precategory subst-Abstract-Group-Action =
    obj-subst-Abstract-Group-Action
  hom-functor-Large-Precategory subst-Abstract-Group-Action {l1} {l2} {X} {Y} =
    hom-subst-Abstract-Group-Action X Y
  preserves-comp-functor-Large-Precategory subst-Abstract-Group-Action
    {l1} {l2} {l3} {X} {Y} {Z} =
    preserves-comp-subst-Abstract-Group-Action X Y Z
  preserves-id-functor-Large-Precategory subst-Abstract-Group-Action {l1} {X} =
    preserves-id-subst-Abstract-Group-Action X

Properties

The substitution functor has a left adjoint

module _
  {l1 l2 : Level} {G : Group l1} {H : Group l2} (f : type-hom-Group G H)
  where

  preset-obj-left-adjoint-subst-Abstract-Group-Action :
    {l3 : Level}  Abstract-Group-Action G l3  Set (l2  l3)
  preset-obj-left-adjoint-subst-Abstract-Group-Action X =
    prod-Set (set-Group H) (set-Abstract-Group-Action G X)

  pretype-obj-left-adjoint-subst-Abstract-Group-Action :
    {l3 : Level}  Abstract-Group-Action G l3  UU (l2  l3)
  pretype-obj-left-adjoint-subst-Abstract-Group-Action X =
    type-Set (preset-obj-left-adjoint-subst-Abstract-Group-Action X)

  is-set-pretype-obj-left-adjoint-subst-Abstract-Group-Action :
    {l3 : Level} (X : Abstract-Group-Action G l3) 
    is-set (pretype-obj-left-adjoint-subst-Abstract-Group-Action X)
  is-set-pretype-obj-left-adjoint-subst-Abstract-Group-Action X =
    is-set-type-Set (preset-obj-left-adjoint-subst-Abstract-Group-Action X)

  Eq-Rel-obj-left-adjoint-subst-Abstract-Group-Action :
    {l3 : Level} (X : Abstract-Group-Action G l3) 
    Eq-Rel
      ( l1  l2  l3)
      ( pretype-obj-left-adjoint-subst-Abstract-Group-Action X)
  pr1
    ( Eq-Rel-obj-left-adjoint-subst-Abstract-Group-Action X)
    ( pair h x)
    ( pair h' x') =
    ∃-Prop
      ( type-Group G)
      ( λ g 
        ( Id (mul-Group H (map-hom-Group G H f g) h) h') ×
        ( Id (mul-Abstract-Group-Action G X g x) x'))
  pr1
    ( pr2 (Eq-Rel-obj-left-adjoint-subst-Abstract-Group-Action X))
    { pair h x} =
    intro-∃
      ( unit-Group G)
      ( pair
        ( ( ap (mul-Group' H h) (preserves-unit-hom-Group G H f)) 
          ( left-unit-law-mul-Group H h))
        ( preserves-unit-mul-Abstract-Group-Action G X x))
  pr1
    ( pr2 (pr2 (Eq-Rel-obj-left-adjoint-subst-Abstract-Group-Action X)))
    { pair h x} { pair h' x'} e =
    apply-universal-property-trunc-Prop e
      ( pr1
        ( Eq-Rel-obj-left-adjoint-subst-Abstract-Group-Action X)
        ( pair h' x')
        ( pair h x))
      ( λ { (pair g (pair p q)) 
            intro-∃
              ( inv-Group G g)
              ( pair
                ( ( ap
                    ( mul-Group' H h')
                    ( preserves-inv-hom-Group G H f g)) 
                  ( inv (transpose-eq-mul-Group' H p)))
                ( inv (transpose-eq-mul-Abstract-Group-Action G X g x x' q)))})
  pr2 (pr2 (pr2 (Eq-Rel-obj-left-adjoint-subst-Abstract-Group-Action X)))
    { pair h x} { pair h' x'} { pair h'' x''} e d =
    apply-universal-property-trunc-Prop e
      ( pr1
        ( Eq-Rel-obj-left-adjoint-subst-Abstract-Group-Action X)
        ( pair h x)
        ( pair h'' x''))
      ( λ { ( pair g (pair p q)) 
            apply-universal-property-trunc-Prop d
              ( pr1
                ( Eq-Rel-obj-left-adjoint-subst-Abstract-Group-Action X)
                ( pair h x)
                ( pair h'' x''))
              ( λ { ( pair g' (pair p' q')) 
                    intro-∃
                      ( mul-Group G g' g)
                      ( pair
                        ( ( ap
                            ( mul-Group' H h)
                            ( preserves-mul-hom-Group G H f g' g)) 
                          ( ( associative-mul-Group H
                              ( map-hom-Group G H f g')
                              ( map-hom-Group G H f g)
                              ( h)) 
                            ( ( ap ( mul-Group H (map-hom-Group G H f g')) p) 
                              ( p'))))
                        ( ( preserves-mul-Abstract-Group-Action G X g' g x) 
                          ( ap (mul-Abstract-Group-Action G X g') q  q')))})})

  set-left-adjoint-subst-Abstract-Group-Action :
    {l3 : Level}  Abstract-Group-Action G l3 
    Set (lsuc l1  lsuc l2  lsuc l3)
  set-left-adjoint-subst-Abstract-Group-Action X =
    equivalence-class-Set
      ( Eq-Rel-obj-left-adjoint-subst-Abstract-Group-Action X)

{-
  obj-left-adjoint-subst-Abstract-Group-Action :
    {l3 : Level} → Abstract-Group-Action G l3 →
    Abstract-Group-Action H (lsuc l1 ⊔ lsuc l2 ⊔ lsuc l3)
  pr1 (obj-left-adjoint-subst-Abstract-Group-Action X) =
    set-left-adjoint-subst-Abstract-Group-Action X
  pr1 (pr2 (obj-left-adjoint-subst-Abstract-Group-Action X)) h = {!!}
  pr2 (pr2 (obj-left-adjoint-subst-Abstract-Group-Action X)) = {!!}
-}