Skip to content
This repository was archived by the owner on Jul 24, 2024. It is now read-only.

Commit cb0a6f7

Browse files
feat(data/int): various lemmas (#10862)
1 parent 04e2f5f commit cb0a6f7

File tree

3 files changed

+36
-0
lines changed

3 files changed

+36
-0
lines changed

src/data/int/basic.lean

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -884,6 +884,9 @@ lemma nat_abs_sign_of_nonzero {z : ℤ} (hz : z ≠ 0) :
884884
z.sign.nat_abs = 1 :=
885885
by rw [int.nat_abs_sign, if_neg hz]
886886

887+
lemma abs_sign_of_nonzero {z : ℤ} (hz : z ≠ 0) : |z.sign| = 1 :=
888+
by rw [abs_eq_nat_abs, nat_abs_sign_of_nonzero hz, int.coe_nat_one]
889+
887890
lemma sign_coe_nat_of_nonzero {n : ℕ} (hn : n ≠ 0) :
888891
int.sign n = 1 :=
889892
begin
@@ -1231,6 +1234,13 @@ end
12311234
theorem is_unit_iff_nat_abs_eq {n : ℤ} : is_unit n ↔ n.nat_abs = 1 :=
12321235
by simp [nat_abs_eq_iff, is_unit_iff]
12331236

1237+
lemma is_unit_iff_abs_eq {x : ℤ} : is_unit x ↔ abs x = 1 :=
1238+
by rw [is_unit_iff_nat_abs_eq, abs_eq_nat_abs, ←int.coe_nat_one, coe_nat_inj']
1239+
1240+
@[norm_cast]
1241+
lemma of_nat_is_unit {n : ℕ} : is_unit (n : ℤ) ↔ is_unit n :=
1242+
by rw [nat.is_unit_iff, is_unit_iff_nat_abs_eq, nat_abs_of_nat]
1243+
12341244
lemma units_inv_eq_self (u : units ℤ) : u⁻¹ = u :=
12351245
(units_eq_one_or u).elim (λ h, h.symm ▸ rfl) (λ h, h.symm ▸ rfl)
12361246

src/data/int/parity.lean

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -200,6 +200,26 @@ coe_nat_dvd_left.symm
200200
@[simp] theorem nat_abs_odd : odd n.nat_abs ↔ odd n :=
201201
by rw [odd_iff_not_even, nat.odd_iff_not_even, nat_abs_even]
202202

203+
lemma four_dvd_add_or_sub_of_odd {a b : ℤ} (ha : odd a) (hb : odd b) : 4 ∣ a + b ∨ 4 ∣ a - b :=
204+
begin
205+
obtain ⟨m, rfl⟩ := ha,
206+
obtain ⟨n, rfl⟩ := hb,
207+
obtain h|h := int.even_or_odd (m + n),
208+
{ right,
209+
rw [int.even_add, ←int.even_sub] at h,
210+
obtain ⟨k, hk⟩ := h,
211+
convert dvd_mul_right 4 k,
212+
rw [eq_add_of_sub_eq hk, mul_add, add_assoc, add_sub_cancel, ←mul_assoc],
213+
norm_num },
214+
{ left,
215+
obtain ⟨k, hk⟩ := h,
216+
convert dvd_mul_right 4 (k + 1),
217+
rw [eq_sub_of_add_eq hk, add_right_comm, ←add_sub, mul_add, mul_sub, add_assoc, add_assoc,
218+
sub_add, add_assoc, ←sub_sub (2 * n), sub_self, zero_sub, sub_neg_eq_add, ←mul_assoc,
219+
mul_add],
220+
norm_num },
221+
end
222+
203223
-- Here are examples of how `parity_simps` can be used with `int`.
204224

205225
example (m n : ℤ) (h : even m) : ¬ even (n + 3) ↔ even (m^2 + m + n) :=

src/ring_theory/int/basic.lean

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -316,6 +316,12 @@ begin
316316
exact (or_self _).mp ((nat.prime.dvd_mul hp).mp hpp)}
317317
end
318318

319+
lemma int.exists_prime_and_dvd {n : ℤ} (n2 : 2 ≤ n.nat_abs) : ∃ p, prime p ∧ p ∣ n :=
320+
begin
321+
obtain ⟨p, pp, pd⟩ := nat.exists_prime_and_dvd n2,
322+
exact ⟨p, nat.prime_iff_prime_int.mp pp, int.coe_nat_dvd_left.mpr pd⟩,
323+
end
324+
319325
open unique_factorization_monoid
320326

321327
theorem nat.factors_eq {n : ℕ} : normalized_factors n = n.factors :=

0 commit comments

Comments
 (0)