Documentation

Mathlib.Algebra.EuclideanDomain.Basic

Lemmas about Euclidean domains #

Main statements #

theorem EuclideanDomain.mod_eq_sub_mul_div {R : Type u_1} [EuclideanDomain R] (a b : R) :
a % b = a - b * (a / b)
theorem EuclideanDomain.val_dvd_le {R : Type u} [EuclideanDomain R] (a b : R) :
b โˆฃ a โ†’ a โ‰  0 โ†’ ยฌEuclideanDomain.r a b
@[simp]
theorem EuclideanDomain.mod_eq_zero {R : Type u} [EuclideanDomain R] {a b : R} :
a % b = 0 โ†” b โˆฃ a
@[simp]
theorem EuclideanDomain.mod_self {R : Type u} [EuclideanDomain R] (a : R) :
a % a = 0
theorem EuclideanDomain.dvd_mod_iff {R : Type u} [EuclideanDomain R] {a b c : R} (h : c โˆฃ b) :
c โˆฃ a % b โ†” c โˆฃ a
@[simp]
theorem EuclideanDomain.mod_one {R : Type u} [EuclideanDomain R] (a : R) :
a % 1 = 0
@[simp]
theorem EuclideanDomain.zero_mod {R : Type u} [EuclideanDomain R] (b : R) :
0 % b = 0
@[simp]
theorem EuclideanDomain.zero_div {R : Type u} [EuclideanDomain R] {a : R} :
0 / a = 0
@[simp]
theorem EuclideanDomain.div_self {R : Type u} [EuclideanDomain R] {a : R} (a0 : a โ‰  0) :
a / a = 1
theorem EuclideanDomain.eq_div_of_mul_eq_left {R : Type u} [EuclideanDomain R] {a b c : R} (hb : b โ‰  0) (h : a * b = c) :
a = c / b
theorem EuclideanDomain.eq_div_of_mul_eq_right {R : Type u} [EuclideanDomain R] {a b c : R} (ha : a โ‰  0) (h : a * b = c) :
b = c / a
theorem EuclideanDomain.mul_div_assoc {R : Type u} [EuclideanDomain R] (x : R) {y z : R} (h : z โˆฃ y) :
x * y / z = x * (y / z)
theorem EuclideanDomain.mul_div_cancel' {R : Type u} [EuclideanDomain R] {a b : R} (hb : b โ‰  0) (hab : b โˆฃ a) :
b * (a / b) = a
@[simp]
theorem EuclideanDomain.div_one {R : Type u} [EuclideanDomain R] (p : R) :
p / 1 = p
theorem EuclideanDomain.div_dvd_of_dvd {R : Type u} [EuclideanDomain R] {p q : R} (hpq : q โˆฃ p) :
p / q โˆฃ p
theorem EuclideanDomain.dvd_div_of_mul_dvd {R : Type u} [EuclideanDomain R] {a b c : R} (h : a * b โˆฃ c) :
b โˆฃ c / a
@[simp]
theorem EuclideanDomain.gcd_zero_right {R : Type u} [EuclideanDomain R] [DecidableEq R] (a : R) :
gcd a 0 = a
theorem EuclideanDomain.gcd_val {R : Type u} [EuclideanDomain R] [DecidableEq R] (a b : R) :
gcd a b = gcd (b % a) a
theorem EuclideanDomain.gcd_dvd {R : Type u} [EuclideanDomain R] [DecidableEq R] (a b : R) :
gcd a b โˆฃ a โˆง gcd a b โˆฃ b
theorem EuclideanDomain.gcd_dvd_left {R : Type u} [EuclideanDomain R] [DecidableEq R] (a b : R) :
gcd a b โˆฃ a
theorem EuclideanDomain.gcd_dvd_right {R : Type u} [EuclideanDomain R] [DecidableEq R] (a b : R) :
gcd a b โˆฃ b
theorem EuclideanDomain.gcd_eq_zero_iff {R : Type u} [EuclideanDomain R] [DecidableEq R] {a b : R} :
gcd a b = 0 โ†” a = 0 โˆง b = 0
theorem EuclideanDomain.dvd_gcd {R : Type u} [EuclideanDomain R] [DecidableEq R] {a b c : R} :
c โˆฃ a โ†’ c โˆฃ b โ†’ c โˆฃ gcd a b
theorem EuclideanDomain.gcd_eq_left {R : Type u} [EuclideanDomain R] [DecidableEq R] {a b : R} :
gcd a b = a โ†” a โˆฃ b
@[simp]
theorem EuclideanDomain.gcd_one_left {R : Type u} [EuclideanDomain R] [DecidableEq R] (a : R) :
gcd 1 a = 1
@[simp]
theorem EuclideanDomain.gcd_self {R : Type u} [EuclideanDomain R] [DecidableEq R] (a : R) :
gcd a a = a
@[simp]
theorem EuclideanDomain.xgcdAux_fst {R : Type u} [EuclideanDomain R] [DecidableEq R] (x y s t s' t' : R) :
(xgcdAux x s t y s' t').1 = gcd x y
theorem EuclideanDomain.xgcdAux_val {R : Type u} [EuclideanDomain R] [DecidableEq R] (x y : R) :
xgcdAux x 1 0 y 0 1 = (gcd x y, xgcd x y)
theorem EuclideanDomain.xgcdAux_P {R : Type u} [EuclideanDomain R] [DecidableEq R] (a b : R) {r r' s t s' t' : R} (p : EuclideanDomain.Pโœ a b (r, s, t)) (p' : EuclideanDomain.Pโœยน a b (r', s', t')) :
theorem EuclideanDomain.gcd_eq_gcd_ab {R : Type u} [EuclideanDomain R] [DecidableEq R] (a b : R) :
gcd a b = a * gcdA a b + b * gcdB a b

An explicit version of Bรฉzout's lemma for Euclidean domains.

theorem EuclideanDomain.div_pow {R : Type u_1} [EuclideanDomain R] {a b : R} {n : โ„•} (hab : b โˆฃ a) :
(a / b) ^ n = a ^ n / b ^ n
theorem EuclideanDomain.dvd_lcm_left {R : Type u} [EuclideanDomain R] [DecidableEq R] (x y : R) :
x โˆฃ lcm x y
theorem EuclideanDomain.dvd_lcm_right {R : Type u} [EuclideanDomain R] [DecidableEq R] (x y : R) :
y โˆฃ lcm x y
theorem EuclideanDomain.lcm_dvd {R : Type u} [EuclideanDomain R] [DecidableEq R] {x y z : R} (hxz : x โˆฃ z) (hyz : y โˆฃ z) :
lcm x y โˆฃ z
@[simp]
theorem EuclideanDomain.lcm_dvd_iff {R : Type u} [EuclideanDomain R] [DecidableEq R] {x y z : R} :
lcm x y โˆฃ z โ†” x โˆฃ z โˆง y โˆฃ z
@[simp]
theorem EuclideanDomain.lcm_zero_left {R : Type u} [EuclideanDomain R] [DecidableEq R] (x : R) :
lcm 0 x = 0
@[simp]
theorem EuclideanDomain.lcm_zero_right {R : Type u} [EuclideanDomain R] [DecidableEq R] (x : R) :
lcm x 0 = 0
@[simp]
theorem EuclideanDomain.lcm_eq_zero_iff {R : Type u} [EuclideanDomain R] [DecidableEq R] {x y : R} :
lcm x y = 0 โ†” x = 0 โˆจ y = 0
@[simp]
theorem EuclideanDomain.gcd_mul_lcm {R : Type u} [EuclideanDomain R] [DecidableEq R] (x y : R) :
gcd x y * lcm x y = x * y
theorem EuclideanDomain.mul_div_mul_cancel {R : Type u} [EuclideanDomain R] {a b c : R} (ha : a โ‰  0) (hcb : c โˆฃ b) :
a * b / (a * c) = b / c
theorem EuclideanDomain.mul_div_mul_comm_of_dvd_dvd {R : Type u} [EuclideanDomain R] {a b c d : R} (hac : c โˆฃ a) (hbd : d โˆฃ b) :
a * b / (c * d) = a / c * (b / d)
theorem EuclideanDomain.add_mul_div_left {R : Type u} [EuclideanDomain R] (x y z : R) (h1 : y โ‰  0) (h2 : y โˆฃ x) :
(x + y * z) / y = x / y + z
theorem EuclideanDomain.add_mul_div_right {R : Type u} [EuclideanDomain R] (x y z : R) (h1 : y โ‰  0) (h2 : y โˆฃ x) :
(x + z * y) / y = x / y + z
theorem EuclideanDomain.sub_mul_div_left {R : Type u} [EuclideanDomain R] (x y z : R) (h1 : y โ‰  0) (h2 : y โˆฃ x) :
(x - y * z) / y = x / y - z
theorem EuclideanDomain.sub_mul_div_right {R : Type u} [EuclideanDomain R] (x y z : R) (h1 : y โ‰  0) (h2 : y โˆฃ x) :
(x - z * y) / y = x / y - z
theorem EuclideanDomain.mul_add_div_left {R : Type u} [EuclideanDomain R] (x y z : R) (h1 : z โ‰  0) (h2 : z โˆฃ y) :
(z * x + y) / z = x + y / z
theorem EuclideanDomain.mul_add_div_right {R : Type u} [EuclideanDomain R] (x y z : R) (h1 : z โ‰  0) (h2 : z โˆฃ y) :
(x * z + y) / z = x + y / z
theorem EuclideanDomain.mul_sub_div_left {R : Type u} [EuclideanDomain R] (x y z : R) (h1 : z โ‰  0) (h2 : z โˆฃ y) :
(z * x - y) / z = x - y / z
theorem EuclideanDomain.mul_sub_div_right {R : Type u} [EuclideanDomain R] (x y z : R) (h1 : z โ‰  0) (h2 : z โˆฃ y) :
(x * z - y) / z = x - y / z
theorem EuclideanDomain.div_mul {R : Type u} [EuclideanDomain R] {x y z : R} (h1 : y โˆฃ x) (h2 : y * z โˆฃ x) :
x / (y * z) = x / y / z
theorem EuclideanDomain.div_div {R : Type u} [EuclideanDomain R] {x y z : R} (h1 : y โˆฃ x) (h2 : z โˆฃ x / y) :
x / y / z = x / (y * z)
theorem EuclideanDomain.div_add_div_of_dvd {R : Type u} [EuclideanDomain R] {x y z t : R} (h1 : y โ‰  0) (h2 : t โ‰  0) (h3 : y โˆฃ x) (h4 : t โˆฃ z) :
x / y + z / t = (t * x + y * z) / (t * y)
theorem EuclideanDomain.div_sub_div_of_dvd {R : Type u} [EuclideanDomain R] {x y z t : R} (h1 : y โ‰  0) (h2 : t โ‰  0) (h3 : y โˆฃ x) (h4 : t โˆฃ z) :
x / y - z / t = (t * x - y * z) / (t * y)
theorem EuclideanDomain.div_eq_iff_eq_mul_of_dvd {R : Type u} [EuclideanDomain R] (x y z : R) (h1 : y โ‰  0) (h2 : y โˆฃ x) :
x / y = z โ†” x = y * z
theorem EuclideanDomain.eq_div_iff_mul_eq_of_dvd {R : Type u} [EuclideanDomain R] (x y z : R) (h1 : z โ‰  0) (h2 : z โˆฃ y) :
x = y / z โ†” z * x = y
theorem EuclideanDomain.div_eq_div_iff_mul_eq_mul_of_dvd {R : Type u} [EuclideanDomain R] {x y z t : R} (h1 : y โ‰  0) (h2 : t โ‰  0) (h3 : y โˆฃ x) (h4 : t โˆฃ z) :
x / y = z / t โ†” t * x = y * z