diff --git a/Mathlib/Data/Nat/GCD/Basic.lean b/Mathlib/Data/Nat/GCD/Basic.lean index e5906dbabae69..9adb3b40fc765 100644 --- a/Mathlib/Data/Nat/GCD/Basic.lean +++ b/Mathlib/Data/Nat/GCD/Basic.lean @@ -345,4 +345,23 @@ theorem Coprime.mul_add_mul_ne_mul {m n a b : ℕ} (cop : Coprime m n) (ha : a rw [← mul_assoc, ← h, add_mul, add_mul, mul_comm _ n, ← mul_assoc, mul_comm y] #align nat.coprime.mul_add_mul_ne_mul Nat.Coprime.mul_add_mul_ne_mul +variable {x n m : ℕ} + +theorem dvd_gcd_mul_iff_dvd_mul : x ∣ gcd x n * m ↔ x ∣ n * m := by + refine ⟨(·.trans <| mul_dvd_mul_right (x.gcd_dvd_right n) m), fun ⟨y, hy⟩ ↦ ?_⟩ + rw [← gcd_mul_right, hy, gcd_mul_left] + exact dvd_mul_right x (gcd m y) + +theorem dvd_mul_gcd_iff_dvd_mul : x ∣ n * gcd x m ↔ x ∣ n * m := by + rw [mul_comm, dvd_gcd_mul_iff_dvd_mul, mul_comm] + +theorem dvd_gcd_mul_gcd_iff_dvd_mul : x ∣ gcd x n * gcd x m ↔ x ∣ n * m := by + rw [dvd_gcd_mul_iff_dvd_mul, dvd_mul_gcd_iff_dvd_mul] + +theorem gcd_mul_gcd_eq_iff_dvd_mul_of_coprime (hcop : Coprime n m) : + gcd x n * gcd x m = x ↔ x ∣ n * m := by + refine ⟨fun h ↦ ?_, (dvd_antisymm ?_ <| dvd_gcd_mul_gcd_iff_dvd_mul.mpr ·)⟩ + refine h ▸ Nat.mul_dvd_mul ?_ ?_ <;> exact x.gcd_dvd_right _ + refine (hcop.gcd_both x x).mul_dvd_of_dvd_of_dvd ?_ ?_ <;> exact x.gcd_dvd_left _ + end Nat