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

Commit 599712f

Browse files
feat(data/int/parity, data/nat/parity): add some lemmas (#7624)
1 parent 697c8dd commit 599712f

File tree

2 files changed

+20
-8
lines changed

2 files changed

+20
-8
lines changed

src/data/int/parity.lean

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -27,12 +27,6 @@ local attribute [simp] -- euclidean_domain.mod_eq_zero uses (2 ∣ n) as normal
2727
theorem mod_two_ne_zero : ¬ n % 2 = 0 ↔ n % 2 = 1 :=
2828
by cases mod_two_eq_zero_or_one n with h h; simp [h]
2929

30-
@[simp] theorem even_coe_nat (n : ℕ) : even (n : ℤ) ↔ even n :=
31-
have ∀ m, 2 * to_nat m = to_nat (2 * m),
32-
from λ m, by cases m; refl,
33-
⟨λ ⟨m, hm⟩, ⟨to_nat m, by rw [this, ←to_nat_coe_nat n, hm]⟩,
34-
λ ⟨m, hm⟩, ⟨m, by simp [hm]⟩⟩
35-
3630
theorem even_iff : even n ↔ n % 2 = 0 :=
3731
⟨λ ⟨m, hm⟩, by simp [hm], λ h, ⟨n / 2, (mod_add_div n 2).symm.trans (by simp [h])⟩⟩
3832

@@ -158,9 +152,12 @@ theorem odd.of_mul_left (h : odd (m * n)) : odd m :=
158152
theorem odd.of_mul_right (h : odd (m * n)) : odd n :=
159153
(odd_mul.mp h).2
160154

161-
@[parity_simps] theorem even_pow {n : ℕ} : even (m^n) ↔ even m ∧ n ≠ 0 :=
155+
@[parity_simps] theorem even_pow {n : ℕ} : even (m ^ n) ↔ even m ∧ n ≠ 0 :=
162156
by { induction n with n ih; simp [*, even_mul, pow_succ], tauto }
163157

158+
theorem even_pow' {n : ℕ} (h : n ≠ 0) : even (m ^ n) ↔ even m :=
159+
even_pow.trans $ and_iff_left h
160+
164161
@[parity_simps] theorem odd_add : odd (m + n) ↔ (odd m ↔ even n) :=
165162
by rw [odd_iff_not_even, even_add, not_iff, odd_iff_not_even]
166163

@@ -195,6 +192,18 @@ begin
195192
simp with parity_simps
196193
end
197194

195+
@[simp, norm_cast] theorem even_coe_nat (n : ℕ) : even (n : ℤ) ↔ even n :=
196+
by rw_mod_cast [even_iff, nat.even_iff]
197+
198+
@[simp, norm_cast] theorem odd_coe_nat (n : ℕ) : odd (n : ℤ) ↔ odd n :=
199+
by rw [odd_iff_not_even, nat.odd_iff_not_even, even_coe_nat]
200+
201+
@[simp] theorem nat_abs_even : even n.nat_abs ↔ even n :=
202+
coe_nat_dvd_left.symm
203+
204+
@[simp] theorem nat_abs_odd : odd n.nat_abs ↔ odd n :=
205+
by rw [odd_iff_not_even, nat.odd_iff_not_even, nat_abs_even]
206+
198207
-- Here are examples of how `parity_simps` can be used with `int`.
199208

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

src/data/nat/parity.lean

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -164,9 +164,12 @@ theorem odd.of_mul_right (h : odd (m * n)) : odd n :=
164164

165165
/-- If `m` and `n` are natural numbers, then the natural number `m^n` is even
166166
if and only if `m` is even and `n` is positive. -/
167-
@[parity_simps] theorem even_pow : even (m^n) ↔ even m ∧ n ≠ 0 :=
167+
@[parity_simps] theorem even_pow : even (m ^ n) ↔ even m ∧ n ≠ 0 :=
168168
by { induction n with n ih; simp [*, pow_succ', even_mul], tauto }
169169

170+
theorem even_pow' (h : n ≠ 0) : even (m ^ n) ↔ even m :=
171+
even_pow.trans $ and_iff_left h
172+
170173
theorem even_div : even (m / n) ↔ m % (2 * n) / n = 0 :=
171174
by rw [even_iff_two_dvd, dvd_iff_mod_eq_zero, nat.div_mod_eq_mod_mul_div, mul_comm]
172175

0 commit comments

Comments
 (0)