Zulip Chat Archive

Stream: Is there code for X?

Topic: Divergence of sub-series of harmonic series


Michael Stoll (Jan 07 2024 at 19:47):

Do we have the following?

import Mathlib

example {k m : } (hm : m   0) : ¬ Summable (Set.indicator {n | n % m = k} fun n :   (1 / n : )) := sorry

(For the full series, there are docs#Real.not_summable_one_div_nat_cast and docs#Real.not_summable_nat_cast_inv .)

Michael Stoll (Jan 07 2024 at 20:56):

Here is a proof, FWIW.

import Mathlib.Analysis.PSeries

namespace Real

lemma not_summable_indicator_one_div_nat_cast {m : } (hm : m  0) (k : ZMod m) :
    ¬ Summable (Set.indicator {n :  | (n : ZMod m) = k} fun n :   (1 / n : )) := by
  have : NeZero m := hm -- instance needed in some cases below
  suffices : ¬ Summable fun n :   (1 / (m * n + k.val) : )
  · set f :    := Set.indicator {n :  | (n : ZMod m) = k} fun n :   (1 / n : )
    contrapose! this
    let g :    := fun n  m * n + k.val
    have hg : Function.Injective g
    · intro m n hmn
      simpa only [add_left_inj, mul_eq_mul_left_iff, hm, or_false] using hmn
    have hg' :  n  Set.range g, f n = 0
    · intro n hn
      contrapose! hn
      convert Set.mem_of_indicator_ne_zero hn
      ext n
      simp only [Set.mem_range, Set.mem_setOf_eq, ZMod.nat_coe_zmod_eq_iff]
      conv => enter [1, 1, y]; rw [add_comm, eq_comm]
    convert (Function.Injective.summable_iff hg hg').mpr this with n
    simp [g]
  by_contra! h
  refine not_summable_one_div_nat_cast <| (summable_nat_add_iff 2).mp <|
    (summable_mul_left_iff (one_div_ne_zero <| Nat.cast_ne_zero.mpr hm)).mp <|
    Summable.of_nonneg_of_le (fun n  by positivity) (fun n  ?_) <| (summable_nat_add_iff 1).mpr h
  field_simp
  rw [ ZMod.nat_cast_val k]
  gcongr
  norm_cast
  linarith only [ZMod.val_le k]

Last updated: May 02 2025 at 03:31 UTC