Theorem: contDiffWithinAt_succ_iff_hasFDerivWithinAt'
File: Mathlib/Analysis/Calculus/ContDiffDef.lean

tactic: refine' ⟨fun hf => _, _⟩
state_before: 𝕜 : Type u
inst✝⁸ : NontriviallyNormedField 𝕜
E : Type uE
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
F : Type uF
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : NormedSpace 𝕜 F
G : Type uG
inst✝³ : NormedAddCommGroup G
inst✝² : NormedSpace 𝕜 G
X : Type uX
inst✝¹ : NormedAddCommGroup X
inst✝ : NormedSpace 𝕜 X
s s₁ t u : Set E
f f₁ : E → F
g : F → G
x x₀ : E
c : F
m n✝ : ℕ∞
p : E → FormalMultilinearSeries 𝕜 E F
n : ℕ
⊢ ContDiffWithinAt 𝕜 (↑(n + 1)) f s x ↔
    ∃ u,
      u ∈ 𝓝[insert x s] x ∧
        u ⊆ insert x s ∧ ∃ f', (∀ (x : E), x ∈ u → HasFDerivWithinAt f (f' x) s x) ∧ ContDiffWithinAt 𝕜 (↑n) f' s x

tactic: obtain ⟨u, hu, f', huf', hf'⟩ := contDiffWithinAt_succ_iff_hasFDerivWithinAt.mp hf
state_before: case refine'_1
𝕜 : Type u
inst✝⁸ : NontriviallyNormedField 𝕜
E : Type uE
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
F : Type uF
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : NormedSpace 𝕜 F
G : Type uG
inst✝³ : NormedAddCommGroup G
inst✝² : NormedSpace 𝕜 G
X : Type uX
inst✝¹ : NormedAddCommGroup X
inst✝ : NormedSpace 𝕜 X
s s₁ t u : Set E
f f₁ : E → F
g : F → G
x x₀ : E
c : F
m n✝ : ℕ∞
p : E → FormalMultilinearSeries 𝕜 E F
n : ℕ
hf : ContDiffWithinAt 𝕜 (↑(n + 1)) f s x
⊢ ∃ u,
    u ∈ 𝓝[insert x s] x ∧
      u ⊆ insert x s ∧ ∃ f', (∀ (x : E), x ∈ u → HasFDerivWithinAt f (f' x) s x) ∧ ContDiffWithinAt 𝕜 (↑n) f' s x

tactic: obtain ⟨w, hw, hxw, hwu⟩ := mem_nhdsWithin.mp hu
state_before: case refine'_1.intro.intro.intro.intro
𝕜 : Type u
inst✝⁸ : NontriviallyNormedField 𝕜
E : Type uE
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
F : Type uF
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : NormedSpace 𝕜 F
G : Type uG
inst✝³ : NormedAddCommGroup G
inst✝² : NormedSpace 𝕜 G
X : Type uX
inst✝¹ : NormedAddCommGroup X
inst✝ : NormedSpace 𝕜 X
s s₁ t u✝ : Set E
f f₁ : E → F
g : F → G
x x₀ : E
c : F
m n✝ : ℕ∞
p : E → FormalMultilinearSeries 𝕜 E F
n : ℕ
hf : ContDiffWithinAt 𝕜 (↑(n + 1)) f s x
u : Set E
hu : u ∈ 𝓝[insert x s] x
f' : E → E →L[𝕜] F
huf' : ∀ (x : E), x ∈ u → HasFDerivWithinAt f (f' x) u x
hf' : ContDiffWithinAt 𝕜 (↑n) f' u x
⊢ ∃ u,
    u ∈ 𝓝[insert x s] x ∧
      u ⊆ insert x s ∧ ∃ f', (∀ (x : E), x ∈ u → HasFDerivWithinAt f (f' x) s x) ∧ ContDiffWithinAt 𝕜 (↑n) f' s x

