Congruence relations on abelian groups

module group-theory.congruence-relations-abelian-groups where
Imports
open import foundation.binary-relations
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.abelian-groups
open import group-theory.congruence-relations-groups

Idea

A congruence relation on an abelian group A is a congruence relation on the underlying group of A.

Definition

is-congruence-Ab :
  {l1 l2 : Level} (A : Ab l1)  Eq-Rel l2 (type-Ab A)  UU (l1  l2)
is-congruence-Ab A = is-congruence-Group (group-Ab A)

congruence-Ab : {l : Level} (l2 : Level) (A : Ab l)  UU (l  lsuc l2)
congruence-Ab l2 A = congruence-Group l2 (group-Ab A)

module _
  {l1 l2 : Level} (A : Ab l1) (R : congruence-Ab l2 A)
  where

  eq-rel-congruence-Ab : Eq-Rel l2 (type-Ab A)
  eq-rel-congruence-Ab = eq-rel-congruence-Group (group-Ab A) R

  prop-congruence-Ab : Rel-Prop l2 (type-Ab A)
  prop-congruence-Ab = prop-congruence-Group (group-Ab A) R

  sim-congruence-Ab : (x y : type-Ab A)  UU l2
  sim-congruence-Ab = sim-congruence-Group (group-Ab A) R

  is-prop-sim-congruence-Ab :
    (x y : type-Ab A)  is-prop (sim-congruence-Ab x y)
  is-prop-sim-congruence-Ab =
    is-prop-sim-congruence-Group (group-Ab A) R

  concatenate-eq-sim-congruence-Ab :
    {x1 x2 y : type-Ab A} 
    x1  x2  sim-congruence-Ab x2 y  sim-congruence-Ab x1 y
  concatenate-eq-sim-congruence-Ab =
    concatenate-eq-sim-congruence-Group (group-Ab A) R

  concatenate-sim-eq-congruence-Ab :
    {x y1 y2 : type-Ab A} 
    sim-congruence-Ab x y1  y1  y2  sim-congruence-Ab x y2
  concatenate-sim-eq-congruence-Ab =
    concatenate-sim-eq-congruence-Group (group-Ab A) R

  concatenate-eq-sim-eq-congruence-Ab :
    {x1 x2 y1 y2 : type-Ab A}  x1  x2 
    sim-congruence-Ab x2 y1 
    y1  y2  sim-congruence-Ab x1 y2
  concatenate-eq-sim-eq-congruence-Ab =
    concatenate-eq-sim-eq-congruence-Group (group-Ab A) R

  refl-congruence-Ab : is-reflexive-Rel-Prop prop-congruence-Ab
  refl-congruence-Ab = refl-congruence-Group (group-Ab A) R

  symm-congruence-Ab : is-symmetric-Rel-Prop prop-congruence-Ab
  symm-congruence-Ab = symm-congruence-Group (group-Ab A) R

  equiv-symm-congruence-Ab :
    (x y : type-Ab A) 
    sim-congruence-Ab x y  sim-congruence-Ab y x
  equiv-symm-congruence-Ab =
    equiv-symm-congruence-Group (group-Ab A) R

  trans-congruence-Ab :
    is-transitive-Rel-Prop prop-congruence-Ab
  trans-congruence-Ab = trans-congruence-Group (group-Ab A) R

  add-congruence-Ab : is-congruence-Ab A eq-rel-congruence-Ab
  add-congruence-Ab = mul-congruence-Group (group-Ab A) R

  left-add-congruence-Ab :
    (x : type-Ab A) {y z : type-Ab A} 
    sim-congruence-Ab y z 
    sim-congruence-Ab (add-Ab A x y) (add-Ab A x z)
  left-add-congruence-Ab = left-mul-congruence-Group (group-Ab A) R

  right-add-congruence-Ab :
    {x y : type-Ab A}  sim-congruence-Ab x y 
    (z : type-Ab A) 
    sim-congruence-Ab (add-Ab A x z) (add-Ab A y z)
  right-add-congruence-Ab = right-mul-congruence-Group (group-Ab A) R

  conjugation-congruence-Ab :
    (x : type-Ab A) {y z : type-Ab A}  sim-congruence-Ab y z 
    sim-congruence-Ab (conjugation-Ab A x y) (conjugation-Ab A x z)
  conjugation-congruence-Ab =
    conjugation-congruence-Group (group-Ab A) R

  conjugation-congruence-Ab' :
    (x : type-Ab A) {y z : type-Ab A} 
    sim-congruence-Ab y z 
    sim-congruence-Ab
      ( conjugation-Ab' A x y)
      ( conjugation-Ab' A x z)
  conjugation-congruence-Ab' =
    conjugation-congruence-Group' (group-Ab A) R

  sim-right-subtraction-zero-congruence-Ab : (x y : type-Ab A)  UU l2
  sim-right-subtraction-zero-congruence-Ab =
    sim-right-div-unit-congruence-Group (group-Ab A) R

  map-sim-right-subtraction-zero-congruence-Ab :
    {x y : type-Ab A}  sim-congruence-Ab x y 
    sim-right-subtraction-zero-congruence-Ab x y
  map-sim-right-subtraction-zero-congruence-Ab =
    map-sim-right-div-unit-congruence-Group (group-Ab A) R

  map-inv-sim-right-subtraction-zero-congruence-Ab :
    {x y : type-Ab A} 
    sim-right-subtraction-zero-congruence-Ab x y  sim-congruence-Ab x y
  map-inv-sim-right-subtraction-zero-congruence-Ab =
    map-inv-sim-right-div-unit-congruence-Group (group-Ab A) R

  sim-left-subtraction-zero-congruence-Ab : (x y : type-Ab A)  UU l2
  sim-left-subtraction-zero-congruence-Ab =
    sim-left-div-unit-congruence-Group (group-Ab A) R

  map-sim-left-subtraction-zero-congruence-Ab :
    {x y : type-Ab A}  sim-congruence-Ab x y 
    sim-left-subtraction-zero-congruence-Ab x y
  map-sim-left-subtraction-zero-congruence-Ab =
    map-sim-left-div-unit-congruence-Group (group-Ab A) R

  map-inv-sim-left-subtraction-zero-congruence-Ab :
    {x y : type-Ab A}  sim-left-subtraction-zero-congruence-Ab x y 
    sim-congruence-Ab x y
  map-inv-sim-left-subtraction-zero-congruence-Ab =
    map-inv-sim-left-div-unit-congruence-Group (group-Ab A) R

  neg-congruence-Ab :
    {x y : type-Ab A}  sim-congruence-Ab x y 
    sim-congruence-Ab (neg-Ab A x) (neg-Ab A y)
  neg-congruence-Ab = inv-congruence-Group (group-Ab A) R

Properties

Characterizing equality of congruence relations on groups

relate-same-elements-congruence-Ab :
  {l1 l2 l3 : Level} (A : Ab l1) 
  congruence-Ab l2 A  congruence-Ab l3 A  UU (l1  l2  l3)
relate-same-elements-congruence-Ab A =
  relate-same-elements-congruence-Group (group-Ab A)

refl-relate-same-elements-congruence-Ab :
  {l1 l2 : Level} (A : Ab l1) (R : congruence-Ab l2 A) 
  relate-same-elements-congruence-Ab A R R
refl-relate-same-elements-congruence-Ab A =
  refl-relate-same-elements-congruence-Group (group-Ab A)

is-contr-total-relate-same-elements-congruence-Ab :
  {l1 l2 : Level} (A : Ab l1) (R : congruence-Ab l2 A) 
  is-contr
    ( Σ ( congruence-Ab l2 A)
        ( relate-same-elements-congruence-Ab A R))
is-contr-total-relate-same-elements-congruence-Ab A =
  is-contr-total-relate-same-elements-congruence-Group (group-Ab A)

relate-same-elements-eq-congruence-Ab :
  {l1 l2 : Level} (A : Ab l1) (R S : congruence-Ab l2 A) 
  R  S  relate-same-elements-congruence-Ab A R S
relate-same-elements-eq-congruence-Ab A =
  relate-same-elements-eq-congruence-Group (group-Ab A)

is-equiv-relate-same-elements-eq-congruence-Ab :
  {l1 l2 : Level} (A : Ab l1) (R S : congruence-Ab l2 A) 
  is-equiv (relate-same-elements-eq-congruence-Ab A R S)
is-equiv-relate-same-elements-eq-congruence-Ab A =
  is-equiv-relate-same-elements-eq-congruence-Group (group-Ab A)

extensionality-congruence-Ab :
  {l1 l2 : Level} (A : Ab l1) (R S : congruence-Ab l2 A) 
  (R  S)  relate-same-elements-congruence-Ab A R S
extensionality-congruence-Ab A =
  extensionality-congruence-Group (group-Ab A)

eq-relate-same-elements-congruence-Ab :
  {l1 l2 : Level} (A : Ab l1) (R S : congruence-Ab l2 A) 
  relate-same-elements-congruence-Ab A R S  R  S
eq-relate-same-elements-congruence-Ab A =
  eq-relate-same-elements-congruence-Group (group-Ab A)