Lemmas about Euclidean domains #
Main statements #
gcd_eq_gcd_ab
: states Bézout's lemma for Euclidean domains.
@[instance 100]
@[simp]
@[simp]
theorem
EuclideanDomain.eq_div_of_mul_eq_left
{R : Type u}
[EuclideanDomain R]
{a b c : R}
(hb : b ≠ 0)
(h : a * b = c)
:
theorem
EuclideanDomain.eq_div_of_mul_eq_right
{R : Type u}
[EuclideanDomain R]
{a b c : R}
(ha : a ≠ 0)
(h : a * b = c)
:
theorem
EuclideanDomain.mul_div_assoc
{R : Type u}
[EuclideanDomain R]
(x : R)
{y z : R}
(h : z ∣ y)
:
theorem
EuclideanDomain.mul_div_cancel'
{R : Type u}
[EuclideanDomain R]
{a b : R}
(hb : b ≠ 0)
(hab : b ∣ a)
:
theorem
EuclideanDomain.dvd_div_of_mul_dvd
{R : Type u}
[EuclideanDomain R]
{a b c : R}
(h : a * b ∣ c)
:
@[simp]
theorem
EuclideanDomain.gcd_zero_right
{R : Type u}
[EuclideanDomain R]
[DecidableEq R]
(a : R)
:
EuclideanDomain.gcd a 0 = a
theorem
EuclideanDomain.gcd_val
{R : Type u}
[EuclideanDomain R]
[DecidableEq R]
(a b : R)
:
EuclideanDomain.gcd a b = EuclideanDomain.gcd (b % a) a
theorem
EuclideanDomain.gcd_dvd
{R : Type u}
[EuclideanDomain R]
[DecidableEq R]
(a b : R)
:
EuclideanDomain.gcd a b ∣ a ∧ EuclideanDomain.gcd a b ∣ b
theorem
EuclideanDomain.gcd_dvd_left
{R : Type u}
[EuclideanDomain R]
[DecidableEq R]
(a b : R)
:
EuclideanDomain.gcd a b ∣ a
theorem
EuclideanDomain.gcd_dvd_right
{R : Type u}
[EuclideanDomain R]
[DecidableEq R]
(a b : R)
:
EuclideanDomain.gcd a b ∣ b
theorem
EuclideanDomain.gcd_eq_zero_iff
{R : Type u}
[EuclideanDomain R]
[DecidableEq R]
{a b : R}
:
theorem
EuclideanDomain.dvd_gcd
{R : Type u}
[EuclideanDomain R]
[DecidableEq R]
{a b c : R}
:
c ∣ a → c ∣ b → c ∣ EuclideanDomain.gcd a b
theorem
EuclideanDomain.gcd_eq_left
{R : Type u}
[EuclideanDomain R]
[DecidableEq R]
{a b : R}
:
EuclideanDomain.gcd a b = a ↔ a ∣ b
@[simp]
theorem
EuclideanDomain.gcd_one_left
{R : Type u}
[EuclideanDomain R]
[DecidableEq R]
(a : R)
:
EuclideanDomain.gcd 1 a = 1
@[simp]
theorem
EuclideanDomain.gcd_self
{R : Type u}
[EuclideanDomain R]
[DecidableEq R]
(a : R)
:
EuclideanDomain.gcd a a = a
@[simp]
theorem
EuclideanDomain.xgcdAux_fst
{R : Type u}
[EuclideanDomain R]
[DecidableEq R]
(x y s t s' t' : R)
:
(EuclideanDomain.xgcdAux x s t y s' t').1 = EuclideanDomain.gcd x y
theorem
EuclideanDomain.xgcdAux_val
{R : Type u}
[EuclideanDomain R]
[DecidableEq R]
(x y : R)
:
EuclideanDomain.xgcdAux x 1 0 y 0 1 = (EuclideanDomain.gcd x y, EuclideanDomain.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'))
:
EuclideanDomain.P✝ a b (EuclideanDomain.xgcdAux r s t r' s' t')
theorem
EuclideanDomain.gcd_eq_gcd_ab
{R : Type u}
[EuclideanDomain R]
[DecidableEq R]
(a b : R)
:
EuclideanDomain.gcd a b = a * EuclideanDomain.gcdA a b + b * EuclideanDomain.gcdB a b
An explicit version of Bézout's lemma for Euclidean domains.
@[instance 70]
@[instance 70]
theorem
EuclideanDomain.dvd_lcm_left
{R : Type u}
[EuclideanDomain R]
[DecidableEq R]
(x y : R)
:
x ∣ EuclideanDomain.lcm x y
theorem
EuclideanDomain.dvd_lcm_right
{R : Type u}
[EuclideanDomain R]
[DecidableEq R]
(x y : R)
:
y ∣ EuclideanDomain.lcm x y
theorem
EuclideanDomain.lcm_dvd
{R : Type u}
[EuclideanDomain R]
[DecidableEq R]
{x y z : R}
(hxz : x ∣ z)
(hyz : y ∣ z)
:
EuclideanDomain.lcm x y ∣ z
@[simp]
@[simp]
theorem
EuclideanDomain.lcm_zero_left
{R : Type u}
[EuclideanDomain R]
[DecidableEq R]
(x : R)
:
EuclideanDomain.lcm 0 x = 0
@[simp]
theorem
EuclideanDomain.lcm_zero_right
{R : Type u}
[EuclideanDomain R]
[DecidableEq R]
(x : R)
:
EuclideanDomain.lcm x 0 = 0
@[simp]
theorem
EuclideanDomain.lcm_eq_zero_iff
{R : Type u}
[EuclideanDomain R]
[DecidableEq R]
{x y : R}
:
@[simp]
theorem
EuclideanDomain.gcd_mul_lcm
{R : Type u}
[EuclideanDomain R]
[DecidableEq R]
(x y : R)
:
EuclideanDomain.gcd x y * EuclideanDomain.lcm x y = x * y