-- File: optlib/Optlib/Algorithm/BCD/Scheme.lean
Theorem statement:
theorem extracted_formal_statement_14.{u_2, u_1} {E : Type u_1} {F : Type u_2} [inst : NormedAddCommGroup E]
  [inst_1 : InnerProductSpace ℝ E] [inst_2 : CompleteSpace E] [inst_3 : NormedAddCommGroup F]
  [inst_4 : InnerProductSpace ℝ F] [inst_5 : CompleteSpace F] {H : WithLp 2 (E × F) → ℝ} (h : Differentiable ℝ H)
  (z : WithLp 2 (E × F)) (h_original_goal : HasGradientAt (fun y => H (z.1, y)) (grad_snd H z.1 z.2) z.2) :
  DifferentiableAt ℝ (fun y => H (z.1, y)) z.2 := sorry

Tactic state before:
E : Type u_1
F : Type u_2
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : InnerProductSpace ℝ E
inst✝³ : CompleteSpace E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace ℝ F
inst✝ : CompleteSpace F
H : WithLp 2 (E × F) → ℝ
h : Differentiable ℝ H
z : WithLp 2 (E × F)
⊢ HasGradientAt (fun y => H (z.1, y)) (grad_snd H z.1 z.2) z.2

Tactic: apply DifferentiableAt.hasGradientAt

Tactic state after:
[case h
 E : Type u_1
 F : Type u_2
 inst✝⁵ : NormedAddCommGroup E
 inst✝⁴ : InnerProductSpace ℝ E
 inst✝³ : CompleteSpace E
 inst✝² : NormedAddCommGroup F
 inst✝¹ : InnerProductSpace ℝ F
 inst✝ : CompleteSpace F
 H : WithLp 2 (E × F) → ℝ
 h : Differentiable ℝ H
 z : WithLp 2 (E × F)
 ⊢ DifferentiableAt ℝ (fun y => H (z.1, y)) z.2]

Premises used:
DifferentiableAt.hasGradientAt : ∀ {𝕜 : Type u_1} {F : Type u_2} [inst : RCLike 𝕜] [inst_6 : NormedAddCommGroup F]
  [inst_7 : InnerProductSpace 𝕜 F] [inst_8 : CompleteSpace F] {f : F → 𝕜} {x : F},
  DifferentiableAt 𝕜 f x → HasGradientAt f (gradient f x) x