-- File: optlib/Optlib/Algorithm/LASSO.lean
Theorem statement:
theorem extracted_formal_statement_23 {n m : ℕ+} {A : Matrix (Fin ↑m) (Fin ↑n) ℝ} (hA : ¬A = 0)
  (x : EuclideanSpace ℝ (Fin ↑n)) (ε : ℝ) (εpos : ε > 0) :
  let normA := ‖(toEuclideanLin ≪≫ₗ LinearMap.toContinuousLinearMap) A‖;
  (∀ (x : EuclideanSpace ℝ (Fin ↑n)), ‖A *ᵥ x‖ ≤ normA * ‖x‖) →
    0 < normA →
      ∀ (y : EuclideanSpace ℝ (Fin ↑n)),
        ‖x - y‖ ≤ ε / normA ^ 2 →
          ((fun x_1 => y x_1 - x x_1) ⬝ᵥ fun x_1 => ((Aᵀ * A) *ᵥ x) x_1) = (Aᵀ * A) *ᵥ x ⬝ᵥ (y - x) →
            |A *ᵥ y ⬝ᵥ A *ᵥ y - A *ᵥ x ⬝ᵥ A *ᵥ x - 2 * (fun x_1 => y x_1 - x x_1) ⬝ᵥ (Aᵀ * A) *ᵥ x| ≤ ε * ‖x - y‖ →
              |A *ᵥ y ⬝ᵥ A *ᵥ y - A *ᵥ x ⬝ᵥ A *ᵥ x - 2 * (A *ᵥ x ⬝ᵥ A *ᵥ y - A *ᵥ x ⬝ᵥ A *ᵥ x)| ≤ ε * ‖x - y‖ := sorry

Tactic state before:
case h.right
n m : ℕ+
A : Matrix (Fin ↑m) (Fin ↑n) ℝ
hA : ¬A = 0
x : EuclideanSpace ℝ (Fin ↑n)
ε : ℝ
εpos : ε > 0
normA : ℝ := ‖(toEuclideanLin ≪≫ₗ LinearMap.toContinuousLinearMap) A‖
norm_mul : ∀ (x : EuclideanSpace ℝ (Fin ↑n)), ‖A *ᵥ x‖ ≤ normA * ‖x‖
normApos : 0 < normA
y : EuclideanSpace ℝ (Fin ↑n)
ydist : ‖x - y‖ ≤ ε / normA ^ 2
aux1 : ((fun x_1 => y x_1 - x x_1) ⬝ᵥ fun x_1 => ((Aᵀ * A) *ᵥ x) x_1) = (Aᵀ * A) *ᵥ x ⬝ᵥ (y - x)
⊢ |A *ᵥ y ⬝ᵥ A *ᵥ y - A *ᵥ x ⬝ᵥ A *ᵥ x - 2 * (fun x_1 => y x_1 - x x_1) ⬝ᵥ (Aᵀ * A) *ᵥ x| ≤ ε * ‖x - y‖

Tactic: rw [aux1, ← mulVec_mulVec, ← dot_mul_eq_transpose_mul_dot _ (y - x), Matrix.mulVec_sub, dotProduct_sub]

Tactic state after:
[case h.right
 n m : ℕ+
 A : Matrix (Fin ↑m) (Fin ↑n) ℝ
 hA : ¬A = 0
 x : EuclideanSpace ℝ (Fin ↑n)
 ε : ℝ
 εpos : ε > 0
 normA : ℝ := ‖(toEuclideanLin ≪≫ₗ LinearMap.toContinuousLinearMap) A‖
 norm_mul : ∀ (x : EuclideanSpace ℝ (Fin ↑n)), ‖A *ᵥ x‖ ≤ normA * ‖x‖
 normApos : 0 < normA
 y : EuclideanSpace ℝ (Fin ↑n)
 ydist : ‖x - y‖ ≤ ε / normA ^ 2
 aux1 : ((fun x_1 => y x_1 - x x_1) ⬝ᵥ fun x_1 => ((Aᵀ * A) *ᵥ x) x_1) = (Aᵀ * A) *ᵥ x ⬝ᵥ (y - x)
 ⊢ |A *ᵥ y ⬝ᵥ A *ᵥ y - A *ᵥ x ⬝ᵥ A *ᵥ x - 2 * (A *ᵥ x ⬝ᵥ A *ᵥ y - A *ᵥ x ⬝ᵥ A *ᵥ x)| ≤ ε * ‖x - y‖]

Premises used:
dotProduct_sub : ∀ {m : Type u_2} {α : Type v} [inst : Fintype m] [inst_1 : NonUnitalNonAssocRing α] (u v w : m → α),
  u ⬝ᵥ (v - w) = u ⬝ᵥ v - u ⬝ᵥ w
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
Matrix.mulVec_mulVec : ∀ {m : Type u_2} {n : Type u_3} {o : Type u_4} {α : Type v} [inst : NonUnitalSemiring α]
  [inst_1 : Fintype n] [inst_2 : Fintype o] (v : o → α) (M : Matrix m n α) (N : Matrix n o α),
  M *ᵥ N *ᵥ v = (M * N) *ᵥ v
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