zzhisthebest/LeanBenchmark huggingface dataset:
import Mathlib
import Optlib


open Set Real

open Set Real PNat

theorem extracted_formal_statement_2.{u_1} {E : Type u_1} [inst : NormedAddCommGroup E] [inst_1 : InnerProductSpace ℝ E]
  [inst_2 : CompleteSpace E] {x0 : E} {f h : E → ℝ} {f' : E → E} {alg : Nesterov_second f h f' x0} {xm : E}
  (minφ : IsMinOn (f + h) univ xm) :
  let φ := fun z => f z + h z;
  (∀ (z : E), φ z = f z + h z) →
    ∀ (k : ℕ+),
      Nesterov_second.y f h f' x0 (↑k - 1) -
              (Nesterov_second.t f h f' x0 ↑k / Nesterov_second.γ f h f' x0 ↑k) • f' (Nesterov_second.z f h f' x0 k) -
            Nesterov_second.y f h f' x0 ↑k ∈
          SubderivAt ((Nesterov_second.t f h f' x0 ↑k / Nesterov_second.γ f h f' x0 ↑k) • h)
            (Nesterov_second.y f h f' x0 ↑k) →
        SubderivAt (Nesterov_second.t f h f' x0 ↑k • h) (Nesterov_second.y f h f' x0 ↑k) =
            Nesterov_second.γ f h f' x0 ↑k •
              SubderivAt ((Nesterov_second.t f h f' x0 ↑k / Nesterov_second.γ f h f' x0 ↑k) • h)
                (Nesterov_second.y f h f' x0 ↑k) →
          Nesterov_second.γ f h f' x0 ↑k •
              (Nesterov_second.y f h f' x0 (↑k - 1) -
                  (Nesterov_second.t f h f' x0 ↑k / Nesterov_second.γ f h f' x0 ↑k) •
                    f' (Nesterov_second.z f h f' x0 k) -
                Nesterov_second.y f h f' x0 ↑k) =
            Nesterov_second.γ f h f' x0 ↑k • (Nesterov_second.y f h f' x0 (↑k - 1) - Nesterov_second.y f h f' x0 ↑k) -
              Nesterov_second.t f h f' x0 ↑k • f' (Nesterov_second.z f h f' x0 k) := sorry

Tactic state before:
case h.right
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : InnerProductSpace ℝ E
inst✝ : CompleteSpace E
x0 : E
f h : E → ℝ
f' : E → E
alg : Nesterov_second f h f' x0
xm : E
minφ : IsMinOn (f + h) univ xm
φ : E → ℝ := fun z => f z + h z
φdef : ∀ (z : E), φ z = f z + h z
k : ℕ+
h1 :
  Nesterov_second.y f h f' x0 (↑k - 1) -
        (Nesterov_second.t f h f' x0 ↑k / Nesterov_second.γ f h f' x0 ↑k) • f' (Nesterov_second.z f h f' x0 k) -
      Nesterov_second.y f h f' x0 ↑k ∈
    SubderivAt ((Nesterov_second.t f h f' x0 ↑k / Nesterov_second.γ f h f' x0 ↑k) • h) (Nesterov_second.y f h f' x0 ↑k)
upd2 :
  SubderivAt (Nesterov_second.t f h f' x0 ↑k • h) (Nesterov_second.y f h f' x0 ↑k) =
    Nesterov_second.γ f h f' x0 ↑k •
      SubderivAt ((Nesterov_second.t f h f' x0 ↑k / Nesterov_second.γ f h f' x0 ↑k) • h)
        (Nesterov_second.y f h f' x0 ↑k)
⊢ Nesterov_second.γ f h f' x0 ↑k •
      (Nesterov_second.y f h f' x0 (↑k - 1) -
          (Nesterov_second.t f h f' x0 ↑k / Nesterov_second.γ f h f' x0 ↑k) • f' (Nesterov_second.z f h f' x0 k) -
        Nesterov_second.y f h f' x0 ↑k) =
    Nesterov_second.γ f h f' x0 ↑k • (Nesterov_second.y f h f' x0 (↑k - 1) - Nesterov_second.y f h f' x0 ↑k) -
      Nesterov_second.t f h f' x0 ↑k • f' (Nesterov_second.z f h f' x0 k)

Tactic:
rw [sub_right_comm, smul_sub, ← smul_assoc, smul_eq_mul]
    rw [mul_div, mul_comm, ← mul_div, div_self, mul_one]
    linarith [(alg.γbound k).1]

Tactic state after:
import Mathlib
import Optlib


open Set Real

open Set Real PNat

theorem extracted_formal_statement_3.{u_1} {E : Type u_1} [inst : NormedAddCommGroup E] [inst_1 : InnerProductSpace ℝ E]
  [inst_2 : CompleteSpace E] {x0 : E} {f h : E → ℝ} {f' : E → E} {alg : Nesterov_second f h f' x0} {xm : E}
  (minφ : IsMinOn (f + h) univ xm) :
  let φ := fun z => f z + h z;
  (∀ (z : E), φ z = f z + h z) →
    ∀ (k : ℕ+),
      prox_prop ((Nesterov_second.t f h f' x0 ↑k / Nesterov_second.γ f h f' x0 ↑k) • h)
          (Nesterov_second.y f h f' x0 (↑k - 1) -
            (Nesterov_second.t f h f' x0 ↑k / Nesterov_second.γ f h f' x0 ↑k) • f' (Nesterov_second.z f h f' x0 k))
          (Nesterov_second.y f h f' x0 ↑k) →
        ConvexOn ℝ univ ((Nesterov_second.t f h f' x0 ↑k / Nesterov_second.γ f h f' x0 ↑k) • h) →
          0 ≤ Nesterov_second.γ f h f' x0 ↑k := sorry

Tactic state before:
case hfun
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : InnerProductSpace ℝ E
inst✝ : CompleteSpace E
x0 : E
f h : E → ℝ
f' : E → E
alg : Nesterov_second f h f' x0
xm : E
minφ : IsMinOn (f + h) univ xm
φ : E → ℝ := fun z => f z + h z
φdef : ∀ (z : E), φ z = f z + h z
k : ℕ+
h1 :
  prox_prop ((Nesterov_second.t f h f' x0 ↑k / Nesterov_second.γ f h f' x0 ↑k) • h)
    (Nesterov_second.y f h f' x0 (↑k - 1) -
      (Nesterov_second.t f h f' x0 ↑k / Nesterov_second.γ f h f' x0 ↑k) • f' (Nesterov_second.z f h f' x0 k))
    (Nesterov_second.y f h f' x0 ↑k)
⊢ ConvexOn ℝ univ ((Nesterov_second.t f h f' x0 ↑k / Nesterov_second.γ f h f' x0 ↑k) • h)

Tactic:
apply ConvexOn.smul
    apply div_nonneg
    linarith [(alg.tbound k).1]

Tactic state after:
[case hfun.hc.hb
 E : Type u_1
 inst✝² : NormedAddCommGroup E
 inst✝¹ : InnerProductSpace ℝ E
 inst✝ : CompleteSpace E
 x0 : E
 f h : E → ℝ
 f' : E → E
 alg : Nesterov_second f h f' x0
 xm : E
 minφ : IsMinOn (f + h) univ xm
 φ : E → ℝ := fun z => f z + h z
 φdef : ∀ (z : E), φ z = f z + h z
 k : ℕ+
 h1 :
   prox_prop ((Nesterov_second.t f h f' x0 ↑k / Nesterov_second.γ f h f' x0 ↑k) • h)
     (Nesterov_second.y f h f' x0 (↑k - 1) -
       (Nesterov_second.t f h f' x0 ↑k / Nesterov_second.γ f h f' x0 ↑k) • f' (Nesterov_second.z f h f' x0 k))
     (Nesterov_second.y f h f' x0 ↑k)
 ⊢ 0 ≤ Nesterov_second.γ f h f' x0 ↑k,
 case hfun.hf
 E : Type u_1
 inst✝² : NormedAddCommGroup E
 inst✝¹ : InnerProductSpace ℝ E
 inst✝ : CompleteSpace E
 x0 : E
 f h : E → ℝ
 f' : E → E
 alg : Nesterov_second f h f' x0
 xm : E
 minφ : IsMinOn (f + h) univ xm
 φ : E → ℝ := fun z => f z + h z
 φdef : ∀ (z : E), φ z = f z + h z
 k : ℕ+
 h1 :
   prox_prop ((Nesterov_second.t f h f' x0 ↑k / Nesterov_second.γ f h f' x0 ↑k) • h)
     (Nesterov_second.y f h f' x0 (↑k - 1) -
       (Nesterov_second.t f h f' x0 ↑k / Nesterov_second.γ f h f' x0 ↑k) • f' (Nesterov_second.z f h f' x0 k))
     (Nesterov_second.y f h f' x0 ↑k)
 ⊢ ConvexOn ℝ univ h]
import Mathlib
import Optlib


open Set Real

open Set Real PNat

theorem extracted_formal_statement_4.{u_1} {E : Type u_1} [inst : NormedAddCommGroup E] [inst_1 : InnerProductSpace ℝ E]
  [inst_2 : CompleteSpace E] {x0 : E} {f h : E → ℝ} {f' : E → E} {alg : Nesterov_second f h f' x0} {xm : E}
  (minφ : IsMinOn (f + h) univ xm) :
  let φ := fun z => f z + h z;
  (∀ (z : E), φ z = f z + h z) →
    ∀ (k : ℕ+),
      prox_prop ((Nesterov_second.t f h f' x0 ↑k / Nesterov_second.γ f h f' x0 ↑k) • h)
          (Nesterov_second.y f h f' x0 (↑k - 1) -
            (Nesterov_second.t f h f' x0 ↑k / Nesterov_second.γ f h f' x0 ↑k) • f' (Nesterov_second.z f h f' x0 k))
          (Nesterov_second.y f h f' x0 ↑k) →
        ConvexOn ℝ univ ((Nesterov_second.t f h f' x0 ↑k / Nesterov_second.γ f h f' x0 ↑k) • h) →
          ConvexOn ℝ univ h := sorry

Tactic state before:
case hfun
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : InnerProductSpace ℝ E
inst✝ : CompleteSpace E
x0 : E
f h : E → ℝ
f' : E → E
alg : Nesterov_second f h f' x0
xm : E
minφ : IsMinOn (f + h) univ xm
φ : E → ℝ := fun z => f z + h z
φdef : ∀ (z : E), φ z = f z + h z
k : ℕ+
h1 :
  prox_prop ((Nesterov_second.t f h f' x0 ↑k / Nesterov_second.γ f h f' x0 ↑k) • h)
    (Nesterov_second.y f h f' x0 (↑k - 1) -
      (Nesterov_second.t f h f' x0 ↑k / Nesterov_second.γ f h f' x0 ↑k) • f' (Nesterov_second.z f h f' x0 k))
    (Nesterov_second.y f h f' x0 ↑k)
⊢ ConvexOn ℝ univ ((Nesterov_second.t f h f' x0 ↑k / Nesterov_second.γ f h f' x0 ↑k) • h)

Tactic:
apply ConvexOn.smul
    apply div_nonneg
    linarith [(alg.tbound k).1]

Tactic state after:
[case hfun.hc.hb
 E : Type u_1
 inst✝² : NormedAddCommGroup E
 inst✝¹ : InnerProductSpace ℝ E
 inst✝ : CompleteSpace E
 x0 : E
 f h : E → ℝ
 f' : E → E
 alg : Nesterov_second f h f' x0
 xm : E
 minφ : IsMinOn (f + h) univ xm
 φ : E → ℝ := fun z => f z + h z
 φdef : ∀ (z : E), φ z = f z + h z
 k : ℕ+
 h1 :
   prox_prop ((Nesterov_second.t f h f' x0 ↑k / Nesterov_second.γ f h f' x0 ↑k) • h)
     (Nesterov_second.y f h f' x0 (↑k - 1) -
       (Nesterov_second.t f h f' x0 ↑k / Nesterov_second.γ f h f' x0 ↑k) • f' (Nesterov_second.z f h f' x0 k))
     (Nesterov_second.y f h f' x0 ↑k)
 ⊢ 0 ≤ Nesterov_second.γ f h f' x0 ↑k,
 case hfun.hf
 E : Type u_1
 inst✝² : NormedAddCommGroup E
 inst✝¹ : InnerProductSpace ℝ E
 inst✝ : CompleteSpace E
 x0 : E
 f h : E → ℝ
 f' : E → E
 alg : Nesterov_second f h f' x0
 xm : E
 minφ : IsMinOn (f + h) univ xm
 φ : E → ℝ := fun z => f z + h z
 φdef : ∀ (z : E), φ z = f z + h z
 k : ℕ+
 h1 :
   prox_prop ((Nesterov_second.t f h f' x0 ↑k / Nesterov_second.γ f h f' x0 ↑k) • h)
     (Nesterov_second.y f h f' x0 (↑k - 1) -
       (Nesterov_second.t f h f' x0 ↑k / Nesterov_second.γ f h f' x0 ↑k) • f' (Nesterov_second.z f h f' x0 k))
     (Nesterov_second.y f h f' x0 ↑k)
 ⊢ ConvexOn ℝ univ h]
import Mathlib
import Optlib


open Set Real

open Set Real PNat

theorem extracted_formal_statement_6.{u_1} {E : Type u_1} [inst : NormedAddCommGroup E] [inst_1 : InnerProductSpace ℝ E]
  [inst_2 : CompleteSpace E] {x0 : E} {f h : E → ℝ} {f' : E → E} {alg : Nesterov_second f h f' x0} {xm : E}
  (minφ : IsMinOn (f + h) univ xm) :
  let φ := fun z => f z + h z;
  (∀ (z : E), φ z = f z + h z) →
    (∀ (k : ℕ+),
        Nesterov_second.γ f h f' x0 ↑k • (Nesterov_second.y f h f' x0 (↑k - 1) - Nesterov_second.y f h f' x0 ↑k) -
            Nesterov_second.t f h f' x0 ↑k • f' (Nesterov_second.z f h f' x0 k) ∈
          SubderivAt (Nesterov_second.t f h f' x0 ↑k • h) (Nesterov_second.y f h f' x0 ↑k)) →
      (∀ (w : E) (k : ℕ+),
          Nesterov_second.t f h f' x0 ↑k * h w ≥
            Nesterov_second.t f h f' x0 ↑k * h (Nesterov_second.y f h f' x0 ↑k) +
              inner
                (Nesterov_second.γ f h f' x0 ↑k •
                    (Nesterov_second.y f h f' x0 (↑k - 1) - Nesterov_second.y f h f' x0 ↑k) -
                  Nesterov_second.t f h f' x0 ↑k • f' (Nesterov_second.z f h f' x0 k))
                (w - Nesterov_second.y f h f' x0 ↑k)) →
        (∀ (k : ℕ+),
            h (Nesterov_second.x f h f' x0 ↑k) ≤
              (1 - Nesterov_second.γ f h f' x0 ↑k) * h (Nesterov_second.x f h f' x0 (↑k - 1)) +
                Nesterov_second.γ f h f' x0 ↑k * h (Nesterov_second.y f h f' x0 ↑k)) →
          ∀ (k : ℕ), Nesterov_second.t f h f' x0 k / Nesterov_second.γ f h f' x0 k > 0 := sorry

Tactic state before:
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : InnerProductSpace ℝ E
inst✝ : CompleteSpace E
x0 : E
f h : E → ℝ
f' : E → E
alg : Nesterov_second f h f' x0
xm : E
minφ : IsMinOn (f + h) univ xm
φ : E → ℝ := fun z => f z + h z
φdef : ∀ (z : E), φ z = f z + h z
h1 :
  ∀ (k : ℕ+),
    Nesterov_second.γ f h f' x0 ↑k • (Nesterov_second.y f h f' x0 (↑k - 1) - Nesterov_second.y f h f' x0 ↑k) -
        Nesterov_second.t f h f' x0 ↑k • f' (Nesterov_second.z f h f' x0 k) ∈
      SubderivAt (Nesterov_second.t f h f' x0 ↑k • h) (Nesterov_second.y f h f' x0 ↑k)
hieq1 :
  ∀ (w : E) (k : ℕ+),
    Nesterov_second.t f h f' x0 ↑k * h w ≥
      Nesterov_second.t f h f' x0 ↑k * h (Nesterov_second.y f h f' x0 ↑k) +
        inner
          (Nesterov_second.γ f h f' x0 ↑k • (Nesterov_second.y f h f' x0 (↑k - 1) - Nesterov_second.y f h f' x0 ↑k) -
            Nesterov_second.t f h f' x0 ↑k • f' (Nesterov_second.z f h f' x0 k))
          (w - Nesterov_second.y f h f' x0 ↑k)
cvxineq :
  ∀ (k : ℕ+),
    h (Nesterov_second.x f h f' x0 ↑k) ≤
      (1 - Nesterov_second.γ f h f' x0 ↑k) * h (Nesterov_second.x f h f' x0 (↑k - 1)) +
        Nesterov_second.γ f h f' x0 ↑k * h (Nesterov_second.y f h f' x0 ↑k)
k : ℕ
⊢ Nesterov_second.t f h f' x0 k / Nesterov_second.γ f h f' x0 k > 0

Tactic:
apply div_pos
    linarith [(alg.tbound k).1]
    linarith [(alg.γbound k).1]

Tactic state after:
import Mathlib
import Optlib


open Set Real

open Set Real PNat

theorem extracted_formal_statement_39.{u_1} {E : Type u_1} [inst : NormedAddCommGroup E] [inst_1 : InnerProductSpace ℝ E]
  [inst_2 : CompleteSpace E] {f h : E → ℝ} {f' : E → E} {x0 : E} [p : Nesterov_second_fix_stepsize f h f' x0] (n : ℕ+)
  (h_original_goal :
    (1 + (↑↑n + 1) - 2) * (1 + (↑↑n + 1)) ^ 2 /
        ((1 + (↑↑n + 1)) * ↑(Nesterov_second_fix_stepsize.l f h f' x0) * 2 ^ 2) ≤
      (1 + ↑↑n) ^ 2 / (↑(Nesterov_second_fix_stepsize.l f h f' x0) * 2 ^ 2)) :
  (1 + (↑↑n + 1) - 2) * (1 + (↑↑n + 1)) ≤ (1 + ↑↑n) ^ 2 := sorry

Tactic state before:
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : InnerProductSpace ℝ E
inst✝ : CompleteSpace E
f✝ h✝ : E → ℝ
f'✝ : E → E
x0✝ : E
f h : E → ℝ
f' : E → E
x0 : E
p : Nesterov_second_fix_stepsize f h f' x0
n : ℕ+
⊢ (1 + (↑↑n + 1) - 2) * (1 + (↑↑n + 1)) ^ 2 / ((1 + (↑↑n + 1)) * ↑(Nesterov_second_fix_stepsize.l f h f' x0) * 2 ^ 2) ≤
    (1 + ↑↑n) ^ 2 / (↑(Nesterov_second_fix_stepsize.l f h f' x0) * 2 ^ 2)

Tactic:
rw [← div_div, ← div_div, ← div_div]
    repeat apply div_le_div_of_nonneg_right _ (by positivity)
    rw [pow_two, ← mul_assoc, mul_div_assoc, div_self, mul_one]

Tactic state after:
[E : Type u_1
 inst✝² : NormedAddCommGroup E
 inst✝¹ : InnerProductSpace ℝ E
 inst✝ : CompleteSpace E
 f✝ h✝ : E → ℝ
 f'✝ : E → E
 x0✝ : E
 f h : E → ℝ
 f' : E → E
 x0 : E
 p : Nesterov_second_fix_stepsize f h f' x0
 n : ℕ+
 ⊢ (1 + (↑↑n + 1) - 2) * (1 + (↑↑n + 1)) ≤ (1 + ↑↑n) ^ 2,
 E : Type u_1
 inst✝² : NormedAddCommGroup E
 inst✝¹ : InnerProductSpace ℝ E
 inst✝ : CompleteSpace E
 f✝ h✝ : E → ℝ
 f'✝ : E → E
 x0✝ : E
 f h : E → ℝ
 f' : E → E
 x0 : E
 p : Nesterov_second_fix_stepsize f h f' x0
 n : ℕ+
 ⊢ 1 + (↑↑n + 1) ≠ 0]
import Mathlib
import Optlib


open Set Real

open Set Real PNat

theorem extracted_formal_statement_40.{u_1} {E : Type u_1} [inst : NormedAddCommGroup E] [inst_1 : InnerProductSpace ℝ E]
  [inst_2 : CompleteSpace E] {f h : E → ℝ} {f' : E → E} {x0 : E} [p : Nesterov_second_fix_stepsize f h f' x0] (n : ℕ+)
  (h_original_goal :
    (1 + (↑↑n + 1) - 2) * (1 + (↑↑n + 1)) ^ 2 /
        ((1 + (↑↑n + 1)) * ↑(Nesterov_second_fix_stepsize.l f h f' x0) * 2 ^ 2) ≤
      (1 + ↑↑n) ^ 2 / (↑(Nesterov_second_fix_stepsize.l f h f' x0) * 2 ^ 2)) :
  1 + (↑↑n + 1) ≠ 0 := sorry

Tactic state before:
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : InnerProductSpace ℝ E
inst✝ : CompleteSpace E
f✝ h✝ : E → ℝ
f'✝ : E → E
x0✝ : E
f h : E → ℝ
f' : E → E
x0 : E
p : Nesterov_second_fix_stepsize f h f' x0
n : ℕ+
⊢ (1 + (↑↑n + 1) - 2) * (1 + (↑↑n + 1)) ^ 2 / ((1 + (↑↑n + 1)) * ↑(Nesterov_second_fix_stepsize.l f h f' x0) * 2 ^ 2) ≤
    (1 + ↑↑n) ^ 2 / (↑(Nesterov_second_fix_stepsize.l f h f' x0) * 2 ^ 2)

Tactic:
rw [← div_div, ← div_div, ← div_div]
    repeat apply div_le_div_of_nonneg_right _ (by positivity)
    rw [pow_two, ← mul_assoc, mul_div_assoc, div_self, mul_one]

Tactic state after:
[E : Type u_1
 inst✝² : NormedAddCommGroup E
 inst✝¹ : InnerProductSpace ℝ E
 inst✝ : CompleteSpace E
 f✝ h✝ : E → ℝ
 f'✝ : E → E
 x0✝ : E
 f h : E → ℝ
 f' : E → E
 x0 : E
 p : Nesterov_second_fix_stepsize f h f' x0
 n : ℕ+
 ⊢ (1 + (↑↑n + 1) - 2) * (1 + (↑↑n + 1)) ≤ (1 + ↑↑n) ^ 2,
 E : Type u_1
 inst✝² : NormedAddCommGroup E
 inst✝¹ : InnerProductSpace ℝ E
 inst✝ : CompleteSpace E
 f✝ h✝ : E → ℝ
 f'✝ : E → E
 x0✝ : E
 f h : E → ℝ
 f' : E → E
 x0 : E
 p : Nesterov_second_fix_stepsize f h f' x0
 n : ℕ+
 ⊢ 1 + (↑↑n + 1) ≠ 0]
import Mathlib
import Optlib


open Set Real

open Set Real PNat

theorem extracted_formal_statement_41 (k : ℕ) (hk : k ≠ 0)
  (h_original_goal : (if k = 0 then 1 / 2 else 2 / (1 + ↑k)) ≤ 1) : 2 ≤ 1 + ↑k := sorry

Tactic state before:
case neg
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : InnerProductSpace ℝ E
inst✝ : CompleteSpace E
f✝ h✝ : E → ℝ
f'✝ : E → E
x0✝ : E
f h : E → ℝ
f' : E → E
x0 : E
p : Nesterov_second_fix_stepsize f h f' x0
k : ℕ
hk : k ≠ 0
⊢ (if k = 0 then 1 / 2 else 2 / (1 + ↑k)) ≤ 1

Tactic:
simp [hk]
    rw [div_le_iff₀ (by positivity)]
    simp [hk]

Tactic state after:
[case neg
 E : Type u_1
 inst✝² : NormedAddCommGroup E
 inst✝¹ : InnerProductSpace ℝ E
 inst✝ : CompleteSpace E
 f✝ h✝ : E → ℝ
 f'✝ : E → E
 x0✝ : E
 f h : E → ℝ
 f' : E → E
 x0 : E
 p : Nesterov_second_fix_stepsize f h f' x0
 k : ℕ
 hk : k ≠ 0
 ⊢ 2 ≤ 1 + ↑k]
import Mathlib
import Optlib


open Set Real

open Set Real PNat

theorem extracted_formal_statement_42.{u_1} {E : Type u_1} [inst : NormedAddCommGroup E] [inst_1 : InnerProductSpace ℝ E]
  [inst_2 : CompleteSpace E] {f h : E → ℝ} {f' : E → E} {x0 : E} {alg : Nesterov_second_fix_stepsize f h f' x0} {xm : E}
  (minφ : IsMinOn (f + h) univ xm) (k : ℕ)
  (h_original_goal :
    Nesterov_second_fix_stepsize.γ f h f' x0 (k + 1) ^ 2 / (2 * Nesterov_second_fix_stepsize.t f h f' x0 (k + 1)) *
        ‖x0 - xm‖ ^ 2 ≤
      2 * ↑(Nesterov_second_fix_stepsize.l f h f' x0) / (↑k + 2) ^ 2 * ‖x0 - xm‖ ^ 2) :
  2 ^ 2 * ↑(Nesterov_second_fix_stepsize.l f h f' x0) / ((1 + (↑k + 1)) ^ 2 * 2) ≤
    2 * ↑(Nesterov_second_fix_stepsize.l f h f' x0) / (↑k + 2) ^ 2 := sorry

Tactic state before:
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : InnerProductSpace ℝ E
inst✝ : CompleteSpace E
f h : E → ℝ
f' : E → E
x0 : E
alg : Nesterov_second_fix_stepsize f h f' x0
xm : E
minφ : IsMinOn (f + h) univ xm
k : ℕ
⊢ Nesterov_second_fix_stepsize.γ f h f' x0 (k + 1) ^ 2 / (2 * Nesterov_second_fix_stepsize.t f h f' x0 (k + 1)) *
      ‖x0 - xm‖ ^ 2 ≤
    2 * ↑(Nesterov_second_fix_stepsize.l f h f' x0) / (↑k + 2) ^ 2 * ‖x0 - xm‖ ^ 2

Tactic:
apply mul_le_mul_of_nonneg_right _ (sq_nonneg _)
    rw [alg.γeq (k + 1), alg.teq (k + 1)]
    field_simp

Tactic state after:
[E : Type u_1
 inst✝² : NormedAddCommGroup E
 inst✝¹ : InnerProductSpace ℝ E
 inst✝ : CompleteSpace E
 f h : E → ℝ
 f' : E → E
 x0 : E
 alg : Nesterov_second_fix_stepsize f h f' x0
 xm : E
 minφ : IsMinOn (f + h) univ xm
 k : ℕ
 ⊢ 2 ^ 2 * ↑(Nesterov_second_fix_stepsize.l f h f' x0) / ((1 + (↑k + 1)) ^ 2 * 2) ≤
     2 * ↑(Nesterov_second_fix_stepsize.l f h f' x0) / (↑k + 2) ^ 2]
import Mathlib
import Optlib


open Set Real

open Set Real PNat

theorem extracted_formal_statement_43.{u_1} {E : Type u_1} [inst : NormedAddCommGroup E] [inst_1 : InnerProductSpace ℝ E]
  [inst_2 : CompleteSpace E] {f h : E → ℝ} {f' : E → E} {x0 : E} {alg : Nesterov_second_fix_stepsize f h f' x0} {xm : E}
  (minφ : IsMinOn (f + h) univ xm) (k : ℕ)
  (h_original_goal :
    2 ^ 2 * ↑(Nesterov_second_fix_stepsize.l f h f' x0) / ((1 + (↑k + 1)) ^ 2 * 2) ≤
      2 * ↑(Nesterov_second_fix_stepsize.l f h f' x0) / (↑k + 2) ^ 2) :
  2 * 2 * ↑(Nesterov_second_fix_stepsize.l f h f' x0) / (↑k + 2) ^ 2 / 2 =
    2 * ↑(Nesterov_second_fix_stepsize.l f h f' x0) / (↑k + 2) ^ 2 := sorry

Tactic state before:
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : InnerProductSpace ℝ E
inst✝ : CompleteSpace E
f h : E → ℝ
f' : E → E
x0 : E
alg : Nesterov_second_fix_stepsize f h f' x0
xm : E
minφ : IsMinOn (f + h) univ xm
k : ℕ
⊢ 2 ^ 2 * ↑(Nesterov_second_fix_stepsize.l f h f' x0) / ((1 + (↑k + 1)) ^ 2 * 2) ≤
    2 * ↑(Nesterov_second_fix_stepsize.l f h f' x0) / (↑k + 2) ^ 2

Tactic:
rw [pow_two, add_comm]
    rw [add_assoc, one_add_one_eq_two, ← div_div]
    apply le_of_eq

Tactic state after:
[case hab
 E : Type u_1
 inst✝² : NormedAddCommGroup E
 inst✝¹ : InnerProductSpace ℝ E
 inst✝ : CompleteSpace E
 f h : E → ℝ
 f' : E → E
 x0 : E
 alg : Nesterov_second_fix_stepsize f h f' x0
 xm : E
 minφ : IsMinOn (f + h) univ xm
 k : ℕ
 ⊢ 2 * 2 * ↑(Nesterov_second_fix_stepsize.l f h f' x0) / (↑k + 2) ^ 2 / 2 =
     2 * ↑(Nesterov_second_fix_stepsize.l f h f' x0) / (↑k + 2) ^ 2]
import Mathlib
import Optlib


open Set

theorem extracted_formal_statement_1.{u_1} {E : Type u_1} [inst : NormedAddCommGroup E] [inst_1 : InnerProductSpace ℝ E]
  [inst_2 : CompleteSpace E] {f : E → ℝ} {m : ℝ} {f' : E → E} {x_1 y : E} {l : NNReal} (mp : m > 0)
  (hf : ∀ (x : E), HasGradientAt f (f' x) x) (h₂ : LipschitzWith l f') (hl : ↑l > 0) (cov : Convex ℝ univ)
  (hsc :
    ∀ ⦃x : E⦄,
      x ∈ univ →
        ∀ ⦃y : E⦄,
          y ∈ univ →
            ∀ ⦃a b : ℝ⦄,
              0 ≤ a → 0 ≤ b → a + b = 1 → f (a • x + b • y) ≤ a • f x + b • f y - a * b * (m / 2 * ‖x - y‖ ^ 2)) :
  let phi := fun x => ↑l / 2 * ‖x‖ ^ 2 - f x;
  ConvexOn ℝ univ phi →
    let g := fun x => f x - m / 2 * ‖x‖ ^ 2;
    let g' := fun x => f' x - m • x;
    ∀ (x : E), HasGradientAt g (g' x) x → ∀ (x : E), HasGradientAt f (f' x) x := sorry

Tactic state before:
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : InnerProductSpace ℝ E
inst✝ : CompleteSpace E
f : E → ℝ
m : ℝ
f' : E → E
x✝ y : E
l : NNReal
mp : m > 0
hf : ∀ (x : E), HasGradientAt f (f' x) x
h₂ : LipschitzWith l f'
hl : ↑l > 0
cov : Convex ℝ univ
hsc :
  ∀ ⦃x : E⦄,
    x ∈ univ →
      ∀ ⦃y : E⦄,
        y ∈ univ →
          ∀ ⦃a b : ℝ⦄, 0 ≤ a → 0 ≤ b → a + b = 1 → f (a • x + b • y) ≤ a • f x + b • f y - a * b * (m / 2 * ‖x - y‖ ^ 2)
phi : E → ℝ := fun x => ↑l / 2 * ‖x‖ ^ 2 - f x
convphi : ConvexOn ℝ univ phi
g : E → ℝ := fun x => f x - m / 2 * ‖x‖ ^ 2
g' : E → E := fun x => f' x - m • x
h : E → ℝ := fun x => (↑l - m) / 2 * ‖x‖ ^ 2 - g x
x : E
⊢ HasGradientAt g (g' x) x

Tactic:
apply sub_normsquare_gradient
    show ∀ x ∈ univ, HasGradientAt f (f' x) x
    simp

Tactic state after:
[case hf
 E : Type u_1
 inst✝² : NormedAddCommGroup E
 inst✝¹ : InnerProductSpace ℝ E
 inst✝ : CompleteSpace E
 f : E → ℝ
 m : ℝ
 f' : E → E
 x✝ y : E
 l : NNReal
 mp : m > 0
 hf : ∀ (x : E), HasGradientAt f (f' x) x
 h₂ : LipschitzWith l f'
 hl : ↑l > 0
 cov : Convex ℝ univ
 hsc :
   ∀ ⦃x : E⦄,
     x ∈ univ →
       ∀ ⦃y : E⦄,
         y ∈ univ →
           ∀ ⦃a b : ℝ⦄,
             0 ≤ a → 0 ≤ b → a + b = 1 → f (a • x + b • y) ≤ a • f x + b • f y - a * b * (m / 2 * ‖x - y‖ ^ 2)
 phi : E → ℝ := fun x => ↑l / 2 * ‖x‖ ^ 2 - f x
 convphi : ConvexOn ℝ univ phi
 g : E → ℝ := fun x => f x - m / 2 * ‖x‖ ^ 2
 g' : E → E := fun x => f' x - m • x
 h : E → ℝ := fun x => (↑l - m) / 2 * ‖x‖ ^ 2 - g x
 x : E
 ⊢ ∀ (x : E), HasGradientAt f (f' x) x,
 case a
 E : Type u_1
 inst✝² : NormedAddCommGroup E
 inst✝¹ : InnerProductSpace ℝ E
 inst✝ : CompleteSpace E
 f : E → ℝ
 m : ℝ
 f' : E → E
 x✝ y : E
 l : NNReal
 mp : m > 0
 hf : ∀ (x : E), HasGradientAt f (f' x) x
 h₂ : LipschitzWith l f'
 hl : ↑l > 0
 cov : Convex ℝ univ
 hsc :
   ∀ ⦃x : E⦄,
     x ∈ univ →
       ∀ ⦃y : E⦄,
         y ∈ univ →
           ∀ ⦃a b : ℝ⦄,
             0 ≤ a → 0 ≤ b → a + b = 1 → f (a • x + b • y) ≤ a • f x + b • f y - a * b * (m / 2 * ‖x - y‖ ^ 2)
 phi : E → ℝ := fun x => ↑l / 2 * ‖x‖ ^ 2 - f x
 convphi : ConvexOn ℝ univ phi
 g : E → ℝ := fun x => f x - m / 2 * ‖x‖ ^ 2
 g' : E → E := fun x => f' x - m • x
 h : E → ℝ := fun x => (↑l - m) / 2 * ‖x‖ ^ 2 - g x
 x : E
 ⊢ x ∈ univ]