Congruence relations on groups

module group-theory.congruence-relations-groups where
Imports
open import foundation.binary-relations
open import foundation.binary-transport
open import foundation.contractible-types
open import foundation.dependent-pair-types
open import foundation.equivalence-relations
open import foundation.equivalences
open import foundation.identity-types
open import foundation.propositions
open import foundation.universe-levels

open import group-theory.congruence-relations-semigroups
open import group-theory.conjugation
open import group-theory.groups

Idea

A congruence relation on a group G is an equivalence relation on G such that for every x1 x2 y1 y2 : G such that x1 ≡ x2 and y1 ≡ y2 we have x1 · y1 ≡ x2 · y2.

Definition

is-congruence-Group :
  {l1 l2 : Level} (G : Group l1) 
  Eq-Rel l2 (type-Group G)  UU (l1  l2)
is-congruence-Group G R =
  is-congruence-Semigroup (semigroup-Group G) R

congruence-Group :
  {l : Level} (l2 : Level) (G : Group l)  UU (l  lsuc l2)
congruence-Group l2 G =
  Σ (Eq-Rel l2 (type-Group G)) (is-congruence-Group G)

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

  eq-rel-congruence-Group : Eq-Rel l2 (type-Group G)
  eq-rel-congruence-Group = pr1 R

  prop-congruence-Group : Rel-Prop l2 (type-Group G)
  prop-congruence-Group = prop-Eq-Rel eq-rel-congruence-Group

  sim-congruence-Group : (x y : type-Group G)  UU l2
  sim-congruence-Group = sim-Eq-Rel eq-rel-congruence-Group

  is-prop-sim-congruence-Group :
    (x y : type-Group G)  is-prop (sim-congruence-Group x y)
  is-prop-sim-congruence-Group =
    is-prop-sim-Eq-Rel eq-rel-congruence-Group

  concatenate-eq-sim-congruence-Group :
    {x1 x2 y : type-Group G} 
    x1  x2  sim-congruence-Group x2 y  sim-congruence-Group x1 y
  concatenate-eq-sim-congruence-Group refl H = H

  concatenate-sim-eq-congruence-Group :
    {x y1 y2 : type-Group G} 
    sim-congruence-Group x y1  y1  y2  sim-congruence-Group x y2
  concatenate-sim-eq-congruence-Group H refl = H

  concatenate-eq-sim-eq-congruence-Group :
    {x1 x2 y1 y2 : type-Group G}  x1  x2 
    sim-congruence-Group x2 y1 
    y1  y2  sim-congruence-Group x1 y2
  concatenate-eq-sim-eq-congruence-Group refl H refl = H

  refl-congruence-Group : is-reflexive-Rel-Prop prop-congruence-Group
  refl-congruence-Group = refl-Eq-Rel eq-rel-congruence-Group

  symm-congruence-Group : is-symmetric-Rel-Prop prop-congruence-Group
  symm-congruence-Group = symm-Eq-Rel eq-rel-congruence-Group

  equiv-symm-congruence-Group :
    (x y : type-Group G) 
    sim-congruence-Group x y  sim-congruence-Group y x
  equiv-symm-congruence-Group x y =
    equiv-symm-Eq-Rel eq-rel-congruence-Group

  trans-congruence-Group :
    is-transitive-Rel-Prop prop-congruence-Group
  trans-congruence-Group = trans-Eq-Rel eq-rel-congruence-Group

  mul-congruence-Group :
    is-congruence-Group G eq-rel-congruence-Group
  mul-congruence-Group = pr2 R

  left-mul-congruence-Group :
    (x : type-Group G) {y z : type-Group G} 
    sim-congruence-Group y z 
    sim-congruence-Group (mul-Group G x y) (mul-Group G x z)
  left-mul-congruence-Group x H =
    mul-congruence-Group refl-congruence-Group H

  right-mul-congruence-Group :
    {x y : type-Group G}  sim-congruence-Group x y 
    (z : type-Group G) 
    sim-congruence-Group (mul-Group G x z) (mul-Group G y z)
  right-mul-congruence-Group H z =
    mul-congruence-Group H refl-congruence-Group

  conjugation-congruence-Group :
    (x : type-Group G) {y z : type-Group G} 
    sim-congruence-Group y z 
    sim-congruence-Group
      ( conjugation-Group G x y)
      ( conjugation-Group G x z)
  conjugation-congruence-Group x H =
    right-mul-congruence-Group
      ( left-mul-congruence-Group x H) (inv-Group G x)

  conjugation-congruence-Group' :
    (x : type-Group G) {y z : type-Group G} 
    sim-congruence-Group y z 
    sim-congruence-Group
      ( conjugation-Group' G x y)
      ( conjugation-Group' G x z)
  conjugation-congruence-Group' x H =
    right-mul-congruence-Group
      ( left-mul-congruence-Group (inv-Group G x) H)
      ( x)

  sim-right-div-unit-congruence-Group : (x y : type-Group G)  UU l2
  sim-right-div-unit-congruence-Group x y =
    sim-congruence-Group (right-div-Group G x y) (unit-Group G)

  map-sim-right-div-unit-congruence-Group :
    {x y : type-Group G} 
    sim-congruence-Group x y  sim-right-div-unit-congruence-Group x y
  map-sim-right-div-unit-congruence-Group {x} {y} H =
    concatenate-sim-eq-congruence-Group
      ( right-mul-congruence-Group H (inv-Group G y))
      ( right-inverse-law-mul-Group G y)

  map-inv-sim-right-div-unit-congruence-Group :
    {x y : type-Group G} 
    sim-right-div-unit-congruence-Group x y  sim-congruence-Group x y
  map-inv-sim-right-div-unit-congruence-Group {x} {y} H =
    concatenate-eq-sim-eq-congruence-Group
      ( inv
        ( ( associative-mul-Group G x (inv-Group G y) y) 
          ( ( ap (mul-Group G x) (left-inverse-law-mul-Group G y)) 
            ( right-unit-law-mul-Group G x))))
      ( right-mul-congruence-Group H y)
      ( left-unit-law-mul-Group G y)

  sim-left-div-unit-congruence-Group : (x y : type-Group G)  UU l2
  sim-left-div-unit-congruence-Group x y =
    sim-congruence-Group (left-div-Group G x y) (unit-Group G)

  map-sim-left-div-unit-congruence-Group :
    {x y : type-Group G} 
    sim-congruence-Group x y  sim-left-div-unit-congruence-Group x y
  map-sim-left-div-unit-congruence-Group {x} {y} H =
    symm-congruence-Group
      ( concatenate-eq-sim-congruence-Group
        ( inv (left-inverse-law-mul-Group G x))
        ( left-mul-congruence-Group (inv-Group G x) H))

  map-inv-sim-left-div-unit-congruence-Group :
    {x y : type-Group G} 
    sim-left-div-unit-congruence-Group x y  sim-congruence-Group x y
  map-inv-sim-left-div-unit-congruence-Group {x} {y} H =
    binary-tr
      ( sim-congruence-Group)
      ( right-unit-law-mul-Group G x)
      ( issec-mul-inv-Group G x y)
      ( symm-congruence-Group (left-mul-congruence-Group x H))

  inv-congruence-Group :
    {x y : type-Group G} 
    sim-congruence-Group x y 
    sim-congruence-Group (inv-Group G x) (inv-Group G y)
  inv-congruence-Group {x} {y} H =
    concatenate-eq-sim-eq-congruence-Group
      ( inv
        ( ( associative-mul-Group G
            ( inv-Group G x)
            ( y)
            ( inv-Group G y)) 
          ( ( ap
              ( mul-Group G (inv-Group G x))
              ( right-inverse-law-mul-Group G y)) 
            ( right-unit-law-mul-Group G (inv-Group G x)))))
      ( symm-congruence-Group
        ( right-mul-congruence-Group
          ( left-mul-congruence-Group (inv-Group G x) H)
          ( inv-Group G y)))
      ( ( ap
          ( mul-Group' G (inv-Group G y))
          ( left-inverse-law-mul-Group G x)) 
        ( left-unit-law-mul-Group G (inv-Group G y)))

Properties

Characterizing equality of congruence relations on groups

relate-same-elements-congruence-Group :
  {l1 l2 l3 : Level} (G : Group l1) 
  congruence-Group l2 G  congruence-Group l3 G  UU (l1  l2  l3)
relate-same-elements-congruence-Group G =
  relate-same-elements-congruence-Semigroup (semigroup-Group G)

refl-relate-same-elements-congruence-Group :
  {l1 l2 : Level} (G : Group l1) (R : congruence-Group l2 G) 
  relate-same-elements-congruence-Group G R R
refl-relate-same-elements-congruence-Group G =
  refl-relate-same-elements-congruence-Semigroup (semigroup-Group G)

is-contr-total-relate-same-elements-congruence-Group :
  {l1 l2 : Level} (G : Group l1) (R : congruence-Group l2 G) 
  is-contr
    ( Σ ( congruence-Group l2 G)
        ( relate-same-elements-congruence-Group G R))
is-contr-total-relate-same-elements-congruence-Group G =
  is-contr-total-relate-same-elements-congruence-Semigroup
    ( semigroup-Group G)

relate-same-elements-eq-congruence-Group :
  {l1 l2 : Level} (G : Group l1) (R S : congruence-Group l2 G) 
  R  S  relate-same-elements-congruence-Group G R S
relate-same-elements-eq-congruence-Group G =
  relate-same-elements-eq-congruence-Semigroup (semigroup-Group G)

is-equiv-relate-same-elements-eq-congruence-Group :
  {l1 l2 : Level} (G : Group l1) (R S : congruence-Group l2 G) 
  is-equiv (relate-same-elements-eq-congruence-Group G R S)
is-equiv-relate-same-elements-eq-congruence-Group G =
  is-equiv-relate-same-elements-eq-congruence-Semigroup
    ( semigroup-Group G)

extensionality-congruence-Group :
  {l1 l2 : Level} (G : Group l1) (R S : congruence-Group l2 G) 
  (R  S)  relate-same-elements-congruence-Group G R S
extensionality-congruence-Group G =
  extensionality-congruence-Semigroup (semigroup-Group G)

eq-relate-same-elements-congruence-Group :
  {l1 l2 : Level} (G : Group l1) (R S : congruence-Group l2 G) 
  relate-same-elements-congruence-Group G R S  R  S
eq-relate-same-elements-congruence-Group G =
  eq-relate-same-elements-congruence-Semigroup (semigroup-Group G)