linear_algebra.matrix.dot_productMathlib.LinearAlgebra.Matrix.DotProduct

This file has been ported!

Changes since the initial port

The following section lists changes to this file in mathlib3 and mathlib4 that occured after the initial port. Most recent changes are shown first. Hovering over a commit will show all commits associated with the same mathlib3 commit.

Changes in mathlib3

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(last sync)

feat(algebra/star/basic): refactor star_ordered_ring to include add_submonoid.closure (#18854)

Per Zulip, this refactors star_ordered_ring so that the condition star_ordered_ring.nonneg_iff is changed from ∀ r : R, 0 ≤ r ↔ ∃ s, r = star s * s to something morally equivalent to ∀ x : R, 0 ≤ x ↔ x ∈ add_submonoid.closure (set.range (λ s : R, star s * s)).

In fact, we actually change the structure field nonneg_iff to le_iff, which characterizes · ≤ · instead of just 0 ≤ ·. When R is a non_unital_ring, there is effectively no change (see how we recover star_ordered_ring.nonneg_iff and also star_ordered_ring.of_nonneg_iff), but it gives a more useful and sensible condition when R is only a non_unital_semiring. For instance, now conjugate_le_conjugate holds for non_unital_semiring.

There are essentially two reasons for this change.

  1. It would be nice if things like could be star_ordered_rings. This is a minor reason, but it should be a nice convenience. This instance is added in this PR in a new file.
  2. Much more importantly, we want to declare the positive elements in a star_ordered_ring as an add_submonoid, but to accomplish this with the previous definition requires much more stringent type class assumptions (e.g., C⋆-algebras) and sophisticated machinery (the continuous functional calculus) in order to show that the sum of positive elements is positive. This change essentially allows us to defer that proof obligation to the settings where it will matter that a positive element really does have the form star s * s.

We remark that even for C⋆-algebras, the fact that the sum of positive elements (i.e., those of the form star s * s) is positive is a deep result which was first shown in 1952 by Fukamiya, and then again in 1953 by Kelley and Vaught. These proofs are in essence very similar, but the latter is more aesthetically pleasing, and it is this proof that appears in all the textbooks. I went looking and did not see another proof anywhere in the literature.

We provide a few convenience constructors for star_ordered_ring in the form of reducible definitions which can apply when R is either a non_unital_ring (so we only need to characterize nonnegativity), and / or when positive elements have exactly the form star s * s. In this way, we can effectively maintain the status quo (see the instances for real and complex).

Diff
@@ -4,6 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Johannes Hölzl, Patrick Massot, Casper Putz, Anne Baanen
 -/
 
+import algebra.star.order
 import data.matrix.basic
 import linear_algebra.std_basis
 

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

chore(linear_algebra/matrix/dot_product): weaken typeclasses (#18798)

This makes unification slightly harder on Lean, so : _s are added.

Fixes a stupid error in #18783

Diff
@@ -79,16 +79,16 @@ variables [fintype n]
 
 /-- Note that this applies to `ℂ` via `complex.strict_ordered_comm_ring`. -/
 @[simp] lemma dot_product_star_self_eq_zero
-  [strict_ordered_ring R] [star_ordered_ring R] [no_zero_divisors R] {v : n → R} :
+  [partial_order R] [non_unital_ring R] [star_ordered_ring R] [no_zero_divisors R] {v : n → R} :
   dot_product (star v) v = 0 ↔ v = 0 :=
-(finset.sum_eq_zero_iff_of_nonneg $ λ i _, @star_mul_self_nonneg _ _ _ _ (v i)).trans $
+(finset.sum_eq_zero_iff_of_nonneg $ λ i _, (@star_mul_self_nonneg _ _ _ _ (v i) : _)).trans $
   by simp [function.funext_iff, mul_eq_zero]
 
 /-- Note that this applies to `ℂ` via `complex.strict_ordered_comm_ring`. -/
 @[simp] lemma dot_product_self_star_eq_zero
-  [strict_ordered_ring R] [star_ordered_ring R] [no_zero_divisors R] {v : n → R} :
+  [partial_order R] [non_unital_ring R] [star_ordered_ring R] [no_zero_divisors R] {v : n → R} :
   dot_product v (star v) = 0 ↔ v = 0 :=
-(finset.sum_eq_zero_iff_of_nonneg $ λ i _, @star_mul_self_nonneg' _ _ _ _ (v i)).trans $
+(finset.sum_eq_zero_iff_of_nonneg $ λ i _, (@star_mul_self_nonneg' _ _ _ _ (v i) : _)).trans $
   by simp [function.funext_iff, mul_eq_zero]
 
 end self

(no changes)

(no changes)

(no changes)

(no changes)

feat(linear_algebra/matrix/dot_product): dot_product_self_eq_zero (#18783)
Diff
@@ -30,10 +30,12 @@ matrix, reindex
 -/
 
 universes v w
+variables {R : Type v} {n : Type w}
 
 namespace matrix
 
-variables {R : Type v} [semiring R] {n : Type w} [fintype n]
+section semiring
+variables [semiring R] [fintype n]
 
 @[simp] lemma dot_product_std_basis_eq_mul [decidable_eq n] (v : n → R) (c : R) (i : n) :
   dot_product v (linear_map.std_basis R (λ _, R) i c) = v i * c :=
@@ -65,4 +67,30 @@ dot_product_eq _ _ $ λ u, (h u).symm ▸ (zero_dot_product u).symm
 lemma dot_product_eq_zero_iff {v : n → R} : (∀ w, dot_product v w = 0) ↔ v = 0 :=
 ⟨λ h, dot_product_eq_zero v h, λ h w, h.symm ▸ zero_dot_product w⟩
 
+end semiring
+
+section self
+variables [fintype n]
+
+@[simp] lemma dot_product_self_eq_zero [linear_ordered_ring R] {v : n → R} :
+  dot_product v v = 0 ↔ v = 0 :=
+(finset.sum_eq_zero_iff_of_nonneg $ λ i _, mul_self_nonneg (v i)).trans $
+  by simp [function.funext_iff]
+
+/-- Note that this applies to `ℂ` via `complex.strict_ordered_comm_ring`. -/
+@[simp] lemma dot_product_star_self_eq_zero
+  [strict_ordered_ring R] [star_ordered_ring R] [no_zero_divisors R] {v : n → R} :
+  dot_product (star v) v = 0 ↔ v = 0 :=
+(finset.sum_eq_zero_iff_of_nonneg $ λ i _, @star_mul_self_nonneg _ _ _ _ (v i)).trans $
+  by simp [function.funext_iff, mul_eq_zero]
+
+/-- Note that this applies to `ℂ` via `complex.strict_ordered_comm_ring`. -/
+@[simp] lemma dot_product_self_star_eq_zero
+  [strict_ordered_ring R] [star_ordered_ring R] [no_zero_divisors R] {v : n → R} :
+  dot_product v (star v) = 0 ↔ v = 0 :=
+(finset.sum_eq_zero_iff_of_nonneg $ λ i _, @star_mul_self_nonneg' _ _ _ _ (v i)).trans $
+  by simp [function.funext_iff, mul_eq_zero]
+
+end self
+
 end matrix

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(first ported)

Changes in mathlib3port

mathlib3
mathlib3port
Diff
@@ -65,7 +65,7 @@ theorem dotProduct_stdBasis_one [DecidableEq n] (v : n → R) (i : n) :
 theorem dotProduct_eq (v w : n → R) (h : ∀ u, dotProduct v u = dotProduct w u) : v = w :=
   by
   funext x
-  classical
+  classical rw [← dot_product_std_basis_one v x, ← dot_product_std_basis_one w x, h]
 #align matrix.dot_product_eq Matrix.dotProduct_eq
 -/
 
Diff
@@ -65,7 +65,7 @@ theorem dotProduct_stdBasis_one [DecidableEq n] (v : n → R) (i : n) :
 theorem dotProduct_eq (v w : n → R) (h : ∀ u, dotProduct v u = dotProduct w u) : v = w :=
   by
   funext x
-  classical rw [← dot_product_std_basis_one v x, ← dot_product_std_basis_one w x, h]
+  classical
 #align matrix.dot_product_eq Matrix.dotProduct_eq
 -/
 
Diff
@@ -96,7 +96,7 @@ variable [Fintype n]
 #print Matrix.dotProduct_self_eq_zero /-
 @[simp]
 theorem dotProduct_self_eq_zero [LinearOrderedRing R] {v : n → R} : dotProduct v v = 0 ↔ v = 0 :=
-  (Finset.sum_eq_zero_iff_of_nonneg fun i _ => mul_self_nonneg (v i)).trans <| by
+  (Finset.sum_eq_zero_iff_of_nonneg fun i _ => hMul_self_nonneg (v i)).trans <| by
     simp [Function.funext_iff]
 #align matrix.dot_product_self_eq_zero Matrix.dotProduct_self_eq_zero
 -/
Diff
@@ -116,7 +116,7 @@ theorem dotProduct_star_self_eq_zero [PartialOrder R] [NonUnitalRing R] [StarOrd
 @[simp]
 theorem dotProduct_self_star_eq_zero [PartialOrder R] [NonUnitalRing R] [StarOrderedRing R]
     [NoZeroDivisors R] {v : n → R} : dotProduct v (star v) = 0 ↔ v = 0 :=
-  (Finset.sum_eq_zero_iff_of_nonneg fun i _ => (@star_mul_self_nonneg' _ _ _ _ (v i) : _)).trans <|
+  (Finset.sum_eq_zero_iff_of_nonneg fun i _ => (@mul_star_self_nonneg _ _ _ _ (v i) : _)).trans <|
     by simp [Function.funext_iff, mul_eq_zero]
 #align matrix.dot_product_self_star_eq_zero Matrix.dotProduct_self_star_eq_zero
 -/
Diff
@@ -3,9 +3,9 @@ Copyright (c) 2019 Johannes Hölzl. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Johannes Hölzl, Patrick Massot, Casper Putz, Anne Baanen
 -/
-import Mathbin.Algebra.Star.Order
-import Mathbin.Data.Matrix.Basic
-import Mathbin.LinearAlgebra.StdBasis
+import Algebra.Star.Order
+import Data.Matrix.Basic
+import LinearAlgebra.StdBasis
 
 #align_import linear_algebra.matrix.dot_product from "leanprover-community/mathlib"@"31c24aa72e7b3e5ed97a8412470e904f82b81004"
 
Diff
@@ -2,16 +2,13 @@
 Copyright (c) 2019 Johannes Hölzl. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Johannes Hölzl, Patrick Massot, Casper Putz, Anne Baanen
-
-! This file was ported from Lean 3 source module linear_algebra.matrix.dot_product
-! leanprover-community/mathlib commit 31c24aa72e7b3e5ed97a8412470e904f82b81004
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
 -/
 import Mathbin.Algebra.Star.Order
 import Mathbin.Data.Matrix.Basic
 import Mathbin.LinearAlgebra.StdBasis
 
+#align_import linear_algebra.matrix.dot_product from "leanprover-community/mathlib"@"31c24aa72e7b3e5ed97a8412470e904f82b81004"
+
 /-!
 # Dot product of two vectors
 
Diff
@@ -45,6 +45,7 @@ section Semiring
 
 variable [Semiring R] [Fintype n]
 
+#print Matrix.dotProduct_stdBasis_eq_mul /-
 @[simp]
 theorem dotProduct_stdBasis_eq_mul [DecidableEq n] (v : n → R) (c : R) (i : n) :
     dotProduct v (LinearMap.stdBasis R (fun _ => R) i c) = v i * c :=
@@ -53,30 +54,41 @@ theorem dotProduct_stdBasis_eq_mul [DecidableEq n] (v : n → R) (c : R) (i : n)
   exact fun _ _ hb => by rw [LinearMap.stdBasis_ne _ _ _ _ hb, MulZeroClass.mul_zero]
   exact fun hi => False.elim (hi <| Finset.mem_univ _)
 #align matrix.dot_product_std_basis_eq_mul Matrix.dotProduct_stdBasis_eq_mul
+-/
 
+#print Matrix.dotProduct_stdBasis_one /-
 @[simp]
 theorem dotProduct_stdBasis_one [DecidableEq n] (v : n → R) (i : n) :
     dotProduct v (LinearMap.stdBasis R (fun _ => R) i 1) = v i := by
   rw [dot_product_std_basis_eq_mul, mul_one]
 #align matrix.dot_product_std_basis_one Matrix.dotProduct_stdBasis_one
+-/
 
+#print Matrix.dotProduct_eq /-
 theorem dotProduct_eq (v w : n → R) (h : ∀ u, dotProduct v u = dotProduct w u) : v = w :=
   by
   funext x
   classical rw [← dot_product_std_basis_one v x, ← dot_product_std_basis_one w x, h]
 #align matrix.dot_product_eq Matrix.dotProduct_eq
+-/
 
+#print Matrix.dotProduct_eq_iff /-
 theorem dotProduct_eq_iff {v w : n → R} : (∀ u, dotProduct v u = dotProduct w u) ↔ v = w :=
   ⟨fun h => dotProduct_eq v w h, fun h _ => h ▸ rfl⟩
 #align matrix.dot_product_eq_iff Matrix.dotProduct_eq_iff
+-/
 
+#print Matrix.dotProduct_eq_zero /-
 theorem dotProduct_eq_zero (v : n → R) (h : ∀ w, dotProduct v w = 0) : v = 0 :=
   dotProduct_eq _ _ fun u => (h u).symm ▸ (zero_dotProduct u).symm
 #align matrix.dot_product_eq_zero Matrix.dotProduct_eq_zero
+-/
 
+#print Matrix.dotProduct_eq_zero_iff /-
 theorem dotProduct_eq_zero_iff {v : n → R} : (∀ w, dotProduct v w = 0) ↔ v = 0 :=
   ⟨fun h => dotProduct_eq_zero v h, fun h w => h.symm ▸ zero_dotProduct w⟩
 #align matrix.dot_product_eq_zero_iff Matrix.dotProduct_eq_zero_iff
+-/
 
 end Semiring
 
@@ -84,12 +96,15 @@ section Self
 
 variable [Fintype n]
 
+#print Matrix.dotProduct_self_eq_zero /-
 @[simp]
 theorem dotProduct_self_eq_zero [LinearOrderedRing R] {v : n → R} : dotProduct v v = 0 ↔ v = 0 :=
   (Finset.sum_eq_zero_iff_of_nonneg fun i _ => mul_self_nonneg (v i)).trans <| by
     simp [Function.funext_iff]
 #align matrix.dot_product_self_eq_zero Matrix.dotProduct_self_eq_zero
+-/
 
+#print Matrix.dotProduct_star_self_eq_zero /-
 /-- Note that this applies to `ℂ` via `complex.strict_ordered_comm_ring`. -/
 @[simp]
 theorem dotProduct_star_self_eq_zero [PartialOrder R] [NonUnitalRing R] [StarOrderedRing R]
@@ -97,7 +112,9 @@ theorem dotProduct_star_self_eq_zero [PartialOrder R] [NonUnitalRing R] [StarOrd
   (Finset.sum_eq_zero_iff_of_nonneg fun i _ => (@star_mul_self_nonneg _ _ _ _ (v i) : _)).trans <|
     by simp [Function.funext_iff, mul_eq_zero]
 #align matrix.dot_product_star_self_eq_zero Matrix.dotProduct_star_self_eq_zero
+-/
 
+#print Matrix.dotProduct_self_star_eq_zero /-
 /-- Note that this applies to `ℂ` via `complex.strict_ordered_comm_ring`. -/
 @[simp]
 theorem dotProduct_self_star_eq_zero [PartialOrder R] [NonUnitalRing R] [StarOrderedRing R]
@@ -105,6 +122,7 @@ theorem dotProduct_self_star_eq_zero [PartialOrder R] [NonUnitalRing R] [StarOrd
   (Finset.sum_eq_zero_iff_of_nonneg fun i _ => (@star_mul_self_nonneg' _ _ _ _ (v i) : _)).trans <|
     by simp [Function.funext_iff, mul_eq_zero]
 #align matrix.dot_product_self_star_eq_zero Matrix.dotProduct_self_star_eq_zero
+-/
 
 end Self
 
Diff
@@ -4,10 +4,11 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Johannes Hölzl, Patrick Massot, Casper Putz, Anne Baanen
 
 ! This file was ported from Lean 3 source module linear_algebra.matrix.dot_product
-! leanprover-community/mathlib commit 5ac1dab1670014b4c07a82c86a67f3d064a1b3e1
+! leanprover-community/mathlib commit 31c24aa72e7b3e5ed97a8412470e904f82b81004
 ! Please do not edit these lines, except to modify the commit id
 ! if you have ported upstream changes.
 -/
+import Mathbin.Algebra.Star.Order
 import Mathbin.Data.Matrix.Basic
 import Mathbin.LinearAlgebra.StdBasis
 
Diff
@@ -44,12 +44,6 @@ section Semiring
 
 variable [Semiring R] [Fintype n]
 
-/- warning: matrix.dot_product_std_basis_eq_mul -> Matrix.dotProduct_stdBasis_eq_mul is a dubious translation:
-lean 3 declaration is
-  forall {R : Type.{u1}} {n : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : Fintype.{u2} n] [_inst_3 : DecidableEq.{succ u2} n] (v : n -> R) (c : R) (i : n), Eq.{succ u1} R (Matrix.dotProduct.{u1, u2} n R _inst_2 (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) v (coeFn.{max (succ u1) (succ (max u2 u1)), max (succ u1) (succ (max u2 u1))} (LinearMap.{u1, u1, u1, max u2 u1} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) ((fun (_x : n) => R) i) (forall (i : n), (fun (_x : n) => R) i) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (Pi.addCommMonoid.{u2, u1} n (fun (i : n) => (fun (_x : n) => R) i) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1)))) (Semiring.toModule.{u1} R _inst_1) (Pi.module.{u2, u1, u1} n (fun (i : n) => (fun (_x : n) => R) i) R _inst_1 (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (fun (i : n) => Semiring.toModule.{u1} R _inst_1))) (fun (_x : LinearMap.{u1, u1, u1, max u2 u1} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) ((fun (_x : n) => R) i) (forall (i : n), (fun (_x : n) => R) i) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (Pi.addCommMonoid.{u2, u1} n (fun (i : n) => (fun (_x : n) => R) i) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1)))) (Semiring.toModule.{u1} R _inst_1) (Pi.module.{u2, u1, u1} n (fun (i : n) => (fun (_x : n) => R) i) R _inst_1 (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (fun (i : n) => Semiring.toModule.{u1} R _inst_1))) => R -> (forall (i : n), (fun (_x : n) => R) i)) (LinearMap.hasCoeToFun.{u1, u1, u1, max u2 u1} R R ((fun (_x : n) => R) i) (forall (i : n), (fun (_x : n) => R) i) _inst_1 _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (Pi.addCommMonoid.{u2, u1} n (fun (i : n) => (fun (_x : n) => R) i) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1)))) (Semiring.toModule.{u1} R _inst_1) (Pi.module.{u2, u1, u1} n (fun (i : n) => (fun (_x : n) => R) i) R _inst_1 (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (fun (i : n) => Semiring.toModule.{u1} R _inst_1)) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (LinearMap.stdBasis.{u1, u2, u1} R n _inst_1 (fun (_x : n) => R) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (fun (i : n) => Semiring.toModule.{u1} R _inst_1) (fun (a : n) (b : n) => _inst_3 a b) i) c)) (HMul.hMul.{u1, u1, u1} R R R (instHMul.{u1} R (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))))) (v i) c)
-but is expected to have type
-  forall {R : Type.{u1}} {n : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : Fintype.{u2} n] [_inst_3 : DecidableEq.{succ u2} n] (v : n -> R) (c : R) (i : n), Eq.{succ u1} R (Matrix.dotProduct.{u1, u2} n R _inst_2 (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) v (FunLike.coe.{max (succ u1) (succ u2), succ u1, max (succ u1) (succ u2)} (LinearMap.{u1, u1, u1, max u2 u1} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) R (n -> R) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.52 : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.52 : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.52 : n) => R) i) _inst_1))) (Pi.addCommMonoid.{u2, u1} n (fun (i : n) => R) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.52 : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.52 : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.52 : n) => R) i) _inst_1)))) (Semiring.toModule.{u1} R _inst_1) (Pi.module.{u2, u1, u1} n (fun (i : n) => R) R _inst_1 (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.52 : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.52 : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.52 : n) => R) i) _inst_1))) (fun (i : n) => Semiring.toModule.{u1} R _inst_1))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6193 : R) => n -> R) _x) (LinearMap.instFunLikeLinearMap.{u1, u1, u1, max u1 u2} R R R (n -> R) _inst_1 _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (Pi.addCommMonoid.{u2, u1} n (fun (i : n) => R) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1)))) (Semiring.toModule.{u1} R _inst_1) (Pi.module.{u2, u1, u1} n (fun (i : n) => R) R _inst_1 (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (fun (i : n) => Semiring.toModule.{u1} R _inst_1)) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (LinearMap.stdBasis.{u1, u2, u1} R n _inst_1 (fun (_x : n) => R) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (fun (i : n) => Semiring.toModule.{u1} R _inst_1) (fun (a : n) (b : n) => _inst_3 a b) i) c)) (HMul.hMul.{u1, u1, u1} R R R (instHMul.{u1} R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))) (v i) c)
-Case conversion may be inaccurate. Consider using '#align matrix.dot_product_std_basis_eq_mul Matrix.dotProduct_stdBasis_eq_mulₓ'. -/
 @[simp]
 theorem dotProduct_stdBasis_eq_mul [DecidableEq n] (v : n → R) (c : R) (i : n) :
     dotProduct v (LinearMap.stdBasis R (fun _ => R) i c) = v i * c :=
@@ -59,56 +53,26 @@ theorem dotProduct_stdBasis_eq_mul [DecidableEq n] (v : n → R) (c : R) (i : n)
   exact fun hi => False.elim (hi <| Finset.mem_univ _)
 #align matrix.dot_product_std_basis_eq_mul Matrix.dotProduct_stdBasis_eq_mul
 
-/- warning: matrix.dot_product_std_basis_one -> Matrix.dotProduct_stdBasis_one is a dubious translation:
-lean 3 declaration is
-  forall {R : Type.{u1}} {n : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : Fintype.{u2} n] [_inst_3 : DecidableEq.{succ u2} n] (v : n -> R) (i : n), Eq.{succ u1} R (Matrix.dotProduct.{u1, u2} n R _inst_2 (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) v (coeFn.{max (succ u1) (succ (max u2 u1)), max (succ u1) (succ (max u2 u1))} (LinearMap.{u1, u1, u1, max u2 u1} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) ((fun (_x : n) => R) i) (forall (i : n), (fun (_x : n) => R) i) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (Pi.addCommMonoid.{u2, u1} n (fun (i : n) => (fun (_x : n) => R) i) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1)))) (Semiring.toModule.{u1} R _inst_1) (Pi.module.{u2, u1, u1} n (fun (i : n) => (fun (_x : n) => R) i) R _inst_1 (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (fun (i : n) => Semiring.toModule.{u1} R _inst_1))) (fun (_x : LinearMap.{u1, u1, u1, max u2 u1} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) ((fun (_x : n) => R) i) (forall (i : n), (fun (_x : n) => R) i) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (Pi.addCommMonoid.{u2, u1} n (fun (i : n) => (fun (_x : n) => R) i) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1)))) (Semiring.toModule.{u1} R _inst_1) (Pi.module.{u2, u1, u1} n (fun (i : n) => (fun (_x : n) => R) i) R _inst_1 (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (fun (i : n) => Semiring.toModule.{u1} R _inst_1))) => R -> (forall (i : n), (fun (_x : n) => R) i)) (LinearMap.hasCoeToFun.{u1, u1, u1, max u2 u1} R R ((fun (_x : n) => R) i) (forall (i : n), (fun (_x : n) => R) i) _inst_1 _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (Pi.addCommMonoid.{u2, u1} n (fun (i : n) => (fun (_x : n) => R) i) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1)))) (Semiring.toModule.{u1} R _inst_1) (Pi.module.{u2, u1, u1} n (fun (i : n) => (fun (_x : n) => R) i) R _inst_1 (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (fun (i : n) => Semiring.toModule.{u1} R _inst_1)) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (LinearMap.stdBasis.{u1, u2, u1} R n _inst_1 (fun (_x : n) => R) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (fun (i : n) => Semiring.toModule.{u1} R _inst_1) (fun (a : n) (b : n) => _inst_3 a b) i) (OfNat.ofNat.{u1} ((fun (_x : n) => R) i) 1 (OfNat.mk.{u1} ((fun (_x : n) => R) i) 1 (One.one.{u1} ((fun (_x : n) => R) i) (AddMonoidWithOne.toOne.{u1} ((fun (_x : n) => R) i) (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toAddCommMonoidWithOne.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))))))))) (v i)
-but is expected to have type
-  forall {R : Type.{u1}} {n : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : Fintype.{u2} n] [_inst_3 : DecidableEq.{succ u2} n] (v : n -> R) (i : n), Eq.{succ u1} R (Matrix.dotProduct.{u1, u2} n R _inst_2 (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) v (FunLike.coe.{max (succ u1) (succ u2), succ u1, max (succ u1) (succ u2)} (LinearMap.{u1, u1, u1, max u2 u1} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) R (n -> R) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.179 : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.179 : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.179 : n) => R) i) _inst_1))) (Pi.addCommMonoid.{u2, u1} n (fun (i : n) => R) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.179 : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.179 : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.179 : n) => R) i) _inst_1)))) (Semiring.toModule.{u1} R _inst_1) (Pi.module.{u2, u1, u1} n (fun (i : n) => R) R _inst_1 (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.179 : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.179 : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.179 : n) => R) i) _inst_1))) (fun (i : n) => Semiring.toModule.{u1} R _inst_1))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6193 : R) => n -> R) _x) (LinearMap.instFunLikeLinearMap.{u1, u1, u1, max u1 u2} R R R (n -> R) _inst_1 _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (Pi.addCommMonoid.{u2, u1} n (fun (i : n) => R) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1)))) (Semiring.toModule.{u1} R _inst_1) (Pi.module.{u2, u1, u1} n (fun (i : n) => R) R _inst_1 (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (fun (i : n) => Semiring.toModule.{u1} R _inst_1)) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (LinearMap.stdBasis.{u1, u2, u1} R n _inst_1 (fun (_x : n) => R) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (fun (i : n) => Semiring.toModule.{u1} R _inst_1) (fun (a : n) (b : n) => _inst_3 a b) i) (OfNat.ofNat.{u1} R 1 (One.toOfNat1.{u1} R (Semiring.toOne.{u1} R _inst_1))))) (v i)
-Case conversion may be inaccurate. Consider using '#align matrix.dot_product_std_basis_one Matrix.dotProduct_stdBasis_oneₓ'. -/
 @[simp]
 theorem dotProduct_stdBasis_one [DecidableEq n] (v : n → R) (i : n) :
     dotProduct v (LinearMap.stdBasis R (fun _ => R) i 1) = v i := by
   rw [dot_product_std_basis_eq_mul, mul_one]
 #align matrix.dot_product_std_basis_one Matrix.dotProduct_stdBasis_one
 
-/- warning: matrix.dot_product_eq -> Matrix.dotProduct_eq is a dubious translation:
-lean 3 declaration is
-  forall {R : Type.{u1}} {n : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : Fintype.{u2} n] (v : n -> R) (w : n -> R), (forall (u : n -> R), Eq.{succ u1} R (Matrix.dotProduct.{u1, u2} n R _inst_2 (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) v u) (Matrix.dotProduct.{u1, u2} n R _inst_2 (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) w u)) -> (Eq.{max (succ u2) (succ u1)} (n -> R) v w)
-but is expected to have type
-  forall {R : Type.{u1}} {n : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : Fintype.{u2} n] (v : n -> R) (w : n -> R), (forall (u : n -> R), Eq.{succ u1} R (Matrix.dotProduct.{u1, u2} n R _inst_2 (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) v u) (Matrix.dotProduct.{u1, u2} n R _inst_2 (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) w u)) -> (Eq.{max (succ u1) (succ u2)} (n -> R) v w)
-Case conversion may be inaccurate. Consider using '#align matrix.dot_product_eq Matrix.dotProduct_eqₓ'. -/
 theorem dotProduct_eq (v w : n → R) (h : ∀ u, dotProduct v u = dotProduct w u) : v = w :=
   by
   funext x
   classical rw [← dot_product_std_basis_one v x, ← dot_product_std_basis_one w x, h]
 #align matrix.dot_product_eq Matrix.dotProduct_eq
 
-/- warning: matrix.dot_product_eq_iff -> Matrix.dotProduct_eq_iff is a dubious translation:
-lean 3 declaration is
-  forall {R : Type.{u1}} {n : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : Fintype.{u2} n] {v : n -> R} {w : n -> R}, Iff (forall (u : n -> R), Eq.{succ u1} R (Matrix.dotProduct.{u1, u2} n R _inst_2 (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) v u) (Matrix.dotProduct.{u1, u2} n R _inst_2 (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) w u)) (Eq.{max (succ u2) (succ u1)} (n -> R) v w)
-but is expected to have type
-  forall {R : Type.{u1}} {n : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : Fintype.{u2} n] {v : n -> R} {w : n -> R}, Iff (forall (u : n -> R), Eq.{succ u1} R (Matrix.dotProduct.{u1, u2} n R _inst_2 (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) v u) (Matrix.dotProduct.{u1, u2} n R _inst_2 (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) w u)) (Eq.{max (succ u1) (succ u2)} (n -> R) v w)
-Case conversion may be inaccurate. Consider using '#align matrix.dot_product_eq_iff Matrix.dotProduct_eq_iffₓ'. -/
 theorem dotProduct_eq_iff {v w : n → R} : (∀ u, dotProduct v u = dotProduct w u) ↔ v = w :=
   ⟨fun h => dotProduct_eq v w h, fun h _ => h ▸ rfl⟩
 #align matrix.dot_product_eq_iff Matrix.dotProduct_eq_iff
 
