Quotient groups

{-# OPTIONS --lossy-unification #-}
module group-theory.quotient-groups where
Imports
open import foundation.binary-functoriality-set-quotients
open import foundation.dependent-pair-types
open import foundation.effective-maps-equivalence-relations
open import foundation.equivalences
open import foundation.functoriality-set-quotients
open import foundation.identity-types
open import foundation.propositions
open import foundation.reflecting-maps-equivalence-relations
open import foundation.set-quotients
open import foundation.sets
open import foundation.subtypes
open import foundation.surjective-maps
open import foundation.universal-property-set-quotients
open import foundation.universe-levels

open import group-theory.groups
open import group-theory.homomorphisms-groups
open import group-theory.kernels
open import group-theory.normal-subgroups
open import group-theory.semigroups

Idea

Given a normal subgroup H of G, the quotient group q : G → G/H such that H ⊆ ker q, and such that q satisfies the universal group with the property that any group homomorphism f : G → K such that H ⊆ ker f extends uniquely along q to a group homomorphism G/H → K.

Definitions

Group homomorphisms that nullify a normal subgroup, i.e., that contain a normal subgroup in their kernel

module _
  {l1 l2 l3 : Level} (G : Group l1) (K : Group l2)
  where

  nullifies-normal-subgroup-hom-Group-Prop :
    type-hom-Group G K  Normal-Subgroup l3 G  Prop (l1  l2  l3)
  nullifies-normal-subgroup-hom-Group-Prop f H =
    contains-Normal-Subgroup-Prop G H (kernel-hom-Group G K f)

  nullifies-normal-subgroup-hom-Group :
    type-hom-Group G K  Normal-Subgroup l3 G  UU (l1  l2  l3)
  nullifies-normal-subgroup-hom-Group f H =
    type-Prop (nullifies-normal-subgroup-hom-Group-Prop f H)

  nullifying-hom-Group : Normal-Subgroup l3 G  UU (l1  l2  l3)
  nullifying-hom-Group H =
    type-subtype  f  nullifies-normal-subgroup-hom-Group-Prop f H)

  hom-nullifying-hom-Group :
    (H : Normal-Subgroup l3 G) 
    nullifying-hom-Group H  type-hom-Group G K
  hom-nullifying-hom-Group H = pr1

  nullifies-nullifying-hom-Group :
    (H : Normal-Subgroup l3 G) (f : nullifying-hom-Group H) 
    nullifies-normal-subgroup-hom-Group
      ( hom-nullifying-hom-Group H f) H
  nullifies-nullifying-hom-Group H = pr2

The universal property of quotient groups

precomp-nullifying-hom-Group :
  {l1 l2 l3 l4 : Level} (G : Group l1) (H : Normal-Subgroup l2 G)
  (K : Group l3) (f : nullifying-hom-Group G K H)
  (L : Group l4)  type-hom-Group K L  nullifying-hom-Group G L H
pr1 (precomp-nullifying-hom-Group G H K f L g) =
  comp-hom-Group G K L g (hom-nullifying-hom-Group G K H f)
pr2 (precomp-nullifying-hom-Group G H K f L g) h p =
  ( ap
    ( map-hom-Group K L g)
    ( nullifies-nullifying-hom-Group G K H f h p)) 
  ( preserves-unit-hom-Group K L g)

universal-property-quotient-Group :
  {l1 l2 l3 : Level} (l : Level) (G : Group l1)
  (H : Normal-Subgroup l2 G) (Q : Group l3)
  (q : nullifying-hom-Group G Q H)  UU (l1  l2  l3  lsuc l)
universal-property-quotient-Group l G H Q q =
  (K : Group l)  is-equiv (precomp-nullifying-hom-Group G H Q q K)

The quotient group

The quotient map and the underlying set of the quotient group

