Theorem: ContDiff.orderedIteratedPiDeriv_eq_orderedIteratedFPiDeriv (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
f : (ι → 𝕜) → F
f' : (ι → 𝕜) → FormalMultilinearSeries 𝕜 (ι → 𝕜) F
n : ℕ
hf : ContDiff 𝕜 (↑n) f
js : Fin n → ι
x : ι → 𝕜
⊢ orderedIteratedPiDeriv js f x = (orderedIteratedFPiDeriv 𝕜 js f x) 1
Tactic:
induction n generalizing x with
| zero => rfl
| succ n ih =>
  specialize @ih hf.of_succ
  rw [orderedIteratedPiDeriv_succ_left, orderedIteratedFPiDeriv_succ_apply_left]
  rw [← fpideriv_pideriv]
  simp
  change _ = ((fpideriv 𝕜 (js 0) (orderedIteratedFPiDeriv 𝕜 (Fin.tail js) f) x) 1) 1
  rw [fpideriv_apply, fpideriv_apply]
  simp_rw [ih]
  rw [fderiv_continuousMultilinear_apply_const_apply]
  change DifferentiableAt 𝕜 (orderedIteratedFPiDeriv 𝕜 (Fin.tail js) f ∘ Function.update x (js 0)) _
  refine DifferentiableAt.comp _ ?_ ?_
  . refine hf.differentiableAt_orderedIteratedFPiDeriv ?_
    norm_cast
    exact Nat.lt_succ_self n
  . exact differentiable_update' x (js 0) _
State after:
no goals

State before:
case zero
ι : 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
f : (ι → 𝕜) → F
f' : (ι → 𝕜) → FormalMultilinearSeries 𝕜 (ι → 𝕜) F
hf : ContDiff 𝕜 (↑Nat.zero) f
js : Fin Nat.zero → ι
x : ι → 𝕜
⊢ orderedIteratedPiDeriv js f x = (orderedIteratedFPiDeriv 𝕜 js f x) 1
Tactic:
rfl
State after:
no goals

State before:
case succ
ι : 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
f : (ι → 𝕜) → F
f' : (ι → 𝕜) → FormalMultilinearSeries 𝕜 (ι → 𝕜) F
n : ℕ
ih :
  ContDiff 𝕜 (↑n) f →
    ∀ {js : Fin n → ι} {x : ι → 𝕜}, orderedIteratedPiDeriv js f x = (orderedIteratedFPiDeriv 𝕜 js f x) 1
hf : ContDiff 𝕜 (↑(Nat.succ n)) f
js : Fin (Nat.succ n) → ι
x : ι → 𝕜
⊢ orderedIteratedPiDeriv js f x = (orderedIteratedFPiDeriv 𝕜 js f x) 1
Tactic:
specialize @ih hf.of_succ
State after:
case succ
ι : 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
f : (ι → 𝕜) → F
f' : (ι → 𝕜) → FormalMultilinearSeries 𝕜 (ι → 𝕜) F
n : ℕ
hf : ContDiff 𝕜 (↑(Nat.succ n)) f
js : Fin (Nat.succ n) → ι
x : ι → 𝕜
ih : ∀ {js : Fin n → ι} {x : ι → 𝕜}, orderedIteratedPiDeriv js f x = (orderedIteratedFPiDeriv 𝕜 js f x) 1
⊢ orderedIteratedPiDeriv js f x = (orderedIteratedFPiDeriv 𝕜 js f x) 1

State before:
case succ
ι : 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
f : (ι → 𝕜) → F
f' : (ι → 𝕜) → FormalMultilinearSeries 𝕜 (ι → 𝕜) F
n : ℕ
hf : ContDiff 𝕜 (↑(Nat.succ n)) f
js : Fin (Nat.succ n) → ι
x : ι → 𝕜
ih : ∀ {js : Fin n → ι} {x : ι → 𝕜}, orderedIteratedPiDeriv js f x = (orderedIteratedFPiDeriv 𝕜 js f x) 1
⊢ orderedIteratedPiDeriv js f x = (orderedIteratedFPiDeriv 𝕜 js f x) 1
Tactic:
rw [orderedIteratedPiDeriv_succ_left, orderedIteratedFPiDeriv_succ_apply_left]
State after:
case succ
ι : 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
f : (ι → 𝕜) → F
f' : (ι → 𝕜) → FormalMultilinearSeries 𝕜 (ι → 𝕜) F
n : ℕ
hf : ContDiff 𝕜 (↑(Nat.succ n)) f
js : Fin (Nat.succ n) → ι
x : ι → 𝕜
ih : ∀ {js : Fin n → ι} {x : ι → 𝕜}, orderedIteratedPiDeriv js f x = (orderedIteratedFPiDeriv 𝕜 js f x) 1
⊢ pideriv (js 0) (orderedIteratedPiDeriv (Fin.tail js) f) x =
    ((fpideriv 𝕜 (js 0) (orderedIteratedFPiDeriv 𝕜 (Fin.tail js) f) x) (1 0)) (Fin.tail 1)

State before:
case succ
ι : 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
f : (ι → 𝕜) → F
f' : (ι → 𝕜) → FormalMultilinearSeries 𝕜 (ι → 𝕜) F
n : ℕ
hf : ContDiff 𝕜 (↑(Nat.succ n)) f
js : Fin (Nat.succ n) → ι
x : ι → 𝕜
ih : ∀ {js : Fin n → ι} {x : ι → 𝕜}, orderedIteratedPiDeriv js f x = (orderedIteratedFPiDeriv 𝕜 js f x) 1
⊢ pideriv (js 0) (orderedIteratedPiDeriv (Fin.tail js) f) x =
    ((fpideriv 𝕜 (js 0) (orderedIteratedFPiDeriv 𝕜 (Fin.tail js) f) x) (1 0)) (Fin.tail 1)
Tactic:
rw [← fpideriv_pideriv]
State after:
case succ
ι : 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
f : (ι → 𝕜) → F
f' : (ι → 𝕜) → FormalMultilinearSeries 𝕜 (ι → 𝕜) F
n : ℕ
hf : ContDiff 𝕜 (↑(Nat.succ n)) f
js : Fin (Nat.succ n) → ι
x : ι → 𝕜
ih : ∀ {js : Fin n → ι} {x : ι → 𝕜}, orderedIteratedPiDeriv js f x = (orderedIteratedFPiDeriv 𝕜 js f x) 1
⊢ (fpideriv 𝕜 (js 0) (orderedIteratedPiDeriv (Fin.tail js) f) x) 1 =
    ((fpideriv 𝕜 (js 0) (orderedIteratedFPiDeriv 𝕜 (Fin.tail js) f) x) (1 0)) (Fin.tail 1)

State before:
case succ
ι : 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
f : (ι → 𝕜) → F
f' : (ι → 𝕜) → FormalMultilinearSeries 𝕜 (ι → 𝕜) F
n : ℕ
hf : ContDiff 𝕜 (↑(Nat.succ n)) f
js : Fin (Nat.succ n) → ι
x : ι → 𝕜
ih : ∀ {js : Fin n → ι} {x : ι → 𝕜}, orderedIteratedPiDeriv js f x = (orderedIteratedFPiDeriv 𝕜 js f x) 1
⊢ (fpideriv 𝕜 (js 0) (orderedIteratedPiDeriv (Fin.tail js) f) x) 1 =
    ((fpideriv 𝕜 (js 0) (orderedIteratedFPiDeriv 𝕜 (Fin.tail js) f) x) (1 0)) (Fin.tail 1)
Tactic:
simp
State after:
case succ
ι : 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
f : (ι → 𝕜) → F
f' : (ι → 𝕜) → FormalMultilinearSeries 𝕜 (ι → 𝕜) F
n : ℕ
hf : ContDiff 𝕜 (↑(Nat.succ n)) f
js : Fin (Nat.succ n) → ι
x : ι → 𝕜
ih : ∀ {js : Fin n → ι} {x : ι → 𝕜}, orderedIteratedPiDeriv js f x = (orderedIteratedFPiDeriv 𝕜 js f x) 1
⊢ (fpideriv 𝕜 (js 0) (orderedIteratedPiDeriv (Fin.tail js) f) x) 1 =
    ((fpideriv 𝕜 (js 0) (orderedIteratedFPiDeriv 𝕜 (Fin.tail js) f) x) 1) (Fin.tail 1)

State before:
case succ
ι : 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
f : (ι → 𝕜) → F
f' : (ι → 𝕜) → FormalMultilinearSeries 𝕜 (ι → 𝕜) F
n : ℕ
hf : ContDiff 𝕜 (↑(Nat.succ n)) f
js : Fin (Nat.succ n) → ι
x : ι → 𝕜
ih : ∀ {js : Fin n → ι} {x : ι → 𝕜}, orderedIteratedPiDeriv js f x = (orderedIteratedFPiDeriv 𝕜 js f x) 1
⊢ (fpideriv 𝕜 (js 0) (orderedIteratedPiDeriv (Fin.tail js) f) x) 1 =
    ((fpideriv 𝕜 (js 0) (orderedIteratedFPiDeriv 𝕜 (Fin.tail js) f) x) 1) (Fin.tail 1)
Tactic:
change _ = ((fpideriv 𝕜 (js 0) (orderedIteratedFPiDeriv 𝕜 (Fin.tail js) f) x) 1) 1
State after:
case succ
ι : 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
f : (ι → 𝕜) → F
f' : (ι → 𝕜) → FormalMultilinearSeries 𝕜 (ι → 𝕜) F
n : ℕ
hf : ContDiff 𝕜 (↑(Nat.succ n)) f
js : Fin (Nat.succ n) → ι
x : ι → 𝕜
ih : ∀ {js : Fin n → ι} {x : ι → 𝕜}, orderedIteratedPiDeriv js f x = (orderedIteratedFPiDeriv 𝕜 js f x) 1
⊢ (fpideriv 𝕜 (js 0) (orderedIteratedPiDeriv (Fin.tail js) f) x) 1 =
    ((fpideriv 𝕜 (js 0) (orderedIteratedFPiDeriv 𝕜 (Fin.tail js) f) x) 1) 1

State before:
case succ
ι : 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
f : (ι → 𝕜) → F
f' : (ι → 𝕜) → FormalMultilinearSeries 𝕜 (ι → 𝕜) F
n : ℕ
hf : ContDiff 𝕜 (↑(Nat.succ n)) f
js : Fin (Nat.succ n) → ι
x : ι → 𝕜
ih : ∀ {js : Fin n → ι} {x : ι → 𝕜}, orderedIteratedPiDeriv js f x = (orderedIteratedFPiDeriv 𝕜 js f x) 1
⊢ (fpideriv 𝕜 (js 0) (orderedIteratedPiDeriv (Fin.tail js) f) x) 1 =
    ((fpideriv 𝕜 (js 0) (orderedIteratedFPiDeriv 𝕜 (Fin.tail js) f) x) 1) 1
Tactic:
rw [fpideriv_apply, fpideriv_apply]
State after:
case succ
ι : 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
f : (ι → 𝕜) → F
f' : (ι → 𝕜) → FormalMultilinearSeries 𝕜 (ι → 𝕜) F
n : ℕ
hf : ContDiff 𝕜 (↑(Nat.succ n)) f
js : Fin (Nat.succ n) → ι
x : ι → 𝕜
ih : ∀ {js : Fin n → ι} {x : ι → 𝕜}, orderedIteratedPiDeriv js f x = (orderedIteratedFPiDeriv 𝕜 js f x) 1
⊢ (fderiv 𝕜 (fun y => orderedIteratedPiDeriv (Fin.tail js) f (Function.update x (js 0) y)) (x (js 0))) 1 =
    ((fderiv 𝕜 (fun y => orderedIteratedFPiDeriv 𝕜 (Fin.tail js) f (Function.update x (js 0) y)) (x (js 0))) 1) 1

State before:
case succ
ι : 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
f : (ι → 𝕜) → F
f' : (ι → 𝕜) → FormalMultilinearSeries 𝕜 (ι → 𝕜) F
n : ℕ
hf : ContDiff 𝕜 (↑(Nat.succ n)) f
js : Fin (Nat.succ n) → ι
x : ι → 𝕜
ih : ∀ {js : Fin n → ι} {x : ι → 𝕜}, orderedIteratedPiDeriv js f x = (orderedIteratedFPiDeriv 𝕜 js f x) 1
⊢ (fderiv 𝕜 (fun y => orderedIteratedPiDeriv (Fin.tail js) f (Function.update x (js 0) y)) (x (js 0))) 1 =
    ((fderiv 𝕜 (fun y => orderedIteratedFPiDeriv 𝕜 (Fin.tail js) f (Function.update x (js 0) y)) (x (js 0))) 1) 1
Tactic:
simp_rw [ih]
State after:
case succ
ι : 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
f : (ι → 𝕜) → F
f' : (ι → 𝕜) → FormalMultilinearSeries 𝕜 (ι → 𝕜) F
n : ℕ
hf : ContDiff 𝕜 (↑(Nat.succ n)) f
js : Fin (Nat.succ n) → ι
x : ι → 𝕜
ih : ∀ {js : Fin n → ι} {x : ι → 𝕜}, orderedIteratedPiDeriv js f x = (orderedIteratedFPiDeriv 𝕜 js f x) 1
⊢ (fderiv 𝕜 (fun y => (orderedIteratedFPiDeriv 𝕜 (Fin.tail js) f (Function.update x (js 0) y)) 1) (x (js 0))) 1 =
    ((fderiv 𝕜 (fun y => orderedIteratedFPiDeriv 𝕜 (Fin.tail js) f (Function.update x (js 0) y)) (x (js 0))) 1) 1

State before:
case succ
ι : 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
f : (ι → 𝕜) → F
f' : (ι → 𝕜) → FormalMultilinearSeries 𝕜 (ι → 𝕜) F
n : ℕ
hf : ContDiff 𝕜 (↑(Nat.succ n)) f
js : Fin (Nat.succ n) → ι
x : ι → 𝕜
ih : ∀ {js : Fin n → ι} {x : ι → 𝕜}, orderedIteratedPiDeriv js f x = (orderedIteratedFPiDeriv 𝕜 js f x) 1
⊢ (fderiv 𝕜 (fun y => (orderedIteratedFPiDeriv 𝕜 (Fin.tail js) f (Function.update x (js 0) y)) 1) (x (js 0))) 1 =
    ((fderiv 𝕜 (fun y => orderedIteratedFPiDeriv 𝕜 (Fin.tail js) f (Function.update x (js 0) y)) (x (js 0))) 1) 1
Tactic:
rw [fderiv_continuousMultilinear_apply_const_apply]
State after:
case succ.hc
ι : 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
f : (ι → 𝕜) → F
f' : (ι → 𝕜) → FormalMultilinearSeries 𝕜 (ι → 𝕜) F
n : ℕ
hf : ContDiff 𝕜 (↑(Nat.succ n)) f
js : Fin (Nat.succ n) → ι
x : ι → 𝕜
ih : ∀ {js : Fin n → ι} {x : ι → 𝕜}, orderedIteratedPiDeriv js f x = (orderedIteratedFPiDeriv 𝕜 js f x) 1
⊢ DifferentiableAt 𝕜 (fun y => orderedIteratedFPiDeriv 𝕜 (Fin.tail js) f (Function.update x (js 0) y)) (x (js 0))

State before:
case succ.hc
ι : 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
f : (ι → 𝕜) → F
f' : (ι → 𝕜) → FormalMultilinearSeries 𝕜 (ι → 𝕜) F
n : ℕ
hf : ContDiff 𝕜 (↑(Nat.succ n)) f
js : Fin (Nat.succ n) → ι
x : ι → 𝕜
ih : ∀ {js : Fin n → ι} {x : ι → 𝕜}, orderedIteratedPiDeriv js f x = (orderedIteratedFPiDeriv 𝕜 js f x) 1
⊢ DifferentiableAt 𝕜 (fun y => orderedIteratedFPiDeriv 𝕜 (Fin.tail js) f (Function.update x (js 0) y)) (x (js 0))
Tactic:
change DifferentiableAt 𝕜 (orderedIteratedFPiDeriv 𝕜 (Fin.tail js) f ∘ Function.update x (js 0)) _
State after:
case succ.hc
ι : 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
f : (ι → 𝕜) → F
f' : (ι → 𝕜) → FormalMultilinearSeries 𝕜 (ι → 𝕜) F
n : ℕ
hf : ContDiff 𝕜 (↑(Nat.succ n)) f
js : Fin (Nat.succ n) → ι
x : ι → 𝕜
ih : ∀ {js : Fin n → ι} {x : ι → 𝕜}, orderedIteratedPiDeriv js f x = (orderedIteratedFPiDeriv 𝕜 js f x) 1
⊢ DifferentiableAt 𝕜 (orderedIteratedFPiDeriv 𝕜 (Fin.tail js) f ∘ Function.update x (js 0)) (x (js 0))

State before:
case succ.hc
ι : 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
f : (ι → 𝕜) → F
f' : (ι → 𝕜) → FormalMultilinearSeries 𝕜 (ι → 𝕜) F
n : ℕ
hf : ContDiff 𝕜 (↑(Nat.succ n)) f
js : Fin (Nat.succ n) → ι
x : ι → 𝕜
ih : ∀ {js : Fin n → ι} {x : ι → 𝕜}, orderedIteratedPiDeriv js f x = (orderedIteratedFPiDeriv 𝕜 js f x) 1
⊢ DifferentiableAt 𝕜 (orderedIteratedFPiDeriv 𝕜 (Fin.tail js) f ∘ Function.update x (js 0)) (x (js 0))
Tactic:
refine DifferentiableAt.comp _ ?_ ?_
State after:
case succ.hc.refine_1
ι : 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
f : (ι → 𝕜) → F
f' : (ι → 𝕜) → FormalMultilinearSeries 𝕜 (ι → 𝕜) F
n : ℕ
hf : ContDiff 𝕜 (↑(Nat.succ n)) f
js : Fin (Nat.succ n) → ι
x : ι → 𝕜
ih : ∀ {js : Fin n → ι} {x : ι → 𝕜}, orderedIteratedPiDeriv js f x = (orderedIteratedFPiDeriv 𝕜 js f x) 1
⊢ DifferentiableAt 𝕜 (orderedIteratedFPiDeriv 𝕜 (Fin.tail js) f) (Function.update x (js 0) (x (js 0)))

case succ.hc.refine_2
ι : 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
f : (ι → 𝕜) → F
f' : (ι → 𝕜) → FormalMultilinearSeries 𝕜 (ι → 𝕜) F
n : ℕ
hf : ContDiff 𝕜 (↑(Nat.succ n)) f
js : Fin (Nat.succ n) → ι
x : ι → 𝕜
ih : ∀ {js : Fin n → ι} {x : ι → 𝕜}, orderedIteratedPiDeriv js f x = (orderedIteratedFPiDeriv 𝕜 js f x) 1
⊢ DifferentiableAt 𝕜 (Function.update x (js 0)) (x (js 0))

State before:
case succ.hc.refine_1
ι : 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
f : (ι → 𝕜) → F
f' : (ι → 𝕜) → FormalMultilinearSeries 𝕜 (ι → 𝕜) F
n : ℕ
hf : ContDiff 𝕜 (↑(Nat.succ n)) f
js : Fin (Nat.succ n) → ι
x : ι → 𝕜
ih : ∀ {js : Fin n → ι} {x : ι → 𝕜}, orderedIteratedPiDeriv js f x = (orderedIteratedFPiDeriv 𝕜 js f x) 1
⊢ DifferentiableAt 𝕜 (orderedIteratedFPiDeriv 𝕜 (Fin.tail js) f) (Function.update x (js 0) (x (js 0)))

case succ.hc.refine_2
ι : 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
f : (ι → 𝕜) → F
f' : (ι → 𝕜) → FormalMultilinearSeries 𝕜 (ι → 𝕜) F
n : ℕ
hf : ContDiff 𝕜 (↑(Nat.succ n)) f
js : Fin (Nat.succ n) → ι
x : ι → 𝕜
ih : ∀ {js : Fin n → ι} {x : ι → 𝕜}, orderedIteratedPiDeriv js f x = (orderedIteratedFPiDeriv 𝕜 js f x) 1
⊢ DifferentiableAt 𝕜 (Function.update x (js 0)) (x (js 0))
Tactic:
. refine hf.differentiableAt_orderedIteratedFPiDeriv ?_
  norm_cast
  exact Nat.lt_succ_self n
State after:
case succ.hc.refine_2
ι : 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
f : (ι → 𝕜) → F
f' : (ι → 𝕜) → FormalMultilinearSeries 𝕜 (ι → 𝕜) F
n : ℕ
hf : ContDiff 𝕜 (↑(Nat.succ n)) f
js : Fin (Nat.succ n) → ι
x : ι → 𝕜
ih : ∀ {js : Fin n → ι} {x : ι → 𝕜}, orderedIteratedPiDeriv js f x = (orderedIteratedFPiDeriv 𝕜 js f x) 1
⊢ DifferentiableAt 𝕜 (Function.update x (js 0)) (x (js 0))

State before:
case succ.hc.refine_2
ι : 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
f : (ι → 𝕜) → F
f' : (ι → 𝕜) → FormalMultilinearSeries 𝕜 (ι → 𝕜) F
n : ℕ
hf : ContDiff 𝕜 (↑(Nat.succ n)) f
js : Fin (Nat.succ n) → ι
x : ι → 𝕜
ih : ∀ {js : Fin n → ι} {x : ι → 𝕜}, orderedIteratedPiDeriv js f x = (orderedIteratedFPiDeriv 𝕜 js f x) 1
⊢ DifferentiableAt 𝕜 (Function.update x (js 0)) (x (js 0))
Tactic:
. exact differentiable_update' x (js 0) _
State after:
no goals

State before:
case succ.hc.refine_1
ι : 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
f : (ι → 𝕜) → F
f' : (ι → 𝕜) → FormalMultilinearSeries 𝕜 (ι → 𝕜) F
n : ℕ
hf : ContDiff 𝕜 (↑(Nat.succ n)) f
js : Fin (Nat.succ n) → ι
x : ι → 𝕜
ih : ∀ {js : Fin n → ι} {x : ι → 𝕜}, orderedIteratedPiDeriv js f x = (orderedIteratedFPiDeriv 𝕜 js f x) 1
⊢ DifferentiableAt 𝕜 (orderedIteratedFPiDeriv 𝕜 (Fin.tail js) f) (Function.update x (js 0) (x (js 0)))
Tactic:
refine hf.differentiableAt_orderedIteratedFPiDeriv ?_
State after:
case succ.hc.refine_1
ι : 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
f : (ι → 𝕜) → F
f' : (ι → 𝕜) → FormalMultilinearSeries 𝕜 (ι → 𝕜) F
n : ℕ
hf : ContDiff 𝕜 (↑(Nat.succ n)) f
js : Fin (Nat.succ n) → ι
x : ι → 𝕜
ih : ∀ {js : Fin n → ι} {x : ι → 𝕜}, orderedIteratedPiDeriv js f x = (orderedIteratedFPiDeriv 𝕜 js f x) 1
⊢ ↑n < ↑(Nat.succ n)

State before:
case succ.hc.refine_1
ι : 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
f : (ι → 𝕜) → F
f' : (ι → 𝕜) → FormalMultilinearSeries 𝕜 (ι → 𝕜) F
n : ℕ
hf : ContDiff 𝕜 (↑(Nat.succ n)) f
js : Fin (Nat.succ n) → ι
x : ι → 𝕜
ih : ∀ {js : Fin n → ι} {x : ι → 𝕜}, orderedIteratedPiDeriv js f x = (orderedIteratedFPiDeriv 𝕜 js f x) 1
⊢ ↑n < ↑(Nat.succ n)
Tactic:
norm_cast
State after:
case succ.hc.refine_1
ι : 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
f : (ι → 𝕜) → F
f' : (ι → 𝕜) → FormalMultilinearSeries 𝕜 (ι → 𝕜) F
n : ℕ
hf : ContDiff 𝕜 (↑(Nat.succ n)) f
js : Fin (Nat.succ n) → ι
x : ι → 𝕜
ih : ∀ {js : Fin n → ι} {x : ι → 𝕜}, orderedIteratedPiDeriv js f x = (orderedIteratedFPiDeriv 𝕜 js f x) 1
⊢ n < Nat.succ n

State before:
case succ.hc.refine_1
ι : 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
f : (ι → 𝕜) → F
f' : (ι → 𝕜) → FormalMultilinearSeries 𝕜 (ι → 𝕜) F
n : ℕ
hf : ContDiff 𝕜 (↑(Nat.succ n)) f
js : Fin (Nat.succ n) → ι
x : ι → 𝕜
ih : ∀ {js : Fin n → ι} {x : ι → 𝕜}, orderedIteratedPiDeriv js f x = (orderedIteratedFPiDeriv 𝕜 js f x) 1
⊢ n < Nat.succ n
Tactic:
exact Nat.lt_succ_self n
State after:
no goals

State before:
case succ.hc.refine_2
ι : 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
f : (ι → 𝕜) → F
f' : (ι → 𝕜) → FormalMultilinearSeries 𝕜 (ι → 𝕜) F
n : ℕ
hf : ContDiff 𝕜 (↑(Nat.succ n)) f
js : Fin (Nat.succ n) → ι
x : ι → 𝕜
ih : ∀ {js : Fin n → ι} {x : ι → 𝕜}, orderedIteratedPiDeriv js f x = (orderedIteratedFPiDeriv 𝕜 js f x) 1
⊢ DifferentiableAt 𝕜 (Function.update x (js 0)) (x (js 0))
Tactic:
exact differentiable_update' x (js 0) _
State after:
no goals