Theorem: hasDerivWithinAt_taylorWithinEval
File: Mathlib/Analysis/Calculus/Taylor.lean

tactic: induction' n with k hk
state_before: 𝕜 : Type ?u.286028
E : Type u_1
F : Type ?u.286034
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
f : ℝ → E
x y : ℝ
n : ℕ
s s' : Set ℝ
hs'_unique : UniqueDiffWithinAt ℝ s' y
hs_unique : UniqueDiffOn ℝ s
hs' : s' ∈ 𝓝[s] y
hy : y ∈ s'
h : s' ⊆ s
hf : ContDiffOn ℝ (↑n) f s
hf' : DifferentiableWithinAt ℝ (iteratedDerivWithin n f s) s y
⊢ HasDerivWithinAt (fun t => taylorWithinEval f n s t x) (((↑n !)⁻¹ * (x - y) ^ n) • iteratedDerivWithin (n + 1) f s y)
    s' y

tactic: simp_rw [Nat.add_succ, taylorWithinEval_succ]
state_before: case succ
𝕜 : Type ?u.286028
E : Type u_1
F : Type ?u.286034
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
f : ℝ → E
x y : ℝ
n : ℕ
s s' : Set ℝ
hs'_unique : UniqueDiffWithinAt ℝ s' y
hs_unique : UniqueDiffOn ℝ s
hs' : s' ∈ 𝓝[s] y
hy : y ∈ s'
h : s' ⊆ s
hf✝ : ContDiffOn ℝ (↑n) f s
hf'✝ : DifferentiableWithinAt ℝ (iteratedDerivWithin n f s) s y
k : ℕ
hk :
  ContDiffOn ℝ (↑k) f s →
    DifferentiableWithinAt ℝ (iteratedDerivWithin k f s) s y →
      HasDerivWithinAt (fun t => taylorWithinEval f k s t x)
        (((↑k !)⁻¹ * (x - y) ^ k) • iteratedDerivWithin (k + 1) f s y) s' y
hf : ContDiffOn ℝ (↑(Nat.succ k)) f s
hf' : DifferentiableWithinAt ℝ (iteratedDerivWithin (Nat.succ k) f s) s y
⊢ HasDerivWithinAt (fun t => taylorWithinEval f (Nat.succ k) s t x)
    (((↑(Nat.succ k)!)⁻¹ * (x - y) ^ Nat.succ k) • iteratedDerivWithin (Nat.succ k + 1) f s y) s' y

tactic: simp only [add_zero, Nat.factorial_succ, Nat.cast_mul, Nat.cast_add, Nat.cast_one]
state_before: case succ
𝕜 : Type ?u.286028
E : Type u_1
F : Type ?u.286034
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
f : ℝ → E
x y : ℝ
n : ℕ
s s' : Set ℝ
hs'_unique : UniqueDiffWithinAt ℝ s' y
hs_unique : UniqueDiffOn ℝ s
hs' : s' ∈ 𝓝[s] y
hy : y ∈ s'
h : s' ⊆ s
hf✝ : ContDiffOn ℝ (↑n) f s
hf'✝ : DifferentiableWithinAt ℝ (iteratedDerivWithin n f s) s y
k : ℕ
hk :
  ContDiffOn ℝ (↑k) f s →
    DifferentiableWithinAt ℝ (iteratedDerivWithin k f s) s y →
      HasDerivWithinAt (fun t => taylorWithinEval f k s t x)
        (((↑k !)⁻¹ * (x - y) ^ k) • iteratedDerivWithin (k + 1) f s y) s' y
hf : ContDiffOn ℝ (↑(Nat.succ k)) f s
hf' : DifferentiableWithinAt ℝ (iteratedDerivWithin (Nat.succ k) f s) s y
⊢ HasDerivWithinAt
    (fun t =>
      taylorWithinEval f k s t x + (((↑k + 1) * ↑k !)⁻¹ * (x - t) ^ (k + 1)) • iteratedDerivWithin (k + 1) f s t)
    (((↑(Nat.succ k)!)⁻¹ * (x - y) ^ Nat.succ k) • iteratedDerivWithin (Nat.succ (Nat.succ k + 0)) f s y) s' y

