@@ -6,6 +6,7 @@ Authors: Jeremy Avigad, Leonardo de Moura
6
6
import Mathlib.Algebra.GroupPower.Basic
7
7
import Mathlib.Algebra.GroupWithZero.Divisibility
8
8
import Mathlib.Data.Nat.Order.Lemmas
9
+ import Mathlib.Tactic.NthRewrite
9
10
10
11
#align_import data.nat.gcd.basic from "leanprover-community/mathlib" @"e8638a0fcaf73e4500469f368ef9494e495099b3"
11
12
@@ -88,6 +89,30 @@ theorem gcd_self_add_right (m n : ℕ) : gcd m (m + n) = gcd m n := by
88
89
rw [add_comm, gcd_add_self_right]
89
90
#align nat.gcd_self_add_right Nat.gcd_self_add_right
90
91
92
+ -- Lemmas where one argument consists of a subtraction of the other
93
+ @[simp]
94
+ theorem gcd_sub_self_left {m n : ℕ} (h : m ≤ n) : gcd (n - m) m = gcd n m := by
95
+ calc
96
+ gcd (n - m) m = gcd (n - m + m) m := by rw [← gcd_add_self_left (n - m) m]
97
+ _ = gcd n m := by rw [Nat.sub_add_cancel h]
98
+
99
+ @[simp]
100
+ theorem gcd_sub_self_right {m n : ℕ} (h : m ≤ n) : gcd m (n - m) = gcd m n := by
101
+ rw [gcd_comm, gcd_sub_self_left h, gcd_comm]
102
+
103
+ @[simp]
104
+ theorem gcd_self_sub_left {m n : ℕ} (h : m ≤ n) : gcd (n - m) n = gcd m n := by
105
+ have := Nat.sub_add_cancel h
106
+ rw [gcd_comm m n, ← this, gcd_add_self_left (n - m) m]
107
+ have : gcd (n - m) n = gcd (n - m) m := by
108
+ nth_rw 2 [← Nat.add_sub_cancel' h]
109
+ rw [gcd_add_self_right, gcd_comm]
110
+ convert this
111
+
112
+ @[simp]
113
+ theorem gcd_self_sub_right {m n : ℕ} (h : m ≤ n) : gcd n (n - m) = gcd n m := by
114
+ rw [gcd_comm, gcd_self_sub_left h, gcd_comm]
115
+
91
116
/-! ### `lcm` -/
92
117
93
118
theorem lcm_dvd_mul (m n : ℕ) : lcm m n ∣ m * n :=
@@ -186,6 +211,22 @@ theorem coprime_mul_left_add_left (m n k : ℕ) : coprime (n * k + m) n ↔ copr
186
211
rw [coprime, coprime, gcd_mul_left_add_left]
187
212
#align nat.coprime_mul_left_add_left Nat.coprime_mul_left_add_left
188
213
214
+ @[simp]
215
+ theorem coprime_sub_self_left {m n : ℕ} (h : m ≤ n) : coprime (n - m) m ↔ coprime n m := by
216
+ rw [coprime, coprime, gcd_sub_self_left h]
217
+
218
+ @[simp]
219
+ theorem coprime_sub_self_right {m n : ℕ} (h : m ≤ n) : coprime m (n - m) ↔ coprime m n:= by
220
+ rw [coprime, coprime, gcd_sub_self_right h]
221
+
222
+ @[simp]
223
+ theorem coprime_self_sub_left {m n : ℕ} (h : m ≤ n) : coprime (n - m) n ↔ coprime m n := by
224
+ rw [coprime, coprime, gcd_self_sub_left h]
225
+
226
+ @[simp]
227
+ theorem coprime_self_sub_right {m n : ℕ} (h : m ≤ n) : coprime n (n - m) ↔ coprime n m := by
228
+ rw [coprime, coprime, gcd_self_sub_right h]
229
+
189
230
@[simp]
190
231
theorem coprime_pow_left_iff {n : ℕ} (hn : 0 < n) (a b : ℕ) :
191
232
Nat.coprime (a ^ n) b ↔ Nat.coprime a b := by
0 commit comments