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

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
⊢ 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: 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 (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: convert (hasFDerivAt_const _ _).add (l.hasFDerivAt.comp y (hasFDerivAt_sub_const (x 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 ((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: rw [zero_add, ContinuousLinearMap.comp_id]
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: ext t j
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)))
⊢ Function.update x i = (fun x_1 => x) + ⇑l ∘ fun x_1 => x_1 - x i
state_after: case h.h
𝕜 : 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)))
t : E i
j : ι
⊢ Function.update x i t j = ((fun x_1 => x) + ⇑l ∘ fun x_1 => x_1 - x i) t j

tactic: dsimp [l, Pi.single, Function.update]
state_before: case h.h
𝕜 : 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)))
t : E i
j : ι
⊢ Function.update x i t j = ((fun x_1 => x) + ⇑l ∘ fun x_1 => x_1 - x i) t j
state_after: case h.h
𝕜 : 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)))
t : E i
j : ι
⊢ (if h : j = i then ⋯ ▸ t else x j) = x j + (if h : j = i then ⋯ ▸ ContinuousLinearMap.id 𝕜 (E i) else 0) (t - x i)

tactic: split_ifs with hji
state_before: case h.h
𝕜 : 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)))
t : E i
j : ι
⊢ (if h : j = i then ⋯ ▸ t else x j) = x j + (if h : j = i then ⋯ ▸ ContinuousLinearMap.id 𝕜 (E i) else 0) (t - x i)
state_after: case pos
𝕜 : 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)))
t : E i
j : ι
hji : j = i
⊢ ⋯ ▸ t = x j + (⋯ ▸ ContinuousLinearMap.id 𝕜 (E i)) (t - x i)

case neg
𝕜 : 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)))
t : E i
j : ι
hji : ¬j = i
⊢ x j = x j + 0 (t - x i)

tactic: subst hji
state_before: case pos
𝕜 : 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)))
t : E i
j : ι
hji : j = i
⊢ ⋯ ▸ t = x j + (⋯ ▸ ContinuousLinearMap.id 𝕜 (E i)) (t - x i)
state_after: case pos
𝕜 : 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
j : ι
y : E j
l : E j →L[𝕜] (i : ι) → E i := ContinuousLinearMap.pi (Pi.single j (ContinuousLinearMap.id 𝕜 (E j)))
t : E j
⊢ ⋯ ▸ t = x j + (⋯ ▸ ContinuousLinearMap.id 𝕜 (E j)) (t - x j)

tactic: simp
state_before: case pos
𝕜 : 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
j : ι
y : E j
l : E j →L[𝕜] (i : ι) → E i := ContinuousLinearMap.pi (Pi.single j (ContinuousLinearMap.id 𝕜 (E j)))
t : E j
⊢ ⋯ ▸ t = x j + (⋯ ▸ ContinuousLinearMap.id 𝕜 (E j)) (t - x j)
state_after: no goals

tactic: simp
state_before: case neg
𝕜 : 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)))
t : E i
j : ι
hji : ¬j = i
⊢ x j = x j + 0 (t - x i)
state_after: no goals