-- File: optlib/Optlib/Algorithm/SubgradientMethod.lean
Theorem statement:
theorem extracted_formal_statement_137 : 0 ≤ 2 := sorry

Tactic state before:
case h
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : InnerProductSpace ℝ E
inst✝ : CompleteSpace E
f : E → ℝ
xm x₀ : E
alg : subgradient_method f x₀
s : ℝ
hm : IsMinOn f Set.univ xm
ha' : ∀ (n : ℕ), subgradient_method.a f x₀ n * ‖subgradient_method.g f x₀ n‖ = s
hs : s > 0
k : ℕ
heq :
  (Set.range fun x => f (subgradient_method.x f x₀ ↑x)) =
    {x | ∃ i ∈ Finset.range (k + 1), f (subgradient_method.x f x₀ i) = x}
hnek : Nonempty { x // x ∈ Finset.range (k + 1) }
h' : ∀ ⦃x g : E⦄, g ∈ SubderivAt f x → ‖g‖ ≤ ↑(subgradient_method.G f x₀)
h₁ :
  ∀ ⦃i : ℕ⦄,
    i ≥ 0 ∧ i ≤ k →
      ‖subgradient_method.x f x₀ (i + 1) - xm‖ ^ 2 ≤
        ‖subgradient_method.x f x₀ i - xm‖ ^ 2 -
            2 * subgradient_method.a f x₀ i *
              (sInf {x | ∃ i ∈ Finset.range (k + 1), f (subgradient_method.x f x₀ i) = x} - f xm) +
          ‖subgradient_method.a f x₀ i‖ ^ 2 * ‖subgradient_method.g f x₀ i‖ ^ 2
h₁' :
  ∀ ⦃i : ℕ⦄,
    i ≥ 0 ∧ i ≤ k →
      subgradient_method.a f x₀ i *
          (2 * (sInf {x | ∃ i ∈ Finset.range (k + 1), f (subgradient_method.x f x₀ i) = x} - f xm)) ≤
        ‖subgradient_method.x f x₀ i - xm‖ ^ 2 - ‖subgradient_method.x f x₀ (i + 1) - xm‖ ^ 2 + s ^ 2
h₂ :
  (2 * ∑ i ∈ Finset.range (k + 1), subgradient_method.a f x₀ i) *
      (sInf {x | ∃ i < k + 1, f (subgradient_method.x f x₀ i) = x} - f xm) ≤
    ‖x₀ - xm‖ ^ 2 - ‖subgradient_method.x f x₀ (k + 1) - xm‖ ^ 2 + (↑k + 1) * s ^ 2
hG : ↑(subgradient_method.G f x₀) > 0
inq₁ : ∑ x ∈ Finset.range (k + 1), subgradient_method.a f x₀ x ≥ (↑k + 1) * (s / ↑(subgradient_method.G f x₀))
hpos₁ : (↑k + 1) * (s / ↑(subgradient_method.G f x₀)) > 0
hpos₁' : 2 * (↑k + 1) * (s / ↑(subgradient_method.G f x₀)) > 0
⊢ 2 * ((↑k + 1) * (s / ↑(subgradient_method.G f x₀))) ≤ 2 * ∑ i ∈ Finset.range (k + 1), subgradient_method.a f x₀ i

Tactic: apply mul_le_mul_of_nonneg_left

Tactic state after:
[case h.h
 E : Type u_1
 inst✝² : NormedAddCommGroup E
 inst✝¹ : InnerProductSpace ℝ E
 inst✝ : CompleteSpace E
 f : E → ℝ
 xm x₀ : E
 alg : subgradient_method f x₀
 s : ℝ
 hm : IsMinOn f Set.univ xm
 ha' : ∀ (n : ℕ), subgradient_method.a f x₀ n * ‖subgradient_method.g f x₀ n‖ = s
 hs : s > 0
 k : ℕ
 heq :
   (Set.range fun x => f (subgradient_method.x f x₀ ↑x)) =
     {x | ∃ i ∈ Finset.range (k + 1), f (subgradient_method.x f x₀ i) = x}
 hnek : Nonempty { x // x ∈ Finset.range (k + 1) }
 h' : ∀ ⦃x g : E⦄, g ∈ SubderivAt f x → ‖g‖ ≤ ↑(subgradient_method.G f x₀)
 h₁ :
   ∀ ⦃i : ℕ⦄,
     i ≥ 0 ∧ i ≤ k →
       ‖subgradient_method.x f x₀ (i + 1) - xm‖ ^ 2 ≤
         ‖subgradient_method.x f x₀ i - xm‖ ^ 2 -
             2 * subgradient_method.a f x₀ i *
               (sInf {x | ∃ i ∈ Finset.range (k + 1), f (subgradient_method.x f x₀ i) = x} - f xm) +
           ‖subgradient_method.a f x₀ i‖ ^ 2 * ‖subgradient_method.g f x₀ i‖ ^ 2
 h₁' :
   ∀ ⦃i : ℕ⦄,
     i ≥ 0 ∧ i ≤ k →
       subgradient_method.a f x₀ i *
           (2 * (sInf {x | ∃ i ∈ Finset.range (k + 1), f (subgradient_method.x f x₀ i) = x} - f xm)) ≤
         ‖subgradient_method.x f x₀ i - xm‖ ^ 2 - ‖subgradient_method.x f x₀ (i + 1) - xm‖ ^ 2 + s ^ 2
 h₂ :
   (2 * ∑ i ∈ Finset.range (k + 1), subgradient_method.a f x₀ i) *
       (sInf {x | ∃ i < k + 1, f (subgradient_method.x f x₀ i) = x} - f xm) ≤
     ‖x₀ - xm‖ ^ 2 - ‖subgradient_method.x f x₀ (k + 1) - xm‖ ^ 2 + (↑k + 1) * s ^ 2
 hG : ↑(subgradient_method.G f x₀) > 0
 inq₁ : ∑ x ∈ Finset.range (k + 1), subgradient_method.a f x₀ x ≥ (↑k + 1) * (s / ↑(subgradient_method.G f x₀))
 hpos₁ : (↑k + 1) * (s / ↑(subgradient_method.G f x₀)) > 0
 hpos₁' : 2 * (↑k + 1) * (s / ↑(subgradient_method.G f x₀)) > 0
 ⊢ (↑k + 1) * (s / ↑(subgradient_method.G f x₀)) ≤ ∑ i ∈ Finset.range (k + 1), subgradient_method.a f x₀ i,
 case h.a0
 E : Type u_1
 inst✝² : NormedAddCommGroup E
 inst✝¹ : InnerProductSpace ℝ E
 inst✝ : CompleteSpace E
 f : E → ℝ
 xm x₀ : E
 alg : subgradient_method f x₀
 s : ℝ
 hm : IsMinOn f Set.univ xm
 ha' : ∀ (n : ℕ), subgradient_method.a f x₀ n * ‖subgradient_method.g f x₀ n‖ = s
 hs : s > 0
 k : ℕ
 heq :
   (Set.range fun x => f (subgradient_method.x f x₀ ↑x)) =
     {x | ∃ i ∈ Finset.range (k + 1), f (subgradient_method.x f x₀ i) = x}
 hnek : Nonempty { x // x ∈ Finset.range (k + 1) }
 h' : ∀ ⦃x g : E⦄, g ∈ SubderivAt f x → ‖g‖ ≤ ↑(subgradient_method.G f x₀)
 h₁ :
   ∀ ⦃i : ℕ⦄,
     i ≥ 0 ∧ i ≤ k →
       ‖subgradient_method.x f x₀ (i + 1) - xm‖ ^ 2 ≤
         ‖subgradient_method.x f x₀ i - xm‖ ^ 2 -
             2 * subgradient_method.a f x₀ i *
               (sInf {x | ∃ i ∈ Finset.range (k + 1), f (subgradient_method.x f x₀ i) = x} - f xm) +
           ‖subgradient_method.a f x₀ i‖ ^ 2 * ‖subgradient_method.g f x₀ i‖ ^ 2
 h₁' :
   ∀ ⦃i : ℕ⦄,
     i ≥ 0 ∧ i ≤ k →
       subgradient_method.a f x₀ i *
           (2 * (sInf {x | ∃ i ∈ Finset.range (k + 1), f (subgradient_method.x f x₀ i) = x} - f xm)) ≤
         ‖subgradient_method.x f x₀ i - xm‖ ^ 2 - ‖subgradient_method.x f x₀ (i + 1) - xm‖ ^ 2 + s ^ 2
 h₂ :
   (2 * ∑ i ∈ Finset.range (k + 1), subgradient_method.a f x₀ i) *
       (sInf {x | ∃ i < k + 1, f (subgradient_method.x f x₀ i) = x} - f xm) ≤
     ‖x₀ - xm‖ ^ 2 - ‖subgradient_method.x f x₀ (k + 1) - xm‖ ^ 2 + (↑k + 1) * s ^ 2
 hG : ↑(subgradient_method.G f x₀) > 0
 inq₁ : ∑ x ∈ Finset.range (k + 1), subgradient_method.a f x₀ x ≥ (↑k + 1) * (s / ↑(subgradient_method.G f x₀))
 hpos₁ : (↑k + 1) * (s / ↑(subgradient_method.G f x₀)) > 0
 hpos₁' : 2 * (↑k + 1) * (s / ↑(subgradient_method.G f x₀)) > 0
 ⊢ 0 ≤ 2]

Premises used:
mul_le_mul_of_nonneg_left : ∀ {α : Type u_3} {a b c : α} [inst : Mul α] [inst_1 : Zero α] [inst_2 : Preorder α]
  [inst_3 : PosMulMono α], b ≤ c → 0 ≤ a → a * b ≤ a * c