Theorem: MeromorphicAt.add
File: Mathlib/Analysis/Analytic/Meromorphic.lean

tactic: rcases hf with ⟨m, hf⟩
state_before: 𝕜 : Type u_1
inst✝² : NontriviallyNormedField 𝕜
E : Type u_2
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
f g : 𝕜 → E
x : 𝕜
hf : MeromorphicAt f x
hg : MeromorphicAt g x
⊢ MeromorphicAt (f + g) x
state_after: case intro
𝕜 : Type u_1
inst✝² : NontriviallyNormedField 𝕜
E : Type u_2
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
f g : 𝕜 → E
x : 𝕜
hg : MeromorphicAt g x
m : ℕ
hf : AnalyticAt 𝕜 (fun z => (z - x) ^ m • f z) x
⊢ MeromorphicAt (f + g) x

tactic: rcases hg with ⟨n, hg⟩
state_before: case intro
𝕜 : Type u_1
inst✝² : NontriviallyNormedField 𝕜
E : Type u_2
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
f g : 𝕜 → E
x : 𝕜
hg : MeromorphicAt g x
m : ℕ
hf : AnalyticAt 𝕜 (fun z => (z - x) ^ m • f z) x
⊢ MeromorphicAt (f + g) x
state_after: case intro.intro
𝕜 : Type u_1
inst✝² : NontriviallyNormedField 𝕜
E : Type u_2
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
f g : 𝕜 → E
x : 𝕜
m : ℕ
hf : AnalyticAt 𝕜 (fun z => (z - x) ^ m • f z) x
n : ℕ
hg : AnalyticAt 𝕜 (fun z => (z - x) ^ n • g z) x
⊢ MeromorphicAt (f + g) x

tactic: refine ⟨max m n, ?_⟩
state_before: case intro.intro
𝕜 : Type u_1
inst✝² : NontriviallyNormedField 𝕜
E : Type u_2
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
f g : 𝕜 → E
x : 𝕜
m : ℕ
hf : AnalyticAt 𝕜 (fun z => (z - x) ^ m • f z) x
n : ℕ
hg : AnalyticAt 𝕜 (fun z => (z - x) ^ n • g z) x
⊢ MeromorphicAt (f + g) x
state_after: case intro.intro
𝕜 : Type u_1
inst✝² : NontriviallyNormedField 𝕜
E : Type u_2
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
f g : 𝕜 → E
x : 𝕜
m : ℕ
hf : AnalyticAt 𝕜 (fun z => (z - x) ^ m • f z) x
n : ℕ
hg : AnalyticAt 𝕜 (fun z => (z - x) ^ n • g z) x
⊢ AnalyticAt 𝕜 (fun z => (z - x) ^ max m n • (f + g) z) x

tactic: have : (fun z ↦ (z - x) ^ max m n • (f + g) z) = fun z ↦ (z - x) ^ (max m n - m) •
    ((z - x) ^ m • f z) + (z - x) ^ (max m n - n) • ((z - x) ^ n • g z) := by
  simp_rw [← mul_smul, ← pow_add, Nat.sub_add_cancel (Nat.le_max_left _ _),
    Nat.sub_add_cancel (Nat.le_max_right _ _), Pi.add_apply, smul_add]
state_before: case intro.intro
𝕜 : Type u_1
inst✝² : NontriviallyNormedField 𝕜
E : Type u_2
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
f g : 𝕜 → E
x : 𝕜
m : ℕ
hf : AnalyticAt 𝕜 (fun z => (z - x) ^ m • f z) x
n : ℕ
hg : AnalyticAt 𝕜 (fun z => (z - x) ^ n • g z) x
⊢ AnalyticAt 𝕜 (fun z => (z - x) ^ max m n • (f + g) z) x
state_after: case intro.intro
𝕜 : Type u_1
inst✝² : NontriviallyNormedField 𝕜
E : Type u_2
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
f g : 𝕜 → E
x : 𝕜
m : ℕ
hf : AnalyticAt 𝕜 (fun z => (z - x) ^ m • f z) x
n : ℕ
hg : AnalyticAt 𝕜 (fun z => (z - x) ^ n • g z) x
this :
  (fun z => (z - x) ^ max m n • (f + g) z) = fun z =>
    (z - x) ^ (max m n - m) • (z - x) ^ m • f z + (z - x) ^ (max m n - n) • (z - x) ^ n • g z
