Lemmas about Euclidean domains #
THIS FILE IS SYNCHRONIZED WITH MATHLIB4. Any changes to this file require a corresponding PR to mathlib4.
Main statements #
gcd_eq_gcd_ab
: states Bézout's lemma for Euclidean domains.
theorem
euclidean_domain.mul_div_cancel_left
{R : Type u}
[euclidean_domain R]
{a : R}
(b : R)
(a0 : a ≠ 0) :
theorem
euclidean_domain.mul_div_cancel
{R : Type u}
[euclidean_domain R]
(a : R)
{b : R}
(b0 : b ≠ 0) :
@[simp]
@[simp]
@[simp]
@[simp]
@[simp]
@[simp]
theorem
euclidean_domain.eq_div_of_mul_eq_left
{R : Type u}
[euclidean_domain R]
{a b c : R}
(hb : b ≠ 0)
(h : a * b = c) :
theorem
euclidean_domain.eq_div_of_mul_eq_right
{R : Type u}
[euclidean_domain R]
{a b c : R}
(ha : a ≠ 0)
(h : a * b = c) :
theorem
euclidean_domain.mul_div_assoc
{R : Type u}
[euclidean_domain R]
(x : R)
{y z : R}
(h : z ∣ y) :
@[protected]
theorem
euclidean_domain.mul_div_cancel'
{R : Type u}
[euclidean_domain R]
{a b : R}
(hb : b ≠ 0)
(hab : b ∣ a) :
@[simp]
theorem
euclidean_domain.dvd_div_of_mul_dvd
{R : Type u}
[euclidean_domain R]
{a b c : R}
(h : a * b ∣ c) :
@[simp]
theorem
euclidean_domain.gcd_zero_right
{R : Type u}
[euclidean_domain R]
[decidable_eq R]
(a : R) :
euclidean_domain.gcd a 0 = a
theorem
euclidean_domain.gcd_val
{R : Type u}
[euclidean_domain R]
[decidable_eq R]
(a b : R) :
euclidean_domain.gcd a b = euclidean_domain.gcd (b % a) a
theorem
euclidean_domain.gcd_dvd
{R : Type u}
[euclidean_domain R]
[decidable_eq R]
(a b : R) :
euclidean_domain.gcd a b ∣ a ∧ euclidean_domain.gcd a b ∣ b
theorem
euclidean_domain.gcd_dvd_left
{R : Type u}
[euclidean_domain R]
[decidable_eq R]
(a b : R) :
euclidean_domain.gcd a b ∣ a
theorem
euclidean_domain.gcd_dvd_right
{R : Type u}
[euclidean_domain R]
[decidable_eq R]
(a b : R) :
euclidean_domain.gcd a b ∣ b
@[protected]
theorem
euclidean_domain.gcd_eq_zero_iff
{R : Type u}
[euclidean_domain R]
[decidable_eq R]
{a b : R} :
theorem
euclidean_domain.gcd_eq_left
{R : Type u}
[euclidean_domain R]
[decidable_eq R]
{a b : R} :
euclidean_domain.gcd a b = a ↔ a ∣ b
@[simp]
theorem
euclidean_domain.gcd_one_left
{R : Type u}
[euclidean_domain R]
[decidable_eq R]
(a : R) :
euclidean_domain.gcd 1 a = 1
@[simp]
theorem
euclidean_domain.gcd_self
{R : Type u}
[euclidean_domain R]
[decidable_eq R]
(a : R) :
euclidean_domain.gcd a a = a
@[simp]
theorem
euclidean_domain.xgcd_aux_fst
{R : Type u}
[euclidean_domain R]
[decidable_eq R]
(x y s t s' t' : R) :
(euclidean_domain.xgcd_aux x s t y s' t').fst = euclidean_domain.gcd x y
theorem
euclidean_domain.xgcd_aux_val
{R : Type u}
[euclidean_domain R]
[decidable_eq R]
(x y : R) :
euclidean_domain.xgcd_aux x 1 0 y 0 1 = (euclidean_domain.gcd x y, euclidean_domain.xgcd x y)
theorem
euclidean_domain.xgcd_aux_P
{R : Type u}
[euclidean_domain R]
[decidable_eq R]
(a b : R)
{r r' s t s' t' : R} :
P a b (r, s, t) → P a b (r', s', t') → P a b (euclidean_domain.xgcd_aux r s t r' s' t')
theorem
euclidean_domain.gcd_eq_gcd_ab
{R : Type u}
[euclidean_domain R]
[decidable_eq R]
(a b : R) :
euclidean_domain.gcd a b = a * euclidean_domain.gcd_a a b + b * euclidean_domain.gcd_b a b
An explicit version of Bézout's lemma for Euclidean domains.
@[protected, instance]
@[protected, instance]
theorem
euclidean_domain.dvd_lcm_left
{R : Type u}
[euclidean_domain R]
[decidable_eq R]
(x y : R) :
x ∣ euclidean_domain.lcm x y
theorem
euclidean_domain.dvd_lcm_right
{R : Type u}
[euclidean_domain R]
[decidable_eq R]
(x y : R) :
y ∣ euclidean_domain.lcm x y
theorem
euclidean_domain.lcm_dvd
{R : Type u}
[euclidean_domain R]
[decidable_eq R]
{x y z : R}
(hxz : x ∣ z)
(hyz : y ∣ z) :
euclidean_domain.lcm x y ∣ z
@[simp]
theorem
euclidean_domain.lcm_dvd_iff
{R : Type u}
[euclidean_domain R]
[decidable_eq R]
{x y z : R} :
@[simp]
theorem
euclidean_domain.lcm_zero_left
{R : Type u}
[euclidean_domain R]
[decidable_eq R]
(x : R) :
euclidean_domain.lcm 0 x = 0
@[simp]
theorem
euclidean_domain.lcm_zero_right
{R : Type u}
[euclidean_domain R]
[decidable_eq R]
(x : R) :
euclidean_domain.lcm x 0 = 0
@[simp]
theorem
euclidean_domain.lcm_eq_zero_iff
{R : Type u}
[euclidean_domain R]
[decidable_eq R]
{x y : R} :
@[simp]
theorem
euclidean_domain.gcd_mul_lcm
{R : Type u}
[euclidean_domain R]
[decidable_eq R]
(x y : R) :
euclidean_domain.gcd x y * euclidean_domain.lcm x y = x * y