-/- warning: matrix.dot_product_eq_zero -> Matrix.dotProduct_eq_zero is a dubious translation:
-lean 3 declaration is
-  forall {R : Type.{u1}} {n : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : Fintype.{u2} n] (v : n -> R), (forall (w : n -> R), Eq.{succ u1} R (Matrix.dotProduct.{u1, u2} n R _inst_2 (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) v w) (OfNat.ofNat.{u1} R 0 (OfNat.mk.{u1} R 0 (Zero.zero.{u1} R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))))))) -> (Eq.{max (succ u2) (succ u1)} (n -> R) v (OfNat.ofNat.{max u2 u1} (n -> R) 0 (OfNat.mk.{max u2 u1} (n -> R) 0 (Zero.zero.{max u2 u1} (n -> R) (Pi.instZero.{u2, u1} n (fun (ᾰ : n) => R) (fun (i : n) => MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))))))))
-but is expected to have type
-  forall {R : Type.{u1}} {n : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : Fintype.{u2} n] (v : n -> R), (forall (w : n -> R), Eq.{succ u1} R (Matrix.dotProduct.{u1, u2} n R _inst_2 (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) v w) (OfNat.ofNat.{u1} R 0 (Zero.toOfNat0.{u1} R (MonoidWithZero.toZero.{u1} R (Semiring.toMonoidWithZero.{u1} R _inst_1))))) -> (Eq.{max (succ u1) (succ u2)} (n -> R) v (OfNat.ofNat.{max u1 u2} (n -> R) 0 (Zero.toOfNat0.{max u1 u2} (n -> R) (Pi.instZero.{u2, u1} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.359 : n) => R) (fun (i : n) => MonoidWithZero.toZero.{u1} R (Semiring.toMonoidWithZero.{u1} R _inst_1))))))
-Case conversion may be inaccurate. Consider using '#align matrix.dot_product_eq_zero Matrix.dotProduct_eq_zeroₓ'. -/
 theorem dotProduct_eq_zero (v : n → R) (h : ∀ w, dotProduct v w = 0) : v = 0 :=
   dotProduct_eq _ _ fun u => (h u).symm ▸ (zero_dotProduct u).symm
 #align matrix.dot_product_eq_zero Matrix.dotProduct_eq_zero
 
-/- warning: matrix.dot_product_eq_zero_iff -> Matrix.dotProduct_eq_zero_iff is a dubious translation:
-lean 3 declaration is
-  forall {R : Type.{u1}} {n : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : Fintype.{u2} n] {v : n -> R}, Iff (forall (w : n -> R), Eq.{succ u1} R (Matrix.dotProduct.{u1, u2} n R _inst_2 (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) v w) (OfNat.ofNat.{u1} R 0 (OfNat.mk.{u1} R 0 (Zero.zero.{u1} R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))))))) (Eq.{max (succ u2) (succ u1)} (n -> R) v (OfNat.ofNat.{max u2 u1} (n -> R) 0 (OfNat.mk.{max u2 u1} (n -> R) 0 (Zero.zero.{max u2 u1} (n -> R) (Pi.instZero.{u2, u1} n (fun (ᾰ : n) => R) (fun (i : n) => MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))))))))
-but is expected to have type
-  forall {R : Type.{u1}} {n : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : Fintype.{u2} n] {v : n -> R}, Iff (forall (w : n -> R), Eq.{succ u1} R (Matrix.dotProduct.{u1, u2} n R _inst_2 (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) v w) (OfNat.ofNat.{u1} R 0 (Zero.toOfNat0.{u1} R (MonoidWithZero.toZero.{u1} R (Semiring.toMonoidWithZero.{u1} R _inst_1))))) (Eq.{max (succ u1) (succ u2)} (n -> R) v (OfNat.ofNat.{max u1 u2} (n -> R) 0 (Zero.toOfNat0.{max u1 u2} (n -> R) (Pi.instZero.{u2, u1} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.407 : n) => R) (fun (i : n) => MonoidWithZero.toZero.{u1} R (Semiring.toMonoidWithZero.{u1} R _inst_1))))))
-Case conversion may be inaccurate. Consider using '#align matrix.dot_product_eq_zero_iff Matrix.dotProduct_eq_zero_iffₓ'. -/
 theorem dotProduct_eq_zero_iff {v : n → R} : (∀ w, dotProduct v w = 0) ↔ v = 0 :=
   ⟨fun h => dotProduct_eq_zero v h, fun h w => h.symm ▸ zero_dotProduct w⟩
 #align matrix.dot_product_eq_zero_iff Matrix.dotProduct_eq_zero_iff
@@ -119,24 +83,12 @@ section Self
 
 variable [Fintype n]
 
-/- warning: matrix.dot_product_self_eq_zero -> Matrix.dotProduct_self_eq_zero is a dubious translation:
-lean 3 declaration is
-  forall {R : Type.{u1}} {n : Type.{u2}} [_inst_1 : Fintype.{u2} n] [_inst_2 : LinearOrderedRing.{u1} R] {v : n -> R}, Iff (Eq.{succ u1} R (Matrix.dotProduct.{u1, u2} n R _inst_1 (Distrib.toHasMul.{u1} R (Ring.toDistrib.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R _inst_2)))) (AddCommGroup.toAddCommMonoid.{u1} R (OrderedAddCommGroup.toAddCommGroup.{u1} R (StrictOrderedRing.toOrderedAddCommGroup.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R _inst_2)))) v v) (OfNat.ofNat.{u1} R 0 (OfNat.mk.{u1} R 0 (Zero.zero.{u1} R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R _inst_2))))))))))) (Eq.{max (succ u2) (succ u1)} (n -> R) v (OfNat.ofNat.{max u2 u1} (n -> R) 0 (OfNat.mk.{max u2 u1} (n -> R) 0 (Zero.zero.{max u2 u1} (n -> R) (Pi.instZero.{u2, u1} n (fun (ᾰ : n) => R) (fun (i : n) => MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R _inst_2))))))))))))
-but is expected to have type
-  forall {R : Type.{u1}} {n : Type.{u2}} [_inst_1 : Fintype.{u2} n] [_inst_2 : LinearOrderedRing.{u1} R] {v : n -> R}, Iff (Eq.{succ u1} R (Matrix.dotProduct.{u1, u2} n R _inst_1 (NonUnitalNonAssocRing.toMul.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R _inst_2))))) (OrderedCancelAddCommMonoid.toAddCommMonoid.{u1} R (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{u1} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} R (LinearOrderedRing.toLinearOrderedSemiring.{u1} R _inst_2)))) v v) (OfNat.ofNat.{u1} R 0 (Zero.toOfNat0.{u1} R (MonoidWithZero.toZero.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} R (LinearOrderedRing.toLinearOrderedSemiring.{u1} R _inst_2)))))))) (Eq.{max (succ u1) (succ u2)} (n -> R) v (OfNat.ofNat.{max u1 u2} (n -> R) 0 (Zero.toOfNat0.{max u1 u2} (n -> R) (Pi.instZero.{u2, u1} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.467 : n) => R) (fun (i : n) => MonoidWithZero.toZero.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} R (LinearOrderedRing.toLinearOrderedSemiring.{u1} R _inst_2)))))))))
-Case conversion may be inaccurate. Consider using '#align matrix.dot_product_self_eq_zero Matrix.dotProduct_self_eq_zeroₓ'. -/
 @[simp]
 theorem dotProduct_self_eq_zero [LinearOrderedRing R] {v : n → R} : dotProduct v v = 0 ↔ v = 0 :=
   (Finset.sum_eq_zero_iff_of_nonneg fun i _ => mul_self_nonneg (v i)).trans <| by
     simp [Function.funext_iff]
 #align matrix.dot_product_self_eq_zero Matrix.dotProduct_self_eq_zero
 
-/- warning: matrix.dot_product_star_self_eq_zero -> Matrix.dotProduct_star_self_eq_zero is a dubious translation:
-lean 3 declaration is
-  forall {R : Type.{u1}} {n : Type.{u2}} [_inst_1 : Fintype.{u2} n] [_inst_2 : PartialOrder.{u1} R] [_inst_3 : NonUnitalRing.{u1} R] [_inst_4 : StarOrderedRing.{u1} R (NonUnitalRing.toNonUnitalSemiring.{u1} R _inst_3) _inst_2] [_inst_5 : NoZeroDivisors.{u1} R (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_3)))) (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_3))))] {v : n -> R}, Iff (Eq.{succ u1} R (Matrix.dotProduct.{u1, u2} n R _inst_1 (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_3)))) (AddCommGroup.toAddCommMonoid.{u1} R (OrderedAddCommGroup.toAddCommGroup.{u1} R (StarOrderedRing.orderedAddCommGroup.{u1} R _inst_3 _inst_2 _inst_4))) (Star.star.{max u2 u1} (n -> R) (Pi.hasStar.{u2, u1} n (fun (ᾰ : n) => R) (fun (i : n) => InvolutiveStar.toHasStar.{u1} R (StarAddMonoid.toHasInvolutiveStar.{u1} R (AddCommMonoid.toAddMonoid.{u1} R (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonUnitalSemiring.toNonUnitalNonAssocSemiring.{u1} R (NonUnitalRing.toNonUnitalSemiring.{u1} R _inst_3)))) (StarRing.toStarAddMonoid.{u1} R (NonUnitalRing.toNonUnitalSemiring.{u1} R _inst_3) (StarOrderedRing.toStarRing.{u1} R (NonUnitalRing.toNonUnitalSemiring.{u1} R _inst_3) _inst_2 _inst_4))))) v) v) (OfNat.ofNat.{u1} R 0 (OfNat.mk.{u1} R 0 (Zero.zero.{u1} R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_3)))))))) (Eq.{max (succ u2) (succ u1)} (n -> R) v (OfNat.ofNat.{max u2 u1} (n -> R) 0 (OfNat.mk.{max u2 u1} (n -> R) 0 (Zero.zero.{max u2 u1} (n -> R) (Pi.instZero.{u2, u1} n (fun (ᾰ : n) => R) (fun (i : n) => MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_3)))))))))
-but is expected to have type
-  forall {R : Type.{u1}} {n : Type.{u2}} [_inst_1 : Fintype.{u2} n] [_inst_2 : PartialOrder.{u1} R] [_inst_3 : NonUnitalRing.{u1} R] [_inst_4 : StarOrderedRing.{u1} R (NonUnitalRing.toNonUnitalSemiring.{u1} R _inst_3) _inst_2] [_inst_5 : NoZeroDivisors.{u1} R (NonUnitalNonAssocRing.toMul.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_3)) (SemigroupWithZero.toZero.{u1} R (NonUnitalSemiring.toSemigroupWithZero.{u1} R (NonUnitalRing.toNonUnitalSemiring.{u1} R _inst_3)))] {v : n -> R}, Iff (Eq.{succ u1} R (Matrix.dotProduct.{u1, u2} n R _inst_1 (NonUnitalNonAssocRing.toMul.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_3)) (OrderedCancelAddCommMonoid.toAddCommMonoid.{u1} R (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u1} R (StarOrderedRing.instOrderedAddCommGroup.{u1} R _inst_3 _inst_2 _inst_4))) (Star.star.{max u2 u1} (n -> R) (Pi.instStarForAll.{u2, u1} n (fun (ᾰ : n) => R) (fun (i : n) => InvolutiveStar.toStar.{u1} R (StarAddMonoid.toInvolutiveStar.{u1} R (SubNegMonoid.toAddMonoid.{u1} R (AddGroup.toSubNegMonoid.{u1} R (AddCommGroup.toAddGroup.{u1} R (OrderedAddCommGroup.toAddCommGroup.{u1} R (StarOrderedRing.instOrderedAddCommGroup.{u1} R _inst_3 _inst_2 _inst_4))))) (StarRing.toStarAddMonoid.{u1} R (NonUnitalRing.toNonUnitalSemiring.{u1} R _inst_3) (StarOrderedRing.toStarRing.{u1} R (NonUnitalRing.toNonUnitalSemiring.{u1} R _inst_3) _inst_2 _inst_4))))) v) v) (OfNat.ofNat.{u1} R 0 (Zero.toOfNat0.{u1} R (SemigroupWithZero.toZero.{u1} R (NonUnitalSemiring.toSemigroupWithZero.{u1} R (NonUnitalRing.toNonUnitalSemiring.{u1} R _inst_3)))))) (Eq.{max (succ u1) (succ u2)} (n -> R) v (OfNat.ofNat.{max u1 u2} (n -> R) 0 (Zero.toOfNat0.{max u1 u2} (n -> R) (Pi.instZero.{u2, u1} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.524 : n) => R) (fun (i : n) => SemigroupWithZero.toZero.{u1} R (NonUnitalSemiring.toSemigroupWithZero.{u1} R (NonUnitalRing.toNonUnitalSemiring.{u1} R _inst_3)))))))
-Case conversion may be inaccurate. Consider using '#align matrix.dot_product_star_self_eq_zero Matrix.dotProduct_star_self_eq_zeroₓ'. -/
 /-- Note that this applies to `ℂ` via `complex.strict_ordered_comm_ring`. -/
 @[simp]
 theorem dotProduct_star_self_eq_zero [PartialOrder R] [NonUnitalRing R] [StarOrderedRing R]
@@ -145,12 +97,6 @@ theorem dotProduct_star_self_eq_zero [PartialOrder R] [NonUnitalRing R] [StarOrd
     by simp [Function.funext_iff, mul_eq_zero]
 #align matrix.dot_product_star_self_eq_zero Matrix.dotProduct_star_self_eq_zero
 
-/- warning: matrix.dot_product_self_star_eq_zero -> Matrix.dotProduct_self_star_eq_zero is a dubious translation:
-lean 3 declaration is
-  forall {R : Type.{u1}} {n : Type.{u2}} [_inst_1 : Fintype.{u2} n] [_inst_2 : PartialOrder.{u1} R] [_inst_3 : NonUnitalRing.{u1} R] [_inst_4 : StarOrderedRing.{u1} R (NonUnitalRing.toNonUnitalSemiring.{u1} R _inst_3) _inst_2] [_inst_5 : NoZeroDivisors.{u1} R (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_3)))) (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_3))))] {v : n -> R}, Iff (Eq.{succ u1} R (Matrix.dotProduct.{u1, u2} n R _inst_1 (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_3)))) (AddCommGroup.toAddCommMonoid.{u1} R (OrderedAddCommGroup.toAddCommGroup.{u1} R (StarOrderedRing.orderedAddCommGroup.{u1} R _inst_3 _inst_2 _inst_4))) v (Star.star.{max u2 u1} (n -> R) (Pi.hasStar.{u2, u1} n (fun (ᾰ : n) => R) (fun (i : n) => InvolutiveStar.toHasStar.{u1} R (StarAddMonoid.toHasInvolutiveStar.{u1} R (AddCommMonoid.toAddMonoid.{u1} R (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonUnitalSemiring.toNonUnitalNonAssocSemiring.{u1} R (NonUnitalRing.toNonUnitalSemiring.{u1} R _inst_3)))) (StarRing.toStarAddMonoid.{u1} R (NonUnitalRing.toNonUnitalSemiring.{u1} R _inst_3) (StarOrderedRing.toStarRing.{u1} R (NonUnitalRing.toNonUnitalSemiring.{u1} R _inst_3) _inst_2 _inst_4))))) v)) (OfNat.ofNat.{u1} R 0 (OfNat.mk.{u1} R 0 (Zero.zero.{u1} R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_3)))))))) (Eq.{max (succ u2) (succ u1)} (n -> R) v (OfNat.ofNat.{max u2 u1} (n -> R) 0 (OfNat.mk.{max u2 u1} (n -> R) 0 (Zero.zero.{max u2 u1} (n -> R) (Pi.instZero.{u2, u1} n (fun (ᾰ : n) => R) (fun (i : n) => MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_3)))))))))
-but is expected to have type
-  forall {R : Type.{u1}} {n : Type.{u2}} [_inst_1 : Fintype.{u2} n] [_inst_2 : PartialOrder.{u1} R] [_inst_3 : NonUnitalRing.{u1} R] [_inst_4 : StarOrderedRing.{u1} R (NonUnitalRing.toNonUnitalSemiring.{u1} R _inst_3) _inst_2] [_inst_5 : NoZeroDivisors.{u1} R (NonUnitalNonAssocRing.toMul.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_3)) (SemigroupWithZero.toZero.{u1} R (NonUnitalSemiring.toSemigroupWithZero.{u1} R (NonUnitalRing.toNonUnitalSemiring.{u1} R _inst_3)))] {v : n -> R}, Iff (Eq.{succ u1} R (Matrix.dotProduct.{u1, u2} n R _inst_1 (NonUnitalNonAssocRing.toMul.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_3)) (OrderedCancelAddCommMonoid.toAddCommMonoid.{u1} R (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u1} R (StarOrderedRing.instOrderedAddCommGroup.{u1} R _inst_3 _inst_2 _inst_4))) v (Star.star.{max u1 u2} (n -> R) (Pi.instStarForAll.{u2, u1} n (fun (ᾰ : n) => R) (fun (i : n) => InvolutiveStar.toStar.{u1} R (StarAddMonoid.toInvolutiveStar.{u1} R (SubNegMonoid.toAddMonoid.{u1} R (AddGroup.toSubNegMonoid.{u1} R (AddCommGroup.toAddGroup.{u1} R (OrderedAddCommGroup.toAddCommGroup.{u1} R (StarOrderedRing.instOrderedAddCommGroup.{u1} R _inst_3 _inst_2 _inst_4))))) (StarRing.toStarAddMonoid.{u1} R (NonUnitalRing.toNonUnitalSemiring.{u1} R _inst_3) (StarOrderedRing.toStarRing.{u1} R (NonUnitalRing.toNonUnitalSemiring.{u1} R _inst_3) _inst_2 _inst_4))))) v)) (OfNat.ofNat.{u1} R 0 (Zero.toOfNat0.{u1} R (SemigroupWithZero.toZero.{u1} R (NonUnitalSemiring.toSemigroupWithZero.{u1} R (NonUnitalRing.toNonUnitalSemiring.{u1} R _inst_3)))))) (Eq.{max (succ u1) (succ u2)} (n -> R) v (OfNat.ofNat.{max u1 u2} (n -> R) 0 (Zero.toOfNat0.{max u1 u2} (n -> R) (Pi.instZero.{u2, u1} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.588 : n) => R) (fun (i : n) => SemigroupWithZero.toZero.{u1} R (NonUnitalSemiring.toSemigroupWithZero.{u1} R (NonUnitalRing.toNonUnitalSemiring.{u1} R _inst_3)))))))
-Case conversion may be inaccurate. Consider using '#align matrix.dot_product_self_star_eq_zero Matrix.dotProduct_self_star_eq_zeroₓ'. -/
 /-- Note that this applies to `ℂ` via `complex.strict_ordered_comm_ring`. -/
 @[simp]
 theorem dotProduct_self_star_eq_zero [PartialOrder R] [NonUnitalRing R] [StarOrderedRing R]
Diff
@@ -48,7 +48,7 @@ variable [Semiring R] [Fintype n]
 lean 3 declaration is
   forall {R : Type.{u1}} {n : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : Fintype.{u2} n] [_inst_3 : DecidableEq.{succ u2} n] (v : n -> R) (c : R) (i : n), Eq.{succ u1} R (Matrix.dotProduct.{u1, u2} n R _inst_2 (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) v (coeFn.{max (succ u1) (succ (max u2 u1)), max (succ u1) (succ (max u2 u1))} (LinearMap.{u1, u1, u1, max u2 u1} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) ((fun (_x : n) => R) i) (forall (i : n), (fun (_x : n) => R) i) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (Pi.addCommMonoid.{u2, u1} n (fun (i : n) => (fun (_x : n) => R) i) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1)))) (Semiring.toModule.{u1} R _inst_1) (Pi.module.{u2, u1, u1} n (fun (i : n) => (fun (_x : n) => R) i) R _inst_1 (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (fun (i : n) => Semiring.toModule.{u1} R _inst_1))) (fun (_x : LinearMap.{u1, u1, u1, max u2 u1} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) ((fun (_x : n) => R) i) (forall (i : n), (fun (_x : n) => R) i) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (Pi.addCommMonoid.{u2, u1} n (fun (i : n) => (fun (_x : n) => R) i) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1)))) (Semiring.toModule.{u1} R _inst_1) (Pi.module.{u2, u1, u1} n (fun (i : n) => (fun (_x : n) => R) i) R _inst_1 (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (fun (i : n) => Semiring.toModule.{u1} R _inst_1))) => R -> (forall (i : n), (fun (_x : n) => R) i)) (LinearMap.hasCoeToFun.{u1, u1, u1, max u2 u1} R R ((fun (_x : n) => R) i) (forall (i : n), (fun (_x : n) => R) i) _inst_1 _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (Pi.addCommMonoid.{u2, u1} n (fun (i : n) => (fun (_x : n) => R) i) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1)))) (Semiring.toModule.{u1} R _inst_1) (Pi.module.{u2, u1, u1} n (fun (i : n) => (fun (_x : n) => R) i) R _inst_1 (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (fun (i : n) => Semiring.toModule.{u1} R _inst_1)) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (LinearMap.stdBasis.{u1, u2, u1} R n _inst_1 (fun (_x : n) => R) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (fun (i : n) => Semiring.toModule.{u1} R _inst_1) (fun (a : n) (b : n) => _inst_3 a b) i) c)) (HMul.hMul.{u1, u1, u1} R R R (instHMul.{u1} R (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))))) (v i) c)
 but is expected to have type
-  forall {R : Type.{u1}} {n : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : Fintype.{u2} n] [_inst_3 : DecidableEq.{succ u2} n] (v : n -> R) (c : R) (i : n), Eq.{succ u1} R (Matrix.dotProduct.{u1, u2} n R _inst_2 (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) v (FunLike.coe.{max (succ u1) (succ u2), succ u1, max (succ u1) (succ u2)} (LinearMap.{u1, u1, u1, max u2 u1} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) R (n -> R) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.52 : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.52 : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.52 : n) => R) i) _inst_1))) (Pi.addCommMonoid.{u2, u1} n (fun (i : n) => R) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.52 : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.52 : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.52 : n) => R) i) _inst_1)))) (Semiring.toModule.{u1} R _inst_1) (Pi.module.{u2, u1, u1} n (fun (i : n) => R) R _inst_1 (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.52 : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.52 : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.52 : n) => R) i) _inst_1))) (fun (i : n) => Semiring.toModule.{u1} R _inst_1))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6191 : R) => n -> R) _x) (LinearMap.instFunLikeLinearMap.{u1, u1, u1, max u1 u2} R R R (n -> R) _inst_1 _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (Pi.addCommMonoid.{u2, u1} n (fun (i : n) => R) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1)))) (Semiring.toModule.{u1} R _inst_1) (Pi.module.{u2, u1, u1} n (fun (i : n) => R) R _inst_1 (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (fun (i : n) => Semiring.toModule.{u1} R _inst_1)) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (LinearMap.stdBasis.{u1, u2, u1} R n _inst_1 (fun (_x : n) => R) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (fun (i : n) => Semiring.toModule.{u1} R _inst_1) (fun (a : n) (b : n) => _inst_3 a b) i) c)) (HMul.hMul.{u1, u1, u1} R R R (instHMul.{u1} R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))) (v i) c)
+  forall {R : Type.{u1}} {n : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : Fintype.{u2} n] [_inst_3 : DecidableEq.{succ u2} n] (v : n -> R) (c : R) (i : n), Eq.{succ u1} R (Matrix.dotProduct.{u1, u2} n R _inst_2 (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) v (FunLike.coe.{max (succ u1) (succ u2), succ u1, max (succ u1) (succ u2)} (LinearMap.{u1, u1, u1, max u2 u1} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) R (n -> R) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.52 : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.52 : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.52 : n) => R) i) _inst_1))) (Pi.addCommMonoid.{u2, u1} n (fun (i : n) => R) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.52 : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.52 : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.52 : n) => R) i) _inst_1)))) (Semiring.toModule.{u1} R _inst_1) (Pi.module.{u2, u1, u1} n (fun (i : n) => R) R _inst_1 (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.52 : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.52 : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.52 : n) => R) i) _inst_1))) (fun (i : n) => Semiring.toModule.{u1} R _inst_1))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6193 : R) => n -> R) _x) (LinearMap.instFunLikeLinearMap.{u1, u1, u1, max u1 u2} R R R (n -> R) _inst_1 _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (Pi.addCommMonoid.{u2, u1} n (fun (i : n) => R) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1)))) (Semiring.toModule.{u1} R _inst_1) (Pi.module.{u2, u1, u1} n (fun (i : n) => R) R _inst_1 (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (fun (i : n) => Semiring.toModule.{u1} R _inst_1)) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (LinearMap.stdBasis.{u1, u2, u1} R n _inst_1 (fun (_x : n) => R) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (fun (i : n) => Semiring.toModule.{u1} R _inst_1) (fun (a : n) (b : n) => _inst_3 a b) i) c)) (HMul.hMul.{u1, u1, u1} R R R (instHMul.{u1} R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))) (v i) c)
 Case conversion may be inaccurate. Consider using '#align matrix.dot_product_std_basis_eq_mul Matrix.dotProduct_stdBasis_eq_mulₓ'. -/
 @[simp]
 theorem dotProduct_stdBasis_eq_mul [DecidableEq n] (v : n → R) (c : R) (i : n) :
@@ -63,7 +63,7 @@ theorem dotProduct_stdBasis_eq_mul [DecidableEq n] (v : n → R) (c : R) (i : n)
 lean 3 declaration is
   forall {R : Type.{u1}} {n : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : Fintype.{u2} n] [_inst_3 : DecidableEq.{succ u2} n] (v : n -> R) (i : n), Eq.{succ u1} R (Matrix.dotProduct.{u1, u2} n R _inst_2 (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) v (coeFn.{max (succ u1) (succ (max u2 u1)), max (succ u1) (succ (max u2 u1))} (LinearMap.{u1, u1, u1, max u2 u1} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) ((fun (_x : n) => R) i) (forall (i : n), (fun (_x : n) => R) i) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (Pi.addCommMonoid.{u2, u1} n (fun (i : n) => (fun (_x : n) => R) i) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1)))) (Semiring.toModule.{u1} R _inst_1) (Pi.module.{u2, u1, u1} n (fun (i : n) => (fun (_x : n) => R) i) R _inst_1 (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (fun (i : n) => Semiring.toModule.{u1} R _inst_1))) (fun (_x : LinearMap.{u1, u1, u1, max u2 u1} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) ((fun (_x : n) => R) i) (forall (i : n), (fun (_x : n) => R) i) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (Pi.addCommMonoid.{u2, u1} n (fun (i : n) => (fun (_x : n) => R) i) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1)))) (Semiring.toModule.{u1} R _inst_1) (Pi.module.{u2, u1, u1} n (fun (i : n) => (fun (_x : n) => R) i) R _inst_1 (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (fun (i : n) => Semiring.toModule.{u1} R _inst_1))) => R -> (forall (i : n), (fun (_x : n) => R) i)) (LinearMap.hasCoeToFun.{u1, u1, u1, max u2 u1} R R ((fun (_x : n) => R) i) (forall (i : n), (fun (_x : n) => R) i) _inst_1 _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (Pi.addCommMonoid.{u2, u1} n (fun (i : n) => (fun (_x : n) => R) i) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1)))) (Semiring.toModule.{u1} R _inst_1) (Pi.module.{u2, u1, u1} n (fun (i : n) => (fun (_x : n) => R) i) R _inst_1 (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (fun (i : n) => Semiring.toModule.{u1} R _inst_1)) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (LinearMap.stdBasis.{u1, u2, u1} R n _inst_1 (fun (_x : n) => R) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (fun (i : n) => Semiring.toModule.{u1} R _inst_1) (fun (a : n) (b : n) => _inst_3 a b) i) (OfNat.ofNat.{u1} ((fun (_x : n) => R) i) 1 (OfNat.mk.{u1} ((fun (_x : n) => R) i) 1 (One.one.{u1} ((fun (_x : n) => R) i) (AddMonoidWithOne.toOne.{u1} ((fun (_x : n) => R) i) (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toAddCommMonoidWithOne.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))))))))) (v i)
 but is expected to have type
-  forall {R : Type.{u1}} {n : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : Fintype.{u2} n] [_inst_3 : DecidableEq.{succ u2} n] (v : n -> R) (i : n), Eq.{succ u1} R (Matrix.dotProduct.{u1, u2} n R _inst_2 (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) v (FunLike.coe.{max (succ u1) (succ u2), succ u1, max (succ u1) (succ u2)} (LinearMap.{u1, u1, u1, max u2 u1} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) R (n -> R) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.179 : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.179 : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.179 : n) => R) i) _inst_1))) (Pi.addCommMonoid.{u2, u1} n (fun (i : n) => R) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.179 : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.179 : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.179 : n) => R) i) _inst_1)))) (Semiring.toModule.{u1} R _inst_1) (Pi.module.{u2, u1, u1} n (fun (i : n) => R) R _inst_1 (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.179 : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.179 : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.179 : n) => R) i) _inst_1))) (fun (i : n) => Semiring.toModule.{u1} R _inst_1))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6191 : R) => n -> R) _x) (LinearMap.instFunLikeLinearMap.{u1, u1, u1, max u1 u2} R R R (n -> R) _inst_1 _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (Pi.addCommMonoid.{u2, u1} n (fun (i : n) => R) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1)))) (Semiring.toModule.{u1} R _inst_1) (Pi.module.{u2, u1, u1} n (fun (i : n) => R) R _inst_1 (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (fun (i : n) => Semiring.toModule.{u1} R _inst_1)) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (LinearMap.stdBasis.{u1, u2, u1} R n _inst_1 (fun (_x : n) => R) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (fun (i : n) => Semiring.toModule.{u1} R _inst_1) (fun (a : n) (b : n) => _inst_3 a b) i) (OfNat.ofNat.{u1} R 1 (One.toOfNat1.{u1} R (Semiring.toOne.{u1} R _inst_1))))) (v i)
+  forall {R : Type.{u1}} {n : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : Fintype.{u2} n] [_inst_3 : DecidableEq.{succ u2} n] (v : n -> R) (i : n), Eq.{succ u1} R (Matrix.dotProduct.{u1, u2} n R _inst_2 (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) v (FunLike.coe.{max (succ u1) (succ u2), succ u1, max (succ u1) (succ u2)} (LinearMap.{u1, u1, u1, max u2 u1} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) R (n -> R) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.179 : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.179 : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.179 : n) => R) i) _inst_1))) (Pi.addCommMonoid.{u2, u1} n (fun (i : n) => R) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.179 : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.179 : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.179 : n) => R) i) _inst_1)))) (Semiring.toModule.{u1} R _inst_1) (Pi.module.{u2, u1, u1} n (fun (i : n) => R) R _inst_1 (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.179 : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.179 : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.179 : n) => R) i) _inst_1))) (fun (i : n) => Semiring.toModule.{u1} R _inst_1))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6193 : R) => n -> R) _x) (LinearMap.instFunLikeLinearMap.{u1, u1, u1, max u1 u2} R R R (n -> R) _inst_1 _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (Pi.addCommMonoid.{u2, u1} n (fun (i : n) => R) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1)))) (Semiring.toModule.{u1} R _inst_1) (Pi.module.{u2, u1, u1} n (fun (i : n) => R) R _inst_1 (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (fun (i : n) => Semiring.toModule.{u1} R _inst_1)) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (LinearMap.stdBasis.{u1, u2, u1} R n _inst_1 (fun (_x : n) => R) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (fun (i : n) => Semiring.toModule.{u1} R _inst_1) (fun (a : n) (b : n) => _inst_3 a b) i) (OfNat.ofNat.{u1} R 1 (One.toOfNat1.{u1} R (Semiring.toOne.{u1} R _inst_1))))) (v i)
 Case conversion may be inaccurate. Consider using '#align matrix.dot_product_std_basis_one Matrix.dotProduct_stdBasis_oneₓ'. -/
 @[simp]
 theorem dotProduct_stdBasis_one [DecidableEq n] (v : n → R) (i : n) :
