Theorem: exp_add_of_commute_of_mem_ball
File: Mathlib/Analysis/NormedSpace/Exponential.lean

tactic: rw [exp_eq_tsum,
  tsum_mul_tsum_eq_tsum_sum_antidiagonal_of_summable_norm
    (norm_expSeries_summable_of_mem_ball' x hx) (norm_expSeries_summable_of_mem_ball' y hy)]
state_before: 𝕂 : Type u_1
𝔸 : Type u_2
𝔹 : Type ?u.101113
inst✝⁶ : NontriviallyNormedField 𝕂
inst✝⁵ : NormedRing 𝔸
inst✝⁴ : NormedRing 𝔹
inst✝³ : NormedAlgebra 𝕂 𝔸
inst✝² : NormedAlgebra 𝕂 𝔹
inst✝¹ : CompleteSpace 𝔸
inst✝ : CharZero 𝕂
x y : 𝔸
hxy : Commute x y
hx : x ∈ EMetric.ball 0 (FormalMultilinearSeries.radius (expSeries 𝕂 𝔸))
hy : y ∈ EMetric.ball 0 (FormalMultilinearSeries.radius (expSeries 𝕂 𝔸))
⊢ exp 𝕂 (x + y) = exp 𝕂 x * exp 𝕂 y

tactic: dsimp only
state_before: 𝕂 : Type u_1
𝔸 : Type u_2
𝔹 : Type ?u.101113
inst✝⁶ : NontriviallyNormedField 𝕂
inst✝⁵ : NormedRing 𝔸
inst✝⁴ : NormedRing 𝔹
inst✝³ : NormedAlgebra 𝕂 𝔸
inst✝² : NormedAlgebra 𝕂 𝔹
inst✝¹ : CompleteSpace 𝔸
inst✝ : CharZero 𝕂
x y : 𝔸
hxy : Commute x y
hx : x ∈ EMetric.ball 0 (FormalMultilinearSeries.radius (expSeries 𝕂 𝔸))
hy : y ∈ EMetric.ball 0 (FormalMultilinearSeries.radius (expSeries 𝕂 𝔸))
⊢ (fun x => ∑' (n : ℕ), (↑n !)⁻¹ • x ^ n) (x + y) =
    ∑' (n : ℕ), ∑ kl in Finset.Nat.antidiagonal n, (↑kl.fst !)⁻¹ • x ^ kl.fst * (↑kl.snd !)⁻¹ • y ^ kl.snd

tactic: conv_lhs =>
  congr
  ext
  rw [hxy.add_pow' _, Finset.smul_sum]
state_before: 𝕂 : Type u_1
𝔸 : Type u_2
𝔹 : Type ?u.101113
inst✝⁶ : NontriviallyNormedField 𝕂
inst✝⁵ : NormedRing 𝔸
inst✝⁴ : NormedRing 𝔹
inst✝³ : NormedAlgebra 𝕂 𝔸
inst✝² : NormedAlgebra 𝕂 𝔹
inst✝¹ : CompleteSpace 𝔸
inst✝ : CharZero 𝕂
x y : 𝔸
hxy : Commute x y
hx : x ∈ EMetric.ball 0 (FormalMultilinearSeries.radius (expSeries 𝕂 𝔸))
hy : y ∈ EMetric.ball 0 (FormalMultilinearSeries.radius (expSeries 𝕂 𝔸))
⊢ (∑' (n : ℕ), (↑n !)⁻¹ • (x + y) ^ n) =
    ∑' (n : ℕ), ∑ kl in Finset.Nat.antidiagonal n, (↑kl.fst !)⁻¹ • x ^ kl.fst * (↑kl.snd !)⁻¹ • y ^ kl.snd

tactic: refine' tsum_congr fun n => Finset.sum_congr rfl fun kl hkl => _
state_before: 𝕂 : Type u_1
𝔸 : Type u_2
𝔹 : Type ?u.101113
inst✝⁶ : NontriviallyNormedField 𝕂
inst✝⁵ : NormedRing 𝔸
inst✝⁴ : NormedRing 𝔹
inst✝³ : NormedAlgebra 𝕂 𝔸
inst✝² : NormedAlgebra 𝕂 𝔹
inst✝¹ : CompleteSpace 𝔸
inst✝ : CharZero 𝕂
x y : 𝔸
hxy : Commute x y
hx : x ∈ EMetric.ball 0 (FormalMultilinearSeries.radius (expSeries 𝕂 𝔸))
hy : y ∈ EMetric.ball 0 (FormalMultilinearSeries.radius (expSeries 𝕂 𝔸))
⊢ (∑' (x_1 : ℕ),
      ∑ x_2 in Finset.Nat.antidiagonal x_1, (↑x_1 !)⁻¹ • Nat.choose x_1 x_2.fst • (x ^ x_2.fst * y ^ x_2.snd)) =
    ∑' (n : ℕ), ∑ kl in Finset.Nat.antidiagonal n, (↑kl.fst !)⁻¹ • x ^ kl.fst * (↑kl.snd !)⁻¹ • y ^ kl.snd

tactic: rw [nsmul_eq_smul_cast 𝕂, smul_smul, smul_mul_smul, ← Finset.Nat.mem_antidiagonal.mp hkl,
  Nat.cast_add_choose, Finset.Nat.mem_antidiagonal.mp hkl]
state_before: 𝕂 : Type u_1
𝔸 : Type u_2
𝔹 : Type ?u.101113
inst✝⁶ : NontriviallyNormedField 𝕂
inst✝⁵ : NormedRing 𝔸
inst✝⁴ : NormedRing 𝔹
inst✝³ : NormedAlgebra 𝕂 𝔸
inst✝² : NormedAlgebra 𝕂 𝔹
inst✝¹ : CompleteSpace 𝔸
inst✝ : CharZero 𝕂
x y : 𝔸
hxy : Commute x y
hx : x ∈ EMetric.ball 0 (FormalMultilinearSeries.radius (expSeries 𝕂 𝔸))
hy : y ∈ EMetric.ball 0 (FormalMultilinearSeries.radius (expSeries 𝕂 𝔸))
n : ℕ
kl : ℕ × ℕ
hkl : kl ∈ Finset.Nat.antidiagonal n
⊢ (↑n !)⁻¹ • Nat.choose n kl.fst • (x ^ kl.fst * y ^ kl.snd) = (↑kl.fst !)⁻¹ • x ^ kl.fst * (↑kl.snd !)⁻¹ • y ^ kl.snd

tactic: congr 1
state_before: 𝕂 : Type u_1
𝔸 : Type u_2
𝔹 : Type ?u.101113
inst✝⁶ : NontriviallyNormedField 𝕂
inst✝⁵ : NormedRing 𝔸
inst✝⁴ : NormedRing 𝔹
inst✝³ : NormedAlgebra 𝕂 𝔸
inst✝² : NormedAlgebra 𝕂 𝔹
inst✝¹ : CompleteSpace 𝔸
inst✝ : CharZero 𝕂
x y : 𝔸
hxy : Commute x y
hx : x ∈ EMetric.ball 0 (FormalMultilinearSeries.radius (expSeries 𝕂 𝔸))
hy : y ∈ EMetric.ball 0 (FormalMultilinearSeries.radius (expSeries 𝕂 𝔸))
n : ℕ
kl : ℕ × ℕ
hkl : kl ∈ Finset.Nat.antidiagonal n
⊢ ((↑n !)⁻¹ * (↑n ! / (↑kl.fst ! * ↑kl.snd !))) • (x ^ kl.fst * y ^ kl.snd) =
    ((↑kl.fst !)⁻¹ * (↑kl.snd !)⁻¹) • (x ^ kl.fst * y ^ kl.snd)

tactic: have : (n ! : 𝕂) ≠ 0 := Nat.cast_ne_zero.mpr n.factorial_ne_zero
state_before: case e_a
𝕂 : Type u_1
𝔸 : Type u_2
𝔹 : Type ?u.101113
inst✝⁶ : NontriviallyNormedField 𝕂
inst✝⁵ : NormedRing 𝔸
inst✝⁴ : NormedRing 𝔹
inst✝³ : NormedAlgebra 𝕂 𝔸
inst✝² : NormedAlgebra 𝕂 𝔹
inst✝¹ : CompleteSpace 𝔸
inst✝ : CharZero 𝕂
x y : 𝔸
hxy : Commute x y
hx : x ∈ EMetric.ball 0 (FormalMultilinearSeries.radius (expSeries 𝕂 𝔸))
hy : y ∈ EMetric.ball 0 (FormalMultilinearSeries.radius (expSeries 𝕂 𝔸))
n : ℕ
kl : ℕ × ℕ
hkl : kl ∈ Finset.Nat.antidiagonal n
⊢ (↑n !)⁻¹ * (↑n ! / (↑kl.fst ! * ↑kl.snd !)) = (↑kl.fst !)⁻¹ * (↑kl.snd !)⁻¹

tactic: field_simp [this]
state_before: case e_a
𝕂 : Type u_1
𝔸 : Type u_2
𝔹 : Type ?u.101113
inst✝⁶ : NontriviallyNormedField 𝕂
inst✝⁵ : NormedRing 𝔸
inst✝⁴ : NormedRing 𝔹
inst✝³ : NormedAlgebra 𝕂 𝔸
inst✝² : NormedAlgebra 𝕂 𝔹
inst✝¹ : CompleteSpace 𝔸
inst✝ : CharZero 𝕂
x y : 𝔸
hxy : Commute x y
hx : x ∈ EMetric.ball 0 (FormalMultilinearSeries.radius (expSeries 𝕂 𝔸))
hy : y ∈ EMetric.ball 0 (FormalMultilinearSeries.radius (expSeries 𝕂 𝔸))
n : ℕ
kl : ℕ × ℕ
hkl : kl ∈ Finset.Nat.antidiagonal n
this : ↑n ! ≠ 0
⊢ (↑n !)⁻¹ * (↑n ! / (↑kl.fst ! * ↑kl.snd !)) = (↑kl.fst !)⁻¹ * (↑kl.snd !)⁻¹