module _
  {l1 l2 : Level} (G : Group l1) (H : Normal-Subgroup l2 G)
  where

  set-quotient-Group : Set (l1  l2)
  set-quotient-Group =
    quotient-Set (eq-rel-congruence-Normal-Subgroup G H)

  type-quotient-Group : UU (l1  l2)
  type-quotient-Group =
    set-quotient (eq-rel-congruence-Normal-Subgroup G H)

  is-set-type-quotient-Group : is-set type-quotient-Group
  is-set-type-quotient-Group =
    is-set-set-quotient (eq-rel-congruence-Normal-Subgroup G H)

  map-quotient-hom-Group : type-Group G  type-quotient-Group
  map-quotient-hom-Group =
    quotient-map (eq-rel-congruence-Normal-Subgroup G H)

  is-surjective-map-quotient-hom-Group :
    is-surjective map-quotient-hom-Group
  is-surjective-map-quotient-hom-Group =
    is-surjective-quotient-map (eq-rel-congruence-Normal-Subgroup G H)

  is-effective-map-quotient-hom-Group :
    is-effective
      ( eq-rel-congruence-Normal-Subgroup G H)
      ( map-quotient-hom-Group)
  is-effective-map-quotient-hom-Group =
    is-effective-quotient-map (eq-rel-congruence-Normal-Subgroup G H)

  apply-effectiveness-map-quotient-hom-Group :
    {x y : type-Group G} 
    map-quotient-hom-Group x  map-quotient-hom-Group y 
    sim-congruence-Normal-Subgroup G H x y
  apply-effectiveness-map-quotient-hom-Group =
    apply-effectiveness-quotient-map
      ( eq-rel-congruence-Normal-Subgroup G H)

  apply-effectiveness-map-quotient-hom-Group' :
    {x y : type-Group G} 
    sim-congruence-Normal-Subgroup G H x y 
    map-quotient-hom-Group x  map-quotient-hom-Group y
  apply-effectiveness-map-quotient-hom-Group' =
    apply-effectiveness-quotient-map'
      ( eq-rel-congruence-Normal-Subgroup G H)

  reflecting-map-quotient-hom-Group :
    reflecting-map-Eq-Rel
      ( eq-rel-congruence-Normal-Subgroup G H)
      ( type-quotient-Group)
  reflecting-map-quotient-hom-Group =
    reflecting-map-quotient-map
      ( eq-rel-congruence-Normal-Subgroup G H)

  is-set-quotient-set-quotient-Group :
    {l : Level} 
    is-set-quotient l
      ( eq-rel-congruence-Normal-Subgroup G H)
      ( set-quotient-Group)
      ( reflecting-map-quotient-hom-Group)
  is-set-quotient-set-quotient-Group =
    is-set-quotient-set-quotient
      ( eq-rel-congruence-Normal-Subgroup G H)