Diff
@@ -48,7 +48,7 @@ variable [Semiring R] [Fintype n]
 lean 3 declaration is
   forall {R : Type.{u1}} {n : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : Fintype.{u2} n] [_inst_3 : DecidableEq.{succ u2} n] (v : n -> R) (c : R) (i : n), Eq.{succ u1} R (Matrix.dotProduct.{u1, u2} n R _inst_2 (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) v (coeFn.{max (succ u1) (succ (max u2 u1)), max (succ u1) (succ (max u2 u1))} (LinearMap.{u1, u1, u1, max u2 u1} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) ((fun (_x : n) => R) i) (forall (i : n), (fun (_x : n) => R) i) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (Pi.addCommMonoid.{u2, u1} n (fun (i : n) => (fun (_x : n) => R) i) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1)))) (Semiring.toModule.{u1} R _inst_1) (Pi.module.{u2, u1, u1} n (fun (i : n) => (fun (_x : n) => R) i) R _inst_1 (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (fun (i : n) => Semiring.toModule.{u1} R _inst_1))) (fun (_x : LinearMap.{u1, u1, u1, max u2 u1} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) ((fun (_x : n) => R) i) (forall (i : n), (fun (_x : n) => R) i) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (Pi.addCommMonoid.{u2, u1} n (fun (i : n) => (fun (_x : n) => R) i) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1)))) (Semiring.toModule.{u1} R _inst_1) (Pi.module.{u2, u1, u1} n (fun (i : n) => (fun (_x : n) => R) i) R _inst_1 (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (fun (i : n) => Semiring.toModule.{u1} R _inst_1))) => R -> (forall (i : n), (fun (_x : n) => R) i)) (LinearMap.hasCoeToFun.{u1, u1, u1, max u2 u1} R R ((fun (_x : n) => R) i) (forall (i : n), (fun (_x : n) => R) i) _inst_1 _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (Pi.addCommMonoid.{u2, u1} n (fun (i : n) => (fun (_x : n) => R) i) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1)))) (Semiring.toModule.{u1} R _inst_1) (Pi.module.{u2, u1, u1} n (fun (i : n) => (fun (_x : n) => R) i) R _inst_1 (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (fun (i : n) => Semiring.toModule.{u1} R _inst_1)) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (LinearMap.stdBasis.{u1, u2, u1} R n _inst_1 (fun (_x : n) => R) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (fun (i : n) => Semiring.toModule.{u1} R _inst_1) (fun (a : n) (b : n) => _inst_3 a b) i) c)) (HMul.hMul.{u1, u1, u1} R R R (instHMul.{u1} R (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))))) (v i) c)
 but is expected to have type
-  forall {R : Type.{u1}} {n : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : Fintype.{u2} n] [_inst_3 : DecidableEq.{succ u2} n] (v : n -> R) (c : R) (i : n), Eq.{succ u1} R (Matrix.dotProduct.{u1, u2} n R _inst_2 (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) v (FunLike.coe.{max (succ u1) (succ u2), succ u1, max (succ u1) (succ u2)} (LinearMap.{u1, u1, u1, max u2 u1} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) R (n -> R) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.52 : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.52 : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.52 : n) => R) i) _inst_1))) (Pi.addCommMonoid.{u2, u1} n (fun (i : n) => R) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.52 : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.52 : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.52 : n) => R) i) _inst_1)))) (Semiring.toModule.{u1} R _inst_1) (Pi.module.{u2, u1, u1} n (fun (i : n) => R) R _inst_1 (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.52 : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.52 : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.52 : n) => R) i) _inst_1))) (fun (i : n) => Semiring.toModule.{u1} R _inst_1))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6190 : R) => n -> R) _x) (LinearMap.instFunLikeLinearMap.{u1, u1, u1, max u1 u2} R R R (n -> R) _inst_1 _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (Pi.addCommMonoid.{u2, u1} n (fun (i : n) => R) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1)))) (Semiring.toModule.{u1} R _inst_1) (Pi.module.{u2, u1, u1} n (fun (i : n) => R) R _inst_1 (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (fun (i : n) => Semiring.toModule.{u1} R _inst_1)) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (LinearMap.stdBasis.{u1, u2, u1} R n _inst_1 (fun (_x : n) => R) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (fun (i : n) => Semiring.toModule.{u1} R _inst_1) (fun (a : n) (b : n) => _inst_3 a b) i) c)) (HMul.hMul.{u1, u1, u1} R R R (instHMul.{u1} R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))) (v i) c)
+  forall {R : Type.{u1}} {n : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : Fintype.{u2} n] [_inst_3 : DecidableEq.{succ u2} n] (v : n -> R) (c : R) (i : n), Eq.{succ u1} R (Matrix.dotProduct.{u1, u2} n R _inst_2 (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) v (FunLike.coe.{max (succ u1) (succ u2), succ u1, max (succ u1) (succ u2)} (LinearMap.{u1, u1, u1, max u2 u1} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) R (n -> R) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.52 : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.52 : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.52 : n) => R) i) _inst_1))) (Pi.addCommMonoid.{u2, u1} n (fun (i : n) => R) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.52 : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.52 : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.52 : n) => R) i) _inst_1)))) (Semiring.toModule.{u1} R _inst_1) (Pi.module.{u2, u1, u1} n (fun (i : n) => R) R _inst_1 (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.52 : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.52 : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.52 : n) => R) i) _inst_1))) (fun (i : n) => Semiring.toModule.{u1} R _inst_1))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6191 : R) => n -> R) _x) (LinearMap.instFunLikeLinearMap.{u1, u1, u1, max u1 u2} R R R (n -> R) _inst_1 _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (Pi.addCommMonoid.{u2, u1} n (fun (i : n) => R) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1)))) (Semiring.toModule.{u1} R _inst_1) (Pi.module.{u2, u1, u1} n (fun (i : n) => R) R _inst_1 (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (fun (i : n) => Semiring.toModule.{u1} R _inst_1)) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (LinearMap.stdBasis.{u1, u2, u1} R n _inst_1 (fun (_x : n) => R) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (fun (i : n) => Semiring.toModule.{u1} R _inst_1) (fun (a : n) (b : n) => _inst_3 a b) i) c)) (HMul.hMul.{u1, u1, u1} R R R (instHMul.{u1} R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))) (v i) c)
 Case conversion may be inaccurate. Consider using '#align matrix.dot_product_std_basis_eq_mul Matrix.dotProduct_stdBasis_eq_mulₓ'. -/
 @[simp]
 theorem dotProduct_stdBasis_eq_mul [DecidableEq n] (v : n → R) (c : R) (i : n) :
@@ -63,7 +63,7 @@ theorem dotProduct_stdBasis_eq_mul [DecidableEq n] (v : n → R) (c : R) (i : n)
 lean 3 declaration is
   forall {R : Type.{u1}} {n : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : Fintype.{u2} n] [_inst_3 : DecidableEq.{succ u2} n] (v : n -> R) (i : n), Eq.{succ u1} R (Matrix.dotProduct.{u1, u2} n R _inst_2 (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) v (coeFn.{max (succ u1) (succ (max u2 u1)), max (succ u1) (succ (max u2 u1))} (LinearMap.{u1, u1, u1, max u2 u1} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) ((fun (_x : n) => R) i) (forall (i : n), (fun (_x : n) => R) i) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (Pi.addCommMonoid.{u2, u1} n (fun (i : n) => (fun (_x : n) => R) i) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1)))) (Semiring.toModule.{u1} R _inst_1) (Pi.module.{u2, u1, u1} n (fun (i : n) => (fun (_x : n) => R) i) R _inst_1 (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (fun (i : n) => Semiring.toModule.{u1} R _inst_1))) (fun (_x : LinearMap.{u1, u1, u1, max u2 u1} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) ((fun (_x : n) => R) i) (forall (i : n), (fun (_x : n) => R) i) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (Pi.addCommMonoid.{u2, u1} n (fun (i : n) => (fun (_x : n) => R) i) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1)))) (Semiring.toModule.{u1} R _inst_1) (Pi.module.{u2, u1, u1} n (fun (i : n) => (fun (_x : n) => R) i) R _inst_1 (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (fun (i : n) => Semiring.toModule.{u1} R _inst_1))) => R -> (forall (i : n), (fun (_x : n) => R) i)) (LinearMap.hasCoeToFun.{u1, u1, u1, max u2 u1} R R ((fun (_x : n) => R) i) (forall (i : n), (fun (_x : n) => R) i) _inst_1 _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (Pi.addCommMonoid.{u2, u1} n (fun (i : n) => (fun (_x : n) => R) i) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1)))) (Semiring.toModule.{u1} R _inst_1) (Pi.module.{u2, u1, u1} n (fun (i : n) => (fun (_x : n) => R) i) R _inst_1 (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (fun (i : n) => Semiring.toModule.{u1} R _inst_1)) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (LinearMap.stdBasis.{u1, u2, u1} R n _inst_1 (fun (_x : n) => R) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (fun (i : n) => Semiring.toModule.{u1} R _inst_1) (fun (a : n) (b : n) => _inst_3 a b) i) (OfNat.ofNat.{u1} ((fun (_x : n) => R) i) 1 (OfNat.mk.{u1} ((fun (_x : n) => R) i) 1 (One.one.{u1} ((fun (_x : n) => R) i) (AddMonoidWithOne.toOne.{u1} ((fun (_x : n) => R) i) (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toAddCommMonoidWithOne.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))))))))) (v i)
 but is expected to have type
-  forall {R : Type.{u1}} {n : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : Fintype.{u2} n] [_inst_3 : DecidableEq.{succ u2} n] (v : n -> R) (i : n), Eq.{succ u1} R (Matrix.dotProduct.{u1, u2} n R _inst_2 (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) v (FunLike.coe.{max (succ u1) (succ u2), succ u1, max (succ u1) (succ u2)} (LinearMap.{u1, u1, u1, max u2 u1} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) R (n -> R) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.179 : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.179 : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.179 : n) => R) i) _inst_1))) (Pi.addCommMonoid.{u2, u1} n (fun (i : n) => R) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.179 : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.179 : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.179 : n) => R) i) _inst_1)))) (Semiring.toModule.{u1} R _inst_1) (Pi.module.{u2, u1, u1} n (fun (i : n) => R) R _inst_1 (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.179 : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.179 : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.179 : n) => R) i) _inst_1))) (fun (i : n) => Semiring.toModule.{u1} R _inst_1))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6190 : R) => n -> R) _x) (LinearMap.instFunLikeLinearMap.{u1, u1, u1, max u1 u2} R R R (n -> R) _inst_1 _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (Pi.addCommMonoid.{u2, u1} n (fun (i : n) => R) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1)))) (Semiring.toModule.{u1} R _inst_1) (Pi.module.{u2, u1, u1} n (fun (i : n) => R) R _inst_1 (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (fun (i : n) => Semiring.toModule.{u1} R _inst_1)) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (LinearMap.stdBasis.{u1, u2, u1} R n _inst_1 (fun (_x : n) => R) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (fun (i : n) => Semiring.toModule.{u1} R _inst_1) (fun (a : n) (b : n) => _inst_3 a b) i) (OfNat.ofNat.{u1} R 1 (One.toOfNat1.{u1} R (Semiring.toOne.{u1} R _inst_1))))) (v i)
+  forall {R : Type.{u1}} {n : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : Fintype.{u2} n] [_inst_3 : DecidableEq.{succ u2} n] (v : n -> R) (i : n), Eq.{succ u1} R (Matrix.dotProduct.{u1, u2} n R _inst_2 (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) v (FunLike.coe.{max (succ u1) (succ u2), succ u1, max (succ u1) (succ u2)} (LinearMap.{u1, u1, u1, max u2 u1} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) R (n -> R) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.179 : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.179 : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.179 : n) => R) i) _inst_1))) (Pi.addCommMonoid.{u2, u1} n (fun (i : n) => R) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.179 : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.179 : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.179 : n) => R) i) _inst_1)))) (Semiring.toModule.{u1} R _inst_1) (Pi.module.{u2, u1, u1} n (fun (i : n) => R) R _inst_1 (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.179 : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.179 : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.179 : n) => R) i) _inst_1))) (fun (i : n) => Semiring.toModule.{u1} R _inst_1))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6191 : R) => n -> R) _x) (LinearMap.instFunLikeLinearMap.{u1, u1, u1, max u1 u2} R R R (n -> R) _inst_1 _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (Pi.addCommMonoid.{u2, u1} n (fun (i : n) => R) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1)))) (Semiring.toModule.{u1} R _inst_1) (Pi.module.{u2, u1, u1} n (fun (i : n) => R) R _inst_1 (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (fun (i : n) => Semiring.toModule.{u1} R _inst_1)) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (LinearMap.stdBasis.{u1, u2, u1} R n _inst_1 (fun (_x : n) => R) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (fun (i : n) => Semiring.toModule.{u1} R _inst_1) (fun (a : n) (b : n) => _inst_3 a b) i) (OfNat.ofNat.{u1} R 1 (One.toOfNat1.{u1} R (Semiring.toOne.{u1} R _inst_1))))) (v i)
 Case conversion may be inaccurate. Consider using '#align matrix.dot_product_std_basis_one Matrix.dotProduct_stdBasis_oneₓ'. -/
 @[simp]
 theorem dotProduct_stdBasis_one [DecidableEq n] (v : n → R) (i : n) :
Diff
@@ -135,7 +135,7 @@ theorem dotProduct_self_eq_zero [LinearOrderedRing R] {v : n → R} : dotProduct
 lean 3 declaration is
   forall {R : Type.{u1}} {n : Type.{u2}} [_inst_1 : Fintype.{u2} n] [_inst_2 : PartialOrder.{u1} R] [_inst_3 : NonUnitalRing.{u1} R] [_inst_4 : StarOrderedRing.{u1} R (NonUnitalRing.toNonUnitalSemiring.{u1} R _inst_3) _inst_2] [_inst_5 : NoZeroDivisors.{u1} R (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_3)))) (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_3))))] {v : n -> R}, Iff (Eq.{succ u1} R (Matrix.dotProduct.{u1, u2} n R _inst_1 (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_3)))) (AddCommGroup.toAddCommMonoid.{u1} R (OrderedAddCommGroup.toAddCommGroup.{u1} R (StarOrderedRing.orderedAddCommGroup.{u1} R _inst_3 _inst_2 _inst_4))) (Star.star.{max u2 u1} (n -> R) (Pi.hasStar.{u2, u1} n (fun (ᾰ : n) => R) (fun (i : n) => InvolutiveStar.toHasStar.{u1} R (StarAddMonoid.toHasInvolutiveStar.{u1} R (AddCommMonoid.toAddMonoid.{u1} R (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonUnitalSemiring.toNonUnitalNonAssocSemiring.{u1} R (NonUnitalRing.toNonUnitalSemiring.{u1} R _inst_3)))) (StarRing.toStarAddMonoid.{u1} R (NonUnitalRing.toNonUnitalSemiring.{u1} R _inst_3) (StarOrderedRing.toStarRing.{u1} R (NonUnitalRing.toNonUnitalSemiring.{u1} R _inst_3) _inst_2 _inst_4))))) v) v) (OfNat.ofNat.{u1} R 0 (OfNat.mk.{u1} R 0 (Zero.zero.{u1} R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_3)))))))) (Eq.{max (succ u2) (succ u1)} (n -> R) v (OfNat.ofNat.{max u2 u1} (n -> R) 0 (OfNat.mk.{max u2 u1} (n -> R) 0 (Zero.zero.{max u2 u1} (n -> R) (Pi.instZero.{u2, u1} n (fun (ᾰ : n) => R) (fun (i : n) => MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_3)))))))))
 but is expected to have type
-  forall {R : Type.{u1}} {n : Type.{u2}} [_inst_1 : Fintype.{u2} n] [_inst_2 : StrictOrderedRing.{u1} R] [_inst_3 : StarOrderedRing.{u1} R (NonUnitalRing.toNonUnitalSemiring.{u1} R (Ring.toNonUnitalRing.{u1} R (StrictOrderedRing.toRing.{u1} R _inst_2))) (StrictOrderedRing.toPartialOrder.{u1} R _inst_2)] [_inst_4 : NoZeroDivisors.{u1} R (NonUnitalNonAssocRing.toMul.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (StrictOrderedRing.toRing.{u1} R _inst_2)))) (MonoidWithZero.toZero.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedRing.toStrictOrderedSemiring.{u1} R _inst_2))))] {_inst_5 : n -> R}, Iff (Eq.{succ u1} R (Matrix.dotProduct.{u1, u2} n R _inst_1 (NonUnitalNonAssocRing.toMul.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (StrictOrderedRing.toRing.{u1} R _inst_2)))) (OrderedCancelAddCommMonoid.toAddCommMonoid.{u1} R (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{u1} R (StrictOrderedRing.toStrictOrderedSemiring.{u1} R _inst_2))) (Star.star.{max u2 u1} (n -> R) (Pi.instStarForAll.{u2, u1} n (fun (a._@.Mathlib.Data.Matrix.Basic._hyg.6390 : n) => R) (fun (i : n) => InvolutiveStar.toStar.{u1} R (StarAddMonoid.toInvolutiveStar.{u1} R (AddMonoidWithOne.toAddMonoid.{u1} R (AddGroupWithOne.toAddMonoidWithOne.{u1} R (Ring.toAddGroupWithOne.{u1} R (StrictOrderedRing.toRing.{u1} R _inst_2)))) (StarRing.toStarAddMonoid.{u1} R (NonUnitalRing.toNonUnitalSemiring.{u1} R (Ring.toNonUnitalRing.{u1} R (StrictOrderedRing.toRing.{u1} R _inst_2))) (StarOrderedRing.toStarRing.{u1} R (NonUnitalRing.toNonUnitalSemiring.{u1} R (Ring.toNonUnitalRing.{u1} R (StrictOrderedRing.toRing.{u1} R _inst_2))) (StrictOrderedRing.toPartialOrder.{u1} R _inst_2) _inst_3))))) _inst_5) _inst_5) (OfNat.ofNat.{u1} R 0 (Zero.toOfNat0.{u1} R (MonoidWithZero.toZero.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedRing.toStrictOrderedSemiring.{u1} R _inst_2))))))) (Eq.{max (succ u1) (succ u2)} (n -> R) _inst_5 (OfNat.ofNat.{max u1 u2} (n -> R) 0 (Zero.toOfNat0.{max u1 u2} (n -> R) (Pi.instZero.{u2, u1} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.521 : n) => R) (fun (i : n) => MonoidWithZero.toZero.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedRing.toStrictOrderedSemiring.{u1} R _inst_2))))))))
+  forall {R : Type.{u1}} {n : Type.{u2}} [_inst_1 : Fintype.{u2} n] [_inst_2 : PartialOrder.{u1} R] [_inst_3 : NonUnitalRing.{u1} R] [_inst_4 : StarOrderedRing.{u1} R (NonUnitalRing.toNonUnitalSemiring.{u1} R _inst_3) _inst_2] [_inst_5 : NoZeroDivisors.{u1} R (NonUnitalNonAssocRing.toMul.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_3)) (SemigroupWithZero.toZero.{u1} R (NonUnitalSemiring.toSemigroupWithZero.{u1} R (NonUnitalRing.toNonUnitalSemiring.{u1} R _inst_3)))] {v : n -> R}, Iff (Eq.{succ u1} R (Matrix.dotProduct.{u1, u2} n R _inst_1 (NonUnitalNonAssocRing.toMul.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_3)) (OrderedCancelAddCommMonoid.toAddCommMonoid.{u1} R (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u1} R (StarOrderedRing.instOrderedAddCommGroup.{u1} R _inst_3 _inst_2 _inst_4))) (Star.star.{max u2 u1} (n -> R) (Pi.instStarForAll.{u2, u1} n (fun (ᾰ : n) => R) (fun (i : n) => InvolutiveStar.toStar.{u1} R (StarAddMonoid.toInvolutiveStar.{u1} R (SubNegMonoid.toAddMonoid.{u1} R (AddGroup.toSubNegMonoid.{u1} R (AddCommGroup.toAddGroup.{u1} R (OrderedAddCommGroup.toAddCommGroup.{u1} R (StarOrderedRing.instOrderedAddCommGroup.{u1} R _inst_3 _inst_2 _inst_4))))) (StarRing.toStarAddMonoid.{u1} R (NonUnitalRing.toNonUnitalSemiring.{u1} R _inst_3) (StarOrderedRing.toStarRing.{u1} R (NonUnitalRing.toNonUnitalSemiring.{u1} R _inst_3) _inst_2 _inst_4))))) v) v) (OfNat.ofNat.{u1} R 0 (Zero.toOfNat0.{u1} R (SemigroupWithZero.toZero.{u1} R (NonUnitalSemiring.toSemigroupWithZero.{u1} R (NonUnitalRing.toNonUnitalSemiring.{u1} R _inst_3)))))) (Eq.{max (succ u1) (succ u2)} (n -> R) v (OfNat.ofNat.{max u1 u2} (n -> R) 0 (Zero.toOfNat0.{max u1 u2} (n -> R) (Pi.instZero.{u2, u1} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.524 : n) => R) (fun (i : n) => SemigroupWithZero.toZero.{u1} R (NonUnitalSemiring.toSemigroupWithZero.{u1} R (NonUnitalRing.toNonUnitalSemiring.{u1} R _inst_3)))))))
 Case conversion may be inaccurate. Consider using '#align matrix.dot_product_star_self_eq_zero Matrix.dotProduct_star_self_eq_zeroₓ'. -/
 /-- Note that this applies to `ℂ` via `complex.strict_ordered_comm_ring`. -/
 @[simp]
@@ -149,7 +149,7 @@ theorem dotProduct_star_self_eq_zero [PartialOrder R] [NonUnitalRing R] [StarOrd
 lean 3 declaration is
   forall {R : Type.{u1}} {n : Type.{u2}} [_inst_1 : Fintype.{u2} n] [_inst_2 : PartialOrder.{u1} R] [_inst_3 : NonUnitalRing.{u1} R] [_inst_4 : StarOrderedRing.{u1} R (NonUnitalRing.toNonUnitalSemiring.{u1} R _inst_3) _inst_2] [_inst_5 : NoZeroDivisors.{u1} R (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_3)))) (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_3))))] {v : n -> R}, Iff (Eq.{succ u1} R (Matrix.dotProduct.{u1, u2} n R _inst_1 (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_3)))) (AddCommGroup.toAddCommMonoid.{u1} R (OrderedAddCommGroup.toAddCommGroup.{u1} R (StarOrderedRing.orderedAddCommGroup.{u1} R _inst_3 _inst_2 _inst_4))) v (Star.star.{max u2 u1} (n -> R) (Pi.hasStar.{u2, u1} n (fun (ᾰ : n) => R) (fun (i : n) => InvolutiveStar.toHasStar.{u1} R (StarAddMonoid.toHasInvolutiveStar.{u1} R (AddCommMonoid.toAddMonoid.{u1} R (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonUnitalSemiring.toNonUnitalNonAssocSemiring.{u1} R (NonUnitalRing.toNonUnitalSemiring.{u1} R _inst_3)))) (StarRing.toStarAddMonoid.{u1} R (NonUnitalRing.toNonUnitalSemiring.{u1} R _inst_3) (StarOrderedRing.toStarRing.{u1} R (NonUnitalRing.toNonUnitalSemiring.{u1} R _inst_3) _inst_2 _inst_4))))) v)) (OfNat.ofNat.{u1} R 0 (OfNat.mk.{u1} R 0 (Zero.zero.{u1} R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_3)))))))) (Eq.{max (succ u2) (succ u1)} (n -> R) v (OfNat.ofNat.{max u2 u1} (n -> R) 0 (OfNat.mk.{max u2 u1} (n -> R) 0 (Zero.zero.{max u2 u1} (n -> R) (Pi.instZero.{u2, u1} n (fun (ᾰ : n) => R) (fun (i : n) => MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_3)))))))))
 but is expected to have type
-  forall {R : Type.{u1}} {n : Type.{u2}} [_inst_1 : Fintype.{u2} n] [_inst_2 : StrictOrderedRing.{u1} R] [_inst_3 : StarOrderedRing.{u1} R (NonUnitalRing.toNonUnitalSemiring.{u1} R (Ring.toNonUnitalRing.{u1} R (StrictOrderedRing.toRing.{u1} R _inst_2))) (StrictOrderedRing.toPartialOrder.{u1} R _inst_2)] [_inst_4 : NoZeroDivisors.{u1} R (NonUnitalNonAssocRing.toMul.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (StrictOrderedRing.toRing.{u1} R _inst_2)))) (MonoidWithZero.toZero.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedRing.toStrictOrderedSemiring.{u1} R _inst_2))))] {_inst_5 : n -> R}, Iff (Eq.{succ u1} R (Matrix.dotProduct.{u1, u2} n R _inst_1 (NonUnitalNonAssocRing.toMul.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (StrictOrderedRing.toRing.{u1} R _inst_2)))) (OrderedCancelAddCommMonoid.toAddCommMonoid.{u1} R (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{u1} R (StrictOrderedRing.toStrictOrderedSemiring.{u1} R _inst_2))) _inst_5 (Star.star.{max u1 u2} (n -> R) (Pi.instStarForAll.{u2, u1} n (fun (a._@.Mathlib.Data.Matrix.Basic._hyg.6393 : n) => R) (fun (i : n) => InvolutiveStar.toStar.{u1} R (StarAddMonoid.toInvolutiveStar.{u1} R (AddMonoidWithOne.toAddMonoid.{u1} R (AddGroupWithOne.toAddMonoidWithOne.{u1} R (Ring.toAddGroupWithOne.{u1} R (StrictOrderedRing.toRing.{u1} R _inst_2)))) (StarRing.toStarAddMonoid.{u1} R (NonUnitalRing.toNonUnitalSemiring.{u1} R (Ring.toNonUnitalRing.{u1} R (StrictOrderedRing.toRing.{u1} R _inst_2))) (StarOrderedRing.toStarRing.{u1} R (NonUnitalRing.toNonUnitalSemiring.{u1} R (Ring.toNonUnitalRing.{u1} R (StrictOrderedRing.toRing.{u1} R _inst_2))) (StrictOrderedRing.toPartialOrder.{u1} R _inst_2) _inst_3))))) _inst_5)) (OfNat.ofNat.{u1} R 0 (Zero.toOfNat0.{u1} R (MonoidWithZero.toZero.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedRing.toStrictOrderedSemiring.{u1} R _inst_2))))))) (Eq.{max (succ u1) (succ u2)} (n -> R) _inst_5 (OfNat.ofNat.{max u1 u2} (n -> R) 0 (Zero.toOfNat0.{max u1 u2} (n -> R) (Pi.instZero.{u2, u1} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.579 : n) => R) (fun (i : n) => MonoidWithZero.toZero.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedRing.toStrictOrderedSemiring.{u1} R _inst_2))))))))
+  forall {R : Type.{u1}} {n : Type.{u2}} [_inst_1 : Fintype.{u2} n] [_inst_2 : PartialOrder.{u1} R] [_inst_3 : NonUnitalRing.{u1} R] [_inst_4 : StarOrderedRing.{u1} R (NonUnitalRing.toNonUnitalSemiring.{u1} R _inst_3) _inst_2] [_inst_5 : NoZeroDivisors.{u1} R (NonUnitalNonAssocRing.toMul.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_3)) (SemigroupWithZero.toZero.{u1} R (NonUnitalSemiring.toSemigroupWithZero.{u1} R (NonUnitalRing.toNonUnitalSemiring.{u1} R _inst_3)))] {v : n -> R}, Iff (Eq.{succ u1} R (Matrix.dotProduct.{u1, u2} n R _inst_1 (NonUnitalNonAssocRing.toMul.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_3)) (OrderedCancelAddCommMonoid.toAddCommMonoid.{u1} R (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u1} R (StarOrderedRing.instOrderedAddCommGroup.{u1} R _inst_3 _inst_2 _inst_4))) v (Star.star.{max u1 u2} (n -> R) (Pi.instStarForAll.{u2, u1} n (fun (ᾰ : n) => R) (fun (i : n) => InvolutiveStar.toStar.{u1} R (StarAddMonoid.toInvolutiveStar.{u1} R (SubNegMonoid.toAddMonoid.{u1} R (AddGroup.toSubNegMonoid.{u1} R (AddCommGroup.toAddGroup.{u1} R (OrderedAddCommGroup.toAddCommGroup.{u1} R (StarOrderedRing.instOrderedAddCommGroup.{u1} R _inst_3 _inst_2 _inst_4))))) (StarRing.toStarAddMonoid.{u1} R (NonUnitalRing.toNonUnitalSemiring.{u1} R _inst_3) (StarOrderedRing.toStarRing.{u1} R (NonUnitalRing.toNonUnitalSemiring.{u1} R _inst_3) _inst_2 _inst_4))))) v)) (OfNat.ofNat.{u1} R 0 (Zero.toOfNat0.{u1} R (SemigroupWithZero.toZero.{u1} R (NonUnitalSemiring.toSemigroupWithZero.{u1} R (NonUnitalRing.toNonUnitalSemiring.{u1} R _inst_3)))))) (Eq.{max (succ u1) (succ u2)} (n -> R) v (OfNat.ofNat.{max u1 u2} (n -> R) 0 (Zero.toOfNat0.{max u1 u2} (n -> R) (Pi.instZero.{u2, u1} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.588 : n) => R) (fun (i : n) => SemigroupWithZero.toZero.{u1} R (NonUnitalSemiring.toSemigroupWithZero.{u1} R (NonUnitalRing.toNonUnitalSemiring.{u1} R _inst_3)))))))
 Case conversion may be inaccurate. Consider using '#align matrix.dot_product_self_star_eq_zero Matrix.dotProduct_self_star_eq_zeroₓ'. -/
 /-- Note that this applies to `ℂ` via `complex.strict_ordered_comm_ring`. -/
 @[simp]
