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

tactic: rw [cocompact_eq_atBot_atTop, isLittleO_sup]
state_before: E : Type u_1
inst✝ : NormedAddCommGroup E
a : ℂ
ha : a.re < 0
b : ℂ
s : ℝ
⊢ (fun x => cexp (a * ↑x ^ 2 + b * ↑x)) =o[cocompact ℝ] fun x => |x| ^ s
state_after: E : Type u_1
inst✝ : NormedAddCommGroup E
a : ℂ
ha : a.re < 0
b : ℂ
s : ℝ
⊢ ((fun x => cexp (a * ↑x ^ 2 + b * ↑x)) =o[atBot] fun x => |x| ^ s) ∧
    (fun x => cexp (a * ↑x ^ 2 + b * ↑x)) =o[atTop] fun x => |x| ^ s

tactic: constructor
state_before: E : Type u_1
inst✝ : NormedAddCommGroup E
a : ℂ
ha : a.re < 0
b : ℂ
s : ℝ
⊢ ((fun x => cexp (a * ↑x ^ 2 + b * ↑x)) =o[atBot] fun x => |x| ^ s) ∧
    (fun x => cexp (a * ↑x ^ 2 + b * ↑x)) =o[atTop] fun x => |x| ^ s
state_after: case left
E : Type u_1
inst✝ : NormedAddCommGroup E
a : ℂ
ha : a.re < 0
b : ℂ
s : ℝ
⊢ (fun x => cexp (a * ↑x ^ 2 + b * ↑x)) =o[atBot] fun x => |x| ^ s

case right
E : Type u_1
inst✝ : NormedAddCommGroup E
a : ℂ
ha : a.re < 0
b : ℂ
s : ℝ
⊢ (fun x => cexp (a * ↑x ^ 2 + b * ↑x)) =o[atTop] fun x => |x| ^ s

tactic: refine ((cexp_neg_quadratic_isLittleO_rpow_atTop ha (-b) s).comp_tendsto
  Filter.tendsto_neg_atBot_atTop).congr' (eventually_of_forall fun x ↦ ?_) ?_
state_before: case left
E : Type u_1
inst✝ : NormedAddCommGroup E
a : ℂ
ha : a.re < 0
b : ℂ
s : ℝ
⊢ (fun x => cexp (a * ↑x ^ 2 + b * ↑x)) =o[atBot] fun x => |x| ^ s
state_after: case left.refine_1
E : Type u_1
inst✝ : NormedAddCommGroup E
a : ℂ
ha : a.re < 0
b : ℂ
s x : ℝ
⊢ ((fun x => cexp (a * ↑x ^ 2 + -b * ↑x)) ∘ Neg.neg) x = (fun x => cexp (a * ↑x ^ 2 + b * ↑x)) x

case left.refine_2
E : Type u_1
inst✝ : NormedAddCommGroup E
a : ℂ
ha : a.re < 0
b : ℂ
s : ℝ
⊢ (fun x => x ^ s) ∘ Neg.neg =ᶠ[atBot] fun x => |x| ^ s

tactic: simp only [neg_mul, Function.comp_apply, ofReal_neg, neg_sq, mul_neg, neg_neg]
state_before: case left.refine_1
E : Type u_1
inst✝ : NormedAddCommGroup E
a : ℂ
ha : a.re < 0
b : ℂ
s x : ℝ
⊢ ((fun x => cexp (a * ↑x ^ 2 + -b * ↑x)) ∘ Neg.neg) x = (fun x => cexp (a * ↑x ^ 2 + b * ↑x)) x
state_after: no goals

tactic: refine (eventually_lt_atBot 0).mp (eventually_of_forall fun x hx ↦ ?_)
state_before: case left.refine_2
E : Type u_1
inst✝ : NormedAddCommGroup E
a : ℂ
ha : a.re < 0
b : ℂ
s : ℝ
⊢ (fun x => x ^ s) ∘ Neg.neg =ᶠ[atBot] fun x => |x| ^ s
state_after: case left.refine_2
E : Type u_1
inst✝ : NormedAddCommGroup E
a : ℂ
ha : a.re < 0
b : ℂ
s x : ℝ
hx : x < 0
⊢ ((fun x => x ^ s) ∘ Neg.neg) x = (fun x => |x| ^ s) x

tactic: simp only [Function.comp_apply, abs_of_neg hx]
state_before: case left.refine_2
E : Type u_1
inst✝ : NormedAddCommGroup E
a : ℂ
ha : a.re < 0
b : ℂ
s x : ℝ
hx : x < 0
⊢ ((fun x => x ^ s) ∘ Neg.neg) x = (fun x => |x| ^ s) x
state_after: no goals

tactic: refine (cexp_neg_quadratic_isLittleO_rpow_atTop ha b s).congr' EventuallyEq.rfl ?_
state_before: case right
E : Type u_1
inst✝ : NormedAddCommGroup E
a : ℂ
ha : a.re < 0
b : ℂ
s : ℝ
⊢ (fun x => cexp (a * ↑x ^ 2 + b * ↑x)) =o[atTop] fun x => |x| ^ s
state_after: case right
E : Type u_1
inst✝ : NormedAddCommGroup E
a : ℂ
ha : a.re < 0
b : ℂ
s : ℝ
⊢ (fun x => x ^ s) =ᶠ[atTop] fun x => |x| ^ s

tactic: refine (eventually_gt_atTop 0).mp (eventually_of_forall fun x hx ↦ ?_)
state_before: case right
E : Type u_1
inst✝ : NormedAddCommGroup E
a : ℂ
ha : a.re < 0
b : ℂ
s : ℝ
⊢ (fun x => x ^ s) =ᶠ[atTop] fun x => |x| ^ s
state_after: case right
E : Type u_1
inst✝ : NormedAddCommGroup E
a : ℂ
ha : a.re < 0
b : ℂ
s x : ℝ
hx : 0 < x
⊢ (fun x => x ^ s) x = (fun x => |x| ^ s) x

tactic: simp_rw [abs_of_pos hx]
state_before: case right
E : Type u_1
inst✝ : NormedAddCommGroup E
a : ℂ
ha : a.re < 0
b : ℂ
s x : ℝ
hx : 0 < x
⊢ (fun x => x ^ s) x = (fun x => |x| ^ s) x
state_after: no goals