tactic: rw [inter_comm] at hwu
state_before: case refine'_1.intro.intro.intro.intro.intro.intro.intro
𝕜 : Type u
inst✝⁸ : NontriviallyNormedField 𝕜
E : Type uE
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
F : Type uF
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : NormedSpace 𝕜 F
G : Type uG
inst✝³ : NormedAddCommGroup G
inst✝² : NormedSpace 𝕜 G
X : Type uX
inst✝¹ : NormedAddCommGroup X
inst✝ : NormedSpace 𝕜 X
s s₁ t u✝ : Set E
f f₁ : E → F
g : F → G
x x₀ : E
c : F
m n✝ : ℕ∞
p : E → FormalMultilinearSeries 𝕜 E F
n : ℕ
hf : ContDiffWithinAt 𝕜 (↑(n + 1)) f s x
u : Set E
hu : u ∈ 𝓝[insert x s] x
f' : E → E →L[𝕜] F
huf' : ∀ (x : E), x ∈ u → HasFDerivWithinAt f (f' x) u x
hf' : ContDiffWithinAt 𝕜 (↑n) f' u x
w : Set E
hw : IsOpen w
hxw : x ∈ w
hwu : w ∩ insert x s ⊆ u
⊢ ∃ u,
    u ∈ 𝓝[insert x s] x ∧
      u ⊆ insert x s ∧ ∃ f', (∀ (x : E), x ∈ u → HasFDerivWithinAt f (f' x) s x) ∧ ContDiffWithinAt 𝕜 (↑n) f' s x

tactic: refine' ⟨insert x s ∩ w, inter_mem_nhdsWithin _ (hw.mem_nhds hxw), inter_subset_left _ _, f',
  fun y hy => _, _⟩
state_before: case refine'_1.intro.intro.intro.intro.intro.intro.intro
𝕜 : Type u
inst✝⁸ : NontriviallyNormedField 𝕜
E : Type uE
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
F : Type uF
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : NormedSpace 𝕜 F
G : Type uG
inst✝³ : NormedAddCommGroup G
inst✝² : NormedSpace 𝕜 G
X : Type uX
inst✝¹ : NormedAddCommGroup X
inst✝ : NormedSpace 𝕜 X
s s₁ t u✝ : Set E
f f₁ : E → F
g : F → G
x x₀ : E
c : F
m n✝ : ℕ∞
p : E → FormalMultilinearSeries 𝕜 E F
n : ℕ
hf : ContDiffWithinAt 𝕜 (↑(n + 1)) f s x
u : Set E
hu : u ∈ 𝓝[insert x s] x
f' : E → E →L[𝕜] F
huf' : ∀ (x : E), x ∈ u → HasFDerivWithinAt f (f' x) u x
hf' : ContDiffWithinAt 𝕜 (↑n) f' u x
w : Set E
hw : IsOpen w
hxw : x ∈ w
hwu : insert x s ∩ w ⊆ u
⊢ ∃ u,
    u ∈ 𝓝[insert x s] x ∧
      u ⊆ insert x s ∧ ∃ f', (∀ (x : E), x ∈ u → HasFDerivWithinAt f (f' x) s x) ∧ ContDiffWithinAt 𝕜 (↑n) f' s x

