Theorem: Function.HasTemperateGrowth.clm_apply (ForML/HasTemperateGrowth.lean)

State before:
D : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : NormedAddCommGroup D
inst✝⁴ : NormedSpace ℝ D
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
f : D → E →L[ℝ] F
hf : HasTemperateGrowth f
g : D → E
hg : HasTemperateGrowth g
⊢ HasTemperateGrowth fun x => (f x) (g x)
Tactic:
refine ⟨hf.1.clm_apply hg.1, ?_⟩
State after:
D : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : NormedAddCommGroup D
inst✝⁴ : NormedSpace ℝ D
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
f : D → E →L[ℝ] F
hf : HasTemperateGrowth f
g : D → E
hg : HasTemperateGrowth g
⊢ ∀ (n : ℕ), ∃ k C, ∀ (x : D), ‖iteratedFDeriv ℝ n (fun x => (f x) (g x)) x‖ ≤ C * (1 + ‖x‖) ^ k

State before:
D : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : NormedAddCommGroup D
inst✝⁴ : NormedSpace ℝ D
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
f : D → E →L[ℝ] F
hf : HasTemperateGrowth f
g : D → E
hg : HasTemperateGrowth g
⊢ ∀ (n : ℕ), ∃ k C, ∀ (x : D), ‖iteratedFDeriv ℝ n (fun x => (f x) (g x)) x‖ ≤ C * (1 + ‖x‖) ^ k
Tactic:
intro n
State after:
D : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : NormedAddCommGroup D
inst✝⁴ : NormedSpace ℝ D
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
f : D → E →L[ℝ] F
hf : HasTemperateGrowth f
g : D → E
hg : HasTemperateGrowth g
n : ℕ
⊢ ∃ k C, ∀ (x : D), ‖iteratedFDeriv ℝ n (fun x => (f x) (g x)) x‖ ≤ C * (1 + ‖x‖) ^ k

State before:
D : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : NormedAddCommGroup D
inst✝⁴ : NormedSpace ℝ D
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
f : D → E →L[ℝ] F
hf : HasTemperateGrowth f
g : D → E
hg : HasTemperateGrowth g
n : ℕ
⊢ ∃ k C, ∀ (x : D), ‖iteratedFDeriv ℝ n (fun x => (f x) (g x)) x‖ ≤ C * (1 + ‖x‖) ^ k
Tactic:
have hf_bound := hf.bound_forall_range (n + 1)
State after:
D : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : NormedAddCommGroup D
inst✝⁴ : NormedSpace ℝ D
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
f : D → E →L[ℝ] F
hf : HasTemperateGrowth f
g : D → E
hg : HasTemperateGrowth g
n : ℕ
hf_bound : ∃ k C, 0 ≤ C ∧ ∀ i ∈ Finset.range (n + 1), ∀ (x : D), ‖iteratedFDeriv ℝ i f x‖ ≤ C * (1 + ‖x‖) ^ k
⊢ ∃ k C, ∀ (x : D), ‖iteratedFDeriv ℝ n (fun x => (f x) (g x)) x‖ ≤ C * (1 + ‖x‖) ^ k

State before:
D : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : NormedAddCommGroup D
inst✝⁴ : NormedSpace ℝ D
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
f : D → E →L[ℝ] F
hf : HasTemperateGrowth f
g : D → E
hg : HasTemperateGrowth g
n : ℕ
hf_bound : ∃ k C, 0 ≤ C ∧ ∀ i ∈ Finset.range (n + 1), ∀ (x : D), ‖iteratedFDeriv ℝ i f x‖ ≤ C * (1 + ‖x‖) ^ k
⊢ ∃ k C, ∀ (x : D), ‖iteratedFDeriv ℝ n (fun x => (f x) (g x)) x‖ ≤ C * (1 + ‖x‖) ^ k
Tactic:
have hg_bound := hg.bound_forall_range (n + 1)
State after:
D : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : NormedAddCommGroup D
inst✝⁴ : NormedSpace ℝ D
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
f : D → E →L[ℝ] F
hf : HasTemperateGrowth f
g : D → E
hg : HasTemperateGrowth g
n : ℕ
hf_bound : ∃ k C, 0 ≤ C ∧ ∀ i ∈ Finset.range (n + 1), ∀ (x : D), ‖iteratedFDeriv ℝ i f x‖ ≤ C * (1 + ‖x‖) ^ k
hg_bound : ∃ k C, 0 ≤ C ∧ ∀ i ∈ Finset.range (n + 1), ∀ (x : D), ‖iteratedFDeriv ℝ i g x‖ ≤ C * (1 + ‖x‖) ^ k
⊢ ∃ k C, ∀ (x : D), ‖iteratedFDeriv ℝ n (fun x => (f x) (g x)) x‖ ≤ C * (1 + ‖x‖) ^ k

State before:
D : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : NormedAddCommGroup D
inst✝⁴ : NormedSpace ℝ D
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
f : D → E →L[ℝ] F
hf : HasTemperateGrowth f
g : D → E
hg : HasTemperateGrowth g
n : ℕ
hf_bound : ∃ k C, 0 ≤ C ∧ ∀ i ∈ Finset.range (n + 1), ∀ (x : D), ‖iteratedFDeriv ℝ i f x‖ ≤ C * (1 + ‖x‖) ^ k
hg_bound : ∃ k C, 0 ≤ C ∧ ∀ i ∈ Finset.range (n + 1), ∀ (x : D), ‖iteratedFDeriv ℝ i g x‖ ≤ C * (1 + ‖x‖) ^ k
⊢ ∃ k C, ∀ (x : D), ‖iteratedFDeriv ℝ n (fun x => (f x) (g x)) x‖ ≤ C * (1 + ‖x‖) ^ k
Tactic:
rcases hf_bound with ⟨k_f, C_f, ⟨hC_f_nonneg, hC_f⟩⟩
State after:
case intro.intro.intro
D : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : NormedAddCommGroup D
inst✝⁴ : NormedSpace ℝ D
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
f : D → E →L[ℝ] F
hf : HasTemperateGrowth f
g : D → E
hg : HasTemperateGrowth g
n : ℕ
hg_bound : ∃ k C, 0 ≤ C ∧ ∀ i ∈ Finset.range (n + 1), ∀ (x : D), ‖iteratedFDeriv ℝ i g x‖ ≤ C * (1 + ‖x‖) ^ k
k_f : ℕ
C_f : ℝ
hC_f_nonneg : 0 ≤ C_f
hC_f : ∀ i ∈ Finset.range (n + 1), ∀ (x : D), ‖iteratedFDeriv ℝ i f x‖ ≤ C_f * (1 + ‖x‖) ^ k_f
⊢ ∃ k C, ∀ (x : D), ‖iteratedFDeriv ℝ n (fun x => (f x) (g x)) x‖ ≤ C * (1 + ‖x‖) ^ k

