194
194
lemma even_sub_one_of_prime_ne_two {p : ℕ} (hp : prime p) (hodd : p ≠ 2 ) : even (p - 1 ) :=
195
195
odd.sub_odd (odd_iff.2 $ hp.eq_two_or_odd.resolve_left hodd) (odd_iff.2 rfl)
196
196
197
- variables {R : Type *} [ring R]
197
+ section distrib_neg_monoid
198
198
199
- theorem neg_one_pow_eq_one_iff_even (h1 : (-1 : R) ≠ 1 ) : (-1 : R) ^ n = 1 ↔ even n :=
200
- begin
201
- rcases n.even_or_odd' with ⟨n, rfl | rfl⟩,
202
- { simp [neg_one_pow_eq_pow_mod_two, pow_zero] },
203
- { rw [← not_iff_not, neg_one_pow_eq_pow_mod_two, not_even_iff, add_mod],
204
- simp only [h1, mul_mod_right, one_mod, pow_one, not_false_iff, eq_self_iff_true] }
205
- end
199
+ variables {R : Type *} [monoid R] [has_distrib_neg R]
206
200
207
201
@[simp] theorem neg_one_sq : (-1 : R) ^ 2 = 1 := by simp
208
202
@@ -229,6 +223,15 @@ by { convert nat.div_add_mod' n 2, rw odd_iff.mp h }
229
223
lemma one_add_div_two_mul_two_of_odd (h : odd n) : 1 + n / 2 * 2 = n :=
230
224
by { rw add_comm, convert nat.div_add_mod' n 2 , rw odd_iff.mp h }
231
225
226
+ theorem neg_one_pow_eq_one_iff_even (h1 : (-1 : R) ≠ 1 ) : (-1 : R) ^ n = 1 ↔ even n :=
227
+ begin
228
+ refine ⟨λ h, _, neg_one_pow_of_even⟩,
229
+ contrapose! h1,
230
+ exact (neg_one_pow_of_odd $ odd_iff_not_even.mpr h1).symm.trans h
231
+ end
232
+
233
+ end distrib_neg_monoid
234
+
232
235
-- Here are examples of how `parity_simps` can be used with `nat`.
233
236
234
237
example (m n : ℕ) (h : even m) : ¬ even (n + 3 ) ↔ even (m^2 + m + n) :=
0 commit comments