Diff
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Johannes Hölzl, Patrick Massot, Casper Putz, Anne Baanen
 
 ! This file was ported from Lean 3 source module linear_algebra.matrix.dot_product
-! leanprover-community/mathlib commit 46822d96c0c0a8e58a41a0cba1291620967575c5
+! leanprover-community/mathlib commit 5ac1dab1670014b4c07a82c86a67f3d064a1b3e1
 ! Please do not edit these lines, except to modify the commit id
 ! if you have ported upstream changes.
 -/
@@ -133,30 +133,30 @@ theorem dotProduct_self_eq_zero [LinearOrderedRing R] {v : n → R} : dotProduct
 
 /- warning: matrix.dot_product_star_self_eq_zero -> Matrix.dotProduct_star_self_eq_zero is a dubious translation:
 lean 3 declaration is
-  forall {R : Type.{u1}} {n : Type.{u2}} [_inst_1 : Fintype.{u2} n] [_inst_2 : StrictOrderedRing.{u1} R] [_inst_3 : StarOrderedRing.{u1} R (NonUnitalRing.toNonUnitalSemiring.{u1} R (Ring.toNonUnitalRing.{u1} R (StrictOrderedRing.toRing.{u1} R _inst_2))) (OrderedAddCommGroup.toPartialOrder.{u1} R (StrictOrderedRing.toOrderedAddCommGroup.{u1} R _inst_2))] [_inst_4 : NoZeroDivisors.{u1} R (Distrib.toHasMul.{u1} R (Ring.toDistrib.{u1} R (StrictOrderedRing.toRing.{u1} R _inst_2))) (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (StrictOrderedRing.toRing.{u1} R _inst_2))))))] {v : n -> R}, Iff (Eq.{succ u1} R (Matrix.dotProduct.{u1, u2} n R _inst_1 (Distrib.toHasMul.{u1} R (Ring.toDistrib.{u1} R (StrictOrderedRing.toRing.{u1} R _inst_2))) (AddCommGroup.toAddCommMonoid.{u1} R (OrderedAddCommGroup.toAddCommGroup.{u1} R (StarOrderedRing.orderedAddCommGroup.{u1} R (Ring.toNonUnitalRing.{u1} R (StrictOrderedRing.toRing.{u1} R _inst_2)) (OrderedAddCommGroup.toPartialOrder.{u1} R (StrictOrderedRing.toOrderedAddCommGroup.{u1} R _inst_2)) _inst_3))) (Star.star.{max u2 u1} (n -> R) (Pi.hasStar.{u2, u1} n (fun (ᾰ : n) => R) (fun (i : n) => InvolutiveStar.toHasStar.{u1} R (StarAddMonoid.toHasInvolutiveStar.{u1} R (AddCommMonoid.toAddMonoid.{u1} R (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonUnitalSemiring.toNonUnitalNonAssocSemiring.{u1} R (NonUnitalRing.toNonUnitalSemiring.{u1} R (Ring.toNonUnitalRing.{u1} R (StrictOrderedRing.toRing.{u1} R _inst_2)))))) (StarRing.toStarAddMonoid.{u1} R (NonUnitalRing.toNonUnitalSemiring.{u1} R (Ring.toNonUnitalRing.{u1} R (StrictOrderedRing.toRing.{u1} R _inst_2))) (StarOrderedRing.toStarRing.{u1} R (NonUnitalRing.toNonUnitalSemiring.{u1} R (Ring.toNonUnitalRing.{u1} R (StrictOrderedRing.toRing.{u1} R _inst_2))) (OrderedAddCommGroup.toPartialOrder.{u1} R (StrictOrderedRing.toOrderedAddCommGroup.{u1} R _inst_2)) _inst_3))))) v) v) (OfNat.ofNat.{u1} R 0 (OfNat.mk.{u1} R 0 (Zero.zero.{u1} R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (StrictOrderedRing.toRing.{u1} R _inst_2)))))))))) (Eq.{max (succ u2) (succ u1)} (n -> R) v (OfNat.ofNat.{max u2 u1} (n -> R) 0 (OfNat.mk.{max u2 u1} (n -> R) 0 (Zero.zero.{max u2 u1} (n -> R) (Pi.instZero.{u2, u1} n (fun (ᾰ : n) => R) (fun (i : n) => MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (StrictOrderedRing.toRing.{u1} R _inst_2)))))))))))
+  forall {R : Type.{u1}} {n : Type.{u2}} [_inst_1 : Fintype.{u2} n] [_inst_2 : PartialOrder.{u1} R] [_inst_3 : NonUnitalRing.{u1} R] [_inst_4 : StarOrderedRing.{u1} R (NonUnitalRing.toNonUnitalSemiring.{u1} R _inst_3) _inst_2] [_inst_5 : NoZeroDivisors.{u1} R (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_3)))) (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_3))))] {v : n -> R}, Iff (Eq.{succ u1} R (Matrix.dotProduct.{u1, u2} n R _inst_1 (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_3)))) (AddCommGroup.toAddCommMonoid.{u1} R (OrderedAddCommGroup.toAddCommGroup.{u1} R (StarOrderedRing.orderedAddCommGroup.{u1} R _inst_3 _inst_2 _inst_4))) (Star.star.{max u2 u1} (n -> R) (Pi.hasStar.{u2, u1} n (fun (ᾰ : n) => R) (fun (i : n) => InvolutiveStar.toHasStar.{u1} R (StarAddMonoid.toHasInvolutiveStar.{u1} R (AddCommMonoid.toAddMonoid.{u1} R (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonUnitalSemiring.toNonUnitalNonAssocSemiring.{u1} R (NonUnitalRing.toNonUnitalSemiring.{u1} R _inst_3)))) (StarRing.toStarAddMonoid.{u1} R (NonUnitalRing.toNonUnitalSemiring.{u1} R _inst_3) (StarOrderedRing.toStarRing.{u1} R (NonUnitalRing.toNonUnitalSemiring.{u1} R _inst_3) _inst_2 _inst_4))))) v) v) (OfNat.ofNat.{u1} R 0 (OfNat.mk.{u1} R 0 (Zero.zero.{u1} R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_3)))))))) (Eq.{max (succ u2) (succ u1)} (n -> R) v (OfNat.ofNat.{max u2 u1} (n -> R) 0 (OfNat.mk.{max u2 u1} (n -> R) 0 (Zero.zero.{max u2 u1} (n -> R) (Pi.instZero.{u2, u1} n (fun (ᾰ : n) => R) (fun (i : n) => MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_3)))))))))
 but is expected to have type
-  forall {R : Type.{u1}} {n : Type.{u2}} [_inst_1 : Fintype.{u2} n] [_inst_2 : StrictOrderedRing.{u1} R] [_inst_3 : StarOrderedRing.{u1} R (NonUnitalRing.toNonUnitalSemiring.{u1} R (Ring.toNonUnitalRing.{u1} R (StrictOrderedRing.toRing.{u1} R _inst_2))) (StrictOrderedRing.toPartialOrder.{u1} R _inst_2)] [_inst_4 : NoZeroDivisors.{u1} R (NonUnitalNonAssocRing.toMul.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (StrictOrderedRing.toRing.{u1} R _inst_2)))) (MonoidWithZero.toZero.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedRing.toStrictOrderedSemiring.{u1} R _inst_2))))] {v : n -> R}, Iff (Eq.{succ u1} R (Matrix.dotProduct.{u1, u2} n R _inst_1 (NonUnitalNonAssocRing.toMul.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (StrictOrderedRing.toRing.{u1} R _inst_2)))) (OrderedCancelAddCommMonoid.toAddCommMonoid.{u1} R (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{u1} R (StrictOrderedRing.toStrictOrderedSemiring.{u1} R _inst_2))) (Star.star.{max u2 u1} (n -> R) (Pi.instStarForAll.{u2, u1} n (fun (ᾰ : n) => R) (fun (i : n) => InvolutiveStar.toStar.{u1} R (StarAddMonoid.toInvolutiveStar.{u1} R (AddMonoidWithOne.toAddMonoid.{u1} R (AddGroupWithOne.toAddMonoidWithOne.{u1} R (Ring.toAddGroupWithOne.{u1} R (StrictOrderedRing.toRing.{u1} R _inst_2)))) (StarRing.toStarAddMonoid.{u1} R (NonUnitalRing.toNonUnitalSemiring.{u1} R (Ring.toNonUnitalRing.{u1} R (StrictOrderedRing.toRing.{u1} R _inst_2))) (StarOrderedRing.toStarRing.{u1} R (NonUnitalRing.toNonUnitalSemiring.{u1} R (Ring.toNonUnitalRing.{u1} R (StrictOrderedRing.toRing.{u1} R _inst_2))) (StrictOrderedRing.toPartialOrder.{u1} R _inst_2) _inst_3))))) v) v) (OfNat.ofNat.{u1} R 0 (Zero.toOfNat0.{u1} R (MonoidWithZero.toZero.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedRing.toStrictOrderedSemiring.{u1} R _inst_2))))))) (Eq.{max (succ u1) (succ u2)} (n -> R) v (OfNat.ofNat.{max u1 u2} (n -> R) 0 (Zero.toOfNat0.{max u1 u2} (n -> R) (Pi.instZero.{u2, u1} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.521 : n) => R) (fun (i : n) => MonoidWithZero.toZero.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedRing.toStrictOrderedSemiring.{u1} R _inst_2))))))))
+  forall {R : Type.{u1}} {n : Type.{u2}} [_inst_1 : Fintype.{u2} n] [_inst_2 : StrictOrderedRing.{u1} R] [_inst_3 : StarOrderedRing.{u1} R (NonUnitalRing.toNonUnitalSemiring.{u1} R (Ring.toNonUnitalRing.{u1} R (StrictOrderedRing.toRing.{u1} R _inst_2))) (StrictOrderedRing.toPartialOrder.{u1} R _inst_2)] [_inst_4 : NoZeroDivisors.{u1} R (NonUnitalNonAssocRing.toMul.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (StrictOrderedRing.toRing.{u1} R _inst_2)))) (MonoidWithZero.toZero.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedRing.toStrictOrderedSemiring.{u1} R _inst_2))))] {_inst_5 : n -> R}, Iff (Eq.{succ u1} R (Matrix.dotProduct.{u1, u2} n R _inst_1 (NonUnitalNonAssocRing.toMul.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (StrictOrderedRing.toRing.{u1} R _inst_2)))) (OrderedCancelAddCommMonoid.toAddCommMonoid.{u1} R (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{u1} R (StrictOrderedRing.toStrictOrderedSemiring.{u1} R _inst_2))) (Star.star.{max u2 u1} (n -> R) (Pi.instStarForAll.{u2, u1} n (fun (a._@.Mathlib.Data.Matrix.Basic._hyg.6390 : n) => R) (fun (i : n) => InvolutiveStar.toStar.{u1} R (StarAddMonoid.toInvolutiveStar.{u1} R (AddMonoidWithOne.toAddMonoid.{u1} R (AddGroupWithOne.toAddMonoidWithOne.{u1} R (Ring.toAddGroupWithOne.{u1} R (StrictOrderedRing.toRing.{u1} R _inst_2)))) (StarRing.toStarAddMonoid.{u1} R (NonUnitalRing.toNonUnitalSemiring.{u1} R (Ring.toNonUnitalRing.{u1} R (StrictOrderedRing.toRing.{u1} R _inst_2))) (StarOrderedRing.toStarRing.{u1} R (NonUnitalRing.toNonUnitalSemiring.{u1} R (Ring.toNonUnitalRing.{u1} R (StrictOrderedRing.toRing.{u1} R _inst_2))) (StrictOrderedRing.toPartialOrder.{u1} R _inst_2) _inst_3))))) _inst_5) _inst_5) (OfNat.ofNat.{u1} R 0 (Zero.toOfNat0.{u1} R (MonoidWithZero.toZero.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedRing.toStrictOrderedSemiring.{u1} R _inst_2))))))) (Eq.{max (succ u1) (succ u2)} (n -> R) _inst_5 (OfNat.ofNat.{max u1 u2} (n -> R) 0 (Zero.toOfNat0.{max u1 u2} (n -> R) (Pi.instZero.{u2, u1} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.521 : n) => R) (fun (i : n) => MonoidWithZero.toZero.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedRing.toStrictOrderedSemiring.{u1} R _inst_2))))))))
 Case conversion may be inaccurate. Consider using '#align matrix.dot_product_star_self_eq_zero Matrix.dotProduct_star_self_eq_zeroₓ'. -/
 /-- Note that this applies to `ℂ` via `complex.strict_ordered_comm_ring`. -/
 @[simp]
-theorem dotProduct_star_self_eq_zero [StrictOrderedRing R] [StarOrderedRing R] [NoZeroDivisors R]
-    {v : n → R} : dotProduct (star v) v = 0 ↔ v = 0 :=
-  (Finset.sum_eq_zero_iff_of_nonneg fun i _ => @star_mul_self_nonneg _ _ _ _ (v i)).trans <| by
-    simp [Function.funext_iff, mul_eq_zero]
+theorem dotProduct_star_self_eq_zero [PartialOrder R] [NonUnitalRing R] [StarOrderedRing R]
+    [NoZeroDivisors R] {v : n → R} : dotProduct (star v) v = 0 ↔ v = 0 :=
+  (Finset.sum_eq_zero_iff_of_nonneg fun i _ => (@star_mul_self_nonneg _ _ _ _ (v i) : _)).trans <|
+    by simp [Function.funext_iff, mul_eq_zero]
 #align matrix.dot_product_star_self_eq_zero Matrix.dotProduct_star_self_eq_zero
 
 /- warning: matrix.dot_product_self_star_eq_zero -> Matrix.dotProduct_self_star_eq_zero is a dubious translation:
 lean 3 declaration is
-  forall {R : Type.{u1}} {n : Type.{u2}} [_inst_1 : Fintype.{u2} n] [_inst_2 : StrictOrderedRing.{u1} R] [_inst_3 : StarOrderedRing.{u1} R (NonUnitalRing.toNonUnitalSemiring.{u1} R (Ring.toNonUnitalRing.{u1} R (StrictOrderedRing.toRing.{u1} R _inst_2))) (OrderedAddCommGroup.toPartialOrder.{u1} R (StrictOrderedRing.toOrderedAddCommGroup.{u1} R _inst_2))] [_inst_4 : NoZeroDivisors.{u1} R (Distrib.toHasMul.{u1} R (Ring.toDistrib.{u1} R (StrictOrderedRing.toRing.{u1} R _inst_2))) (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (StrictOrderedRing.toRing.{u1} R _inst_2))))))] {v : n -> R}, Iff (Eq.{succ u1} R (Matrix.dotProduct.{u1, u2} n R _inst_1 (Distrib.toHasMul.{u1} R (Ring.toDistrib.{u1} R (StrictOrderedRing.toRing.{u1} R _inst_2))) (AddCommGroup.toAddCommMonoid.{u1} R (OrderedAddCommGroup.toAddCommGroup.{u1} R (StarOrderedRing.orderedAddCommGroup.{u1} R (Ring.toNonUnitalRing.{u1} R (StrictOrderedRing.toRing.{u1} R _inst_2)) (OrderedAddCommGroup.toPartialOrder.{u1} R (StrictOrderedRing.toOrderedAddCommGroup.{u1} R _inst_2)) _inst_3))) v (Star.star.{max u2 u1} (n -> R) (Pi.hasStar.{u2, u1} n (fun (ᾰ : n) => R) (fun (i : n) => InvolutiveStar.toHasStar.{u1} R (StarAddMonoid.toHasInvolutiveStar.{u1} R (AddCommMonoid.toAddMonoid.{u1} R (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonUnitalSemiring.toNonUnitalNonAssocSemiring.{u1} R (NonUnitalRing.toNonUnitalSemiring.{u1} R (Ring.toNonUnitalRing.{u1} R (StrictOrderedRing.toRing.{u1} R _inst_2)))))) (StarRing.toStarAddMonoid.{u1} R (NonUnitalRing.toNonUnitalSemiring.{u1} R (Ring.toNonUnitalRing.{u1} R (StrictOrderedRing.toRing.{u1} R _inst_2))) (StarOrderedRing.toStarRing.{u1} R (NonUnitalRing.toNonUnitalSemiring.{u1} R (Ring.toNonUnitalRing.{u1} R (StrictOrderedRing.toRing.{u1} R _inst_2))) (OrderedAddCommGroup.toPartialOrder.{u1} R (StrictOrderedRing.toOrderedAddCommGroup.{u1} R _inst_2)) _inst_3))))) v)) (OfNat.ofNat.{u1} R 0 (OfNat.mk.{u1} R 0 (Zero.zero.{u1} R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (StrictOrderedRing.toRing.{u1} R _inst_2)))))))))) (Eq.{max (succ u2) (succ u1)} (n -> R) v (OfNat.ofNat.{max u2 u1} (n -> R) 0 (OfNat.mk.{max u2 u1} (n -> R) 0 (Zero.zero.{max u2 u1} (n -> R) (Pi.instZero.{u2, u1} n (fun (ᾰ : n) => R) (fun (i : n) => MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (StrictOrderedRing.toRing.{u1} R _inst_2)))))))))))
+  forall {R : Type.{u1}} {n : Type.{u2}} [_inst_1 : Fintype.{u2} n] [_inst_2 : PartialOrder.{u1} R] [_inst_3 : NonUnitalRing.{u1} R] [_inst_4 : StarOrderedRing.{u1} R (NonUnitalRing.toNonUnitalSemiring.{u1} R _inst_3) _inst_2] [_inst_5 : NoZeroDivisors.{u1} R (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_3)))) (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_3))))] {v : n -> R}, Iff (Eq.{succ u1} R (Matrix.dotProduct.{u1, u2} n R _inst_1 (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_3)))) (AddCommGroup.toAddCommMonoid.{u1} R (OrderedAddCommGroup.toAddCommGroup.{u1} R (StarOrderedRing.orderedAddCommGroup.{u1} R _inst_3 _inst_2 _inst_4))) v (Star.star.{max u2 u1} (n -> R) (Pi.hasStar.{u2, u1} n (fun (ᾰ : n) => R) (fun (i : n) => InvolutiveStar.toHasStar.{u1} R (StarAddMonoid.toHasInvolutiveStar.{u1} R (AddCommMonoid.toAddMonoid.{u1} R (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonUnitalSemiring.toNonUnitalNonAssocSemiring.{u1} R (NonUnitalRing.toNonUnitalSemiring.{u1} R _inst_3)))) (StarRing.toStarAddMonoid.{u1} R (NonUnitalRing.toNonUnitalSemiring.{u1} R _inst_3) (StarOrderedRing.toStarRing.{u1} R (NonUnitalRing.toNonUnitalSemiring.{u1} R _inst_3) _inst_2 _inst_4))))) v)) (OfNat.ofNat.{u1} R 0 (OfNat.mk.{u1} R 0 (Zero.zero.{u1} R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_3)))))))) (Eq.{max (succ u2) (succ u1)} (n -> R) v (OfNat.ofNat.{max u2 u1} (n -> R) 0 (OfNat.mk.{max u2 u1} (n -> R) 0 (Zero.zero.{max u2 u1} (n -> R) (Pi.instZero.{u2, u1} n (fun (ᾰ : n) => R) (fun (i : n) => MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_3)))))))))
 but is expected to have type
-  forall {R : Type.{u1}} {n : Type.{u2}} [_inst_1 : Fintype.{u2} n] [_inst_2 : StrictOrderedRing.{u1} R] [_inst_3 : StarOrderedRing.{u1} R (NonUnitalRing.toNonUnitalSemiring.{u1} R (Ring.toNonUnitalRing.{u1} R (StrictOrderedRing.toRing.{u1} R _inst_2))) (StrictOrderedRing.toPartialOrder.{u1} R _inst_2)] [_inst_4 : NoZeroDivisors.{u1} R (NonUnitalNonAssocRing.toMul.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (StrictOrderedRing.toRing.{u1} R _inst_2)))) (MonoidWithZero.toZero.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedRing.toStrictOrderedSemiring.{u1} R _inst_2))))] {v : n -> R}, Iff (Eq.{succ u1} R (Matrix.dotProduct.{u1, u2} n R _inst_1 (NonUnitalNonAssocRing.toMul.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (StrictOrderedRing.toRing.{u1} R _inst_2)))) (OrderedCancelAddCommMonoid.toAddCommMonoid.{u1} R (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{u1} R (StrictOrderedRing.toStrictOrderedSemiring.{u1} R _inst_2))) v (Star.star.{max u1 u2} (n -> R) (Pi.instStarForAll.{u2, u1} n (fun (ᾰ : n) => R) (fun (i : n) => InvolutiveStar.toStar.{u1} R (StarAddMonoid.toInvolutiveStar.{u1} R (AddMonoidWithOne.toAddMonoid.{u1} R (AddGroupWithOne.toAddMonoidWithOne.{u1} R (Ring.toAddGroupWithOne.{u1} R (StrictOrderedRing.toRing.{u1} R _inst_2)))) (StarRing.toStarAddMonoid.{u1} R (NonUnitalRing.toNonUnitalSemiring.{u1} R (Ring.toNonUnitalRing.{u1} R (StrictOrderedRing.toRing.{u1} R _inst_2))) (StarOrderedRing.toStarRing.{u1} R (NonUnitalRing.toNonUnitalSemiring.{u1} R (Ring.toNonUnitalRing.{u1} R (StrictOrderedRing.toRing.{u1} R _inst_2))) (StrictOrderedRing.toPartialOrder.{u1} R _inst_2) _inst_3))))) v)) (OfNat.ofNat.{u1} R 0 (Zero.toOfNat0.{u1} R (MonoidWithZero.toZero.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedRing.toStrictOrderedSemiring.{u1} R _inst_2))))))) (Eq.{max (succ u1) (succ u2)} (n -> R) v (OfNat.ofNat.{max u1 u2} (n -> R) 0 (Zero.toOfNat0.{max u1 u2} (n -> R) (Pi.instZero.{u2, u1} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.579 : n) => R) (fun (i : n) => MonoidWithZero.toZero.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedRing.toStrictOrderedSemiring.{u1} R _inst_2))))))))
+  forall {R : Type.{u1}} {n : Type.{u2}} [_inst_1 : Fintype.{u2} n] [_inst_2 : StrictOrderedRing.{u1} R] [_inst_3 : StarOrderedRing.{u1} R (NonUnitalRing.toNonUnitalSemiring.{u1} R (Ring.toNonUnitalRing.{u1} R (StrictOrderedRing.toRing.{u1} R _inst_2))) (StrictOrderedRing.toPartialOrder.{u1} R _inst_2)] [_inst_4 : NoZeroDivisors.{u1} R (NonUnitalNonAssocRing.toMul.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (StrictOrderedRing.toRing.{u1} R _inst_2)))) (MonoidWithZero.toZero.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedRing.toStrictOrderedSemiring.{u1} R _inst_2))))] {_inst_5 : n -> R}, Iff (Eq.{succ u1} R (Matrix.dotProduct.{u1, u2} n R _inst_1 (NonUnitalNonAssocRing.toMul.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (StrictOrderedRing.toRing.{u1} R _inst_2)))) (OrderedCancelAddCommMonoid.toAddCommMonoid.{u1} R (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{u1} R (StrictOrderedRing.toStrictOrderedSemiring.{u1} R _inst_2))) _inst_5 (Star.star.{max u1 u2} (n -> R) (Pi.instStarForAll.{u2, u1} n (fun (a._@.Mathlib.Data.Matrix.Basic._hyg.6393 : n) => R) (fun (i : n) => InvolutiveStar.toStar.{u1} R (StarAddMonoid.toInvolutiveStar.{u1} R (AddMonoidWithOne.toAddMonoid.{u1} R (AddGroupWithOne.toAddMonoidWithOne.{u1} R (Ring.toAddGroupWithOne.{u1} R (StrictOrderedRing.toRing.{u1} R _inst_2)))) (StarRing.toStarAddMonoid.{u1} R (NonUnitalRing.toNonUnitalSemiring.{u1} R (Ring.toNonUnitalRing.{u1} R (StrictOrderedRing.toRing.{u1} R _inst_2))) (StarOrderedRing.toStarRing.{u1} R (NonUnitalRing.toNonUnitalSemiring.{u1} R (Ring.toNonUnitalRing.{u1} R (StrictOrderedRing.toRing.{u1} R _inst_2))) (StrictOrderedRing.toPartialOrder.{u1} R _inst_2) _inst_3))))) _inst_5)) (OfNat.ofNat.{u1} R 0 (Zero.toOfNat0.{u1} R (MonoidWithZero.toZero.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedRing.toStrictOrderedSemiring.{u1} R _inst_2))))))) (Eq.{max (succ u1) (succ u2)} (n -> R) _inst_5 (OfNat.ofNat.{max u1 u2} (n -> R) 0 (Zero.toOfNat0.{max u1 u2} (n -> R) (Pi.instZero.{u2, u1} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.579 : n) => R) (fun (i : n) => MonoidWithZero.toZero.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedRing.toStrictOrderedSemiring.{u1} R _inst_2))))))))
 Case conversion may be inaccurate. Consider using '#align matrix.dot_product_self_star_eq_zero Matrix.dotProduct_self_star_eq_zeroₓ'. -/
 /-- Note that this applies to `ℂ` via `complex.strict_ordered_comm_ring`. -/
 @[simp]
-theorem dotProduct_self_star_eq_zero [StrictOrderedRing R] [StarOrderedRing R] [NoZeroDivisors R]
-    {v : n → R} : dotProduct v (star v) = 0 ↔ v = 0 :=
-  (Finset.sum_eq_zero_iff_of_nonneg fun i _ => @star_mul_self_nonneg' _ _ _ _ (v i)).trans <| by
-    simp [Function.funext_iff, mul_eq_zero]
+theorem dotProduct_self_star_eq_zero [PartialOrder R] [NonUnitalRing R] [StarOrderedRing R]
+    [NoZeroDivisors R] {v : n → R} : dotProduct v (star v) = 0 ↔ v = 0 :=
+  (Finset.sum_eq_zero_iff_of_nonneg fun i _ => (@star_mul_self_nonneg' _ _ _ _ (v i) : _)).trans <|
+    by simp [Function.funext_iff, mul_eq_zero]
 #align matrix.dot_product_self_star_eq_zero Matrix.dotProduct_self_star_eq_zero
 
 end Self
Diff
@@ -48,7 +48,7 @@ variable [Semiring R] [Fintype n]
 lean 3 declaration is
   forall {R : Type.{u1}} {n : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : Fintype.{u2} n] [_inst_3 : DecidableEq.{succ u2} n] (v : n -> R) (c : R) (i : n), Eq.{succ u1} R (Matrix.dotProduct.{u1, u2} n R _inst_2 (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) v (coeFn.{max (succ u1) (succ (max u2 u1)), max (succ u1) (succ (max u2 u1))} (LinearMap.{u1, u1, u1, max u2 u1} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) ((fun (_x : n) => R) i) (forall (i : n), (fun (_x : n) => R) i) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (Pi.addCommMonoid.{u2, u1} n (fun (i : n) => (fun (_x : n) => R) i) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1)))) (Semiring.toModule.{u1} R _inst_1) (Pi.module.{u2, u1, u1} n (fun (i : n) => (fun (_x : n) => R) i) R _inst_1 (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (fun (i : n) => Semiring.toModule.{u1} R _inst_1))) (fun (_x : LinearMap.{u1, u1, u1, max u2 u1} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) ((fun (_x : n) => R) i) (forall (i : n), (fun (_x : n) => R) i) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (Pi.addCommMonoid.{u2, u1} n (fun (i : n) => (fun (_x : n) => R) i) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1)))) (Semiring.toModule.{u1} R _inst_1) (Pi.module.{u2, u1, u1} n (fun (i : n) => (fun (_x : n) => R) i) R _inst_1 (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (fun (i : n) => Semiring.toModule.{u1} R _inst_1))) => R -> (forall (i : n), (fun (_x : n) => R) i)) (LinearMap.hasCoeToFun.{u1, u1, u1, max u2 u1} R R ((fun (_x : n) => R) i) (forall (i : n), (fun (_x : n) => R) i) _inst_1 _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (Pi.addCommMonoid.{u2, u1} n (fun (i : n) => (fun (_x : n) => R) i) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1)))) (Semiring.toModule.{u1} R _inst_1) (Pi.module.{u2, u1, u1} n (fun (i : n) => (fun (_x : n) => R) i) R _inst_1 (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (fun (i : n) => Semiring.toModule.{u1} R _inst_1)) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (LinearMap.stdBasis.{u1, u2, u1} R n _inst_1 (fun (_x : n) => R) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (fun (i : n) => Semiring.toModule.{u1} R _inst_1) (fun (a : n) (b : n) => _inst_3 a b) i) c)) (HMul.hMul.{u1, u1, u1} R R R (instHMul.{u1} R (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))))) (v i) c)
 but is expected to have type