State before:
case intro.intro.intro
D : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : NormedAddCommGroup D
inst✝⁴ : NormedSpace ℝ D
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
f : D → E →L[ℝ] F
hf : HasTemperateGrowth f
g : D → E
hg : HasTemperateGrowth g
n : ℕ
hg_bound : ∃ k C, 0 ≤ C ∧ ∀ i ∈ Finset.range (n + 1), ∀ (x : D), ‖iteratedFDeriv ℝ i g x‖ ≤ C * (1 + ‖x‖) ^ k
k_f : ℕ
C_f : ℝ
hC_f_nonneg : 0 ≤ C_f
hC_f : ∀ i ∈ Finset.range (n + 1), ∀ (x : D), ‖iteratedFDeriv ℝ i f x‖ ≤ C_f * (1 + ‖x‖) ^ k_f
⊢ ∃ k C, ∀ (x : D), ‖iteratedFDeriv ℝ n (fun x => (f x) (g x)) x‖ ≤ C * (1 + ‖x‖) ^ k
Tactic:
rcases hg_bound with ⟨k_g, C_g, ⟨_, hC_g⟩⟩
State after:
case intro.intro.intro.intro.intro.intro
D : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : NormedAddCommGroup D
inst✝⁴ : NormedSpace ℝ D
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
f : D → E →L[ℝ] F
hf : HasTemperateGrowth f
g : D → E
hg : HasTemperateGrowth g
n k_f : ℕ
C_f : ℝ
hC_f_nonneg : 0 ≤ C_f
hC_f : ∀ i ∈ Finset.range (n + 1), ∀ (x : D), ‖iteratedFDeriv ℝ i f x‖ ≤ C_f * (1 + ‖x‖) ^ k_f
k_g : ℕ
C_g : ℝ
left✝ : 0 ≤ C_g
hC_g : ∀ i ∈ Finset.range (n + 1), ∀ (x : D), ‖iteratedFDeriv ℝ i g x‖ ≤ C_g * (1 + ‖x‖) ^ k_g
⊢ ∃ k C, ∀ (x : D), ‖iteratedFDeriv ℝ n (fun x => (f x) (g x)) x‖ ≤ C * (1 + ‖x‖) ^ k

State before:
case intro.intro.intro.intro.intro.intro
D : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : NormedAddCommGroup D
inst✝⁴ : NormedSpace ℝ D
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
f : D → E →L[ℝ] F
hf : HasTemperateGrowth f
g : D → E
hg : HasTemperateGrowth g
n k_f : ℕ
C_f : ℝ
hC_f_nonneg : 0 ≤ C_f
hC_f : ∀ i ∈ Finset.range (n + 1), ∀ (x : D), ‖iteratedFDeriv ℝ i f x‖ ≤ C_f * (1 + ‖x‖) ^ k_f
k_g : ℕ
C_g : ℝ
left✝ : 0 ≤ C_g
hC_g : ∀ i ∈ Finset.range (n + 1), ∀ (x : D), ‖iteratedFDeriv ℝ i g x‖ ≤ C_g * (1 + ‖x‖) ^ k_g
⊢ ∃ k C, ∀ (x : D), ‖iteratedFDeriv ℝ n (fun x => (f x) (g x)) x‖ ≤ C * (1 + ‖x‖) ^ k
Tactic:
use k_f + k_g
State after:
case h
D : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : NormedAddCommGroup D
inst✝⁴ : NormedSpace ℝ D
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
f : D → E →L[ℝ] F
hf : HasTemperateGrowth f
g : D → E
hg : HasTemperateGrowth g
n k_f : ℕ
C_f : ℝ
hC_f_nonneg : 0 ≤ C_f
hC_f : ∀ i ∈ Finset.range (n + 1), ∀ (x : D), ‖iteratedFDeriv ℝ i f x‖ ≤ C_f * (1 + ‖x‖) ^ k_f
k_g : ℕ
C_g : ℝ
left✝ : 0 ≤ C_g
hC_g : ∀ i ∈ Finset.range (n + 1), ∀ (x : D), ‖iteratedFDeriv ℝ i g x‖ ≤ C_g * (1 + ‖x‖) ^ k_g
⊢ ∃ C, ∀ (x : D), ‖iteratedFDeriv ℝ n (fun x => (f x) (g x)) x‖ ≤ C * (1 + ‖x‖) ^ (k_f + k_g)