tactic: have hdiff : DifferentiableOn ℝ (iteratedDerivWithin k f s) s' := by
  have coe_lt_succ : (k : WithTop ℕ) < k.succ := Nat.cast_lt.2 k.lt_succ_self
  refine' DifferentiableOn.mono _ h
  exact hf.differentiableOn_iteratedDerivWithin coe_lt_succ hs_unique
state_before: case succ
𝕜 : Type ?u.286028
E : Type u_1
F : Type ?u.286034
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
f : ℝ → E
x y : ℝ
n : ℕ
s s' : Set ℝ
hs'_unique : UniqueDiffWithinAt ℝ s' y
hs_unique : UniqueDiffOn ℝ s
hs' : s' ∈ 𝓝[s] y
hy : y ∈ s'
h : s' ⊆ s
hf✝ : ContDiffOn ℝ (↑n) f s
hf'✝ : DifferentiableWithinAt ℝ (iteratedDerivWithin n f s) s y
k : ℕ
hk :
  ContDiffOn ℝ (↑k) f s →
    DifferentiableWithinAt ℝ (iteratedDerivWithin k f s) s y →
      HasDerivWithinAt (fun t => taylorWithinEval f k s t x)
        (((↑k !)⁻¹ * (x - y) ^ k) • iteratedDerivWithin (k + 1) f s y) s' y
hf : ContDiffOn ℝ (↑(Nat.succ k)) f s
hf' : DifferentiableWithinAt ℝ (iteratedDerivWithin (Nat.succ k) f s) s y
⊢ HasDerivWithinAt
    (fun t =>
      taylorWithinEval f k s t x + (((↑k + 1) * ↑k !)⁻¹ * (x - t) ^ (k + 1)) • iteratedDerivWithin (k + 1) f s t)
    ((((↑k + 1) * ↑k !)⁻¹ * (x - y) ^ Nat.succ k) • iteratedDerivWithin (Nat.succ (Nat.succ k)) f s y) s' y

