import Mathlib
import Optlib


open Set Real

open Set Real PNat

theorem extracted_formal_statement_15.{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) →
            (∀ (w : E) (k : ℕ+),
                Nesterov_second.γ f h f' x0 ↑k * h (Nesterov_second.y f h f' x0 ↑k) ≤
                  Nesterov_second.γ f h f' x0 ↑k * h w -
                    Nesterov_second.γ f h f' x0 ↑k / Nesterov_second.t 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 : ℕ+),
                  f (Nesterov_second.x f h f' x0 ↑k) ≤
                    f (Nesterov_second.z f h f' x0 k) +
                        inner (f' (Nesterov_second.z f h f' x0 k))
                          (Nesterov_second.x f h f' x0 ↑k - Nesterov_second.z f h f' x0 k) +
                      ↑(Nesterov_second.l f h f' x0) / 2 *
                        ‖Nesterov_second.x f h f' x0 ↑k - Nesterov_second.z f h f' x0 k‖ ^ 2) →
                (∀ (k : ℕ+),
                    f (Nesterov_second.x f h f' x0 ↑k) ≤
                      f (Nesterov_second.z f h f' x0 k) +
                          inner (f' (Nesterov_second.z f h f' x0 k))
                            (Nesterov_second.x f h f' x0 ↑k - Nesterov_second.z f h f' x0 k) +
                        1 / (2 * Nesterov_second.t f h f' x0 ↑k) *
                          ‖Nesterov_second.x f h f' x0 ↑k - Nesterov_second.z f h f' x0 k‖ ^ 2) →
                  (∀ (k : ℕ+),
                      f (Nesterov_second.x f h f' x0 ↑k) ≤
                        f (Nesterov_second.z f h f' x0 k) +
                            inner (f' (Nesterov_second.z f h f' x0 k))
                              ((1 - Nesterov_second.γ f h f' x0 ↑k) • Nesterov_second.x f h f' x0 (↑k - 1) +
                                  Nesterov_second.γ f h f' x0 ↑k • Nesterov_second.y f h f' x0 ↑k -
                                Nesterov_second.z f h f' x0 k) +
                          Nesterov_second.γ f h f' x0 ↑k ^ 2 / (2 * Nesterov_second.t f h f' x0 ↑k) *
                            ‖Nesterov_second.y f h f' x0 ↑k - Nesterov_second.y f h f' x0 (↑k - 1)‖ ^ 2) →
                    (∀ (k : ℕ+),
                        f (Nesterov_second.x f h f' x0 ↑k) ≤
                          (1 - Nesterov_second.γ f h f' x0 ↑k) * f (Nesterov_second.x f h f' x0 (↑k - 1)) +
                              Nesterov_second.γ f h f' x0 ↑k *
                                (f (Nesterov_second.z f h f' x0 k) +
                                  inner (f' (Nesterov_second.z f h f' x0 k))
                                    (Nesterov_second.y f h f' x0 ↑k - Nesterov_second.z f h f' x0 k)) +
                            Nesterov_second.γ f h f' x0 ↑k ^ 2 / (2 * Nesterov_second.t f h f' x0 ↑k) *
                              ‖Nesterov_second.y f h f' x0 ↑k - Nesterov_second.y f h f' x0 (↑k - 1)‖ ^ 2) →
                      (∀ (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 xm -
                              Nesterov_second.γ f h f' x0 ↑k / Nesterov_second.t 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))
                                  (xm - Nesterov_second.y f h f' x0 ↑k)) →
                        (∀ (k : ℕ+),
                            Nesterov_second.t f h f' x0 (↑k + 1) / Nesterov_second.γ f h f' x0 (↑k + 1) ^ 2 *
                                  (φ (Nesterov_second.x f h f' x0 (↑k + 1)) - φ xm) +
                                1 / 2 * ‖Nesterov_second.y f h f' x0 (↑k + 1) - xm‖ ^ 2 ≤
                              Nesterov_second.t f h f' x0 ↑k / Nesterov_second.γ f h f' x0 ↑k ^ 2 *
                                  (φ (Nesterov_second.x f h f' x0 ↑k) - φ xm) +
                                1 / 2 * ‖Nesterov_second.y f h f' x0 ↑k - xm‖ ^ 2) →
                          (∀ (k : ℕ),
                              Nesterov_second.t f h f' x0 (k + 1) / Nesterov_second.γ f h f' x0 (k + 1) ^ 2 *
                                    (φ (Nesterov_second.x f h f' x0 (k + 1)) - φ xm) +
                                  1 / 2 * ‖Nesterov_second.y f h f' x0 (k + 1) - xm‖ ^ 2 ≤
                                Nesterov_second.t f h f' x0 1 / Nesterov_second.γ f h f' x0 1 ^ 2 *
                                    (φ (Nesterov_second.x f h f' x0 1) - φ xm) +
                                  1 / 2 * ‖Nesterov_second.y f h f' x0 1 - xm‖ ^ 2) →
                            φ (Nesterov_second.x f h f' x0 ↑1) - φ xm -
                                  (1 - Nesterov_second.γ f h f' x0 ↑1) *
                                    (φ (Nesterov_second.x f h f' x0 (↑1 - 1)) - φ xm) ≤
                                Nesterov_second.γ f h f' x0 ↑1 ^ 2 / (2 * Nesterov_second.t f h f' x0 ↑1) *
                                  (‖Nesterov_second.y f h f' x0 (↑1 - 1) - xm‖ ^ 2 -
                                    ‖Nesterov_second.y f h f' x0 ↑1 - xm‖ ^ 2) →
                              ∀ (k : ℕ),
                                (∀ (n : ℕ),
                                    Nesterov_second.t f h f' x0 (n + 1) / Nesterov_second.γ f h f' x0 (n + 1) ^ 2 > 0) →
                                  f (Nesterov_second.x f h f' x0 (k + 1)) + h (Nesterov_second.x f h f' x0 (k + 1)) -
                                          f xm -
                                        h xm ≤
                                      Nesterov_second.γ f h f' x0 (k + 1) ^ 2 /
                                          (2 * Nesterov_second.t f h f' x0 (k + 1)) *
                                        ‖x0 - xm‖ ^ 2 →
                                    Nesterov_second.γ f h f' x0 (k + 1) ^ 2 ≠ 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)
bsc1 : ∀ (k : ℕ), Nesterov_second.t f h f' x0 k / Nesterov_second.γ f h f' x0 k > 0
hieq2 :
  ∀ (w : E) (k : ℕ+),
    Nesterov_second.γ f h f' x0 ↑k * h (Nesterov_second.y f h f' x0 ↑k) ≤
      Nesterov_second.γ f h f' x0 ↑k * h w -
        Nesterov_second.γ f h f' x0 ↑k / Nesterov_second.t 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)
hieq4 :
  ∀ (k : ℕ+),
    f (Nesterov_second.x f h f' x0 ↑k) ≤
      f (Nesterov_second.z f h f' x0 k) +
          inner (f' (Nesterov_second.z f h f' x0 k)) (Nesterov_second.x f h f' x0 ↑k - Nesterov_second.z f h f' x0 k) +
        ↑(Nesterov_second.l f h f' x0) / 2 * ‖Nesterov_second.x f h f' x0 ↑k - Nesterov_second.z f h f' x0 k‖ ^ 2
hieq5 :
  ∀ (k : ℕ+),
    f (Nesterov_second.x f h f' x0 ↑k) ≤
      f (Nesterov_second.z f h f' x0 k) +
          inner (f' (Nesterov_second.z f h f' x0 k)) (Nesterov_second.x f h f' x0 ↑k - Nesterov_second.z f h f' x0 k) +
        1 / (2 * Nesterov_second.t f h f' x0 ↑k) * ‖Nesterov_second.x f h f' x0 ↑k - Nesterov_second.z f h f' x0 k‖ ^ 2
hieq6 :
  ∀ (k : ℕ+),
    f (Nesterov_second.x f h f' x0 ↑k) ≤
      f (Nesterov_second.z f h f' x0 k) +
          inner (f' (Nesterov_second.z f h f' x0 k))
            ((1 - Nesterov_second.γ f h f' x0 ↑k) • Nesterov_second.x f h f' x0 (↑k - 1) +
                Nesterov_second.γ f h f' x0 ↑k • Nesterov_second.y f h f' x0 ↑k -
              Nesterov_second.z f h f' x0 k) +
        Nesterov_second.γ f h f' x0 ↑k ^ 2 / (2 * Nesterov_second.t f h f' x0 ↑k) *
          ‖Nesterov_second.y f h f' x0 ↑k - Nesterov_second.y f h f' x0 (↑k - 1)‖ ^ 2
hieq7 :
  ∀ (k : ℕ+),
    f (Nesterov_second.x f h f' x0 ↑k) ≤
      (1 - Nesterov_second.γ f h f' x0 ↑k) * f (Nesterov_second.x f h f' x0 (↑k - 1)) +
          Nesterov_second.γ f h f' x0 ↑k *
            (f (Nesterov_second.z f h f' x0 k) +
              inner (f' (Nesterov_second.z f h f' x0 k))
                (Nesterov_second.y f h f' x0 ↑k - Nesterov_second.z f h f' x0 k)) +
        Nesterov_second.γ f h f' x0 ↑k ^ 2 / (2 * Nesterov_second.t f h f' x0 ↑k) *
          ‖Nesterov_second.y f h f' x0 ↑k - Nesterov_second.y f h f' x0 (↑k - 1)‖ ^ 2
hieq3 :
  ∀ (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 xm -
        Nesterov_second.γ f h f' x0 ↑k / Nesterov_second.t 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))
            (xm - Nesterov_second.y f h f' x0 ↑k)
decrease :
  ∀ (k : ℕ+),
    Nesterov_second.t f h f' x0 (↑k + 1) / Nesterov_second.γ f h f' x0 (↑k + 1) ^ 2 *
          (φ (Nesterov_second.x f h f' x0 (↑k + 1)) - φ xm) +
        1 / 2 * ‖Nesterov_second.y f h f' x0 (↑k + 1) - xm‖ ^ 2 ≤
      Nesterov_second.t f h f' x0 ↑k / Nesterov_second.γ f h f' x0 ↑k ^ 2 *
          (φ (Nesterov_second.x f h f' x0 ↑k) - φ xm) +
        1 / 2 * ‖Nesterov_second.y f h f' x0 ↑k - xm‖ ^ 2
bound :
  ∀ (k : ℕ),
    Nesterov_second.t f h f' x0 (k + 1) / Nesterov_second.γ f h f' x0 (k + 1) ^ 2 *
          (φ (Nesterov_second.x f h f' x0 (k + 1)) - φ xm) +
        1 / 2 * ‖Nesterov_second.y f h f' x0 (k + 1) - xm‖ ^ 2 ≤
      Nesterov_second.t f h f' x0 1 / Nesterov_second.γ f h f' x0 1 ^ 2 * (φ (Nesterov_second.x f h f' x0 1) - φ xm) +
        1 / 2 * ‖Nesterov_second.y f h f' x0 1 - xm‖ ^ 2
hieqmajor :
  φ (Nesterov_second.x f h f' x0 ↑1) - φ xm -
      (1 - Nesterov_second.γ f h f' x0 ↑1) * (φ (Nesterov_second.x f h f' x0 (↑1 - 1)) - φ xm) ≤
    Nesterov_second.γ f h f' x0 ↑1 ^ 2 / (2 * Nesterov_second.t f h f' x0 ↑1) *
      (‖Nesterov_second.y f h f' x0 (↑1 - 1) - xm‖ ^ 2 - ‖Nesterov_second.y f h f' x0 ↑1 - xm‖ ^ 2)
k : ℕ
ax : ∀ (n : ℕ), Nesterov_second.t f h f' x0 (n + 1) / Nesterov_second.γ f h f' x0 (n + 1) ^ 2 > 0
⊢ f (Nesterov_second.x f h f' x0 (k + 1)) + h (Nesterov_second.x f h f' x0 (k + 1)) - f xm - h xm ≤
    Nesterov_second.γ f h f' x0 (k + 1) ^ 2 / (2 * Nesterov_second.t f h f' x0 (k + 1)) * ‖x0 - xm‖ ^ 2

Tactic:
apply (mul_le_mul_iff_of_pos_left (ax (k))).mp
    rw [← mul_assoc, mul_div, div_mul_cancel₀, ← div_div, div_right_comm, div_self]
    simp only [PNat.one_coe, le_refl, tsub_eq_zero_of_le] at hieqmajor
    rw [alg.oriγ, sub_self, zero_mul, sub_zero] at hieqmajor
    calc
  _ = alg.t (k + 1) / alg.γ (k + 1) ^ 2 * (φ (alg.x (k + 1)) - φ xm) := by rw [sub_sub, ← φdef, ← φdef]
  _ ≤ alg.t (k + 1) / alg.γ (k + 1) ^ 2 * (φ (alg.x (k + 1)) - φ xm) + 1 / 2 * ‖alg.y (k + 1) - xm‖ ^ 2 := by simp
  _ ≤ alg.t 1 / alg.γ 1 ^ 2 * (φ (alg.x 1) - φ xm) + 1 / 2 * ‖alg.y 1 - xm‖ ^ 2 := by exact bound k
  _ ≤ 1 / 2 * ‖x0 - xm‖ ^ 2 := by
    specialize ax 0
    to_theorem
      rw [zero_add] at
          ax
            have ieq :=
        (mul_le_mul_iff_of_pos_left ax).mpr
          hieqmajor
            apply
        (add_le_add_iff_right (-(1 / 2 * ‖alg.y 1 - xm‖ ^ 2))).mp
          rw [← zero_sub, add_sub, add_sub, add_zero, add_zero, ← add_sub, sub_self, add_zero]apply le_trans ieq
    rw [alg.oriγ]
    rw [one_pow, div_one, ← mul_assoc, mul_div, mul_one, ← div_div, div_right_comm, div_self]
    rw [alg.oriy, ← alg.initial, mul_sub]
    linarith [(alg.tbound 1).1]

Tactic state after:
[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)
 bsc1 : ∀ (k : ℕ), Nesterov_second.t f h f' x0 k / Nesterov_second.γ f h f' x0 k > 0
 hieq2 :
   ∀ (w : E) (k : ℕ+),
     Nesterov_second.γ f h f' x0 ↑k * h (Nesterov_second.y f h f' x0 ↑k) ≤
       Nesterov_second.γ f h f' x0 ↑k * h w -
         Nesterov_second.γ f h f' x0 ↑k / Nesterov_second.t 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)
 hieq4 :
   ∀ (k : ℕ+),
     f (Nesterov_second.x f h f' x0 ↑k) ≤
       f (Nesterov_second.z f h f' x0 k) +
           inner (f' (Nesterov_second.z f h f' x0 k)) (Nesterov_second.x f h f' x0 ↑k - Nesterov_second.z f h f' x0 k) +
         ↑(Nesterov_second.l f h f' x0) / 2 * ‖Nesterov_second.x f h f' x0 ↑k - Nesterov_second.z f h f' x0 k‖ ^ 2
 hieq5 :
   ∀ (k : ℕ+),
     f (Nesterov_second.x f h f' x0 ↑k) ≤
       f (Nesterov_second.z f h f' x0 k) +
           inner (f' (Nesterov_second.z f h f' x0 k)) (Nesterov_second.x f h f' x0 ↑k - Nesterov_second.z f h f' x0 k) +
         1 / (2 * Nesterov_second.t f h f' x0 ↑k) * ‖Nesterov_second.x f h f' x0 ↑k - Nesterov_second.z f h f' x0 k‖ ^ 2
 hieq6 :
   ∀ (k : ℕ+),
     f (Nesterov_second.x f h f' x0 ↑k) ≤
       f (Nesterov_second.z f h f' x0 k) +
           inner (f' (Nesterov_second.z f h f' x0 k))
             ((1 - Nesterov_second.γ f h f' x0 ↑k) • Nesterov_second.x f h f' x0 (↑k - 1) +
                 Nesterov_second.γ f h f' x0 ↑k • Nesterov_second.y f h f' x0 ↑k -
               Nesterov_second.z f h f' x0 k) +
         Nesterov_second.γ f h f' x0 ↑k ^ 2 / (2 * Nesterov_second.t f h f' x0 ↑k) *
           ‖Nesterov_second.y f h f' x0 ↑k - Nesterov_second.y f h f' x0 (↑k - 1)‖ ^ 2
 hieq7 :
   ∀ (k : ℕ+),
     f (Nesterov_second.x f h f' x0 ↑k) ≤
       (1 - Nesterov_second.γ f h f' x0 ↑k) * f (Nesterov_second.x f h f' x0 (↑k - 1)) +
           Nesterov_second.γ f h f' x0 ↑k *
             (f (Nesterov_second.z f h f' x0 k) +
               inner (f' (Nesterov_second.z f h f' x0 k))
                 (Nesterov_second.y f h f' x0 ↑k - Nesterov_second.z f h f' x0 k)) +
         Nesterov_second.γ f h f' x0 ↑k ^ 2 / (2 * Nesterov_second.t f h f' x0 ↑k) *
           ‖Nesterov_second.y f h f' x0 ↑k - Nesterov_second.y f h f' x0 (↑k - 1)‖ ^ 2
 hieq3 :
   ∀ (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 xm -
         Nesterov_second.γ f h f' x0 ↑k / Nesterov_second.t 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))
             (xm - Nesterov_second.y f h f' x0 ↑k)
 decrease :
   ∀ (k : ℕ+),
     Nesterov_second.t f h f' x0 (↑k + 1) / Nesterov_second.γ f h f' x0 (↑k + 1) ^ 2 *
           (φ (Nesterov_second.x f h f' x0 (↑k + 1)) - φ xm) +
         1 / 2 * ‖Nesterov_second.y f h f' x0 (↑k + 1) - xm‖ ^ 2 ≤
       Nesterov_second.t f h f' x0 ↑k / Nesterov_second.γ f h f' x0 ↑k ^ 2 *
           (φ (Nesterov_second.x f h f' x0 ↑k) - φ xm) +
         1 / 2 * ‖Nesterov_second.y f h f' x0 ↑k - xm‖ ^ 2
 bound :
   ∀ (k : ℕ),
     Nesterov_second.t f h f' x0 (k + 1) / Nesterov_second.γ f h f' x0 (k + 1) ^ 2 *
           (φ (Nesterov_second.x f h f' x0 (k + 1)) - φ xm) +
         1 / 2 * ‖Nesterov_second.y f h f' x0 (k + 1) - xm‖ ^ 2 ≤
       Nesterov_second.t f h f' x0 1 / Nesterov_second.γ f h f' x0 1 ^ 2 * (φ (Nesterov_second.x f h f' x0 1) - φ xm) +
         1 / 2 * ‖Nesterov_second.y f h f' x0 1 - xm‖ ^ 2
 hieqmajor :
   φ (Nesterov_second.x f h f' x0 ↑1) - φ xm -
       (1 - Nesterov_second.γ f h f' x0 ↑1) * (φ (Nesterov_second.x f h f' x0 (↑1 - 1)) - φ xm) ≤
     Nesterov_second.γ f h f' x0 ↑1 ^ 2 / (2 * Nesterov_second.t f h f' x0 ↑1) *
       (‖Nesterov_second.y f h f' x0 (↑1 - 1) - xm‖ ^ 2 - ‖Nesterov_second.y f h f' x0 ↑1 - xm‖ ^ 2)
 k : ℕ
 ax : ∀ (n : ℕ), Nesterov_second.t f h f' x0 (n + 1) / Nesterov_second.γ f h f' x0 (n + 1) ^ 2 > 0
 ⊢ Nesterov_second.t f h f' x0 (k + 1) ≠ 0,
 case h
 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)
 bsc1 : ∀ (k : ℕ), Nesterov_second.t f h f' x0 k / Nesterov_second.γ f h f' x0 k > 0
 hieq2 :
   ∀ (w : E) (k : ℕ+),
     Nesterov_second.γ f h f' x0 ↑k * h (Nesterov_second.y f h f' x0 ↑k) ≤
       Nesterov_second.γ f h f' x0 ↑k * h w -
         Nesterov_second.γ f h f' x0 ↑k / Nesterov_second.t 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)
 hieq4 :
   ∀ (k : ℕ+),
     f (Nesterov_second.x f h f' x0 ↑k) ≤
       f (Nesterov_second.z f h f' x0 k) +
           inner (f' (Nesterov_second.z f h f' x0 k)) (Nesterov_second.x f h f' x0 ↑k - Nesterov_second.z f h f' x0 k) +
         ↑(Nesterov_second.l f h f' x0) / 2 * ‖Nesterov_second.x f h f' x0 ↑k - Nesterov_second.z f h f' x0 k‖ ^ 2
 hieq5 :
   ∀ (k : ℕ+),
     f (Nesterov_second.x f h f' x0 ↑k) ≤
       f (Nesterov_second.z f h f' x0 k) +
           inner (f' (Nesterov_second.z f h f' x0 k)) (Nesterov_second.x f h f' x0 ↑k - Nesterov_second.z f h f' x0 k) +
         1 / (2 * Nesterov_second.t f h f' x0 ↑k) * ‖Nesterov_second.x f h f' x0 ↑k - Nesterov_second.z f h f' x0 k‖ ^ 2
 hieq6 :
   ∀ (k : ℕ+),
     f (Nesterov_second.x f h f' x0 ↑k) ≤
       f (Nesterov_second.z f h f' x0 k) +
           inner (f' (Nesterov_second.z f h f' x0 k))
             ((1 - Nesterov_second.γ f h f' x0 ↑k) • Nesterov_second.x f h f' x0 (↑k - 1) +
                 Nesterov_second.γ f h f' x0 ↑k • Nesterov_second.y f h f' x0 ↑k -
               Nesterov_second.z f h f' x0 k) +
         Nesterov_second.γ f h f' x0 ↑k ^ 2 / (2 * Nesterov_second.t f h f' x0 ↑k) *
           ‖Nesterov_second.y f h f' x0 ↑k - Nesterov_second.y f h f' x0 (↑k - 1)‖ ^ 2
 hieq7 :
   ∀ (k : ℕ+),
     f (Nesterov_second.x f h f' x0 ↑k) ≤
       (1 - Nesterov_second.γ f h f' x0 ↑k) * f (Nesterov_second.x f h f' x0 (↑k - 1)) +
           Nesterov_second.γ f h f' x0 ↑k *
             (f (Nesterov_second.z f h f' x0 k) +
               inner (f' (Nesterov_second.z f h f' x0 k))
                 (Nesterov_second.y f h f' x0 ↑k - Nesterov_second.z f h f' x0 k)) +
         Nesterov_second.γ f h f' x0 ↑k ^ 2 / (2 * Nesterov_second.t f h f' x0 ↑k) *
           ‖Nesterov_second.y f h f' x0 ↑k - Nesterov_second.y f h f' x0 (↑k - 1)‖ ^ 2
 hieq3 :
   ∀ (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 xm -
         Nesterov_second.γ f h f' x0 ↑k / Nesterov_second.t 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))
             (xm - Nesterov_second.y f h f' x0 ↑k)
 decrease :
   ∀ (k : ℕ+),
     Nesterov_second.t f h f' x0 (↑k + 1) / Nesterov_second.γ f h f' x0 (↑k + 1) ^ 2 *
           (φ (Nesterov_second.x f h f' x0 (↑k + 1)) - φ xm) +
         1 / 2 * ‖Nesterov_second.y f h f' x0 (↑k + 1) - xm‖ ^ 2 ≤
       Nesterov_second.t f h f' x0 ↑k / Nesterov_second.γ f h f' x0 ↑k ^ 2 *
           (φ (Nesterov_second.x f h f' x0 ↑k) - φ xm) +
         1 / 2 * ‖Nesterov_second.y f h f' x0 ↑k - xm‖ ^ 2
 bound :
   ∀ (k : ℕ),
     Nesterov_second.t f h f' x0 (k + 1) / Nesterov_second.γ f h f' x0 (k + 1) ^ 2 *
           (φ (Nesterov_second.x f h f' x0 (k + 1)) - φ xm) +
         1 / 2 * ‖Nesterov_second.y f h f' x0 (k + 1) - xm‖ ^ 2 ≤
       Nesterov_second.t f h f' x0 1 / Nesterov_second.γ f h f' x0 1 ^ 2 * (φ (Nesterov_second.x f h f' x0 1) - φ xm) +
         1 / 2 * ‖Nesterov_second.y f h f' x0 1 - xm‖ ^ 2
 hieqmajor :
   φ (Nesterov_second.x f h f' x0 ↑1) - φ xm -
       (1 - Nesterov_second.γ f h f' x0 ↑1) * (φ (Nesterov_second.x f h f' x0 (↑1 - 1)) - φ xm) ≤
     Nesterov_second.γ f h f' x0 ↑1 ^ 2 / (2 * Nesterov_second.t f h f' x0 ↑1) *
       (‖Nesterov_second.y f h f' x0 (↑1 - 1) - xm‖ ^ 2 - ‖Nesterov_second.y f h f' x0 ↑1 - xm‖ ^ 2)
 k : ℕ
 ax : ∀ (n : ℕ), Nesterov_second.t f h f' x0 (n + 1) / Nesterov_second.γ f h f' x0 (n + 1) ^ 2 > 0
 ⊢ Nesterov_second.γ f h f' x0 (k + 1) ^ 2 ≠ 0]