-- File: optlib/Optlib/Algorithm/SubgradientMethod.lean
Theorem statement:
theorem extracted_formal_statement_37.{u_1} {E : Type u_1} [inst : NormedAddCommGroup E] [inst_1 : InnerProductSpace ℝ E]
  {f : E → ℝ} (xm x₀ : E) {alg : subgradient_method f x₀}
  (h' : ∀ ⦃x g : E⦄, g ∈ SubderivAt f x → ‖g‖ ≤ ↑(subgradient_method.G f x₀))
  (hk₀ : f xm ≥ f (subgradient_method.x f x₀ 0) + ⟪subgradient_method.g f x₀ 0, xm - subgradient_method.x f x₀ 0⟫_ℝ)
  (h₀' : ‖subgradient_method.g f x₀ 0‖ ≤ ↑(subgradient_method.G f x₀))
  (this : f (subgradient_method.x f x₀ 0) - f xm ≤ -⟪subgradient_method.g f x₀ 0, xm - subgradient_method.x f x₀ 0⟫_ℝ) :
  ‖x₀ - xm‖ * ‖subgradient_method.g f x₀ 0‖ ≤ ‖x₀ - xm‖ * ↑(subgradient_method.G f x₀) := sorry

Tactic state before:
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : InnerProductSpace ℝ E
f : E → ℝ
xm x₀ : E
alg : subgradient_method f x₀
k : ℕ
h' : ∀ ⦃x g : E⦄, g ∈ SubderivAt f x → ‖g‖ ≤ ↑(subgradient_method.G f x₀)
k₀ : k = 0
hk₀ : f xm ≥ f (subgradient_method.x f x₀ 0) + ⟪subgradient_method.g f x₀ 0, xm - subgradient_method.x f x₀ 0⟫_ℝ
h₀' : ‖subgradient_method.g f x₀ 0‖ ≤ ↑(subgradient_method.G f x₀)
this : f (subgradient_method.x f x₀ 0) - f xm ≤ -⟪subgradient_method.g f x₀ 0, xm - subgradient_method.x f x₀ 0⟫_ℝ
⊢ ‖x₀ - xm‖ * ‖subgradient_method.g f x₀ 0‖ ≤ ‖x₀ - xm‖ * ↑(subgradient_method.G f x₀)

Tactic: apply mul_le_mul_of_nonneg_left h₀' (norm_nonneg _)

Tactic state after:

Premises used:
mul_le_mul_of_nonneg_left : ∀ {α : Type u_3} {a b c : α} [inst : Mul α] [inst_2 : Zero α] [inst_3 : Preorder α]
  [inst_4 : PosMulMono α], b ≤ c → 0 ≤ a → a * b ≤ a * c
norm_nonneg : ∀ {E : Type u_5} [inst : SeminormedAddGroup E] (a : E), 0 ≤ ‖a‖