tactic: specialize hk hf.of_succ ((hdiff y hy).mono_of_mem hs')
state_before: case succ
𝕜 : Type ?u.286028
E : Type u_1
F : Type ?u.286034
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
f : ℝ → E
x y : ℝ
n : ℕ
s s' : Set ℝ
hs'_unique : UniqueDiffWithinAt ℝ s' y
hs_unique : UniqueDiffOn ℝ s
hs' : s' ∈ 𝓝[s] y
hy : y ∈ s'
h : s' ⊆ s
hf✝ : ContDiffOn ℝ (↑n) f s
hf'✝ : DifferentiableWithinAt ℝ (iteratedDerivWithin n f s) s y
k : ℕ
hk :
  ContDiffOn ℝ (↑k) f s →
    DifferentiableWithinAt ℝ (iteratedDerivWithin k f s) s y →
      HasDerivWithinAt (fun t => taylorWithinEval f k s t x)
        (((↑k !)⁻¹ * (x - y) ^ k) • iteratedDerivWithin (k + 1) f s y) s' y
hf : ContDiffOn ℝ (↑(Nat.succ k)) f s
hf' : DifferentiableWithinAt ℝ (iteratedDerivWithin (Nat.succ k) f s) s y
hdiff : DifferentiableOn ℝ (iteratedDerivWithin k f s) s'
⊢ HasDerivWithinAt
    (fun t =>
      taylorWithinEval f k s t x + (((↑k + 1) * ↑k !)⁻¹ * (x - t) ^ (k + 1)) • iteratedDerivWithin (k + 1) f s t)
    ((((↑k + 1) * ↑k !)⁻¹ * (x - y) ^ Nat.succ k) • iteratedDerivWithin (Nat.succ (Nat.succ k)) f s y) s' y

tactic: convert hk.add (hasDerivWithinAt_taylor_coeff_within hs'_unique
  (nhdsWithin_mono _ h self_mem_nhdsWithin) hf') using 1
state_before: case succ
𝕜 : Type ?u.286028
E : Type u_1
F : Type ?u.286034
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
f : ℝ → E
x y : ℝ
n : ℕ
s s' : Set ℝ
hs'_unique : UniqueDiffWithinAt ℝ s' y
hs_unique : UniqueDiffOn ℝ s
hs' : s' ∈ 𝓝[s] y
hy : y ∈ s'
h : s' ⊆ s
hf✝ : ContDiffOn ℝ (↑n) f s
hf'✝ : DifferentiableWithinAt ℝ (iteratedDerivWithin n f s) s y
k : ℕ
hf : ContDiffOn ℝ (↑(Nat.succ k)) f s
hf' : DifferentiableWithinAt ℝ (iteratedDerivWithin (Nat.succ k) f s) s y
hdiff : DifferentiableOn ℝ (iteratedDerivWithin k f s) s'
hk :
  HasDerivWithinAt (fun t => taylorWithinEval f k s t x) (((↑k !)⁻¹ * (x - y) ^ k) • iteratedDerivWithin (k + 1) f s y)
    s' y
⊢ HasDerivWithinAt
    (fun t =>
      taylorWithinEval f k s t x + (((↑k + 1) * ↑k !)⁻¹ * (x - t) ^ (k + 1)) • iteratedDerivWithin (k + 1) f s t)
    ((((↑k + 1) * ↑k !)⁻¹ * (x - y) ^ Nat.succ k) • iteratedDerivWithin (Nat.succ (Nat.succ k)) f s y) s' y

tactic: exact (add_sub_cancel'_right _ _).symm
state_before: case h.e'_7
𝕜 : Type ?u.286028
E : Type u_1
F : Type ?u.286034
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
f : ℝ → E
x y : ℝ
n : ℕ
s s' : Set ℝ
hs'_unique : UniqueDiffWithinAt ℝ s' y
hs_unique : UniqueDiffOn ℝ s
hs' : s' ∈ 𝓝[s] y
hy : y ∈ s'
h : s' ⊆ s
hf✝ : ContDiffOn ℝ (↑n) f s
hf'✝ : DifferentiableWithinAt ℝ (iteratedDerivWithin n f s) s y
k : ℕ
hf : ContDiffOn ℝ (↑(Nat.succ k)) f s
hf' : DifferentiableWithinAt ℝ (iteratedDerivWithin (Nat.succ k) f s) s y
hdiff : DifferentiableOn ℝ (iteratedDerivWithin k f s) s'
hk :
  HasDerivWithinAt (fun t => taylorWithinEval f k s t x) (((↑k !)⁻¹ * (x - y) ^ k) • iteratedDerivWithin (k + 1) f s y)
    s' y
⊢ (((↑k + 1) * ↑k !)⁻¹ * (x - y) ^ Nat.succ k) • iteratedDerivWithin (Nat.succ (Nat.succ k)) f s y =
    ((↑k !)⁻¹ * (x - y) ^ k) • iteratedDerivWithin (k + 1) f s y +
      ((((↑k + 1) * ↑k !)⁻¹ * (x - y) ^ (k + 1)) • iteratedDerivWithin (k + 2) f s y -
        ((↑k !)⁻¹ * (x - y) ^ k) • iteratedDerivWithin (k + 1) f s y)

tactic: simp only [taylor_within_zero_eval, Nat.factorial_zero, Nat.cast_one, inv_one, pow_zero,
  mul_one, zero_add, one_smul]
state_before: case zero
𝕜 : Type ?u.286028
E : Type u_1
F : Type ?u.286034
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
f : ℝ → E
x y : ℝ
n : ℕ
s s' : Set ℝ
hs'_unique : UniqueDiffWithinAt ℝ s' y
hs_unique : UniqueDiffOn ℝ s
hs' : s' ∈ 𝓝[s] y
hy : y ∈ s'
h : s' ⊆ s
hf✝ : ContDiffOn ℝ (↑n) f s
hf'✝ : DifferentiableWithinAt ℝ (iteratedDerivWithin n f s) s y
hf : ContDiffOn ℝ (↑Nat.zero) f s
hf' : DifferentiableWithinAt ℝ (iteratedDerivWithin Nat.zero f s) s y
⊢ HasDerivWithinAt (fun t => taylorWithinEval f Nat.zero s t x)
    (((↑Nat.zero !)⁻¹ * (x - y) ^ Nat.zero) • iteratedDerivWithin (Nat.zero + 1) f s y) s' y

tactic: simp only [iteratedDerivWithin_zero] at hf'
state_before: case zero
𝕜 : Type ?u.286028
E : Type u_1
F : Type ?u.286034
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
f : ℝ → E
x y : ℝ
n : ℕ
s s' : Set ℝ
hs'_unique : UniqueDiffWithinAt ℝ s' y
hs_unique : UniqueDiffOn ℝ s
hs' : s' ∈ 𝓝[s] y
hy : y ∈ s'
h : s' ⊆ s
hf✝ : ContDiffOn ℝ (↑n) f s
hf'✝ : DifferentiableWithinAt ℝ (iteratedDerivWithin n f s) s y
hf : ContDiffOn ℝ (↑Nat.zero) f s
hf' : DifferentiableWithinAt ℝ (iteratedDerivWithin Nat.zero f s) s y
⊢ HasDerivWithinAt (fun t => taylorWithinEval f Nat.zero s t x)
    (((↑Nat.zero !)⁻¹ * (x - y) ^ Nat.zero) • iteratedDerivWithin (Nat.zero + 1) f s y) s' y

tactic: rw [iteratedDerivWithin_one (hs_unique _ (h hy))]
state_before: case zero
𝕜 : Type ?u.286028
E : Type u_1
F : Type ?u.286034
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
f : ℝ → E
x y : ℝ
n : ℕ
s s' : Set ℝ
hs'_unique : UniqueDiffWithinAt ℝ s' y
hs_unique : UniqueDiffOn ℝ s
hs' : s' ∈ 𝓝[s] y
hy : y ∈ s'
h : s' ⊆ s
hf✝ : ContDiffOn ℝ (↑n) f s
hf'✝ : DifferentiableWithinAt ℝ (iteratedDerivWithin n f s) s y
hf : ContDiffOn ℝ (↑Nat.zero) f s
hf' : DifferentiableWithinAt ℝ (iteratedDerivWithin Nat.zero f s) s y
⊢ HasDerivWithinAt (fun t => taylorWithinEval f Nat.zero s t x)
    (((↑Nat.zero !)⁻¹ * (x - y) ^ Nat.zero) • iteratedDerivWithin (Nat.zero + 1) f s y) s' y

tactic: norm_num
state_before: case zero
𝕜 : Type ?u.286028
E : Type u_1
F : Type ?u.286034
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
f : ℝ → E
x y : ℝ
n : ℕ
s s' : Set ℝ
hs'_unique : UniqueDiffWithinAt ℝ s' y
hs_unique : UniqueDiffOn ℝ s
hs' : s' ∈ 𝓝[s] y
hy : y ∈ s'
h : s' ⊆ s
hf✝ : ContDiffOn ℝ (↑n) f s
hf'✝ : DifferentiableWithinAt ℝ (iteratedDerivWithin n f s) s y
hf : ContDiffOn ℝ (↑Nat.zero) f s
hf' : DifferentiableWithinAt ℝ (iteratedDerivWithin Nat.zero f s) s y
⊢ HasDerivWithinAt (fun t => taylorWithinEval f Nat.zero s t x)
    (((↑Nat.zero !)⁻¹ * (x - y) ^ Nat.zero) • derivWithin f s y) s' y

tactic: exact hf'.hasDerivWithinAt.mono h
state_before: case zero
𝕜 : Type ?u.286028
E : Type u_1
F : Type ?u.286034
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
f : ℝ → E
x y : ℝ
n : ℕ
s s' : Set ℝ
hs'_unique : UniqueDiffWithinAt ℝ s' y
hs_unique : UniqueDiffOn ℝ s
hs' : s' ∈ 𝓝[s] y
hy : y ∈ s'
h : s' ⊆ s
hf✝ : ContDiffOn ℝ (↑n) f s
hf'✝ : DifferentiableWithinAt ℝ (iteratedDerivWithin n f s) s y
hf : ContDiffOn ℝ (↑Nat.zero) f s
hf' : DifferentiableWithinAt ℝ (iteratedDerivWithin Nat.zero f s) s y
⊢ HasDerivWithinAt (fun t => f t) (derivWithin f s y) s' y

tactic: have coe_lt_succ : (k : WithTop ℕ) < k.succ := Nat.cast_lt.2 k.lt_succ_self
state_before: 𝕜 : Type ?u.286028
E : Type u_1
F : Type ?u.286034
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
f : ℝ → E
x y : ℝ
n : ℕ
s s' : Set ℝ
hs'_unique : UniqueDiffWithinAt ℝ s' y
hs_unique : UniqueDiffOn ℝ s
hs' : s' ∈ 𝓝[s] y
hy : y ∈ s'
h : s' ⊆ s
hf✝ : ContDiffOn ℝ (↑n) f s
hf'✝ : DifferentiableWithinAt ℝ (iteratedDerivWithin n f s) s y
k : ℕ
hk :
  ContDiffOn ℝ (↑k) f s →
    DifferentiableWithinAt ℝ (iteratedDerivWithin k f s) s y →
      HasDerivWithinAt (fun t => taylorWithinEval f k s t x)
        (((↑k !)⁻¹ * (x - y) ^ k) • iteratedDerivWithin (k + 1) f s y) s' y
hf : ContDiffOn ℝ (↑(Nat.succ k)) f s
hf' : DifferentiableWithinAt ℝ (iteratedDerivWithin (Nat.succ k) f s) s y
⊢ DifferentiableOn ℝ (iteratedDerivWithin k f s) s'

tactic: refine' DifferentiableOn.mono _ h
state_before: 𝕜 : Type ?u.286028
E : Type u_1
F : Type ?u.286034
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
f : ℝ → E
x y : ℝ
n : ℕ
s s' : Set ℝ
hs'_unique : UniqueDiffWithinAt ℝ s' y
hs_unique : UniqueDiffOn ℝ s
hs' : s' ∈ 𝓝[s] y
hy : y ∈ s'
h : s' ⊆ s
hf✝ : ContDiffOn ℝ (↑n) f s
hf'✝ : DifferentiableWithinAt ℝ (iteratedDerivWithin n f s) s y
k : ℕ
hk :
  ContDiffOn ℝ (↑k) f s →
    DifferentiableWithinAt ℝ (iteratedDerivWithin k f s) s y →
      HasDerivWithinAt (fun t => taylorWithinEval f k s t x)
        (((↑k !)⁻¹ * (x - y) ^ k) • iteratedDerivWithin (k + 1) f s y) s' y
hf : ContDiffOn ℝ (↑(Nat.succ k)) f s
hf' : DifferentiableWithinAt ℝ (iteratedDerivWithin (Nat.succ k) f s) s y
coe_lt_succ : ↑k < ↑(Nat.succ k)
⊢ DifferentiableOn ℝ (iteratedDerivWithin k f s) s'

tactic: exact hf.differentiableOn_iteratedDerivWithin coe_lt_succ hs_unique
state_before: 𝕜 : Type ?u.286028
E : Type u_1
F : Type ?u.286034
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
f : ℝ → E
x y : ℝ
n : ℕ
s s' : Set ℝ
hs'_unique : UniqueDiffWithinAt ℝ s' y
hs_unique : UniqueDiffOn ℝ s
hs' : s' ∈ 𝓝[s] y
hy : y ∈ s'
h : s' ⊆ s
hf✝ : ContDiffOn ℝ (↑n) f s
hf'✝ : DifferentiableWithinAt ℝ (iteratedDerivWithin n f s) s y
k : ℕ
hk :
  ContDiffOn ℝ (↑k) f s →
    DifferentiableWithinAt ℝ (iteratedDerivWithin k f s) s y →
      HasDerivWithinAt (fun t => taylorWithinEval f k s t x)
        (((↑k !)⁻¹ * (x - y) ^ k) • iteratedDerivWithin (k + 1) f s y) s' y
hf : ContDiffOn ℝ (↑(Nat.succ k)) f s
hf' : DifferentiableWithinAt ℝ (iteratedDerivWithin (Nat.succ k) f s) s y
coe_lt_succ : ↑k < ↑(Nat.succ k)
⊢ DifferentiableOn ℝ (iteratedDerivWithin k f s) s