-- File: optlib/Optlib/Algorithm/LASSO.lean
Theorem statement:
theorem extracted_formal_statement_151 {n m : ℕ+} {A : Matrix (Fin ↑m) (Fin ↑n) ℝ} {b : Fin ↑m → ℝ} {μ : ℝ} {μpos : 0 < μ}
  {Ane0 : A ≠ 0} {x₀ : EuclideanSpace ℝ (Fin ↑n)} (p : LASSO A b μ μpos Ane0 x₀) (x y : EuclideanSpace ℝ (Fin ↑n))
  (h_original_goal : ‖Aᵀ *ᵥ (A *ᵥ x - b) - Aᵀ *ᵥ (A *ᵥ y - b)‖ ≤ ↑p.L * ‖x - y‖) :
  ‖Aᵀ *ᵥ (A *ᵥ x - A *ᵥ y)‖ ≤ ↑p.L * ‖x - y‖ := sorry

Tactic state before:
n m : ℕ+
A : Matrix (Fin ↑m) (Fin ↑n) ℝ
b : Fin ↑m → ℝ
μ : ℝ
μpos : 0 < μ
Ane0 : A ≠ 0
x₀ : EuclideanSpace ℝ (Fin ↑n)
p : LASSO A b μ μpos Ane0 x₀
x y : EuclideanSpace ℝ (Fin ↑n)
⊢ ‖Aᵀ *ᵥ (A *ᵥ x - b) - Aᵀ *ᵥ (A *ᵥ y - b)‖ ≤ ↑p.L * ‖x - y‖

Tactic: rw [← Matrix.mulVec_sub, ← sub_add, sub_add_eq_add_sub, sub_add_cancel]

Tactic state after:
[n m : ℕ+
 A : Matrix (Fin ↑m) (Fin ↑n) ℝ
 b : Fin ↑m → ℝ
 μ : ℝ
 μpos : 0 < μ
 Ane0 : A ≠ 0
 x₀ : EuclideanSpace ℝ (Fin ↑n)
 p : LASSO A b μ μpos Ane0 x₀
 x y : EuclideanSpace ℝ (Fin ↑n)
 ⊢ ‖Aᵀ *ᵥ (A *ᵥ x - A *ᵥ y)‖ ≤ ↑p.L * ‖x - y‖]

Premises used:
sub_add_eq_add_sub : ∀ {α : Type u_1} [inst : SubtractionCommMonoid α] (a b c : α), a - b + c = a + c - b
sub_add_cancel : ∀ {G : Type u_1} [inst : AddGroup G] (a b : G), a - b + b = a
Matrix.mulVec_sub : ∀ {m : Type u_2} {n : Type u_3} {α : Type v} [inst : NonUnitalNonAssocRing α] [inst_1 : Fintype n]
  (A : Matrix m n α) (x y : n → α), A *ᵥ (x - y) = A *ᵥ x - A *ᵥ y
sub_add : ∀ {α : Type u_1} [inst : SubtractionCommMonoid α] (a b c : α), a - b + c = a - (b - c)