State before:
case h
D : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : NormedAddCommGroup D
inst✝⁴ : NormedSpace ℝ D
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
f : D → E →L[ℝ] F
hf : HasTemperateGrowth f
g : D → E
hg : HasTemperateGrowth g
n k_f : ℕ
C_f : ℝ
hC_f_nonneg : 0 ≤ C_f
hC_f : ∀ i ∈ Finset.range (n + 1), ∀ (x : D), ‖iteratedFDeriv ℝ i f x‖ ≤ C_f * (1 + ‖x‖) ^ k_f
k_g : ℕ
C_g : ℝ
left✝ : 0 ≤ C_g
hC_g : ∀ i ∈ Finset.range (n + 1), ∀ (x : D), ‖iteratedFDeriv ℝ i g x‖ ≤ C_g * (1 + ‖x‖) ^ k_g
⊢ ∃ C, ∀ (x : D), ‖iteratedFDeriv ℝ n (fun x => (f x) (g x)) x‖ ≤ C * (1 + ‖x‖) ^ (k_f + k_g)
Tactic:
use 2 ^ n * C_f * C_g
State after:
case h
D : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : NormedAddCommGroup D
inst✝⁴ : NormedSpace ℝ D
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
f : D → E →L[ℝ] F
hf : HasTemperateGrowth f
g : D → E
hg : HasTemperateGrowth g
n k_f : ℕ
C_f : ℝ
hC_f_nonneg : 0 ≤ C_f
hC_f : ∀ i ∈ Finset.range (n + 1), ∀ (x : D), ‖iteratedFDeriv ℝ i f x‖ ≤ C_f * (1 + ‖x‖) ^ k_f
k_g : ℕ
C_g : ℝ
left✝ : 0 ≤ C_g
hC_g : ∀ i ∈ Finset.range (n + 1), ∀ (x : D), ‖iteratedFDeriv ℝ i g x‖ ≤ C_g * (1 + ‖x‖) ^ k_g
⊢ ∀ (x : D), ‖iteratedFDeriv ℝ n (fun x => (f x) (g x)) x‖ ≤ ↑(2 ^ n) * C_f * C_g * (1 + ‖x‖) ^ (k_f + k_g)

State before:
case h
D : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : NormedAddCommGroup D
inst✝⁴ : NormedSpace ℝ D
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
f : D → E →L[ℝ] F
hf : HasTemperateGrowth f
g : D → E
hg : HasTemperateGrowth g
n k_f : ℕ
C_f : ℝ
hC_f_nonneg : 0 ≤ C_f
hC_f : ∀ i ∈ Finset.range (n + 1), ∀ (x : D), ‖iteratedFDeriv ℝ i f x‖ ≤ C_f * (1 + ‖x‖) ^ k_f
k_g : ℕ
C_g : ℝ
left✝ : 0 ≤ C_g
hC_g : ∀ i ∈ Finset.range (n + 1), ∀ (x : D), ‖iteratedFDeriv ℝ i g x‖ ≤ C_g * (1 + ‖x‖) ^ k_g
⊢ ∀ (x : D), ‖iteratedFDeriv ℝ n (fun x => (f x) (g x)) x‖ ≤ ↑(2 ^ n) * C_f * C_g * (1 + ‖x‖) ^ (k_f + k_g)
Tactic:
intro x
State after:
case h
D : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : NormedAddCommGroup D
inst✝⁴ : NormedSpace ℝ D
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
f : D → E →L[ℝ] F
hf : HasTemperateGrowth f
g : D → E
hg : HasTemperateGrowth g
n k_f : ℕ
C_f : ℝ
hC_f_nonneg : 0 ≤ C_f
hC_f : ∀ i ∈ Finset.range (n + 1), ∀ (x : D), ‖iteratedFDeriv ℝ i f x‖ ≤ C_f * (1 + ‖x‖) ^ k_f
k_g : ℕ
C_g : ℝ
left✝ : 0 ≤ C_g
hC_g : ∀ i ∈ Finset.range (n + 1), ∀ (x : D), ‖iteratedFDeriv ℝ i g x‖ ≤ C_g * (1 + ‖x‖) ^ k_g
x : D
⊢ ‖iteratedFDeriv ℝ n (fun x => (f x) (g x)) x‖ ≤ ↑(2 ^ n) * C_f * C_g * (1 + ‖x‖) ^ (k_f + k_g)

State before:
case h
D : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : NormedAddCommGroup D
inst✝⁴ : NormedSpace ℝ D
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
f : D → E →L[ℝ] F
hf : HasTemperateGrowth f
g : D → E
hg : HasTemperateGrowth g
n k_f : ℕ
C_f : ℝ
hC_f_nonneg : 0 ≤ C_f
hC_f : ∀ i ∈ Finset.range (n + 1), ∀ (x : D), ‖iteratedFDeriv ℝ i f x‖ ≤ C_f * (1 + ‖x‖) ^ k_f
k_g : ℕ
C_g : ℝ
left✝ : 0 ≤ C_g
hC_g : ∀ i ∈ Finset.range (n + 1), ∀ (x : D), ‖iteratedFDeriv ℝ i g x‖ ≤ C_g * (1 + ‖x‖) ^ k_g
x : D
⊢ ‖iteratedFDeriv ℝ n (fun x => (f x) (g x)) x‖ ≤ ↑(2 ^ n) * C_f * C_g * (1 + ‖x‖) ^ (k_f + k_g)
Tactic:
refine le_trans (norm_iteratedFDeriv_clm_apply hf.1 hg.1 _ le_top) ?_
State after:
case h
D : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : NormedAddCommGroup D
inst✝⁴ : NormedSpace ℝ D
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
f : D → E →L[ℝ] F
hf : HasTemperateGrowth f
g : D → E
hg : HasTemperateGrowth g
n k_f : ℕ
C_f : ℝ
hC_f_nonneg : 0 ≤ C_f
hC_f : ∀ i ∈ Finset.range (n + 1), ∀ (x : D), ‖iteratedFDeriv ℝ i f x‖ ≤ C_f * (1 + ‖x‖) ^ k_f
k_g : ℕ
C_g : ℝ
left✝ : 0 ≤ C_g
hC_g : ∀ i ∈ Finset.range (n + 1), ∀ (x : D), ‖iteratedFDeriv ℝ i g x‖ ≤ C_g * (1 + ‖x‖) ^ k_g
x : D
⊢ ∑ i in Finset.range (n + 1), ↑(Nat.choose n i) * ‖iteratedFDeriv ℝ i f x‖ * ‖iteratedFDeriv ℝ (n - i) g x‖ ≤
    ↑(2 ^ n) * C_f * C_g * (1 + ‖x‖) ^ (k_f + k_g)