-  forall {R : Type.{u1}} [n : Semiring.{u1} R] {_inst_1 : Type.{u2}} [_inst_2 : Fintype.{u2} _inst_1] [_inst_3 : DecidableEq.{succ u2} _inst_1] (v : _inst_1 -> R) (c : R) (i : _inst_1), Eq.{succ u1} R (Matrix.dotProduct.{u1, u2} _inst_1 R _inst_2 (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R n))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R n))) v (FunLike.coe.{max (succ u1) (succ u2), succ u1, max (succ u1) (succ u2)} (LinearMap.{u1, u1, u1, max u2 u1} R R n n (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R n)) R (_inst_1 -> R) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.48 : _inst_1) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.48 : _inst_1) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.48 : _inst_1) => R) i) n))) (Pi.addCommMonoid.{u2, u1} _inst_1 (fun (i : _inst_1) => R) (fun (i : _inst_1) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.48 : _inst_1) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.48 : _inst_1) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.48 : _inst_1) => R) i) n)))) (Semiring.toModule.{u1} R n) (Pi.module.{u2, u1, u1} _inst_1 (fun (i : _inst_1) => R) R n (fun (i : _inst_1) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.48 : _inst_1) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.48 : _inst_1) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.48 : _inst_1) => R) i) n))) (fun (i : _inst_1) => Semiring.toModule.{u1} R n))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6190 : R) => _inst_1 -> R) _x) (LinearMap.instFunLikeLinearMap.{u1, u1, u1, max u1 u2} R R R (_inst_1 -> R) n n (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : _inst_1) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : _inst_1) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : _inst_1) => R) i) n))) (Pi.addCommMonoid.{u2, u1} _inst_1 (fun (i : _inst_1) => R) (fun (i : _inst_1) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : _inst_1) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : _inst_1) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : _inst_1) => R) i) n)))) (Semiring.toModule.{u1} R n) (Pi.module.{u2, u1, u1} _inst_1 (fun (i : _inst_1) => R) R n (fun (i : _inst_1) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : _inst_1) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : _inst_1) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : _inst_1) => R) i) n))) (fun (i : _inst_1) => Semiring.toModule.{u1} R n)) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R n))) (LinearMap.stdBasis.{u1, u2, u1} R _inst_1 n (fun (_x : _inst_1) => R) (fun (i : _inst_1) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : _inst_1) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : _inst_1) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : _inst_1) => R) i) n))) (fun (i : _inst_1) => Semiring.toModule.{u1} R n) (fun (a : _inst_1) (b : _inst_1) => _inst_3 a b) i) c)) (HMul.hMul.{u1, u1, u1} R R R (instHMul.{u1} R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R n)))) (v i) c)
+  forall {R : Type.{u1}} {n : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : Fintype.{u2} n] [_inst_3 : DecidableEq.{succ u2} n] (v : n -> R) (c : R) (i : n), Eq.{succ u1} R (Matrix.dotProduct.{u1, u2} n R _inst_2 (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) v (FunLike.coe.{max (succ u1) (succ u2), succ u1, max (succ u1) (succ u2)} (LinearMap.{u1, u1, u1, max u2 u1} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) R (n -> R) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.52 : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.52 : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.52 : n) => R) i) _inst_1))) (Pi.addCommMonoid.{u2, u1} n (fun (i : n) => R) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.52 : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.52 : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.52 : n) => R) i) _inst_1)))) (Semiring.toModule.{u1} R _inst_1) (Pi.module.{u2, u1, u1} n (fun (i : n) => R) R _inst_1 (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.52 : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.52 : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.52 : n) => R) i) _inst_1))) (fun (i : n) => Semiring.toModule.{u1} R _inst_1))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6190 : R) => n -> R) _x) (LinearMap.instFunLikeLinearMap.{u1, u1, u1, max u1 u2} R R R (n -> R) _inst_1 _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (Pi.addCommMonoid.{u2, u1} n (fun (i : n) => R) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1)))) (Semiring.toModule.{u1} R _inst_1) (Pi.module.{u2, u1, u1} n (fun (i : n) => R) R _inst_1 (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (fun (i : n) => Semiring.toModule.{u1} R _inst_1)) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (LinearMap.stdBasis.{u1, u2, u1} R n _inst_1 (fun (_x : n) => R) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (fun (i : n) => Semiring.toModule.{u1} R _inst_1) (fun (a : n) (b : n) => _inst_3 a b) i) c)) (HMul.hMul.{u1, u1, u1} R R R (instHMul.{u1} R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))) (v i) c)
 Case conversion may be inaccurate. Consider using '#align matrix.dot_product_std_basis_eq_mul Matrix.dotProduct_stdBasis_eq_mulₓ'. -/
 @[simp]
 theorem dotProduct_stdBasis_eq_mul [DecidableEq n] (v : n → R) (c : R) (i : n) :
@@ -63,7 +63,7 @@ theorem dotProduct_stdBasis_eq_mul [DecidableEq n] (v : n → R) (c : R) (i : n)
 lean 3 declaration is
   forall {R : Type.{u1}} {n : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : Fintype.{u2} n] [_inst_3 : DecidableEq.{succ u2} n] (v : n -> R) (i : n), Eq.{succ u1} R (Matrix.dotProduct.{u1, u2} n R _inst_2 (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) v (coeFn.{max (succ u1) (succ (max u2 u1)), max (succ u1) (succ (max u2 u1))} (LinearMap.{u1, u1, u1, max u2 u1} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) ((fun (_x : n) => R) i) (forall (i : n), (fun (_x : n) => R) i) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (Pi.addCommMonoid.{u2, u1} n (fun (i : n) => (fun (_x : n) => R) i) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1)))) (Semiring.toModule.{u1} R _inst_1) (Pi.module.{u2, u1, u1} n (fun (i : n) => (fun (_x : n) => R) i) R _inst_1 (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (fun (i : n) => Semiring.toModule.{u1} R _inst_1))) (fun (_x : LinearMap.{u1, u1, u1, max u2 u1} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) ((fun (_x : n) => R) i) (forall (i : n), (fun (_x : n) => R) i) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (Pi.addCommMonoid.{u2, u1} n (fun (i : n) => (fun (_x : n) => R) i) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1)))) (Semiring.toModule.{u1} R _inst_1) (Pi.module.{u2, u1, u1} n (fun (i : n) => (fun (_x : n) => R) i) R _inst_1 (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (fun (i : n) => Semiring.toModule.{u1} R _inst_1))) => R -> (forall (i : n), (fun (_x : n) => R) i)) (LinearMap.hasCoeToFun.{u1, u1, u1, max u2 u1} R R ((fun (_x : n) => R) i) (forall (i : n), (fun (_x : n) => R) i) _inst_1 _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (Pi.addCommMonoid.{u2, u1} n (fun (i : n) => (fun (_x : n) => R) i) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1)))) (Semiring.toModule.{u1} R _inst_1) (Pi.module.{u2, u1, u1} n (fun (i : n) => (fun (_x : n) => R) i) R _inst_1 (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (fun (i : n) => Semiring.toModule.{u1} R _inst_1)) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (LinearMap.stdBasis.{u1, u2, u1} R n _inst_1 (fun (_x : n) => R) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (fun (i : n) => Semiring.toModule.{u1} R _inst_1) (fun (a : n) (b : n) => _inst_3 a b) i) (OfNat.ofNat.{u1} ((fun (_x : n) => R) i) 1 (OfNat.mk.{u1} ((fun (_x : n) => R) i) 1 (One.one.{u1} ((fun (_x : n) => R) i) (AddMonoidWithOne.toOne.{u1} ((fun (_x : n) => R) i) (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toAddCommMonoidWithOne.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))))))))) (v i)
 but is expected to have type
-  forall {R : Type.{u1}} [n : Semiring.{u1} R] {_inst_1 : Type.{u2}} [_inst_2 : Fintype.{u2} _inst_1] [_inst_3 : DecidableEq.{succ u2} _inst_1] (v : _inst_1 -> R) (i : _inst_1), Eq.{succ u1} R (Matrix.dotProduct.{u1, u2} _inst_1 R _inst_2 (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R n))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R n))) v (FunLike.coe.{max (succ u1) (succ u2), succ u1, max (succ u1) (succ u2)} (LinearMap.{u1, u1, u1, max u2 u1} R R n n (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R n)) R (_inst_1 -> R) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.175 : _inst_1) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.175 : _inst_1) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.175 : _inst_1) => R) i) n))) (Pi.addCommMonoid.{u2, u1} _inst_1 (fun (i : _inst_1) => R) (fun (i : _inst_1) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.175 : _inst_1) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.175 : _inst_1) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.175 : _inst_1) => R) i) n)))) (Semiring.toModule.{u1} R n) (Pi.module.{u2, u1, u1} _inst_1 (fun (i : _inst_1) => R) R n (fun (i : _inst_1) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.175 : _inst_1) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.175 : _inst_1) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.175 : _inst_1) => R) i) n))) (fun (i : _inst_1) => Semiring.toModule.{u1} R n))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6190 : R) => _inst_1 -> R) _x) (LinearMap.instFunLikeLinearMap.{u1, u1, u1, max u1 u2} R R R (_inst_1 -> R) n n (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : _inst_1) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : _inst_1) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : _inst_1) => R) i) n))) (Pi.addCommMonoid.{u2, u1} _inst_1 (fun (i : _inst_1) => R) (fun (i : _inst_1) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : _inst_1) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : _inst_1) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : _inst_1) => R) i) n)))) (Semiring.toModule.{u1} R n) (Pi.module.{u2, u1, u1} _inst_1 (fun (i : _inst_1) => R) R n (fun (i : _inst_1) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : _inst_1) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : _inst_1) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : _inst_1) => R) i) n))) (fun (i : _inst_1) => Semiring.toModule.{u1} R n)) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R n))) (LinearMap.stdBasis.{u1, u2, u1} R _inst_1 n (fun (_x : _inst_1) => R) (fun (i : _inst_1) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : _inst_1) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : _inst_1) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : _inst_1) => R) i) n))) (fun (i : _inst_1) => Semiring.toModule.{u1} R n) (fun (a : _inst_1) (b : _inst_1) => _inst_3 a b) i) (OfNat.ofNat.{u1} R 1 (One.toOfNat1.{u1} R (Semiring.toOne.{u1} R n))))) (v i)
+  forall {R : Type.{u1}} {n : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : Fintype.{u2} n] [_inst_3 : DecidableEq.{succ u2} n] (v : n -> R) (i : n), Eq.{succ u1} R (Matrix.dotProduct.{u1, u2} n R _inst_2 (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) v (FunLike.coe.{max (succ u1) (succ u2), succ u1, max (succ u1) (succ u2)} (LinearMap.{u1, u1, u1, max u2 u1} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) R (n -> R) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.179 : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.179 : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.179 : n) => R) i) _inst_1))) (Pi.addCommMonoid.{u2, u1} n (fun (i : n) => R) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.179 : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.179 : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.179 : n) => R) i) _inst_1)))) (Semiring.toModule.{u1} R _inst_1) (Pi.module.{u2, u1, u1} n (fun (i : n) => R) R _inst_1 (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.179 : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.179 : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.179 : n) => R) i) _inst_1))) (fun (i : n) => Semiring.toModule.{u1} R _inst_1))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6190 : R) => n -> R) _x) (LinearMap.instFunLikeLinearMap.{u1, u1, u1, max u1 u2} R R R (n -> R) _inst_1 _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (Pi.addCommMonoid.{u2, u1} n (fun (i : n) => R) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1)))) (Semiring.toModule.{u1} R _inst_1) (Pi.module.{u2, u1, u1} n (fun (i : n) => R) R _inst_1 (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (fun (i : n) => Semiring.toModule.{u1} R _inst_1)) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (LinearMap.stdBasis.{u1, u2, u1} R n _inst_1 (fun (_x : n) => R) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (fun (i : n) => Semiring.toModule.{u1} R _inst_1) (fun (a : n) (b : n) => _inst_3 a b) i) (OfNat.ofNat.{u1} R 1 (One.toOfNat1.{u1} R (Semiring.toOne.{u1} R _inst_1))))) (v i)
 Case conversion may be inaccurate. Consider using '#align matrix.dot_product_std_basis_one Matrix.dotProduct_stdBasis_oneₓ'. -/
 @[simp]
 theorem dotProduct_stdBasis_one [DecidableEq n] (v : n → R) (i : n) :
@@ -75,7 +75,7 @@ theorem dotProduct_stdBasis_one [DecidableEq n] (v : n → R) (i : n) :
 lean 3 declaration is
   forall {R : Type.{u1}} {n : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : Fintype.{u2} n] (v : n -> R) (w : n -> R), (forall (u : n -> R), Eq.{succ u1} R (Matrix.dotProduct.{u1, u2} n R _inst_2 (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) v u) (Matrix.dotProduct.{u1, u2} n R _inst_2 (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) w u)) -> (Eq.{max (succ u2) (succ u1)} (n -> R) v w)
 but is expected to have type
-  forall {R : Type.{u1}} [n : Semiring.{u1} R] {_inst_1 : Type.{u2}} [_inst_2 : Fintype.{u2} _inst_1] (v : _inst_1 -> R) (w : _inst_1 -> R), (forall (u : _inst_1 -> R), Eq.{succ u1} R (Matrix.dotProduct.{u1, u2} _inst_1 R _inst_2 (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R n))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R n))) v u) (Matrix.dotProduct.{u1, u2} _inst_1 R _inst_2 (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R n))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R n))) w u)) -> (Eq.{max (succ u1) (succ u2)} (_inst_1 -> R) v w)
+  forall {R : Type.{u1}} {n : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : Fintype.{u2} n] (v : n -> R) (w : n -> R), (forall (u : n -> R), Eq.{succ u1} R (Matrix.dotProduct.{u1, u2} n R _inst_2 (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) v u) (Matrix.dotProduct.{u1, u2} n R _inst_2 (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) w u)) -> (Eq.{max (succ u1) (succ u2)} (n -> R) v w)
 Case conversion may be inaccurate. Consider using '#align matrix.dot_product_eq Matrix.dotProduct_eqₓ'. -/
 theorem dotProduct_eq (v w : n → R) (h : ∀ u, dotProduct v u = dotProduct w u) : v = w :=
   by
@@ -87,7 +87,7 @@ theorem dotProduct_eq (v w : n → R) (h : ∀ u, dotProduct v u = dotProduct w
 lean 3 declaration is
   forall {R : Type.{u1}} {n : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : Fintype.{u2} n] {v : n -> R} {w : n -> R}, Iff (forall (u : n -> R), Eq.{succ u1} R (Matrix.dotProduct.{u1, u2} n R _inst_2 (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) v u) (Matrix.dotProduct.{u1, u2} n R _inst_2 (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) w u)) (Eq.{max (succ u2) (succ u1)} (n -> R) v w)
 but is expected to have type
-  forall {R : Type.{u1}} [n : Semiring.{u1} R] {_inst_1 : Type.{u2}} [_inst_2 : Fintype.{u2} _inst_1] {v : _inst_1 -> R} {w : _inst_1 -> R}, Iff (forall (u : _inst_1 -> R), Eq.{succ u1} R (Matrix.dotProduct.{u1, u2} _inst_1 R _inst_2 (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R n))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R n))) v u) (Matrix.dotProduct.{u1, u2} _inst_1 R _inst_2 (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R n))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R n))) w u)) (Eq.{max (succ u1) (succ u2)} (_inst_1 -> R) v w)
+  forall {R : Type.{u1}} {n : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : Fintype.{u2} n] {v : n -> R} {w : n -> R}, Iff (forall (u : n -> R), Eq.{succ u1} R (Matrix.dotProduct.{u1, u2} n R _inst_2 (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) v u) (Matrix.dotProduct.{u1, u2} n R _inst_2 (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) w u)) (Eq.{max (succ u1) (succ u2)} (n -> R) v w)
 Case conversion may be inaccurate. Consider using '#align matrix.dot_product_eq_iff Matrix.dotProduct_eq_iffₓ'. -/
 theorem dotProduct_eq_iff {v w : n → R} : (∀ u, dotProduct v u = dotProduct w u) ↔ v = w :=
   ⟨fun h => dotProduct_eq v w h, fun h _ => h ▸ rfl⟩
@@ -97,7 +97,7 @@ theorem dotProduct_eq_iff {v w : n → R} : (∀ u, dotProduct v u = dotProduct
 lean 3 declaration is
   forall {R : Type.{u1}} {n : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : Fintype.{u2} n] (v : n -> R), (forall (w : n -> R), Eq.{succ u1} R (Matrix.dotProduct.{u1, u2} n R _inst_2 (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) v w) (OfNat.ofNat.{u1} R 0 (OfNat.mk.{u1} R 0 (Zero.zero.{u1} R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))))))) -> (Eq.{max (succ u2) (succ u1)} (n -> R) v (OfNat.ofNat.{max u2 u1} (n -> R) 0 (OfNat.mk.{max u2 u1} (n -> R) 0 (Zero.zero.{max u2 u1} (n -> R) (Pi.instZero.{u2, u1} n (fun (ᾰ : n) => R) (fun (i : n) => MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))))))))
 but is expected to have type
-  forall {R : Type.{u1}} [n : Semiring.{u1} R] {_inst_1 : Type.{u2}} [_inst_2 : Fintype.{u2} _inst_1] (v : _inst_1 -> R), (forall (w : _inst_1 -> R), Eq.{succ u1} R (Matrix.dotProduct.{u1, u2} _inst_1 R _inst_2 (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R n))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R n))) v w) (OfNat.ofNat.{u1} R 0 (Zero.toOfNat0.{u1} R (MonoidWithZero.toZero.{u1} R (Semiring.toMonoidWithZero.{u1} R n))))) -> (Eq.{max (succ u1) (succ u2)} (_inst_1 -> R) v (OfNat.ofNat.{max u1 u2} (_inst_1 -> R) 0 (Zero.toOfNat0.{max u1 u2} (_inst_1 -> R) (Pi.instZero.{u2, u1} _inst_1 (fun (a._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.355 : _inst_1) => R) (fun (i : _inst_1) => MonoidWithZero.toZero.{u1} R (Semiring.toMonoidWithZero.{u1} R n))))))
+  forall {R : Type.{u1}} {n : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : Fintype.{u2} n] (v : n -> R), (forall (w : n -> R), Eq.{succ u1} R (Matrix.dotProduct.{u1, u2} n R _inst_2 (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) v w) (OfNat.ofNat.{u1} R 0 (Zero.toOfNat0.{u1} R (MonoidWithZero.toZero.{u1} R (Semiring.toMonoidWithZero.{u1} R _inst_1))))) -> (Eq.{max (succ u1) (succ u2)} (n -> R) v (OfNat.ofNat.{max u1 u2} (n -> R) 0 (Zero.toOfNat0.{max u1 u2} (n -> R) (Pi.instZero.{u2, u1} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.359 : n) => R) (fun (i : n) => MonoidWithZero.toZero.{u1} R (Semiring.toMonoidWithZero.{u1} R _inst_1))))))
 Case conversion may be inaccurate. Consider using '#align matrix.dot_product_eq_zero Matrix.dotProduct_eq_zeroₓ'. -/
 theorem dotProduct_eq_zero (v : n → R) (h : ∀ w, dotProduct v w = 0) : v = 0 :=
   dotProduct_eq _ _ fun u => (h u).symm ▸ (zero_dotProduct u).symm
@@ -107,7 +107,7 @@ theorem dotProduct_eq_zero (v : n → R) (h : ∀ w, dotProduct v w = 0) : v = 0
 lean 3 declaration is
   forall {R : Type.{u1}} {n : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : Fintype.{u2} n] {v : n -> R}, Iff (forall (w : n -> R), Eq.{succ u1} R (Matrix.dotProduct.{u1, u2} n R _inst_2 (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) v w) (OfNat.ofNat.{u1} R 0 (OfNat.mk.{u1} R 0 (Zero.zero.{u1} R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))))))) (Eq.{max (succ u2) (succ u1)} (n -> R) v (OfNat.ofNat.{max u2 u1} (n -> R) 0 (OfNat.mk.{max u2 u1} (n -> R) 0 (Zero.zero.{max u2 u1} (n -> R) (Pi.instZero.{u2, u1} n (fun (ᾰ : n) => R) (fun (i : n) => MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))))))))
 but is expected to have type
-  forall {R : Type.{u1}} [n : Semiring.{u1} R] {_inst_1 : Type.{u2}} [_inst_2 : Fintype.{u2} _inst_1] {v : _inst_1 -> R}, Iff (forall (w : _inst_1 -> R), Eq.{succ u1} R (Matrix.dotProduct.{u1, u2} _inst_1 R _inst_2 (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R n))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R n))) v w) (OfNat.ofNat.{u1} R 0 (Zero.toOfNat0.{u1} R (MonoidWithZero.toZero.{u1} R (Semiring.toMonoidWithZero.{u1} R n))))) (Eq.{max (succ u1) (succ u2)} (_inst_1 -> R) v (OfNat.ofNat.{max u1 u2} (_inst_1 -> R) 0 (Zero.toOfNat0.{max u1 u2} (_inst_1 -> R) (Pi.instZero.{u2, u1} _inst_1 (fun (a._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.403 : _inst_1) => R) (fun (i : _inst_1) => MonoidWithZero.toZero.{u1} R (Semiring.toMonoidWithZero.{u1} R n))))))
+  forall {R : Type.{u1}} {n : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : Fintype.{u2} n] {v : n -> R}, Iff (forall (w : n -> R), Eq.{succ u1} R (Matrix.dotProduct.{u1, u2} n R _inst_2 (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) v w) (OfNat.ofNat.{u1} R 0 (Zero.toOfNat0.{u1} R (MonoidWithZero.toZero.{u1} R (Semiring.toMonoidWithZero.{u1} R _inst_1))))) (Eq.{max (succ u1) (succ u2)} (n -> R) v (OfNat.ofNat.{max u1 u2} (n -> R) 0 (Zero.toOfNat0.{max u1 u2} (n -> R) (Pi.instZero.{u2, u1} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.407 : n) => R) (fun (i : n) => MonoidWithZero.toZero.{u1} R (Semiring.toMonoidWithZero.{u1} R _inst_1))))))
 Case conversion may be inaccurate. Consider using '#align matrix.dot_product_eq_zero_iff Matrix.dotProduct_eq_zero_iffₓ'. -/
 theorem dotProduct_eq_zero_iff {v : n → R} : (∀ w, dotProduct v w = 0) ↔ v = 0 :=
   ⟨fun h => dotProduct_eq_zero v h, fun h w => h.symm ▸ zero_dotProduct w⟩
@@ -119,12 +119,24 @@ section Self
 
 variable [Fintype n]
 
+/- warning: matrix.dot_product_self_eq_zero -> Matrix.dotProduct_self_eq_zero is a dubious translation:
+lean 3 declaration is
+  forall {R : Type.{u1}} {n : Type.{u2}} [_inst_1 : Fintype.{u2} n] [_inst_2 : LinearOrderedRing.{u1} R] {v : n -> R}, Iff (Eq.{succ u1} R (Matrix.dotProduct.{u1, u2} n R _inst_1 (Distrib.toHasMul.{u1} R (Ring.toDistrib.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R _inst_2)))) (AddCommGroup.toAddCommMonoid.{u1} R (OrderedAddCommGroup.toAddCommGroup.{u1} R (StrictOrderedRing.toOrderedAddCommGroup.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R _inst_2)))) v v) (OfNat.ofNat.{u1} R 0 (OfNat.mk.{u1} R 0 (Zero.zero.{u1} R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R _inst_2))))))))))) (Eq.{max (succ u2) (succ u1)} (n -> R) v (OfNat.ofNat.{max u2 u1} (n -> R) 0 (OfNat.mk.{max u2 u1} (n -> R) 0 (Zero.zero.{max u2 u1} (n -> R) (Pi.instZero.{u2, u1} n (fun (ᾰ : n) => R) (fun (i : n) => MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R _inst_2))))))))))))
+but is expected to have type
+  forall {R : Type.{u1}} {n : Type.{u2}} [_inst_1 : Fintype.{u2} n] [_inst_2 : LinearOrderedRing.{u1} R] {v : n -> R}, Iff (Eq.{succ u1} R (Matrix.dotProduct.{u1, u2} n R _inst_1 (NonUnitalNonAssocRing.toMul.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R _inst_2))))) (OrderedCancelAddCommMonoid.toAddCommMonoid.{u1} R (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{u1} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} R (LinearOrderedRing.toLinearOrderedSemiring.{u1} R _inst_2)))) v v) (OfNat.ofNat.{u1} R 0 (Zero.toOfNat0.{u1} R (MonoidWithZero.toZero.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} R (LinearOrderedRing.toLinearOrderedSemiring.{u1} R _inst_2)))))))) (Eq.{max (succ u1) (succ u2)} (n -> R) v (OfNat.ofNat.{max u1 u2} (n -> R) 0 (Zero.toOfNat0.{max u1 u2} (n -> R) (Pi.instZero.{u2, u1} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.467 : n) => R) (fun (i : n) => MonoidWithZero.toZero.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} R (LinearOrderedRing.toLinearOrderedSemiring.{u1} R _inst_2)))))))))
+Case conversion may be inaccurate. Consider using '#align matrix.dot_product_self_eq_zero Matrix.dotProduct_self_eq_zeroₓ'. -/
 @[simp]
 theorem dotProduct_self_eq_zero [LinearOrderedRing R] {v : n → R} : dotProduct v v = 0 ↔ v = 0 :=
   (Finset.sum_eq_zero_iff_of_nonneg fun i _ => mul_self_nonneg (v i)).trans <| by
     simp [Function.funext_iff]
 #align matrix.dot_product_self_eq_zero Matrix.dotProduct_self_eq_zero
 
+/- warning: matrix.dot_product_star_self_eq_zero -> Matrix.dotProduct_star_self_eq_zero is a dubious translation:
+lean 3 declaration is
+  forall {R : Type.{u1}} {n : Type.{u2}} [_inst_1 : Fintype.{u2} n] [_inst_2 : StrictOrderedRing.{u1} R] [_inst_3 : StarOrderedRing.{u1} R (NonUnitalRing.toNonUnitalSemiring.{u1} R (Ring.toNonUnitalRing.{u1} R (StrictOrderedRing.toRing.{u1} R _inst_2))) (OrderedAddCommGroup.toPartialOrder.{u1} R (StrictOrderedRing.toOrderedAddCommGroup.{u1} R _inst_2))] [_inst_4 : NoZeroDivisors.{u1} R (Distrib.toHasMul.{u1} R (Ring.toDistrib.{u1} R (StrictOrderedRing.toRing.{u1} R _inst_2))) (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (StrictOrderedRing.toRing.{u1} R _inst_2))))))] {v : n -> R}, Iff (Eq.{succ u1} R (Matrix.dotProduct.{u1, u2} n R _inst_1 (Distrib.toHasMul.{u1} R (Ring.toDistrib.{u1} R (StrictOrderedRing.toRing.{u1} R _inst_2))) (AddCommGroup.toAddCommMonoid.{u1} R (OrderedAddCommGroup.toAddCommGroup.{u1} R (StarOrderedRing.orderedAddCommGroup.{u1} R (Ring.toNonUnitalRing.{u1} R (StrictOrderedRing.toRing.{u1} R _inst_2)) (OrderedAddCommGroup.toPartialOrder.{u1} R (StrictOrderedRing.toOrderedAddCommGroup.{u1} R _inst_2)) _inst_3))) (Star.star.{max u2 u1} (n -> R) (Pi.hasStar.{u2, u1} n (fun (ᾰ : n) => R) (fun (i : n) => InvolutiveStar.toHasStar.{u1} R (StarAddMonoid.toHasInvolutiveStar.{u1} R (AddCommMonoid.toAddMonoid.{u1} R (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonUnitalSemiring.toNonUnitalNonAssocSemiring.{u1} R (NonUnitalRing.toNonUnitalSemiring.{u1} R (Ring.toNonUnitalRing.{u1} R (StrictOrderedRing.toRing.{u1} R _inst_2)))))) (StarRing.toStarAddMonoid.{u1} R (NonUnitalRing.toNonUnitalSemiring.{u1} R (Ring.toNonUnitalRing.{u1} R (StrictOrderedRing.toRing.{u1} R _inst_2))) (StarOrderedRing.toStarRing.{u1} R (NonUnitalRing.toNonUnitalSemiring.{u1} R (Ring.toNonUnitalRing.{u1} R (StrictOrderedRing.toRing.{u1} R _inst_2))) (OrderedAddCommGroup.toPartialOrder.{u1} R (StrictOrderedRing.toOrderedAddCommGroup.{u1} R _inst_2)) _inst_3))))) v) v) (OfNat.ofNat.{u1} R 0 (OfNat.mk.{u1} R 0 (Zero.zero.{u1} R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (StrictOrderedRing.toRing.{u1} R _inst_2)))))))))) (Eq.{max (succ u2) (succ u1)} (n -> R) v (OfNat.ofNat.{max u2 u1} (n -> R) 0 (OfNat.mk.{max u2 u1} (n -> R) 0 (Zero.zero.{max u2 u1} (n -> R) (Pi.instZero.{u2, u1} n (fun (ᾰ : n) => R) (fun (i : n) => MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (StrictOrderedRing.toRing.{u1} R _inst_2)))))))))))
+but is expected to have type
+  forall {R : Type.{u1}} {n : Type.{u2}} [_inst_1 : Fintype.{u2} n] [_inst_2 : StrictOrderedRing.{u1} R] [_inst_3 : StarOrderedRing.{u1} R (NonUnitalRing.toNonUnitalSemiring.{u1} R (Ring.toNonUnitalRing.{u1} R (StrictOrderedRing.toRing.{u1} R _inst_2))) (StrictOrderedRing.toPartialOrder.{u1} R _inst_2)] [_inst_4 : NoZeroDivisors.{u1} R (NonUnitalNonAssocRing.toMul.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (StrictOrderedRing.toRing.{u1} R _inst_2)))) (MonoidWithZero.toZero.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedRing.toStrictOrderedSemiring.{u1} R _inst_2))))] {v : n -> R}, Iff (Eq.{succ u1} R (Matrix.dotProduct.{u1, u2} n R _inst_1 (NonUnitalNonAssocRing.toMul.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (StrictOrderedRing.toRing.{u1} R _inst_2)))) (OrderedCancelAddCommMonoid.toAddCommMonoid.{u1} R (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{u1} R (StrictOrderedRing.toStrictOrderedSemiring.{u1} R _inst_2))) (Star.star.{max u2 u1} (n -> R) (Pi.instStarForAll.{u2, u1} n (fun (ᾰ : n) => R) (fun (i : n) => InvolutiveStar.toStar.{u1} R (StarAddMonoid.toInvolutiveStar.{u1} R (AddMonoidWithOne.toAddMonoid.{u1} R (AddGroupWithOne.toAddMonoidWithOne.{u1} R (Ring.toAddGroupWithOne.{u1} R (StrictOrderedRing.toRing.{u1} R _inst_2)))) (StarRing.toStarAddMonoid.{u1} R (NonUnitalRing.toNonUnitalSemiring.{u1} R (Ring.toNonUnitalRing.{u1} R (StrictOrderedRing.toRing.{u1} R _inst_2))) (StarOrderedRing.toStarRing.{u1} R (NonUnitalRing.toNonUnitalSemiring.{u1} R (Ring.toNonUnitalRing.{u1} R (StrictOrderedRing.toRing.{u1} R _inst_2))) (StrictOrderedRing.toPartialOrder.{u1} R _inst_2) _inst_3))))) v) v) (OfNat.ofNat.{u1} R 0 (Zero.toOfNat0.{u1} R (MonoidWithZero.toZero.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedRing.toStrictOrderedSemiring.{u1} R _inst_2))))))) (Eq.{max (succ u1) (succ u2)} (n -> R) v (OfNat.ofNat.{max u1 u2} (n -> R) 0 (Zero.toOfNat0.{max u1 u2} (n -> R) (Pi.instZero.{u2, u1} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.521 : n) => R) (fun (i : n) => MonoidWithZero.toZero.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedRing.toStrictOrderedSemiring.{u1} R _inst_2))))))))
+Case conversion may be inaccurate. Consider using '#align matrix.dot_product_star_self_eq_zero Matrix.dotProduct_star_self_eq_zeroₓ'. -/
 /-- Note that this applies to `ℂ` via `complex.strict_ordered_comm_ring`. -/
 @[simp]
 theorem dotProduct_star_self_eq_zero [StrictOrderedRing R] [StarOrderedRing R] [NoZeroDivisors R]
