Theorem: HurwitzZeta.isBigO_atTop_cosKernel_sub
File: Mathlib/NumberTheory/LSeries/HurwitzZetaEven.lean

Proof steps:
state_before: a : UnitAddCircle
⊢ ∃ p, 0 < p ∧ (fun x => cosKernel a x - 1) =O[atTop] fun x => rexp (-p * x)
state_after: case H
a : ℝ
⊢ ∃ p, 0 < p ∧ (fun x => cosKernel (↑a) x - 1) =O[atTop] fun x => rexp (-p * x)
tactic: induction' a using QuotientAddGroup.induction_on with a
state_before: case H
a : ℝ
⊢ ∃ p, 0 < p ∧ (fun x => cosKernel (↑a) x - 1) =O[atTop] fun x => rexp (-p * x)
state_after: case H.intro.intro
a p : ℝ
hp : 0 < p
hp' : (fun t => HurwitzKernelBounds.F_nat 0 1 t - if 1 = 0 then 1 else 0) =O[atTop] fun t => rexp (-p * t)
⊢ ∃ p, 0 < p ∧ (fun x => cosKernel (↑a) x - 1) =O[atTop] fun x => rexp (-p * x)
tactic: obtain ⟨p, hp, hp'⟩ := HurwitzKernelBounds.isBigO_atTop_F_nat_zero_sub zero_le_one
state_before: case H.intro.intro
a p : ℝ
hp : 0 < p
hp' : (fun t => HurwitzKernelBounds.F_nat 0 1 t - if 1 = 0 then 1 else 0) =O[atTop] fun t => rexp (-p * t)
⊢ ∃ p, 0 < p ∧ (fun x => cosKernel (↑a) x - 1) =O[atTop] fun x => rexp (-p * x)
state_after: case H.intro.intro
a p : ℝ
hp : 0 < p
hp' : (fun t => HurwitzKernelBounds.F_nat 0 1 t - if 1 = 0 then 1 else 0) =O[atTop] fun t => rexp (-p * t)
⊢ ∀ᶠ (x : ℝ) in atTop, ‖cosKernel (↑a) x - 1‖ ≤ 2 * (HurwitzKernelBounds.F_nat 0 1 x - if 1 = 0 then 1 else 0)
tactic: refine ⟨p, hp, (Eventually.isBigO ?_).trans (hp'.const_mul_left 2)⟩
state_before: case H.intro.intro
a p : ℝ
hp : 0 < p
hp' : (fun t => HurwitzKernelBounds.F_nat 0 1 t - if 1 = 0 then 1 else 0) =O[atTop] fun t => rexp (-p * t)
⊢ ∀ᶠ (x : ℝ) in atTop, ‖cosKernel (↑a) x - 1‖ ≤ 2 * (HurwitzKernelBounds.F_nat 0 1 x - if 1 = 0 then 1 else 0)
state_after: case H.intro.intro
a p : ℝ
hp : 0 < p
hp' : (fun t => HurwitzKernelBounds.F_nat 0 1 t - if 1 = 0 then 1 else 0) =O[atTop] fun t => rexp (-p * t)
⊢ ∀ᶠ (x : ℝ) in atTop, ‖cosKernel (↑a) x - 1‖ ≤ 2 * HurwitzKernelBounds.F_nat 0 1 x
tactic: simp only [eq_false_intro one_ne_zero, if_false, sub_zero]
state_before: case H.intro.intro
a p : ℝ
hp : 0 < p
hp' : (fun t => HurwitzKernelBounds.F_nat 0 1 t - if 1 = 0 then 1 else 0) =O[atTop] fun t => rexp (-p * t)
⊢ ∀ᶠ (x : ℝ) in atTop, ‖cosKernel (↑a) x - 1‖ ≤ 2 * HurwitzKernelBounds.F_nat 0 1 x
state_after: case h
a p : ℝ
hp : 0 < p
hp' : (fun t => HurwitzKernelBounds.F_nat 0 1 t - if 1 = 0 then 1 else 0) =O[atTop] fun t => rexp (-p * t)
t : ℝ
ht : 0 < t
⊢ ‖cosKernel (↑a) t - 1‖ ≤ 2 * HurwitzKernelBounds.F_nat 0 1 t
tactic: filter_upwards [eventually_gt_atTop 0] with t ht
state_before: case h
a p : ℝ
hp : 0 < p
hp' : (fun t => HurwitzKernelBounds.F_nat 0 1 t - if 1 = 0 then 1 else 0) =O[atTop] fun t => rexp (-p * t)
t : ℝ
ht : 0 < t
⊢ ‖cosKernel (↑a) t - 1‖ ≤ 2 * HurwitzKernelBounds.F_nat 0 1 t
state_after: case h
a p : ℝ
hp : 0 < p
hp' : (fun t => HurwitzKernelBounds.F_nat 0 1 t - if 1 = 0 then 1 else 0) =O[atTop] fun t => rexp (-p * t)
t : ℝ
ht : 0 < t
⊢ ‖∑' (b : ℕ), 2 * Real.cos (2 * π * a * (↑b + 1)) * rexp (-π * (↑b + 1) ^ 2 * t)‖ ≤
    2 * ∑' (n : ℕ), HurwitzKernelBounds.f_nat 0 1 t n
tactic: rw [← (hasSum_nat_cosKernel₀ a ht).tsum_eq, HurwitzKernelBounds.F_nat]
state_before: case h
a p : ℝ
hp : 0 < p
hp' : (fun t => HurwitzKernelBounds.F_nat 0 1 t - if 1 = 0 then 1 else 0) =O[atTop] fun t => rexp (-p * t)
t : ℝ
ht : 0 < t
⊢ ‖∑' (b : ℕ), 2 * Real.cos (2 * π * a * (↑b + 1)) * rexp (-π * (↑b + 1) ^ 2 * t)‖ ≤
    2 * ∑' (n : ℕ), HurwitzKernelBounds.f_nat 0 1 t n
state_after: case h
a p : ℝ
hp : 0 < p
hp' : (fun t => HurwitzKernelBounds.F_nat 0 1 t - if 1 = 0 then 1 else 0) =O[atTop] fun t => rexp (-p * t)
t : ℝ
ht : 0 < t
⊢ ∀ (i : ℕ),
    ‖2 * Real.cos (2 * π * a * (↑i + 1)) * rexp (-π * (↑i + 1) ^ 2 * t)‖ ≤ 2 * HurwitzKernelBounds.f_nat 0 1 t i
tactic: apply tsum_of_norm_bounded ((HurwitzKernelBounds.summable_f_nat 0 1 ht).hasSum.mul_left 2)
state_before: case h
a p : ℝ
hp : 0 < p
hp' : (fun t => HurwitzKernelBounds.F_nat 0 1 t - if 1 = 0 then 1 else 0) =O[atTop] fun t => rexp (-p * t)
t : ℝ
ht : 0 < t
⊢ ∀ (i : ℕ),
    ‖2 * Real.cos (2 * π * a * (↑i + 1)) * rexp (-π * (↑i + 1) ^ 2 * t)‖ ≤ 2 * HurwitzKernelBounds.f_nat 0 1 t i
state_after: case h
a p : ℝ
hp : 0 < p
hp' : (fun t => HurwitzKernelBounds.F_nat 0 1 t - if 1 = 0 then 1 else 0) =O[atTop] fun t => rexp (-p * t)
t : ℝ
ht : 0 < t
n : ℕ
⊢ ‖2 * Real.cos (2 * π * a * (↑n + 1)) * rexp (-π * (↑n + 1) ^ 2 * t)‖ ≤ 2 * HurwitzKernelBounds.f_nat 0 1 t n
tactic: intro n
state_before: case h
a p : ℝ
hp : 0 < p
hp' : (fun t => HurwitzKernelBounds.F_nat 0 1 t - if 1 = 0 then 1 else 0) =O[atTop] fun t => rexp (-p * t)
t : ℝ
ht : 0 < t
n : ℕ
⊢ ‖2 * Real.cos (2 * π * a * (↑n + 1)) * rexp (-π * (↑n + 1) ^ 2 * t)‖ ≤ 2 * HurwitzKernelBounds.f_nat 0 1 t n
state_after: case h
a p : ℝ
hp : 0 < p
hp' : (fun t => HurwitzKernelBounds.F_nat 0 1 t - if 1 = 0 then 1 else 0) =O[atTop] fun t => rexp (-p * t)
t : ℝ
ht : 0 < t
n : ℕ
⊢ |Real.cos (2 * π * a * (↑n + 1))| * rexp (-π * (↑n + 1) ^ 2 * t) ≤ rexp (-π * (↑n + 1) ^ 2 * t)
tactic: rw [norm_mul, norm_mul, norm_two, mul_assoc, mul_le_mul_iff_of_pos_left two_pos,
    norm_of_nonneg (exp_pos _).le, HurwitzKernelBounds.f_nat, pow_zero, one_mul, Real.norm_eq_abs]
state_before: case h
a p : ℝ
hp : 0 < p
hp' : (fun t => HurwitzKernelBounds.F_nat 0 1 t - if 1 = 0 then 1 else 0) =O[atTop] fun t => rexp (-p * t)
t : ℝ
ht : 0 < t
n : ℕ
⊢ |Real.cos (2 * π * a * (↑n + 1))| * rexp (-π * (↑n + 1) ^ 2 * t) ≤ rexp (-π * (↑n + 1) ^ 2 * t)
state_after: no goals
tactic: exact mul_le_of_le_one_left (exp_pos _).le (abs_cos_le_one _)