-- File: optlib/Optlib/Algorithm/BCD/Scheme.lean
Theorem statement:
theorem extracted_formal_statement_7.{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 x => H (x, z.2)) (grad_fst H z.2 z.1) z.1) :
  DifferentiableAt ℝ (fun x => H (x, z.2)) z.1 := 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 x => H (x, z.2)) (grad_fst H z.2 z.1) z.1

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 x => H (x, z.2)) z.1]

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