@@ -133,6 +145,12 @@ theorem dotProduct_star_self_eq_zero [StrictOrderedRing R] [StarOrderedRing R] [
     simp [Function.funext_iff, mul_eq_zero]
 #align matrix.dot_product_star_self_eq_zero Matrix.dotProduct_star_self_eq_zero
 
+/- warning: matrix.dot_product_self_star_eq_zero -> Matrix.dotProduct_self_star_eq_zero is a dubious translation:
+lean 3 declaration is
+  forall {R : Type.{u1}} {n : Type.{u2}} [_inst_1 : Fintype.{u2} n] [_inst_2 : StrictOrderedRing.{u1} R] [_inst_3 : StarOrderedRing.{u1} R (NonUnitalRing.toNonUnitalSemiring.{u1} R (Ring.toNonUnitalRing.{u1} R (StrictOrderedRing.toRing.{u1} R _inst_2))) (OrderedAddCommGroup.toPartialOrder.{u1} R (StrictOrderedRing.toOrderedAddCommGroup.{u1} R _inst_2))] [_inst_4 : NoZeroDivisors.{u1} R (Distrib.toHasMul.{u1} R (Ring.toDistrib.{u1} R (StrictOrderedRing.toRing.{u1} R _inst_2))) (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (StrictOrderedRing.toRing.{u1} R _inst_2))))))] {v : n -> R}, Iff (Eq.{succ u1} R (Matrix.dotProduct.{u1, u2} n R _inst_1 (Distrib.toHasMul.{u1} R (Ring.toDistrib.{u1} R (StrictOrderedRing.toRing.{u1} R _inst_2))) (AddCommGroup.toAddCommMonoid.{u1} R (OrderedAddCommGroup.toAddCommGroup.{u1} R (StarOrderedRing.orderedAddCommGroup.{u1} R (Ring.toNonUnitalRing.{u1} R (StrictOrderedRing.toRing.{u1} R _inst_2)) (OrderedAddCommGroup.toPartialOrder.{u1} R (StrictOrderedRing.toOrderedAddCommGroup.{u1} R _inst_2)) _inst_3))) v (Star.star.{max u2 u1} (n -> R) (Pi.hasStar.{u2, u1} n (fun (ᾰ : n) => R) (fun (i : n) => InvolutiveStar.toHasStar.{u1} R (StarAddMonoid.toHasInvolutiveStar.{u1} R (AddCommMonoid.toAddMonoid.{u1} R (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonUnitalSemiring.toNonUnitalNonAssocSemiring.{u1} R (NonUnitalRing.toNonUnitalSemiring.{u1} R (Ring.toNonUnitalRing.{u1} R (StrictOrderedRing.toRing.{u1} R _inst_2)))))) (StarRing.toStarAddMonoid.{u1} R (NonUnitalRing.toNonUnitalSemiring.{u1} R (Ring.toNonUnitalRing.{u1} R (StrictOrderedRing.toRing.{u1} R _inst_2))) (StarOrderedRing.toStarRing.{u1} R (NonUnitalRing.toNonUnitalSemiring.{u1} R (Ring.toNonUnitalRing.{u1} R (StrictOrderedRing.toRing.{u1} R _inst_2))) (OrderedAddCommGroup.toPartialOrder.{u1} R (StrictOrderedRing.toOrderedAddCommGroup.{u1} R _inst_2)) _inst_3))))) v)) (OfNat.ofNat.{u1} R 0 (OfNat.mk.{u1} R 0 (Zero.zero.{u1} R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (StrictOrderedRing.toRing.{u1} R _inst_2)))))))))) (Eq.{max (succ u2) (succ u1)} (n -> R) v (OfNat.ofNat.{max u2 u1} (n -> R) 0 (OfNat.mk.{max u2 u1} (n -> R) 0 (Zero.zero.{max u2 u1} (n -> R) (Pi.instZero.{u2, u1} n (fun (ᾰ : n) => R) (fun (i : n) => MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (StrictOrderedRing.toRing.{u1} R _inst_2)))))))))))
+but is expected to have type
+  forall {R : Type.{u1}} {n : Type.{u2}} [_inst_1 : Fintype.{u2} n] [_inst_2 : StrictOrderedRing.{u1} R] [_inst_3 : StarOrderedRing.{u1} R (NonUnitalRing.toNonUnitalSemiring.{u1} R (Ring.toNonUnitalRing.{u1} R (StrictOrderedRing.toRing.{u1} R _inst_2))) (StrictOrderedRing.toPartialOrder.{u1} R _inst_2)] [_inst_4 : NoZeroDivisors.{u1} R (NonUnitalNonAssocRing.toMul.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (StrictOrderedRing.toRing.{u1} R _inst_2)))) (MonoidWithZero.toZero.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedRing.toStrictOrderedSemiring.{u1} R _inst_2))))] {v : n -> R}, Iff (Eq.{succ u1} R (Matrix.dotProduct.{u1, u2} n R _inst_1 (NonUnitalNonAssocRing.toMul.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (StrictOrderedRing.toRing.{u1} R _inst_2)))) (OrderedCancelAddCommMonoid.toAddCommMonoid.{u1} R (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{u1} R (StrictOrderedRing.toStrictOrderedSemiring.{u1} R _inst_2))) v (Star.star.{max u1 u2} (n -> R) (Pi.instStarForAll.{u2, u1} n (fun (ᾰ : n) => R) (fun (i : n) => InvolutiveStar.toStar.{u1} R (StarAddMonoid.toInvolutiveStar.{u1} R (AddMonoidWithOne.toAddMonoid.{u1} R (AddGroupWithOne.toAddMonoidWithOne.{u1} R (Ring.toAddGroupWithOne.{u1} R (StrictOrderedRing.toRing.{u1} R _inst_2)))) (StarRing.toStarAddMonoid.{u1} R (NonUnitalRing.toNonUnitalSemiring.{u1} R (Ring.toNonUnitalRing.{u1} R (StrictOrderedRing.toRing.{u1} R _inst_2))) (StarOrderedRing.toStarRing.{u1} R (NonUnitalRing.toNonUnitalSemiring.{u1} R (Ring.toNonUnitalRing.{u1} R (StrictOrderedRing.toRing.{u1} R _inst_2))) (StrictOrderedRing.toPartialOrder.{u1} R _inst_2) _inst_3))))) v)) (OfNat.ofNat.{u1} R 0 (Zero.toOfNat0.{u1} R (MonoidWithZero.toZero.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedRing.toStrictOrderedSemiring.{u1} R _inst_2))))))) (Eq.{max (succ u1) (succ u2)} (n -> R) v (OfNat.ofNat.{max u1 u2} (n -> R) 0 (Zero.toOfNat0.{max u1 u2} (n -> R) (Pi.instZero.{u2, u1} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.579 : n) => R) (fun (i : n) => MonoidWithZero.toZero.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedRing.toStrictOrderedSemiring.{u1} R _inst_2))))))))
+Case conversion may be inaccurate. Consider using '#align matrix.dot_product_self_star_eq_zero Matrix.dotProduct_self_star_eq_zeroₓ'. -/
 /-- Note that this applies to `ℂ` via `complex.strict_ordered_comm_ring`. -/
 @[simp]
 theorem dotProduct_self_star_eq_zero [StrictOrderedRing R] [StarOrderedRing R] [NoZeroDivisors R]
Diff
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Johannes Hölzl, Patrick Massot, Casper Putz, Anne Baanen
 
 ! This file was ported from Lean 3 source module linear_algebra.matrix.dot_product
-! leanprover-community/mathlib commit 19cb3751e5e9b3d97adb51023949c50c13b5fdfd
+! leanprover-community/mathlib commit 46822d96c0c0a8e58a41a0cba1291620967575c5
 ! Please do not edit these lines, except to modify the commit id
 ! if you have ported upstream changes.
 -/
@@ -36,15 +36,19 @@ matrix, reindex
 
 universe v w
 
+variable {R : Type v} {n : Type w}
+
 namespace Matrix
 
-variable {R : Type v} [Semiring R] {n : Type w} [Fintype n]
+section Semiring
+
+variable [Semiring R] [Fintype n]
 
 /- warning: matrix.dot_product_std_basis_eq_mul -> Matrix.dotProduct_stdBasis_eq_mul is a dubious translation:
 lean 3 declaration is
-  forall {R : Type.{u1}} [_inst_1 : Semiring.{u1} R] {n : Type.{u2}} [_inst_2 : Fintype.{u2} n] [_inst_3 : DecidableEq.{succ u2} n] (v : n -> R) (c : R) (i : n), Eq.{succ u1} R (Matrix.dotProduct.{u1, u2} n R _inst_2 (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) v (coeFn.{max (succ u1) (succ (max u2 u1)), max (succ u1) (succ (max u2 u1))} (LinearMap.{u1, u1, u1, max u2 u1} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) ((fun (_x : n) => R) i) (forall (i : n), (fun (_x : n) => R) i) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (Pi.addCommMonoid.{u2, u1} n (fun (i : n) => (fun (_x : n) => R) i) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1)))) (Semiring.toModule.{u1} R _inst_1) (Pi.module.{u2, u1, u1} n (fun (i : n) => (fun (_x : n) => R) i) R _inst_1 (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (fun (i : n) => Semiring.toModule.{u1} R _inst_1))) (fun (_x : LinearMap.{u1, u1, u1, max u2 u1} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) ((fun (_x : n) => R) i) (forall (i : n), (fun (_x : n) => R) i) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (Pi.addCommMonoid.{u2, u1} n (fun (i : n) => (fun (_x : n) => R) i) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1)))) (Semiring.toModule.{u1} R _inst_1) (Pi.module.{u2, u1, u1} n (fun (i : n) => (fun (_x : n) => R) i) R _inst_1 (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (fun (i : n) => Semiring.toModule.{u1} R _inst_1))) => R -> (forall (i : n), (fun (_x : n) => R) i)) (LinearMap.hasCoeToFun.{u1, u1, u1, max u2 u1} R R ((fun (_x : n) => R) i) (forall (i : n), (fun (_x : n) => R) i) _inst_1 _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (Pi.addCommMonoid.{u2, u1} n (fun (i : n) => (fun (_x : n) => R) i) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1)))) (Semiring.toModule.{u1} R _inst_1) (Pi.module.{u2, u1, u1} n (fun (i : n) => (fun (_x : n) => R) i) R _inst_1 (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (fun (i : n) => Semiring.toModule.{u1} R _inst_1)) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (LinearMap.stdBasis.{u1, u2, u1} R n _inst_1 (fun (_x : n) => R) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (fun (i : n) => Semiring.toModule.{u1} R _inst_1) (fun (a : n) (b : n) => _inst_3 a b) i) c)) (HMul.hMul.{u1, u1, u1} R R R (instHMul.{u1} R (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))))) (v i) c)
+  forall {R : Type.{u1}} {n : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : Fintype.{u2} n] [_inst_3 : DecidableEq.{succ u2} n] (v : n -> R) (c : R) (i : n), Eq.{succ u1} R (Matrix.dotProduct.{u1, u2} n R _inst_2 (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) v (coeFn.{max (succ u1) (succ (max u2 u1)), max (succ u1) (succ (max u2 u1))} (LinearMap.{u1, u1, u1, max u2 u1} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) ((fun (_x : n) => R) i) (forall (i : n), (fun (_x : n) => R) i) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (Pi.addCommMonoid.{u2, u1} n (fun (i : n) => (fun (_x : n) => R) i) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1)))) (Semiring.toModule.{u1} R _inst_1) (Pi.module.{u2, u1, u1} n (fun (i : n) => (fun (_x : n) => R) i) R _inst_1 (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (fun (i : n) => Semiring.toModule.{u1} R _inst_1))) (fun (_x : LinearMap.{u1, u1, u1, max u2 u1} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) ((fun (_x : n) => R) i) (forall (i : n), (fun (_x : n) => R) i) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (Pi.addCommMonoid.{u2, u1} n (fun (i : n) => (fun (_x : n) => R) i) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1)))) (Semiring.toModule.{u1} R _inst_1) (Pi.module.{u2, u1, u1} n (fun (i : n) => (fun (_x : n) => R) i) R _inst_1 (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (fun (i : n) => Semiring.toModule.{u1} R _inst_1))) => R -> (forall (i : n), (fun (_x : n) => R) i)) (LinearMap.hasCoeToFun.{u1, u1, u1, max u2 u1} R R ((fun (_x : n) => R) i) (forall (i : n), (fun (_x : n) => R) i) _inst_1 _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (Pi.addCommMonoid.{u2, u1} n (fun (i : n) => (fun (_x : n) => R) i) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1)))) (Semiring.toModule.{u1} R _inst_1) (Pi.module.{u2, u1, u1} n (fun (i : n) => (fun (_x : n) => R) i) R _inst_1 (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (fun (i : n) => Semiring.toModule.{u1} R _inst_1)) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (LinearMap.stdBasis.{u1, u2, u1} R n _inst_1 (fun (_x : n) => R) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (fun (i : n) => Semiring.toModule.{u1} R _inst_1) (fun (a : n) (b : n) => _inst_3 a b) i) c)) (HMul.hMul.{u1, u1, u1} R R R (instHMul.{u1} R (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))))) (v i) c)
 but is expected to have type
-  forall {R : Type.{u1}} [_inst_1 : Semiring.{u1} R] {n : Type.{u2}} [_inst_2 : Fintype.{u2} n] [_inst_3 : DecidableEq.{succ u2} n] (v : n -> R) (c : R) (i : n), Eq.{succ u1} R (Matrix.dotProduct.{u1, u2} n R _inst_2 (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) v (FunLike.coe.{max (succ u1) (succ u2), succ u1, max (succ u1) (succ u2)} (LinearMap.{u1, u1, u1, max u2 u1} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) R (n -> R) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.48 : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.48 : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.48 : n) => R) i) _inst_1))) (Pi.addCommMonoid.{u2, u1} n (fun (i : n) => R) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.48 : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.48 : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.48 : n) => R) i) _inst_1)))) (Semiring.toModule.{u1} R _inst_1) (Pi.module.{u2, u1, u1} n (fun (i : n) => R) R _inst_1 (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.48 : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.48 : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.48 : n) => R) i) _inst_1))) (fun (i : n) => Semiring.toModule.{u1} R _inst_1))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6190 : R) => n -> R) _x) (LinearMap.instFunLikeLinearMap.{u1, u1, u1, max u1 u2} R R R (n -> R) _inst_1 _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (Pi.addCommMonoid.{u2, u1} n (fun (i : n) => R) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1)))) (Semiring.toModule.{u1} R _inst_1) (Pi.module.{u2, u1, u1} n (fun (i : n) => R) R _inst_1 (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (fun (i : n) => Semiring.toModule.{u1} R _inst_1)) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (LinearMap.stdBasis.{u1, u2, u1} R n _inst_1 (fun (_x : n) => R) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (fun (i : n) => Semiring.toModule.{u1} R _inst_1) (fun (a : n) (b : n) => _inst_3 a b) i) c)) (HMul.hMul.{u1, u1, u1} R R R (instHMul.{u1} R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))) (v i) c)
+  forall {R : Type.{u1}} [n : Semiring.{u1} R] {_inst_1 : Type.{u2}} [_inst_2 : Fintype.{u2} _inst_1] [_inst_3 : DecidableEq.{succ u2} _inst_1] (v : _inst_1 -> R) (c : R) (i : _inst_1), Eq.{succ u1} R (Matrix.dotProduct.{u1, u2} _inst_1 R _inst_2 (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R n))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R n))) v (FunLike.coe.{max (succ u1) (succ u2), succ u1, max (succ u1) (succ u2)} (LinearMap.{u1, u1, u1, max u2 u1} R R n n (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R n)) R (_inst_1 -> R) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.48 : _inst_1) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.48 : _inst_1) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.48 : _inst_1) => R) i) n))) (Pi.addCommMonoid.{u2, u1} _inst_1 (fun (i : _inst_1) => R) (fun (i : _inst_1) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.48 : _inst_1) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.48 : _inst_1) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.48 : _inst_1) => R) i) n)))) (Semiring.toModule.{u1} R n) (Pi.module.{u2, u1, u1} _inst_1 (fun (i : _inst_1) => R) R n (fun (i : _inst_1) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.48 : _inst_1) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.48 : _inst_1) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.48 : _inst_1) => R) i) n))) (fun (i : _inst_1) => Semiring.toModule.{u1} R n))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6190 : R) => _inst_1 -> R) _x) (LinearMap.instFunLikeLinearMap.{u1, u1, u1, max u1 u2} R R R (_inst_1 -> R) n n (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : _inst_1) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : _inst_1) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : _inst_1) => R) i) n))) (Pi.addCommMonoid.{u2, u1} _inst_1 (fun (i : _inst_1) => R) (fun (i : _inst_1) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : _inst_1) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : _inst_1) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : _inst_1) => R) i) n)))) (Semiring.toModule.{u1} R n) (Pi.module.{u2, u1, u1} _inst_1 (fun (i : _inst_1) => R) R n (fun (i : _inst_1) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : _inst_1) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : _inst_1) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : _inst_1) => R) i) n))) (fun (i : _inst_1) => Semiring.toModule.{u1} R n)) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R n))) (LinearMap.stdBasis.{u1, u2, u1} R _inst_1 n (fun (_x : _inst_1) => R) (fun (i : _inst_1) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : _inst_1) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : _inst_1) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : _inst_1) => R) i) n))) (fun (i : _inst_1) => Semiring.toModule.{u1} R n) (fun (a : _inst_1) (b : _inst_1) => _inst_3 a b) i) c)) (HMul.hMul.{u1, u1, u1} R R R (instHMul.{u1} R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R n)))) (v i) c)
 Case conversion may be inaccurate. Consider using '#align matrix.dot_product_std_basis_eq_mul Matrix.dotProduct_stdBasis_eq_mulₓ'. -/
 @[simp]
 theorem dotProduct_stdBasis_eq_mul [DecidableEq n] (v : n → R) (c : R) (i : n) :
@@ -57,9 +61,9 @@ theorem dotProduct_stdBasis_eq_mul [DecidableEq n] (v : n → R) (c : R) (i : n)
 
 /- warning: matrix.dot_product_std_basis_one -> Matrix.dotProduct_stdBasis_one is a dubious translation:
 lean 3 declaration is
-  forall {R : Type.{u1}} [_inst_1 : Semiring.{u1} R] {n : Type.{u2}} [_inst_2 : Fintype.{u2} n] [_inst_3 : DecidableEq.{succ u2} n] (v : n -> R) (i : n), Eq.{succ u1} R (Matrix.dotProduct.{u1, u2} n R _inst_2 (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) v (coeFn.{max (succ u1) (succ (max u2 u1)), max (succ u1) (succ (max u2 u1))} (LinearMap.{u1, u1, u1, max u2 u1} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) ((fun (_x : n) => R) i) (forall (i : n), (fun (_x : n) => R) i) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (Pi.addCommMonoid.{u2, u1} n (fun (i : n) => (fun (_x : n) => R) i) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1)))) (Semiring.toModule.{u1} R _inst_1) (Pi.module.{u2, u1, u1} n (fun (i : n) => (fun (_x : n) => R) i) R _inst_1 (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (fun (i : n) => Semiring.toModule.{u1} R _inst_1))) (fun (_x : LinearMap.{u1, u1, u1, max u2 u1} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) ((fun (_x : n) => R) i) (forall (i : n), (fun (_x : n) => R) i) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (Pi.addCommMonoid.{u2, u1} n (fun (i : n) => (fun (_x : n) => R) i) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1)))) (Semiring.toModule.{u1} R _inst_1) (Pi.module.{u2, u1, u1} n (fun (i : n) => (fun (_x : n) => R) i) R _inst_1 (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (fun (i : n) => Semiring.toModule.{u1} R _inst_1))) => R -> (forall (i : n), (fun (_x : n) => R) i)) (LinearMap.hasCoeToFun.{u1, u1, u1, max u2 u1} R R ((fun (_x : n) => R) i) (forall (i : n), (fun (_x : n) => R) i) _inst_1 _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (Pi.addCommMonoid.{u2, u1} n (fun (i : n) => (fun (_x : n) => R) i) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1)))) (Semiring.toModule.{u1} R _inst_1) (Pi.module.{u2, u1, u1} n (fun (i : n) => (fun (_x : n) => R) i) R _inst_1 (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (fun (i : n) => Semiring.toModule.{u1} R _inst_1)) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (LinearMap.stdBasis.{u1, u2, u1} R n _inst_1 (fun (_x : n) => R) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (fun (i : n) => Semiring.toModule.{u1} R _inst_1) (fun (a : n) (b : n) => _inst_3 a b) i) (OfNat.ofNat.{u1} ((fun (_x : n) => R) i) 1 (OfNat.mk.{u1} ((fun (_x : n) => R) i) 1 (One.one.{u1} ((fun (_x : n) => R) i) (AddMonoidWithOne.toOne.{u1} ((fun (_x : n) => R) i) (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toAddCommMonoidWithOne.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))))))))) (v i)
+  forall {R : Type.{u1}} {n : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : Fintype.{u2} n] [_inst_3 : DecidableEq.{succ u2} n] (v : n -> R) (i : n), Eq.{succ u1} R (Matrix.dotProduct.{u1, u2} n R _inst_2 (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) v (coeFn.{max (succ u1) (succ (max u2 u1)), max (succ u1) (succ (max u2 u1))} (LinearMap.{u1, u1, u1, max u2 u1} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) ((fun (_x : n) => R) i) (forall (i : n), (fun (_x : n) => R) i) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (Pi.addCommMonoid.{u2, u1} n (fun (i : n) => (fun (_x : n) => R) i) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1)))) (Semiring.toModule.{u1} R _inst_1) (Pi.module.{u2, u1, u1} n (fun (i : n) => (fun (_x : n) => R) i) R _inst_1 (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (fun (i : n) => Semiring.toModule.{u1} R _inst_1))) (fun (_x : LinearMap.{u1, u1, u1, max u2 u1} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) ((fun (_x : n) => R) i) (forall (i : n), (fun (_x : n) => R) i) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (Pi.addCommMonoid.{u2, u1} n (fun (i : n) => (fun (_x : n) => R) i) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1)))) (Semiring.toModule.{u1} R _inst_1) (Pi.module.{u2, u1, u1} n (fun (i : n) => (fun (_x : n) => R) i) R _inst_1 (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (fun (i : n) => Semiring.toModule.{u1} R _inst_1))) => R -> (forall (i : n), (fun (_x : n) => R) i)) (LinearMap.hasCoeToFun.{u1, u1, u1, max u2 u1} R R ((fun (_x : n) => R) i) (forall (i : n), (fun (_x : n) => R) i) _inst_1 _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (Pi.addCommMonoid.{u2, u1} n (fun (i : n) => (fun (_x : n) => R) i) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1)))) (Semiring.toModule.{u1} R _inst_1) (Pi.module.{u2, u1, u1} n (fun (i : n) => (fun (_x : n) => R) i) R _inst_1 (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (fun (i : n) => Semiring.toModule.{u1} R _inst_1)) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (LinearMap.stdBasis.{u1, u2, u1} R n _inst_1 (fun (_x : n) => R) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (fun (i : n) => Semiring.toModule.{u1} R _inst_1) (fun (a : n) (b : n) => _inst_3 a b) i) (OfNat.ofNat.{u1} ((fun (_x : n) => R) i) 1 (OfNat.mk.{u1} ((fun (_x : n) => R) i) 1 (One.one.{u1} ((fun (_x : n) => R) i) (AddMonoidWithOne.toOne.{u1} ((fun (_x : n) => R) i) (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toAddCommMonoidWithOne.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))))))))) (v i)
 but is expected to have type
-  forall {R : Type.{u1}} [_inst_1 : Semiring.{u1} R] {n : Type.{u2}} [_inst_2 : Fintype.{u2} n] [_inst_3 : DecidableEq.{succ u2} n] (v : n -> R) (i : n), Eq.{succ u1} R (Matrix.dotProduct.{u1, u2} n R _inst_2 (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) v (FunLike.coe.{max (succ u1) (succ u2), succ u1, max (succ u1) (succ u2)} (LinearMap.{u1, u1, u1, max u2 u1} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) R (n -> R) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.175 : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.175 : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.175 : n) => R) i) _inst_1))) (Pi.addCommMonoid.{u2, u1} n (fun (i : n) => R) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.175 : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.175 : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.175 : n) => R) i) _inst_1)))) (Semiring.toModule.{u1} R _inst_1) (Pi.module.{u2, u1, u1} n (fun (i : n) => R) R _inst_1 (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.175 : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.175 : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.175 : n) => R) i) _inst_1))) (fun (i : n) => Semiring.toModule.{u1} R _inst_1))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6190 : R) => n -> R) _x) (LinearMap.instFunLikeLinearMap.{u1, u1, u1, max u1 u2} R R R (n -> R) _inst_1 _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (Pi.addCommMonoid.{u2, u1} n (fun (i : n) => R) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1)))) (Semiring.toModule.{u1} R _inst_1) (Pi.module.{u2, u1, u1} n (fun (i : n) => R) R _inst_1 (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (fun (i : n) => Semiring.toModule.{u1} R _inst_1)) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (LinearMap.stdBasis.{u1, u2, u1} R n _inst_1 (fun (_x : n) => R) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (fun (i : n) => Semiring.toModule.{u1} R _inst_1) (fun (a : n) (b : n) => _inst_3 a b) i) (OfNat.ofNat.{u1} R 1 (One.toOfNat1.{u1} R (Semiring.toOne.{u1} R _inst_1))))) (v i)
+  forall {R : Type.{u1}} [n : Semiring.{u1} R] {_inst_1 : Type.{u2}} [_inst_2 : Fintype.{u2} _inst_1] [_inst_3 : DecidableEq.{succ u2} _inst_1] (v : _inst_1 -> R) (i : _inst_1), Eq.{succ u1} R (Matrix.dotProduct.{u1, u2} _inst_1 R _inst_2 (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R n))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R n))) v (FunLike.coe.{max (succ u1) (succ u2), succ u1, max (succ u1) (succ u2)} (LinearMap.{u1, u1, u1, max u2 u1} R R n n (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R n)) R (_inst_1 -> R) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.175 : _inst_1) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.175 : _inst_1) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.175 : _inst_1) => R) i) n))) (Pi.addCommMonoid.{u2, u1} _inst_1 (fun (i : _inst_1) => R) (fun (i : _inst_1) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.175 : _inst_1) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.175 : _inst_1) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.175 : _inst_1) => R) i) n)))) (Semiring.toModule.{u1} R n) (Pi.module.{u2, u1, u1} _inst_1 (fun (i : _inst_1) => R) R n (fun (i : _inst_1) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.175 : _inst_1) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.175 : _inst_1) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.175 : _inst_1) => R) i) n))) (fun (i : _inst_1) => Semiring.toModule.{u1} R n))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6190 : R) => _inst_1 -> R) _x) (LinearMap.instFunLikeLinearMap.{u1, u1, u1, max u1 u2} R R R (_inst_1 -> R) n n (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : _inst_1) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : _inst_1) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : _inst_1) => R) i) n))) (Pi.addCommMonoid.{u2, u1} _inst_1 (fun (i : _inst_1) => R) (fun (i : _inst_1) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : _inst_1) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : _inst_1) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : _inst_1) => R) i) n)))) (Semiring.toModule.{u1} R n) (Pi.module.{u2, u1, u1} _inst_1 (fun (i : _inst_1) => R) R n (fun (i : _inst_1) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : _inst_1) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : _inst_1) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : _inst_1) => R) i) n))) (fun (i : _inst_1) => Semiring.toModule.{u1} R n)) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R n))) (LinearMap.stdBasis.{u1, u2, u1} R _inst_1 n (fun (_x : _inst_1) => R) (fun (i : _inst_1) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : _inst_1) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : _inst_1) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : _inst_1) => R) i) n))) (fun (i : _inst_1) => Semiring.toModule.{u1} R n) (fun (a : _inst_1) (b : _inst_1) => _inst_3 a b) i) (OfNat.ofNat.{u1} R 1 (One.toOfNat1.{u1} R (Semiring.toOne.{u1} R n))))) (v i)
 Case conversion may be inaccurate. Consider using '#align matrix.dot_product_std_basis_one Matrix.dotProduct_stdBasis_oneₓ'. -/
 @[simp]
 theorem dotProduct_stdBasis_one [DecidableEq n] (v : n → R) (i : n) :
@@ -69,9 +73,9 @@ theorem dotProduct_stdBasis_one [DecidableEq n] (v : n → R) (i : n) :
 
 /- warning: matrix.dot_product_eq -> Matrix.dotProduct_eq is a dubious translation:
 lean 3 declaration is
-  forall {R : Type.{u1}} [_inst_1 : Semiring.{u1} R] {n : Type.{u2}} [_inst_2 : Fintype.{u2} n] (v : n -> R) (w : n -> R), (forall (u : n -> R), Eq.{succ u1} R (Matrix.dotProduct.{u1, u2} n R _inst_2 (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) v u) (Matrix.dotProduct.{u1, u2} n R _inst_2 (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) w u)) -> (Eq.{max (succ u2) (succ u1)} (n -> R) v w)
+  forall {R : Type.{u1}} {n : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : Fintype.{u2} n] (v : n -> R) (w : n -> R), (forall (u : n -> R), Eq.{succ u1} R (Matrix.dotProduct.{u1, u2} n R _inst_2 (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) v u) (Matrix.dotProduct.{u1, u2} n R _inst_2 (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) w u)) -> (Eq.{max (succ u2) (succ u1)} (n -> R) v w)
 but is expected to have type
-  forall {R : Type.{u1}} [_inst_1 : Semiring.{u1} R] {n : Type.{u2}} [_inst_2 : Fintype.{u2} n] (v : n -> R) (w : n -> R), (forall (u : n -> R), Eq.{succ u1} R (Matrix.dotProduct.{u1, u2} n R _inst_2 (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) v u) (Matrix.dotProduct.{u1, u2} n R _inst_2 (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) w u)) -> (Eq.{max (succ u1) (succ u2)} (n -> R) v w)
+  forall {R : Type.{u1}} [n : Semiring.{u1} R] {_inst_1 : Type.{u2}} [_inst_2 : Fintype.{u2} _inst_1] (v : _inst_1 -> R) (w : _inst_1 -> R), (forall (u : _inst_1 -> R), Eq.{succ u1} R (Matrix.dotProduct.{u1, u2} _inst_1 R _inst_2 (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R n))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R n))) v u) (Matrix.dotProduct.{u1, u2} _inst_1 R _inst_2 (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R n))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R n))) w u)) -> (Eq.{max (succ u1) (succ u2)} (_inst_1 -> R) v w)
 Case conversion may be inaccurate. Consider using '#align matrix.dot_product_eq Matrix.dotProduct_eqₓ'. -/
 theorem dotProduct_eq (v w : n → R) (h : ∀ u, dotProduct v u = dotProduct w u) : v = w :=
   by
