import Mathlib
import Optlib


open Set Bornology Filter BigOperators Topology BCD

open BCD

theorem extracted_formal_statement_35.{u_2, u_1} {E : Type u_1} {F : Type u_2} [inst : NormedAddCommGroup E]
  [inst_1 : InnerProductSpace ℝ E] [inst_2 : CompleteSpace E] [inst_3 : NormedAddCommGroup F]
  [inst_4 : InnerProductSpace ℝ F] [inst_5 : CompleteSpace F] {f : E → ℝ} {g : F → ℝ} {H : WithLp 2 (E × F) → ℝ}
  {x0 : E} {y0 : F} {l : NNReal} {alg : BCD f g H l x0 y0} (γ : ℝ) (hγ : γ > 1) (ck : ∀ (k : ℕ), alg.c k = 1 / (γ * ↑l))
  (dk : ∀ (k : ℕ), alg.d k = 1 / (γ * ↑l)) (ρ₁ : ℝ) (hρ₁ : ρ₁ > 0) (left : ρ₁ = (γ - 1) * ↑l)
  (h2 : ∀ (k : ℕ), ρ₁ / 2 * ‖z (k + 1) - z k‖ ^ 2 ≤ ψ (z k) - ψ (z (k + 1)))
  (hDescent' : ∀ (k : ℕ), ‖z (k + 1) - z k‖ ^ 2 ≤ 2 / ρ₁ * (ψ (z k) - ψ (z (k + 1))))
  (hne : ∀ (n : ℕ), ∑ k ∈ Finset.range (n + 1), ‖z (k + 1) - z k‖ ^ 2 ≤ 2 / ρ₁ * (ψ (z 0) - ψ (z (n + 1)))) (ψ₀ : ℝ)
  (hψ₀ : ∀ (a : WithLp 2 (E × F)), ψ₀ ≤ ψ a)
  (hne' : ∀ (n : ℕ), ∑ k ∈ Finset.range (n + 1), ‖z (k + 1) - z k‖ ^ 2 ≤ 2 / ρ₁ * (ψ (z 0) - ψ₀)) :
  let S := fun n => ∑ k ∈ Finset.range n, ‖z (k + 1) - z k‖ ^ 2;
  (∀ n ≥ 1, S n ≤ 2 / ρ₁ * (ψ (z 0) - ψ₀)) →
    let M₁ := S 0 ⊔ 2 / ρ₁ * (ψ (z 0) - ψ₀);
    M₁ = S 0 ⊔ 2 / ρ₁ * (ψ (z 0) - ψ₀) →
      ∀ (n : ℕ), ¬n = 0 → S n ≤ S 0 ⊔ 2 / ρ₁ * (ψ (z 0) - ψ₀) → S n ≤ S 0 ∨ S n ≤ 2 / ρ₁ * (ψ (z 0) - ψ₀) := sorry

Tactic state before:
case neg
E : Type u_1
F : Type u_2
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : InnerProductSpace ℝ E
inst✝³ : CompleteSpace E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace ℝ F
inst✝ : CompleteSpace F
f : E → ℝ
g : F → ℝ
H : WithLp 2 (E × F) → ℝ
x0 : E
y0 : F
l : NNReal
alg : BCD f g H l x0 y0
γ : ℝ
hγ : γ > 1
ck : ∀ (k : ℕ), alg.c k = 1 / (γ * ↑l)
dk : ∀ (k : ℕ), alg.d k = 1 / (γ * ↑l)
ρ₁ : ℝ
hρ₁ : ρ₁ > 0
left✝ : ρ₁ = (γ - 1) * ↑l
h2 : ∀ (k : ℕ), ρ₁ / 2 * ‖z (k + 1) - z k‖ ^ 2 ≤ ψ (z k) - ψ (z (k + 1))
hDescent' : ∀ (k : ℕ), ‖z (k + 1) - z k‖ ^ 2 ≤ 2 / ρ₁ * (ψ (z k) - ψ (z (k + 1)))
hne : ∀ (n : ℕ), ∑ k ∈ Finset.range (n + 1), ‖z (k + 1) - z k‖ ^ 2 ≤ 2 / ρ₁ * (ψ (z 0) - ψ (z (n + 1)))
ψ₀ : ℝ
hψ₀ : ∀ (a : WithLp 2 (E × F)), ψ₀ ≤ ψ a
hne' : ∀ (n : ℕ), ∑ k ∈ Finset.range (n + 1), ‖z (k + 1) - z k‖ ^ 2 ≤ 2 / ρ₁ * (ψ (z 0) - ψ₀)
S : ℕ → ℝ := fun n => ∑ k ∈ Finset.range n, ‖z (k + 1) - z k‖ ^ 2
hne'' : ∀ n ≥ 1, S n ≤ 2 / ρ₁ * (ψ (z 0) - ψ₀)
M₁ : ℝ := S 0 ⊔ 2 / ρ₁ * (ψ (z 0) - ψ₀)
hₘ : M₁ = S 0 ⊔ 2 / ρ₁ * (ψ (z 0) - ψ₀)
n : ℕ
h0 : ¬n = 0
⊢ S n ≤ S 0 ⊔ 2 / ρ₁ * (ψ (z 0) - ψ₀)

Tactic:
apply le_max_iff.2

Tactic state after:
[case neg
 E : Type u_1
 F : Type u_2
 inst✝⁵ : NormedAddCommGroup E
 inst✝⁴ : InnerProductSpace ℝ E
 inst✝³ : CompleteSpace E
 inst✝² : NormedAddCommGroup F
 inst✝¹ : InnerProductSpace ℝ F
 inst✝ : CompleteSpace F
 f : E → ℝ
 g : F → ℝ
 H : WithLp 2 (E × F) → ℝ
 x0 : E
 y0 : F
 l : NNReal
 alg : BCD f g H l x0 y0
 γ : ℝ
 hγ : γ > 1
 ck : ∀ (k : ℕ), alg.c k = 1 / (γ * ↑l)
 dk : ∀ (k : ℕ), alg.d k = 1 / (γ * ↑l)
 ρ₁ : ℝ
 hρ₁ : ρ₁ > 0
 left✝ : ρ₁ = (γ - 1) * ↑l
 h2 : ∀ (k : ℕ), ρ₁ / 2 * ‖z (k + 1) - z k‖ ^ 2 ≤ ψ (z k) - ψ (z (k + 1))
 hDescent' : ∀ (k : ℕ), ‖z (k + 1) - z k‖ ^ 2 ≤ 2 / ρ₁ * (ψ (z k) - ψ (z (k + 1)))
 hne : ∀ (n : ℕ), ∑ k ∈ Finset.range (n + 1), ‖z (k + 1) - z k‖ ^ 2 ≤ 2 / ρ₁ * (ψ (z 0) - ψ (z (n + 1)))
 ψ₀ : ℝ
 hψ₀ : ∀ (a : WithLp 2 (E × F)), ψ₀ ≤ ψ a
 hne' : ∀ (n : ℕ), ∑ k ∈ Finset.range (n + 1), ‖z (k + 1) - z k‖ ^ 2 ≤ 2 / ρ₁ * (ψ (z 0) - ψ₀)
 S : ℕ → ℝ := fun n => ∑ k ∈ Finset.range n, ‖z (k + 1) - z k‖ ^ 2
 hne'' : ∀ n ≥ 1, S n ≤ 2 / ρ₁ * (ψ (z 0) - ψ₀)
 M₁ : ℝ := S 0 ⊔ 2 / ρ₁ * (ψ (z 0) - ψ₀)
 hₘ : M₁ = S 0 ⊔ 2 / ρ₁ * (ψ (z 0) - ψ₀)
 n : ℕ
 h0 : ¬n = 0
 ⊢ S n ≤ S 0 ∨ S n ≤ 2 / ρ₁ * (ψ (z 0) - ψ₀)]