Theorem: HasFDerivAt.hasFPiDerivAt (ForML/IndexDeriv.lean)

State before:
ι : Type u_1
𝕜 : Type u_2
inst✝⁸ : Fintype ι
inst✝⁷ : DecidableEq ι
inst✝⁶ : NontriviallyNormedField 𝕜
E : Type u_3
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace 𝕜 E
M : ι → Type u_4
inst✝³ : (i : ι) → NormedAddCommGroup (M i)
inst✝² : (i : ι) → NormedSpace 𝕜 (M i)
F : Type u_5
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace 𝕜 F
i : ι
f : ((i : ι) → M i) → F
f' : ((i : ι) → M i) →L[𝕜] F
x : (i : ι) → M i
hf : HasFDerivAt f f' x
⊢ HasFPiDerivAt i f (ContinuousLinearMap.comp f' (ContinuousLinearMap.single i)) x
Tactic:
rw [HasFPiDerivAt]
State after:
ι : Type u_1
𝕜 : Type u_2
inst✝⁸ : Fintype ι
inst✝⁷ : DecidableEq ι
inst✝⁶ : NontriviallyNormedField 𝕜
E : Type u_3
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace 𝕜 E
M : ι → Type u_4
inst✝³ : (i : ι) → NormedAddCommGroup (M i)
inst✝² : (i : ι) → NormedSpace 𝕜 (M i)
F : Type u_5
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace 𝕜 F
i : ι
f : ((i : ι) → M i) → F
f' : ((i : ι) → M i) →L[𝕜] F
x : (i : ι) → M i
hf : HasFDerivAt f f' x
⊢ HasFDerivAt (fun y => f (Function.update x i y)) (ContinuousLinearMap.comp f' (ContinuousLinearMap.single i)) (x i)

State before:
ι : Type u_1
𝕜 : Type u_2
inst✝⁸ : Fintype ι
inst✝⁷ : DecidableEq ι
inst✝⁶ : NontriviallyNormedField 𝕜
E : Type u_3
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace 𝕜 E
M : ι → Type u_4
inst✝³ : (i : ι) → NormedAddCommGroup (M i)
inst✝² : (i : ι) → NormedSpace 𝕜 (M i)
F : Type u_5
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace 𝕜 F
i : ι
f : ((i : ι) → M i) → F
f' : ((i : ι) → M i) →L[𝕜] F
x : (i : ι) → M i
hf : HasFDerivAt f f' x
⊢ HasFDerivAt (fun y => f (Function.update x i y)) (ContinuousLinearMap.comp f' (ContinuousLinearMap.single i)) (x i)
Tactic:
refine HasFDerivAt.comp _ (by simpa) ?_
State after:
ι : Type u_1
𝕜 : Type u_2
inst✝⁸ : Fintype ι
inst✝⁷ : DecidableEq ι
inst✝⁶ : NontriviallyNormedField 𝕜
E : Type u_3
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace 𝕜 E
M : ι → Type u_4
inst✝³ : (i : ι) → NormedAddCommGroup (M i)
inst✝² : (i : ι) → NormedSpace 𝕜 (M i)
F : Type u_5
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace 𝕜 F
i : ι
f : ((i : ι) → M i) → F
f' : ((i : ι) → M i) →L[𝕜] F
x : (i : ι) → M i
hf : HasFDerivAt f f' x
⊢ HasFDerivAt (fun y => Function.update x i y) (ContinuousLinearMap.single i) (x i)

State before:
ι : Type u_1
𝕜 : Type u_2
inst✝⁸ : Fintype ι
inst✝⁷ : DecidableEq ι
inst✝⁶ : NontriviallyNormedField 𝕜
E : Type u_3
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace 𝕜 E
M : ι → Type u_4
inst✝³ : (i : ι) → NormedAddCommGroup (M i)
inst✝² : (i : ι) → NormedSpace 𝕜 (M i)
F : Type u_5
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace 𝕜 F
i : ι
f : ((i : ι) → M i) → F
f' : ((i : ι) → M i) →L[𝕜] F
x : (i : ι) → M i
hf : HasFDerivAt f f' x
⊢ HasFDerivAt (fun y => Function.update x i y) (ContinuousLinearMap.single i) (x i)
Tactic:
refine HasFDerivAt.congr_fderiv (hasFDerivAt_update _ _) ?_
State after:
ι : Type u_1
𝕜 : Type u_2
inst✝⁸ : Fintype ι
inst✝⁷ : DecidableEq ι
inst✝⁶ : NontriviallyNormedField 𝕜
E : Type u_3
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace 𝕜 E
M : ι → Type u_4
inst✝³ : (i : ι) → NormedAddCommGroup (M i)
inst✝² : (i : ι) → NormedSpace 𝕜 (M i)
F : Type u_5
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace 𝕜 F
i : ι
f : ((i : ι) → M i) → F
f' : ((i : ι) → M i) →L[𝕜] F
x : (i : ι) → M i
hf : HasFDerivAt f f' x
⊢ ContinuousLinearMap.pi (Pi.single i (ContinuousLinearMap.id 𝕜 (M i))) = ContinuousLinearMap.single i

State before:
ι : Type u_1
𝕜 : Type u_2
inst✝⁸ : Fintype ι
inst✝⁷ : DecidableEq ι
inst✝⁶ : NontriviallyNormedField 𝕜
E : Type u_3
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace 𝕜 E
M : ι → Type u_4
inst✝³ : (i : ι) → NormedAddCommGroup (M i)
inst✝² : (i : ι) → NormedSpace 𝕜 (M i)
F : Type u_5
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace 𝕜 F
i : ι
f : ((i : ι) → M i) → F
f' : ((i : ι) → M i) →L[𝕜] F
x : (i : ι) → M i
hf : HasFDerivAt f f' x
⊢ ContinuousLinearMap.pi (Pi.single i (ContinuousLinearMap.id 𝕜 (M i))) = ContinuousLinearMap.single i
Tactic:
ext m j
State after:
case h.h
ι : Type u_1
𝕜 : Type u_2
inst✝⁸ : Fintype ι
inst✝⁷ : DecidableEq ι
inst✝⁶ : NontriviallyNormedField 𝕜
E : Type u_3
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace 𝕜 E
M : ι → Type u_4
inst✝³ : (i : ι) → NormedAddCommGroup (M i)
inst✝² : (i : ι) → NormedSpace 𝕜 (M i)
F : Type u_5
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace 𝕜 F
i : ι
f : ((i : ι) → M i) → F
f' : ((i : ι) → M i) →L[𝕜] F
x : (i : ι) → M i
hf : HasFDerivAt f f' x
m : M i
j : ι
⊢ (ContinuousLinearMap.pi (Pi.single i (ContinuousLinearMap.id 𝕜 (M i)))) m j = (ContinuousLinearMap.single i) m j

State before:
case h.h
ι : Type u_1
𝕜 : Type u_2
inst✝⁸ : Fintype ι
inst✝⁷ : DecidableEq ι
inst✝⁶ : NontriviallyNormedField 𝕜
E : Type u_3
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace 𝕜 E
M : ι → Type u_4
inst✝³ : (i : ι) → NormedAddCommGroup (M i)
inst✝² : (i : ι) → NormedSpace 𝕜 (M i)
F : Type u_5
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace 𝕜 F
i : ι
f : ((i : ι) → M i) → F
f' : ((i : ι) → M i) →L[𝕜] F
x : (i : ι) → M i
hf : HasFDerivAt f f' x
m : M i
j : ι
⊢ (ContinuousLinearMap.pi (Pi.single i (ContinuousLinearMap.id 𝕜 (M i)))) m j = (ContinuousLinearMap.single i) m j
Tactic:
simp
State after:
case h.h
ι : Type u_1
𝕜 : Type u_2
inst✝⁸ : Fintype ι
inst✝⁷ : DecidableEq ι
inst✝⁶ : NontriviallyNormedField 𝕜
E : Type u_3
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace 𝕜 E
M : ι → Type u_4
inst✝³ : (i : ι) → NormedAddCommGroup (M i)
inst✝² : (i : ι) → NormedSpace 𝕜 (M i)
F : Type u_5
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace 𝕜 F
i : ι
f : ((i : ι) → M i) → F
f' : ((i : ι) → M i) →L[𝕜] F
x : (i : ι) → M i
hf : HasFDerivAt f f' x
m : M i
j : ι
⊢ (Pi.single i (ContinuousLinearMap.id 𝕜 (M i)) j) m = Pi.single i m j

State before:
case h.h
ι : Type u_1
𝕜 : Type u_2
inst✝⁸ : Fintype ι
inst✝⁷ : DecidableEq ι
inst✝⁶ : NontriviallyNormedField 𝕜
E : Type u_3
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace 𝕜 E
M : ι → Type u_4
inst✝³ : (i : ι) → NormedAddCommGroup (M i)
inst✝² : (i : ι) → NormedSpace 𝕜 (M i)
F : Type u_5
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace 𝕜 F
i : ι
f : ((i : ι) → M i) → F
f' : ((i : ι) → M i) →L[𝕜] F
x : (i : ι) → M i
hf : HasFDerivAt f f' x
m : M i
j : ι
⊢ (Pi.single i (ContinuousLinearMap.id 𝕜 (M i)) j) m = Pi.single i m j
Tactic:
simp [Pi.single]
State after:
case h.h
ι : Type u_1
𝕜 : Type u_2
inst✝⁸ : Fintype ι
inst✝⁷ : DecidableEq ι
inst✝⁶ : NontriviallyNormedField 𝕜
E : Type u_3
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace 𝕜 E
M : ι → Type u_4
inst✝³ : (i : ι) → NormedAddCommGroup (M i)
inst✝² : (i : ι) → NormedSpace 𝕜 (M i)
F : Type u_5
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace 𝕜 F
i : ι
f : ((i : ι) → M i) → F
f' : ((i : ι) → M i) →L[𝕜] F
x : (i : ι) → M i
hf : HasFDerivAt f f' x
m : M i
j : ι
⊢ (Function.update 0 i (ContinuousLinearMap.id 𝕜 (M i)) j) m = Function.update 0 i m j

State before:
case h.h
ι : Type u_1
𝕜 : Type u_2
inst✝⁸ : Fintype ι
inst✝⁷ : DecidableEq ι
inst✝⁶ : NontriviallyNormedField 𝕜
E : Type u_3
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace 𝕜 E
M : ι → Type u_4
inst✝³ : (i : ι) → NormedAddCommGroup (M i)
inst✝² : (i : ι) → NormedSpace 𝕜 (M i)
F : Type u_5
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace 𝕜 F
i : ι
f : ((i : ι) → M i) → F
f' : ((i : ι) → M i) →L[𝕜] F
x : (i : ι) → M i
hf : HasFDerivAt f f' x
m : M i
j : ι
⊢ (Function.update 0 i (ContinuousLinearMap.id 𝕜 (M i)) j) m = Function.update 0 i m j
Tactic:
by_cases h : j = i
State after:
case pos
ι : Type u_1
𝕜 : Type u_2
inst✝⁸ : Fintype ι
inst✝⁷ : DecidableEq ι
inst✝⁶ : NontriviallyNormedField 𝕜
E : Type u_3
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace 𝕜 E
M : ι → Type u_4
inst✝³ : (i : ι) → NormedAddCommGroup (M i)
inst✝² : (i : ι) → NormedSpace 𝕜 (M i)
F : Type u_5
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace 𝕜 F
i : ι
f : ((i : ι) → M i) → F
f' : ((i : ι) → M i) →L[𝕜] F
x : (i : ι) → M i
hf : HasFDerivAt f f' x
m : M i
j : ι
h : j = i
⊢ (Function.update 0 i (ContinuousLinearMap.id 𝕜 (M i)) j) m = Function.update 0 i m j

case neg
ι : Type u_1
𝕜 : Type u_2
inst✝⁸ : Fintype ι
inst✝⁷ : DecidableEq ι
inst✝⁶ : NontriviallyNormedField 𝕜
E : Type u_3
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace 𝕜 E
M : ι → Type u_4
inst✝³ : (i : ι) → NormedAddCommGroup (M i)
inst✝² : (i : ι) → NormedSpace 𝕜 (M i)
F : Type u_5
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace 𝕜 F
i : ι
f : ((i : ι) → M i) → F
f' : ((i : ι) → M i) →L[𝕜] F
x : (i : ι) → M i
hf : HasFDerivAt f f' x
m : M i
j : ι
h : ¬j = i
⊢ (Function.update 0 i (ContinuousLinearMap.id 𝕜 (M i)) j) m = Function.update 0 i m j

State before:
case pos
ι : Type u_1
𝕜 : Type u_2
inst✝⁸ : Fintype ι
inst✝⁷ : DecidableEq ι
inst✝⁶ : NontriviallyNormedField 𝕜
E : Type u_3
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace 𝕜 E
M : ι → Type u_4
inst✝³ : (i : ι) → NormedAddCommGroup (M i)
inst✝² : (i : ι) → NormedSpace 𝕜 (M i)
F : Type u_5
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace 𝕜 F
i : ι
f : ((i : ι) → M i) → F
f' : ((i : ι) → M i) →L[𝕜] F
x : (i : ι) → M i
hf : HasFDerivAt f f' x
m : M i
j : ι
h : j = i
⊢ (Function.update 0 i (ContinuousLinearMap.id 𝕜 (M i)) j) m = Function.update 0 i m j

case neg
ι : Type u_1
𝕜 : Type u_2
inst✝⁸ : Fintype ι
inst✝⁷ : DecidableEq ι
inst✝⁶ : NontriviallyNormedField 𝕜
E : Type u_3
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace 𝕜 E
M : ι → Type u_4
inst✝³ : (i : ι) → NormedAddCommGroup (M i)
inst✝² : (i : ι) → NormedSpace 𝕜 (M i)
F : Type u_5
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace 𝕜 F
i : ι
f : ((i : ι) → M i) → F
f' : ((i : ι) → M i) →L[𝕜] F
x : (i : ι) → M i
hf : HasFDerivAt f f' x
m : M i
j : ι
h : ¬j = i
⊢ (Function.update 0 i (ContinuousLinearMap.id 𝕜 (M i)) j) m = Function.update 0 i m j
Tactic:
. rw [h]
  simp
State after:
case neg
ι : Type u_1
𝕜 : Type u_2
inst✝⁸ : Fintype ι
inst✝⁷ : DecidableEq ι
inst✝⁶ : NontriviallyNormedField 𝕜
E : Type u_3
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace 𝕜 E
M : ι → Type u_4
inst✝³ : (i : ι) → NormedAddCommGroup (M i)
inst✝² : (i : ι) → NormedSpace 𝕜 (M i)
F : Type u_5
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace 𝕜 F
i : ι
f : ((i : ι) → M i) → F
f' : ((i : ι) → M i) →L[𝕜] F
x : (i : ι) → M i
hf : HasFDerivAt f f' x
m : M i
j : ι
h : ¬j = i
⊢ (Function.update 0 i (ContinuousLinearMap.id 𝕜 (M i)) j) m = Function.update 0 i m j

State before:
case neg
ι : Type u_1
𝕜 : Type u_2
inst✝⁸ : Fintype ι
inst✝⁷ : DecidableEq ι
inst✝⁶ : NontriviallyNormedField 𝕜
E : Type u_3
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace 𝕜 E
M : ι → Type u_4
inst✝³ : (i : ι) → NormedAddCommGroup (M i)
inst✝² : (i : ι) → NormedSpace 𝕜 (M i)
F : Type u_5
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace 𝕜 F
i : ι
f : ((i : ι) → M i) → F
f' : ((i : ι) → M i) →L[𝕜] F
x : (i : ι) → M i
hf : HasFDerivAt f f' x
m : M i
j : ι
h : ¬j = i
⊢ (Function.update 0 i (ContinuousLinearMap.id 𝕜 (M i)) j) m = Function.update 0 i m j
Tactic:
. simp [h]
State after:
no goals

State before:
ι : Type u_1
𝕜 : Type u_2
inst✝⁸ : Fintype ι
inst✝⁷ : DecidableEq ι
inst✝⁶ : NontriviallyNormedField 𝕜
E : Type u_3
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace 𝕜 E
M : ι → Type u_4
inst✝³ : (i : ι) → NormedAddCommGroup (M i)
inst✝² : (i : ι) → NormedSpace 𝕜 (M i)
F : Type u_5
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace 𝕜 F
i : ι
f : ((i : ι) → M i) → F
f' : ((i : ι) → M i) →L[𝕜] F
x : (i : ι) → M i
hf : HasFDerivAt f f' x
⊢ HasFDerivAt f f' (Function.update x i (x i))
Tactic:
simpa
State after:
no goals

State before:
case pos
ι : Type u_1
𝕜 : Type u_2
inst✝⁸ : Fintype ι
inst✝⁷ : DecidableEq ι
inst✝⁶ : NontriviallyNormedField 𝕜
E : Type u_3
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace 𝕜 E
M : ι → Type u_4
inst✝³ : (i : ι) → NormedAddCommGroup (M i)
inst✝² : (i : ι) → NormedSpace 𝕜 (M i)
F : Type u_5
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace 𝕜 F
i : ι
f : ((i : ι) → M i) → F
f' : ((i : ι) → M i) →L[𝕜] F
x : (i : ι) → M i
hf : HasFDerivAt f f' x
m : M i
j : ι
h : j = i
⊢ (Function.update 0 i (ContinuousLinearMap.id 𝕜 (M i)) j) m = Function.update 0 i m j
Tactic:
rw [h]
State after:
case pos
ι : Type u_1
𝕜 : Type u_2
inst✝⁸ : Fintype ι
inst✝⁷ : DecidableEq ι
inst✝⁶ : NontriviallyNormedField 𝕜
E : Type u_3
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace 𝕜 E
M : ι → Type u_4
inst✝³ : (i : ι) → NormedAddCommGroup (M i)
inst✝² : (i : ι) → NormedSpace 𝕜 (M i)
F : Type u_5
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace 𝕜 F
i : ι
f : ((i : ι) → M i) → F
f' : ((i : ι) → M i) →L[𝕜] F
x : (i : ι) → M i
hf : HasFDerivAt f f' x
m : M i
j : ι
h : j = i
⊢ (Function.update 0 i (ContinuousLinearMap.id 𝕜 (M i)) i) m = Function.update 0 i m i

State before:
case pos
ι : Type u_1
𝕜 : Type u_2
inst✝⁸ : Fintype ι
inst✝⁷ : DecidableEq ι
inst✝⁶ : NontriviallyNormedField 𝕜
E : Type u_3
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace 𝕜 E
M : ι → Type u_4
inst✝³ : (i : ι) → NormedAddCommGroup (M i)
inst✝² : (i : ι) → NormedSpace 𝕜 (M i)
F : Type u_5
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace 𝕜 F
i : ι
f : ((i : ι) → M i) → F
f' : ((i : ι) → M i) →L[𝕜] F
x : (i : ι) → M i
hf : HasFDerivAt f f' x
m : M i
j : ι
h : j = i
⊢ (Function.update 0 i (ContinuousLinearMap.id 𝕜 (M i)) i) m = Function.update 0 i m i
Tactic:
simp
State after:
no goals

State before:
case neg
ι : Type u_1
𝕜 : Type u_2
inst✝⁸ : Fintype ι
inst✝⁷ : DecidableEq ι
inst✝⁶ : NontriviallyNormedField 𝕜
E : Type u_3
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace 𝕜 E
M : ι → Type u_4
inst✝³ : (i : ι) → NormedAddCommGroup (M i)
inst✝² : (i : ι) → NormedSpace 𝕜 (M i)
F : Type u_5
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace 𝕜 F
i : ι
f : ((i : ι) → M i) → F
f' : ((i : ι) → M i) →L[𝕜] F
x : (i : ι) → M i
hf : HasFDerivAt f f' x
m : M i
j : ι
h : ¬j = i
⊢ (Function.update 0 i (ContinuousLinearMap.id 𝕜 (M i)) j) m = Function.update 0 i m j
Tactic:
simp [h]
State after:
no goals