-- File: optlib/Optlib/Algorithm/SubgradientMethod.lean
Theorem statement:
theorem extracted_formal_statement_16.{u_1} {E : Type u_1} [inst : NormedAddCommGroup E] [inst_1 : InnerProductSpace ℝ E]
  {f : E → ℝ} {G : NNReal} (h : ∀ (x y : E), edist (f x) (f y) ≤ ↑G * edist x y) (x g : E) (h₂ : g ∈ SubderivAt f x)
  (h₃ : ↑G < ‖g‖) :
  let y := x + (1 / ‖g‖) • g;
  y = x + (1 / ‖g‖) • g → f y ≥ f x + ⟪g, y - x⟫_ℝ → ‖g‖ ≠ 0 → ‖g‖ ^ 2 = ‖g‖ * ‖g‖ := sorry

Tactic state before:
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : InnerProductSpace ℝ E
f : E → ℝ
G : NNReal
h : ∀ (x y : E), edist (f x) (f y) ≤ ↑G * edist x y
x g : E
h₂ : g ∈ SubderivAt f x
h₃ : ↑G < ‖g‖
y : E := x + (1 / ‖g‖) • g
hy : y = x + (1 / ‖g‖) • g
hy₂ : f y ≥ f x + ⟪g, y - x⟫_ℝ
hg₁ : ‖g‖ ≠ 0
⊢ ‖g‖ ^ 2 = ‖g‖ * ‖g‖

Tactic: apply pow_two

Tactic state after:

Premises used:
pow_two : ∀ {M : Type u_2} [inst : Monoid M] (a : M), a ^ 2 = a * a