⊢ AnalyticAt 𝕜 (fun z => (z - x) ^ max m n • (f + g) z) x

tactic: rw [this]
state_before: case intro.intro
𝕜 : Type u_1
inst✝² : NontriviallyNormedField 𝕜
E : Type u_2
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
f g : 𝕜 → E
x : 𝕜
m : ℕ
hf : AnalyticAt 𝕜 (fun z => (z - x) ^ m • f z) x
n : ℕ
hg : AnalyticAt 𝕜 (fun z => (z - x) ^ n • g z) x
this :
  (fun z => (z - x) ^ max m n • (f + g) z) = fun z =>
    (z - x) ^ (max m n - m) • (z - x) ^ m • f z + (z - x) ^ (max m n - n) • (z - x) ^ n • g z
⊢ AnalyticAt 𝕜 (fun z => (z - x) ^ max m n • (f + g) z) x
state_after: case intro.intro
𝕜 : Type u_1
inst✝² : NontriviallyNormedField 𝕜
E : Type u_2
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
f g : 𝕜 → E
x : 𝕜
m : ℕ
hf : AnalyticAt 𝕜 (fun z => (z - x) ^ m • f z) x
n : ℕ
hg : AnalyticAt 𝕜 (fun z => (z - x) ^ n • g z) x
this :
  (fun z => (z - x) ^ max m n • (f + g) z) = fun z =>
    (z - x) ^ (max m n - m) • (z - x) ^ m • f z + (z - x) ^ (max m n - n) • (z - x) ^ n • g z
⊢ AnalyticAt 𝕜 (fun z => (z - x) ^ (max m n - m) • (z - x) ^ m • f z + (z - x) ^ (max m n - n) • (z - x) ^ n • g z) x

tactic: exact ((((analyticAt_id 𝕜 x).sub analyticAt_const).pow _).smul hf).add
 ((((analyticAt_id 𝕜 x).sub analyticAt_const).pow _).smul hg)
state_before: case intro.intro
𝕜 : Type u_1
inst✝² : NontriviallyNormedField 𝕜
E : Type u_2
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
f g : 𝕜 → E
x : 𝕜
m : ℕ
hf : AnalyticAt 𝕜 (fun z => (z - x) ^ m • f z) x
n : ℕ
hg : AnalyticAt 𝕜 (fun z => (z - x) ^ n • g z) x
this :
  (fun z => (z - x) ^ max m n • (f + g) z) = fun z =>
    (z - x) ^ (max m n - m) • (z - x) ^ m • f z + (z - x) ^ (max m n - n) • (z - x) ^ n • g z
⊢ AnalyticAt 𝕜 (fun z => (z - x) ^ (max m n - m) • (z - x) ^ m • f z + (z - x) ^ (max m n - n) • (z - x) ^ n • g z) x
state_after: no goals

tactic: simp_rw [← mul_smul, ← pow_add, Nat.sub_add_cancel (Nat.le_max_left _ _),
  Nat.sub_add_cancel (Nat.le_max_right _ _), Pi.add_apply, smul_add]
state_before: 𝕜 : Type u_1
inst✝² : NontriviallyNormedField 𝕜
E : Type u_2
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
f g : 𝕜 → E
x : 𝕜
m : ℕ
hf : AnalyticAt 𝕜 (fun z => (z - x) ^ m • f z) x
n : ℕ
hg : AnalyticAt 𝕜 (fun z => (z - x) ^ n • g z) x
⊢ (fun z => (z - x) ^ max m n • (f + g) z) = fun z =>
    (z - x) ^ (max m n - m) • (z - x) ^ m • f z + (z - x) ^ (max m n - n) • (z - x) ^ n • g z
state_after: no goals