State before:
case h
D : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : NormedAddCommGroup D
inst✝⁴ : NormedSpace ℝ D
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
f : D → E →L[ℝ] F
hf : HasTemperateGrowth f
g : D → E
hg : HasTemperateGrowth g
n k_f : ℕ
C_f : ℝ
hC_f_nonneg : 0 ≤ C_f
hC_f : ∀ i ∈ Finset.range (n + 1), ∀ (x : D), ‖iteratedFDeriv ℝ i f x‖ ≤ C_f * (1 + ‖x‖) ^ k_f
k_g : ℕ
C_g : ℝ
left✝ : 0 ≤ C_g
hC_g : ∀ i ∈ Finset.range (n + 1), ∀ (x : D), ‖iteratedFDeriv ℝ i g x‖ ≤ C_g * (1 + ‖x‖) ^ k_g
x : D
⊢ ∑ i in Finset.range (n + 1), ↑(Nat.choose n i) * ‖iteratedFDeriv ℝ i f x‖ * ‖iteratedFDeriv ℝ (n - i) g x‖ ≤
    ↑(2 ^ n) * C_f * C_g * (1 + ‖x‖) ^ (k_f + k_g)
Tactic:
simp [mul_assoc]
State after:
case h
D : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : NormedAddCommGroup D
inst✝⁴ : NormedSpace ℝ D
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
f : D → E →L[ℝ] F
hf : HasTemperateGrowth f
g : D → E
hg : HasTemperateGrowth g
n k_f : ℕ
C_f : ℝ
hC_f_nonneg : 0 ≤ C_f
hC_f : ∀ i ∈ Finset.range (n + 1), ∀ (x : D), ‖iteratedFDeriv ℝ i f x‖ ≤ C_f * (1 + ‖x‖) ^ k_f
k_g : ℕ
C_g : ℝ
left✝ : 0 ≤ C_g
hC_g : ∀ i ∈ Finset.range (n + 1), ∀ (x : D), ‖iteratedFDeriv ℝ i g x‖ ≤ C_g * (1 + ‖x‖) ^ k_g
x : D
⊢ ∑ x_1 in Finset.range (n + 1), ↑(Nat.choose n x_1) * (‖iteratedFDeriv ℝ x_1 f x‖ * ‖iteratedFDeriv ℝ (n - x_1) g x‖) ≤
    2 ^ n * (C_f * (C_g * (1 + ‖x‖) ^ (k_f + k_g)))

State before:
case h
D : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : NormedAddCommGroup D
inst✝⁴ : NormedSpace ℝ D
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
f : D → E →L[ℝ] F
hf : HasTemperateGrowth f
g : D → E
hg : HasTemperateGrowth g
n k_f : ℕ
C_f : ℝ
hC_f_nonneg : 0 ≤ C_f
hC_f : ∀ i ∈ Finset.range (n + 1), ∀ (x : D), ‖iteratedFDeriv ℝ i f x‖ ≤ C_f * (1 + ‖x‖) ^ k_f
k_g : ℕ
C_g : ℝ
left✝ : 0 ≤ C_g
hC_g : ∀ i ∈ Finset.range (n + 1), ∀ (x : D), ‖iteratedFDeriv ℝ i g x‖ ≤ C_g * (1 + ‖x‖) ^ k_g
x : D
⊢ ∑ x_1 in Finset.range (n + 1), ↑(Nat.choose n x_1) * (‖iteratedFDeriv ℝ x_1 f x‖ * ‖iteratedFDeriv ℝ (n - x_1) g x‖) ≤
    2 ^ n * (C_f * (C_g * (1 + ‖x‖) ^ (k_f + k_g)))
Tactic:
norm_cast
State after:
case h
D : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : NormedAddCommGroup D
inst✝⁴ : NormedSpace ℝ D
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
f : D → E →L[ℝ] F
hf : HasTemperateGrowth f
g : D → E
hg : HasTemperateGrowth g
n k_f : ℕ
C_f : ℝ
hC_f_nonneg : 0 ≤ C_f
hC_f : ∀ i ∈ Finset.range (n + 1), ∀ (x : D), ‖iteratedFDeriv ℝ i f x‖ ≤ C_f * (1 + ‖x‖) ^ k_f
k_g : ℕ
C_g : ℝ
left✝ : 0 ≤ C_g
hC_g : ∀ i ∈ Finset.range (n + 1), ∀ (x : D), ‖iteratedFDeriv ℝ i g x‖ ≤ C_g * (1 + ‖x‖) ^ k_g
x : D
⊢ ∑ x_1 in Finset.range (n + 1), ↑(Nat.choose n x_1) * (‖iteratedFDeriv ℝ x_1 f x‖ * ‖iteratedFDeriv ℝ (n - x_1) g x‖) ≤
    ↑(2 ^ n) * (C_f * (C_g * (1 + ‖x‖) ^ (k_f + k_g)))

State before:
case h
D : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : NormedAddCommGroup D
inst✝⁴ : NormedSpace ℝ D
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
f : D → E →L[ℝ] F
hf : HasTemperateGrowth f
g : D → E
hg : HasTemperateGrowth g
n k_f : ℕ
C_f : ℝ
hC_f_nonneg : 0 ≤ C_f
hC_f : ∀ i ∈ Finset.range (n + 1), ∀ (x : D), ‖iteratedFDeriv ℝ i f x‖ ≤ C_f * (1 + ‖x‖) ^ k_f
k_g : ℕ
C_g : ℝ
left✝ : 0 ≤ C_g
hC_g : ∀ i ∈ Finset.range (n + 1), ∀ (x : D), ‖iteratedFDeriv ℝ i g x‖ ≤ C_g * (1 + ‖x‖) ^ k_g
x : D
⊢ ∑ x_1 in Finset.range (n + 1), ↑(Nat.choose n x_1) * (‖iteratedFDeriv ℝ x_1 f x‖ * ‖iteratedFDeriv ℝ (n - x_1) g x‖) ≤
    ↑(2 ^ n) * (C_f * (C_g * (1 + ‖x‖) ^ (k_f + k_g)))
