The full subgroup of a group

module group-theory.full-subgroups where
Imports
open import foundation.dependent-pair-types
open import foundation.equivalences
open import foundation.full-subtypes
open import foundation.universe-levels

open import group-theory.groups
open import group-theory.homomorphisms-groups
open import group-theory.isomorphisms-groups
open import group-theory.subgroups

Idea

The full subset of a group is a normal subgroup.

Definition

Full subgroups

is-full-Subgroup :
  {l1 l2 : Level} (G : Group l1)  Subgroup l2 G  UU (l1  l2)
is-full-Subgroup G H = is-full-subtype (subset-Subgroup G H)

The full subgroup at each universe level

subset-full-Subgroup :
  {l1 : Level} (l2 : Level) (G : Group l1)  subset-Group l2 G
subset-full-Subgroup l2 G = full-subtype l2 (type-Group G)

type-full-Subgroup :
  {l1 : Level} (l2 : Level) (G : Group l1)  UU (l1  l2)
type-full-Subgroup l2 G = type-full-subtype l2 (type-Group G)

contains-unit-full-Subgroup :
  {l1 l2 : Level} (G : Group l1) 
  contains-unit-subset-Group G (subset-full-Subgroup l2 G)
contains-unit-full-Subgroup G = is-in-full-subtype (unit-Group G)

is-closed-under-mul-full-Subgroup :
  {l1 l2 : Level} (G : Group l1) 
  is-closed-under-mul-subset-Group G (subset-full-Subgroup l2 G)
is-closed-under-mul-full-Subgroup G x y _ _ =
  is-in-full-subtype (mul-Group G x y)

is-closed-under-inv-full-Subgroup :
  {l1 l2 : Level} (G : Group l1) 
  is-closed-under-inv-subset-Group G (subset-full-Subgroup l2 G)
is-closed-under-inv-full-Subgroup G x _ =
  is-in-full-subtype (inv-Group G x)

full-Subgroup : {l1 : Level} (l2 : Level) (G : Group l1)  Subgroup l2 G
pr1 (full-Subgroup l2 G) = subset-full-Subgroup l2 G
pr1 (pr2 (full-Subgroup l2 G)) = contains-unit-full-Subgroup G
pr1 (pr2 (pr2 (full-Subgroup l2 G))) = is-closed-under-mul-full-Subgroup G
pr2 (pr2 (pr2 (full-Subgroup l2 G))) = is-closed-under-inv-full-Subgroup G

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

  inclusion-full-Subgroup : type-full-Subgroup l2 G  type-Group G
  inclusion-full-Subgroup = inclusion-Subgroup G (full-Subgroup l2 G)

  is-equiv-inclusion-full-Subgroup : is-equiv inclusion-full-Subgroup
  is-equiv-inclusion-full-Subgroup = is-equiv-inclusion-full-subtype

  equiv-inclusion-full-Subgroup : type-full-Subgroup l2 G  type-Group G
  pr1 equiv-inclusion-full-Subgroup = inclusion-full-Subgroup
  pr2 equiv-inclusion-full-Subgroup = is-equiv-inclusion-full-Subgroup

  group-full-Subgroup : Group (l1  l2)
  group-full-Subgroup = group-Subgroup G (full-Subgroup l2 G)

  hom-inclusion-full-Subgroup : type-hom-Group group-full-Subgroup G
  hom-inclusion-full-Subgroup =
    hom-inclusion-Subgroup G (full-Subgroup l2 G)

  preserves-mul-inclusion-full-Subgroup :
    preserves-mul-Group group-full-Subgroup G inclusion-full-Subgroup
  preserves-mul-inclusion-full-Subgroup =
    preserves-mul-inclusion-Subgroup G (full-Subgroup l2 G)

  equiv-group-inclusion-full-Subgroup : equiv-Group group-full-Subgroup G
  pr1 equiv-group-inclusion-full-Subgroup = equiv-inclusion-full-Subgroup
  pr2 equiv-group-inclusion-full-Subgroup =
    preserves-mul-inclusion-full-Subgroup

  iso-full-Subgroup : type-iso-Group group-full-Subgroup G
  iso-full-Subgroup =
    iso-equiv-Group group-full-Subgroup G equiv-group-inclusion-full-Subgroup

  inv-iso-full-Subgroup :
    type-iso-Group G group-full-Subgroup
  inv-iso-full-Subgroup =
    inv-iso-Group group-full-Subgroup G iso-full-Subgroup

Properties

A subgroup is full if and only if the inclusion is an isomorphism

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

  is-iso-inclusion-is-full-Subgroup :
    is-full-Subgroup G H 
    is-iso-hom-Group (group-Subgroup G H) G (hom-inclusion-Subgroup G H)
  is-iso-inclusion-is-full-Subgroup K =
    is-iso-is-equiv-hom-Group
      ( group-Subgroup G H)
      ( G)
      ( hom-inclusion-Subgroup G H)
      ( is-equiv-inclusion-is-full-subtype (subset-Subgroup G H) K)

  iso-inclusion-is-full-Subgroup :
    is-full-Subgroup G H  type-iso-Group (group-Subgroup G H) G
  pr1 (iso-inclusion-is-full-Subgroup K) = hom-inclusion-Subgroup G H
  pr2 (iso-inclusion-is-full-Subgroup K) = is-iso-inclusion-is-full-Subgroup K

  is-full-is-iso-inclusion-Subgroup :
    is-iso-hom-Group (group-Subgroup G H) G (hom-inclusion-Subgroup G H) 
    is-full-Subgroup G H
  is-full-is-iso-inclusion-Subgroup K =
    is-full-is-equiv-inclusion-subtype
      ( subset-Subgroup G H)
      ( is-equiv-is-iso-hom-Group
        ( group-Subgroup G H)
        ( G)
        ( hom-inclusion-Subgroup G H)
        ( K))