linear_algebra.matrix.dot_product
⟷
Mathlib.LinearAlgebra.Matrix.DotProduct
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.
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(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)
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.
ℚ
could be star_ordered_ring
s. This is a minor reason, but it should be a nice convenience. This instance is added in this PR in a new file.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
).
@@ -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)
@@ -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)
@@ -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)
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -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
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -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
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -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
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -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
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -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"
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -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
mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -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
mathlib commit https://github.com/leanprover-community/mathlib/commit/31c24aa72e7b3e5ed97a8412470e904f82b81004
@@ -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
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -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]
mathlib commit https://github.com/leanprover-community/mathlib/commit/8d33f09cd7089ecf074b4791907588245aec5d1b
@@ -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) :
mathlib commit https://github.com/leanprover-community/mathlib/commit/c89fe2d59ae06402c3f55f978016d1ada444f57e
@@ -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) :
mathlib commit https://github.com/leanprover-community/mathlib/commit/0e2aab2b0d521f060f62a14d2cf2e2c54e8491d6
@@ -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]
mathlib commit https://github.com/leanprover-community/mathlib/commit/7ebf83ed9c262adbf983ef64d5e8c2ae94b625f4
@@ -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
mathlib commit https://github.com/leanprover-community/mathlib/commit/347636a7a80595d55bedf6e6fbd996a3c39da69a
@@ -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]
mathlib commit https://github.com/leanprover-community/mathlib/commit/347636a7a80595d55bedf6e6fbd996a3c39da69a
@@ -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
mathlib commit https://github.com/leanprover-community/mathlib/commit/284fdd2962e67d2932fa3a79ce19fcf92d38e228
@@ -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`.
mathlib commit https://github.com/leanprover-community/mathlib/commit/06a655b5fcfbda03502f9158bbf6c0f1400886f9
@@ -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
mathlib commit https://github.com/leanprover-community/mathlib/commit/3180fab693e2cee3bff62675571264cb8778b212
@@ -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
mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
@@ -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
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:
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.StarOrderedRing
instance on C(α, A)
where A
is a complex (or even real) C⋆-algebra, and making this a mixin avoids loops with StarRing
.@@ -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
@@ -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]
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>
@@ -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
@@ -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]
@@ -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
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).
@@ -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
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>
@@ -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
@@ -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
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>
@@ -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
@@ -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
algebra.order.sub.defs
, data.real.nnreal
: leanprover-community/mathlib#18810, which is itself a backport. Also fixes a docstring typo.linear_algebra.matrix.dot_product
: leanprover-community/mathlib#18798data.matrix.basic
: leanprover-community/mathlib#18738Co-authored-by: Parcly Taxel <reddeloostw@gmail.com>
@@ -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
set_theory.cardinal.basic
: forward-ports leanprover-community/mathlib#18781, which backports some ad-hoc changes in #3247 in a more principled wayring_theory.int.basic
: these changes were already forward-ported in #3278, but we forgot the SHA.linear_algebra.dimension
: forward-ports leanprover-community/mathlib#18792linear_algebra.matrix.dot_product
: forward-ports leanprover-community/mathlib#18783linear_algebra.finrank
: forward-ports leanprover-community/mathlib#18794 which is itself a backport of #3378, hence no changes to the fileCo-authored-by: Parcly Taxel <reddeloostw@gmail.com> Co-authored-by: Eric Wieser <wieser.eric@gmail.com>
@@ -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
The unported dependencies are