Theorem: contDiff_norm_rpow
File: Mathlib/Analysis/InnerProductSpace/NormPow.lean

tactic: rw [contDiff_one_iff_fderiv]
state_before: E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace ℝ E
F : Type u_2
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
p : ℝ
hp : 1 < p
⊢ ContDiff ℝ 1 fun x => ‖x‖ ^ p
state_after: E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace ℝ E
F : Type u_2
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
p : ℝ
hp : 1 < p
⊢ (Differentiable ℝ fun x => ‖x‖ ^ p) ∧ Continuous (fderiv ℝ fun x => ‖x‖ ^ p)

tactic: refine ⟨fun x ↦ hasFDerivAt_norm_rpow x hp |>.differentiableAt, ?_⟩
state_before: E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace ℝ E
F : Type u_2
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
p : ℝ
hp : 1 < p
⊢ (Differentiable ℝ fun x => ‖x‖ ^ p) ∧ Continuous (fderiv ℝ fun x => ‖x‖ ^ p)
state_after: E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace ℝ E
F : Type u_2
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
p : ℝ
hp : 1 < p
⊢ Continuous (fderiv ℝ fun x => ‖x‖ ^ p)

tactic: simp_rw [continuous_iff_continuousAt]
state_before: E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace ℝ E
F : Type u_2
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
p : ℝ
hp : 1 < p
⊢ Continuous (fderiv ℝ fun x => ‖x‖ ^ p)
state_after: E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace ℝ E
F : Type u_2
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
p : ℝ
hp : 1 < p
⊢ ∀ (x : E), ContinuousAt (fderiv ℝ fun x => ‖x‖ ^ p) x

tactic: intro x
state_before: E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace ℝ E
F : Type u_2
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
p : ℝ
hp : 1 < p
⊢ ∀ (x : E), ContinuousAt (fderiv ℝ fun x => ‖x‖ ^ p) x
state_after: E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace ℝ E
F : Type u_2
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
p : ℝ
hp : 1 < p
x : E
⊢ ContinuousAt (fderiv ℝ fun x => ‖x‖ ^ p) x

tactic: by_cases hx : x = 0
state_before: E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace ℝ E
F : Type u_2
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
p : ℝ
hp : 1 < p
x : E
⊢ ContinuousAt (fderiv ℝ fun x => ‖x‖ ^ p) x
state_after: case pos
E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace ℝ E
F : Type u_2
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
p : ℝ
hp : 1 < p
x : E
hx : x = 0
⊢ ContinuousAt (fderiv ℝ fun x => ‖x‖ ^ p) x

case neg
E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace ℝ E
F : Type u_2
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
p : ℝ
hp : 1 < p
x : E
hx : ¬x = 0
⊢ ContinuousAt (fderiv ℝ fun x => ‖x‖ ^ p) x

tactic: simp_rw [hx, ContinuousAt, fderiv_norm_rpow (0 : E) hp, norm_zero, map_zero, smul_zero]
state_before: case pos
E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace ℝ E
F : Type u_2
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
p : ℝ
hp : 1 < p
x : E
hx : x = 0
⊢ ContinuousAt (fderiv ℝ fun x => ‖x‖ ^ p) x
state_after: case pos
E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace ℝ E
F : Type u_2
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
p : ℝ
hp : 1 < p
x : E
hx : x = 0
⊢ Filter.Tendsto (fderiv ℝ fun x => ‖x‖ ^ p) (𝓝 0) (𝓝 0)

tactic: rw [tendsto_zero_iff_norm_tendsto_zero]
state_before: case pos
E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace ℝ E
F : Type u_2
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
p : ℝ
hp : 1 < p
x : E
hx : x = 0
⊢ Filter.Tendsto (fderiv ℝ fun x => ‖x‖ ^ p) (𝓝 0) (𝓝 0)
state_after: case pos
E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace ℝ E
F : Type u_2
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
p : ℝ
hp : 1 < p
x : E
hx : x = 0
⊢ Filter.Tendsto (fun x => ‖fderiv ℝ (fun x => ‖x‖ ^ p) x‖) (𝓝 0) (𝓝 0)