tactic: refine' ((huf' y <| hwu hy).mono hwu).mono_of_mem _
state_before: case refine'_1.intro.intro.intro.intro.intro.intro.intro.refine'_1
𝕜 : Type u
inst✝⁸ : NontriviallyNormedField 𝕜
E : Type uE
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
F : Type uF
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : NormedSpace 𝕜 F
G : Type uG
inst✝³ : NormedAddCommGroup G
inst✝² : NormedSpace 𝕜 G
X : Type uX
inst✝¹ : NormedAddCommGroup X
inst✝ : NormedSpace 𝕜 X
s s₁ t u✝ : Set E
f f₁ : E → F
g : F → G
x x₀ : E
c : F
m n✝ : ℕ∞
p : E → FormalMultilinearSeries 𝕜 E F
n : ℕ
hf : ContDiffWithinAt 𝕜 (↑(n + 1)) f s x
u : Set E
hu : u ∈ 𝓝[insert x s] x
f' : E → E →L[𝕜] F
huf' : ∀ (x : E), x ∈ u → HasFDerivWithinAt f (f' x) u x
hf' : ContDiffWithinAt 𝕜 (↑n) f' u x
w : Set E
hw : IsOpen w
hxw : x ∈ w
hwu : insert x s ∩ w ⊆ u
y : E
hy : y ∈ insert x s ∩ w
⊢ HasFDerivWithinAt f (f' y) s y

tactic: refine' mem_of_superset _ (inter_subset_inter_left _ (subset_insert _ _))
state_before: case refine'_1.intro.intro.intro.intro.intro.intro.intro.refine'_1
𝕜 : Type u
inst✝⁸ : NontriviallyNormedField 𝕜
E : Type uE
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
F : Type uF
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : NormedSpace 𝕜 F
G : Type uG
inst✝³ : NormedAddCommGroup G
inst✝² : NormedSpace 𝕜 G
X : Type uX
inst✝¹ : NormedAddCommGroup X
inst✝ : NormedSpace 𝕜 X
s s₁ t u✝ : Set E
f f₁ : E → F
g : F → G
x x₀ : E
c : F
m n✝ : ℕ∞
p : E → FormalMultilinearSeries 𝕜 E F
n : ℕ
hf : ContDiffWithinAt 𝕜 (↑(n + 1)) f s x
u : Set E
hu : u ∈ 𝓝[insert x s] x
f' : E → E →L[𝕜] F
huf' : ∀ (x : E), x ∈ u → HasFDerivWithinAt f (f' x) u x
hf' : ContDiffWithinAt 𝕜 (↑n) f' u x
w : Set E
hw : IsOpen w
hxw : x ∈ w
hwu : insert x s ∩ w ⊆ u
y : E
hy : y ∈ insert x s ∩ w
⊢ insert x s ∩ w ∈ 𝓝[s] y

tactic: refine' inter_mem_nhdsWithin _ (hw.mem_nhds hy.2)
state_before: case refine'_1.intro.intro.intro.intro.intro.intro.intro.refine'_1
𝕜 : Type u
inst✝⁸ : NontriviallyNormedField 𝕜
E : Type uE
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
F : Type uF
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : NormedSpace 𝕜 F
G : Type uG
inst✝³ : NormedAddCommGroup G
inst✝² : NormedSpace 𝕜 G
X : Type uX
inst✝¹ : NormedAddCommGroup X
inst✝ : NormedSpace 𝕜 X
s s₁ t u✝ : Set E
f f₁ : E → F
g : F → G
x x₀ : E
c : F
m n✝ : ℕ∞
p : E → FormalMultilinearSeries 𝕜 E F
n : ℕ
hf : ContDiffWithinAt 𝕜 (↑(n + 1)) f s x
u : Set E
hu : u ∈ 𝓝[insert x s] x
f' : E → E →L[𝕜] F
huf' : ∀ (x : E), x ∈ u → HasFDerivWithinAt f (f' x) u x
hf' : ContDiffWithinAt 𝕜 (↑n) f' u x
w : Set E
hw : IsOpen w
hxw : x ∈ w
hwu : insert x s ∩ w ⊆ u
y : E
hy : y ∈ insert x s ∩ w
⊢ s ∩ w ∈ 𝓝[s] y

tactic: exact hf'.mono_of_mem (nhdsWithin_mono _ (subset_insert _ _) hu)
state_before: case refine'_1.intro.intro.intro.intro.intro.intro.intro.refine'_2
𝕜 : Type u
inst✝⁸ : NontriviallyNormedField 𝕜
E : Type uE
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
F : Type uF
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : NormedSpace 𝕜 F
G : Type uG
inst✝³ : NormedAddCommGroup G
inst✝² : NormedSpace 𝕜 G
X : Type uX
inst✝¹ : NormedAddCommGroup X
inst✝ : NormedSpace 𝕜 X
s s₁ t u✝ : Set E
f f₁ : E → F
g : F → G
x x₀ : E
c : F
m n✝ : ℕ∞
p : E → FormalMultilinearSeries 𝕜 E F
n : ℕ
hf : ContDiffWithinAt 𝕜 (↑(n + 1)) f s x
u : Set E
hu : u ∈ 𝓝[insert x s] x
f' : E → E →L[𝕜] F
huf' : ∀ (x : E), x ∈ u → HasFDerivWithinAt f (f' x) u x
hf' : ContDiffWithinAt 𝕜 (↑n) f' u x
w : Set E
hw : IsOpen w
hxw : x ∈ w
hwu : insert x s ∩ w ⊆ u
⊢ ContDiffWithinAt 𝕜 (↑n) f' s x

