Skip to content

Commit 79463c8

Browse files
committed
chore(NumberTheory/DirichletCharacter): use [NeZero n] everywhere (#37425)
At the moment, both `n ≠ 0` and `[NeZero n]` are used in the file `Mathlib.NumberTheory.DirichletCharacter.Basic` to express the fact that the level is nonzero. This PR fixes that by changing to `[NeZero n]` everywhere.
1 parent 2e36a1d commit 79463c8

File tree

2 files changed

+25
-22
lines changed

2 files changed

+25
-22
lines changed

Mathlib/NumberTheory/DirichletCharacter/Basic.lean

Lines changed: 24 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ lemma changeLevel_injective {m : ℕ} [NeZero m] (hm : n ∣ m) :
7878
simpa [changeLevel_def] using h z
7979

8080
@[simp]
81-
lemma changeLevel_eq_one_iff {m : ℕ} {χ : DirichletCharacter R n} (hm : n ∣ m) [NeZero m] :
81+
lemma changeLevel_eq_one_iff {m : ℕ} [NeZero m] {χ : DirichletCharacter R n} (hm : n ∣ m) :
8282
changeLevel hm χ = 1 ↔ χ = 1 :=
8383
map_eq_one_iff _ (changeLevel_injective hm)
8484

@@ -217,8 +217,8 @@ lemma level_mem_conductorSet : n ∈ conductorSet χ := FactorsThrough.same_leve
217217

218218
lemma mem_conductorSet_dvd {x : ℕ} (hx : x ∈ conductorSet χ) : x ∣ n := hx.dvd
219219

220-
theorem zero_ne_mem_conductorSet (hn : n ≠ 0) : 0 ∉ χ.conductorSet :=
221-
fun h ↦ hn <| Nat.eq_zero_of_zero_dvd <| FactorsThrough.dvd h
220+
theorem zero_ne_mem_conductorSet [NeZero n] : 0 ∉ χ.conductorSet :=
221+
fun h ↦ NeZero.ne n <| Nat.eq_zero_of_zero_dvd <| FactorsThrough.dvd h
222222

223223
/-- The minimum natural number level `n` through which `χ` factors. -/
224224
noncomputable def conductor : ℕ := sInf (conductorSet χ)
@@ -230,28 +230,30 @@ lemma conductor_dvd_level : conductor χ ∣ n := (conductor_mem_conductorSet χ
230230

231231
lemma factorsThrough_conductor : FactorsThrough χ (conductor χ) := conductor_mem_conductorSet χ
232232

233-
lemma conductor_ne_zero (hn : n ≠ 0) : conductor χ ≠ 0 :=
234-
fun h ↦ hn <| Nat.eq_zero_of_zero_dvd <| h ▸ conductor_dvd_level _
233+
lemma conductor_ne_zero [NeZero n] : conductor χ ≠ 0 :=
234+
fun h ↦ NeZero.ne n <| Nat.eq_zero_of_zero_dvd <| h ▸ conductor_dvd_level _
235235

236236
/-- The conductor of the trivial character is 1. -/
237-
lemma conductor_one (hn : n ≠ 0) : conductor (1 : DirichletCharacter R n) = 1 := by
237+
lemma conductor_one [NeZero n] : conductor (1 : DirichletCharacter R n) = 1 := by
238238
suffices FactorsThrough (1 : DirichletCharacter R n) 1 by
239239
have h : conductor (1 : DirichletCharacter R n) ≤ 1 :=
240240
Nat.sInf_le <| (mem_conductorSet_iff _).mpr this
241-
exact Nat.le_antisymm h (Nat.pos_of_ne_zero <| conductor_ne_zero _ hn)
241+
exact Nat.le_antisymm h (Nat.pos_of_ne_zero <| conductor_ne_zero _)
242242
exact (factorsThrough_one_iff _).mpr rfl
243243

244244
variable {χ}
245245

246-
lemma eq_one_iff_conductor_eq_one (hn : n ≠ 0) : χ = 1 ↔ conductor χ = 1 := by
247-
refine ⟨fun h ↦ h ▸ conductor_one hn, fun hχ ↦ ?_⟩
246+
lemma eq_one_iff_conductor_eq_one [NeZero n] : χ = 1 ↔ conductor χ = 1 := by
247+
refine ⟨fun h ↦ h ▸ conductor_one, fun hχ ↦ ?_⟩
248248
obtain ⟨h', χ₀, h⟩ := factorsThrough_conductor χ
249249
exact (level_one' χ₀ hχ ▸ h).trans <| changeLevel_one h'
250250

251251
lemma conductor_eq_zero_iff_level_eq_zero : conductor χ = 0 ↔ n = 0 := by
252-
refine ⟨(conductor_ne_zero χ).mtr, ?_⟩
253-
rintro rfl
254-
exact Nat.sInf_eq_zero.mpr <| Or.inl <| level_mem_conductorSet χ
252+
refine ⟨?_, ?_⟩
253+
· contrapose!
254+
exact fun h ↦ @conductor_ne_zero _ _ _ χ ⟨h⟩
255+
· rintro rfl
256+
exact Nat.sInf_eq_zero.mpr <| Or.inl <| level_mem_conductorSet χ
255257

256258
lemma conductor_le_conductor_mem_conductorSet {d : ℕ} (hd : d ∈ conductorSet χ) :
257259
χ.conductor ≤ (Classical.choose hd.2).conductor := by
@@ -294,30 +296,31 @@ lemma primitiveCharacter_isPrimitive : IsPrimitive (χ.primitiveCharacter) := by
294296
· exact le_antisymm (Nat.le_of_dvd (Nat.pos_of_ne_zero h) (conductor_dvd_level _)) <|
295297
conductor_le_conductor_mem_conductorSet <| conductor_mem_conductorSet χ
296298

297-
lemma primitiveCharacter_one (hn : n ≠ 0) :
298-
(1 : DirichletCharacter R n).primitiveCharacter = 1 := by
299-
rw [eq_one_iff_conductor_eq_one <| (@conductor_one R _ _ hn) ▸ Nat.one_ne_zero,
300-
(isPrimitive_def _).1 (1 : DirichletCharacter R n).primitiveCharacter_isPrimitive,
301-
conductor_one hn]
299+
lemma primitiveCharacter_one [NeZero n] : (1 : DirichletCharacter R n).primitiveCharacter = 1 := by
300+
have : NeZero (conductor (1 : DirichletCharacter R n)) :=
301+
⟨@conductor_one R _ n _ ▸ Nat.one_ne_zero⟩
302+
rw [eq_one_iff_conductor_eq_one,
303+
(isPrimitive_def _).1 (1 : DirichletCharacter R n).primitiveCharacter_isPrimitive,
304+
conductor_one]
302305

303-
theorem conductor_dvd_of_mem_conductorSet {d : ℕ} (hn : n ≠ 0) (hd : d ∈ χ.conductorSet) :
306+
theorem conductor_dvd_of_mem_conductorSet {d : ℕ} [NeZero n] (hd : d ∈ χ.conductorSet) :
304307
χ.conductor ∣ d := by
305308
have : NeZero d := ⟨by
306309
contrapose! hd
307-
exact hd ▸ zero_ne_mem_conductorSet χ hn
310+
exact hd ▸ zero_ne_mem_conductorSet χ⟩
308311
suffices d.gcd χ.conductor ∈ χ.conductorSet by
309312
have : χ.conductor ≤ d.gcd χ.conductor := Nat.sInf_le this
310313
contrapose! this
311314
refine Nat.lt_of_le_of_ne ?_ (Nat.gcd_eq_right_iff_dvd.not.mpr this)
312-
exact Nat.gcd_le_right _ <| Nat.pos_of_ne_zero <| conductor_ne_zero χ hn
315+
exact Nat.gcd_le_right _ <| Nat.pos_of_ne_zero <| conductor_ne_zero χ
313316
obtain ⟨hd, χ₀, hχ₀⟩ := hd
314317
suffices (changeLevel (d.dvd_mul_right χ.conductor)) χ₀ =
315318
(changeLevel (χ.conductor.dvd_mul_left d)) χ.primitiveCharacter by
316319
obtain ⟨_, χ₁, hχ₁⟩ := factorsThrough_gcd χ₀ χ.primitiveCharacter this
317320
refine ⟨Nat.dvd_trans (d.gcd_dvd_left χ.conductor) hd, χ₁, ?_⟩
318321
rw [changeLevel_trans _ (d.gcd_dvd_left χ.conductor), ← hχ₁, hχ₀]
319322
have : NeZero (d * χ.conductor * n) :=
320-
⟨Nat.mul_ne_zero (Nat.mul_ne_zero (NeZero.ne d) (conductor_ne_zero χ hn) ) hn
323+
⟨Nat.mul_ne_zero (Nat.mul_ne_zero (NeZero.ne d) χ.conductor_ne_zero) (NeZero.ne n)
321324
apply changeLevel_injective <| Nat.dvd_mul_right (d * χ.conductor) n
322325
rw [← changeLevel_trans, ← changeLevel_trans,
323326
changeLevel_trans _ hd (n.dvd_mul_left (d * χ.conductor)), ← hχ₀,

Mathlib/NumberTheory/LSeries/DirichletContinuation.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -290,7 +290,7 @@ theorem completedLFunction_one_sub {χ : DirichletCharacter ℂ N} (hχ : IsPrim
290290
-- facts about `χ` as function
291291
have h_sum : ∑ j, χ j = 0 := by
292292
refine χ.sum_eq_zero_of_ne_one (fun h ↦ hN.symm ?_)
293-
rwa [IsPrimitive, h, conductor_one (NeZero.ne _)] at hχ
293+
rwa [IsPrimitive, h, conductor_one] at hχ
294294
let ε := I ^ (if χ.Even then 0 else 1)
295295
-- gather up powers of N
296296
rw [rootNumber, ← mul_comm_div, ← mul_comm_div, ← cpow_sub _ _ (NeZero.ne _), sub_sub, add_halves]

0 commit comments

Comments
 (0)