tactic: refine tendsto_of_tendsto_of_tendsto_of_le_of_le (tendsto_const_nhds) ?_
  (fun _ ↦ norm_nonneg _) (fun _ ↦ norm_fderiv_norm_id_rpow _ hp |>.le)
state_before: case pos
E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace ℝ E
F : Type u_2
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
p : ℝ
hp : 1 < p
x : E
hx : x = 0
⊢ Filter.Tendsto (fun x => ‖fderiv ℝ (fun x => ‖x‖ ^ p) x‖) (𝓝 0) (𝓝 0)
state_after: case pos
E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace ℝ E
F : Type u_2
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
p : ℝ
hp : 1 < p
x : E
hx : x = 0
⊢ Filter.Tendsto (fun x => p * ‖x‖ ^ (p - 1)) (𝓝 0) (𝓝 0)

tactic: suffices ContinuousAt (fun x : E ↦ p * ‖x‖ ^ (p - 1)) 0  by
  simpa [ContinuousAt, sub_ne_zero_of_ne hp.ne'] using this
state_before: case pos
E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace ℝ E
F : Type u_2
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
p : ℝ
hp : 1 < p
x : E
hx : x = 0
⊢ Filter.Tendsto (fun x => p * ‖x‖ ^ (p - 1)) (𝓝 0) (𝓝 0)
state_after: case pos
E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace ℝ E
F : Type u_2
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
p : ℝ
hp : 1 < p
x : E
hx : x = 0
⊢ ContinuousAt (fun x => p * ‖x‖ ^ (p - 1)) 0

tactic: fun_prop (discharger := simp [hp.le])
state_before: case pos
E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace ℝ E
F : Type u_2
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
p : ℝ
hp : 1 < p
x : E
hx : x = 0
⊢ ContinuousAt (fun x => p * ‖x‖ ^ (p - 1)) 0
state_after: no goals

tactic: simpa [ContinuousAt, sub_ne_zero_of_ne hp.ne'] using this
state_before: E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace ℝ E
F : Type u_2
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
p : ℝ
hp : 1 < p
x : E
hx : x = 0
this : ContinuousAt (fun x => p * ‖x‖ ^ (p - 1)) 0
⊢ Filter.Tendsto (fun x => p * ‖x‖ ^ (p - 1)) (𝓝 0) (𝓝 0)
state_after: no goals

tactic: simp [hp.le]
state_before: case funProp.discharger
E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace ℝ E
F : Type u_2
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
p : ℝ
hp : 1 < p
x : E
hx : x = 0
⊢ ‖0‖ ≠ 0 ∨ 0 ≤ p - 1
state_after: no goals

tactic: simp_rw [funext fun x ↦ fderiv_norm_rpow (E := E) (x := x) hp]
state_before: case neg
E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace ℝ E
F : Type u_2
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
p : ℝ
hp : 1 < p
x : E
hx : ¬x = 0
⊢ ContinuousAt (fderiv ℝ fun x => ‖x‖ ^ p) x
state_after: case neg
E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace ℝ E
F : Type u_2
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
p : ℝ
hp : 1 < p
x : E
hx : ¬x = 0
⊢ ContinuousAt (fun x => (p * ‖x‖ ^ (p - 2)) • (innerSL ℝ) x) x

tactic: fun_prop (discharger := simp [hx])
state_before: case neg
E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace ℝ E
F : Type u_2
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
p : ℝ
hp : 1 < p
x : E
hx : ¬x = 0
⊢ ContinuousAt (fun x => (p * ‖x‖ ^ (p - 2)) • (innerSL ℝ) x) x
state_after: no goals

tactic: simp [hx]
state_before: case funProp.discharger
E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace ℝ E
F : Type u_2
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
p : ℝ
hp : 1 < p
x : E
hx : ¬x = 0
⊢ ‖x‖ ≠ 0 ∨ 0 ≤ p - 2
state_after: no goals