Tactic:
refine Finset.sum_range_choose_mul_le_pow_two_mul_real ?_
State after:
case h
D : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : NormedAddCommGroup D
inst✝⁴ : NormedSpace ℝ D
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
f : D → E →L[ℝ] F
hf : HasTemperateGrowth f
g : D → E
hg : HasTemperateGrowth g
n k_f : ℕ
C_f : ℝ
hC_f_nonneg : 0 ≤ C_f
hC_f : ∀ i ∈ Finset.range (n + 1), ∀ (x : D), ‖iteratedFDeriv ℝ i f x‖ ≤ C_f * (1 + ‖x‖) ^ k_f
k_g : ℕ
C_g : ℝ
left✝ : 0 ≤ C_g
hC_g : ∀ i ∈ Finset.range (n + 1), ∀ (x : D), ‖iteratedFDeriv ℝ i g x‖ ≤ C_g * (1 + ‖x‖) ^ k_g
x : D
⊢ ∀ i ∈ Finset.range (n + 1),
    ‖iteratedFDeriv ℝ i f x‖ * ‖iteratedFDeriv ℝ (n - i) g x‖ ≤ C_f * (C_g * (1 + ‖x‖) ^ (k_f + k_g))

State before:
case h
D : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : NormedAddCommGroup D
inst✝⁴ : NormedSpace ℝ D
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
f : D → E →L[ℝ] F
hf : HasTemperateGrowth f
g : D → E
hg : HasTemperateGrowth g
n k_f : ℕ
C_f : ℝ
hC_f_nonneg : 0 ≤ C_f
hC_f : ∀ i ∈ Finset.range (n + 1), ∀ (x : D), ‖iteratedFDeriv ℝ i f x‖ ≤ C_f * (1 + ‖x‖) ^ k_f
k_g : ℕ
C_g : ℝ
left✝ : 0 ≤ C_g
hC_g : ∀ i ∈ Finset.range (n + 1), ∀ (x : D), ‖iteratedFDeriv ℝ i g x‖ ≤ C_g * (1 + ‖x‖) ^ k_g
x : D
⊢ ∀ i ∈ Finset.range (n + 1),
    ‖iteratedFDeriv ℝ i f x‖ * ‖iteratedFDeriv ℝ (n - i) g x‖ ≤ C_f * (C_g * (1 + ‖x‖) ^ (k_f + k_g))
Tactic:
intro i hi
State after:
case h
D : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : NormedAddCommGroup D
inst✝⁴ : NormedSpace ℝ D
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
f : D → E →L[ℝ] F
hf : HasTemperateGrowth f
g : D → E
hg : HasTemperateGrowth g
n k_f : ℕ
C_f : ℝ
hC_f_nonneg : 0 ≤ C_f
hC_f : ∀ i ∈ Finset.range (n + 1), ∀ (x : D), ‖iteratedFDeriv ℝ i f x‖ ≤ C_f * (1 + ‖x‖) ^ k_f
k_g : ℕ
C_g : ℝ
left✝ : 0 ≤ C_g
hC_g : ∀ i ∈ Finset.range (n + 1), ∀ (x : D), ‖iteratedFDeriv ℝ i g x‖ ≤ C_g * (1 + ‖x‖) ^ k_g
x : D
i : ℕ
hi : i ∈ Finset.range (n + 1)
⊢ ‖iteratedFDeriv ℝ i f x‖ * ‖iteratedFDeriv ℝ (n - i) g x‖ ≤ C_f * (C_g * (1 + ‖x‖) ^ (k_f + k_g))

State before:
case h
D : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : NormedAddCommGroup D
inst✝⁴ : NormedSpace ℝ D
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
f : D → E →L[ℝ] F
hf : HasTemperateGrowth f
g : D → E
hg : HasTemperateGrowth g
n k_f : ℕ
C_f : ℝ
hC_f_nonneg : 0 ≤ C_f
hC_f : ∀ i ∈ Finset.range (n + 1), ∀ (x : D), ‖iteratedFDeriv ℝ i f x‖ ≤ C_f * (1 + ‖x‖) ^ k_f
k_g : ℕ
C_g : ℝ
left✝ : 0 ≤ C_g
hC_g : ∀ i ∈ Finset.range (n + 1), ∀ (x : D), ‖iteratedFDeriv ℝ i g x‖ ≤ C_g * (1 + ‖x‖) ^ k_g
x : D
i : ℕ
hi : i ∈ Finset.range (n + 1)
⊢ ‖iteratedFDeriv ℝ i f x‖ * ‖iteratedFDeriv ℝ (n - i) g x‖ ≤ C_f * (C_g * (1 + ‖x‖) ^ (k_f + k_g))
Tactic:
refine le_trans (mul_le_mul (hC_f i hi x) (hC_g (n - i) ?_ x) (norm_nonneg _) ?_) ?_
State after:
case h.refine_1
D : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : NormedAddCommGroup D
inst✝⁴ : NormedSpace ℝ D
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
f : D → E →L[ℝ] F
hf : HasTemperateGrowth f
g : D → E
hg : HasTemperateGrowth g
n k_f : ℕ
C_f : ℝ
hC_f_nonneg : 0 ≤ C_f
hC_f : ∀ i ∈ Finset.range (n + 1), ∀ (x : D), ‖iteratedFDeriv ℝ i f x‖ ≤ C_f * (1 + ‖x‖) ^ k_f
k_g : ℕ
C_g : ℝ
left✝ : 0 ≤ C_g
hC_g : ∀ i ∈ Finset.range (n + 1), ∀ (x : D), ‖iteratedFDeriv ℝ i g x‖ ≤ C_g * (1 + ‖x‖) ^ k_g
x : D
i : ℕ
hi : i ∈ Finset.range (n + 1)
⊢ n - i ∈ Finset.range (n + 1)

