mathlib3 documentation

ring_theory.congruence

Congruence relations on rings #

THIS FILE IS SYNCHRONIZED WITH MATHLIB4. Any changes to this file require a corresponding PR to mathlib4.

This file defines congruence relations on rings, which extend con and add_con on monoids and additive monoids.

Most of the time you likely want to use the ideal.quotient API that is built on top of this.

Main Definitions #

TODO #

structure ring_con (R : Type u_1) [has_add R] [has_mul R] :
Type u_1

A congruence relation on a type with an addition and multiplication is an equivalence relation which preserves both.

Instances for ring_con
inductive ring_con_gen.rel {R : Type u_2} [has_add R] [has_mul R] (r : R → R → Prop) :
R → R → Prop

The inductively defined smallest ring congruence relation containing a given binary relation.

def ring_con_gen {R : Type u_2} [has_add R] [has_mul R] (r : R → R → Prop) :

The inductively defined smallest ring congruence relation containing a given binary relation.

Equations
def ring_con.to_add_con {R : Type u_2} [has_add R] [has_mul R] (c : ring_con R) :

Every ring_con is also an add_con

Equations
def ring_con.to_con {R : Type u_2} [has_add R] [has_mul R] (c : ring_con R) :
con R

Every ring_con is also a con

Equations
@[protected, instance]
def ring_con.has_coe_to_fun {R : Type u_2} [has_add R] [has_mul R] :
has_coe_to_fun (ring_con R) (λ (_x : ring_con R), R → R → Prop)

A coercion from a congruence relation to its underlying binary relation.

Equations
@[simp]
theorem ring_con.rel_eq_coe {R : Type u_2} [has_add R] [has_mul R] (c : ring_con R) :
@[protected]
theorem ring_con.refl {R : Type u_2} [has_add R] [has_mul R] (c : ring_con R) (x : R) :
⇑c x x
@[protected]
theorem ring_con.symm {R : Type u_2} [has_add R] [has_mul R] (c : ring_con R) {x y : R} :
⇑c x y → ⇑c y x
@[protected]
theorem ring_con.trans {R : Type u_2} [has_add R] [has_mul R] (c : ring_con R) {x y z : R} :
⇑c x y → ⇑c y z → ⇑c x z
@[protected]
theorem ring_con.add {R : Type u_2} [has_add R] [has_mul R] (c : ring_con R) {w x y z : R} :
⇑c w x → ⇑c y z → ⇑c (w + y) (x + z)
@[protected]
theorem ring_con.mul {R : Type u_2} [has_add R] [has_mul R] (c : ring_con R) {w x y z : R} :
⇑c w x → ⇑c y z → ⇑c (w * y) (x * z)
@[simp]
theorem ring_con.rel_mk {R : Type u_2} [has_add R] [has_mul R] {s : setoid R} {ha : ∀ {w x y z : R}, setoid.r w x → setoid.r y z → setoid.r (w + y) (x + z)} {hm : ∀ {w x y z : R}, setoid.r w x → setoid.r y z → setoid.r (w * y) (x * z)} {a b : R} :
⇑{to_setoid := s, add' := ha, mul' := hm} a b ↔ setoid.r a b
@[protected, instance]
def ring_con.inhabited {R : Type u_2} [has_add R] [has_mul R] :
Equations
@[protected, instance]

Coercion from a type with addition and multiplication to its quotient by a congruence relation.

See Note [use has_coe_t].

Equations
@[protected, instance]
def ring_con.quotient.decidable_eq {R : Type u_2} [has_add R] [has_mul R] (c : ring_con R) [d : Π (a b : R), decidable (⇑c a b)] :

The quotient by a decidable congruence relation has decidable equality.

Equations
@[simp]
theorem ring_con.quot_mk_eq_coe {R : Type u_2} [has_add R] [has_mul R] (c : ring_con R) (x : R) :
quot.mk ⇑c x = ↑x
@[protected, simp]
theorem ring_con.eq {R : Type u_2} [has_add R] [has_mul R] (c : ring_con R) {a b : R} :
↑a = ↑b ↔ ⇑c a b

Two elements are related by a congruence relation c iff they are represented by the same element of the quotient by c.

Basic notation #

The basic algebraic notation, 0, 1, +, *, -, ^, descend naturally under the quotient

