Theorem: hasFDerivAt_update
File: Mathlib/Analysis/Calculus/FDeriv/Pi.lean

Proof steps:
state_before: 𝕜 : Type u_1
ι : Type u_2
inst✝⁶ : DecidableEq ι
inst✝⁵ : Fintype ι
inst✝⁴ : NontriviallyNormedField 𝕜
E : ι → Type u_3
inst✝³ : (i : ι) → NormedAddCommGroup (E i)
inst✝² : (i : ι) → NormedSpace 𝕜 (E i)
F : Type u_4
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace 𝕜 F
x : (i : ι) → E i
i : ι
y : E i
⊢ HasFDerivAt (Function.update x i) (ContinuousLinearMap.pi (Pi.single i (ContinuousLinearMap.id 𝕜 (E i)))) y
state_after: 𝕜 : Type u_1
ι : Type u_2
inst✝⁶ : DecidableEq ι
inst✝⁵ : Fintype ι
inst✝⁴ : NontriviallyNormedField 𝕜
E : ι → Type u_3
inst✝³ : (i : ι) → NormedAddCommGroup (E i)
inst✝² : (i : ι) → NormedSpace 𝕜 (E i)
F : Type u_4
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace 𝕜 F
x : (i : ι) → E i
i : ι
y : E i
l : E i →L[𝕜] (i : ι) → E i := ContinuousLinearMap.pi (Pi.single i (ContinuousLinearMap.id 𝕜 (E i)))
⊢ HasFDerivAt (Function.update x i) l y
tactic: set l := (ContinuousLinearMap.pi (Pi.single i (.id 𝕜 (E i))))
state_before: 𝕜 : Type u_1
ι : Type u_2
inst✝⁶ : DecidableEq ι
inst✝⁵ : Fintype ι
inst✝⁴ : NontriviallyNormedField 𝕜
E : ι → Type u_3
inst✝³ : (i : ι) → NormedAddCommGroup (E i)
inst✝² : (i : ι) → NormedSpace 𝕜 (E i)
F : Type u_4
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace 𝕜 F
x : (i : ι) → E i
i : ι
y : E i
l : E i →L[𝕜] (i : ι) → E i := ContinuousLinearMap.pi (Pi.single i (ContinuousLinearMap.id 𝕜 (E i)))
update_eq : Function.update x i = (fun x_1 => x) + ⇑l ∘ fun x_1 => x_1 - x i
⊢ HasFDerivAt (Function.update x i) l y
state_after: 𝕜 : Type u_1
ι : Type u_2
inst✝⁶ : DecidableEq ι
inst✝⁵ : Fintype ι
inst✝⁴ : NontriviallyNormedField 𝕜
E : ι → Type u_3
inst✝³ : (i : ι) → NormedAddCommGroup (E i)
inst✝² : (i : ι) → NormedSpace 𝕜 (E i)
F : Type u_4
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace 𝕜 F
x : (i : ι) → E i
i : ι
y : E i
l : E i →L[𝕜] (i : ι) → E i := ContinuousLinearMap.pi (Pi.single i (ContinuousLinearMap.id 𝕜 (E i)))
update_eq : Function.update x i = (fun x_1 => x) + ⇑l ∘ fun x_1 => x_1 - x i
⊢ HasFDerivAt ((fun x_1 => x) + ⇑l ∘ fun x_1 => x_1 - x i) l y
tactic: rw [update_eq]
state_before: 𝕜 : Type u_1
ι : Type u_2
inst✝⁶ : DecidableEq ι
inst✝⁵ : Fintype ι
inst✝⁴ : NontriviallyNormedField 𝕜
E : ι → Type u_3
inst✝³ : (i : ι) → NormedAddCommGroup (E i)
inst✝² : (i : ι) → NormedSpace 𝕜 (E i)
F : Type u_4
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace 𝕜 F
x : (i : ι) → E i
i : ι
y : E i
l : E i →L[𝕜] (i : ι) → E i := ContinuousLinearMap.pi (Pi.single i (ContinuousLinearMap.id 𝕜 (E i)))
update_eq : Function.update x i = (fun x_1 => x) + ⇑l ∘ fun x_1 => x_1 - x i
⊢ HasFDerivAt ((fun x_1 => x) + ⇑l ∘ fun x_1 => x_1 - x i) l y
state_after: case h.e'_10
𝕜 : Type u_1
ι : Type u_2
inst✝⁶ : DecidableEq ι
inst✝⁵ : Fintype ι
inst✝⁴ : NontriviallyNormedField 𝕜
E : ι → Type u_3
inst✝³ : (i : ι) → NormedAddCommGroup (E i)
inst✝² : (i : ι) → NormedSpace 𝕜 (E i)
F : Type u_4
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace 𝕜 F
x : (i : ι) → E i
i : ι
y : E i
l : E i →L[𝕜] (i : ι) → E i := ContinuousLinearMap.pi (Pi.single i (ContinuousLinearMap.id 𝕜 (E i)))
update_eq : Function.update x i = (fun x_1 => x) + ⇑l ∘ fun x_1 => x_1 - x i
⊢ l = 0 + l.comp (ContinuousLinearMap.id 𝕜 (E i))
tactic: convert (hasFDerivAt_const _ _).add (l.hasFDerivAt.comp y (hasFDerivAt_sub_const (x i)))
state_before: case h.e'_10
𝕜 : Type u_1
ι : Type u_2
inst✝⁶ : DecidableEq ι
inst✝⁵ : Fintype ι
inst✝⁴ : NontriviallyNormedField 𝕜
E : ι → Type u_3
inst✝³ : (i : ι) → NormedAddCommGroup (E i)
inst✝² : (i : ι) → NormedSpace 𝕜 (E i)
F : Type u_4
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace 𝕜 F
x : (i : ι) → E i
i : ι
y : E i
l : E i →L[𝕜] (i : ι) → E i := ContinuousLinearMap.pi (Pi.single i (ContinuousLinearMap.id 𝕜 (E i)))
update_eq : Function.update x i = (fun x_1 => x) + ⇑l ∘ fun x_1 => x_1 - x i
⊢ l = 0 + l.comp (ContinuousLinearMap.id 𝕜 (E i))
state_after: no goals
tactic: rw [zero_add, ContinuousLinearMap.comp_id]