case h.refine_2
D : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : NormedAddCommGroup D
inst✝⁴ : NormedSpace ℝ D
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
f : D → E →L[ℝ] F
hf : HasTemperateGrowth f
g : D → E
hg : HasTemperateGrowth g
n k_f : ℕ
C_f : ℝ
hC_f_nonneg : 0 ≤ C_f
hC_f : ∀ i ∈ Finset.range (n + 1), ∀ (x : D), ‖iteratedFDeriv ℝ i f x‖ ≤ C_f * (1 + ‖x‖) ^ k_f
k_g : ℕ
C_g : ℝ
left✝ : 0 ≤ C_g
hC_g : ∀ i ∈ Finset.range (n + 1), ∀ (x : D), ‖iteratedFDeriv ℝ i g x‖ ≤ C_g * (1 + ‖x‖) ^ k_g
x : D
i : ℕ
hi : i ∈ Finset.range (n + 1)
⊢ 0 ≤ C_f * (1 + ‖x‖) ^ k_f

case h.refine_3
D : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : NormedAddCommGroup D
inst✝⁴ : NormedSpace ℝ D
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
f : D → E →L[ℝ] F
hf : HasTemperateGrowth f
g : D → E
hg : HasTemperateGrowth g
n k_f : ℕ
C_f : ℝ
hC_f_nonneg : 0 ≤ C_f
hC_f : ∀ i ∈ Finset.range (n + 1), ∀ (x : D), ‖iteratedFDeriv ℝ i f x‖ ≤ C_f * (1 + ‖x‖) ^ k_f
k_g : ℕ
C_g : ℝ
left✝ : 0 ≤ C_g
hC_g : ∀ i ∈ Finset.range (n + 1), ∀ (x : D), ‖iteratedFDeriv ℝ i g x‖ ≤ C_g * (1 + ‖x‖) ^ k_g
x : D
i : ℕ
hi : i ∈ Finset.range (n + 1)
⊢ C_f * (1 + ‖x‖) ^ k_f * (C_g * (1 + ‖x‖) ^ k_g) ≤ C_f * (C_g * (1 + ‖x‖) ^ (k_f + k_g))

State before:
case h.refine_1
D : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : NormedAddCommGroup D
inst✝⁴ : NormedSpace ℝ D
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
f : D → E →L[ℝ] F
hf : HasTemperateGrowth f
g : D → E
hg : HasTemperateGrowth g
n k_f : ℕ
C_f : ℝ
hC_f_nonneg : 0 ≤ C_f
hC_f : ∀ i ∈ Finset.range (n + 1), ∀ (x : D), ‖iteratedFDeriv ℝ i f x‖ ≤ C_f * (1 + ‖x‖) ^ k_f
k_g : ℕ
C_g : ℝ
left✝ : 0 ≤ C_g
hC_g : ∀ i ∈ Finset.range (n + 1), ∀ (x : D), ‖iteratedFDeriv ℝ i g x‖ ≤ C_g * (1 + ‖x‖) ^ k_g
x : D
i : ℕ
hi : i ∈ Finset.range (n + 1)
⊢ n - i ∈ Finset.range (n + 1)

case h.refine_2
D : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : NormedAddCommGroup D
inst✝⁴ : NormedSpace ℝ D
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
f : D → E →L[ℝ] F
hf : HasTemperateGrowth f
g : D → E
hg : HasTemperateGrowth g
n k_f : ℕ
C_f : ℝ
hC_f_nonneg : 0 ≤ C_f
hC_f : ∀ i ∈ Finset.range (n + 1), ∀ (x : D), ‖iteratedFDeriv ℝ i f x‖ ≤ C_f * (1 + ‖x‖) ^ k_f
k_g : ℕ
C_g : ℝ
left✝ : 0 ≤ C_g
hC_g : ∀ i ∈ Finset.range (n + 1), ∀ (x : D), ‖iteratedFDeriv ℝ i g x‖ ≤ C_g * (1 + ‖x‖) ^ k_g
x : D
i : ℕ
hi : i ∈ Finset.range (n + 1)
⊢ 0 ≤ C_f * (1 + ‖x‖) ^ k_f

case h.refine_3
D : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : NormedAddCommGroup D
inst✝⁴ : NormedSpace ℝ D
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
f : D → E →L[ℝ] F
hf : HasTemperateGrowth f
g : D → E
hg : HasTemperateGrowth g
n k_f : ℕ
C_f : ℝ
hC_f_nonneg : 0 ≤ C_f
hC_f : ∀ i ∈ Finset.range (n + 1), ∀ (x : D), ‖iteratedFDeriv ℝ i f x‖ ≤ C_f * (1 + ‖x‖) ^ k_f
k_g : ℕ
C_g : ℝ
left✝ : 0 ≤ C_g
hC_g : ∀ i ∈ Finset.range (n + 1), ∀ (x : D), ‖iteratedFDeriv ℝ i g x‖ ≤ C_g * (1 + ‖x‖) ^ k_g
x : D
i : ℕ
hi : i ∈ Finset.range (n + 1)
⊢ C_f * (1 + ‖x‖) ^ k_f * (C_g * (1 + ‖x‖) ^ k_g) ≤ C_f * (C_g * (1 + ‖x‖) ^ (k_f + k_g))
Tactic:
. simp
  exact Nat.sub_lt_succ n i
State after:
case h.refine_2
D : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : NormedAddCommGroup D
inst✝⁴ : NormedSpace ℝ D
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
f : D → E →L[ℝ] F
hf : HasTemperateGrowth f
g : D → E
hg : HasTemperateGrowth g
n k_f : ℕ
C_f : ℝ
hC_f_nonneg : 0 ≤ C_f
hC_f : ∀ i ∈ Finset.range (n + 1), ∀ (x : D), ‖iteratedFDeriv ℝ i f x‖ ≤ C_f * (1 + ‖x‖) ^ k_f
k_g : ℕ
C_g : ℝ
left✝ : 0 ≤ C_g
hC_g : ∀ i ∈ Finset.range (n + 1), ∀ (x : D), ‖iteratedFDeriv ℝ i g x‖ ≤ C_g * (1 + ‖x‖) ^ k_g
x : D
i : ℕ
hi : i ∈ Finset.range (n + 1)
⊢ 0 ≤ C_f * (1 + ‖x‖) ^ k_f

