-- File: optlib/Optlib/Algorithm/LASSO.lean
Theorem statement:
theorem extracted_formal_statement_73 {n m : ℕ+} {b : Fin ↑m → ℝ} {A : Matrix (Fin ↑m) (Fin ↑n) ℝ}
  (x : EuclideanSpace ℝ (Fin ↑n)) (a : x ∈ Set.univ) (y : EuclideanSpace ℝ (Fin ↑n)) (a_1 : y ∈ Set.univ)
  (h_original_goal : Aᵀ *ᵥ (A *ᵥ x - A *ᵥ y) ⬝ᵥ (x - y) ≥ 0) : ‖A *ᵥ (x - y)‖ ^ 2 ≥ 0 := sorry

Tactic state before:
case mono
n m : ℕ+
b : Fin ↑m → ℝ
A : Matrix (Fin ↑m) (Fin ↑n) ℝ
x : EuclideanSpace ℝ (Fin ↑n)
a✝¹ : x ∈ Set.univ
y : EuclideanSpace ℝ (Fin ↑n)
a✝ : y ∈ Set.univ
⊢ Aᵀ *ᵥ (A *ᵥ x - A *ᵥ y) ⬝ᵥ (x - y) ≥ 0

Tactic: rw [← dot_mul_eq_transpose_mul_dot, ← Matrix.mulVec_sub, ← norm2eq_dot]

Tactic state after:
[case mono
 n m : ℕ+
 b : Fin ↑m → ℝ
 A : Matrix (Fin ↑m) (Fin ↑n) ℝ
 x : EuclideanSpace ℝ (Fin ↑n)
 a✝¹ : x ∈ Set.univ
 y : EuclideanSpace ℝ (Fin ↑n)
 a✝ : y ∈ Set.univ
 ⊢ ‖A *ᵥ (x - y)‖ ^ 2 ≥ 0]

Premises used:
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
norm2eq_dot : ∀ {m : ℕ+} (x : EuclideanSpace ℝ (Fin ↑m)), ‖x‖ ^ 2 = x ⬝ᵥ x
dot_mul_eq_transpose_mul_dot : ∀ {n m : ℕ+} {A : Matrix (Fin ↑m) (Fin ↑n) ℝ} (u : EuclideanSpace ℝ (Fin ↑m))
  (v : EuclideanSpace ℝ (Fin ↑n)), u ⬝ᵥ A *ᵥ v = Aᵀ *ᵥ u ⬝ᵥ v