import Mathlib
import Optlib


open Set Real

open Set Real PNat

theorem extracted_formal_statement_5.{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 : ℕ+),
          Convex ℝ univ →
            (∀ ⦃x : E⦄,
                x ∈ univ →
                  ∀ ⦃y : E⦄,
                    y ∈ univ → ∀ ⦃a b : ℝ⦄, 0 < a → 0 < b → a + b = 1 → h (a • x + b • y) ≤ a • h x + b • h y) →
              Nesterov_second.x f h f' x0 (↑k - 1) ∈ univ →
                Nesterov_second.y f h f' x0 ↑k ∈ univ →
                  Nesterov_second.γ f h f' x0 ↑k ≠ 1 →
                    1 - Nesterov_second.γ f h f' x0 ↑k > 0 → 0 ≠ 1 - Nesterov_second.γ f h f' x0 ↑k := 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)
k : ℕ+
left✝ : Convex ℝ univ
fall :
  ∀ ⦃x : E⦄,
    x ∈ univ → ∀ ⦃y : E⦄, y ∈ univ → ∀ ⦃a b : ℝ⦄, 0 < a → 0 < b → a + b = 1 → h (a • x + b • y) ≤ a • h x + b • h y
mem1 : Nesterov_second.x f h f' x0 (↑k - 1) ∈ univ
mem2 : Nesterov_second.y f h f' x0 ↑k ∈ univ
eq1 : Nesterov_second.γ f h f' x0 ↑k ≠ 1
⊢ 1 - Nesterov_second.γ f h f' x0 ↑k > 0

Tactic:
apply lt_iff_le_and_ne.mpr
    constructor
    . linarith [(alg.γbound k).2]

Tactic state after:
[case 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
 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)
 k : ℕ+
 left✝ : Convex ℝ univ
 fall :
   ∀ ⦃x : E⦄,
     x ∈ univ → ∀ ⦃y : E⦄, y ∈ univ → ∀ ⦃a b : ℝ⦄, 0 < a → 0 < b → a + b = 1 → h (a • x + b • y) ≤ a • h x + b • h y
 mem1 : Nesterov_second.x f h f' x0 (↑k - 1) ∈ univ
 mem2 : Nesterov_second.y f h f' x0 ↑k ∈ univ
 eq1 : Nesterov_second.γ f h f' x0 ↑k ≠ 1
 ⊢ 0 ≠ 1 - Nesterov_second.γ f h f' x0 ↑k]