case h.refine_3
D : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : NormedAddCommGroup D
inst✝⁴ : NormedSpace ℝ D
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
f : D → E →L[ℝ] F
hf : HasTemperateGrowth f
g : D → E
hg : HasTemperateGrowth g
n k_f : ℕ
C_f : ℝ
hC_f_nonneg : 0 ≤ C_f
hC_f : ∀ i ∈ Finset.range (n + 1), ∀ (x : D), ‖iteratedFDeriv ℝ i f x‖ ≤ C_f * (1 + ‖x‖) ^ k_f
k_g : ℕ
C_g : ℝ
left✝ : 0 ≤ C_g
hC_g : ∀ i ∈ Finset.range (n + 1), ∀ (x : D), ‖iteratedFDeriv ℝ i g x‖ ≤ C_g * (1 + ‖x‖) ^ k_g
x : D
i : ℕ
hi : i ∈ Finset.range (n + 1)
⊢ C_f * (1 + ‖x‖) ^ k_f * (C_g * (1 + ‖x‖) ^ k_g) ≤ C_f * (C_g * (1 + ‖x‖) ^ (k_f + k_g))

State before:
case h.refine_2
D : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : NormedAddCommGroup D
inst✝⁴ : NormedSpace ℝ D
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
f : D → E →L[ℝ] F
hf : HasTemperateGrowth f
g : D → E
hg : HasTemperateGrowth g
n k_f : ℕ
C_f : ℝ
hC_f_nonneg : 0 ≤ C_f
hC_f : ∀ i ∈ Finset.range (n + 1), ∀ (x : D), ‖iteratedFDeriv ℝ i f x‖ ≤ C_f * (1 + ‖x‖) ^ k_f
k_g : ℕ
C_g : ℝ
left✝ : 0 ≤ C_g
hC_g : ∀ i ∈ Finset.range (n + 1), ∀ (x : D), ‖iteratedFDeriv ℝ i g x‖ ≤ C_g * (1 + ‖x‖) ^ k_g
x : D
i : ℕ
hi : i ∈ Finset.range (n + 1)
⊢ 0 ≤ C_f * (1 + ‖x‖) ^ k_f

case h.refine_3
D : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : NormedAddCommGroup D
inst✝⁴ : NormedSpace ℝ D
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
f : D → E →L[ℝ] F
hf : HasTemperateGrowth f
g : D → E
hg : HasTemperateGrowth g
n k_f : ℕ
C_f : ℝ
hC_f_nonneg : 0 ≤ C_f
hC_f : ∀ i ∈ Finset.range (n + 1), ∀ (x : D), ‖iteratedFDeriv ℝ i f x‖ ≤ C_f * (1 + ‖x‖) ^ k_f
k_g : ℕ
C_g : ℝ
left✝ : 0 ≤ C_g
hC_g : ∀ i ∈ Finset.range (n + 1), ∀ (x : D), ‖iteratedFDeriv ℝ i g x‖ ≤ C_g * (1 + ‖x‖) ^ k_g
x : D
i : ℕ
hi : i ∈ Finset.range (n + 1)
⊢ C_f * (1 + ‖x‖) ^ k_f * (C_g * (1 + ‖x‖) ^ k_g) ≤ C_f * (C_g * (1 + ‖x‖) ^ (k_f + k_g))
Tactic:
. simp [hC_f_nonneg]
State after:
case h.refine_3
D : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : NormedAddCommGroup D
inst✝⁴ : NormedSpace ℝ D
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
f : D → E →L[ℝ] F
hf : HasTemperateGrowth f
g : D → E
hg : HasTemperateGrowth g
n k_f : ℕ
C_f : ℝ
hC_f_nonneg : 0 ≤ C_f
hC_f : ∀ i ∈ Finset.range (n + 1), ∀ (x : D), ‖iteratedFDeriv ℝ i f x‖ ≤ C_f * (1 + ‖x‖) ^ k_f
k_g : ℕ
C_g : ℝ
left✝ : 0 ≤ C_g
hC_g : ∀ i ∈ Finset.range (n + 1), ∀ (x : D), ‖iteratedFDeriv ℝ i g x‖ ≤ C_g * (1 + ‖x‖) ^ k_g
x : D
i : ℕ
hi : i ∈ Finset.range (n + 1)
⊢ C_f * (1 + ‖x‖) ^ k_f * (C_g * (1 + ‖x‖) ^ k_g) ≤ C_f * (C_g * (1 + ‖x‖) ^ (k_f + k_g))

State before:
case h.refine_3
D : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : NormedAddCommGroup D
inst✝⁴ : NormedSpace ℝ D
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
f : D → E →L[ℝ] F
hf : HasTemperateGrowth f
g : D → E
hg : HasTemperateGrowth g
n k_f : ℕ
C_f : ℝ
hC_f_nonneg : 0 ≤ C_f
hC_f : ∀ i ∈ Finset.range (n + 1), ∀ (x : D), ‖iteratedFDeriv ℝ i f x‖ ≤ C_f * (1 + ‖x‖) ^ k_f
k_g : ℕ
C_g : ℝ
left✝ : 0 ≤ C_g
hC_g : ∀ i ∈ Finset.range (n + 1), ∀ (x : D), ‖iteratedFDeriv ℝ i g x‖ ≤ C_g * (1 + ‖x‖) ^ k_g
x : D
i : ℕ
hi : i ∈ Finset.range (n + 1)
⊢ C_f * (1 + ‖x‖) ^ k_f * (C_g * (1 + ‖x‖) ^ k_g) ≤ C_f * (C_g * (1 + ‖x‖) ^ (k_f + k_g))
Tactic:
refine le_of_eq ?_
State after:
case h.refine_3
D : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : NormedAddCommGroup D
inst✝⁴ : NormedSpace ℝ D
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
f : D → E →L[ℝ] F
hf : HasTemperateGrowth f
g : D → E
hg : HasTemperateGrowth g
n k_f : ℕ
C_f : ℝ
hC_f_nonneg : 0 ≤ C_f
hC_f : ∀ i ∈ Finset.range (n + 1), ∀ (x : D), ‖iteratedFDeriv ℝ i f x‖ ≤ C_f * (1 + ‖x‖) ^ k_f
k_g : ℕ
C_g : ℝ
left✝ : 0 ≤ C_g
hC_g : ∀ i ∈ Finset.range (n + 1), ∀ (x : D), ‖iteratedFDeriv ℝ i g x‖ ≤ C_g * (1 + ‖x‖) ^ k_g
x : D
i : ℕ
hi : i ∈ Finset.range (n + 1)
⊢ C_f * (1 + ‖x‖) ^ k_f * (C_g * (1 + ‖x‖) ^ k_g) = C_f * (C_g * (1 + ‖x‖) ^ (k_f + k_g))

