-- File: optlib/Optlib/Algorithm/LASSO.lean
Theorem statement:
theorem extracted_formal_statement_206 {n m : ℕ+} {A : Matrix (Fin ↑m) (Fin ↑n) ℝ} {b : Fin ↑m → ℝ} {μ : ℝ} {μpos : 0 < μ}
  {Ane0 : A ≠ 0} {x₀ : EuclideanSpace ℝ (Fin ↑n)} {alg : LASSO A b μ μpos Ane0 x₀} (k : ℕ+)
  (h₁ :
    alg.f (alg.x ↑k) + alg.h (alg.x ↑k) - alg.f alg.xm - alg.h alg.xm =
      alg.f (proximal_gradient_method.x alg.f alg.h alg.f' x₀ ↑k) +
            alg.h (proximal_gradient_method.x alg.f alg.h alg.f' x₀ ↑k) -
          alg.f (proximal_gradient_method.xm alg.f alg.h alg.f' x₀) -
        alg.h (proximal_gradient_method.xm alg.f alg.h alg.f' x₀))
  (h₂ :
    1 / (2 * ↑↑k * alg.t) * ‖x₀ - alg.xm‖ ^ 2 =
      1 / (2 * ↑↑k * proximal_gradient_method.t alg.f alg.h alg.f' x₀) *
        ‖x₀ - proximal_gradient_method.xm alg.f alg.h alg.f' x₀‖ ^ 2)
  (h₃ : ↑alg.L / (2 * ↑↑k) = 1 / (2 * ↑↑k * alg.t)) :
  alg.f (proximal_gradient_method.x alg.f alg.h alg.f' x₀ ↑k) +
          alg.h (proximal_gradient_method.x alg.f alg.h alg.f' x₀ ↑k) -
        alg.f (proximal_gradient_method.xm alg.f alg.h alg.f' x₀) -
      alg.h (proximal_gradient_method.xm alg.f alg.h alg.f' x₀) ≤
    1 / (2 * ↑↑k * proximal_gradient_method.t alg.f alg.h alg.f' x₀) *
      ‖x₀ - proximal_gradient_method.xm alg.f alg.h alg.f' x₀‖ ^ 2 := sorry

Tactic state before:
n m : ℕ+
A : Matrix (Fin ↑m) (Fin ↑n) ℝ
b : Fin ↑m → ℝ
μ : ℝ
μpos : 0 < μ
Ane0 : A ≠ 0
x₀ : EuclideanSpace ℝ (Fin ↑n)
alg : LASSO A b μ μpos Ane0 x₀
k : ℕ+
h₁ :
  alg.f (alg.x ↑k) + alg.h (alg.x ↑k) - alg.f alg.xm - alg.h alg.xm =
    alg.f (proximal_gradient_method.x alg.f alg.h alg.f' x₀ ↑k) +
          alg.h (proximal_gradient_method.x alg.f alg.h alg.f' x₀ ↑k) -
        alg.f (proximal_gradient_method.xm alg.f alg.h alg.f' x₀) -
      alg.h (proximal_gradient_method.xm alg.f alg.h alg.f' x₀)
h₂ :
  1 / (2 * ↑↑k * alg.t) * ‖x₀ - alg.xm‖ ^ 2 =
    1 / (2 * ↑↑k * proximal_gradient_method.t alg.f alg.h alg.f' x₀) *
      ‖x₀ - proximal_gradient_method.xm alg.f alg.h alg.f' x₀‖ ^ 2
h₃ : ↑alg.L / (2 * ↑↑k) = 1 / (2 * ↑↑k * alg.t)
⊢ alg.f (proximal_gradient_method.x alg.f alg.h alg.f' x₀ ↑k) +
          alg.h (proximal_gradient_method.x alg.f alg.h alg.f' x₀ ↑k) -
        alg.f (proximal_gradient_method.xm alg.f alg.h alg.f' x₀) -
      alg.h (proximal_gradient_method.xm alg.f alg.h alg.f' x₀) ≤
    1 / (2 * ↑↑k * proximal_gradient_method.t alg.f alg.h alg.f' x₀) *
      ‖x₀ - proximal_gradient_method.xm alg.f alg.h alg.f' x₀‖ ^ 2

Tactic: apply proximal_gradient_method_converge k

Tactic state after:

Premises used:
proximal_gradient_method_converge : ∀ {E : Type u_1} [inst : NormedAddCommGroup E] [inst_1 : InnerProductSpace ℝ E]
  [inst_2 : CompleteSpace E] [inst_3 : ProperSpace E] {x₀ : E} {f : E → ℝ} {f' : E → E} {h : E → ℝ}
  {alg : proximal_gradient_method f h f' x₀} (k : ℕ+),
  f (proximal_gradient_method.x f h f' x₀ ↑k) + h (proximal_gradient_method.x f h f' x₀ ↑k) -
        f (proximal_gradient_method.xm f h f' x₀) -
      h (proximal_gradient_method.xm f h f' x₀) ≤
    1 / (2 * ↑↑k * proximal_gradient_method.t f h f' x₀) * ‖x₀ - proximal_gradient_method.xm f h f' x₀‖ ^ 2