Skip to main content
AlexKontorovich/PrimeNumberTheoremAnd
Source indexedlemma · leanprover/lean4:v4.32.0

CH2.ϕ_pm_deriv_Ici_finite

PrimeNumberTheoremAnd.IEANTN.CH2.CH2_part1 · PrimeNumberTheoremAnd/IEANTN/CH2/CH2_part1.lean:5424 to 5475

Mathematical statement

Exact Lean statement

lemma ϕ_pm_deriv_Ici_finite (ν ε : ℝ) :
    eVariationOn (deriv (ϕ_pm ν ε)) (Set.Ici (1 : ℝ)) ≠ ⊤

Complete declaration

Lean source

Canonical source
Full Lean sourceLean 4
lemma ϕ_pm_deriv_Ici_finite (ν ε : ) :    eVariationOn (deriv (ϕ_pm ν ε)) (Set.Ici (1 : )) := by  set g := deriv (ϕ_pm ν ε)  have hg_zero :  t > 1, g t = 0 := fun t ht  ϕ_pm_deriv_zero_outside ν ε (Or.inr ht)  apply ne_top_of_le_ne_top (edist_lt_top (g 1) 0).ne  apply iSup_le; rintro n, u, hu, hu_mem  by_cases h_any :  i  Finset.range (n + 1), u i = 1  · let S := (Finset.range (n + 1)).filter (fun i  u i = 1)    have hS : S.Nonempty :=      h_any.elim fun i hi, eq => i, Finset.mem_filter.mpr hi, eq⟩⟩    let k := S.max' hS    have hk_mem : k  S := Finset.max'_mem S hS    have hu_k : u k = 1 := (Finset.mem_filter.mp hk_mem).2    have hu_gt :  i > k, i  n  u i > 1 := by      intro i hi hi_n      apply lt_of_le_of_ne (hu_mem i)      intro h_eq      have hi_S : i  S := Finset.mem_filter.mpr Finset.mem_range.mpr (Nat.lt_succ_of_le hi_n), h_eq.symm      linarith [S.le_max' i hi_S]    have hu_eq :  i  k, u i = 1 := fun i hi       le_antisymm (hu_k ▸ hu hi) (hu_mem i)    calc ∑ i  Finset.range n, edist (g (u (i + 1))) (g (u i))      _ = ∑ i  Finset.range n, if i = k then edist (g 1) 0 else 0 := by        apply Finset.sum_congr rfl; intro i hi        have hi_n : i < n := Finset.mem_range.mp hi        split_ifs with h_eq_k        · rw [show u i = 1 from by rw [h_eq_k, hu_k], hg_zero _ (hu_gt _ (by omega) (by omega)), edist_comm]        · by_cases h_lt_k : i < k          · rw [show u (i + 1) = 1 from hu_eq _ (by omega), show u i = 1 from hu_eq _ (by omega), edist_self]          · rw [hg_zero _ (hu_gt _ (by omega) (by omega)), hg_zero _ (hu_gt _ (by omega) (by omega)), edist_self]      _  edist (g 1) 0 := by        rw [Finset.sum_ite]; simp only [Finset.sum_const_zero, add_zero]        let fS := (Finset.range n).filter (fun i  i = k)        have h_card : fS.card  1 :=          Finset.card_le_one_iff.mpr fun hx hy => by            have hx := (Finset.mem_filter.mp hx).2            have hy := (Finset.mem_filter.mp hy).2            exact hx.trans hy.symm        calc (fS.sum (fun _  edist (g 1) 0))          _ = fS.card • edist (g 1) 0 := Finset.sum_const _          _  1 • edist (g 1) 0 := by gcongr          _ = edist (g 1) 0 := by simp  · have h_gt :  i  n, u i > 1 := fun i hi =>      lt_of_le_of_ne (hu_mem i) fun h_eq =>        absurd (i, Finset.mem_range.mpr (Nat.lt_succ_of_le hi), h_eq.symm :  i  Finset.range (n + 1), u i = 1) h_any    calc ∑ i  Finset.range n, edist (g (u (i + 1))) (g (u i))      _ = ∑ i  Finset.range n, 0 := by        apply Finset.sum_congr rfl; intro i hi        have hi_n : i < n := Finset.mem_range.mp hi        rw [hg_zero _ (h_gt (i + 1) hi_n), hg_zero _ (h_gt i hi_n.le), edist_self]      _ = 0 := by simp      _  edist (g 1) 0 := by positivity