The group structure on the quotient group

  unit-quotient-Group : type-quotient-Group
  unit-quotient-Group = map-quotient-hom-Group (unit-Group G)

  binary-hom-mul-quotient-Group :
    binary-hom-Eq-Rel
      ( eq-rel-congruence-Normal-Subgroup G H)
      ( eq-rel-congruence-Normal-Subgroup G H)
      ( eq-rel-congruence-Normal-Subgroup G H)
  pr1 binary-hom-mul-quotient-Group = mul-Group G
  pr2 binary-hom-mul-quotient-Group =
    mul-congruence-Normal-Subgroup G H

  mul-quotient-Group :
    (x y : type-quotient-Group)  type-quotient-Group
  mul-quotient-Group =
    binary-map-set-quotient
      ( eq-rel-congruence-Normal-Subgroup G H)
      ( eq-rel-congruence-Normal-Subgroup G H)
      ( eq-rel-congruence-Normal-Subgroup G H)
      ( binary-hom-mul-quotient-Group)

  mul-quotient-Group' :
    (x y : type-quotient-Group)  type-quotient-Group
  mul-quotient-Group' x y = mul-quotient-Group y x

  compute-mul-quotient-Group :
    (x y : type-Group G) 
    mul-quotient-Group
      ( map-quotient-hom-Group x)
      ( map-quotient-hom-Group y) 
    map-quotient-hom-Group (mul-Group G x y)
  compute-mul-quotient-Group =
    compute-binary-map-set-quotient
      ( eq-rel-congruence-Normal-Subgroup G H)
      ( eq-rel-congruence-Normal-Subgroup G H)
      ( eq-rel-congruence-Normal-Subgroup G H)
      ( binary-hom-mul-quotient-Group)

  hom-inv-quotient-Group :
    hom-Eq-Rel
      ( eq-rel-congruence-Normal-Subgroup G H)
      ( eq-rel-congruence-Normal-Subgroup G H)
  pr1 hom-inv-quotient-Group = inv-Group G
  pr2 hom-inv-quotient-Group = inv-congruence-Normal-Subgroup G H

  inv-quotient-Group : type-quotient-Group  type-quotient-Group
  inv-quotient-Group =
    map-set-quotient
      ( eq-rel-congruence-Normal-Subgroup G H)
      ( eq-rel-congruence-Normal-Subgroup G H)
      ( hom-inv-quotient-Group)

  compute-inv-quotient-Group :
    (x : type-Group G) 
    inv-quotient-Group (map-quotient-hom-Group x) 
    map-quotient-hom-Group (inv-Group G x)
  compute-inv-quotient-Group =
    coherence-square-map-set-quotient
      ( eq-rel-congruence-Normal-Subgroup G H)
      ( eq-rel-congruence-Normal-Subgroup G H)
      ( hom-inv-quotient-Group)

  left-unit-law-mul-quotient-Group :
    (x : type-quotient-Group) 
    mul-quotient-Group unit-quotient-Group x  x
  left-unit-law-mul-quotient-Group =
    induction-set-quotient
      ( eq-rel-congruence-Normal-Subgroup G H)
      ( λ y 
        Id-Prop
          ( set-quotient-Group)
          ( mul-quotient-Group unit-quotient-Group y)
          ( y))
      ( λ x 
        ( compute-mul-quotient-Group (unit-Group G) x) 
        ( ap map-quotient-hom-Group (left-unit-law-mul-Group G x)))

  right-unit-law-mul-quotient-Group :
    (x : type-quotient-Group) 
    mul-quotient-Group x unit-quotient-Group  x
  right-unit-law-mul-quotient-Group =
    induction-set-quotient
      ( eq-rel-congruence-Normal-Subgroup G H)
      ( λ y 
        Id-Prop
          ( set-quotient-Group)
          ( mul-quotient-Group y unit-quotient-Group)
          ( y))
      ( λ x 
        ( compute-mul-quotient-Group x (unit-Group G)) 
        ( ap map-quotient-hom-Group (right-unit-law-mul-Group G x)))

  associative-mul-quotient-Group :
    (x y z : type-quotient-Group) 
    ( mul-quotient-Group (mul-quotient-Group x y) z) 
    ( mul-quotient-Group x (mul-quotient-Group y z))
  associative-mul-quotient-Group =
    triple-induction-set-quotient'
      ( eq-rel-congruence-Normal-Subgroup G H)
      ( λ x y z 
        Id-Prop
          ( set-quotient-Group)
          ( mul-quotient-Group (mul-quotient-Group x y) z)
          ( mul-quotient-Group x (mul-quotient-Group y z)))
      ( λ x y z 
        ( ap
          ( mul-quotient-Group' (map-quotient-hom-Group z))
          ( compute-mul-quotient-Group x y)) 
        ( ( compute-mul-quotient-Group (mul-Group G x y) z) 
          ( ( ap
              ( map-quotient-hom-Group)
              ( associative-mul-Group G x y z)) 
            ( ( inv
                ( compute-mul-quotient-Group x (mul-Group G y z))) 
              ( ap
                ( mul-quotient-Group (map-quotient-hom-Group x))
                ( inv (compute-mul-quotient-Group y z)))))))

  left-inverse-law-mul-quotient-Group :
    (x : type-quotient-Group) 
    ( mul-quotient-Group (inv-quotient-Group x) x) 
    ( unit-quotient-Group)
  left-inverse-law-mul-quotient-Group =
    induction-set-quotient
      ( eq-rel-congruence-Normal-Subgroup G H)
      ( λ y 
        Id-Prop
          ( set-quotient-Group)
          ( mul-quotient-Group (inv-quotient-Group y) y)
          ( unit-quotient-Group))
      ( λ x 
        ( ap
          ( mul-quotient-Group' (map-quotient-hom-Group x))
          ( compute-inv-quotient-Group x)) 
        ( ( compute-mul-quotient-Group (inv-Group G x) x) 
          ( ap map-quotient-hom-Group
            ( left-inverse-law-mul-Group G x))))

  right-inverse-law-mul-quotient-Group :
    (x : type-quotient-Group) 
    ( mul-quotient-Group x (inv-quotient-Group x)) 
    ( unit-quotient-Group)
  right-inverse-law-mul-quotient-Group =
    induction-set-quotient
      ( eq-rel-congruence-Normal-Subgroup G H)
      ( λ y 
        Id-Prop
          ( set-quotient-Group)
          ( mul-quotient-Group y (inv-quotient-Group y))
          ( unit-quotient-Group))
      ( λ x 
        ( ap
          ( mul-quotient-Group (map-quotient-hom-Group x))
          ( compute-inv-quotient-Group x)) 
        ( ( compute-mul-quotient-Group x (inv-Group G x)) 
          ( ap map-quotient-hom-Group
            ( right-inverse-law-mul-Group G x))))

  semigroup-quotient-Group : Semigroup (l1  l2)
  pr1 semigroup-quotient-Group = set-quotient-Group
  pr1 (pr2 semigroup-quotient-Group) = mul-quotient-Group
  pr2 (pr2 semigroup-quotient-Group) = associative-mul-quotient-Group

  quotient-Group : Group (l1  l2)
  pr1 quotient-Group = semigroup-quotient-Group
  pr1 (pr1 (pr2 quotient-Group)) = unit-quotient-Group
  pr1 (pr2 (pr1 (pr2 quotient-Group))) =
    left-unit-law-mul-quotient-Group
  pr2 (pr2 (pr1 (pr2 quotient-Group))) =
    right-unit-law-mul-quotient-Group
  pr1 (pr2 (pr2 quotient-Group)) = inv-quotient-Group
  pr1 (pr2 (pr2 (pr2 quotient-Group))) =
    left-inverse-law-mul-quotient-Group
  pr2 (pr2 (pr2 (pr2 quotient-Group))) =
    right-inverse-law-mul-quotient-Group