Zulip Chat Archive
Stream: Is there code for X?
Topic: x ≠ (x + 1) % n
Iván Renison (Jul 01 2024 at 15:29):
Is there code for this?
theorem aux (x n : ℕ) (hx : x < n) (hn : 2 ≤ n) : x ≠ (x + 1) % n :=
sorry
Ruben Van de Velde (Jul 01 2024 at 15:58):
import Mathlib
theorem aux (x n : ℕ) (hx : x < n) (hn : 2 ≤ n) : x ≠ (x + 1) % n := by
rw [← Nat.add_one_le_iff] at hx
cases hx.eq_or_lt with
| inl hx =>
subst hx
simp
omega
| inr hx =>
rw [Nat.mod_eq_of_lt hx]
omega
Not sure if there's anything better, the conclusion seems pretty specific
Iván Renison (Jul 01 2024 at 17:11):
Thanks
Iván Renison (Jul 01 2024 at 17:11):
And would it be a good addition to mathlib, or it's to specific?
Daniel Weber (Jul 01 2024 at 18:03):
you don't actually need hx
:
import Mathlib
theorem aux (x n : ℕ) (hn : 2 ≤ n) : x ≠ (x + 1) % n := by
apply_fun (· % n)
simp only [dvd_refl, Nat.mod_mod_of_dvd, ne_eq]
exact fun h ↦
Nat.not_succ_le_self 1 <| hn.trans <| Nat.le_of_dvd zero_lt_one <|
Nat.dvd_of_mod_eq_zero <| Nat.add_sub_self_left x 1 ▸ Nat.sub_mod_eq_zero_of_mod_eq h.symm
Michael Stoll (Jul 01 2024 at 18:24):
theorem aux (x n : ℕ) (hn : 2 ≤ n) : x ≠ (x + 1) % n := by
apply_fun (· % n)
simp only [dvd_refl, Nat.mod_mod_of_dvd, ne_eq, ← ZMod.natCast_eq_natCast_iff', Nat.cast_add,
self_eq_add_right, ZMod.natCast_zmod_eq_zero_iff_dvd, Nat.dvd_one]
omega
Michael Stoll (Jul 01 2024 at 18:30):
theorem aux (x n : ℕ) (hn : 2 ≤ n) : x ≠ (x + 1) % n := by
apply_fun ((↑) : _ → ZMod n)
have : NeZero (1 : ZMod n) := @NeZero.one _ _ <| @ZMod.nontrivial n ⟨hn⟩
simpa only [ZMod.natCast_mod, Nat.cast_add, Nat.cast_one, ne_eq, self_eq_add_right] using
one_ne_zero
Going via ZMod n
, which I would usually recommend in these situations.
Last updated: May 02 2025 at 03:31 UTC