State before:
case h.refine_3
D : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : NormedAddCommGroup D
inst✝⁴ : NormedSpace ℝ D
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
f : D → E →L[ℝ] F
hf : HasTemperateGrowth f
g : D → E
hg : HasTemperateGrowth g
n k_f : ℕ
C_f : ℝ
hC_f_nonneg : 0 ≤ C_f
hC_f : ∀ i ∈ Finset.range (n + 1), ∀ (x : D), ‖iteratedFDeriv ℝ i f x‖ ≤ C_f * (1 + ‖x‖) ^ k_f
k_g : ℕ
C_g : ℝ
left✝ : 0 ≤ C_g
hC_g : ∀ i ∈ Finset.range (n + 1), ∀ (x : D), ‖iteratedFDeriv ℝ i g x‖ ≤ C_g * (1 + ‖x‖) ^ k_g
x : D
i : ℕ
hi : i ∈ Finset.range (n + 1)
⊢ C_f * (1 + ‖x‖) ^ k_f * (C_g * (1 + ‖x‖) ^ k_g) = C_f * (C_g * (1 + ‖x‖) ^ (k_f + k_g))
Tactic:
ring_nf
State after:
no goals

State before:
case h.refine_1
D : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : NormedAddCommGroup D
inst✝⁴ : NormedSpace ℝ D
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
f : D → E →L[ℝ] F
hf : HasTemperateGrowth f
g : D → E
hg : HasTemperateGrowth g
n k_f : ℕ
C_f : ℝ
hC_f_nonneg : 0 ≤ C_f
hC_f : ∀ i ∈ Finset.range (n + 1), ∀ (x : D), ‖iteratedFDeriv ℝ i f x‖ ≤ C_f * (1 + ‖x‖) ^ k_f
k_g : ℕ
C_g : ℝ
left✝ : 0 ≤ C_g
hC_g : ∀ i ∈ Finset.range (n + 1), ∀ (x : D), ‖iteratedFDeriv ℝ i g x‖ ≤ C_g * (1 + ‖x‖) ^ k_g
x : D
i : ℕ
hi : i ∈ Finset.range (n + 1)
⊢ n - i ∈ Finset.range (n + 1)
Tactic:
simp
State after:
case h.refine_1
D : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : NormedAddCommGroup D
inst✝⁴ : NormedSpace ℝ D
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
f : D → E →L[ℝ] F
hf : HasTemperateGrowth f
g : D → E
hg : HasTemperateGrowth g
n k_f : ℕ
C_f : ℝ
hC_f_nonneg : 0 ≤ C_f
hC_f : ∀ i ∈ Finset.range (n + 1), ∀ (x : D), ‖iteratedFDeriv ℝ i f x‖ ≤ C_f * (1 + ‖x‖) ^ k_f
k_g : ℕ
C_g : ℝ
left✝ : 0 ≤ C_g
hC_g : ∀ i ∈ Finset.range (n + 1), ∀ (x : D), ‖iteratedFDeriv ℝ i g x‖ ≤ C_g * (1 + ‖x‖) ^ k_g
x : D
i : ℕ
hi : i ∈ Finset.range (n + 1)
⊢ n - i < n + 1

State before:
case h.refine_1
D : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : NormedAddCommGroup D
inst✝⁴ : NormedSpace ℝ D
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
f : D → E →L[ℝ] F
hf : HasTemperateGrowth f
g : D → E
hg : HasTemperateGrowth g
n k_f : ℕ
C_f : ℝ
hC_f_nonneg : 0 ≤ C_f
hC_f : ∀ i ∈ Finset.range (n + 1), ∀ (x : D), ‖iteratedFDeriv ℝ i f x‖ ≤ C_f * (1 + ‖x‖) ^ k_f
k_g : ℕ
C_g : ℝ
left✝ : 0 ≤ C_g
hC_g : ∀ i ∈ Finset.range (n + 1), ∀ (x : D), ‖iteratedFDeriv ℝ i g x‖ ≤ C_g * (1 + ‖x‖) ^ k_g
x : D
i : ℕ
hi : i ∈ Finset.range (n + 1)
⊢ n - i < n + 1
Tactic:
exact Nat.sub_lt_succ n i
State after:
no goals

State before:
case h.refine_2
D : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : NormedAddCommGroup D
inst✝⁴ : NormedSpace ℝ D
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
f : D → E →L[ℝ] F
hf : HasTemperateGrowth f
g : D → E
hg : HasTemperateGrowth g
n k_f : ℕ
C_f : ℝ
hC_f_nonneg : 0 ≤ C_f
hC_f : ∀ i ∈ Finset.range (n + 1), ∀ (x : D), ‖iteratedFDeriv ℝ i f x‖ ≤ C_f * (1 + ‖x‖) ^ k_f
k_g : ℕ
C_g : ℝ
left✝ : 0 ≤ C_g
hC_g : ∀ i ∈ Finset.range (n + 1), ∀ (x : D), ‖iteratedFDeriv ℝ i g x‖ ≤ C_g * (1 + ‖x‖) ^ k_g
x : D
i : ℕ
hi : i ∈ Finset.range (n + 1)
⊢ 0 ≤ C_f * (1 + ‖x‖) ^ k_f
Tactic:
simp [hC_f_nonneg]
State after:
no goals