@@ -81,9 +85,9 @@ theorem dotProduct_eq (v w : n → R) (h : ∀ u, dotProduct v u = dotProduct w
 
 /- warning: matrix.dot_product_eq_iff -> Matrix.dotProduct_eq_iff is a dubious translation:
 lean 3 declaration is
-  forall {R : Type.{u1}} [_inst_1 : Semiring.{u1} R] {n : Type.{u2}} [_inst_2 : Fintype.{u2} n] {v : n -> R} {w : n -> R}, Iff (forall (u : n -> R), Eq.{succ u1} R (Matrix.dotProduct.{u1, u2} n R _inst_2 (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) v u) (Matrix.dotProduct.{u1, u2} n R _inst_2 (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) w u)) (Eq.{max (succ u2) (succ u1)} (n -> R) v w)
+  forall {R : Type.{u1}} {n : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : Fintype.{u2} n] {v : n -> R} {w : n -> R}, Iff (forall (u : n -> R), Eq.{succ u1} R (Matrix.dotProduct.{u1, u2} n R _inst_2 (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) v u) (Matrix.dotProduct.{u1, u2} n R _inst_2 (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) w u)) (Eq.{max (succ u2) (succ u1)} (n -> R) v w)
 but is expected to have type
-  forall {R : Type.{u1}} [_inst_1 : Semiring.{u1} R] {n : Type.{u2}} [_inst_2 : Fintype.{u2} n] {v : n -> R} {w : n -> R}, Iff (forall (u : n -> R), Eq.{succ u1} R (Matrix.dotProduct.{u1, u2} n R _inst_2 (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) v u) (Matrix.dotProduct.{u1, u2} n R _inst_2 (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) w u)) (Eq.{max (succ u1) (succ u2)} (n -> R) v w)
+  forall {R : Type.{u1}} [n : Semiring.{u1} R] {_inst_1 : Type.{u2}} [_inst_2 : Fintype.{u2} _inst_1] {v : _inst_1 -> R} {w : _inst_1 -> R}, Iff (forall (u : _inst_1 -> R), Eq.{succ u1} R (Matrix.dotProduct.{u1, u2} _inst_1 R _inst_2 (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R n))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R n))) v u) (Matrix.dotProduct.{u1, u2} _inst_1 R _inst_2 (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R n))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R n))) w u)) (Eq.{max (succ u1) (succ u2)} (_inst_1 -> R) v w)
 Case conversion may be inaccurate. Consider using '#align matrix.dot_product_eq_iff Matrix.dotProduct_eq_iffₓ'. -/
 theorem dotProduct_eq_iff {v w : n → R} : (∀ u, dotProduct v u = dotProduct w u) ↔ v = w :=
   ⟨fun h => dotProduct_eq v w h, fun h _ => h ▸ rfl⟩
@@ -91,9 +95,9 @@ theorem dotProduct_eq_iff {v w : n → R} : (∀ u, dotProduct v u = dotProduct
 
 /- warning: matrix.dot_product_eq_zero -> Matrix.dotProduct_eq_zero is a dubious translation:
 lean 3 declaration is
-  forall {R : Type.{u1}} [_inst_1 : Semiring.{u1} R] {n : Type.{u2}} [_inst_2 : Fintype.{u2} n] (v : n -> R), (forall (w : n -> R), Eq.{succ u1} R (Matrix.dotProduct.{u1, u2} n R _inst_2 (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) v w) (OfNat.ofNat.{u1} R 0 (OfNat.mk.{u1} R 0 (Zero.zero.{u1} R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))))))) -> (Eq.{max (succ u2) (succ u1)} (n -> R) v (OfNat.ofNat.{max u2 u1} (n -> R) 0 (OfNat.mk.{max u2 u1} (n -> R) 0 (Zero.zero.{max u2 u1} (n -> R) (Pi.instZero.{u2, u1} n (fun (ᾰ : n) => R) (fun (i : n) => MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))))))))
+  forall {R : Type.{u1}} {n : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : Fintype.{u2} n] (v : n -> R), (forall (w : n -> R), Eq.{succ u1} R (Matrix.dotProduct.{u1, u2} n R _inst_2 (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) v w) (OfNat.ofNat.{u1} R 0 (OfNat.mk.{u1} R 0 (Zero.zero.{u1} R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))))))) -> (Eq.{max (succ u2) (succ u1)} (n -> R) v (OfNat.ofNat.{max u2 u1} (n -> R) 0 (OfNat.mk.{max u2 u1} (n -> R) 0 (Zero.zero.{max u2 u1} (n -> R) (Pi.instZero.{u2, u1} n (fun (ᾰ : n) => R) (fun (i : n) => MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))))))))
 but is expected to have type
-  forall {R : Type.{u1}} [_inst_1 : Semiring.{u1} R] {n : Type.{u2}} [_inst_2 : Fintype.{u2} n] (v : n -> R), (forall (w : n -> R), Eq.{succ u1} R (Matrix.dotProduct.{u1, u2} n R _inst_2 (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) v w) (OfNat.ofNat.{u1} R 0 (Zero.toOfNat0.{u1} R (MonoidWithZero.toZero.{u1} R (Semiring.toMonoidWithZero.{u1} R _inst_1))))) -> (Eq.{max (succ u1) (succ u2)} (n -> R) v (OfNat.ofNat.{max u1 u2} (n -> R) 0 (Zero.toOfNat0.{max u1 u2} (n -> R) (Pi.instZero.{u2, u1} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.355 : n) => R) (fun (i : n) => MonoidWithZero.toZero.{u1} R (Semiring.toMonoidWithZero.{u1} R _inst_1))))))
+  forall {R : Type.{u1}} [n : Semiring.{u1} R] {_inst_1 : Type.{u2}} [_inst_2 : Fintype.{u2} _inst_1] (v : _inst_1 -> R), (forall (w : _inst_1 -> R), Eq.{succ u1} R (Matrix.dotProduct.{u1, u2} _inst_1 R _inst_2 (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R n))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R n))) v w) (OfNat.ofNat.{u1} R 0 (Zero.toOfNat0.{u1} R (MonoidWithZero.toZero.{u1} R (Semiring.toMonoidWithZero.{u1} R n))))) -> (Eq.{max (succ u1) (succ u2)} (_inst_1 -> R) v (OfNat.ofNat.{max u1 u2} (_inst_1 -> R) 0 (Zero.toOfNat0.{max u1 u2} (_inst_1 -> R) (Pi.instZero.{u2, u1} _inst_1 (fun (a._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.355 : _inst_1) => R) (fun (i : _inst_1) => MonoidWithZero.toZero.{u1} R (Semiring.toMonoidWithZero.{u1} R n))))))
 Case conversion may be inaccurate. Consider using '#align matrix.dot_product_eq_zero Matrix.dotProduct_eq_zeroₓ'. -/
 theorem dotProduct_eq_zero (v : n → R) (h : ∀ w, dotProduct v w = 0) : v = 0 :=
   dotProduct_eq _ _ fun u => (h u).symm ▸ (zero_dotProduct u).symm
@@ -101,13 +105,43 @@ theorem dotProduct_eq_zero (v : n → R) (h : ∀ w, dotProduct v w = 0) : v = 0
 
 /- warning: matrix.dot_product_eq_zero_iff -> Matrix.dotProduct_eq_zero_iff is a dubious translation:
 lean 3 declaration is
-  forall {R : Type.{u1}} [_inst_1 : Semiring.{u1} R] {n : Type.{u2}} [_inst_2 : Fintype.{u2} n] {v : n -> R}, Iff (forall (w : n -> R), Eq.{succ u1} R (Matrix.dotProduct.{u1, u2} n R _inst_2 (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) v w) (OfNat.ofNat.{u1} R 0 (OfNat.mk.{u1} R 0 (Zero.zero.{u1} R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))))))) (Eq.{max (succ u2) (succ u1)} (n -> R) v (OfNat.ofNat.{max u2 u1} (n -> R) 0 (OfNat.mk.{max u2 u1} (n -> R) 0 (Zero.zero.{max u2 u1} (n -> R) (Pi.instZero.{u2, u1} n (fun (ᾰ : n) => R) (fun (i : n) => MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))))))))
+  forall {R : Type.{u1}} {n : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : Fintype.{u2} n] {v : n -> R}, Iff (forall (w : n -> R), Eq.{succ u1} R (Matrix.dotProduct.{u1, u2} n R _inst_2 (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) v w) (OfNat.ofNat.{u1} R 0 (OfNat.mk.{u1} R 0 (Zero.zero.{u1} R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))))))) (Eq.{max (succ u2) (succ u1)} (n -> R) v (OfNat.ofNat.{max u2 u1} (n -> R) 0 (OfNat.mk.{max u2 u1} (n -> R) 0 (Zero.zero.{max u2 u1} (n -> R) (Pi.instZero.{u2, u1} n (fun (ᾰ : n) => R) (fun (i : n) => MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))))))))
 but is expected to have type
-  forall {R : Type.{u1}} [_inst_1 : Semiring.{u1} R] {n : Type.{u2}} [_inst_2 : Fintype.{u2} n] {v : n -> R}, Iff (forall (w : n -> R), Eq.{succ u1} R (Matrix.dotProduct.{u1, u2} n R _inst_2 (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) v w) (OfNat.ofNat.{u1} R 0 (Zero.toOfNat0.{u1} R (MonoidWithZero.toZero.{u1} R (Semiring.toMonoidWithZero.{u1} R _inst_1))))) (Eq.{max (succ u1) (succ u2)} (n -> R) v (OfNat.ofNat.{max u1 u2} (n -> R) 0 (Zero.toOfNat0.{max u1 u2} (n -> R) (Pi.instZero.{u2, u1} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.403 : n) => R) (fun (i : n) => MonoidWithZero.toZero.{u1} R (Semiring.toMonoidWithZero.{u1} R _inst_1))))))
+  forall {R : Type.{u1}} [n : Semiring.{u1} R] {_inst_1 : Type.{u2}} [_inst_2 : Fintype.{u2} _inst_1] {v : _inst_1 -> R}, Iff (forall (w : _inst_1 -> R), Eq.{succ u1} R (Matrix.dotProduct.{u1, u2} _inst_1 R _inst_2 (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R n))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R n))) v w) (OfNat.ofNat.{u1} R 0 (Zero.toOfNat0.{u1} R (MonoidWithZero.toZero.{u1} R (Semiring.toMonoidWithZero.{u1} R n))))) (Eq.{max (succ u1) (succ u2)} (_inst_1 -> R) v (OfNat.ofNat.{max u1 u2} (_inst_1 -> R) 0 (Zero.toOfNat0.{max u1 u2} (_inst_1 -> R) (Pi.instZero.{u2, u1} _inst_1 (fun (a._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.403 : _inst_1) => R) (fun (i : _inst_1) => MonoidWithZero.toZero.{u1} R (Semiring.toMonoidWithZero.{u1} R n))))))
 Case conversion may be inaccurate. Consider using '#align matrix.dot_product_eq_zero_iff Matrix.dotProduct_eq_zero_iffₓ'. -/
 theorem dotProduct_eq_zero_iff {v : n → R} : (∀ w, dotProduct v w = 0) ↔ v = 0 :=
   ⟨fun h => dotProduct_eq_zero v h, fun h w => h.symm ▸ zero_dotProduct w⟩
 #align matrix.dot_product_eq_zero_iff Matrix.dotProduct_eq_zero_iff
 
+end Semiring
+
+section Self
+
+variable [Fintype n]
+
+@[simp]
+theorem dotProduct_self_eq_zero [LinearOrderedRing R] {v : n → R} : dotProduct v v = 0 ↔ v = 0 :=
+  (Finset.sum_eq_zero_iff_of_nonneg fun i _ => mul_self_nonneg (v i)).trans <| by
+    simp [Function.funext_iff]
+#align matrix.dot_product_self_eq_zero Matrix.dotProduct_self_eq_zero
+
+/-- Note that this applies to `ℂ` via `complex.strict_ordered_comm_ring`. -/
+@[simp]
+theorem dotProduct_star_self_eq_zero [StrictOrderedRing R] [StarOrderedRing R] [NoZeroDivisors R]
+    {v : n → R} : dotProduct (star v) v = 0 ↔ v = 0 :=
+  (Finset.sum_eq_zero_iff_of_nonneg fun i _ => @star_mul_self_nonneg _ _ _ _ (v i)).trans <| by
+    simp [Function.funext_iff, mul_eq_zero]
+#align matrix.dot_product_star_self_eq_zero Matrix.dotProduct_star_self_eq_zero
+
+/-- Note that this applies to `ℂ` via `complex.strict_ordered_comm_ring`. -/
+@[simp]
+theorem dotProduct_self_star_eq_zero [StrictOrderedRing R] [StarOrderedRing R] [NoZeroDivisors R]
+    {v : n → R} : dotProduct v (star v) = 0 ↔ v = 0 :=
+  (Finset.sum_eq_zero_iff_of_nonneg fun i _ => @star_mul_self_nonneg' _ _ _ _ (v i)).trans <| by
+    simp [Function.funext_iff, mul_eq_zero]
+#align matrix.dot_product_self_star_eq_zero Matrix.dotProduct_self_star_eq_zero
+
+end Self
+
 end Matrix
 
Diff
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Johannes Hölzl, Patrick Massot, Casper Putz, Anne Baanen
 
 ! This file was ported from Lean 3 source module linear_algebra.matrix.dot_product
-! leanprover-community/mathlib commit 738c19f572805cff525a93aa4ffbdf232df05aa8
+! leanprover-community/mathlib commit 19cb3751e5e9b3d97adb51023949c50c13b5fdfd
 ! Please do not edit these lines, except to modify the commit id
 ! if you have ported upstream changes.
 -/
@@ -14,6 +14,9 @@ import Mathbin.LinearAlgebra.StdBasis
 /-!
 # Dot product of two vectors
 
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
 This file contains some results on the map `matrix.dot_product`, which maps two
 vectors `v w : n → R` to the sum of the entrywise products `v i * w i`.
 
Diff
@@ -37,6 +37,12 @@ namespace Matrix
 
 variable {R : Type v} [Semiring R] {n : Type w} [Fintype n]
 
+/- warning: matrix.dot_product_std_basis_eq_mul -> Matrix.dotProduct_stdBasis_eq_mul is a dubious translation:
+lean 3 declaration is
+  forall {R : Type.{u1}} [_inst_1 : Semiring.{u1} R] {n : Type.{u2}} [_inst_2 : Fintype.{u2} n] [_inst_3 : DecidableEq.{succ u2} n] (v : n -> R) (c : R) (i : n), Eq.{succ u1} R (Matrix.dotProduct.{u1, u2} n R _inst_2 (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) v (coeFn.{max (succ u1) (succ (max u2 u1)), max (succ u1) (succ (max u2 u1))} (LinearMap.{u1, u1, u1, max u2 u1} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) ((fun (_x : n) => R) i) (forall (i : n), (fun (_x : n) => R) i) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (Pi.addCommMonoid.{u2, u1} n (fun (i : n) => (fun (_x : n) => R) i) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1)))) (Semiring.toModule.{u1} R _inst_1) (Pi.module.{u2, u1, u1} n (fun (i : n) => (fun (_x : n) => R) i) R _inst_1 (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (fun (i : n) => Semiring.toModule.{u1} R _inst_1))) (fun (_x : LinearMap.{u1, u1, u1, max u2 u1} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) ((fun (_x : n) => R) i) (forall (i : n), (fun (_x : n) => R) i) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (Pi.addCommMonoid.{u2, u1} n (fun (i : n) => (fun (_x : n) => R) i) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1)))) (Semiring.toModule.{u1} R _inst_1) (Pi.module.{u2, u1, u1} n (fun (i : n) => (fun (_x : n) => R) i) R _inst_1 (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (fun (i : n) => Semiring.toModule.{u1} R _inst_1))) => R -> (forall (i : n), (fun (_x : n) => R) i)) (LinearMap.hasCoeToFun.{u1, u1, u1, max u2 u1} R R ((fun (_x : n) => R) i) (forall (i : n), (fun (_x : n) => R) i) _inst_1 _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (Pi.addCommMonoid.{u2, u1} n (fun (i : n) => (fun (_x : n) => R) i) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1)))) (Semiring.toModule.{u1} R _inst_1) (Pi.module.{u2, u1, u1} n (fun (i : n) => (fun (_x : n) => R) i) R _inst_1 (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (fun (i : n) => Semiring.toModule.{u1} R _inst_1)) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (LinearMap.stdBasis.{u1, u2, u1} R n _inst_1 (fun (_x : n) => R) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (fun (i : n) => Semiring.toModule.{u1} R _inst_1) (fun (a : n) (b : n) => _inst_3 a b) i) c)) (HMul.hMul.{u1, u1, u1} R R R (instHMul.{u1} R (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))))) (v i) c)
+but is expected to have type
+  forall {R : Type.{u1}} [_inst_1 : Semiring.{u1} R] {n : Type.{u2}} [_inst_2 : Fintype.{u2} n] [_inst_3 : DecidableEq.{succ u2} n] (v : n -> R) (c : R) (i : n), Eq.{succ u1} R (Matrix.dotProduct.{u1, u2} n R _inst_2 (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) v (FunLike.coe.{max (succ u1) (succ u2), succ u1, max (succ u1) (succ u2)} (LinearMap.{u1, u1, u1, max u2 u1} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) R (n -> R) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.48 : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.48 : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.48 : n) => R) i) _inst_1))) (Pi.addCommMonoid.{u2, u1} n (fun (i : n) => R) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.48 : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.48 : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.48 : n) => R) i) _inst_1)))) (Semiring.toModule.{u1} R _inst_1) (Pi.module.{u2, u1, u1} n (fun (i : n) => R) R _inst_1 (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.48 : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.48 : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.48 : n) => R) i) _inst_1))) (fun (i : n) => Semiring.toModule.{u1} R _inst_1))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6190 : R) => n -> R) _x) (LinearMap.instFunLikeLinearMap.{u1, u1, u1, max u1 u2} R R R (n -> R) _inst_1 _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (Pi.addCommMonoid.{u2, u1} n (fun (i : n) => R) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1)))) (Semiring.toModule.{u1} R _inst_1) (Pi.module.{u2, u1, u1} n (fun (i : n) => R) R _inst_1 (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (fun (i : n) => Semiring.toModule.{u1} R _inst_1)) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (LinearMap.stdBasis.{u1, u2, u1} R n _inst_1 (fun (_x : n) => R) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (fun (i : n) => Semiring.toModule.{u1} R _inst_1) (fun (a : n) (b : n) => _inst_3 a b) i) c)) (HMul.hMul.{u1, u1, u1} R R R (instHMul.{u1} R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))) (v i) c)
+Case conversion may be inaccurate. Consider using '#align matrix.dot_product_std_basis_eq_mul Matrix.dotProduct_stdBasis_eq_mulₓ'. -/
 @[simp]
 theorem dotProduct_stdBasis_eq_mul [DecidableEq n] (v : n → R) (c : R) (i : n) :
     dotProduct v (LinearMap.stdBasis R (fun _ => R) i c) = v i * c :=
@@ -46,26 +52,56 @@ theorem dotProduct_stdBasis_eq_mul [DecidableEq n] (v : n → R) (c : R) (i : n)
   exact fun hi => False.elim (hi <| Finset.mem_univ _)
 #align matrix.dot_product_std_basis_eq_mul Matrix.dotProduct_stdBasis_eq_mul
 
+/- warning: matrix.dot_product_std_basis_one -> Matrix.dotProduct_stdBasis_one is a dubious translation:
+lean 3 declaration is
+  forall {R : Type.{u1}} [_inst_1 : Semiring.{u1} R] {n : Type.{u2}} [_inst_2 : Fintype.{u2} n] [_inst_3 : DecidableEq.{succ u2} n] (v : n -> R) (i : n), Eq.{succ u1} R (Matrix.dotProduct.{u1, u2} n R _inst_2 (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) v (coeFn.{max (succ u1) (succ (max u2 u1)), max (succ u1) (succ (max u2 u1))} (LinearMap.{u1, u1, u1, max u2 u1} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) ((fun (_x : n) => R) i) (forall (i : n), (fun (_x : n) => R) i) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (Pi.addCommMonoid.{u2, u1} n (fun (i : n) => (fun (_x : n) => R) i) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1)))) (Semiring.toModule.{u1} R _inst_1) (Pi.module.{u2, u1, u1} n (fun (i : n) => (fun (_x : n) => R) i) R _inst_1 (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (fun (i : n) => Semiring.toModule.{u1} R _inst_1))) (fun (_x : LinearMap.{u1, u1, u1, max u2 u1} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) ((fun (_x : n) => R) i) (forall (i : n), (fun (_x : n) => R) i) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (Pi.addCommMonoid.{u2, u1} n (fun (i : n) => (fun (_x : n) => R) i) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1)))) (Semiring.toModule.{u1} R _inst_1) (Pi.module.{u2, u1, u1} n (fun (i : n) => (fun (_x : n) => R) i) R _inst_1 (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (fun (i : n) => Semiring.toModule.{u1} R _inst_1))) => R -> (forall (i : n), (fun (_x : n) => R) i)) (LinearMap.hasCoeToFun.{u1, u1, u1, max u2 u1} R R ((fun (_x : n) => R) i) (forall (i : n), (fun (_x : n) => R) i) _inst_1 _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (Pi.addCommMonoid.{u2, u1} n (fun (i : n) => (fun (_x : n) => R) i) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1)))) (Semiring.toModule.{u1} R _inst_1) (Pi.module.{u2, u1, u1} n (fun (i : n) => (fun (_x : n) => R) i) R _inst_1 (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (fun (i : n) => Semiring.toModule.{u1} R _inst_1)) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (LinearMap.stdBasis.{u1, u2, u1} R n _inst_1 (fun (_x : n) => R) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (fun (i : n) => Semiring.toModule.{u1} R _inst_1) (fun (a : n) (b : n) => _inst_3 a b) i) (OfNat.ofNat.{u1} ((fun (_x : n) => R) i) 1 (OfNat.mk.{u1} ((fun (_x : n) => R) i) 1 (One.one.{u1} ((fun (_x : n) => R) i) (AddMonoidWithOne.toOne.{u1} ((fun (_x : n) => R) i) (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toAddCommMonoidWithOne.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))))))))) (v i)
+but is expected to have type
+  forall {R : Type.{u1}} [_inst_1 : Semiring.{u1} R] {n : Type.{u2}} [_inst_2 : Fintype.{u2} n] [_inst_3 : DecidableEq.{succ u2} n] (v : n -> R) (i : n), Eq.{succ u1} R (Matrix.dotProduct.{u1, u2} n R _inst_2 (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) v (FunLike.coe.{max (succ u1) (succ u2), succ u1, max (succ u1) (succ u2)} (LinearMap.{u1, u1, u1, max u2 u1} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) R (n -> R) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.175 : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.175 : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.175 : n) => R) i) _inst_1))) (Pi.addCommMonoid.{u2, u1} n (fun (i : n) => R) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.175 : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.175 : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.175 : n) => R) i) _inst_1)))) (Semiring.toModule.{u1} R _inst_1) (Pi.module.{u2, u1, u1} n (fun (i : n) => R) R _inst_1 (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.175 : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.175 : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (x._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.175 : n) => R) i) _inst_1))) (fun (i : n) => Semiring.toModule.{u1} R _inst_1))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6190 : R) => n -> R) _x) (LinearMap.instFunLikeLinearMap.{u1, u1, u1, max u1 u2} R R R (n -> R) _inst_1 _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (Pi.addCommMonoid.{u2, u1} n (fun (i : n) => R) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1)))) (Semiring.toModule.{u1} R _inst_1) (Pi.module.{u2, u1, u1} n (fun (i : n) => R) R _inst_1 (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (fun (i : n) => Semiring.toModule.{u1} R _inst_1)) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (LinearMap.stdBasis.{u1, u2, u1} R n _inst_1 (fun (_x : n) => R) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} ((fun (_x : n) => R) i) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} ((fun (_x : n) => R) i) (Semiring.toNonAssocSemiring.{u1} ((fun (_x : n) => R) i) _inst_1))) (fun (i : n) => Semiring.toModule.{u1} R _inst_1) (fun (a : n) (b : n) => _inst_3 a b) i) (OfNat.ofNat.{u1} R 1 (One.toOfNat1.{u1} R (Semiring.toOne.{u1} R _inst_1))))) (v i)
+Case conversion may be inaccurate. Consider using '#align matrix.dot_product_std_basis_one Matrix.dotProduct_stdBasis_oneₓ'. -/
 @[simp]
 theorem dotProduct_stdBasis_one [DecidableEq n] (v : n → R) (i : n) :
     dotProduct v (LinearMap.stdBasis R (fun _ => R) i 1) = v i := by
   rw [dot_product_std_basis_eq_mul, mul_one]
 #align matrix.dot_product_std_basis_one Matrix.dotProduct_stdBasis_one
 
+/- warning: matrix.dot_product_eq -> Matrix.dotProduct_eq is a dubious translation:
+lean 3 declaration is
+  forall {R : Type.{u1}} [_inst_1 : Semiring.{u1} R] {n : Type.{u2}} [_inst_2 : Fintype.{u2} n] (v : n -> R) (w : n -> R), (forall (u : n -> R), Eq.{succ u1} R (Matrix.dotProduct.{u1, u2} n R _inst_2 (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) v u) (Matrix.dotProduct.{u1, u2} n R _inst_2 (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) w u)) -> (Eq.{max (succ u2) (succ u1)} (n -> R) v w)
+but is expected to have type
+  forall {R : Type.{u1}} [_inst_1 : Semiring.{u1} R] {n : Type.{u2}} [_inst_2 : Fintype.{u2} n] (v : n -> R) (w : n -> R), (forall (u : n -> R), Eq.{succ u1} R (Matrix.dotProduct.{u1, u2} n R _inst_2 (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) v u) (Matrix.dotProduct.{u1, u2} n R _inst_2 (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) w u)) -> (Eq.{max (succ u1) (succ u2)} (n -> R) v w)
+Case conversion may be inaccurate. Consider using '#align matrix.dot_product_eq Matrix.dotProduct_eqₓ'. -/
 theorem dotProduct_eq (v w : n → R) (h : ∀ u, dotProduct v u = dotProduct w u) : v = w :=
   by
   funext x
   classical rw [← dot_product_std_basis_one v x, ← dot_product_std_basis_one w x, h]
 #align matrix.dot_product_eq Matrix.dotProduct_eq
 
+/- warning: matrix.dot_product_eq_iff -> Matrix.dotProduct_eq_iff is a dubious translation:
+lean 3 declaration is
+  forall {R : Type.{u1}} [_inst_1 : Semiring.{u1} R] {n : Type.{u2}} [_inst_2 : Fintype.{u2} n] {v : n -> R} {w : n -> R}, Iff (forall (u : n -> R), Eq.{succ u1} R (Matrix.dotProduct.{u1, u2} n R _inst_2 (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) v u) (Matrix.dotProduct.{u1, u2} n R _inst_2 (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) w u)) (Eq.{max (succ u2) (succ u1)} (n -> R) v w)
+but is expected to have type
+  forall {R : Type.{u1}} [_inst_1 : Semiring.{u1} R] {n : Type.{u2}} [_inst_2 : Fintype.{u2} n] {v : n -> R} {w : n -> R}, Iff (forall (u : n -> R), Eq.{succ u1} R (Matrix.dotProduct.{u1, u2} n R _inst_2 (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) v u) (Matrix.dotProduct.{u1, u2} n R _inst_2 (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) w u)) (Eq.{max (succ u1) (succ u2)} (n -> R) v w)
+Case conversion may be inaccurate. Consider using '#align matrix.dot_product_eq_iff Matrix.dotProduct_eq_iffₓ'. -/
 theorem dotProduct_eq_iff {v w : n → R} : (∀ u, dotProduct v u = dotProduct w u) ↔ v = w :=
   ⟨fun h => dotProduct_eq v w h, fun h _ => h ▸ rfl⟩
 #align matrix.dot_product_eq_iff Matrix.dotProduct_eq_iff
 
+/- warning: matrix.dot_product_eq_zero -> Matrix.dotProduct_eq_zero is a dubious translation:
+lean 3 declaration is
+  forall {R : Type.{u1}} [_inst_1 : Semiring.{u1} R] {n : Type.{u2}} [_inst_2 : Fintype.{u2} n] (v : n -> R), (forall (w : n -> R), Eq.{succ u1} R (Matrix.dotProduct.{u1, u2} n R _inst_2 (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) v w) (OfNat.ofNat.{u1} R 0 (OfNat.mk.{u1} R 0 (Zero.zero.{u1} R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))))))) -> (Eq.{max (succ u2) (succ u1)} (n -> R) v (OfNat.ofNat.{max u2 u1} (n -> R) 0 (OfNat.mk.{max u2 u1} (n -> R) 0 (Zero.zero.{max u2 u1} (n -> R) (Pi.instZero.{u2, u1} n (fun (ᾰ : n) => R) (fun (i : n) => MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))))))))
+but is expected to have type
+  forall {R : Type.{u1}} [_inst_1 : Semiring.{u1} R] {n : Type.{u2}} [_inst_2 : Fintype.{u2} n] (v : n -> R), (forall (w : n -> R), Eq.{succ u1} R (Matrix.dotProduct.{u1, u2} n R _inst_2 (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) v w) (OfNat.ofNat.{u1} R 0 (Zero.toOfNat0.{u1} R (MonoidWithZero.toZero.{u1} R (Semiring.toMonoidWithZero.{u1} R _inst_1))))) -> (Eq.{max (succ u1) (succ u2)} (n -> R) v (OfNat.ofNat.{max u1 u2} (n -> R) 0 (Zero.toOfNat0.{max u1 u2} (n -> R) (Pi.instZero.{u2, u1} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.355 : n) => R) (fun (i : n) => MonoidWithZero.toZero.{u1} R (Semiring.toMonoidWithZero.{u1} R _inst_1))))))
+Case conversion may be inaccurate. Consider using '#align matrix.dot_product_eq_zero Matrix.dotProduct_eq_zeroₓ'. -/
 theorem dotProduct_eq_zero (v : n → R) (h : ∀ w, dotProduct v w = 0) : v = 0 :=
   dotProduct_eq _ _ fun u => (h u).symm ▸ (zero_dotProduct u).symm
 #align matrix.dot_product_eq_zero Matrix.dotProduct_eq_zero
 