@[protected, instance]
Equations
@[simp, norm_cast]
theorem ring_con.coe_add {R : Type u_2} [has_add R] [has_mul R] (c : ring_con R) (x y : R) :
↑(x + y) = ↑x + ↑y
@[protected, instance]
Equations
@[simp, norm_cast]
theorem ring_con.coe_mul {R : Type u_2} [has_add R] [has_mul R] (c : ring_con R) (x y : R) :
↑(x * y) = ↑x * ↑y
@[simp, norm_cast]
theorem ring_con.coe_zero {R : Type u_2} [add_zero_class R] [has_mul R] (c : ring_con R) :
↑0 = 0
@[simp, norm_cast]
theorem ring_con.coe_one {R : Type u_2} [has_add R] [mul_one_class R] (c : ring_con R) :
↑1 = 1
@[protected, instance]
def ring_con.quotient.has_smul {α : Type u_1} {R : Type u_2} [has_add R] [mul_one_class R] [has_smul α R] [is_scalar_tower α R R] (c : ring_con R) :
Equations
@[simp, norm_cast]
theorem ring_con.coe_smul {α : Type u_1} {R : Type u_2} [has_add R] [mul_one_class R] [has_smul α R] [is_scalar_tower α R R] (c : ring_con R) (a : α) (x : R) :
↑(a • x) = a • ↑x
@[protected, instance]
Equations
@[simp, norm_cast]
theorem ring_con.coe_neg {R : Type u_2} [add_group R] [has_mul R] (c : ring_con R) (x : R) :
@[protected, instance]
Equations
@[simp, norm_cast]
theorem ring_con.coe_sub {R : Type u_2} [add_group R] [has_mul R] (c : ring_con R) (x y : R) :
↑(x - y) = ↑x - ↑y
@[protected, instance]
def ring_con.has_zsmul {R : Type u_2} [add_group R] [has_mul R] (c : ring_con R) :
Equations
@[simp, norm_cast]
theorem ring_con.coe_zsmul {R : Type u_2} [add_group R] [has_mul R] (c : ring_con R) (z : ℤ) (x : R) :
↑(z • x) = z • ↑x
@[protected, instance]
def ring_con.has_nsmul {R : Type u_2} [add_monoid R] [has_mul R] (c : ring_con R) :
Equations
@[simp, norm_cast]
theorem ring_con.coe_nsmul {R : Type u_2} [add_monoid R] [has_mul R] (c : ring_con R) (n : ℕ) (x : R) :
↑(n • x) = n • ↑x
@[protected, instance]
def ring_con.nat.has_pow {R : Type u_2} [has_add R] [monoid R] (c : ring_con R) :
Equations
@[simp, norm_cast]
theorem ring_con.coe_pow {R : Type u_2} [has_add R] [monoid R] (c : ring_con R) (x : R) (n : ℕ) :
↑(x ^ n) = ↑x ^ n
@[protected, instance]
Equations
@[simp, norm_cast]
theorem ring_con.coe_nat_cast {R : Type u_2} [add_monoid_with_one R] [has_mul R] (c : ring_con R) (n : ℕ) :
@[protected, instance]
Equations
@[simp, norm_cast]
theorem ring_con.coe_int_cast {R : Type u_2} [add_group_with_one R] [has_mul R] (c : ring_con R) (n : ℕ) :

Algebraic structure #

The operations above on the quotient by c : ring_con R preseverse the algebraic structure of R.

@[protected, instance]
Equations
@[protected, instance]
def ring_con.quotient.ring {R : Type u_2} [ring R] (c : ring_con R) :
Equations
@[protected, instance]
Equations
@[protected, instance]
@[protected, instance]
def ring_con.smul_comm_class {α : Type u_1} {R : Type u_2} [has_add R] [mul_one_class R] [has_smul α R] [is_scalar_tower α R R] [smul_comm_class α R R] (c : ring_con R) :
@[protected, instance]
def ring_con.smul_comm_class' {α : Type u_1} {R : Type u_2} [has_add R] [mul_one_class R] [has_smul α R] [is_scalar_tower α R R] [smul_comm_class R α R] (c : ring_con R) :
def ring_con.mk' {R : Type u_2} [non_assoc_semiring R] (c : ring_con R) :

The natural homomorphism from a ring to its quotient by a congruence relation.

Equations