tactic: rw [← contDiffWithinAt_insert, contDiffWithinAt_succ_iff_hasFDerivWithinAt,
  insert_eq_of_mem (mem_insert _ _)]
state_before: case refine'_2
𝕜 : Type u
inst✝⁸ : NontriviallyNormedField 𝕜
E : Type uE
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
F : Type uF
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : NormedSpace 𝕜 F
G : Type uG
inst✝³ : NormedAddCommGroup G
inst✝² : NormedSpace 𝕜 G
X : Type uX
inst✝¹ : NormedAddCommGroup X
inst✝ : NormedSpace 𝕜 X
s s₁ t u : Set E
f f₁ : E → F
g : F → G
x x₀ : E
c : F
m n✝ : ℕ∞
p : E → FormalMultilinearSeries 𝕜 E F
n : ℕ
⊢ (∃ u,
      u ∈ 𝓝[insert x s] x ∧
        u ⊆ insert x s ∧ ∃ f', (∀ (x : E), x ∈ u → HasFDerivWithinAt f (f' x) s x) ∧ ContDiffWithinAt 𝕜 (↑n) f' s x) →
    ContDiffWithinAt 𝕜 (↑(n + 1)) f s x

tactic: rintro ⟨u, hu, hus, f', huf', hf'⟩
state_before: case refine'_2
𝕜 : Type u
inst✝⁸ : NontriviallyNormedField 𝕜
E : Type uE
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
F : Type uF
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : NormedSpace 𝕜 F
G : Type uG
inst✝³ : NormedAddCommGroup G
inst✝² : NormedSpace 𝕜 G
X : Type uX
inst✝¹ : NormedAddCommGroup X
inst✝ : NormedSpace 𝕜 X
s s₁ t u : Set E
f f₁ : E → F
g : F → G
x x₀ : E
c : F
m n✝ : ℕ∞
p : E → FormalMultilinearSeries 𝕜 E F
n : ℕ
⊢ (∃ u,
      u ∈ 𝓝[insert x s] x ∧
        u ⊆ insert x s ∧ ∃ f', (∀ (x : E), x ∈ u → HasFDerivWithinAt f (f' x) s x) ∧ ContDiffWithinAt 𝕜 (↑n) f' s x) →
    ∃ u,
      u ∈ 𝓝[insert x s] x ∧ ∃ f', (∀ (x : E), x ∈ u → HasFDerivWithinAt f (f' x) u x) ∧ ContDiffWithinAt 𝕜 (↑n) f' u x

tactic: refine' ⟨u, hu, f', fun y hy => (huf' y hy).insert'.mono hus, hf'.insert.mono hus⟩
state_before: case refine'_2.intro.intro.intro.intro.intro
𝕜 : Type u
inst✝⁸ : NontriviallyNormedField 𝕜
E : Type uE
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
F : Type uF
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : NormedSpace 𝕜 F
G : Type uG
inst✝³ : NormedAddCommGroup G
inst✝² : NormedSpace 𝕜 G
X : Type uX
inst✝¹ : NormedAddCommGroup X
inst✝ : NormedSpace 𝕜 X
s s₁ t u✝ : Set E
f f₁ : E → F
g : F → G
x x₀ : E
c : F
m n✝ : ℕ∞
p : E → FormalMultilinearSeries 𝕜 E F
n : ℕ
u : Set E
hu : u ∈ 𝓝[insert x s] x
hus : u ⊆ insert x s
f' : E → E →L[𝕜] F
huf' : ∀ (x : E), x ∈ u → HasFDerivWithinAt f (f' x) s x
hf' : ContDiffWithinAt 𝕜 (↑n) f' s x
⊢ ∃ u, u ∈ 𝓝[insert x s] x ∧ ∃ f', (∀ (x : E), x ∈ u → HasFDerivWithinAt f (f' x) u x) ∧ ContDiffWithinAt 𝕜 (↑n) f' u x