+/- warning: matrix.dot_product_eq_zero_iff -> Matrix.dotProduct_eq_zero_iff is a dubious translation:
+lean 3 declaration is
+  forall {R : Type.{u1}} [_inst_1 : Semiring.{u1} R] {n : Type.{u2}} [_inst_2 : Fintype.{u2} n] {v : n -> R}, Iff (forall (w : n -> R), Eq.{succ u1} R (Matrix.dotProduct.{u1, u2} n R _inst_2 (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) v w) (OfNat.ofNat.{u1} R 0 (OfNat.mk.{u1} R 0 (Zero.zero.{u1} R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))))))) (Eq.{max (succ u2) (succ u1)} (n -> R) v (OfNat.ofNat.{max u2 u1} (n -> R) 0 (OfNat.mk.{max u2 u1} (n -> R) 0 (Zero.zero.{max u2 u1} (n -> R) (Pi.instZero.{u2, u1} n (fun (ᾰ : n) => R) (fun (i : n) => MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))))))))
+but is expected to have type
+  forall {R : Type.{u1}} [_inst_1 : Semiring.{u1} R] {n : Type.{u2}} [_inst_2 : Fintype.{u2} n] {v : n -> R}, Iff (forall (w : n -> R), Eq.{succ u1} R (Matrix.dotProduct.{u1, u2} n R _inst_2 (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) v w) (OfNat.ofNat.{u1} R 0 (Zero.toOfNat0.{u1} R (MonoidWithZero.toZero.{u1} R (Semiring.toMonoidWithZero.{u1} R _inst_1))))) (Eq.{max (succ u1) (succ u2)} (n -> R) v (OfNat.ofNat.{max u1 u2} (n -> R) 0 (Zero.toOfNat0.{max u1 u2} (n -> R) (Pi.instZero.{u2, u1} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.DotProduct._hyg.403 : n) => R) (fun (i : n) => MonoidWithZero.toZero.{u1} R (Semiring.toMonoidWithZero.{u1} R _inst_1))))))
+Case conversion may be inaccurate. Consider using '#align matrix.dot_product_eq_zero_iff Matrix.dotProduct_eq_zero_iffₓ'. -/
 theorem dotProduct_eq_zero_iff {v : n → R} : (∀ w, dotProduct v w = 0) ↔ v = 0 :=
   ⟨fun h => dotProduct_eq_zero v h, fun h w => h.symm ▸ zero_dotProduct w⟩
 #align matrix.dot_product_eq_zero_iff Matrix.dotProduct_eq_zero_iff
Diff
@@ -42,7 +42,7 @@ theorem dotProduct_stdBasis_eq_mul [DecidableEq n] (v : n → R) (c : R) (i : n)
     dotProduct v (LinearMap.stdBasis R (fun _ => R) i c) = v i * c :=
   by
   rw [dot_product, Finset.sum_eq_single i, LinearMap.stdBasis_same]
-  exact fun _ _ hb => by rw [LinearMap.stdBasis_ne _ _ _ _ hb, mul_zero]
+  exact fun _ _ hb => by rw [LinearMap.stdBasis_ne _ _ _ _ hb, MulZeroClass.mul_zero]
   exact fun hi => False.elim (hi <| Finset.mem_univ _)
 #align matrix.dot_product_std_basis_eq_mul Matrix.dotProduct_stdBasis_eq_mul
 

Changes in mathlib4

mathlib3
mathlib4
chore: adapt to multiple goal linter 3 (#12372)

A PR analogous to #12338 and #12361: reformatting proofs following the multiple goals linter of #12339.

Diff
@@ -41,8 +41,8 @@ variable [Semiring R] [Fintype n]
 theorem dotProduct_stdBasis_eq_mul [DecidableEq n] (v : n → R) (c : R) (i : n) :
     dotProduct v (LinearMap.stdBasis R (fun _ => R) i c) = v i * c := by
   rw [dotProduct, Finset.sum_eq_single i, LinearMap.stdBasis_same]
-  exact fun _ _ hb => by rw [LinearMap.stdBasis_ne _ _ _ _ hb, mul_zero]
-  exact fun hi => False.elim (hi <| Finset.mem_univ _)
+  · exact fun _ _ hb => by rw [LinearMap.stdBasis_ne _ _ _ _ hb, mul_zero]
+  · exact fun hi => False.elim (hi <| Finset.mem_univ _)
 #align matrix.dot_product_std_basis_eq_mul Matrix.dotProduct_stdBasis_eq_mul
 
 -- @[simp] -- Porting note (#10618): simp can prove this
feat: make StarOrderedRing a mixin (#11872)

This makes StarOrderedRing take StarRing as a parameter instead of extending it, and as a result moves the typeclass to Prop. It was already a mixin with respect to the order and algebraic structure. There are two primary motivations:

  1. This makes it possible to directly assume that C(α, R) is a StarOrderedRing with [StarOrderedRing C(α, R)], as currently there is no typeclass on R which would naturally guarantee this property. This is relevant as we want this type class on continuous functions for the continuous functional calculus.
  2. We will eventually want a StarOrderedRing instance on C(α, A) where A is a complex (or even real) C⋆-algebra, and making this a mixin avoids loops with StarRing.
Diff
@@ -99,19 +99,19 @@ theorem dotProduct_self_eq_zero [LinearOrderedRing R] {v : n → R} : dotProduct
 
 section StarOrderedRing
 
-variable [PartialOrder R] [NonUnitalRing R] [StarOrderedRing R] [NoZeroDivisors R]
+variable [PartialOrder R] [NonUnitalRing R] [StarRing R] [StarOrderedRing R] [NoZeroDivisors R]
 
 /-- Note that this applies to `ℂ` via `Complex.strictOrderedCommRing`. -/
 @[simp]
 theorem dotProduct_star_self_eq_zero {v : n → R} : dotProduct (star v) v = 0 ↔ v = 0 :=
-  (Finset.sum_eq_zero_iff_of_nonneg fun i _ => (@star_mul_self_nonneg _ _ _ _ (v i) : _)).trans <|
+  (Finset.sum_eq_zero_iff_of_nonneg fun i _ => (star_mul_self_nonneg (r := v i) : _)).trans <|
     by simp [Function.funext_iff, mul_eq_zero]
 #align matrix.dot_product_star_self_eq_zero Matrix.dotProduct_star_self_eq_zero
 
 /-- Note that this applies to `ℂ` via `Complex.strictOrderedCommRing`. -/
 @[simp]
 theorem dotProduct_self_star_eq_zero {v : n → R} : dotProduct v (star v) = 0 ↔ v = 0 :=
-  (Finset.sum_eq_zero_iff_of_nonneg fun i _ => (@mul_star_self_nonneg _ _ _ _ (v i) : _)).trans <|
+  (Finset.sum_eq_zero_iff_of_nonneg fun i _ => (mul_star_self_nonneg (r := v i) : _)).trans <|
     by simp [Function.funext_iff, mul_eq_zero]
 #align matrix.dot_product_self_star_eq_zero Matrix.dotProduct_self_star_eq_zero
 
chore: classify simp can do this porting notes (#10619)

Classify by adding issue number (#10618) to porting notes claiming anything semantically equivalent to simp can prove this or simp can simplify this.

Diff
@@ -45,7 +45,7 @@ theorem dotProduct_stdBasis_eq_mul [DecidableEq n] (v : n → R) (c : R) (i : n)
   exact fun hi => False.elim (hi <| Finset.mem_univ _)
 #align matrix.dot_product_std_basis_eq_mul Matrix.dotProduct_stdBasis_eq_mul
 
--- @[simp] -- Porting note: simp can prove this
+-- @[simp] -- Porting note (#10618): simp can prove this
 theorem dotProduct_stdBasis_one [DecidableEq n] (v : n → R) (i : n) :
     dotProduct v (LinearMap.stdBasis R (fun _ => R) i 1) = v i := by
   rw [dotProduct_stdBasis_eq_mul, mul_one]
chore: Matrix.mulVec and Matrix.vecMul get infix notation (#10297)

Zulip discussion: https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/Notation.20for.20mul_vec.20and.20vec_mul

Co-authored-by: Martin Dvorak <mdvorak@ista.ac.at>

Diff
@@ -148,21 +148,21 @@ lemma mul_conjTranspose_mul_self_eq_zero (A : Matrix m n R) (B : Matrix p n R) :
   simpa only [conjTranspose_conjTranspose] using mul_self_mul_conjTranspose_eq_zero Aᴴ _
 
 lemma conjTranspose_mul_self_mulVec_eq_zero (A : Matrix m n R) (v : n → R) :
-    (Aᴴ * A).mulVec v = 0 ↔ A.mulVec v = 0 := by
+    (Aᴴ * A) *ᵥ v = 0 ↔ A *ᵥ v = 0 := by
   simpa only [← Matrix.col_mulVec, col_eq_zero] using
     conjTranspose_mul_self_mul_eq_zero A (col v)
 
 lemma self_mul_conjTranspose_mulVec_eq_zero (A : Matrix m n R) (v : m → R) :
-    (A * Aᴴ).mulVec v = 0 ↔ Aᴴ.mulVec v = 0 := by
+    (A * Aᴴ) *ᵥ v = 0 ↔ Aᴴ *ᵥ v = 0 := by
   simpa only [conjTranspose_conjTranspose] using conjTranspose_mul_self_mulVec_eq_zero Aᴴ _
 
 lemma vecMul_conjTranspose_mul_self_eq_zero (A : Matrix m n R) (v : n → R) :
-    vecMul v (Aᴴ * A) = 0 ↔ vecMul v Aᴴ = 0 := by
+    v ᵥ* (Aᴴ * A) = 0 ↔ v ᵥ* Aᴴ = 0 := by
   simpa only [← Matrix.row_vecMul, row_eq_zero] using
     mul_conjTranspose_mul_self_eq_zero A (row v)
 
 lemma vecMul_self_mul_conjTranspose_eq_zero (A : Matrix m n R) (v : m → R) :
-    vecMul v (A * Aᴴ) = 0 ↔ vecMul v A = 0 := by
+    v ᵥ* (A * Aᴴ) = 0 ↔ v ᵥ* A = 0 := by
   simpa only [conjTranspose_conjTranspose] using vecMul_conjTranspose_mul_self_eq_zero Aᴴ _
 
 end StarOrderedRing
Matrix.dotProduct inequalities (#9652)
Diff
@@ -70,6 +70,23 @@ theorem dotProduct_eq_zero_iff {v : n → R} : (∀ w, dotProduct v w = 0) ↔ v
 
 end Semiring
 
+section OrderedSemiring
+
+variable [OrderedSemiring R] [Fintype n]
+
+lemma dotProduct_nonneg_of_nonneg {v w : n → R} (hv : 0 ≤ v) (hw : 0 ≤ w) : 0 ≤ dotProduct v w :=
+  Finset.sum_nonneg (fun i _ => mul_nonneg (hv i) (hw i))
+
+lemma dotProduct_le_dotProduct_of_nonneg_right {u v w : n → R} (huv : u ≤ v) (hw : 0 ≤ w) :
+    dotProduct u w ≤ dotProduct v w :=
+  Finset.sum_le_sum (fun i _ => mul_le_mul_of_nonneg_right (huv i) (hw i))
+
+lemma dotProduct_le_dotProduct_of_nonneg_left {u v w : n → R} (huv : u ≤ v) (hw : 0 ≤ w) :
+    dotProduct w u ≤ dotProduct w v :=
+  Finset.sum_le_sum (fun i _ => mul_le_mul_of_nonneg_left (huv i) (hw i))
+
+end OrderedSemiring
+
 section Self
 
 variable [Fintype m] [Fintype n] [Fintype p]
chore: rename star_mul_self_nonneg' (#8305)
Diff
@@ -94,7 +94,7 @@ theorem dotProduct_star_self_eq_zero {v : n → R} : dotProduct (star v) v = 0 
 /-- Note that this applies to `ℂ` via `Complex.strictOrderedCommRing`. -/
 @[simp]
 theorem dotProduct_self_star_eq_zero {v : n → R} : dotProduct v (star v) = 0 ↔ v = 0 :=
-  (Finset.sum_eq_zero_iff_of_nonneg fun i _ => (@star_mul_self_nonneg' _ _ _ _ (v i) : _)).trans <|
+  (Finset.sum_eq_zero_iff_of_nonneg fun i _ => (@mul_star_self_nonneg _ _ _ _ (v i) : _)).trans <|
     by simp [Function.funext_iff, mul_eq_zero]
 #align matrix.dot_product_self_star_eq_zero Matrix.dotProduct_self_star_eq_zero
 
chore: drop MulZeroClass. in mul_zero/zero_mul (#6682)

Search&replace MulZeroClass.mul_zero -> mul_zero, MulZeroClass.zero_mul -> zero_mul.

These were introduced by Mathport, as the full name of mul_zero is actually MulZeroClass.mul_zero (it's exported with the short name).

Diff
@@ -41,7 +41,7 @@ variable [Semiring R] [Fintype n]
 theorem dotProduct_stdBasis_eq_mul [DecidableEq n] (v : n → R) (c : R) (i : n) :
     dotProduct v (LinearMap.stdBasis R (fun _ => R) i c) = v i * c := by
   rw [dotProduct, Finset.sum_eq_single i, LinearMap.stdBasis_same]
-  exact fun _ _ hb => by rw [LinearMap.stdBasis_ne _ _ _ _ hb, MulZeroClass.mul_zero]
+  exact fun _ _ hb => by rw [LinearMap.stdBasis_ne _ _ _ _ hb, mul_zero]
   exact fun hi => False.elim (hi <| Finset.mem_univ _)
 #align matrix.dot_product_std_basis_eq_mul Matrix.dotProduct_stdBasis_eq_mul
 
feat: star self dot product eq zero and kernel lemmas apply to matrices not just vectors (#6587)

This generalizes two results about vectors to matrices:

  • dotProduct_star_self_eq_zero to conjTranspose_mul_self_eq_zero
  • dotProduct_self_star_eq_zero to self_mul_conjTranspose_eq_zero

It also adds lemmas linking the kernel (under left-multiplication, right-multiplication, vecMul, and mulVec) of $A$, $A^HA$, and $AA^H$.

Some of these lemmas are used in the SVD decomposition theorem of R or C matrices #6042

Co-authored-by: Eric Wieser <wieser.eric@gmail.com>

Diff
@@ -29,9 +29,7 @@ matrix, reindex
 -/
 
 
-universe v w
-
-variable {R : Type v} {n : Type w}
+variable {m n p R : Type*}
 
 namespace Matrix
 
@@ -74,7 +72,7 @@ end Semiring
 
 section Self
 
-variable [Fintype n]
+variable [Fintype m] [Fintype n] [Fintype p]
 
 @[simp]
 theorem dotProduct_self_eq_zero [LinearOrderedRing R] {v : n → R} : dotProduct v v = 0 ↔ v = 0 :=
@@ -82,22 +80,76 @@ theorem dotProduct_self_eq_zero [LinearOrderedRing R] {v : n → R} : dotProduct
     simp [Function.funext_iff]
 #align matrix.dot_product_self_eq_zero Matrix.dotProduct_self_eq_zero
 
+section StarOrderedRing
+
+variable [PartialOrder R] [NonUnitalRing R] [StarOrderedRing R] [NoZeroDivisors R]
+
 /-- Note that this applies to `ℂ` via `Complex.strictOrderedCommRing`. -/
 @[simp]
-theorem dotProduct_star_self_eq_zero [PartialOrder R] [NonUnitalRing R] [StarOrderedRing R]
-    [NoZeroDivisors R] {v : n → R} : dotProduct (star v) v = 0 ↔ v = 0 :=
+theorem dotProduct_star_self_eq_zero {v : n → R} : dotProduct (star v) v = 0 ↔ v = 0 :=
   (Finset.sum_eq_zero_iff_of_nonneg fun i _ => (@star_mul_self_nonneg _ _ _ _ (v i) : _)).trans <|
     by simp [Function.funext_iff, mul_eq_zero]
 #align matrix.dot_product_star_self_eq_zero Matrix.dotProduct_star_self_eq_zero
 
 /-- Note that this applies to `ℂ` via `Complex.strictOrderedCommRing`. -/
 @[simp]
-theorem dotProduct_self_star_eq_zero [PartialOrder R] [NonUnitalRing R] [StarOrderedRing R]
-    [NoZeroDivisors R] {v : n → R} : dotProduct v (star v) = 0 ↔ v = 0 :=
+theorem dotProduct_self_star_eq_zero {v : n → R} : dotProduct v (star v) = 0 ↔ v = 0 :=
   (Finset.sum_eq_zero_iff_of_nonneg fun i _ => (@star_mul_self_nonneg' _ _ _ _ (v i) : _)).trans <|
     by simp [Function.funext_iff, mul_eq_zero]
 #align matrix.dot_product_self_star_eq_zero Matrix.dotProduct_self_star_eq_zero
 
+@[simp]
+lemma conjTranspose_mul_self_eq_zero {A : Matrix m n R} : Aᴴ * A = 0 ↔ A = 0 :=
+  ⟨fun h => Matrix.ext fun i j =>
+    (congr_fun <| dotProduct_star_self_eq_zero.1 <| Matrix.ext_iff.2 h j j) i,
+  fun h => h ▸ Matrix.mul_zero _⟩
+
+@[simp]
+lemma self_mul_conjTranspose_eq_zero {A : Matrix m n R} : A * Aᴴ = 0 ↔ A = 0 :=
+  ⟨fun h => Matrix.ext fun i j =>
+    (congr_fun <| dotProduct_self_star_eq_zero.1 <| Matrix.ext_iff.2 h i i) j,
+  fun h => h ▸ Matrix.zero_mul _⟩
+
+lemma conjTranspose_mul_self_mul_eq_zero (A : Matrix m n R) (B : Matrix n p R) :
+    (Aᴴ * A) * B = 0 ↔ A * B = 0 := by
+  refine ⟨fun h => ?_, fun h => by simp only [Matrix.mul_assoc, h, Matrix.mul_zero]⟩
+  apply_fun (Bᴴ * ·) at h
+  rwa [Matrix.mul_zero, Matrix.mul_assoc, ← Matrix.mul_assoc, ← conjTranspose_mul,
+    conjTranspose_mul_self_eq_zero] at h
+
+lemma self_mul_conjTranspose_mul_eq_zero (A : Matrix m n R) (B : Matrix m p R) :
+    (A * Aᴴ) * B = 0 ↔ Aᴴ * B = 0 := by
+  simpa only [conjTranspose_conjTranspose] using conjTranspose_mul_self_mul_eq_zero Aᴴ _
+
+lemma mul_self_mul_conjTranspose_eq_zero (A : Matrix m n R) (B : Matrix p m R) :
+    B * (A * Aᴴ) = 0 ↔ B * A = 0 := by
+  rw [← conjTranspose_eq_zero, conjTranspose_mul, conjTranspose_mul, conjTranspose_conjTranspose,
+    self_mul_conjTranspose_mul_eq_zero, ← conjTranspose_mul, conjTranspose_eq_zero]
+
+lemma mul_conjTranspose_mul_self_eq_zero (A : Matrix m n R) (B : Matrix p n R) :
+    B * (Aᴴ * A) = 0 ↔ B * Aᴴ = 0 := by
+  simpa only [conjTranspose_conjTranspose] using mul_self_mul_conjTranspose_eq_zero Aᴴ _
+
+lemma conjTranspose_mul_self_mulVec_eq_zero (A : Matrix m n R) (v : n → R) :
+    (Aᴴ * A).mulVec v = 0 ↔ A.mulVec v = 0 := by
+  simpa only [← Matrix.col_mulVec, col_eq_zero] using
+    conjTranspose_mul_self_mul_eq_zero A (col v)
+
+lemma self_mul_conjTranspose_mulVec_eq_zero (A : Matrix m n R) (v : m → R) :
+    (A * Aᴴ).mulVec v = 0 ↔ Aᴴ.mulVec v = 0 := by
+  simpa only [conjTranspose_conjTranspose] using conjTranspose_mul_self_mulVec_eq_zero Aᴴ _
+
+lemma vecMul_conjTranspose_mul_self_eq_zero (A : Matrix m n R) (v : n → R) :
+    vecMul v (Aᴴ * A) = 0 ↔ vecMul v Aᴴ = 0 := by
+  simpa only [← Matrix.row_vecMul, row_eq_zero] using
+    mul_conjTranspose_mul_self_eq_zero A (row v)
+
+lemma vecMul_self_mul_conjTranspose_eq_zero (A : Matrix m n R) (v : m → R) :
+    vecMul v (A * Aᴴ) = 0 ↔ vecMul v A = 0 := by
+  simpa only [conjTranspose_conjTranspose] using vecMul_conjTranspose_mul_self_eq_zero Aᴴ _
+
+end StarOrderedRing
+
 end Self
 
 end Matrix
chore: script to replace headers with #align_import statements (#5979)

Open in Gitpod

Co-authored-by: Eric Wieser <wieser.eric@gmail.com> Co-authored-by: Scott Morrison <scott.morrison@gmail.com>

Diff
@@ -2,16 +2,13 @@
 Copyright (c) 2019 Johannes Hölzl. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Johannes Hölzl, Patrick Massot, Casper Putz, Anne Baanen
-
-! This file was ported from Lean 3 source module linear_algebra.matrix.dot_product
-! leanprover-community/mathlib commit 31c24aa72e7b3e5ed97a8412470e904f82b81004
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
 -/
 import Mathlib.Algebra.Star.Order
 import Mathlib.Data.Matrix.Basic
 import Mathlib.LinearAlgebra.StdBasis
 
+#align_import linear_algebra.matrix.dot_product from "leanprover-community/mathlib"@"31c24aa72e7b3e5ed97a8412470e904f82b81004"
+
 /-!
 # Dot product of two vectors
 
chore: forward-port leanprover-community/mathlib#18854 (#4840)

This forward-ports all the files from leanprover-community/mathlib#18854 which have already been ported, and it also ports the new file algebra.star.order, which is a split from algebra.star.basic and was necessary to do at the same time.

Co-authored-by: Chris Hughes <chrishughes24@gmail.com>

Diff
@@ -4,10 +4,11 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Johannes Hölzl, Patrick Massot, Casper Putz, Anne Baanen
 
 ! This file was ported from Lean 3 source module linear_algebra.matrix.dot_product
-! leanprover-community/mathlib commit 5ac1dab1670014b4c07a82c86a67f3d064a1b3e1
+! leanprover-community/mathlib commit 31c24aa72e7b3e5ed97a8412470e904f82b81004
 ! Please do not edit these lines, except to modify the commit id
 ! if you have ported upstream changes.
 -/
+import Mathlib.Algebra.Star.Order
 import Mathlib.Data.Matrix.Basic
 import Mathlib.LinearAlgebra.StdBasis
 
chore: tidy various files (#3474)
Diff
@@ -37,7 +37,7 @@ variable {R : Type v} {n : Type w}
 
 namespace Matrix
 
-section semiring
+section Semiring
 
 variable [Semiring R] [Fintype n]
 
@@ -72,9 +72,9 @@ theorem dotProduct_eq_zero_iff {v : n → R} : (∀ w, dotProduct v w = 0) ↔ v
   ⟨fun h => dotProduct_eq_zero v h, fun h w => h.symm ▸ zero_dotProduct w⟩
 #align matrix.dot_product_eq_zero_iff Matrix.dotProduct_eq_zero_iff
 
-end semiring
+end Semiring
 
-section self
+section Self
 
 variable [Fintype n]
 
@@ -100,6 +100,6 @@ theorem dotProduct_self_star_eq_zero [PartialOrder R] [NonUnitalRing R] [StarOrd
     by simp [Function.funext_iff, mul_eq_zero]
 #align matrix.dot_product_self_star_eq_zero Matrix.dotProduct_self_star_eq_zero
 
-end self
+end Self
 
 end Matrix
chore: forward port mathlib#18810, 18798, 18738 (#3443)

Co-authored-by: Parcly Taxel <reddeloostw@gmail.com>

Diff
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Johannes Hölzl, Patrick Massot, Casper Putz, Anne Baanen
 
 ! This file was ported from Lean 3 source module linear_algebra.matrix.dot_product
-! leanprover-community/mathlib commit 46822d96c0c0a8e58a41a0cba1291620967575c5
+! leanprover-community/mathlib commit 5ac1dab1670014b4c07a82c86a67f3d064a1b3e1
 ! Please do not edit these lines, except to modify the commit id
 ! if you have ported upstream changes.
 -/
@@ -86,18 +86,18 @@ theorem dotProduct_self_eq_zero [LinearOrderedRing R] {v : n → R} : dotProduct
 
 /-- Note that this applies to `ℂ` via `Complex.strictOrderedCommRing`. -/
 @[simp]
-theorem dotProduct_star_self_eq_zero [StrictOrderedRing R] [StarOrderedRing R] [NoZeroDivisors R]
-    {v : n → R} : dotProduct (star v) v = 0 ↔ v = 0 :=
-  (Finset.sum_eq_zero_iff_of_nonneg fun i _ => @star_mul_self_nonneg _ _ _ _ (v i)).trans <| by
-    simp [Function.funext_iff, mul_eq_zero]
+theorem dotProduct_star_self_eq_zero [PartialOrder R] [NonUnitalRing R] [StarOrderedRing R]
+    [NoZeroDivisors R] {v : n → R} : dotProduct (star v) v = 0 ↔ v = 0 :=
+  (Finset.sum_eq_zero_iff_of_nonneg fun i _ => (@star_mul_self_nonneg _ _ _ _ (v i) : _)).trans <|
+    by simp [Function.funext_iff, mul_eq_zero]
 #align matrix.dot_product_star_self_eq_zero Matrix.dotProduct_star_self_eq_zero
 
 /-- Note that this applies to `ℂ` via `Complex.strictOrderedCommRing`. -/
 @[simp]
-theorem dotProduct_self_star_eq_zero [StrictOrderedRing R] [StarOrderedRing R] [NoZeroDivisors R]
-    {v : n → R} : dotProduct v (star v) = 0 ↔ v = 0 :=
-  (Finset.sum_eq_zero_iff_of_nonneg fun i _ => @star_mul_self_nonneg' _ _ _ _ (v i)).trans <| by
-    simp [Function.funext_iff, mul_eq_zero]
+theorem dotProduct_self_star_eq_zero [PartialOrder R] [NonUnitalRing R] [StarOrderedRing R]
+    [NoZeroDivisors R] {v : n → R} : dotProduct v (star v) = 0 ↔ v = 0 :=
+  (Finset.sum_eq_zero_iff_of_nonneg fun i _ => (@star_mul_self_nonneg' _ _ _ _ (v i) : _)).trans <|
+    by simp [Function.funext_iff, mul_eq_zero]
 #align matrix.dot_product_self_star_eq_zero Matrix.dotProduct_self_star_eq_zero
 
 end self
chore: forward port mathlib#18668, 18781, 18783, 18792, 18794 (#3410)

Co-authored-by: Parcly Taxel <reddeloostw@gmail.com> Co-authored-by: Eric Wieser <wieser.eric@gmail.com>

Diff
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Johannes Hölzl, Patrick Massot, Casper Putz, Anne Baanen
 
 ! This file was ported from Lean 3 source module linear_algebra.matrix.dot_product
-! leanprover-community/mathlib commit 738c19f572805cff525a93aa4ffbdf232df05aa8
+! leanprover-community/mathlib commit 46822d96c0c0a8e58a41a0cba1291620967575c5
 ! Please do not edit these lines, except to modify the commit id
 ! if you have ported upstream changes.
 -/
@@ -33,9 +33,13 @@ matrix, reindex
 
 universe v w
 
+variable {R : Type v} {n : Type w}
+
 namespace Matrix
 
-variable {R : Type v} [Semiring R] {n : Type w} [Fintype n]
+section semiring
+
+variable [Semiring R] [Fintype n]
 
 @[simp]
 theorem dotProduct_stdBasis_eq_mul [DecidableEq n] (v : n → R) (c : R) (i : n) :
@@ -68,4 +72,34 @@ theorem dotProduct_eq_zero_iff {v : n → R} : (∀ w, dotProduct v w = 0) ↔ v
   ⟨fun h => dotProduct_eq_zero v h, fun h w => h.symm ▸ zero_dotProduct w⟩
 #align matrix.dot_product_eq_zero_iff Matrix.dotProduct_eq_zero_iff
 
+end semiring
+
+section self
+
+variable [Fintype n]
+
+@[simp]
+theorem dotProduct_self_eq_zero [LinearOrderedRing R] {v : n → R} : dotProduct v v = 0 ↔ v = 0 :=
+  (Finset.sum_eq_zero_iff_of_nonneg fun i _ => mul_self_nonneg (v i)).trans <| by
+    simp [Function.funext_iff]
+#align matrix.dot_product_self_eq_zero Matrix.dotProduct_self_eq_zero
+
+/-- Note that this applies to `ℂ` via `Complex.strictOrderedCommRing`. -/
+@[simp]
+theorem dotProduct_star_self_eq_zero [StrictOrderedRing R] [StarOrderedRing R] [NoZeroDivisors R]
+    {v : n → R} : dotProduct (star v) v = 0 ↔ v = 0 :=
+  (Finset.sum_eq_zero_iff_of_nonneg fun i _ => @star_mul_self_nonneg _ _ _ _ (v i)).trans <| by
+    simp [Function.funext_iff, mul_eq_zero]
+#align matrix.dot_product_star_self_eq_zero Matrix.dotProduct_star_self_eq_zero
+
+/-- Note that this applies to `ℂ` via `Complex.strictOrderedCommRing`. -/
+@[simp]
+theorem dotProduct_self_star_eq_zero [StrictOrderedRing R] [StarOrderedRing R] [NoZeroDivisors R]
+    {v : n → R} : dotProduct v (star v) = 0 ↔ v = 0 :=
+  (Finset.sum_eq_zero_iff_of_nonneg fun i _ => @star_mul_self_nonneg' _ _ _ _ (v i)).trans <| by
+    simp [Function.funext_iff, mul_eq_zero]
+#align matrix.dot_product_self_star_eq_zero Matrix.dotProduct_self_star_eq_zero
+
+end self
+
 end Matrix
feat: port LinearAlgebra.Matrix.DotProduct (#3311)

Co-authored-by: Parcly Taxel <reddeloostw@gmail.com>

Dependencies 8 + 432

433 files ported (98.2%)
179034 lines ported (98.3%)
Show graph

The unported dependencies are