Theorem: rexp_neg_quadratic_isLittleO_rpow_atTop
File: Mathlib/Analysis/SpecialFunctions/Gaussian/PoissonSummation.lean

tactic: suffices (fun x ↦ rexp (a * x ^ 2 + b * x)) =o[atTop] (fun x ↦ rexp (-x)) by
  refine this.trans ?_
  simpa only [neg_one_mul] using isLittleO_exp_neg_mul_rpow_atTop zero_lt_one s
state_before: E : Type u_1
inst✝ : NormedAddCommGroup E
a : ℝ
ha : a < 0
b s : ℝ
⊢ (fun x => rexp (a * x ^ 2 + b * x)) =o[atTop] fun x => x ^ s
state_after: E : Type u_1
inst✝ : NormedAddCommGroup E
a : ℝ
ha : a < 0
b s : ℝ
⊢ (fun x => rexp (a * x ^ 2 + b * x)) =o[atTop] fun x => rexp (-x)

tactic: rw [isLittleO_exp_comp_exp_comp]
state_before: E : Type u_1
inst✝ : NormedAddCommGroup E
a : ℝ
ha : a < 0
b s : ℝ
⊢ (fun x => rexp (a * x ^ 2 + b * x)) =o[atTop] fun x => rexp (-x)
state_after: E : Type u_1
inst✝ : NormedAddCommGroup E
a : ℝ
ha : a < 0
b s : ℝ
⊢ Tendsto (fun x => -x - (a * x ^ 2 + b * x)) atTop atTop

tactic: have : (fun x ↦ -x - (a * x ^ 2 + b * x)) = fun x ↦ x * (-a * x - (b + 1)) := by
  ext1 x; ring_nf
state_before: E : Type u_1
inst✝ : NormedAddCommGroup E
a : ℝ
ha : a < 0
b s : ℝ
⊢ Tendsto (fun x => -x - (a * x ^ 2 + b * x)) atTop atTop
state_after: E : Type u_1
inst✝ : NormedAddCommGroup E
a : ℝ
ha : a < 0
b s : ℝ
this : (fun x => -x - (a * x ^ 2 + b * x)) = fun x => x * (-a * x - (b + 1))
⊢ Tendsto (fun x => -x - (a * x ^ 2 + b * x)) atTop atTop

tactic: rw [this]
state_before: E : Type u_1
inst✝ : NormedAddCommGroup E
a : ℝ
ha : a < 0
b s : ℝ
this : (fun x => -x - (a * x ^ 2 + b * x)) = fun x => x * (-a * x - (b + 1))
⊢ Tendsto (fun x => -x - (a * x ^ 2 + b * x)) atTop atTop
state_after: E : Type u_1
inst✝ : NormedAddCommGroup E
a : ℝ
ha : a < 0
b s : ℝ
this : (fun x => -x - (a * x ^ 2 + b * x)) = fun x => x * (-a * x - (b + 1))
⊢ Tendsto (fun x => x * (-a * x - (b + 1))) atTop atTop

tactic: exact tendsto_id.atTop_mul_atTop <|
  Filter.tendsto_atTop_add_const_right _ _ <| tendsto_id.const_mul_atTop (neg_pos.mpr ha)
state_before: E : Type u_1
inst✝ : NormedAddCommGroup E
a : ℝ
ha : a < 0
b s : ℝ
this : (fun x => -x - (a * x ^ 2 + b * x)) = fun x => x * (-a * x - (b + 1))
⊢ Tendsto (fun x => x * (-a * x - (b + 1))) atTop atTop
state_after: no goals

tactic: refine this.trans ?_
state_before: E : Type u_1
inst✝ : NormedAddCommGroup E
a : ℝ
ha : a < 0
b s : ℝ
this : (fun x => rexp (a * x ^ 2 + b * x)) =o[atTop] fun x => rexp (-x)
⊢ (fun x => rexp (a * x ^ 2 + b * x)) =o[atTop] fun x => x ^ s
state_after: E : Type u_1
inst✝ : NormedAddCommGroup E
a : ℝ
ha : a < 0
b s : ℝ
this : (fun x => rexp (a * x ^ 2 + b * x)) =o[atTop] fun x => rexp (-x)
⊢ (fun x => rexp (-x)) =o[atTop] fun x => x ^ s

tactic: simpa only [neg_one_mul] using isLittleO_exp_neg_mul_rpow_atTop zero_lt_one s
state_before: E : Type u_1
inst✝ : NormedAddCommGroup E
a : ℝ
ha : a < 0
b s : ℝ
this : (fun x => rexp (a * x ^ 2 + b * x)) =o[atTop] fun x => rexp (-x)
⊢ (fun x => rexp (-x)) =o[atTop] fun x => x ^ s
state_after: no goals

tactic: ext1 x
state_before: E : Type u_1
inst✝ : NormedAddCommGroup E
a : ℝ
ha : a < 0
b s : ℝ
⊢ (fun x => -x - (a * x ^ 2 + b * x)) = fun x => x * (-a * x - (b + 1))
state_after: case h
E : Type u_1
inst✝ : NormedAddCommGroup E
a : ℝ
ha : a < 0
b s x : ℝ
⊢ -x - (a * x ^ 2 + b * x) = x * (-a * x - (b + 1))

tactic: ring_nf
state_before: case h
E : Type u_1
inst✝ : NormedAddCommGroup E
a : ℝ
ha : a < 0
b s x : ℝ
⊢ -x - (a * x ^ 2 + b * x) = x * (-a * x - (b + 1))
state_after: no goals