linear_algebra.matrix.transvection
⟷
Mathlib.LinearAlgebra.Matrix.Transvection
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)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(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)
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Sébastien Gouëzel
-/
import Data.Matrix.Basis
-import Data.Matrix.Dmatrix
+import Data.Matrix.DMatrix
import LinearAlgebra.Matrix.Determinant
import LinearAlgebra.Matrix.Reindex
import Tactic.FieldSimp
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -478,7 +478,7 @@ theorem listTransvecCol_mul_last_col (hM : M (inr unit) (inr unit) ≠ 0) (i : F
by simp [list_transvec_col]
simp only [Matrix.mul_assoc, A, Matrix.hMul_eq_hMul, List.prod_cons]
by_cases h : n' = i
- · have hni : n = i := by cases i; simp only [Fin.mk_eq_mk] at h ; simp [h]
+ · have hni : n = i := by cases i; simp only [Fin.mk_eq_mk] at h; simp [h]
rw [h, transvection_mul_apply_same, IH, list_transvec_col_mul_last_row_drop _ _ hn, ← hni]
field_simp [hM]
· have hni : n ≠ i := by rintro rfl; cases i; simpa using h
@@ -552,7 +552,7 @@ theorem mul_listTransvecRow_last_row (hM : M (inr unit) (inr unit) ≠ 0) (i : F
simp only [List.take_succ, A, ← Matrix.mul_assoc, List.prod_append, Matrix.mul_one,
Matrix.hMul_eq_hMul, List.prod_cons, List.prod_nil, Option.to_list_some]
by_cases h : n' = i
- · have hni : n = i := by cases i; simp only [Fin.mk_eq_mk] at h ; simp only [h, coe_mk]
+ · have hni : n = i := by cases i; simp only [Fin.mk_eq_mk] at h; simp only [h, coe_mk]
have : ¬n.succ ≤ i := by simp only [← hni, n.lt_succ_self, not_le]
simp only [h, mul_transvection_apply_same, List.take, if_false,
mul_list_transvec_row_last_col_take _ _ hnr.le, hni.le, this, if_true, IH hnr.le]
@@ -651,8 +651,8 @@ theorem exists_isTwoBlockDiagonal_list_transvec_mul_mul_list_transvec
-- when the last coefficient is zero but there is a nonzero coefficient on the last row or the
-- last column, we will first put this nonzero coefficient in last position, and then argue as
-- above.
- push_neg at hM
- simp [not_and_or, is_two_block_diagonal, to_blocks₁₂, to_blocks₂₁, ← Matrix.ext_iff] at H
+ push_neg at hM
+ simp [not_and_or, is_two_block_diagonal, to_blocks₁₂, to_blocks₂₁, ← Matrix.ext_iff] at H
have : ∃ i : Fin r, M (inl i) (inr star) ≠ 0 ∨ M (inr star) (inl i) ≠ 0 :=
by
cases H
@@ -666,7 +666,7 @@ theorem exists_isTwoBlockDiagonal_list_transvec_mul_mul_list_transvec
· let M' := transvection (inr Unit.unit) (inl i) 1 ⬝ M
have hM' : M' (inr star) (inr star) ≠ 0 := by simpa [M', hM]
rcases exists_is_two_block_diagonal_of_ne_zero M' hM' with ⟨L, L', hLL'⟩
- rw [Matrix.mul_assoc] at hLL'
+ rw [Matrix.mul_assoc] at hLL'
refine' ⟨L ++ [⟨inr star, inl i, by simp, 1⟩], L', _⟩
simp only [List.map_append, List.prod_append, Matrix.mul_one, to_matrix_mk, List.prod_cons,
List.prod_nil, mul_eq_mul, List.map, Matrix.mul_assoc (L.map to_matrix).Prod]
@@ -755,7 +755,7 @@ theorem exists_list_transvec_mul_mul_list_transvec_eq_diagonal_aux (n : Type) [F
induction' hn : Fintype.card n with r IH generalizing n M
· refine' ⟨List.nil, List.nil, fun _ => 1, _⟩
ext i j
- rw [Fintype.card_eq_zero_iff] at hn
+ rw [Fintype.card_eq_zero_iff] at hn
exact hn.elim' i
· have e : n ≃ Sum (Fin r) Unit :=
by
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -3,11 +3,11 @@ Copyright (c) 2021 Sébastien Gouëzel. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Sébastien Gouëzel
-/
-import Mathbin.Data.Matrix.Basis
-import Mathbin.Data.Matrix.Dmatrix
-import Mathbin.LinearAlgebra.Matrix.Determinant
-import Mathbin.LinearAlgebra.Matrix.Reindex
-import Mathbin.Tactic.FieldSimp
+import Data.Matrix.Basis
+import Data.Matrix.Dmatrix
+import LinearAlgebra.Matrix.Determinant
+import LinearAlgebra.Matrix.Reindex
+import Tactic.FieldSimp
#align_import linear_algebra.matrix.transvection from "leanprover-community/mathlib"@"f2b757fc5c341d88741b9c4630b1e8ba973c5726"
mathlib commit https://github.com/leanprover-community/mathlib/commit/32a7e535287f9c73f2e4d2aef306a39190f0b504
@@ -476,7 +476,7 @@ theorem listTransvecCol_mul_last_col (hM : M (inr unit) (inr unit) ≠ 0) (i : F
(list_transvec_col M).nthLe n hn' =
transvection (inl n') (inr star) (-M (inl n') (inr star) / M (inr star) (inr star)) :=
by simp [list_transvec_col]
- simp only [Matrix.mul_assoc, A, Matrix.mul_eq_mul, List.prod_cons]
+ simp only [Matrix.mul_assoc, A, Matrix.hMul_eq_hMul, List.prod_cons]
by_cases h : n' = i
· have hni : n = i := by cases i; simp only [Fin.mk_eq_mk] at h ; simp [h]
rw [h, transvection_mul_apply_same, IH, list_transvec_col_mul_last_row_drop _ _ hn, ← hni]
@@ -507,7 +507,7 @@ theorem mul_listTransvecRow_last_col_take (i : Sum (Fin r) Unit) {k : ℕ} (hk :
(-M (inr Unit.unit) (inl k') / M (inr Unit.unit) (inr Unit.unit))) :=
by simp only [list_transvec_row, List.ofFnNthVal, hkr, dif_pos, List.get?_ofFn]; rfl
simp only [List.take_succ, ← Matrix.mul_assoc, this, List.prod_append, Matrix.mul_one,
- Matrix.mul_eq_mul, List.prod_cons, List.prod_nil, Option.to_list_some]
+ Matrix.hMul_eq_hMul, List.prod_cons, List.prod_nil, Option.to_list_some]
rw [mul_transvection_apply_of_ne, IH hkr.le]
simp only [Ne.def, not_false_iff]
#align matrix.pivot.mul_list_transvec_row_last_col_take Matrix.Pivot.mul_listTransvecRow_last_col_take
@@ -550,7 +550,7 @@ theorem mul_listTransvecRow_last_row (hM : M (inr unit) (inr unit) ≠ 0) (i : F
(-M (inr Unit.unit) (inl n') / M (inr Unit.unit) (inr Unit.unit))) :=
by simp only [list_transvec_row, List.ofFnNthVal, hnr, dif_pos, List.get?_ofFn]; rfl
simp only [List.take_succ, A, ← Matrix.mul_assoc, List.prod_append, Matrix.mul_one,
- Matrix.mul_eq_mul, List.prod_cons, List.prod_nil, Option.to_list_some]
+ Matrix.hMul_eq_hMul, List.prod_cons, List.prod_nil, Option.to_list_some]
by_cases h : n' = i
· have hni : n = i := by cases i; simp only [Fin.mk_eq_mk] at h ; simp only [h, coe_mk]
have : ¬n.succ ≤ i := by simp only [← hni, n.lt_succ_self, not_le]
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -2,11 +2,6 @@
Copyright (c) 2021 Sébastien Gouëzel. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Sébastien Gouëzel
-
-! This file was ported from Lean 3 source module linear_algebra.matrix.transvection
-! leanprover-community/mathlib commit f2b757fc5c341d88741b9c4630b1e8ba973c5726
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathbin.Data.Matrix.Basis
import Mathbin.Data.Matrix.Dmatrix
@@ -14,6 +9,8 @@ import Mathbin.LinearAlgebra.Matrix.Determinant
import Mathbin.LinearAlgebra.Matrix.Reindex
import Mathbin.Tactic.FieldSimp
+#align_import linear_algebra.matrix.transvection from "leanprover-community/mathlib"@"f2b757fc5c341d88741b9c4630b1e8ba973c5726"
+
/-!
# Transvections
mathlib commit https://github.com/leanprover-community/mathlib/commit/2a0ce625dbb0ffbc7d1316597de0b25c1ec75303
@@ -109,7 +109,7 @@ theorem updateRow_eq_transvection [Finite n] (c : R) :
transvection i j c :=
by
cases nonempty_fintype n
- ext (a b)
+ ext a b
by_cases ha : i = a; by_cases hb : j = b
·
simp only [update_row_self, transvection, ha, hb, Pi.add_apply, std_basis_matrix.apply_same,
@@ -309,7 +309,7 @@ theorem toMatrix_sumInl (t : TransvectionStruct n R) :
(t.sumInl p).toMatrix = fromBlocks t.toMatrix 0 0 1 :=
by
cases t
- ext (a b)
+ ext a b
cases a <;> cases b
· by_cases h : a = b <;> simp [transvection_struct.sum_inl, transvection, h, std_basis_matrix]
· simp [transvection_struct.sum_inl, transvection]
@@ -365,7 +365,7 @@ theorem toMatrix_reindexEquiv (e : n ≃ p) (t : TransvectionStruct n R) :
(t.reindexEquiv e).toMatrix = reindexAlgEquiv R e t.toMatrix :=
by
cases t
- ext (a b)
+ ext a b
simp only [reindex_equiv, transvection, mul_boole, Algebra.id.smul_eq_mul, to_matrix_mk,
submatrix_apply, reindex_apply, DMatrix.add_apply, Pi.smul_apply, reindex_alg_equiv_apply]
by_cases ha : e t_i = a <;> by_cases hb : e t_j = b <;> by_cases hab : a = b <;>
@@ -608,10 +608,10 @@ theorem isTwoBlockDiagonal_listTransvecCol_mul_mul_listTransvecRow
IsTwoBlockDiagonal ((listTransvecCol M).Prod ⬝ M ⬝ (listTransvecRow M).Prod) :=
by
constructor
- · ext (i j)
+ · ext i j
have : j = star := by simp only [eq_iff_true_of_subsingleton]
simp [to_blocks₁₂, this, list_transvec_col_mul_mul_list_transvec_row_last_row M hM]
- · ext (i j)
+ · ext i j
have : i = star := by simp only [eq_iff_true_of_subsingleton]
simp [to_blocks₂₁, this, list_transvec_col_mul_mul_list_transvec_row_last_col M hM]
#align matrix.pivot.is_two_block_diagonal_list_transvec_col_mul_mul_list_transvec_row Matrix.Pivot.isTwoBlockDiagonal_listTransvecCol_mul_mul_listTransvecRow
@@ -714,7 +714,7 @@ theorem exists_list_transvec_mul_mul_list_transvec_eq_diagonal_induction
congr
· exact hM.1
· exact hM.2
- · ext (⟨⟩⟨⟩); rw [hc, to_blocks₂₂, of_apply]; rfl
+ · ext ⟨⟩ ⟨⟩; rw [hc, to_blocks₂₂, of_apply]; rfl
rw [this]
simp [h₀]
#align matrix.pivot.exists_list_transvec_mul_mul_list_transvec_eq_diagonal_induction Matrix.Pivot.exists_list_transvec_mul_mul_list_transvec_eq_diagonal_induction
@@ -757,7 +757,7 @@ theorem exists_list_transvec_mul_mul_list_transvec_eq_diagonal_aux (n : Type) [F
by
induction' hn : Fintype.card n with r IH generalizing n M
· refine' ⟨List.nil, List.nil, fun _ => 1, _⟩
- ext (i j)
+ ext i j
rw [Fintype.card_eq_zero_iff] at hn
exact hn.elim' i
· have e : n ≃ Sum (Fin r) Unit :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -93,12 +93,15 @@ def transvection (c : R) : Matrix n n R :=
#align matrix.transvection Matrix.transvection
-/
+#print Matrix.transvection_zero /-
@[simp]
theorem transvection_zero : transvection i j (0 : R) = 1 := by simp [transvection]
#align matrix.transvection_zero Matrix.transvection_zero
+-/
section
+#print Matrix.updateRow_eq_transvection /-
/-- A transvection matrix is obtained from the identity by adding `c` times the `j`-th row to
the `i`-th row. -/
theorem updateRow_eq_transvection [Finite n] (c : R) :
@@ -120,45 +123,59 @@ theorem updateRow_eq_transvection [Finite n] (c : R) :
Algebra.id.smul_eq_mul, Ne.def, not_false_iff, DMatrix.add_apply, Pi.smul_apply,
MulZeroClass.mul_zero, false_and_iff]
#align matrix.update_row_eq_transvection Matrix.updateRow_eq_transvection
+-/
variable [Fintype n]
+#print Matrix.transvection_mul_transvection_same /-
theorem transvection_mul_transvection_same (h : i ≠ j) (c d : R) :
transvection i j c ⬝ transvection i j d = transvection i j (c + d) := by
simp [transvection, Matrix.add_mul, Matrix.mul_add, h, h.symm, add_smul, add_assoc,
std_basis_matrix_add]
#align matrix.transvection_mul_transvection_same Matrix.transvection_mul_transvection_same
+-/
+#print Matrix.transvection_mul_apply_same /-
@[simp]
theorem transvection_mul_apply_same (b : n) (c : R) (M : Matrix n n R) :
(transvection i j c ⬝ M) i b = M i b + c * M j b := by simp [transvection, Matrix.add_mul]
#align matrix.transvection_mul_apply_same Matrix.transvection_mul_apply_same
+-/
+#print Matrix.mul_transvection_apply_same /-
@[simp]
theorem mul_transvection_apply_same (a : n) (c : R) (M : Matrix n n R) :
(M ⬝ transvection i j c) a j = M a j + c * M a i := by
simp [transvection, Matrix.mul_add, mul_comm]
#align matrix.mul_transvection_apply_same Matrix.mul_transvection_apply_same
+-/
+#print Matrix.transvection_mul_apply_of_ne /-
@[simp]
theorem transvection_mul_apply_of_ne (a b : n) (ha : a ≠ i) (c : R) (M : Matrix n n R) :
(transvection i j c ⬝ M) a b = M a b := by simp [transvection, Matrix.add_mul, ha]
#align matrix.transvection_mul_apply_of_ne Matrix.transvection_mul_apply_of_ne
+-/
+#print Matrix.mul_transvection_apply_of_ne /-
@[simp]
theorem mul_transvection_apply_of_ne (a b : n) (hb : b ≠ j) (c : R) (M : Matrix n n R) :
(M ⬝ transvection i j c) a b = M a b := by simp [transvection, Matrix.mul_add, hb]
#align matrix.mul_transvection_apply_of_ne Matrix.mul_transvection_apply_of_ne
+-/
+#print Matrix.det_transvection_of_ne /-
@[simp]
theorem det_transvection_of_ne (h : i ≠ j) (c : R) : det (transvection i j c) = 1 := by
rw [← update_row_eq_transvection i j, det_update_row_add_smul_self _ h, det_one]
#align matrix.det_transvection_of_ne Matrix.det_transvection_of_ne
+-/
end
variable (R n)
+#print Matrix.TransvectionStruct /-
/-- A structure containing all the information from which one can build a nontrivial transvection.
This structure is easier to manipulate than transvections as one has a direct access to all the
relevant fields. -/
@@ -168,6 +185,7 @@ structure TransvectionStruct where
hij : i ≠ j
c : R
#align matrix.transvection_struct Matrix.TransvectionStruct
+-/
instance [Nontrivial n] : Nonempty (TransvectionStruct n R) := by
choose x y hxy using exists_pair_ne n; exact ⟨⟨x, y, hxy, 0⟩⟩
@@ -183,17 +201,22 @@ def toMatrix (t : TransvectionStruct n R) : Matrix n n R :=
#align matrix.transvection_struct.to_matrix Matrix.TransvectionStruct.toMatrix
-/
+#print Matrix.TransvectionStruct.toMatrix_mk /-
@[simp]
theorem toMatrix_mk (i j : n) (hij : i ≠ j) (c : R) :
TransvectionStruct.toMatrix ⟨i, j, hij, c⟩ = transvection i j c :=
rfl
#align matrix.transvection_struct.to_matrix_mk Matrix.TransvectionStruct.toMatrix_mk
+-/
+#print Matrix.TransvectionStruct.det /-
@[simp]
protected theorem det [Fintype n] (t : TransvectionStruct n R) : det t.toMatrix = 1 :=
det_transvection_of_ne _ _ t.hij _
#align matrix.transvection_struct.det Matrix.TransvectionStruct.det
+-/
+#print Matrix.TransvectionStruct.det_toMatrix_prod /-
@[simp]
theorem det_toMatrix_prod [Fintype n] (L : List (TransvectionStruct n 𝕜)) :
det (L.map toMatrix).Prod = 1 := by
@@ -201,7 +224,9 @@ theorem det_toMatrix_prod [Fintype n] (L : List (TransvectionStruct n 𝕜)) :
· simp
· simp [IH]
#align matrix.transvection_struct.det_to_matrix_prod Matrix.TransvectionStruct.det_toMatrix_prod
+-/
+#print Matrix.TransvectionStruct.inv /-
/-- The inverse of a `transvection_struct`, designed so that `t.inv.to_matrix` is the inverse of
`t.to_matrix`. -/
@[simps]
@@ -212,19 +237,25 @@ protected def inv (t : TransvectionStruct n R) : TransvectionStruct n R
hij := t.hij
c := -t.c
#align matrix.transvection_struct.inv Matrix.TransvectionStruct.inv
+-/
section
variable [Fintype n]
+#print Matrix.TransvectionStruct.inv_mul /-
theorem inv_mul (t : TransvectionStruct n R) : t.inv.toMatrix ⬝ t.toMatrix = 1 := by
rcases t with ⟨⟩; simp [to_matrix, transvection_mul_transvection_same, t_hij]
#align matrix.transvection_struct.inv_mul Matrix.TransvectionStruct.inv_mul
+-/
+#print Matrix.TransvectionStruct.mul_inv /-
theorem mul_inv (t : TransvectionStruct n R) : t.toMatrix ⬝ t.inv.toMatrix = 1 := by
rcases t with ⟨⟩; simp [to_matrix, transvection_mul_transvection_same, t_hij]
#align matrix.transvection_struct.mul_inv Matrix.TransvectionStruct.mul_inv
+-/
+#print Matrix.TransvectionStruct.reverse_inv_prod_mul_prod /-
theorem reverse_inv_prod_mul_prod (L : List (TransvectionStruct n R)) :
(L.reverse.map (toMatrix ∘ TransvectionStruct.inv)).Prod ⬝ (L.map toMatrix).Prod = 1 :=
by
@@ -237,7 +268,9 @@ theorem reverse_inv_prod_mul_prod (L : List (TransvectionStruct n R)) :
by simpa [Matrix.mul_assoc]
simpa [inv_mul] using IH
#align matrix.transvection_struct.reverse_inv_prod_mul_prod Matrix.TransvectionStruct.reverse_inv_prod_mul_prod
+-/
+#print Matrix.TransvectionStruct.prod_mul_reverse_inv_prod /-
theorem prod_mul_reverse_inv_prod (L : List (TransvectionStruct n R)) :
(L.map toMatrix).Prod ⬝ (L.reverse.map (toMatrix ∘ TransvectionStruct.inv)).Prod = 1 :=
by
@@ -251,6 +284,7 @@ theorem prod_mul_reverse_inv_prod (L : List (TransvectionStruct n R)) :
by simpa [Matrix.mul_assoc]
simp_rw [IH, Matrix.mul_one, t.mul_inv]
#align matrix.transvection_struct.prod_mul_reverse_inv_prod Matrix.TransvectionStruct.prod_mul_reverse_inv_prod
+-/
end
@@ -258,6 +292,7 @@ variable (p)
open Sum
+#print Matrix.TransvectionStruct.sumInl /-
/-- Given a `transvection_struct` on `n`, define the corresponding `transvection_struct` on `n ⊕ p`
using the identity on `p`. -/
def sumInl (t : TransvectionStruct n R) : TransvectionStruct (Sum n p) R
@@ -267,7 +302,9 @@ def sumInl (t : TransvectionStruct n R) : TransvectionStruct (Sum n p) R
hij := by simp [t.hij]
c := t.c
#align matrix.transvection_struct.sum_inl Matrix.TransvectionStruct.sumInl
+-/
+#print Matrix.TransvectionStruct.toMatrix_sumInl /-
theorem toMatrix_sumInl (t : TransvectionStruct n R) :
(t.sumInl p).toMatrix = fromBlocks t.toMatrix 0 0 1 :=
by
@@ -279,7 +316,9 @@ theorem toMatrix_sumInl (t : TransvectionStruct n R) :
· simp [transvection_struct.sum_inl, transvection]
· by_cases h : a = b <;> simp [transvection_struct.sum_inl, transvection, h]
#align matrix.transvection_struct.to_matrix_sum_inl Matrix.TransvectionStruct.toMatrix_sumInl
+-/
+#print Matrix.TransvectionStruct.sumInl_toMatrix_prod_mul /-
@[simp]
theorem sumInl_toMatrix_prod_mul [Fintype n] [Fintype p] (M : Matrix n n R)
(L : List (TransvectionStruct n R)) (N : Matrix p p R) :
@@ -290,7 +329,9 @@ theorem sumInl_toMatrix_prod_mul [Fintype n] [Fintype p] (M : Matrix n n R)
· simp
· simp [Matrix.mul_assoc, IH, to_matrix_sum_inl, from_blocks_multiply]
#align matrix.transvection_struct.sum_inl_to_matrix_prod_mul Matrix.TransvectionStruct.sumInl_toMatrix_prod_mul
+-/
+#print Matrix.TransvectionStruct.mul_sumInl_toMatrix_prod /-
@[simp]
theorem mul_sumInl_toMatrix_prod [Fintype n] [Fintype p] (M : Matrix n n R)
(L : List (TransvectionStruct n R)) (N : Matrix p p R) :
@@ -301,9 +342,11 @@ theorem mul_sumInl_toMatrix_prod [Fintype n] [Fintype p] (M : Matrix n n R)
· simp
· simp [IH, to_matrix_sum_inl, from_blocks_multiply]
#align matrix.transvection_struct.mul_sum_inl_to_matrix_prod Matrix.TransvectionStruct.mul_sumInl_toMatrix_prod
+-/
variable {p}
+#print Matrix.TransvectionStruct.reindexEquiv /-
/-- Given a `transvection_struct` on `n` and an equivalence between `n` and `p`, define the
corresponding `transvection_struct` on `p`. -/
def reindexEquiv (e : n ≃ p) (t : TransvectionStruct n R) : TransvectionStruct p R
@@ -313,9 +356,11 @@ def reindexEquiv (e : n ≃ p) (t : TransvectionStruct n R) : TransvectionStruct
hij := by simp [t.hij]
c := t.c
#align matrix.transvection_struct.reindex_equiv Matrix.TransvectionStruct.reindexEquiv
+-/
variable [Fintype n] [Fintype p]
+#print Matrix.TransvectionStruct.toMatrix_reindexEquiv /-
theorem toMatrix_reindexEquiv (e : n ≃ p) (t : TransvectionStruct n R) :
(t.reindexEquiv e).toMatrix = reindexAlgEquiv R e t.toMatrix :=
by
@@ -326,7 +371,9 @@ theorem toMatrix_reindexEquiv (e : n ≃ p) (t : TransvectionStruct n R) :
by_cases ha : e t_i = a <;> by_cases hb : e t_j = b <;> by_cases hab : a = b <;>
simp [ha, hb, hab, ← e.apply_eq_iff_eq_symm_apply, std_basis_matrix]
#align matrix.transvection_struct.to_matrix_reindex_equiv Matrix.TransvectionStruct.toMatrix_reindexEquiv
+-/
+#print Matrix.TransvectionStruct.toMatrix_reindexEquiv_prod /-
theorem toMatrix_reindexEquiv_prod (e : n ≃ p) (L : List (TransvectionStruct n R)) :
(L.map (toMatrix ∘ reindexEquiv e)).Prod = reindexAlgEquiv R e (L.map toMatrix).Prod :=
by
@@ -336,6 +383,7 @@ theorem toMatrix_reindexEquiv_prod (e : n ≃ p) (L : List (TransvectionStruct n
reindex_alg_equiv_apply, List.map]
exact (reindex_alg_equiv_mul _ _ _ _).symm
#align matrix.transvection_struct.to_matrix_reindex_equiv_prod Matrix.TransvectionStruct.toMatrix_reindexEquiv_prod
+-/
end TransvectionStruct
@@ -381,6 +429,7 @@ def listTransvecRow : List (Matrix (Sum (Fin r) Unit) (Sum (Fin r) Unit) 𝕜) :
#align matrix.pivot.list_transvec_row Matrix.Pivot.listTransvecRow
-/
+#print Matrix.Pivot.listTransvecCol_mul_last_row_drop /-
/-- Multiplying by some of the matrices in `list_transvec_col M` does not change the last row. -/
theorem listTransvecCol_mul_last_row_drop (i : Sum (Fin r) Unit) {k : ℕ} (hk : k ≤ r) :
(((listTransvecCol M).drop k).Prod ⬝ M) (inr unit) i = M (inr unit) i :=
@@ -394,13 +443,17 @@ theorem listTransvecCol_mul_last_row_drop (i : Sum (Fin r) Unit) {k : ℕ} (hk :
rw [← List.cons_nthLe_drop_succ hn']
simpa [list_transvec_col, Matrix.mul_assoc]
#align matrix.pivot.list_transvec_col_mul_last_row_drop Matrix.Pivot.listTransvecCol_mul_last_row_drop
+-/
+#print Matrix.Pivot.listTransvecCol_mul_last_row /-
/-- Multiplying by all the matrices in `list_transvec_col M` does not change the last row. -/
theorem listTransvecCol_mul_last_row (i : Sum (Fin r) Unit) :
((listTransvecCol M).Prod ⬝ M) (inr unit) i = M (inr unit) i := by
simpa using list_transvec_col_mul_last_row_drop M i (zero_le _)
#align matrix.pivot.list_transvec_col_mul_last_row Matrix.Pivot.listTransvecCol_mul_last_row
+-/
+#print Matrix.Pivot.listTransvecCol_mul_last_col /-
/-- Multiplying by all the matrices in `list_transvec_col M` kills all the coefficients in the
last column but the last one. -/
theorem listTransvecCol_mul_last_col (hM : M (inr unit) (inr unit) ≠ 0) (i : Fin r) :
@@ -440,7 +493,9 @@ theorem listTransvecCol_mul_last_col (hM : M (inr unit) (inr unit) ≠ 0) (i : F
· simpa only [hni.symm, not_le, or_false_iff] using Nat.lt_succ_iff_lt_or_eq.1 hi
· simpa only [not_le] using hi
#align matrix.pivot.list_transvec_col_mul_last_col Matrix.Pivot.listTransvecCol_mul_last_col
+-/
+#print Matrix.Pivot.mul_listTransvecRow_last_col_take /-
/-- Multiplying by some of the matrices in `list_transvec_row M` does not change the last column. -/
theorem mul_listTransvecRow_last_col_take (i : Sum (Fin r) Unit) {k : ℕ} (hk : k ≤ r) :
(M ⬝ ((listTransvecRow M).take k).Prod) i (inr unit) = M i (inr unit) :=
@@ -459,7 +514,9 @@ theorem mul_listTransvecRow_last_col_take (i : Sum (Fin r) Unit) {k : ℕ} (hk :
rw [mul_transvection_apply_of_ne, IH hkr.le]
simp only [Ne.def, not_false_iff]
#align matrix.pivot.mul_list_transvec_row_last_col_take Matrix.Pivot.mul_listTransvecRow_last_col_take
+-/
+#print Matrix.Pivot.mul_listTransvecRow_last_col /-
/-- Multiplying by all the matrices in `list_transvec_row M` does not change the last column. -/
theorem mul_listTransvecRow_last_col (i : Sum (Fin r) Unit) :
(M ⬝ (listTransvecRow M).Prod) i (inr unit) = M i (inr unit) :=
@@ -468,7 +525,9 @@ theorem mul_listTransvecRow_last_col (i : Sum (Fin r) Unit) :
rw [← List.take_length (list_transvec_row M), A]
simpa using mul_list_transvec_row_last_col_take M i le_rfl
#align matrix.pivot.mul_list_transvec_row_last_col Matrix.Pivot.mul_listTransvecRow_last_col
+-/
+#print Matrix.Pivot.mul_listTransvecRow_last_row /-
/-- Multiplying by all the matrices in `list_transvec_row M` kills all the coefficients in the
last row but the last one. -/
theorem mul_listTransvecRow_last_row (hM : M (inr unit) (inr unit) ≠ 0) (i : Fin r) :
@@ -509,7 +568,9 @@ theorem mul_listTransvecRow_last_row (hM : M (inr unit) (inr unit) ≠ 0) (i : F
· simpa only [not_le] using hi
· simpa only [hni.symm, not_le, or_false_iff] using Nat.lt_succ_iff_lt_or_eq.1 hi
#align matrix.pivot.mul_list_transvec_row_last_row Matrix.Pivot.mul_listTransvecRow_last_row
+-/
+#print Matrix.Pivot.listTransvecCol_mul_mul_listTransvecRow_last_col /-
/-- Multiplying by all the matrices either in `list_transvec_col M` and `list_transvec_row M` kills
all the coefficients in the last row but the last one. -/
theorem listTransvecCol_mul_mul_listTransvecRow_last_col (hM : M (inr unit) (inr unit) ≠ 0)
@@ -522,7 +583,9 @@ theorem listTransvecCol_mul_mul_listTransvecRow_last_col (hM : M (inr unit) (inr
apply mul_list_transvec_row_last_row
simpa [list_transvec_col_mul_last_row] using hM
#align matrix.pivot.list_transvec_col_mul_mul_list_transvec_row_last_col Matrix.Pivot.listTransvecCol_mul_mul_listTransvecRow_last_col
+-/
+#print Matrix.Pivot.listTransvecCol_mul_mul_listTransvecRow_last_row /-
/-- Multiplying by all the matrices either in `list_transvec_col M` and `list_transvec_row M` kills
all the coefficients in the last column but the last one. -/
theorem listTransvecCol_mul_mul_listTransvecRow_last_row (hM : M (inr unit) (inr unit) ≠ 0)
@@ -535,7 +598,9 @@ theorem listTransvecCol_mul_mul_listTransvecRow_last_row (hM : M (inr unit) (inr
apply list_transvec_col_mul_last_col
simpa [mul_list_transvec_row_last_col] using hM
#align matrix.pivot.list_transvec_col_mul_mul_list_transvec_row_last_row Matrix.Pivot.listTransvecCol_mul_mul_listTransvecRow_last_row
+-/
+#print Matrix.Pivot.isTwoBlockDiagonal_listTransvecCol_mul_mul_listTransvecRow /-
/-- Multiplying by all the matrices either in `list_transvec_col M` and `list_transvec_row M` turns
the matrix in block-diagonal form. -/
theorem isTwoBlockDiagonal_listTransvecCol_mul_mul_listTransvecRow
@@ -550,7 +615,9 @@ theorem isTwoBlockDiagonal_listTransvecCol_mul_mul_listTransvecRow
have : i = star := by simp only [eq_iff_true_of_subsingleton]
simp [to_blocks₂₁, this, list_transvec_col_mul_mul_list_transvec_row_last_col M hM]
#align matrix.pivot.is_two_block_diagonal_list_transvec_col_mul_mul_list_transvec_row Matrix.Pivot.isTwoBlockDiagonal_listTransvecCol_mul_mul_listTransvecRow
+-/
+#print Matrix.Pivot.exists_isTwoBlockDiagonal_of_ne_zero /-
/-- There exist two lists of `transvection_struct` such that multiplying by them on the left and
on the right makes a matrix block-diagonal, when the last coefficient is nonzero. -/
theorem exists_isTwoBlockDiagonal_of_ne_zero (hM : M (inr unit) (inr unit) ≠ 0) :
@@ -569,6 +636,7 @@ theorem exists_isTwoBlockDiagonal_of_ne_zero (hM : M (inr unit) (inr unit) ≠ 0
rw [A, B]
exact is_two_block_diagonal_list_transvec_col_mul_mul_list_transvec_row M hM
#align matrix.pivot.exists_is_two_block_diagonal_of_ne_zero Matrix.Pivot.exists_isTwoBlockDiagonal_of_ne_zero
+-/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
#print Matrix.Pivot.exists_isTwoBlockDiagonal_list_transvec_mul_mul_list_transvec /-
@@ -654,6 +722,7 @@ theorem exists_list_transvec_mul_mul_list_transvec_eq_diagonal_induction
variable {n p} [Fintype n] [Fintype p]
+#print Matrix.Pivot.reindex_exists_list_transvec_mul_mul_list_transvec_eq_diagonal /-
/-- Reduction to diagonal form by elementary operations is invariant under reindexing. -/
theorem reindex_exists_list_transvec_mul_mul_list_transvec_eq_diagonal (M : Matrix p p 𝕜)
(e : p ≃ n)
@@ -674,6 +743,7 @@ theorem reindex_exists_list_transvec_mul_mul_list_transvec_eq_diagonal (M : Matr
simp only [← reindex_alg_equiv_apply, ← reindex_alg_equiv_mul, h₀]
simp only [Equiv.symm_symm, reindex_apply, submatrix_diagonal_equiv, reindex_alg_equiv_apply]
#align matrix.pivot.reindex_exists_list_transvec_mul_mul_list_transvec_eq_diagonal Matrix.Pivot.reindex_exists_list_transvec_mul_mul_list_transvec_eq_diagonal
+-/
#print Matrix.Pivot.exists_list_transvec_mul_mul_list_transvec_eq_diagonal_aux /-
/-- Any matrix can be reduced to diagonal form by elementary operations. Formulated here on `Type 0`
@@ -703,6 +773,7 @@ theorem exists_list_transvec_mul_mul_list_transvec_eq_diagonal_aux (n : Type) [F
#align matrix.pivot.exists_list_transvec_mul_mul_list_transvec_eq_diagonal_aux Matrix.Pivot.exists_list_transvec_mul_mul_list_transvec_eq_diagonal_aux
-/
+#print Matrix.Pivot.exists_list_transvec_mul_mul_list_transvec_eq_diagonal /-
/-- Any matrix can be reduced to diagonal form by elementary operations. -/
theorem exists_list_transvec_mul_mul_list_transvec_eq_diagonal (M : Matrix n n 𝕜) :
∃ (L L' : List (TransvectionStruct n 𝕜)) (D : n → 𝕜),
@@ -712,7 +783,9 @@ theorem exists_list_transvec_mul_mul_list_transvec_eq_diagonal (M : Matrix n n
apply reindex_exists_list_transvec_mul_mul_list_transvec_eq_diagonal M e
apply exists_list_transvec_mul_mul_list_transvec_eq_diagonal_aux
#align matrix.pivot.exists_list_transvec_mul_mul_list_transvec_eq_diagonal Matrix.Pivot.exists_list_transvec_mul_mul_list_transvec_eq_diagonal
+-/
+#print Matrix.Pivot.exists_list_transvec_mul_diagonal_mul_list_transvec /-
/-- Any matrix can be written as the product of transvections, a diagonal matrix, and
transvections.-/
theorem exists_list_transvec_mul_diagonal_mul_list_transvec (M : Matrix n n 𝕜) :
@@ -728,6 +801,7 @@ theorem exists_list_transvec_mul_diagonal_mul_list_transvec (M : Matrix n n 𝕜
by simpa [← h, Matrix.mul_assoc]
rw [reverse_inv_prod_mul_prod, prod_mul_reverse_inv_prod, Matrix.one_mul, Matrix.mul_one]
#align matrix.pivot.exists_list_transvec_mul_diagonal_mul_list_transvec Matrix.Pivot.exists_list_transvec_mul_diagonal_mul_list_transvec
+-/
end Pivot
@@ -735,6 +809,7 @@ open Pivot TransvectionStruct
variable {n} [Fintype n]
+#print Matrix.diagonal_transvection_induction /-
/-- Induction principle for matrices based on transvections: if a property is true for all diagonal
matrices, all transvections, and is stable under product, then it is true for all matrices. This is
the useful way to say that matrices are generated by diagonal matrices and transvections.
@@ -764,7 +839,9 @@ theorem diagonal_transvection_induction (P : Matrix n n 𝕜 → Prop) (M : Matr
· simp only [Matrix.mul_assoc, List.prod_cons, mul_eq_mul, List.map] at IH ⊢
exact hmul _ _ (htransvec _) IH
#align matrix.diagonal_transvection_induction Matrix.diagonal_transvection_induction
+-/
+#print Matrix.diagonal_transvection_induction_of_det_ne_zero /-
/-- Induction principle for invertible matrices based on transvections: if a property is true for
all invertible diagonal matrices, all transvections, and is stable under product of invertible
matrices, then it is true for all invertible matrices. This is the useful way to say that
@@ -786,6 +863,7 @@ theorem diagonal_transvection_induction_of_det_ne_zero (P : Matrix n n 𝕜 →
exact ⟨by simp [QA.1, QB.1], hmul A B QA.1 QB.1 QA.2 QB.2⟩
exact this.2
#align matrix.diagonal_transvection_induction_of_det_ne_zero Matrix.diagonal_transvection_induction_of_det_ne_zero
+-/
end Matrix
mathlib commit https://github.com/leanprover-community/mathlib/commit/5f25c089cb34db4db112556f23c50d12da81b297
@@ -586,7 +586,7 @@ theorem exists_isTwoBlockDiagonal_list_transvec_mul_mul_list_transvec
-- when the last coefficient is zero but there is a nonzero coefficient on the last row or the
-- last column, we will first put this nonzero coefficient in last position, and then argue as
-- above.
- push_neg at hM
+ push_neg at hM
simp [not_and_or, is_two_block_diagonal, to_blocks₁₂, to_blocks₂₁, ← Matrix.ext_iff] at H
have : ∃ i : Fin r, M (inl i) (inr star) ≠ 0 ∨ M (inr star) (inl i) ≠ 0 :=
by
@@ -694,7 +694,7 @@ theorem exists_list_transvec_mul_mul_list_transvec_eq_diagonal_aux (n : Type) [F
by
refine' Fintype.equivOfCardEq _
rw [hn]
- convert(@Fintype.card_sum (Fin r) Unit _ _).symm
+ convert (@Fintype.card_sum (Fin r) Unit _ _).symm
simp
apply reindex_exists_list_transvec_mul_mul_list_transvec_eq_diagonal M e
apply
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -428,7 +428,7 @@ theorem listTransvecCol_mul_last_col (hM : M (inr unit) (inr unit) ≠ 0) (i : F
by simp [list_transvec_col]
simp only [Matrix.mul_assoc, A, Matrix.mul_eq_mul, List.prod_cons]
by_cases h : n' = i
- · have hni : n = i := by cases i; simp only [Fin.mk_eq_mk] at h; simp [h]
+ · have hni : n = i := by cases i; simp only [Fin.mk_eq_mk] at h ; simp [h]
rw [h, transvection_mul_apply_same, IH, list_transvec_col_mul_last_row_drop _ _ hn, ← hni]
field_simp [hM]
· have hni : n ≠ i := by rintro rfl; cases i; simpa using h
@@ -496,7 +496,7 @@ theorem mul_listTransvecRow_last_row (hM : M (inr unit) (inr unit) ≠ 0) (i : F
simp only [List.take_succ, A, ← Matrix.mul_assoc, List.prod_append, Matrix.mul_one,
Matrix.mul_eq_mul, List.prod_cons, List.prod_nil, Option.to_list_some]
by_cases h : n' = i
- · have hni : n = i := by cases i; simp only [Fin.mk_eq_mk] at h; simp only [h, coe_mk]
+ · have hni : n = i := by cases i; simp only [Fin.mk_eq_mk] at h ; simp only [h, coe_mk]
have : ¬n.succ ≤ i := by simp only [← hni, n.lt_succ_self, not_le]
simp only [h, mul_transvection_apply_same, List.take, if_false,
mul_list_transvec_row_last_col_take _ _ hnr.le, hni.le, this, if_true, IH hnr.le]
@@ -586,8 +586,8 @@ theorem exists_isTwoBlockDiagonal_list_transvec_mul_mul_list_transvec
-- when the last coefficient is zero but there is a nonzero coefficient on the last row or the
-- last column, we will first put this nonzero coefficient in last position, and then argue as
-- above.
- push_neg at hM
- simp [not_and_or, is_two_block_diagonal, to_blocks₁₂, to_blocks₂₁, ← Matrix.ext_iff] at H
+ push_neg at hM
+ simp [not_and_or, is_two_block_diagonal, to_blocks₁₂, to_blocks₂₁, ← Matrix.ext_iff] at H
have : ∃ i : Fin r, M (inl i) (inr star) ≠ 0 ∨ M (inr star) (inl i) ≠ 0 :=
by
cases H
@@ -601,7 +601,7 @@ theorem exists_isTwoBlockDiagonal_list_transvec_mul_mul_list_transvec
· let M' := transvection (inr Unit.unit) (inl i) 1 ⬝ M
have hM' : M' (inr star) (inr star) ≠ 0 := by simpa [M', hM]
rcases exists_is_two_block_diagonal_of_ne_zero M' hM' with ⟨L, L', hLL'⟩
- rw [Matrix.mul_assoc] at hLL'
+ rw [Matrix.mul_assoc] at hLL'
refine' ⟨L ++ [⟨inr star, inl i, by simp, 1⟩], L', _⟩
simp only [List.map_append, List.prod_append, Matrix.mul_one, to_matrix_mk, List.prod_cons,
List.prod_nil, mul_eq_mul, List.map, Matrix.mul_assoc (L.map to_matrix).Prod]
@@ -622,10 +622,10 @@ diagonal form by elementary operations, then one deduces it for matrices over `f
theorem exists_list_transvec_mul_mul_list_transvec_eq_diagonal_induction
(IH :
∀ M : Matrix (Fin r) (Fin r) 𝕜,
- ∃ (L₀ L₀' : List (TransvectionStruct (Fin r) 𝕜))(D₀ : Fin r → 𝕜),
+ ∃ (L₀ L₀' : List (TransvectionStruct (Fin r) 𝕜)) (D₀ : Fin r → 𝕜),
(L₀.map toMatrix).Prod ⬝ M ⬝ (L₀'.map toMatrix).Prod = diagonal D₀)
(M : Matrix (Sum (Fin r) Unit) (Sum (Fin r) Unit) 𝕜) :
- ∃ (L L' : List (TransvectionStruct (Sum (Fin r) Unit) 𝕜))(D : Sum (Fin r) Unit → 𝕜),
+ ∃ (L L' : List (TransvectionStruct (Sum (Fin r) Unit) 𝕜)) (D : Sum (Fin r) Unit → 𝕜),
(L.map toMatrix).Prod ⬝ M ⬝ (L'.map toMatrix).Prod = diagonal D :=
by
rcases exists_is_two_block_diagonal_list_transvec_mul_mul_list_transvec M with ⟨L₁, L₁', hM⟩
@@ -658,10 +658,10 @@ variable {n p} [Fintype n] [Fintype p]
theorem reindex_exists_list_transvec_mul_mul_list_transvec_eq_diagonal (M : Matrix p p 𝕜)
(e : p ≃ n)
(H :
- ∃ (L L' : List (TransvectionStruct n 𝕜))(D : n → 𝕜),
+ ∃ (L L' : List (TransvectionStruct n 𝕜)) (D : n → 𝕜),
(L.map toMatrix).Prod ⬝ Matrix.reindexAlgEquiv 𝕜 e M ⬝ (L'.map toMatrix).Prod =
diagonal D) :
- ∃ (L L' : List (TransvectionStruct p 𝕜))(D : p → 𝕜),
+ ∃ (L L' : List (TransvectionStruct p 𝕜)) (D : p → 𝕜),
(L.map toMatrix).Prod ⬝ M ⬝ (L'.map toMatrix).Prod = diagonal D :=
by
rcases H with ⟨L₀, L₀', D₀, h₀⟩
@@ -682,13 +682,13 @@ See `exists_list_transvec_mul_mul_list_transvec_eq_diagonal` for the general ver
from this one and reindexing). -/
theorem exists_list_transvec_mul_mul_list_transvec_eq_diagonal_aux (n : Type) [Fintype n]
[DecidableEq n] (M : Matrix n n 𝕜) :
- ∃ (L L' : List (TransvectionStruct n 𝕜))(D : n → 𝕜),
+ ∃ (L L' : List (TransvectionStruct n 𝕜)) (D : n → 𝕜),
(L.map toMatrix).Prod ⬝ M ⬝ (L'.map toMatrix).Prod = diagonal D :=
by
induction' hn : Fintype.card n with r IH generalizing n M
· refine' ⟨List.nil, List.nil, fun _ => 1, _⟩
ext (i j)
- rw [Fintype.card_eq_zero_iff] at hn
+ rw [Fintype.card_eq_zero_iff] at hn
exact hn.elim' i
· have e : n ≃ Sum (Fin r) Unit :=
by
@@ -705,7 +705,7 @@ theorem exists_list_transvec_mul_mul_list_transvec_eq_diagonal_aux (n : Type) [F
/-- Any matrix can be reduced to diagonal form by elementary operations. -/
theorem exists_list_transvec_mul_mul_list_transvec_eq_diagonal (M : Matrix n n 𝕜) :
- ∃ (L L' : List (TransvectionStruct n 𝕜))(D : n → 𝕜),
+ ∃ (L L' : List (TransvectionStruct n 𝕜)) (D : n → 𝕜),
(L.map toMatrix).Prod ⬝ M ⬝ (L'.map toMatrix).Prod = diagonal D :=
by
have e : n ≃ Fin (Fintype.card n) := Fintype.equivOfCardEq (by simp)
@@ -716,7 +716,7 @@ theorem exists_list_transvec_mul_mul_list_transvec_eq_diagonal (M : Matrix n n
/-- Any matrix can be written as the product of transvections, a diagonal matrix, and
transvections.-/
theorem exists_list_transvec_mul_diagonal_mul_list_transvec (M : Matrix n n 𝕜) :
- ∃ (L L' : List (TransvectionStruct n 𝕜))(D : n → 𝕜),
+ ∃ (L L' : List (TransvectionStruct n 𝕜)) (D : n → 𝕜),
M = (L.map toMatrix).Prod ⬝ diagonal D ⬝ (L'.map toMatrix).Prod :=
by
rcases exists_list_transvec_mul_mul_list_transvec_eq_diagonal M with ⟨L, L', D, h⟩
@@ -761,7 +761,7 @@ theorem diagonal_transvection_induction (P : Matrix n n 𝕜 → Prop) (M : Matr
· simp only [← Matrix.mul_assoc, List.prod_cons, mul_eq_mul, List.map]
apply IH
exact hmul _ _ PE (htransvec _)
- · simp only [Matrix.mul_assoc, List.prod_cons, mul_eq_mul, List.map] at IH⊢
+ · simp only [Matrix.mul_assoc, List.prod_cons, mul_eq_mul, List.map] at IH ⊢
exact hmul _ _ (htransvec _) IH
#align matrix.diagonal_transvection_induction Matrix.diagonal_transvection_induction
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -71,7 +71,7 @@ universe u₁ u₂
namespace Matrix
-open Matrix
+open scoped Matrix
variable (n p : Type _) (R : Type u₂) {𝕜 : Type _} [Field 𝕜]
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -93,24 +93,12 @@ def transvection (c : R) : Matrix n n R :=
#align matrix.transvection Matrix.transvection
-/
-/- warning: matrix.transvection_zero -> Matrix.transvection_zero is a dubious translation:
-lean 3 declaration is
- forall {n : Type.{u2}} {R : Type.{u1}} [_inst_2 : DecidableEq.{succ u2} n] [_inst_4 : CommRing.{u1} R] (i : n) (j : n), Eq.{succ (max u2 u1)} (Matrix.{u2, u2, u1} n n R) (Matrix.transvection.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 i j (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 (CommRing.toRing.{u1} R _inst_4)))))))))) (OfNat.ofNat.{max u2 u1} (Matrix.{u2, u2, u1} n n R) 1 (OfNat.mk.{max u2 u1} (Matrix.{u2, u2, u1} n n R) 1 (One.one.{max u2 u1} (Matrix.{u2, u2, u1} n n R) (Matrix.hasOne.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (AddMonoidWithOne.toOne.{u1} R (AddGroupWithOne.toAddMonoidWithOne.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (Ring.toAddCommGroupWithOne.{u1} R (CommRing.toRing.{u1} R _inst_4)))))))))
-but is expected to have type
- forall {n : Type.{u1}} {R : Type.{u2}} [_inst_2 : DecidableEq.{succ u1} n] [_inst_4 : CommRing.{u2} R] (i : n) (j : n), Eq.{max (succ u2) (succ u1)} (Matrix.{u1, u1, u2} n n R) (Matrix.transvection.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 i j (OfNat.ofNat.{u2} R 0 (Zero.toOfNat0.{u2} R (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)))))) (OfNat.ofNat.{max u2 u1} (Matrix.{u1, u1, u2} n n R) 1 (One.toOfNat1.{max u2 u1} (Matrix.{u1, u1, u2} n n R) (Matrix.one.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (Semiring.toOne.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))))))
-Case conversion may be inaccurate. Consider using '#align matrix.transvection_zero Matrix.transvection_zeroₓ'. -/
@[simp]
theorem transvection_zero : transvection i j (0 : R) = 1 := by simp [transvection]
#align matrix.transvection_zero Matrix.transvection_zero
section
-/- warning: matrix.update_row_eq_transvection -> Matrix.updateRow_eq_transvection is a dubious translation:
-lean 3 declaration is
- forall {n : Type.{u2}} {R : Type.{u1}} [_inst_2 : DecidableEq.{succ u2} n] [_inst_4 : CommRing.{u1} R] (i : n) (j : n) [_inst_5 : Finite.{succ u2} n] (c : R), Eq.{succ (max u2 u1)} (Matrix.{u2, u2, u1} n n R) (Matrix.updateRow.{u1, u2, u2} n n R (fun (a : n) (b : n) => _inst_2 a b) (OfNat.ofNat.{max u2 u1} (Matrix.{u2, u2, u1} n n R) 1 (OfNat.mk.{max u2 u1} (Matrix.{u2, u2, u1} n n R) 1 (One.one.{max u2 u1} (Matrix.{u2, u2, u1} n n R) (Matrix.hasOne.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (AddMonoidWithOne.toOne.{u1} R (AddGroupWithOne.toAddMonoidWithOne.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (Ring.toAddCommGroupWithOne.{u1} R (CommRing.toRing.{u1} R _inst_4))))))))) i (HAdd.hAdd.{max u2 u1, max u2 u1, max u2 u1} (n -> R) (n -> R) (n -> R) (instHAdd.{max u2 u1} (n -> R) (Pi.instAdd.{u2, u1} n (fun (ᾰ : n) => R) (fun (i : n) => Distrib.toHasAdd.{u1} R (Ring.toDistrib.{u1} R (CommRing.toRing.{u1} R _inst_4))))) (One.one.{max u2 u1} (Matrix.{u2, u2, u1} n n R) (Matrix.hasOne.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (AddMonoidWithOne.toOne.{u1} R (AddGroupWithOne.toAddMonoidWithOne.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (Ring.toAddCommGroupWithOne.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) i) (SMul.smul.{u1, max u2 u1} R (n -> R) (Function.hasSMul.{u2, u1, u1} n R R (Mul.toSMul.{u1} R (Distrib.toHasMul.{u1} R (Ring.toDistrib.{u1} R (CommRing.toRing.{u1} R _inst_4))))) c (One.one.{max u2 u1} (Matrix.{u2, u2, u1} n n R) (Matrix.hasOne.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (AddMonoidWithOne.toOne.{u1} R (AddGroupWithOne.toAddMonoidWithOne.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (Ring.toAddCommGroupWithOne.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) j)))) (Matrix.transvection.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 i j c)
-but is expected to have type
- forall {n : Type.{u1}} {R : Type.{u2}} [_inst_2 : DecidableEq.{succ u1} n] [_inst_4 : CommRing.{u2} R] (i : n) (j : n) [_inst_5 : Finite.{succ u1} n] (c : R), Eq.{max (succ u2) (succ u1)} (Matrix.{u1, u1, u2} n n R) (Matrix.updateRow.{u2, u1, u1} n n R (fun (a : n) (b : n) => _inst_2 a b) (OfNat.ofNat.{max u2 u1} (Matrix.{u1, u1, u2} n n R) 1 (One.toOfNat1.{max u2 u1} (Matrix.{u1, u1, u2} n n R) (Matrix.one.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (Semiring.toOne.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)))))) i (HAdd.hAdd.{max u2 u1, max u2 u1, max u2 u1} (n -> R) (n -> R) (n -> R) (instHAdd.{max u2 u1} (n -> R) (Pi.instAdd.{u1, u2} n (fun (ᾰ : n) => R) (fun (i : n) => Distrib.toAdd.{u2} R (NonUnitalNonAssocSemiring.toDistrib.{u2} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4)))))))) (OfNat.ofNat.{max u2 u1} (Matrix.{u1, u1, u2} n n R) 1 (One.toOfNat1.{max u2 u1} (Matrix.{u1, u1, u2} n n R) (Matrix.one.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (Semiring.toOne.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))))) i) (HSMul.hSMul.{u2, max u2 u1, max u2 u1} R (n -> R) (n -> R) (instHSMul.{u2, max u2 u1} R (n -> R) (Pi.instSMul.{u1, u2, u2} n R (fun (a._@.Mathlib.Data.Matrix.Basic._hyg.12 : n) => R) (fun (i : n) => Algebra.toSMul.{u2, u2} R R (CommRing.toCommSemiring.{u2} R _inst_4) (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (Algebra.id.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))))) c (OfNat.ofNat.{max u2 u1} (Matrix.{u1, u1, u2} n n R) 1 (One.toOfNat1.{max u2 u1} (Matrix.{u1, u1, u2} n n R) (Matrix.one.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (Semiring.toOne.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))))) j)))) (Matrix.transvection.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 i j c)
-Case conversion may be inaccurate. Consider using '#align matrix.update_row_eq_transvection Matrix.updateRow_eq_transvectionₓ'. -/
/-- A transvection matrix is obtained from the identity by adding `c` times the `j`-th row to
the `i`-th row. -/
theorem updateRow_eq_transvection [Finite n] (c : R) :
@@ -135,69 +123,33 @@ theorem updateRow_eq_transvection [Finite n] (c : R) :
variable [Fintype n]
-/- warning: matrix.transvection_mul_transvection_same -> Matrix.transvection_mul_transvection_same is a dubious translation:
-lean 3 declaration is
- forall {n : Type.{u2}} {R : Type.{u1}} [_inst_2 : DecidableEq.{succ u2} n] [_inst_4 : CommRing.{u1} R] (i : n) (j : n) [_inst_5 : Fintype.{u2} n], (Ne.{succ u2} n i j) -> (forall (c : R) (d : R), Eq.{succ (max u2 u1)} (Matrix.{u2, u2, u1} n n R) (Matrix.mul.{u1, u2, u2, u2} n n n R _inst_5 (Distrib.toHasMul.{u1} R (Ring.toDistrib.{u1} R (CommRing.toRing.{u1} R _inst_4))) (AddCommGroup.toAddCommMonoid.{u1} R (NonUnitalNonAssocRing.toAddCommGroup.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4))))) (Matrix.transvection.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 i j c) (Matrix.transvection.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 i j d)) (Matrix.transvection.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 i j (HAdd.hAdd.{u1, u1, u1} R R R (instHAdd.{u1} R (Distrib.toHasAdd.{u1} R (Ring.toDistrib.{u1} R (CommRing.toRing.{u1} R _inst_4)))) c d)))
-but is expected to have type
- forall {n : Type.{u1}} {R : Type.{u2}} [_inst_2 : DecidableEq.{succ u1} n] [_inst_4 : CommRing.{u2} R] (i : n) (j : n) [_inst_5 : Fintype.{u1} n], (Ne.{succ u1} n i j) -> (forall (c : R) (d : R), Eq.{max (succ u2) (succ u1)} (Matrix.{u1, u1, u2} n n R) (Matrix.mul.{u2, u1, u1, u1} n n n R _inst_5 (NonUnitalNonAssocRing.toMul.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4))))) (Matrix.transvection.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 i j c) (Matrix.transvection.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 i j d)) (Matrix.transvection.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 i j (HAdd.hAdd.{u2, u2, u2} R R R (instHAdd.{u2} R (Distrib.toAdd.{u2} R (NonUnitalNonAssocSemiring.toDistrib.{u2} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4))))))) c d)))
-Case conversion may be inaccurate. Consider using '#align matrix.transvection_mul_transvection_same Matrix.transvection_mul_transvection_sameₓ'. -/
theorem transvection_mul_transvection_same (h : i ≠ j) (c d : R) :
transvection i j c ⬝ transvection i j d = transvection i j (c + d) := by
simp [transvection, Matrix.add_mul, Matrix.mul_add, h, h.symm, add_smul, add_assoc,
std_basis_matrix_add]
#align matrix.transvection_mul_transvection_same Matrix.transvection_mul_transvection_same
-/- warning: matrix.transvection_mul_apply_same -> Matrix.transvection_mul_apply_same is a dubious translation:
-lean 3 declaration is
- forall {n : Type.{u2}} {R : Type.{u1}} [_inst_2 : DecidableEq.{succ u2} n] [_inst_4 : CommRing.{u1} R] (i : n) (j : n) [_inst_5 : Fintype.{u2} n] (b : n) (c : R) (M : Matrix.{u2, u2, u1} n n R), Eq.{succ u1} R (Matrix.mul.{u1, u2, u2, u2} n n n R _inst_5 (Distrib.toHasMul.{u1} R (Ring.toDistrib.{u1} R (CommRing.toRing.{u1} R _inst_4))) (AddCommGroup.toAddCommMonoid.{u1} R (NonUnitalNonAssocRing.toAddCommGroup.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4))))) (Matrix.transvection.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 i j c) M i b) (HAdd.hAdd.{u1, u1, u1} R R R (instHAdd.{u1} R (Distrib.toHasAdd.{u1} R (Ring.toDistrib.{u1} R (CommRing.toRing.{u1} R _inst_4)))) (M i b) (HMul.hMul.{u1, u1, u1} R R R (instHMul.{u1} R (Distrib.toHasMul.{u1} R (Ring.toDistrib.{u1} R (CommRing.toRing.{u1} R _inst_4)))) c (M j b)))
-but is expected to have type
- forall {n : Type.{u1}} {R : Type.{u2}} [_inst_2 : DecidableEq.{succ u1} n] [_inst_4 : CommRing.{u2} R] (i : n) (j : n) [_inst_5 : Fintype.{u1} n] (b : n) (c : R) (M : Matrix.{u1, u1, u2} n n R), Eq.{succ u2} R (Matrix.mul.{u2, u1, u1, u1} n n n R _inst_5 (NonUnitalNonAssocRing.toMul.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4))))) (Matrix.transvection.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 i j c) M i b) (HAdd.hAdd.{u2, u2, u2} R R R (instHAdd.{u2} R (Distrib.toAdd.{u2} R (NonUnitalNonAssocSemiring.toDistrib.{u2} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4))))))) (M i b) (HMul.hMul.{u2, u2, u2} R R R (instHMul.{u2} R (NonUnitalNonAssocRing.toMul.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4))))) c (M j b)))
-Case conversion may be inaccurate. Consider using '#align matrix.transvection_mul_apply_same Matrix.transvection_mul_apply_sameₓ'. -/
@[simp]
theorem transvection_mul_apply_same (b : n) (c : R) (M : Matrix n n R) :
(transvection i j c ⬝ M) i b = M i b + c * M j b := by simp [transvection, Matrix.add_mul]
#align matrix.transvection_mul_apply_same Matrix.transvection_mul_apply_same
-/- warning: matrix.mul_transvection_apply_same -> Matrix.mul_transvection_apply_same is a dubious translation:
-lean 3 declaration is
- forall {n : Type.{u2}} {R : Type.{u1}} [_inst_2 : DecidableEq.{succ u2} n] [_inst_4 : CommRing.{u1} R] (i : n) (j : n) [_inst_5 : Fintype.{u2} n] (a : n) (c : R) (M : Matrix.{u2, u2, u1} n n R), Eq.{succ u1} R (Matrix.mul.{u1, u2, u2, u2} n n n R _inst_5 (Distrib.toHasMul.{u1} R (Ring.toDistrib.{u1} R (CommRing.toRing.{u1} R _inst_4))) (AddCommGroup.toAddCommMonoid.{u1} R (NonUnitalNonAssocRing.toAddCommGroup.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4))))) M (Matrix.transvection.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 i j c) a j) (HAdd.hAdd.{u1, u1, u1} R R R (instHAdd.{u1} R (Distrib.toHasAdd.{u1} R (Ring.toDistrib.{u1} R (CommRing.toRing.{u1} R _inst_4)))) (M a j) (HMul.hMul.{u1, u1, u1} R R R (instHMul.{u1} R (Distrib.toHasMul.{u1} R (Ring.toDistrib.{u1} R (CommRing.toRing.{u1} R _inst_4)))) c (M a i)))
-but is expected to have type
- forall {n : Type.{u1}} {R : Type.{u2}} [_inst_2 : DecidableEq.{succ u1} n] [_inst_4 : CommRing.{u2} R] (i : n) (j : n) [_inst_5 : Fintype.{u1} n] (a : n) (c : R) (M : Matrix.{u1, u1, u2} n n R), Eq.{succ u2} R (Matrix.mul.{u2, u1, u1, u1} n n n R _inst_5 (NonUnitalNonAssocRing.toMul.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4))))) M (Matrix.transvection.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 i j c) a j) (HAdd.hAdd.{u2, u2, u2} R R R (instHAdd.{u2} R (Distrib.toAdd.{u2} R (NonUnitalNonAssocSemiring.toDistrib.{u2} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4))))))) (M a j) (HMul.hMul.{u2, u2, u2} R R R (instHMul.{u2} R (NonUnitalNonAssocRing.toMul.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4))))) c (M a i)))
-Case conversion may be inaccurate. Consider using '#align matrix.mul_transvection_apply_same Matrix.mul_transvection_apply_sameₓ'. -/
@[simp]
theorem mul_transvection_apply_same (a : n) (c : R) (M : Matrix n n R) :
(M ⬝ transvection i j c) a j = M a j + c * M a i := by
simp [transvection, Matrix.mul_add, mul_comm]
#align matrix.mul_transvection_apply_same Matrix.mul_transvection_apply_same
-/- warning: matrix.transvection_mul_apply_of_ne -> Matrix.transvection_mul_apply_of_ne is a dubious translation:
-lean 3 declaration is
- forall {n : Type.{u2}} {R : Type.{u1}} [_inst_2 : DecidableEq.{succ u2} n] [_inst_4 : CommRing.{u1} R] (i : n) (j : n) [_inst_5 : Fintype.{u2} n] (a : n) (b : n), (Ne.{succ u2} n a i) -> (forall (c : R) (M : Matrix.{u2, u2, u1} n n R), Eq.{succ u1} R (Matrix.mul.{u1, u2, u2, u2} n n n R _inst_5 (Distrib.toHasMul.{u1} R (Ring.toDistrib.{u1} R (CommRing.toRing.{u1} R _inst_4))) (AddCommGroup.toAddCommMonoid.{u1} R (NonUnitalNonAssocRing.toAddCommGroup.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4))))) (Matrix.transvection.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 i j c) M a b) (M a b))
-but is expected to have type
- forall {n : Type.{u1}} {R : Type.{u2}} [_inst_2 : DecidableEq.{succ u1} n] [_inst_4 : CommRing.{u2} R] (i : n) (j : n) [_inst_5 : Fintype.{u1} n] (a : n) (b : n), (Ne.{succ u1} n a i) -> (forall (c : R) (M : Matrix.{u1, u1, u2} n n R), Eq.{succ u2} R (Matrix.mul.{u2, u1, u1, u1} n n n R _inst_5 (NonUnitalNonAssocRing.toMul.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4))))) (Matrix.transvection.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 i j c) M a b) (M a b))
-Case conversion may be inaccurate. Consider using '#align matrix.transvection_mul_apply_of_ne Matrix.transvection_mul_apply_of_neₓ'. -/
@[simp]
theorem transvection_mul_apply_of_ne (a b : n) (ha : a ≠ i) (c : R) (M : Matrix n n R) :
(transvection i j c ⬝ M) a b = M a b := by simp [transvection, Matrix.add_mul, ha]
#align matrix.transvection_mul_apply_of_ne Matrix.transvection_mul_apply_of_ne
-/- warning: matrix.mul_transvection_apply_of_ne -> Matrix.mul_transvection_apply_of_ne is a dubious translation:
-lean 3 declaration is
- forall {n : Type.{u2}} {R : Type.{u1}} [_inst_2 : DecidableEq.{succ u2} n] [_inst_4 : CommRing.{u1} R] (i : n) (j : n) [_inst_5 : Fintype.{u2} n] (a : n) (b : n), (Ne.{succ u2} n b j) -> (forall (c : R) (M : Matrix.{u2, u2, u1} n n R), Eq.{succ u1} R (Matrix.mul.{u1, u2, u2, u2} n n n R _inst_5 (Distrib.toHasMul.{u1} R (Ring.toDistrib.{u1} R (CommRing.toRing.{u1} R _inst_4))) (AddCommGroup.toAddCommMonoid.{u1} R (NonUnitalNonAssocRing.toAddCommGroup.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4))))) M (Matrix.transvection.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 i j c) a b) (M a b))
-but is expected to have type
- forall {n : Type.{u1}} {R : Type.{u2}} [_inst_2 : DecidableEq.{succ u1} n] [_inst_4 : CommRing.{u2} R] (i : n) (j : n) [_inst_5 : Fintype.{u1} n] (a : n) (b : n), (Ne.{succ u1} n b j) -> (forall (c : R) (M : Matrix.{u1, u1, u2} n n R), Eq.{succ u2} R (Matrix.mul.{u2, u1, u1, u1} n n n R _inst_5 (NonUnitalNonAssocRing.toMul.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4))))) M (Matrix.transvection.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 i j c) a b) (M a b))
-Case conversion may be inaccurate. Consider using '#align matrix.mul_transvection_apply_of_ne Matrix.mul_transvection_apply_of_neₓ'. -/
@[simp]
theorem mul_transvection_apply_of_ne (a b : n) (hb : b ≠ j) (c : R) (M : Matrix n n R) :
(M ⬝ transvection i j c) a b = M a b := by simp [transvection, Matrix.mul_add, hb]
#align matrix.mul_transvection_apply_of_ne Matrix.mul_transvection_apply_of_ne
-/- warning: matrix.det_transvection_of_ne -> Matrix.det_transvection_of_ne is a dubious translation:
-lean 3 declaration is
- forall {n : Type.{u2}} {R : Type.{u1}} [_inst_2 : DecidableEq.{succ u2} n] [_inst_4 : CommRing.{u1} R] (i : n) (j : n) [_inst_5 : Fintype.{u2} n], (Ne.{succ u2} n i j) -> (forall (c : R), Eq.{succ u1} R (Matrix.det.{u1, u2} n (fun (a : n) (b : n) => _inst_2 a b) _inst_5 R _inst_4 (Matrix.transvection.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 i j c)) (OfNat.ofNat.{u1} R 1 (OfNat.mk.{u1} R 1 (One.one.{u1} R (AddMonoidWithOne.toOne.{u1} R (AddGroupWithOne.toAddMonoidWithOne.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (Ring.toAddCommGroupWithOne.{u1} R (CommRing.toRing.{u1} R _inst_4)))))))))
-but is expected to have type
- forall {n : Type.{u1}} {R : Type.{u2}} [_inst_2 : DecidableEq.{succ u1} n] [_inst_4 : CommRing.{u2} R] (i : n) (j : n) [_inst_5 : Fintype.{u1} n], (Ne.{succ u1} n i j) -> (forall (c : R), Eq.{succ u2} R (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_5 R _inst_4 (Matrix.transvection.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 i j c)) (OfNat.ofNat.{u2} R 1 (One.toOfNat1.{u2} R (Semiring.toOne.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))))))
-Case conversion may be inaccurate. Consider using '#align matrix.det_transvection_of_ne Matrix.det_transvection_of_neₓ'. -/
@[simp]
theorem det_transvection_of_ne (h : i ≠ j) (c : R) : det (transvection i j c) = 1 := by
rw [← update_row_eq_transvection i j, det_update_row_add_smul_self _ h, det_one]
@@ -207,12 +159,6 @@ end
variable (R n)
-/- warning: matrix.transvection_struct -> Matrix.TransvectionStruct is a dubious translation:
-lean 3 declaration is
- forall (n : Type.{u2}) (R : Type.{u1}) [_inst_2 : DecidableEq.{succ u2} n] [_inst_4 : CommRing.{u1} R], Sort.{max (succ u2) (succ u1)}
-but is expected to have type
- Type.{u2} -> Type.{u1} -> Sort.{max (succ u2) (succ u1)}
-Case conversion may be inaccurate. Consider using '#align matrix.transvection_struct Matrix.TransvectionStructₓ'. -/
/-- A structure containing all the information from which one can build a nontrivial transvection.
This structure is easier to manipulate than transvections as one has a direct access to all the
relevant fields. -/
@@ -237,35 +183,17 @@ def toMatrix (t : TransvectionStruct n R) : Matrix n n R :=
#align matrix.transvection_struct.to_matrix Matrix.TransvectionStruct.toMatrix
-/
-/- warning: matrix.transvection_struct.to_matrix_mk -> Matrix.TransvectionStruct.toMatrix_mk is a dubious translation:
-lean 3 declaration is
- forall {n : Type.{u2}} {R : Type.{u1}} [_inst_2 : DecidableEq.{succ u2} n] [_inst_4 : CommRing.{u1} R] (i : n) (j : n) (hij : Ne.{succ u2} n i j) (c : R), Eq.{succ (max u2 u1)} (Matrix.{u2, u2, u1} n n R) (Matrix.TransvectionStruct.toMatrix.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 (Matrix.TransvectionStruct.mk.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 i j hij c)) (Matrix.transvection.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 i j c)
-but is expected to have type
- forall {n : Type.{u1}} {R : Type.{u2}} [_inst_2 : DecidableEq.{succ u1} n] [_inst_4 : CommRing.{u2} R] (i : n) (j : n) (hij : Ne.{succ u1} n i j) (c : R), Eq.{max (succ u2) (succ u1)} (Matrix.{u1, u1, u2} n n R) (Matrix.TransvectionStruct.toMatrix.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 (Matrix.TransvectionStruct.mk.{u2, u1} n R i j hij c)) (Matrix.transvection.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 i j c)
-Case conversion may be inaccurate. Consider using '#align matrix.transvection_struct.to_matrix_mk Matrix.TransvectionStruct.toMatrix_mkₓ'. -/
@[simp]
theorem toMatrix_mk (i j : n) (hij : i ≠ j) (c : R) :
TransvectionStruct.toMatrix ⟨i, j, hij, c⟩ = transvection i j c :=
rfl
#align matrix.transvection_struct.to_matrix_mk Matrix.TransvectionStruct.toMatrix_mk
-/- warning: matrix.transvection_struct.det -> Matrix.TransvectionStruct.det is a dubious translation:
-lean 3 declaration is
- forall {n : Type.{u2}} {R : Type.{u1}} [_inst_2 : DecidableEq.{succ u2} n] [_inst_4 : CommRing.{u1} R] [_inst_5 : Fintype.{u2} n] (t : Matrix.TransvectionStruct.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4), Eq.{succ u1} R (Matrix.det.{u1, u2} n (fun (a : n) (b : n) => _inst_2 a b) _inst_5 R _inst_4 (Matrix.TransvectionStruct.toMatrix.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 t)) (OfNat.ofNat.{u1} R 1 (OfNat.mk.{u1} R 1 (One.one.{u1} R (AddMonoidWithOne.toOne.{u1} R (AddGroupWithOne.toAddMonoidWithOne.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (Ring.toAddCommGroupWithOne.{u1} R (CommRing.toRing.{u1} R _inst_4))))))))
-but is expected to have type
- forall {n : Type.{u1}} {R : Type.{u2}} [_inst_2 : DecidableEq.{succ u1} n] [_inst_4 : CommRing.{u2} R] [_inst_5 : Fintype.{u1} n] (t : Matrix.TransvectionStruct.{u2, u1} n R), Eq.{succ u2} R (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_5 R _inst_4 (Matrix.TransvectionStruct.toMatrix.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 t)) (OfNat.ofNat.{u2} R 1 (One.toOfNat1.{u2} R (Semiring.toOne.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)))))
-Case conversion may be inaccurate. Consider using '#align matrix.transvection_struct.det Matrix.TransvectionStruct.detₓ'. -/
@[simp]
protected theorem det [Fintype n] (t : TransvectionStruct n R) : det t.toMatrix = 1 :=
det_transvection_of_ne _ _ t.hij _
#align matrix.transvection_struct.det Matrix.TransvectionStruct.det
-/- warning: matrix.transvection_struct.det_to_matrix_prod -> Matrix.TransvectionStruct.det_toMatrix_prod is a dubious translation:
-lean 3 declaration is
- forall {n : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : Field.{u2} 𝕜] [_inst_2 : DecidableEq.{succ u1} n] [_inst_5 : Fintype.{u1} n] (L : List.{max u1 u2} (Matrix.TransvectionStruct.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u2} 𝕜 (Field.toEuclideanDomain.{u2} 𝕜 _inst_1)))), Eq.{succ u2} 𝕜 (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_5 𝕜 (EuclideanDomain.toCommRing.{u2} 𝕜 (Field.toEuclideanDomain.{u2} 𝕜 _inst_1)) (List.prod.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.hasMul.{u2, u1} n 𝕜 _inst_5 (Distrib.toHasMul.{u2} 𝕜 (Ring.toDistrib.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))))) (Matrix.hasOne.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (MulZeroClass.toHasZero.{u2} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))))) (AddMonoidWithOne.toOne.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))))) (List.map.{max u1 u2, max u1 u2} (Matrix.TransvectionStruct.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u2} 𝕜 (Field.toEuclideanDomain.{u2} 𝕜 _inst_1))) (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.TransvectionStruct.toMatrix.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u2} 𝕜 (Field.toEuclideanDomain.{u2} 𝕜 _inst_1))) L))) (OfNat.ofNat.{u2} 𝕜 1 (OfNat.mk.{u2} 𝕜 1 (One.one.{u2} 𝕜 (AddMonoidWithOne.toOne.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1)))))))))
-but is expected to have type
- forall {n : Type.{u2}} {𝕜 : Type.{u1}} [_inst_1 : Field.{u1} 𝕜] [_inst_2 : DecidableEq.{succ u2} n] [_inst_5 : Fintype.{u2} n] (L : List.{max u2 u1} (Matrix.TransvectionStruct.{u1, u2} n 𝕜)), Eq.{succ u1} 𝕜 (Matrix.det.{u1, u2} n (fun (a : n) (b : n) => _inst_2 a b) _inst_5 𝕜 (EuclideanDomain.toCommRing.{u1} 𝕜 (Field.toEuclideanDomain.{u1} 𝕜 _inst_1)) (List.prod.{max u2 u1} (Matrix.{u2, u2, u1} n n 𝕜) (Matrix.instMulMatrix.{u1, u2} n 𝕜 _inst_5 (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.one.{u1, u2} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))) (Semiring.toOne.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1))))) (List.map.{max u2 u1, max u2 u1} (Matrix.TransvectionStruct.{u1, u2} n 𝕜) (Matrix.{u2, u2, u1} n n 𝕜) (Matrix.TransvectionStruct.toMatrix.{u1, u2} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u1} 𝕜 (Field.toEuclideanDomain.{u1} 𝕜 _inst_1))) L))) (OfNat.ofNat.{u1} 𝕜 1 (One.toOfNat1.{u1} 𝕜 (Semiring.toOne.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1))))))
-Case conversion may be inaccurate. Consider using '#align matrix.transvection_struct.det_to_matrix_prod Matrix.TransvectionStruct.det_toMatrix_prodₓ'. -/
@[simp]
theorem det_toMatrix_prod [Fintype n] (L : List (TransvectionStruct n 𝕜)) :
det (L.map toMatrix).Prod = 1 := by
@@ -274,12 +202,6 @@ theorem det_toMatrix_prod [Fintype n] (L : List (TransvectionStruct n 𝕜)) :
· simp [IH]
#align matrix.transvection_struct.det_to_matrix_prod Matrix.TransvectionStruct.det_toMatrix_prod
-/- warning: matrix.transvection_struct.inv -> Matrix.TransvectionStruct.inv is a dubious translation:
-lean 3 declaration is
- forall {n : Type.{u2}} {R : Type.{u1}} [_inst_2 : DecidableEq.{succ u2} n] [_inst_4 : CommRing.{u1} R], (Matrix.TransvectionStruct.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) -> (Matrix.TransvectionStruct.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4)
-but is expected to have type
- forall {n : Type.{u2}} {R : Type.{u1}} [_inst_2 : CommRing.{u1} R], (Matrix.TransvectionStruct.{u1, u2} n R) -> (Matrix.TransvectionStruct.{u1, u2} n R)
-Case conversion may be inaccurate. Consider using '#align matrix.transvection_struct.inv Matrix.TransvectionStruct.invₓ'. -/
/-- The inverse of a `transvection_struct`, designed so that `t.inv.to_matrix` is the inverse of
`t.to_matrix`. -/
@[simps]
@@ -295,32 +217,14 @@ section
variable [Fintype n]
-/- warning: matrix.transvection_struct.inv_mul -> Matrix.TransvectionStruct.inv_mul is a dubious translation:
-lean 3 declaration is
- forall {n : Type.{u2}} {R : Type.{u1}} [_inst_2 : DecidableEq.{succ u2} n] [_inst_4 : CommRing.{u1} R] [_inst_5 : Fintype.{u2} n] (t : Matrix.TransvectionStruct.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4), Eq.{succ (max u2 u1)} (Matrix.{u2, u2, u1} n n R) (Matrix.mul.{u1, u2, u2, u2} n n n R _inst_5 (Distrib.toHasMul.{u1} R (Ring.toDistrib.{u1} R (CommRing.toRing.{u1} R _inst_4))) (AddCommGroup.toAddCommMonoid.{u1} R (NonUnitalNonAssocRing.toAddCommGroup.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4))))) (Matrix.TransvectionStruct.toMatrix.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 (Matrix.TransvectionStruct.inv.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 t)) (Matrix.TransvectionStruct.toMatrix.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 t)) (OfNat.ofNat.{max u2 u1} (Matrix.{u2, u2, u1} n n R) 1 (OfNat.mk.{max u2 u1} (Matrix.{u2, u2, u1} n n R) 1 (One.one.{max u2 u1} (Matrix.{u2, u2, u1} n n R) (Matrix.hasOne.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (AddMonoidWithOne.toOne.{u1} R (AddGroupWithOne.toAddMonoidWithOne.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (Ring.toAddCommGroupWithOne.{u1} R (CommRing.toRing.{u1} R _inst_4)))))))))
-but is expected to have type
- forall {n : Type.{u1}} {R : Type.{u2}} [_inst_2 : DecidableEq.{succ u1} n] [_inst_4 : CommRing.{u2} R] [_inst_5 : Fintype.{u1} n] (t : Matrix.TransvectionStruct.{u2, u1} n R), Eq.{max (succ u2) (succ u1)} (Matrix.{u1, u1, u2} n n R) (Matrix.mul.{u2, u1, u1, u1} n n n R _inst_5 (NonUnitalNonAssocRing.toMul.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4))))) (Matrix.TransvectionStruct.toMatrix.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 (Matrix.TransvectionStruct.inv.{u2, u1} n R _inst_4 t)) (Matrix.TransvectionStruct.toMatrix.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 t)) (OfNat.ofNat.{max u2 u1} (Matrix.{u1, u1, u2} n n R) 1 (One.toOfNat1.{max u2 u1} (Matrix.{u1, u1, u2} n n R) (Matrix.one.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (Semiring.toOne.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))))))
-Case conversion may be inaccurate. Consider using '#align matrix.transvection_struct.inv_mul Matrix.TransvectionStruct.inv_mulₓ'. -/
theorem inv_mul (t : TransvectionStruct n R) : t.inv.toMatrix ⬝ t.toMatrix = 1 := by
rcases t with ⟨⟩; simp [to_matrix, transvection_mul_transvection_same, t_hij]
#align matrix.transvection_struct.inv_mul Matrix.TransvectionStruct.inv_mul
-/- warning: matrix.transvection_struct.mul_inv -> Matrix.TransvectionStruct.mul_inv is a dubious translation:
-lean 3 declaration is
- forall {n : Type.{u2}} {R : Type.{u1}} [_inst_2 : DecidableEq.{succ u2} n] [_inst_4 : CommRing.{u1} R] [_inst_5 : Fintype.{u2} n] (t : Matrix.TransvectionStruct.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4), Eq.{succ (max u2 u1)} (Matrix.{u2, u2, u1} n n R) (Matrix.mul.{u1, u2, u2, u2} n n n R _inst_5 (Distrib.toHasMul.{u1} R (Ring.toDistrib.{u1} R (CommRing.toRing.{u1} R _inst_4))) (AddCommGroup.toAddCommMonoid.{u1} R (NonUnitalNonAssocRing.toAddCommGroup.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4))))) (Matrix.TransvectionStruct.toMatrix.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 t) (Matrix.TransvectionStruct.toMatrix.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 (Matrix.TransvectionStruct.inv.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 t))) (OfNat.ofNat.{max u2 u1} (Matrix.{u2, u2, u1} n n R) 1 (OfNat.mk.{max u2 u1} (Matrix.{u2, u2, u1} n n R) 1 (One.one.{max u2 u1} (Matrix.{u2, u2, u1} n n R) (Matrix.hasOne.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (AddMonoidWithOne.toOne.{u1} R (AddGroupWithOne.toAddMonoidWithOne.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (Ring.toAddCommGroupWithOne.{u1} R (CommRing.toRing.{u1} R _inst_4)))))))))
-but is expected to have type
- forall {n : Type.{u1}} {R : Type.{u2}} [_inst_2 : DecidableEq.{succ u1} n] [_inst_4 : CommRing.{u2} R] [_inst_5 : Fintype.{u1} n] (t : Matrix.TransvectionStruct.{u2, u1} n R), Eq.{max (succ u2) (succ u1)} (Matrix.{u1, u1, u2} n n R) (Matrix.mul.{u2, u1, u1, u1} n n n R _inst_5 (NonUnitalNonAssocRing.toMul.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4))))) (Matrix.TransvectionStruct.toMatrix.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 t) (Matrix.TransvectionStruct.toMatrix.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 (Matrix.TransvectionStruct.inv.{u2, u1} n R _inst_4 t))) (OfNat.ofNat.{max u2 u1} (Matrix.{u1, u1, u2} n n R) 1 (One.toOfNat1.{max u2 u1} (Matrix.{u1, u1, u2} n n R) (Matrix.one.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (Semiring.toOne.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))))))
-Case conversion may be inaccurate. Consider using '#align matrix.transvection_struct.mul_inv Matrix.TransvectionStruct.mul_invₓ'. -/
theorem mul_inv (t : TransvectionStruct n R) : t.toMatrix ⬝ t.inv.toMatrix = 1 := by
rcases t with ⟨⟩; simp [to_matrix, transvection_mul_transvection_same, t_hij]
#align matrix.transvection_struct.mul_inv Matrix.TransvectionStruct.mul_inv
-/- warning: matrix.transvection_struct.reverse_inv_prod_mul_prod -> Matrix.TransvectionStruct.reverse_inv_prod_mul_prod is a dubious translation:
-lean 3 declaration is
- forall {n : Type.{u2}} {R : Type.{u1}} [_inst_2 : DecidableEq.{succ u2} n] [_inst_4 : CommRing.{u1} R] [_inst_5 : Fintype.{u2} n] (L : List.{max u2 u1} (Matrix.TransvectionStruct.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4)), Eq.{succ (max u2 u1)} (Matrix.{u2, u2, u1} n n R) (Matrix.mul.{u1, u2, u2, u2} n n n R _inst_5 (Distrib.toHasMul.{u1} R (Ring.toDistrib.{u1} R (CommRing.toRing.{u1} R _inst_4))) (AddCommGroup.toAddCommMonoid.{u1} R (NonUnitalNonAssocRing.toAddCommGroup.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4))))) (List.prod.{max u2 u1} (Matrix.{u2, u2, u1} n n R) (Matrix.hasMul.{u1, u2} n R _inst_5 (Distrib.toHasMul.{u1} R (Ring.toDistrib.{u1} R (CommRing.toRing.{u1} R _inst_4))) (AddCommGroup.toAddCommMonoid.{u1} R (NonUnitalNonAssocRing.toAddCommGroup.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (Matrix.hasOne.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (AddMonoidWithOne.toOne.{u1} R (AddGroupWithOne.toAddMonoidWithOne.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (Ring.toAddCommGroupWithOne.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (List.map.{max u2 u1, max u2 u1} (Matrix.TransvectionStruct.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) (Matrix.{u2, u2, u1} n n R) (Function.comp.{succ (max u2 u1), max (succ u2) (succ u1), succ (max u2 u1)} (Matrix.TransvectionStruct.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) (Matrix.TransvectionStruct.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) (Matrix.{u2, u2, u1} n n R) (Matrix.TransvectionStruct.toMatrix.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) (Matrix.TransvectionStruct.inv.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4)) (List.reverse.{max u2 u1} (Matrix.TransvectionStruct.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) L))) (List.prod.{max u2 u1} (Matrix.{u2, u2, u1} n n R) (Matrix.hasMul.{u1, u2} n R _inst_5 (Distrib.toHasMul.{u1} R (Ring.toDistrib.{u1} R (CommRing.toRing.{u1} R _inst_4))) (AddCommGroup.toAddCommMonoid.{u1} R (NonUnitalNonAssocRing.toAddCommGroup.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (Matrix.hasOne.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (AddMonoidWithOne.toOne.{u1} R (AddGroupWithOne.toAddMonoidWithOne.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (Ring.toAddCommGroupWithOne.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (List.map.{max u2 u1, max u2 u1} (Matrix.TransvectionStruct.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) (Matrix.{u2, u2, u1} n n R) (Matrix.TransvectionStruct.toMatrix.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) L))) (OfNat.ofNat.{max u2 u1} (Matrix.{u2, u2, u1} n n R) 1 (OfNat.mk.{max u2 u1} (Matrix.{u2, u2, u1} n n R) 1 (One.one.{max u2 u1} (Matrix.{u2, u2, u1} n n R) (Matrix.hasOne.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (AddMonoidWithOne.toOne.{u1} R (AddGroupWithOne.toAddMonoidWithOne.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (Ring.toAddCommGroupWithOne.{u1} R (CommRing.toRing.{u1} R _inst_4)))))))))
-but is expected to have type
- forall {n : Type.{u1}} {R : Type.{u2}} [_inst_2 : DecidableEq.{succ u1} n] [_inst_4 : CommRing.{u2} R] [_inst_5 : Fintype.{u1} n] (L : List.{max u1 u2} (Matrix.TransvectionStruct.{u2, u1} n R)), Eq.{max (succ u2) (succ u1)} (Matrix.{u1, u1, u2} n n R) (Matrix.mul.{u2, u1, u1, u1} n n n R _inst_5 (NonUnitalNonAssocRing.toMul.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4))))) (List.prod.{max u2 u1} (Matrix.{u1, u1, u2} n n R) (Matrix.instMulMatrix.{u2, u1} n R _inst_5 (NonUnitalNonAssocRing.toMul.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4)))))) (Matrix.one.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (Semiring.toOne.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)))) (List.map.{max u1 u2, max u1 u2} (Matrix.TransvectionStruct.{u2, u1} n R) (Matrix.{u1, u1, u2} n n R) (Function.comp.{succ (max u1 u2), max (succ u1) (succ u2), succ (max u1 u2)} (Matrix.TransvectionStruct.{u2, u1} n R) (Matrix.TransvectionStruct.{u2, u1} n R) (Matrix.{u1, u1, u2} n n R) (Matrix.TransvectionStruct.toMatrix.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) (Matrix.TransvectionStruct.inv.{u2, u1} n R _inst_4)) (List.reverse.{max u2 u1} (Matrix.TransvectionStruct.{u2, u1} n R) L))) (List.prod.{max u2 u1} (Matrix.{u1, u1, u2} n n R) (Matrix.instMulMatrix.{u2, u1} n R _inst_5 (NonUnitalNonAssocRing.toMul.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4)))))) (Matrix.one.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (Semiring.toOne.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)))) (List.map.{max u1 u2, max u1 u2} (Matrix.TransvectionStruct.{u2, u1} n R) (Matrix.{u1, u1, u2} n n R) (Matrix.TransvectionStruct.toMatrix.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) L))) (OfNat.ofNat.{max u2 u1} (Matrix.{u1, u1, u2} n n R) 1 (One.toOfNat1.{max u2 u1} (Matrix.{u1, u1, u2} n n R) (Matrix.one.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (Semiring.toOne.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))))))
-Case conversion may be inaccurate. Consider using '#align matrix.transvection_struct.reverse_inv_prod_mul_prod Matrix.TransvectionStruct.reverse_inv_prod_mul_prodₓ'. -/
theorem reverse_inv_prod_mul_prod (L : List (TransvectionStruct n R)) :
(L.reverse.map (toMatrix ∘ TransvectionStruct.inv)).Prod ⬝ (L.map toMatrix).Prod = 1 :=
by
@@ -334,12 +238,6 @@ theorem reverse_inv_prod_mul_prod (L : List (TransvectionStruct n R)) :
simpa [inv_mul] using IH
#align matrix.transvection_struct.reverse_inv_prod_mul_prod Matrix.TransvectionStruct.reverse_inv_prod_mul_prod
-/- warning: matrix.transvection_struct.prod_mul_reverse_inv_prod -> Matrix.TransvectionStruct.prod_mul_reverse_inv_prod is a dubious translation:
-lean 3 declaration is
- forall {n : Type.{u2}} {R : Type.{u1}} [_inst_2 : DecidableEq.{succ u2} n] [_inst_4 : CommRing.{u1} R] [_inst_5 : Fintype.{u2} n] (L : List.{max u2 u1} (Matrix.TransvectionStruct.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4)), Eq.{succ (max u2 u1)} (Matrix.{u2, u2, u1} n n R) (Matrix.mul.{u1, u2, u2, u2} n n n R _inst_5 (Distrib.toHasMul.{u1} R (Ring.toDistrib.{u1} R (CommRing.toRing.{u1} R _inst_4))) (AddCommGroup.toAddCommMonoid.{u1} R (NonUnitalNonAssocRing.toAddCommGroup.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4))))) (List.prod.{max u2 u1} (Matrix.{u2, u2, u1} n n R) (Matrix.hasMul.{u1, u2} n R _inst_5 (Distrib.toHasMul.{u1} R (Ring.toDistrib.{u1} R (CommRing.toRing.{u1} R _inst_4))) (AddCommGroup.toAddCommMonoid.{u1} R (NonUnitalNonAssocRing.toAddCommGroup.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (Matrix.hasOne.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (AddMonoidWithOne.toOne.{u1} R (AddGroupWithOne.toAddMonoidWithOne.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (Ring.toAddCommGroupWithOne.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (List.map.{max u2 u1, max u2 u1} (Matrix.TransvectionStruct.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) (Matrix.{u2, u2, u1} n n R) (Matrix.TransvectionStruct.toMatrix.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) L)) (List.prod.{max u2 u1} (Matrix.{u2, u2, u1} n n R) (Matrix.hasMul.{u1, u2} n R _inst_5 (Distrib.toHasMul.{u1} R (Ring.toDistrib.{u1} R (CommRing.toRing.{u1} R _inst_4))) (AddCommGroup.toAddCommMonoid.{u1} R (NonUnitalNonAssocRing.toAddCommGroup.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (Matrix.hasOne.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (AddMonoidWithOne.toOne.{u1} R (AddGroupWithOne.toAddMonoidWithOne.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (Ring.toAddCommGroupWithOne.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (List.map.{max u2 u1, max u2 u1} (Matrix.TransvectionStruct.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) (Matrix.{u2, u2, u1} n n R) (Function.comp.{succ (max u2 u1), max (succ u2) (succ u1), succ (max u2 u1)} (Matrix.TransvectionStruct.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) (Matrix.TransvectionStruct.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) (Matrix.{u2, u2, u1} n n R) (Matrix.TransvectionStruct.toMatrix.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) (Matrix.TransvectionStruct.inv.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4)) (List.reverse.{max u2 u1} (Matrix.TransvectionStruct.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) L)))) (OfNat.ofNat.{max u2 u1} (Matrix.{u2, u2, u1} n n R) 1 (OfNat.mk.{max u2 u1} (Matrix.{u2, u2, u1} n n R) 1 (One.one.{max u2 u1} (Matrix.{u2, u2, u1} n n R) (Matrix.hasOne.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (AddMonoidWithOne.toOne.{u1} R (AddGroupWithOne.toAddMonoidWithOne.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (Ring.toAddCommGroupWithOne.{u1} R (CommRing.toRing.{u1} R _inst_4)))))))))
-but is expected to have type
- forall {n : Type.{u1}} {R : Type.{u2}} [_inst_2 : DecidableEq.{succ u1} n] [_inst_4 : CommRing.{u2} R] [_inst_5 : Fintype.{u1} n] (L : List.{max u1 u2} (Matrix.TransvectionStruct.{u2, u1} n R)), Eq.{max (succ u2) (succ u1)} (Matrix.{u1, u1, u2} n n R) (Matrix.mul.{u2, u1, u1, u1} n n n R _inst_5 (NonUnitalNonAssocRing.toMul.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4))))) (List.prod.{max u2 u1} (Matrix.{u1, u1, u2} n n R) (Matrix.instMulMatrix.{u2, u1} n R _inst_5 (NonUnitalNonAssocRing.toMul.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4)))))) (Matrix.one.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (Semiring.toOne.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)))) (List.map.{max u1 u2, max u1 u2} (Matrix.TransvectionStruct.{u2, u1} n R) (Matrix.{u1, u1, u2} n n R) (Matrix.TransvectionStruct.toMatrix.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) L)) (List.prod.{max u2 u1} (Matrix.{u1, u1, u2} n n R) (Matrix.instMulMatrix.{u2, u1} n R _inst_5 (NonUnitalNonAssocRing.toMul.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4)))))) (Matrix.one.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (Semiring.toOne.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)))) (List.map.{max u1 u2, max u1 u2} (Matrix.TransvectionStruct.{u2, u1} n R) (Matrix.{u1, u1, u2} n n R) (Function.comp.{succ (max u1 u2), max (succ u1) (succ u2), succ (max u1 u2)} (Matrix.TransvectionStruct.{u2, u1} n R) (Matrix.TransvectionStruct.{u2, u1} n R) (Matrix.{u1, u1, u2} n n R) (Matrix.TransvectionStruct.toMatrix.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) (Matrix.TransvectionStruct.inv.{u2, u1} n R _inst_4)) (List.reverse.{max u2 u1} (Matrix.TransvectionStruct.{u2, u1} n R) L)))) (OfNat.ofNat.{max u2 u1} (Matrix.{u1, u1, u2} n n R) 1 (One.toOfNat1.{max u2 u1} (Matrix.{u1, u1, u2} n n R) (Matrix.one.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (Semiring.toOne.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))))))
-Case conversion may be inaccurate. Consider using '#align matrix.transvection_struct.prod_mul_reverse_inv_prod Matrix.TransvectionStruct.prod_mul_reverse_inv_prodₓ'. -/
theorem prod_mul_reverse_inv_prod (L : List (TransvectionStruct n R)) :
(L.map toMatrix).Prod ⬝ (L.reverse.map (toMatrix ∘ TransvectionStruct.inv)).Prod = 1 :=
by
@@ -360,12 +258,6 @@ variable (p)
open Sum
-/- warning: matrix.transvection_struct.sum_inl -> Matrix.TransvectionStruct.sumInl is a dubious translation:
-lean 3 declaration is
- forall {n : Type.{u2}} (p : Type.{u3}) {R : Type.{u1}} [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : DecidableEq.{succ u3} p] [_inst_4 : CommRing.{u1} R], (Matrix.TransvectionStruct.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) -> (Matrix.TransvectionStruct.{u1, max u2 u3} (Sum.{u2, u3} n p) R (fun (a : Sum.{u2, u3} n p) (b : Sum.{u2, u3} n p) => Sum.decidableEq.{u2, u3} n (fun (a : n) (b : n) => _inst_2 a b) p (fun (a : p) (b : p) => _inst_3 a b) a b) _inst_4)
-but is expected to have type
- forall {n : Type.{u2}} (p : Type.{u3}) {R : Type.{u1}}, (Matrix.TransvectionStruct.{u1, u2} n R) -> (Matrix.TransvectionStruct.{u1, max u3 u2} (Sum.{u2, u3} n p) R)
-Case conversion may be inaccurate. Consider using '#align matrix.transvection_struct.sum_inl Matrix.TransvectionStruct.sumInlₓ'. -/
/-- Given a `transvection_struct` on `n`, define the corresponding `transvection_struct` on `n ⊕ p`
using the identity on `p`. -/
def sumInl (t : TransvectionStruct n R) : TransvectionStruct (Sum n p) R
@@ -376,12 +268,6 @@ def sumInl (t : TransvectionStruct n R) : TransvectionStruct (Sum n p) R
c := t.c
#align matrix.transvection_struct.sum_inl Matrix.TransvectionStruct.sumInl
-/- warning: matrix.transvection_struct.to_matrix_sum_inl -> Matrix.TransvectionStruct.toMatrix_sumInl is a dubious translation:
-lean 3 declaration is
- forall {n : Type.{u2}} (p : Type.{u3}) {R : Type.{u1}} [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : DecidableEq.{succ u3} p] [_inst_4 : CommRing.{u1} R] (t : Matrix.TransvectionStruct.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4), Eq.{succ (max (max u2 u3) u1)} (Matrix.{max u2 u3, max u2 u3, u1} (Sum.{u2, u3} n p) (Sum.{u2, u3} n p) R) (Matrix.TransvectionStruct.toMatrix.{u1, max u2 u3} (Sum.{u2, u3} n p) R (fun (a : Sum.{u2, u3} n p) (b : Sum.{u2, u3} n p) => Sum.decidableEq.{u2, u3} n (fun (a : n) (b : n) => _inst_2 a b) p (fun (a : p) (b : p) => (fun (a : p) (b : p) => _inst_3 a b) a b) a b) _inst_4 (Matrix.TransvectionStruct.sumInl.{u1, u2, u3} n p R (fun (a : n) (b : n) => _inst_2 a b) (fun (a : p) (b : p) => _inst_3 a b) _inst_4 t)) (Matrix.fromBlocks.{u2, u3, u2, u3, u1} n p n p R (Matrix.TransvectionStruct.toMatrix.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 t) (OfNat.ofNat.{max u2 u3 u1} (Matrix.{u2, u3, u1} n p R) 0 (OfNat.mk.{max u2 u3 u1} (Matrix.{u2, u3, u1} n p R) 0 (Zero.zero.{max u2 u3 u1} (Matrix.{u2, u3, u1} n p R) (Matrix.hasZero.{u1, u2, u3} n p R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))))))) (OfNat.ofNat.{max u3 u2 u1} (Matrix.{u3, u2, u1} p n R) 0 (OfNat.mk.{max u3 u2 u1} (Matrix.{u3, u2, u1} p n R) 0 (Zero.zero.{max u3 u2 u1} (Matrix.{u3, u2, u1} p n R) (Matrix.hasZero.{u1, u3, u2} p n R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))))))) (OfNat.ofNat.{max u3 u1} (Matrix.{u3, u3, u1} p p R) 1 (OfNat.mk.{max u3 u1} (Matrix.{u3, u3, u1} p p R) 1 (One.one.{max u3 u1} (Matrix.{u3, u3, u1} p p R) (Matrix.hasOne.{u1, u3} p R (fun (a : p) (b : p) => _inst_3 a b) (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (AddMonoidWithOne.toOne.{u1} R (AddGroupWithOne.toAddMonoidWithOne.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (Ring.toAddCommGroupWithOne.{u1} R (CommRing.toRing.{u1} R _inst_4))))))))))
-but is expected to have type
- forall {n : Type.{u2}} (p : Type.{u1}) {R : Type.{u3}} [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : DecidableEq.{succ u1} p] [_inst_4 : CommRing.{u3} R] (t : Matrix.TransvectionStruct.{u3, u2} n R), Eq.{max (max (succ u3) (succ u2)) (succ u1)} (Matrix.{max u2 u1, max u2 u1, u3} (Sum.{u2, u1} n p) (Sum.{u2, u1} n p) R) (Matrix.TransvectionStruct.toMatrix.{u3, max u2 u1} (Sum.{u2, u1} n p) R (fun (a : Sum.{u2, u1} n p) (b : Sum.{u2, u1} n p) => Sum.instDecidableEqSum.{u2, u1} n p (fun (a : n) (b : n) => _inst_2 a b) (fun (a : p) (b : p) => _inst_3 a b) a b) _inst_4 (Matrix.TransvectionStruct.sumInl.{u3, u2, u1} n p R t)) (Matrix.fromBlocks.{u2, u1, u2, u1, u3} n p n p R (Matrix.TransvectionStruct.toMatrix.{u3, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 t) (OfNat.ofNat.{max (max u3 u2) u1} (Matrix.{u2, u1, u3} n p R) 0 (Zero.toOfNat0.{max (max u3 u2) u1} (Matrix.{u2, u1, u3} n p R) (Matrix.zero.{u3, u2, u1} n p R (CommMonoidWithZero.toZero.{u3} R (CommSemiring.toCommMonoidWithZero.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))))) (OfNat.ofNat.{max (max u3 u2) u1} (Matrix.{u1, u2, u3} p n R) 0 (Zero.toOfNat0.{max (max u3 u2) u1} (Matrix.{u1, u2, u3} p n R) (Matrix.zero.{u3, u1, u2} p n R (CommMonoidWithZero.toZero.{u3} R (CommSemiring.toCommMonoidWithZero.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))))) (OfNat.ofNat.{max u3 u1} (Matrix.{u1, u1, u3} p p R) 1 (One.toOfNat1.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Matrix.one.{u3, u1} p R (fun (a : p) (b : p) => _inst_3 a b) (CommMonoidWithZero.toZero.{u3} R (CommSemiring.toCommMonoidWithZero.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Semiring.toOne.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))))))
-Case conversion may be inaccurate. Consider using '#align matrix.transvection_struct.to_matrix_sum_inl Matrix.TransvectionStruct.toMatrix_sumInlₓ'. -/
theorem toMatrix_sumInl (t : TransvectionStruct n R) :
(t.sumInl p).toMatrix = fromBlocks t.toMatrix 0 0 1 :=
by
@@ -394,9 +280,6 @@ theorem toMatrix_sumInl (t : TransvectionStruct n R) :
· by_cases h : a = b <;> simp [transvection_struct.sum_inl, transvection, h]
#align matrix.transvection_struct.to_matrix_sum_inl Matrix.TransvectionStruct.toMatrix_sumInl
-/- warning: matrix.transvection_struct.sum_inl_to_matrix_prod_mul -> Matrix.TransvectionStruct.sumInl_toMatrix_prod_mul is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align matrix.transvection_struct.sum_inl_to_matrix_prod_mul Matrix.TransvectionStruct.sumInl_toMatrix_prod_mulₓ'. -/
@[simp]
theorem sumInl_toMatrix_prod_mul [Fintype n] [Fintype p] (M : Matrix n n R)
(L : List (TransvectionStruct n R)) (N : Matrix p p R) :
@@ -408,9 +291,6 @@ theorem sumInl_toMatrix_prod_mul [Fintype n] [Fintype p] (M : Matrix n n R)
· simp [Matrix.mul_assoc, IH, to_matrix_sum_inl, from_blocks_multiply]
#align matrix.transvection_struct.sum_inl_to_matrix_prod_mul Matrix.TransvectionStruct.sumInl_toMatrix_prod_mul
-/- warning: matrix.transvection_struct.mul_sum_inl_to_matrix_prod -> Matrix.TransvectionStruct.mul_sumInl_toMatrix_prod is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align matrix.transvection_struct.mul_sum_inl_to_matrix_prod Matrix.TransvectionStruct.mul_sumInl_toMatrix_prodₓ'. -/
@[simp]
theorem mul_sumInl_toMatrix_prod [Fintype n] [Fintype p] (M : Matrix n n R)
(L : List (TransvectionStruct n R)) (N : Matrix p p R) :
@@ -424,12 +304,6 @@ theorem mul_sumInl_toMatrix_prod [Fintype n] [Fintype p] (M : Matrix n n R)
variable {p}
-/- warning: matrix.transvection_struct.reindex_equiv -> Matrix.TransvectionStruct.reindexEquiv is a dubious translation:
-lean 3 declaration is
- forall {n : Type.{u2}} {p : Type.{u3}} {R : Type.{u1}} [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : DecidableEq.{succ u3} p] [_inst_4 : CommRing.{u1} R], (Equiv.{succ u2, succ u3} n p) -> (Matrix.TransvectionStruct.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) -> (Matrix.TransvectionStruct.{u1, u3} p R (fun (a : p) (b : p) => _inst_3 a b) _inst_4)
-but is expected to have type
- forall {n : Type.{u2}} {p : Type.{u3}} {R : Type.{u1}}, (Equiv.{succ u2, succ u3} n p) -> (Matrix.TransvectionStruct.{u1, u2} n R) -> (Matrix.TransvectionStruct.{u1, u3} p R)
-Case conversion may be inaccurate. Consider using '#align matrix.transvection_struct.reindex_equiv Matrix.TransvectionStruct.reindexEquivₓ'. -/
/-- Given a `transvection_struct` on `n` and an equivalence between `n` and `p`, define the
corresponding `transvection_struct` on `p`. -/
def reindexEquiv (e : n ≃ p) (t : TransvectionStruct n R) : TransvectionStruct p R
@@ -442,9 +316,6 @@ def reindexEquiv (e : n ≃ p) (t : TransvectionStruct n R) : TransvectionStruct
variable [Fintype n] [Fintype p]
-/- warning: matrix.transvection_struct.to_matrix_reindex_equiv -> Matrix.TransvectionStruct.toMatrix_reindexEquiv is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align matrix.transvection_struct.to_matrix_reindex_equiv Matrix.TransvectionStruct.toMatrix_reindexEquivₓ'. -/
theorem toMatrix_reindexEquiv (e : n ≃ p) (t : TransvectionStruct n R) :
(t.reindexEquiv e).toMatrix = reindexAlgEquiv R e t.toMatrix :=
by
@@ -456,9 +327,6 @@ theorem toMatrix_reindexEquiv (e : n ≃ p) (t : TransvectionStruct n R) :
simp [ha, hb, hab, ← e.apply_eq_iff_eq_symm_apply, std_basis_matrix]
#align matrix.transvection_struct.to_matrix_reindex_equiv Matrix.TransvectionStruct.toMatrix_reindexEquiv
-/- warning: matrix.transvection_struct.to_matrix_reindex_equiv_prod -> Matrix.TransvectionStruct.toMatrix_reindexEquiv_prod is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align matrix.transvection_struct.to_matrix_reindex_equiv_prod Matrix.TransvectionStruct.toMatrix_reindexEquiv_prodₓ'. -/
theorem toMatrix_reindexEquiv_prod (e : n ≃ p) (L : List (TransvectionStruct n R)) :
(L.map (toMatrix ∘ reindexEquiv e)).Prod = reindexAlgEquiv R e (L.map toMatrix).Prod :=
by
@@ -513,12 +381,6 @@ def listTransvecRow : List (Matrix (Sum (Fin r) Unit) (Sum (Fin r) Unit) 𝕜) :
#align matrix.pivot.list_transvec_row Matrix.Pivot.listTransvecRow
-/
-/- warning: matrix.pivot.list_transvec_col_mul_last_row_drop -> Matrix.Pivot.listTransvecCol_mul_last_row_drop is a dubious translation:
-lean 3 declaration is
- forall {𝕜 : Type.{u1}} [_inst_1 : Field.{u1} 𝕜] {r : Nat} (M : Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (i : Sum.{0, 0} (Fin r) Unit) {k : Nat}, (LE.le.{0} Nat Nat.hasLe k r) -> (Eq.{succ u1} 𝕜 (Matrix.mul.{u1, 0, 0, 0} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜 (Sum.fintype.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (Distrib.toHasMul.{u1} 𝕜 (Ring.toDistrib.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) (List.prod.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.hasMul.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (Sum.fintype.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (Distrib.toHasMul.{u1} 𝕜 (Ring.toDistrib.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.hasOne.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.decidableEq.{0, 0} (Fin r) (fun (a : Fin r) (b : Fin r) => Fin.decidableEq r a b) Unit (fun (a : Unit) (b : Unit) => PUnit.decidableEq.{1} a b) a b) (MulZeroClass.toHasZero.{u1} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (AddMonoidWithOne.toOne.{u1} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u1} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u1} 𝕜 (Ring.toAddCommGroupWithOne.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (List.drop.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) k (Matrix.Pivot.listTransvecCol.{u1} 𝕜 _inst_1 r M))) M (Sum.inr.{0, 0} (Fin r) Unit Unit.unit) i) (M (Sum.inr.{0, 0} (Fin r) Unit Unit.unit) i))
-but is expected to have type
- forall {𝕜 : Type.{u1}} [_inst_1 : Field.{u1} 𝕜] {r : Nat} (M : Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (i : Sum.{0, 0} (Fin r) Unit) {k : Nat}, (LE.le.{0} Nat instLENat k r) -> (Eq.{succ u1} 𝕜 (Matrix.mul.{u1, 0, 0, 0} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) (List.prod.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.instMulMatrix.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.one.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.instDecidableEqSum.{0, 0} (Fin r) Unit (fun (a : Fin r) (b : Fin r) => instDecidableEqFin r a b) (fun (a : Unit) (b : Unit) => instDecidableEqPUnit.{1} a b) a b) (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))) (Semiring.toOne.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1))))) (List.drop.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) k (Matrix.Pivot.listTransvecCol.{u1} 𝕜 _inst_1 r M))) M (Sum.inr.{0, 0} (Fin r) Unit Unit.unit) i) (M (Sum.inr.{0, 0} (Fin r) Unit Unit.unit) i))
-Case conversion may be inaccurate. Consider using '#align matrix.pivot.list_transvec_col_mul_last_row_drop Matrix.Pivot.listTransvecCol_mul_last_row_dropₓ'. -/
/-- Multiplying by some of the matrices in `list_transvec_col M` does not change the last row. -/
theorem listTransvecCol_mul_last_row_drop (i : Sum (Fin r) Unit) {k : ℕ} (hk : k ≤ r) :
(((listTransvecCol M).drop k).Prod ⬝ M) (inr unit) i = M (inr unit) i :=
@@ -533,24 +395,12 @@ theorem listTransvecCol_mul_last_row_drop (i : Sum (Fin r) Unit) {k : ℕ} (hk :
simpa [list_transvec_col, Matrix.mul_assoc]
#align matrix.pivot.list_transvec_col_mul_last_row_drop Matrix.Pivot.listTransvecCol_mul_last_row_drop
-/- warning: matrix.pivot.list_transvec_col_mul_last_row -> Matrix.Pivot.listTransvecCol_mul_last_row is a dubious translation:
-lean 3 declaration is
- forall {𝕜 : Type.{u1}} [_inst_1 : Field.{u1} 𝕜] {r : Nat} (M : Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (i : Sum.{0, 0} (Fin r) Unit), Eq.{succ u1} 𝕜 (Matrix.mul.{u1, 0, 0, 0} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜 (Sum.fintype.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (Distrib.toHasMul.{u1} 𝕜 (Ring.toDistrib.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) (List.prod.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.hasMul.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (Sum.fintype.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (Distrib.toHasMul.{u1} 𝕜 (Ring.toDistrib.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.hasOne.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.decidableEq.{0, 0} (Fin r) (fun (a : Fin r) (b : Fin r) => Fin.decidableEq r a b) Unit (fun (a : Unit) (b : Unit) => PUnit.decidableEq.{1} a b) a b) (MulZeroClass.toHasZero.{u1} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (AddMonoidWithOne.toOne.{u1} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u1} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u1} 𝕜 (Ring.toAddCommGroupWithOne.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.Pivot.listTransvecCol.{u1} 𝕜 _inst_1 r M)) M (Sum.inr.{0, 0} (Fin r) Unit Unit.unit) i) (M (Sum.inr.{0, 0} (Fin r) Unit Unit.unit) i)
-but is expected to have type
- forall {𝕜 : Type.{u1}} [_inst_1 : Field.{u1} 𝕜] {r : Nat} (M : Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (i : Sum.{0, 0} (Fin r) Unit), Eq.{succ u1} 𝕜 (Matrix.mul.{u1, 0, 0, 0} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) (List.prod.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.instMulMatrix.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.one.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.instDecidableEqSum.{0, 0} (Fin r) Unit (fun (a : Fin r) (b : Fin r) => instDecidableEqFin r a b) (fun (a : Unit) (b : Unit) => instDecidableEqPUnit.{1} a b) a b) (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))) (Semiring.toOne.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1))))) (Matrix.Pivot.listTransvecCol.{u1} 𝕜 _inst_1 r M)) M (Sum.inr.{0, 0} (Fin r) Unit Unit.unit) i) (M (Sum.inr.{0, 0} (Fin r) Unit Unit.unit) i)
-Case conversion may be inaccurate. Consider using '#align matrix.pivot.list_transvec_col_mul_last_row Matrix.Pivot.listTransvecCol_mul_last_rowₓ'. -/
/-- Multiplying by all the matrices in `list_transvec_col M` does not change the last row. -/
theorem listTransvecCol_mul_last_row (i : Sum (Fin r) Unit) :
((listTransvecCol M).Prod ⬝ M) (inr unit) i = M (inr unit) i := by
simpa using list_transvec_col_mul_last_row_drop M i (zero_le _)
#align matrix.pivot.list_transvec_col_mul_last_row Matrix.Pivot.listTransvecCol_mul_last_row
-/- warning: matrix.pivot.list_transvec_col_mul_last_col -> Matrix.Pivot.listTransvecCol_mul_last_col is a dubious translation:
-lean 3 declaration is
- forall {𝕜 : Type.{u1}} [_inst_1 : Field.{u1} 𝕜] {r : Nat} (M : Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜), (Ne.{succ u1} 𝕜 (M (Sum.inr.{0, 0} (Fin r) Unit Unit.unit) (Sum.inr.{0, 0} (Fin r) Unit Unit.unit)) (OfNat.ofNat.{u1} 𝕜 0 (OfNat.mk.{u1} 𝕜 0 (Zero.zero.{u1} 𝕜 (MulZeroClass.toHasZero.{u1} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))))))) -> (forall (i : Fin r), Eq.{succ u1} 𝕜 (Matrix.mul.{u1, 0, 0, 0} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜 (Sum.fintype.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (Distrib.toHasMul.{u1} 𝕜 (Ring.toDistrib.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) (List.prod.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.hasMul.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (Sum.fintype.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (Distrib.toHasMul.{u1} 𝕜 (Ring.toDistrib.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.hasOne.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.decidableEq.{0, 0} (Fin r) (fun (a : Fin r) (b : Fin r) => Fin.decidableEq r a b) Unit (fun (a : Unit) (b : Unit) => PUnit.decidableEq.{1} a b) a b) (MulZeroClass.toHasZero.{u1} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (AddMonoidWithOne.toOne.{u1} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u1} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u1} 𝕜 (Ring.toAddCommGroupWithOne.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.Pivot.listTransvecCol.{u1} 𝕜 _inst_1 r M)) M (Sum.inl.{0, 0} (Fin r) Unit i) (Sum.inr.{0, 0} (Fin r) Unit Unit.unit)) (OfNat.ofNat.{u1} 𝕜 0 (OfNat.mk.{u1} 𝕜 0 (Zero.zero.{u1} 𝕜 (MulZeroClass.toHasZero.{u1} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))))))))
-but is expected to have type
- forall {𝕜 : Type.{u1}} [_inst_1 : Field.{u1} 𝕜] {r : Nat} (M : Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜), (Ne.{succ u1} 𝕜 (M (Sum.inr.{0, 0} (Fin r) Unit Unit.unit) (Sum.inr.{0, 0} (Fin r) Unit Unit.unit)) (OfNat.ofNat.{u1} 𝕜 0 (Zero.toOfNat0.{u1} 𝕜 (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1))))))) -> (forall (i : Fin r), Eq.{succ u1} 𝕜 (Matrix.mul.{u1, 0, 0, 0} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) (List.prod.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.instMulMatrix.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.one.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.instDecidableEqSum.{0, 0} (Fin r) Unit (fun (a : Fin r) (b : Fin r) => instDecidableEqFin r a b) (fun (a : Unit) (b : Unit) => instDecidableEqPUnit.{1} a b) a b) (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))) (Semiring.toOne.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1))))) (Matrix.Pivot.listTransvecCol.{u1} 𝕜 _inst_1 r M)) M (Sum.inl.{0, 0} (Fin r) Unit i) (Sum.inr.{0, 0} (Fin r) Unit Unit.unit)) (OfNat.ofNat.{u1} 𝕜 0 (Zero.toOfNat0.{u1} 𝕜 (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))))))
-Case conversion may be inaccurate. Consider using '#align matrix.pivot.list_transvec_col_mul_last_col Matrix.Pivot.listTransvecCol_mul_last_colₓ'. -/
/-- Multiplying by all the matrices in `list_transvec_col M` kills all the coefficients in the
last column but the last one. -/
theorem listTransvecCol_mul_last_col (hM : M (inr unit) (inr unit) ≠ 0) (i : Fin r) :
@@ -591,12 +441,6 @@ theorem listTransvecCol_mul_last_col (hM : M (inr unit) (inr unit) ≠ 0) (i : F
· simpa only [not_le] using hi
#align matrix.pivot.list_transvec_col_mul_last_col Matrix.Pivot.listTransvecCol_mul_last_col
-/- warning: matrix.pivot.mul_list_transvec_row_last_col_take -> Matrix.Pivot.mul_listTransvecRow_last_col_take is a dubious translation:
-lean 3 declaration is
- forall {𝕜 : Type.{u1}} [_inst_1 : Field.{u1} 𝕜] {r : Nat} (M : Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (i : Sum.{0, 0} (Fin r) Unit) {k : Nat}, (LE.le.{0} Nat Nat.hasLe k r) -> (Eq.{succ u1} 𝕜 (Matrix.mul.{u1, 0, 0, 0} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜 (Sum.fintype.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (Distrib.toHasMul.{u1} 𝕜 (Ring.toDistrib.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) M (List.prod.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.hasMul.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (Sum.fintype.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (Distrib.toHasMul.{u1} 𝕜 (Ring.toDistrib.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.hasOne.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.decidableEq.{0, 0} (Fin r) (fun (a : Fin r) (b : Fin r) => Fin.decidableEq r a b) Unit (fun (a : Unit) (b : Unit) => PUnit.decidableEq.{1} a b) a b) (MulZeroClass.toHasZero.{u1} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (AddMonoidWithOne.toOne.{u1} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u1} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u1} 𝕜 (Ring.toAddCommGroupWithOne.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (List.take.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) k (Matrix.Pivot.listTransvecRow.{u1} 𝕜 _inst_1 r M))) i (Sum.inr.{0, 0} (Fin r) Unit Unit.unit)) (M i (Sum.inr.{0, 0} (Fin r) Unit Unit.unit)))
-but is expected to have type
- forall {𝕜 : Type.{u1}} [_inst_1 : Field.{u1} 𝕜] {r : Nat} (M : Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (i : Sum.{0, 0} (Fin r) Unit) {k : Nat}, (LE.le.{0} Nat instLENat k r) -> (Eq.{succ u1} 𝕜 (Matrix.mul.{u1, 0, 0, 0} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) M (List.prod.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.instMulMatrix.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.one.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.instDecidableEqSum.{0, 0} (Fin r) Unit (fun (a : Fin r) (b : Fin r) => instDecidableEqFin r a b) (fun (a : Unit) (b : Unit) => instDecidableEqPUnit.{1} a b) a b) (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))) (Semiring.toOne.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1))))) (List.take.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) k (Matrix.Pivot.listTransvecRow.{u1} 𝕜 _inst_1 r M))) i (Sum.inr.{0, 0} (Fin r) Unit Unit.unit)) (M i (Sum.inr.{0, 0} (Fin r) Unit Unit.unit)))
-Case conversion may be inaccurate. Consider using '#align matrix.pivot.mul_list_transvec_row_last_col_take Matrix.Pivot.mul_listTransvecRow_last_col_takeₓ'. -/
/-- Multiplying by some of the matrices in `list_transvec_row M` does not change the last column. -/
theorem mul_listTransvecRow_last_col_take (i : Sum (Fin r) Unit) {k : ℕ} (hk : k ≤ r) :
(M ⬝ ((listTransvecRow M).take k).Prod) i (inr unit) = M i (inr unit) :=
@@ -616,12 +460,6 @@ theorem mul_listTransvecRow_last_col_take (i : Sum (Fin r) Unit) {k : ℕ} (hk :
simp only [Ne.def, not_false_iff]
#align matrix.pivot.mul_list_transvec_row_last_col_take Matrix.Pivot.mul_listTransvecRow_last_col_take
-/- warning: matrix.pivot.mul_list_transvec_row_last_col -> Matrix.Pivot.mul_listTransvecRow_last_col is a dubious translation:
-lean 3 declaration is
- forall {𝕜 : Type.{u1}} [_inst_1 : Field.{u1} 𝕜] {r : Nat} (M : Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (i : Sum.{0, 0} (Fin r) Unit), Eq.{succ u1} 𝕜 (Matrix.mul.{u1, 0, 0, 0} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜 (Sum.fintype.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (Distrib.toHasMul.{u1} 𝕜 (Ring.toDistrib.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) M (List.prod.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.hasMul.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (Sum.fintype.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (Distrib.toHasMul.{u1} 𝕜 (Ring.toDistrib.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.hasOne.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.decidableEq.{0, 0} (Fin r) (fun (a : Fin r) (b : Fin r) => Fin.decidableEq r a b) Unit (fun (a : Unit) (b : Unit) => PUnit.decidableEq.{1} a b) a b) (MulZeroClass.toHasZero.{u1} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (AddMonoidWithOne.toOne.{u1} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u1} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u1} 𝕜 (Ring.toAddCommGroupWithOne.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.Pivot.listTransvecRow.{u1} 𝕜 _inst_1 r M)) i (Sum.inr.{0, 0} (Fin r) Unit Unit.unit)) (M i (Sum.inr.{0, 0} (Fin r) Unit Unit.unit))
-but is expected to have type
- forall {𝕜 : Type.{u1}} [_inst_1 : Field.{u1} 𝕜] {r : Nat} (M : Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (i : Sum.{0, 0} (Fin r) Unit), Eq.{succ u1} 𝕜 (Matrix.mul.{u1, 0, 0, 0} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) M (List.prod.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.instMulMatrix.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.one.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.instDecidableEqSum.{0, 0} (Fin r) Unit (fun (a : Fin r) (b : Fin r) => instDecidableEqFin r a b) (fun (a : Unit) (b : Unit) => instDecidableEqPUnit.{1} a b) a b) (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))) (Semiring.toOne.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1))))) (Matrix.Pivot.listTransvecRow.{u1} 𝕜 _inst_1 r M)) i (Sum.inr.{0, 0} (Fin r) Unit Unit.unit)) (M i (Sum.inr.{0, 0} (Fin r) Unit Unit.unit))
-Case conversion may be inaccurate. Consider using '#align matrix.pivot.mul_list_transvec_row_last_col Matrix.Pivot.mul_listTransvecRow_last_colₓ'. -/
/-- Multiplying by all the matrices in `list_transvec_row M` does not change the last column. -/
theorem mul_listTransvecRow_last_col (i : Sum (Fin r) Unit) :
(M ⬝ (listTransvecRow M).Prod) i (inr unit) = M i (inr unit) :=
@@ -631,12 +469,6 @@ theorem mul_listTransvecRow_last_col (i : Sum (Fin r) Unit) :
simpa using mul_list_transvec_row_last_col_take M i le_rfl
#align matrix.pivot.mul_list_transvec_row_last_col Matrix.Pivot.mul_listTransvecRow_last_col
-/- warning: matrix.pivot.mul_list_transvec_row_last_row -> Matrix.Pivot.mul_listTransvecRow_last_row is a dubious translation:
-lean 3 declaration is
- forall {𝕜 : Type.{u1}} [_inst_1 : Field.{u1} 𝕜] {r : Nat} (M : Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜), (Ne.{succ u1} 𝕜 (M (Sum.inr.{0, 0} (Fin r) Unit Unit.unit) (Sum.inr.{0, 0} (Fin r) Unit Unit.unit)) (OfNat.ofNat.{u1} 𝕜 0 (OfNat.mk.{u1} 𝕜 0 (Zero.zero.{u1} 𝕜 (MulZeroClass.toHasZero.{u1} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))))))) -> (forall (i : Fin r), Eq.{succ u1} 𝕜 (Matrix.mul.{u1, 0, 0, 0} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜 (Sum.fintype.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (Distrib.toHasMul.{u1} 𝕜 (Ring.toDistrib.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) M (List.prod.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.hasMul.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (Sum.fintype.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (Distrib.toHasMul.{u1} 𝕜 (Ring.toDistrib.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.hasOne.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.decidableEq.{0, 0} (Fin r) (fun (a : Fin r) (b : Fin r) => Fin.decidableEq r a b) Unit (fun (a : Unit) (b : Unit) => PUnit.decidableEq.{1} a b) a b) (MulZeroClass.toHasZero.{u1} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (AddMonoidWithOne.toOne.{u1} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u1} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u1} 𝕜 (Ring.toAddCommGroupWithOne.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.Pivot.listTransvecRow.{u1} 𝕜 _inst_1 r M)) (Sum.inr.{0, 0} (Fin r) Unit Unit.unit) (Sum.inl.{0, 0} (Fin r) Unit i)) (OfNat.ofNat.{u1} 𝕜 0 (OfNat.mk.{u1} 𝕜 0 (Zero.zero.{u1} 𝕜 (MulZeroClass.toHasZero.{u1} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))))))))
-but is expected to have type
- forall {𝕜 : Type.{u1}} [_inst_1 : Field.{u1} 𝕜] {r : Nat} (M : Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜), (Ne.{succ u1} 𝕜 (M (Sum.inr.{0, 0} (Fin r) Unit Unit.unit) (Sum.inr.{0, 0} (Fin r) Unit Unit.unit)) (OfNat.ofNat.{u1} 𝕜 0 (Zero.toOfNat0.{u1} 𝕜 (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1))))))) -> (forall (i : Fin r), Eq.{succ u1} 𝕜 (Matrix.mul.{u1, 0, 0, 0} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) M (List.prod.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.instMulMatrix.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.one.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.instDecidableEqSum.{0, 0} (Fin r) Unit (fun (a : Fin r) (b : Fin r) => instDecidableEqFin r a b) (fun (a : Unit) (b : Unit) => instDecidableEqPUnit.{1} a b) a b) (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))) (Semiring.toOne.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1))))) (Matrix.Pivot.listTransvecRow.{u1} 𝕜 _inst_1 r M)) (Sum.inr.{0, 0} (Fin r) Unit Unit.unit) (Sum.inl.{0, 0} (Fin r) Unit i)) (OfNat.ofNat.{u1} 𝕜 0 (Zero.toOfNat0.{u1} 𝕜 (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))))))
-Case conversion may be inaccurate. Consider using '#align matrix.pivot.mul_list_transvec_row_last_row Matrix.Pivot.mul_listTransvecRow_last_rowₓ'. -/
/-- Multiplying by all the matrices in `list_transvec_row M` kills all the coefficients in the
last row but the last one. -/
theorem mul_listTransvecRow_last_row (hM : M (inr unit) (inr unit) ≠ 0) (i : Fin r) :
@@ -678,9 +510,6 @@ theorem mul_listTransvecRow_last_row (hM : M (inr unit) (inr unit) ≠ 0) (i : F
· simpa only [hni.symm, not_le, or_false_iff] using Nat.lt_succ_iff_lt_or_eq.1 hi
#align matrix.pivot.mul_list_transvec_row_last_row Matrix.Pivot.mul_listTransvecRow_last_row
-/- warning: matrix.pivot.list_transvec_col_mul_mul_list_transvec_row_last_col -> Matrix.Pivot.listTransvecCol_mul_mul_listTransvecRow_last_col is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align matrix.pivot.list_transvec_col_mul_mul_list_transvec_row_last_col Matrix.Pivot.listTransvecCol_mul_mul_listTransvecRow_last_colₓ'. -/
/-- Multiplying by all the matrices either in `list_transvec_col M` and `list_transvec_row M` kills
all the coefficients in the last row but the last one. -/
theorem listTransvecCol_mul_mul_listTransvecRow_last_col (hM : M (inr unit) (inr unit) ≠ 0)
@@ -694,9 +523,6 @@ theorem listTransvecCol_mul_mul_listTransvecRow_last_col (hM : M (inr unit) (inr
simpa [list_transvec_col_mul_last_row] using hM
#align matrix.pivot.list_transvec_col_mul_mul_list_transvec_row_last_col Matrix.Pivot.listTransvecCol_mul_mul_listTransvecRow_last_col
-/- warning: matrix.pivot.list_transvec_col_mul_mul_list_transvec_row_last_row -> Matrix.Pivot.listTransvecCol_mul_mul_listTransvecRow_last_row is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align matrix.pivot.list_transvec_col_mul_mul_list_transvec_row_last_row Matrix.Pivot.listTransvecCol_mul_mul_listTransvecRow_last_rowₓ'. -/
/-- Multiplying by all the matrices either in `list_transvec_col M` and `list_transvec_row M` kills
all the coefficients in the last column but the last one. -/
theorem listTransvecCol_mul_mul_listTransvecRow_last_row (hM : M (inr unit) (inr unit) ≠ 0)
@@ -710,12 +536,6 @@ theorem listTransvecCol_mul_mul_listTransvecRow_last_row (hM : M (inr unit) (inr
simpa [mul_list_transvec_row_last_col] using hM
#align matrix.pivot.list_transvec_col_mul_mul_list_transvec_row_last_row Matrix.Pivot.listTransvecCol_mul_mul_listTransvecRow_last_row
-/- warning: matrix.pivot.is_two_block_diagonal_list_transvec_col_mul_mul_list_transvec_row -> Matrix.Pivot.isTwoBlockDiagonal_listTransvecCol_mul_mul_listTransvecRow is a dubious translation:
-lean 3 declaration is
- forall {𝕜 : Type.{u1}} [_inst_1 : Field.{u1} 𝕜] {r : Nat} (M : Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜), (Ne.{succ u1} 𝕜 (M (Sum.inr.{0, 0} (Fin r) Unit Unit.unit) (Sum.inr.{0, 0} (Fin r) Unit Unit.unit)) (OfNat.ofNat.{u1} 𝕜 0 (OfNat.mk.{u1} 𝕜 0 (Zero.zero.{u1} 𝕜 (MulZeroClass.toHasZero.{u1} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))))))) -> (Matrix.IsTwoBlockDiagonal.{0, 0, 0, 0, u1} (Fin r) Unit (Fin r) Unit 𝕜 (MulZeroClass.toHasZero.{u1} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.mul.{u1, 0, 0, 0} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜 (Sum.fintype.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (Distrib.toHasMul.{u1} 𝕜 (Ring.toDistrib.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) (Matrix.mul.{u1, 0, 0, 0} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜 (Sum.fintype.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (Distrib.toHasMul.{u1} 𝕜 (Ring.toDistrib.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) (List.prod.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.hasMul.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (Sum.fintype.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (Distrib.toHasMul.{u1} 𝕜 (Ring.toDistrib.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.hasOne.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.decidableEq.{0, 0} (Fin r) (fun (a : Fin r) (b : Fin r) => Fin.decidableEq r a b) Unit (fun (a : Unit) (b : Unit) => PUnit.decidableEq.{1} a b) a b) (MulZeroClass.toHasZero.{u1} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (AddMonoidWithOne.toOne.{u1} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u1} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u1} 𝕜 (Ring.toAddCommGroupWithOne.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.Pivot.listTransvecCol.{u1} 𝕜 _inst_1 r M)) M) (List.prod.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.hasMul.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (Sum.fintype.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (Distrib.toHasMul.{u1} 𝕜 (Ring.toDistrib.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.hasOne.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.decidableEq.{0, 0} (Fin r) (fun (a : Fin r) (b : Fin r) => Fin.decidableEq r a b) Unit (fun (a : Unit) (b : Unit) => PUnit.decidableEq.{1} a b) a b) (MulZeroClass.toHasZero.{u1} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (AddMonoidWithOne.toOne.{u1} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u1} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u1} 𝕜 (Ring.toAddCommGroupWithOne.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.Pivot.listTransvecRow.{u1} 𝕜 _inst_1 r M))))
-but is expected to have type
- forall {𝕜 : Type.{u1}} [_inst_1 : Field.{u1} 𝕜] {r : Nat} (M : Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜), (Ne.{succ u1} 𝕜 (M (Sum.inr.{0, 0} (Fin r) Unit Unit.unit) (Sum.inr.{0, 0} (Fin r) Unit Unit.unit)) (OfNat.ofNat.{u1} 𝕜 0 (Zero.toOfNat0.{u1} 𝕜 (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1))))))) -> (Matrix.IsTwoBlockDiagonal.{0, 0, 0, 0, u1} (Fin r) Unit (Fin r) Unit 𝕜 (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))) (Matrix.mul.{u1, 0, 0, 0} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) (Matrix.mul.{u1, 0, 0, 0} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) (List.prod.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.instMulMatrix.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.one.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.instDecidableEqSum.{0, 0} (Fin r) Unit (fun (a : Fin r) (b : Fin r) => instDecidableEqFin r a b) (fun (a : Unit) (b : Unit) => instDecidableEqPUnit.{1} a b) a b) (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))) (Semiring.toOne.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1))))) (Matrix.Pivot.listTransvecCol.{u1} 𝕜 _inst_1 r M)) M) (List.prod.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.instMulMatrix.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.one.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.instDecidableEqSum.{0, 0} (Fin r) Unit (fun (a : Fin r) (b : Fin r) => instDecidableEqFin r a b) (fun (a : Unit) (b : Unit) => instDecidableEqPUnit.{1} a b) a b) (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))) (Semiring.toOne.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1))))) (Matrix.Pivot.listTransvecRow.{u1} 𝕜 _inst_1 r M))))
-Case conversion may be inaccurate. Consider using '#align matrix.pivot.is_two_block_diagonal_list_transvec_col_mul_mul_list_transvec_row Matrix.Pivot.isTwoBlockDiagonal_listTransvecCol_mul_mul_listTransvecRowₓ'. -/
/-- Multiplying by all the matrices either in `list_transvec_col M` and `list_transvec_row M` turns
the matrix in block-diagonal form. -/
theorem isTwoBlockDiagonal_listTransvecCol_mul_mul_listTransvecRow
@@ -731,9 +551,6 @@ theorem isTwoBlockDiagonal_listTransvecCol_mul_mul_listTransvecRow
simp [to_blocks₂₁, this, list_transvec_col_mul_mul_list_transvec_row_last_col M hM]
#align matrix.pivot.is_two_block_diagonal_list_transvec_col_mul_mul_list_transvec_row Matrix.Pivot.isTwoBlockDiagonal_listTransvecCol_mul_mul_listTransvecRow
-/- warning: matrix.pivot.exists_is_two_block_diagonal_of_ne_zero -> Matrix.Pivot.exists_isTwoBlockDiagonal_of_ne_zero is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align matrix.pivot.exists_is_two_block_diagonal_of_ne_zero Matrix.Pivot.exists_isTwoBlockDiagonal_of_ne_zeroₓ'. -/
/-- There exist two lists of `transvection_struct` such that multiplying by them on the left and
on the right makes a matrix block-diagonal, when the last coefficient is nonzero. -/
theorem exists_isTwoBlockDiagonal_of_ne_zero (hM : M (inr unit) (inr unit) ≠ 0) :
@@ -837,9 +654,6 @@ theorem exists_list_transvec_mul_mul_list_transvec_eq_diagonal_induction
variable {n p} [Fintype n] [Fintype p]
-/- warning: matrix.pivot.reindex_exists_list_transvec_mul_mul_list_transvec_eq_diagonal -> Matrix.Pivot.reindex_exists_list_transvec_mul_mul_list_transvec_eq_diagonal is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align matrix.pivot.reindex_exists_list_transvec_mul_mul_list_transvec_eq_diagonal Matrix.Pivot.reindex_exists_list_transvec_mul_mul_list_transvec_eq_diagonalₓ'. -/
/-- Reduction to diagonal form by elementary operations is invariant under reindexing. -/
theorem reindex_exists_list_transvec_mul_mul_list_transvec_eq_diagonal (M : Matrix p p 𝕜)
(e : p ≃ n)
@@ -889,12 +703,6 @@ theorem exists_list_transvec_mul_mul_list_transvec_eq_diagonal_aux (n : Type) [F
#align matrix.pivot.exists_list_transvec_mul_mul_list_transvec_eq_diagonal_aux Matrix.Pivot.exists_list_transvec_mul_mul_list_transvec_eq_diagonal_aux
-/
-/- warning: matrix.pivot.exists_list_transvec_mul_mul_list_transvec_eq_diagonal -> Matrix.Pivot.exists_list_transvec_mul_mul_list_transvec_eq_diagonal is a dubious translation:
-lean 3 declaration is
- forall {n : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : Field.{u2} 𝕜] [_inst_2 : DecidableEq.{succ u1} n] [_inst_5 : Fintype.{u1} n] (M : Matrix.{u1, u1, u2} n n 𝕜), Exists.{succ (max u1 u2)} (List.{max u1 u2} (Matrix.TransvectionStruct.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u2} 𝕜 (Field.toEuclideanDomain.{u2} 𝕜 _inst_1)))) (fun (L : List.{max u1 u2} (Matrix.TransvectionStruct.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u2} 𝕜 (Field.toEuclideanDomain.{u2} 𝕜 _inst_1)))) => Exists.{succ (max u1 u2)} (List.{max u1 u2} (Matrix.TransvectionStruct.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u2} 𝕜 (Field.toEuclideanDomain.{u2} 𝕜 _inst_1)))) (fun (L' : List.{max u1 u2} (Matrix.TransvectionStruct.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u2} 𝕜 (Field.toEuclideanDomain.{u2} 𝕜 _inst_1)))) => Exists.{max (succ u1) (succ u2)} (n -> 𝕜) (fun (D : n -> 𝕜) => Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.mul.{u2, u1, u1, u1} n n n 𝕜 _inst_5 (Distrib.toHasMul.{u2} 𝕜 (Ring.toDistrib.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1)))))) (Matrix.mul.{u2, u1, u1, u1} n n n 𝕜 _inst_5 (Distrib.toHasMul.{u2} 𝕜 (Ring.toDistrib.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1)))))) (List.prod.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.hasMul.{u2, u1} n 𝕜 _inst_5 (Distrib.toHasMul.{u2} 𝕜 (Ring.toDistrib.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))))) (Matrix.hasOne.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (MulZeroClass.toHasZero.{u2} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))))) (AddMonoidWithOne.toOne.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))))) (List.map.{max u1 u2, max u1 u2} (Matrix.TransvectionStruct.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u2} 𝕜 (Field.toEuclideanDomain.{u2} 𝕜 _inst_1))) (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.TransvectionStruct.toMatrix.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u2} 𝕜 (Field.toEuclideanDomain.{u2} 𝕜 _inst_1))) L)) M) (List.prod.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.hasMul.{u2, u1} n 𝕜 _inst_5 (Distrib.toHasMul.{u2} 𝕜 (Ring.toDistrib.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))))) (Matrix.hasOne.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (MulZeroClass.toHasZero.{u2} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))))) (AddMonoidWithOne.toOne.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))))) (List.map.{max u1 u2, max u1 u2} (Matrix.TransvectionStruct.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u2} 𝕜 (Field.toEuclideanDomain.{u2} 𝕜 _inst_1))) (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.TransvectionStruct.toMatrix.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u2} 𝕜 (Field.toEuclideanDomain.{u2} 𝕜 _inst_1))) L'))) (Matrix.diagonal.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (MulZeroClass.toHasZero.{u2} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))))) D))))
-but is expected to have type
- forall {n : Type.{u2}} {𝕜 : Type.{u1}} [_inst_1 : Field.{u1} 𝕜] [_inst_2 : DecidableEq.{succ u2} n] [_inst_5 : Fintype.{u2} n] (M : Matrix.{u2, u2, u1} n n 𝕜), Exists.{max (succ u2) (succ u1)} (List.{max u2 u1} (Matrix.TransvectionStruct.{u1, u2} n 𝕜)) (fun (L : List.{max u2 u1} (Matrix.TransvectionStruct.{u1, u2} n 𝕜)) => Exists.{max (succ u2) (succ u1)} (List.{max u2 u1} (Matrix.TransvectionStruct.{u1, u2} n 𝕜)) (fun (L' : List.{max u2 u1} (Matrix.TransvectionStruct.{u1, u2} n 𝕜)) => Exists.{max (succ u2) (succ u1)} (n -> 𝕜) (fun (D : n -> 𝕜) => Eq.{max (succ u2) (succ u1)} (Matrix.{u2, u2, u1} n n 𝕜) (Matrix.mul.{u1, u2, u2, u2} n n n 𝕜 _inst_5 (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) (Matrix.mul.{u1, u2, u2, u2} n n n 𝕜 _inst_5 (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) (List.prod.{max u2 u1} (Matrix.{u2, u2, u1} n n 𝕜) (Matrix.instMulMatrix.{u1, u2} n 𝕜 _inst_5 (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.one.{u1, u2} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))) (Semiring.toOne.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1))))) (List.map.{max u2 u1, max u2 u1} (Matrix.TransvectionStruct.{u1, u2} n 𝕜) (Matrix.{u2, u2, u1} n n 𝕜) (Matrix.TransvectionStruct.toMatrix.{u1, u2} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u1} 𝕜 (Field.toEuclideanDomain.{u1} 𝕜 _inst_1))) L)) M) (List.prod.{max u2 u1} (Matrix.{u2, u2, u1} n n 𝕜) (Matrix.instMulMatrix.{u1, u2} n 𝕜 _inst_5 (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.one.{u1, u2} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))) (Semiring.toOne.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1))))) (List.map.{max u2 u1, max u2 u1} (Matrix.TransvectionStruct.{u1, u2} n 𝕜) (Matrix.{u2, u2, u1} n n 𝕜) (Matrix.TransvectionStruct.toMatrix.{u1, u2} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u1} 𝕜 (Field.toEuclideanDomain.{u1} 𝕜 _inst_1))) L'))) (Matrix.diagonal.{u1, u2} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))) D))))
-Case conversion may be inaccurate. Consider using '#align matrix.pivot.exists_list_transvec_mul_mul_list_transvec_eq_diagonal Matrix.Pivot.exists_list_transvec_mul_mul_list_transvec_eq_diagonalₓ'. -/
/-- Any matrix can be reduced to diagonal form by elementary operations. -/
theorem exists_list_transvec_mul_mul_list_transvec_eq_diagonal (M : Matrix n n 𝕜) :
∃ (L L' : List (TransvectionStruct n 𝕜))(D : n → 𝕜),
@@ -905,12 +713,6 @@ theorem exists_list_transvec_mul_mul_list_transvec_eq_diagonal (M : Matrix n n
apply exists_list_transvec_mul_mul_list_transvec_eq_diagonal_aux
#align matrix.pivot.exists_list_transvec_mul_mul_list_transvec_eq_diagonal Matrix.Pivot.exists_list_transvec_mul_mul_list_transvec_eq_diagonal
-/- warning: matrix.pivot.exists_list_transvec_mul_diagonal_mul_list_transvec -> Matrix.Pivot.exists_list_transvec_mul_diagonal_mul_list_transvec is a dubious translation:
-lean 3 declaration is
- forall {n : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : Field.{u2} 𝕜] [_inst_2 : DecidableEq.{succ u1} n] [_inst_5 : Fintype.{u1} n] (M : Matrix.{u1, u1, u2} n n 𝕜), Exists.{succ (max u1 u2)} (List.{max u1 u2} (Matrix.TransvectionStruct.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u2} 𝕜 (Field.toEuclideanDomain.{u2} 𝕜 _inst_1)))) (fun (L : List.{max u1 u2} (Matrix.TransvectionStruct.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u2} 𝕜 (Field.toEuclideanDomain.{u2} 𝕜 _inst_1)))) => Exists.{succ (max u1 u2)} (List.{max u1 u2} (Matrix.TransvectionStruct.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u2} 𝕜 (Field.toEuclideanDomain.{u2} 𝕜 _inst_1)))) (fun (L' : List.{max u1 u2} (Matrix.TransvectionStruct.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u2} 𝕜 (Field.toEuclideanDomain.{u2} 𝕜 _inst_1)))) => Exists.{max (succ u1) (succ u2)} (n -> 𝕜) (fun (D : n -> 𝕜) => Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n 𝕜) M (Matrix.mul.{u2, u1, u1, u1} n n n 𝕜 _inst_5 (Distrib.toHasMul.{u2} 𝕜 (Ring.toDistrib.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1)))))) (Matrix.mul.{u2, u1, u1, u1} n n n 𝕜 _inst_5 (Distrib.toHasMul.{u2} 𝕜 (Ring.toDistrib.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1)))))) (List.prod.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.hasMul.{u2, u1} n 𝕜 _inst_5 (Distrib.toHasMul.{u2} 𝕜 (Ring.toDistrib.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))))) (Matrix.hasOne.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (MulZeroClass.toHasZero.{u2} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))))) (AddMonoidWithOne.toOne.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))))) (List.map.{max u1 u2, max u1 u2} (Matrix.TransvectionStruct.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u2} 𝕜 (Field.toEuclideanDomain.{u2} 𝕜 _inst_1))) (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.TransvectionStruct.toMatrix.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u2} 𝕜 (Field.toEuclideanDomain.{u2} 𝕜 _inst_1))) L)) (Matrix.diagonal.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (MulZeroClass.toHasZero.{u2} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))))) D)) (List.prod.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.hasMul.{u2, u1} n 𝕜 _inst_5 (Distrib.toHasMul.{u2} 𝕜 (Ring.toDistrib.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))))) (Matrix.hasOne.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (MulZeroClass.toHasZero.{u2} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))))) (AddMonoidWithOne.toOne.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))))) (List.map.{max u1 u2, max u1 u2} (Matrix.TransvectionStruct.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u2} 𝕜 (Field.toEuclideanDomain.{u2} 𝕜 _inst_1))) (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.TransvectionStruct.toMatrix.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u2} 𝕜 (Field.toEuclideanDomain.{u2} 𝕜 _inst_1))) L'))))))
-but is expected to have type
- forall {n : Type.{u2}} {𝕜 : Type.{u1}} [_inst_1 : Field.{u1} 𝕜] [_inst_2 : DecidableEq.{succ u2} n] [_inst_5 : Fintype.{u2} n] (M : Matrix.{u2, u2, u1} n n 𝕜), Exists.{max (succ u2) (succ u1)} (List.{max u2 u1} (Matrix.TransvectionStruct.{u1, u2} n 𝕜)) (fun (L : List.{max u2 u1} (Matrix.TransvectionStruct.{u1, u2} n 𝕜)) => Exists.{max (succ u2) (succ u1)} (List.{max u2 u1} (Matrix.TransvectionStruct.{u1, u2} n 𝕜)) (fun (L' : List.{max u2 u1} (Matrix.TransvectionStruct.{u1, u2} n 𝕜)) => Exists.{max (succ u2) (succ u1)} (n -> 𝕜) (fun (D : n -> 𝕜) => Eq.{max (succ u2) (succ u1)} (Matrix.{u2, u2, u1} n n 𝕜) M (Matrix.mul.{u1, u2, u2, u2} n n n 𝕜 _inst_5 (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) (Matrix.mul.{u1, u2, u2, u2} n n n 𝕜 _inst_5 (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) (List.prod.{max u2 u1} (Matrix.{u2, u2, u1} n n 𝕜) (Matrix.instMulMatrix.{u1, u2} n 𝕜 _inst_5 (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.one.{u1, u2} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))) (Semiring.toOne.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1))))) (List.map.{max u2 u1, max u2 u1} (Matrix.TransvectionStruct.{u1, u2} n 𝕜) (Matrix.{u2, u2, u1} n n 𝕜) (Matrix.TransvectionStruct.toMatrix.{u1, u2} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u1} 𝕜 (Field.toEuclideanDomain.{u1} 𝕜 _inst_1))) L)) (Matrix.diagonal.{u1, u2} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))) D)) (List.prod.{max u2 u1} (Matrix.{u2, u2, u1} n n 𝕜) (Matrix.instMulMatrix.{u1, u2} n 𝕜 _inst_5 (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.one.{u1, u2} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))) (Semiring.toOne.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1))))) (List.map.{max u2 u1, max u2 u1} (Matrix.TransvectionStruct.{u1, u2} n 𝕜) (Matrix.{u2, u2, u1} n n 𝕜) (Matrix.TransvectionStruct.toMatrix.{u1, u2} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u1} 𝕜 (Field.toEuclideanDomain.{u1} 𝕜 _inst_1))) L'))))))
-Case conversion may be inaccurate. Consider using '#align matrix.pivot.exists_list_transvec_mul_diagonal_mul_list_transvec Matrix.Pivot.exists_list_transvec_mul_diagonal_mul_list_transvecₓ'. -/
/-- Any matrix can be written as the product of transvections, a diagonal matrix, and
transvections.-/
theorem exists_list_transvec_mul_diagonal_mul_list_transvec (M : Matrix n n 𝕜) :
@@ -933,12 +735,6 @@ open Pivot TransvectionStruct
variable {n} [Fintype n]
-/- warning: matrix.diagonal_transvection_induction -> Matrix.diagonal_transvection_induction is a dubious translation:
-lean 3 declaration is
- forall {n : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : Field.{u2} 𝕜] [_inst_2 : DecidableEq.{succ u1} n] [_inst_5 : Fintype.{u1} n] (P : (Matrix.{u1, u1, u2} n n 𝕜) -> Prop) (M : Matrix.{u1, u1, u2} n n 𝕜), (forall (D : n -> 𝕜), (Eq.{succ u2} 𝕜 (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_5 𝕜 (EuclideanDomain.toCommRing.{u2} 𝕜 (Field.toEuclideanDomain.{u2} 𝕜 _inst_1)) (Matrix.diagonal.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (MulZeroClass.toHasZero.{u2} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))))) D)) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_5 𝕜 (EuclideanDomain.toCommRing.{u2} 𝕜 (Field.toEuclideanDomain.{u2} 𝕜 _inst_1)) M)) -> (P (Matrix.diagonal.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (MulZeroClass.toHasZero.{u2} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))))) D))) -> (forall (t : Matrix.TransvectionStruct.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u2} 𝕜 (Field.toEuclideanDomain.{u2} 𝕜 _inst_1))), P (Matrix.TransvectionStruct.toMatrix.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u2} 𝕜 (Field.toEuclideanDomain.{u2} 𝕜 _inst_1)) t)) -> (forall (A : Matrix.{u1, u1, u2} n n 𝕜) (B : Matrix.{u1, u1, u2} n n 𝕜), (P A) -> (P B) -> (P (Matrix.mul.{u2, u1, u1, u1} n n n 𝕜 _inst_5 (Distrib.toHasMul.{u2} 𝕜 (Ring.toDistrib.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1)))))) A B))) -> (P M)
-but is expected to have type
- forall {n : Type.{u2}} {𝕜 : Type.{u1}} [_inst_1 : Field.{u1} 𝕜] [_inst_2 : DecidableEq.{succ u2} n] [_inst_5 : Fintype.{u2} n] (P : (Matrix.{u2, u2, u1} n n 𝕜) -> Prop) (M : Matrix.{u2, u2, u1} n n 𝕜), (forall (D : n -> 𝕜), (Eq.{succ u1} 𝕜 (Matrix.det.{u1, u2} n (fun (a : n) (b : n) => _inst_2 a b) _inst_5 𝕜 (EuclideanDomain.toCommRing.{u1} 𝕜 (Field.toEuclideanDomain.{u1} 𝕜 _inst_1)) (Matrix.diagonal.{u1, u2} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))) D)) (Matrix.det.{u1, u2} n (fun (a : n) (b : n) => _inst_2 a b) _inst_5 𝕜 (EuclideanDomain.toCommRing.{u1} 𝕜 (Field.toEuclideanDomain.{u1} 𝕜 _inst_1)) M)) -> (P (Matrix.diagonal.{u1, u2} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))) D))) -> (forall (t : Matrix.TransvectionStruct.{u1, u2} n 𝕜), P (Matrix.TransvectionStruct.toMatrix.{u1, u2} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u1} 𝕜 (Field.toEuclideanDomain.{u1} 𝕜 _inst_1)) t)) -> (forall (A : Matrix.{u2, u2, u1} n n 𝕜) (B : Matrix.{u2, u2, u1} n n 𝕜), (P A) -> (P B) -> (P (Matrix.mul.{u1, u2, u2, u2} n n n 𝕜 _inst_5 (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) A B))) -> (P M)
-Case conversion may be inaccurate. Consider using '#align matrix.diagonal_transvection_induction Matrix.diagonal_transvection_inductionₓ'. -/
/-- Induction principle for matrices based on transvections: if a property is true for all diagonal
matrices, all transvections, and is stable under product, then it is true for all matrices. This is
the useful way to say that matrices are generated by diagonal matrices and transvections.
@@ -969,12 +765,6 @@ theorem diagonal_transvection_induction (P : Matrix n n 𝕜 → Prop) (M : Matr
exact hmul _ _ (htransvec _) IH
#align matrix.diagonal_transvection_induction Matrix.diagonal_transvection_induction
-/- warning: matrix.diagonal_transvection_induction_of_det_ne_zero -> Matrix.diagonal_transvection_induction_of_det_ne_zero is a dubious translation:
-lean 3 declaration is
- forall {n : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : Field.{u2} 𝕜] [_inst_2 : DecidableEq.{succ u1} n] [_inst_5 : Fintype.{u1} n] (P : (Matrix.{u1, u1, u2} n n 𝕜) -> Prop) (M : Matrix.{u1, u1, u2} n n 𝕜), (Ne.{succ u2} 𝕜 (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_5 𝕜 (EuclideanDomain.toCommRing.{u2} 𝕜 (Field.toEuclideanDomain.{u2} 𝕜 _inst_1)) M) (OfNat.ofNat.{u2} 𝕜 0 (OfNat.mk.{u2} 𝕜 0 (Zero.zero.{u2} 𝕜 (MulZeroClass.toHasZero.{u2} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))))))))) -> (forall (D : n -> 𝕜), (Ne.{succ u2} 𝕜 (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_5 𝕜 (EuclideanDomain.toCommRing.{u2} 𝕜 (Field.toEuclideanDomain.{u2} 𝕜 _inst_1)) (Matrix.diagonal.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (MulZeroClass.toHasZero.{u2} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))))) D)) (OfNat.ofNat.{u2} 𝕜 0 (OfNat.mk.{u2} 𝕜 0 (Zero.zero.{u2} 𝕜 (MulZeroClass.toHasZero.{u2} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))))))))) -> (P (Matrix.diagonal.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (MulZeroClass.toHasZero.{u2} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))))) D))) -> (forall (t : Matrix.TransvectionStruct.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u2} 𝕜 (Field.toEuclideanDomain.{u2} 𝕜 _inst_1))), P (Matrix.TransvectionStruct.toMatrix.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u2} 𝕜 (Field.toEuclideanDomain.{u2} 𝕜 _inst_1)) t)) -> (forall (A : Matrix.{u1, u1, u2} n n 𝕜) (B : Matrix.{u1, u1, u2} n n 𝕜), (Ne.{succ u2} 𝕜 (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_5 𝕜 (EuclideanDomain.toCommRing.{u2} 𝕜 (Field.toEuclideanDomain.{u2} 𝕜 _inst_1)) A) (OfNat.ofNat.{u2} 𝕜 0 (OfNat.mk.{u2} 𝕜 0 (Zero.zero.{u2} 𝕜 (MulZeroClass.toHasZero.{u2} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))))))))) -> (Ne.{succ u2} 𝕜 (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_5 𝕜 (EuclideanDomain.toCommRing.{u2} 𝕜 (Field.toEuclideanDomain.{u2} 𝕜 _inst_1)) B) (OfNat.ofNat.{u2} 𝕜 0 (OfNat.mk.{u2} 𝕜 0 (Zero.zero.{u2} 𝕜 (MulZeroClass.toHasZero.{u2} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))))))))) -> (P A) -> (P B) -> (P (Matrix.mul.{u2, u1, u1, u1} n n n 𝕜 _inst_5 (Distrib.toHasMul.{u2} 𝕜 (Ring.toDistrib.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1)))))) A B))) -> (P M)
-but is expected to have type
- forall {n : Type.{u2}} {𝕜 : Type.{u1}} [_inst_1 : Field.{u1} 𝕜] [_inst_2 : DecidableEq.{succ u2} n] [_inst_5 : Fintype.{u2} n] (P : (Matrix.{u2, u2, u1} n n 𝕜) -> Prop) (M : Matrix.{u2, u2, u1} n n 𝕜), (Ne.{succ u1} 𝕜 (Matrix.det.{u1, u2} n (fun (a : n) (b : n) => _inst_2 a b) _inst_5 𝕜 (EuclideanDomain.toCommRing.{u1} 𝕜 (Field.toEuclideanDomain.{u1} 𝕜 _inst_1)) M) (OfNat.ofNat.{u1} 𝕜 0 (Zero.toOfNat0.{u1} 𝕜 (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1))))))) -> (forall (D : n -> 𝕜), (Ne.{succ u1} 𝕜 (Matrix.det.{u1, u2} n (fun (a : n) (b : n) => _inst_2 a b) _inst_5 𝕜 (EuclideanDomain.toCommRing.{u1} 𝕜 (Field.toEuclideanDomain.{u1} 𝕜 _inst_1)) (Matrix.diagonal.{u1, u2} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))) D)) (OfNat.ofNat.{u1} 𝕜 0 (Zero.toOfNat0.{u1} 𝕜 (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1))))))) -> (P (Matrix.diagonal.{u1, u2} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))) D))) -> (forall (t : Matrix.TransvectionStruct.{u1, u2} n 𝕜), P (Matrix.TransvectionStruct.toMatrix.{u1, u2} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u1} 𝕜 (Field.toEuclideanDomain.{u1} 𝕜 _inst_1)) t)) -> (forall (A : Matrix.{u2, u2, u1} n n 𝕜) (B : Matrix.{u2, u2, u1} n n 𝕜), (Ne.{succ u1} 𝕜 (Matrix.det.{u1, u2} n (fun (a : n) (b : n) => _inst_2 a b) _inst_5 𝕜 (EuclideanDomain.toCommRing.{u1} 𝕜 (Field.toEuclideanDomain.{u1} 𝕜 _inst_1)) A) (OfNat.ofNat.{u1} 𝕜 0 (Zero.toOfNat0.{u1} 𝕜 (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1))))))) -> (Ne.{succ u1} 𝕜 (Matrix.det.{u1, u2} n (fun (a : n) (b : n) => _inst_2 a b) _inst_5 𝕜 (EuclideanDomain.toCommRing.{u1} 𝕜 (Field.toEuclideanDomain.{u1} 𝕜 _inst_1)) B) (OfNat.ofNat.{u1} 𝕜 0 (Zero.toOfNat0.{u1} 𝕜 (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1))))))) -> (P A) -> (P B) -> (P (Matrix.mul.{u1, u2, u2, u2} n n n 𝕜 _inst_5 (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) A B))) -> (P M)
-Case conversion may be inaccurate. Consider using '#align matrix.diagonal_transvection_induction_of_det_ne_zero Matrix.diagonal_transvection_induction_of_det_ne_zeroₓ'. -/
/-- Induction principle for invertible matrices based on transvections: if a property is true for
all invertible diagonal matrices, all transvections, and is stable under product of invertible
matrices, then it is true for all invertible matrices. This is the useful way to say that
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -223,10 +223,8 @@ structure TransvectionStruct where
c : R
#align matrix.transvection_struct Matrix.TransvectionStruct
-instance [Nontrivial n] : Nonempty (TransvectionStruct n R) :=
- by
- choose x y hxy using exists_pair_ne n
- exact ⟨⟨x, y, hxy, 0⟩⟩
+instance [Nontrivial n] : Nonempty (TransvectionStruct n R) := by
+ choose x y hxy using exists_pair_ne n; exact ⟨⟨x, y, hxy, 0⟩⟩
namespace TransvectionStruct
@@ -303,10 +301,8 @@ lean 3 declaration is
but is expected to have type
forall {n : Type.{u1}} {R : Type.{u2}} [_inst_2 : DecidableEq.{succ u1} n] [_inst_4 : CommRing.{u2} R] [_inst_5 : Fintype.{u1} n] (t : Matrix.TransvectionStruct.{u2, u1} n R), Eq.{max (succ u2) (succ u1)} (Matrix.{u1, u1, u2} n n R) (Matrix.mul.{u2, u1, u1, u1} n n n R _inst_5 (NonUnitalNonAssocRing.toMul.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4))))) (Matrix.TransvectionStruct.toMatrix.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 (Matrix.TransvectionStruct.inv.{u2, u1} n R _inst_4 t)) (Matrix.TransvectionStruct.toMatrix.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 t)) (OfNat.ofNat.{max u2 u1} (Matrix.{u1, u1, u2} n n R) 1 (One.toOfNat1.{max u2 u1} (Matrix.{u1, u1, u2} n n R) (Matrix.one.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (Semiring.toOne.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))))))
Case conversion may be inaccurate. Consider using '#align matrix.transvection_struct.inv_mul Matrix.TransvectionStruct.inv_mulₓ'. -/
-theorem inv_mul (t : TransvectionStruct n R) : t.inv.toMatrix ⬝ t.toMatrix = 1 :=
- by
- rcases t with ⟨⟩
- simp [to_matrix, transvection_mul_transvection_same, t_hij]
+theorem inv_mul (t : TransvectionStruct n R) : t.inv.toMatrix ⬝ t.toMatrix = 1 := by
+ rcases t with ⟨⟩; simp [to_matrix, transvection_mul_transvection_same, t_hij]
#align matrix.transvection_struct.inv_mul Matrix.TransvectionStruct.inv_mul
/- warning: matrix.transvection_struct.mul_inv -> Matrix.TransvectionStruct.mul_inv is a dubious translation:
@@ -315,10 +311,8 @@ lean 3 declaration is
but is expected to have type
forall {n : Type.{u1}} {R : Type.{u2}} [_inst_2 : DecidableEq.{succ u1} n] [_inst_4 : CommRing.{u2} R] [_inst_5 : Fintype.{u1} n] (t : Matrix.TransvectionStruct.{u2, u1} n R), Eq.{max (succ u2) (succ u1)} (Matrix.{u1, u1, u2} n n R) (Matrix.mul.{u2, u1, u1, u1} n n n R _inst_5 (NonUnitalNonAssocRing.toMul.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4))))) (Matrix.TransvectionStruct.toMatrix.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 t) (Matrix.TransvectionStruct.toMatrix.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 (Matrix.TransvectionStruct.inv.{u2, u1} n R _inst_4 t))) (OfNat.ofNat.{max u2 u1} (Matrix.{u1, u1, u2} n n R) 1 (One.toOfNat1.{max u2 u1} (Matrix.{u1, u1, u2} n n R) (Matrix.one.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (Semiring.toOne.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))))))
Case conversion may be inaccurate. Consider using '#align matrix.transvection_struct.mul_inv Matrix.TransvectionStruct.mul_invₓ'. -/
-theorem mul_inv (t : TransvectionStruct n R) : t.toMatrix ⬝ t.inv.toMatrix = 1 :=
- by
- rcases t with ⟨⟩
- simp [to_matrix, transvection_mul_transvection_same, t_hij]
+theorem mul_inv (t : TransvectionStruct n R) : t.toMatrix ⬝ t.inv.toMatrix = 1 := by
+ rcases t with ⟨⟩; simp [to_matrix, transvection_mul_transvection_same, t_hij]
#align matrix.transvection_struct.mul_inv Matrix.TransvectionStruct.mul_inv
/- warning: matrix.transvection_struct.reverse_inv_prod_mul_prod -> Matrix.TransvectionStruct.reverse_inv_prod_mul_prod is a dubious translation:
@@ -584,16 +578,10 @@ theorem listTransvecCol_mul_last_col (hM : M (inr unit) (inr unit) ≠ 0) (i : F
by simp [list_transvec_col]
simp only [Matrix.mul_assoc, A, Matrix.mul_eq_mul, List.prod_cons]
by_cases h : n' = i
- · have hni : n = i := by
- cases i
- simp only [Fin.mk_eq_mk] at h
- simp [h]
+ · have hni : n = i := by cases i; simp only [Fin.mk_eq_mk] at h; simp [h]
rw [h, transvection_mul_apply_same, IH, list_transvec_col_mul_last_row_drop _ _ hn, ← hni]
field_simp [hM]
- · have hni : n ≠ i := by
- rintro rfl
- cases i
- simpa using h
+ · have hni : n ≠ i := by rintro rfl; cases i; simpa using h
simp only [transvection_mul_apply_of_ne, Ne.def, not_false_iff, Ne.symm h]
rw [IH]
rcases le_or_lt (n + 1) i with (hi | hi)
@@ -621,9 +609,7 @@ theorem mul_listTransvecRow_last_col_take (i : Sum (Fin r) Unit) {k : ℕ} (hk :
(list_transvec_row M).get? k =
↑(transvection (inr Unit.unit) (inl k')
(-M (inr Unit.unit) (inl k') / M (inr Unit.unit) (inr Unit.unit))) :=
- by
- simp only [list_transvec_row, List.ofFnNthVal, hkr, dif_pos, List.get?_ofFn]
- rfl
+ by simp only [list_transvec_row, List.ofFnNthVal, hkr, dif_pos, List.get?_ofFn]; rfl
simp only [List.take_succ, ← Matrix.mul_assoc, this, List.prod_append, Matrix.mul_one,
Matrix.mul_eq_mul, List.prod_cons, List.prod_nil, Option.to_list_some]
rw [mul_transvection_apply_of_ne, IH hkr.le]
@@ -674,24 +660,16 @@ theorem mul_listTransvecRow_last_row (hM : M (inr unit) (inr unit) ≠ 0) (i : F
(list_transvec_row M).get? n =
↑(transvection (inr Unit.unit) (inl n')
(-M (inr Unit.unit) (inl n') / M (inr Unit.unit) (inr Unit.unit))) :=
- by
- simp only [list_transvec_row, List.ofFnNthVal, hnr, dif_pos, List.get?_ofFn]
- rfl
+ by simp only [list_transvec_row, List.ofFnNthVal, hnr, dif_pos, List.get?_ofFn]; rfl
simp only [List.take_succ, A, ← Matrix.mul_assoc, List.prod_append, Matrix.mul_one,
Matrix.mul_eq_mul, List.prod_cons, List.prod_nil, Option.to_list_some]
by_cases h : n' = i
- · have hni : n = i := by
- cases i
- simp only [Fin.mk_eq_mk] at h
- simp only [h, coe_mk]
+ · have hni : n = i := by cases i; simp only [Fin.mk_eq_mk] at h; simp only [h, coe_mk]
have : ¬n.succ ≤ i := by simp only [← hni, n.lt_succ_self, not_le]
simp only [h, mul_transvection_apply_same, List.take, if_false,
mul_list_transvec_row_last_col_take _ _ hnr.le, hni.le, this, if_true, IH hnr.le]
field_simp [hM]
- · have hni : n ≠ i := by
- rintro rfl
- cases i
- simpa using h
+ · have hni : n ≠ i := by rintro rfl; cases i; simpa using h
simp only [IH hnr.le, Ne.def, mul_transvection_apply_of_ne, not_false_iff, Ne.symm h]
rcases le_or_lt (n + 1) i with (hi | hi)
· simp [hi, n.le_succ.trans hi, if_true]
@@ -784,8 +762,7 @@ theorem exists_isTwoBlockDiagonal_list_transvec_mul_mul_list_transvec
∃ L L' : List (TransvectionStruct (Sum (Fin r) Unit) 𝕜),
IsTwoBlockDiagonal ((L.map toMatrix).Prod ⬝ M ⬝ (L'.map toMatrix).Prod) :=
by
- by_cases H : is_two_block_diagonal M
- · refine' ⟨List.nil, List.nil, by simpa using H⟩
+ by_cases H : is_two_block_diagonal M; · refine' ⟨List.nil, List.nil, by simpa using H⟩
-- we have already proved this when the last coefficient is nonzero
by_cases hM : M (inr star) (inr star) ≠ 0
· exact exists_is_two_block_diagonal_of_ne_zero M hM
@@ -852,9 +829,7 @@ theorem exists_list_transvec_mul_mul_list_transvec_eq_diagonal_induction
congr
· exact hM.1
· exact hM.2
- · ext (⟨⟩⟨⟩)
- rw [hc, to_blocks₂₂, of_apply]
- rfl
+ · ext (⟨⟩⟨⟩); rw [hc, to_blocks₂₂, of_apply]; rfl
rw [this]
simp [h₀]
#align matrix.pivot.exists_list_transvec_mul_mul_list_transvec_eq_diagonal_induction Matrix.Pivot.exists_list_transvec_mul_mul_list_transvec_eq_diagonal_induction
@@ -981,9 +956,7 @@ theorem diagonal_transvection_induction (P : Matrix n n 𝕜 → Prop) (M : Matr
suffices H :
∀ (L₁ L₂ : List (transvection_struct n 𝕜)) (E : Matrix n n 𝕜),
P E → P ((L₁.map to_matrix).Prod ⬝ E ⬝ (L₂.map to_matrix).Prod)
- · rw [h]
- apply H L L'
- exact PD
+ · rw [h]; apply H L L'; exact PD
intro L₁ L₂ E PE
induction' L₁ with t L₁ IH
· simp only [Matrix.one_mul, List.prod_nil, List.map]
@@ -1015,9 +988,7 @@ theorem diagonal_transvection_induction_of_det_ne_zero (P : Matrix n n 𝕜 →
have : Q M := by
apply diagonal_transvection_induction Q M
· intro D hD
- have detD : det (diagonal D) ≠ 0 := by
- rw [hD]
- exact hMdet
+ have detD : det (diagonal D) ≠ 0 := by rw [hD]; exact hMdet
exact ⟨detD, hdiag _ detD⟩
· intro t
exact ⟨by simp, htransvec t⟩
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -401,10 +401,7 @@ theorem toMatrix_sumInl (t : TransvectionStruct n R) :
#align matrix.transvection_struct.to_matrix_sum_inl Matrix.TransvectionStruct.toMatrix_sumInl
/- warning: matrix.transvection_struct.sum_inl_to_matrix_prod_mul -> Matrix.TransvectionStruct.sumInl_toMatrix_prod_mul is a dubious translation:
-lean 3 declaration is
- forall {n : Type.{u2}} (p : Type.{u3}) {R : Type.{u1}} [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : DecidableEq.{succ u3} p] [_inst_4 : CommRing.{u1} R] [_inst_5 : Fintype.{u2} n] [_inst_6 : Fintype.{u3} p] (M : Matrix.{u2, u2, u1} n n R) (L : List.{max u2 u1} (Matrix.TransvectionStruct.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4)) (N : Matrix.{u3, u3, u1} p p R), Eq.{succ (max (max u2 u3) u1)} (Matrix.{max u2 u3, max u2 u3, u1} (Sum.{u2, u3} n p) (Sum.{u2, u3} n p) R) (Matrix.mul.{u1, max u2 u3, max u2 u3, max u2 u3} (Sum.{u2, u3} n p) (Sum.{u2, u3} n p) (Sum.{u2, u3} n p) R (Sum.fintype.{u2, u3} n p _inst_5 _inst_6) (Distrib.toHasMul.{u1} R (Ring.toDistrib.{u1} R (CommRing.toRing.{u1} R _inst_4))) (AddCommGroup.toAddCommMonoid.{u1} R (NonUnitalNonAssocRing.toAddCommGroup.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4))))) (List.prod.{max (max u2 u3) u1} (Matrix.{max u2 u3, max u2 u3, u1} (Sum.{u2, u3} n p) (Sum.{u2, u3} n p) R) (Matrix.hasMul.{u1, max u2 u3} (Sum.{u2, u3} n p) R (Sum.fintype.{u2, u3} n p _inst_5 _inst_6) (Distrib.toHasMul.{u1} R (Ring.toDistrib.{u1} R (CommRing.toRing.{u1} R _inst_4))) (AddCommGroup.toAddCommMonoid.{u1} R (NonUnitalNonAssocRing.toAddCommGroup.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (Matrix.hasOne.{u1, max u2 u3} (Sum.{u2, u3} n p) R (fun (a : Sum.{u2, u3} n p) (b : Sum.{u2, u3} n p) => Sum.decidableEq.{u2, u3} n (fun (a : n) (b : n) => _inst_2 a b) p (fun (a : p) (b : p) => _inst_3 a b) a b) (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (AddMonoidWithOne.toOne.{u1} R (AddGroupWithOne.toAddMonoidWithOne.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (Ring.toAddCommGroupWithOne.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (List.map.{max u2 u1, max (max u2 u3) u1} (Matrix.TransvectionStruct.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) (Matrix.{max u2 u3, max u2 u3, u1} (Sum.{u2, u3} n p) (Sum.{u2, u3} n p) R) (Function.comp.{succ (max u2 u1), max (succ (max u2 u3)) (succ u1), succ (max (max u2 u3) u1)} (Matrix.TransvectionStruct.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) (Matrix.TransvectionStruct.{u1, max u2 u3} (Sum.{u2, u3} n p) R (fun (a : Sum.{u2, u3} n p) (b : Sum.{u2, u3} n p) => Sum.decidableEq.{u2, u3} n (fun (a : n) (b : n) => _inst_2 a b) p (fun (a : p) (b : p) => _inst_3 a b) a b) _inst_4) (Matrix.{max u2 u3, max u2 u3, u1} (Sum.{u2, u3} n p) (Sum.{u2, u3} n p) R) (Matrix.TransvectionStruct.toMatrix.{u1, max u2 u3} (Sum.{u2, u3} n p) R (fun (a : Sum.{u2, u3} n p) (b : Sum.{u2, u3} n p) => Sum.decidableEq.{u2, u3} n (fun (a : n) (b : n) => _inst_2 a b) p (fun (a : p) (b : p) => _inst_3 a b) a b) _inst_4) (Matrix.TransvectionStruct.sumInl.{u1, u2, u3} n p R (fun (a : n) (b : n) => _inst_2 a b) (fun (a : p) (b : p) => _inst_3 a b) _inst_4)) L)) (Matrix.fromBlocks.{u2, u3, u2, u3, u1} n p n p R M (OfNat.ofNat.{max u2 u3 u1} (Matrix.{u2, u3, u1} n p R) 0 (OfNat.mk.{max u2 u3 u1} (Matrix.{u2, u3, u1} n p R) 0 (Zero.zero.{max u2 u3 u1} (Matrix.{u2, u3, u1} n p R) (Matrix.hasZero.{u1, u2, u3} n p R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))))))) (OfNat.ofNat.{max u3 u2 u1} (Matrix.{u3, u2, u1} p n R) 0 (OfNat.mk.{max u3 u2 u1} (Matrix.{u3, u2, u1} p n R) 0 (Zero.zero.{max u3 u2 u1} (Matrix.{u3, u2, u1} p n R) (Matrix.hasZero.{u1, u3, u2} p n R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))))))) N)) (Matrix.fromBlocks.{u2, u3, u2, u3, u1} n p n p R (Matrix.mul.{u1, u2, u2, u2} n n n R _inst_5 (Distrib.toHasMul.{u1} R (Ring.toDistrib.{u1} R (CommRing.toRing.{u1} R _inst_4))) (AddCommGroup.toAddCommMonoid.{u1} R (NonUnitalNonAssocRing.toAddCommGroup.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4))))) (List.prod.{max u2 u1} (Matrix.{u2, u2, u1} n n R) (Matrix.hasMul.{u1, u2} n R _inst_5 (Distrib.toHasMul.{u1} R (Ring.toDistrib.{u1} R (CommRing.toRing.{u1} R _inst_4))) (AddCommGroup.toAddCommMonoid.{u1} R (NonUnitalNonAssocRing.toAddCommGroup.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (Matrix.hasOne.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (AddMonoidWithOne.toOne.{u1} R (AddGroupWithOne.toAddMonoidWithOne.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (Ring.toAddCommGroupWithOne.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (List.map.{max u2 u1, max u2 u1} (Matrix.TransvectionStruct.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) (Matrix.{u2, u2, u1} n n R) (Matrix.TransvectionStruct.toMatrix.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) L)) M) (OfNat.ofNat.{max u2 u3 u1} (Matrix.{u2, u3, u1} n p R) 0 (OfNat.mk.{max u2 u3 u1} (Matrix.{u2, u3, u1} n p R) 0 (Zero.zero.{max u2 u3 u1} (Matrix.{u2, u3, u1} n p R) (Matrix.hasZero.{u1, u2, u3} n p R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))))))) (OfNat.ofNat.{max u3 u2 u1} (Matrix.{u3, u2, u1} p n R) 0 (OfNat.mk.{max u3 u2 u1} (Matrix.{u3, u2, u1} p n R) 0 (Zero.zero.{max u3 u2 u1} (Matrix.{u3, u2, u1} p n R) (Matrix.hasZero.{u1, u3, u2} p n R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))))))) N)
-but is expected to have type
- forall {n : Type.{u2}} (p : Type.{u1}) {R : Type.{u3}} [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : DecidableEq.{succ u1} p] [_inst_4 : CommRing.{u3} R] [_inst_5 : Fintype.{u2} n] [_inst_6 : Fintype.{u1} p] (M : Matrix.{u2, u2, u3} n n R) (L : List.{max u2 u3} (Matrix.TransvectionStruct.{u3, u2} n R)) (N : Matrix.{u1, u1, u3} p p R), Eq.{max (max (succ u3) (succ u2)) (succ u1)} (Matrix.{max u2 u1, max u1 u2, u3} (Sum.{u2, u1} n p) (Sum.{u2, u1} n p) R) (Matrix.mul.{u3, max u2 u1, max u2 u1, max u1 u2} (Sum.{u2, u1} n p) (Sum.{u2, u1} n p) (Sum.{u2, u1} n p) R (instFintypeSum.{u2, u1} n p _inst_5 _inst_6) (NonUnitalNonAssocRing.toMul.{u3} R (NonAssocRing.toNonUnitalNonAssocRing.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} R (NonAssocRing.toNonUnitalNonAssocRing.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4))))) (List.prod.{max (max u3 u2) u1} (Matrix.{max u1 u2, max u1 u2, u3} (Sum.{u2, u1} n p) (Sum.{u2, u1} n p) R) (Matrix.instMulMatrix.{u3, max u2 u1} (Sum.{u2, u1} n p) R (instFintypeSum.{u2, u1} n p _inst_5 _inst_6) (NonUnitalNonAssocRing.toMul.{u3} R (NonAssocRing.toNonUnitalNonAssocRing.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} R (NonAssocRing.toNonUnitalNonAssocRing.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4)))))) (Matrix.one.{u3, max u2 u1} (Sum.{u2, u1} n p) R (fun (a : Sum.{u2, u1} n p) (b : Sum.{u2, u1} n p) => Sum.instDecidableEqSum.{u2, u1} n p (fun (a : n) (b : n) => _inst_2 a b) (fun (a : p) (b : p) => _inst_3 a b) a b) (CommMonoidWithZero.toZero.{u3} R (CommSemiring.toCommMonoidWithZero.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Semiring.toOne.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) (List.map.{max u2 u3, max (max u1 u2) u3} (Matrix.TransvectionStruct.{u3, u2} n R) (Matrix.{max u1 u2, max u1 u2, u3} (Sum.{u2, u1} n p) (Sum.{u2, u1} n p) R) (Function.comp.{succ (max u2 u3), max (succ (max u1 u2)) (succ u3), succ (max (max u1 u2) u3)} (Matrix.TransvectionStruct.{u3, u2} n R) (Matrix.TransvectionStruct.{u3, max u1 u2} (Sum.{u2, u1} n p) R) (Matrix.{max u1 u2, max u1 u2, u3} (Sum.{u2, u1} n p) (Sum.{u2, u1} n p) R) (Matrix.TransvectionStruct.toMatrix.{u3, max u1 u2} (Sum.{u2, u1} n p) R (fun (a : Sum.{u2, u1} n p) (b : Sum.{u2, u1} n p) => Sum.instDecidableEqSum.{u2, u1} n p (fun (a : n) (b : n) => _inst_2 a b) (fun (a : p) (b : p) => _inst_3 a b) a b) _inst_4) (Matrix.TransvectionStruct.sumInl.{u3, u2, u1} n p R)) L)) (Matrix.fromBlocks.{u2, u1, u2, u1, u3} n p n p R M (OfNat.ofNat.{max (max u3 u2) u1} (Matrix.{u2, u1, u3} n p R) 0 (Zero.toOfNat0.{max (max u3 u2) u1} (Matrix.{u2, u1, u3} n p R) (Matrix.zero.{u3, u2, u1} n p R (CommMonoidWithZero.toZero.{u3} R (CommSemiring.toCommMonoidWithZero.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))))) (OfNat.ofNat.{max (max u3 u2) u1} (Matrix.{u1, u2, u3} p n R) 0 (Zero.toOfNat0.{max (max u3 u2) u1} (Matrix.{u1, u2, u3} p n R) (Matrix.zero.{u3, u1, u2} p n R (CommMonoidWithZero.toZero.{u3} R (CommSemiring.toCommMonoidWithZero.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))))) N)) (Matrix.fromBlocks.{u2, u1, u2, u1, u3} n p n p R (Matrix.mul.{u3, u2, u2, u2} n n n R _inst_5 (NonUnitalNonAssocRing.toMul.{u3} R (NonAssocRing.toNonUnitalNonAssocRing.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} R (NonAssocRing.toNonUnitalNonAssocRing.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4))))) (List.prod.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Matrix.instMulMatrix.{u3, u2} n R _inst_5 (NonUnitalNonAssocRing.toMul.{u3} R (NonAssocRing.toNonUnitalNonAssocRing.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} R (NonAssocRing.toNonUnitalNonAssocRing.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4)))))) (Matrix.one.{u3, u2} n R (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u3} R (CommSemiring.toCommMonoidWithZero.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Semiring.toOne.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) (List.map.{max u2 u3, max u2 u3} (Matrix.TransvectionStruct.{u3, u2} n R) (Matrix.{u2, u2, u3} n n R) (Matrix.TransvectionStruct.toMatrix.{u3, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) L)) M) (OfNat.ofNat.{max (max u3 u2) u1} (Matrix.{u2, u1, u3} n p R) 0 (Zero.toOfNat0.{max (max u3 u2) u1} (Matrix.{u2, u1, u3} n p R) (Matrix.zero.{u3, u2, u1} n p R (CommMonoidWithZero.toZero.{u3} R (CommSemiring.toCommMonoidWithZero.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))))) (OfNat.ofNat.{max (max u3 u2) u1} (Matrix.{u1, u2, u3} p n R) 0 (Zero.toOfNat0.{max (max u3 u2) u1} (Matrix.{u1, u2, u3} p n R) (Matrix.zero.{u3, u1, u2} p n R (CommMonoidWithZero.toZero.{u3} R (CommSemiring.toCommMonoidWithZero.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))))) N)
+<too large>
Case conversion may be inaccurate. Consider using '#align matrix.transvection_struct.sum_inl_to_matrix_prod_mul Matrix.TransvectionStruct.sumInl_toMatrix_prod_mulₓ'. -/
@[simp]
theorem sumInl_toMatrix_prod_mul [Fintype n] [Fintype p] (M : Matrix n n R)
@@ -418,10 +415,7 @@ theorem sumInl_toMatrix_prod_mul [Fintype n] [Fintype p] (M : Matrix n n R)
#align matrix.transvection_struct.sum_inl_to_matrix_prod_mul Matrix.TransvectionStruct.sumInl_toMatrix_prod_mul
/- warning: matrix.transvection_struct.mul_sum_inl_to_matrix_prod -> Matrix.TransvectionStruct.mul_sumInl_toMatrix_prod is a dubious translation:
-lean 3 declaration is
- forall {n : Type.{u2}} (p : Type.{u3}) {R : Type.{u1}} [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : DecidableEq.{succ u3} p] [_inst_4 : CommRing.{u1} R] [_inst_5 : Fintype.{u2} n] [_inst_6 : Fintype.{u3} p] (M : Matrix.{u2, u2, u1} n n R) (L : List.{max u2 u1} (Matrix.TransvectionStruct.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4)) (N : Matrix.{u3, u3, u1} p p R), Eq.{succ (max (max u2 u3) u1)} (Matrix.{max u2 u3, max u2 u3, u1} (Sum.{u2, u3} n p) (Sum.{u2, u3} n p) R) (Matrix.mul.{u1, max u2 u3, max u2 u3, max u2 u3} (Sum.{u2, u3} n p) (Sum.{u2, u3} n p) (Sum.{u2, u3} n p) R (Sum.fintype.{u2, u3} n p _inst_5 _inst_6) (Distrib.toHasMul.{u1} R (Ring.toDistrib.{u1} R (CommRing.toRing.{u1} R _inst_4))) (AddCommGroup.toAddCommMonoid.{u1} R (NonUnitalNonAssocRing.toAddCommGroup.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4))))) (Matrix.fromBlocks.{u2, u3, u2, u3, u1} n p n p R M (OfNat.ofNat.{max u2 u3 u1} (Matrix.{u2, u3, u1} n p R) 0 (OfNat.mk.{max u2 u3 u1} (Matrix.{u2, u3, u1} n p R) 0 (Zero.zero.{max u2 u3 u1} (Matrix.{u2, u3, u1} n p R) (Matrix.hasZero.{u1, u2, u3} n p R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))))))) (OfNat.ofNat.{max u3 u2 u1} (Matrix.{u3, u2, u1} p n R) 0 (OfNat.mk.{max u3 u2 u1} (Matrix.{u3, u2, u1} p n R) 0 (Zero.zero.{max u3 u2 u1} (Matrix.{u3, u2, u1} p n R) (Matrix.hasZero.{u1, u3, u2} p n R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))))))) N) (List.prod.{max (max u2 u3) u1} (Matrix.{max u2 u3, max u2 u3, u1} (Sum.{u2, u3} n p) (Sum.{u2, u3} n p) R) (Matrix.hasMul.{u1, max u2 u3} (Sum.{u2, u3} n p) R (Sum.fintype.{u2, u3} n p _inst_5 _inst_6) (Distrib.toHasMul.{u1} R (Ring.toDistrib.{u1} R (CommRing.toRing.{u1} R _inst_4))) (AddCommGroup.toAddCommMonoid.{u1} R (NonUnitalNonAssocRing.toAddCommGroup.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (Matrix.hasOne.{u1, max u2 u3} (Sum.{u2, u3} n p) R (fun (a : Sum.{u2, u3} n p) (b : Sum.{u2, u3} n p) => Sum.decidableEq.{u2, u3} n (fun (a : n) (b : n) => _inst_2 a b) p (fun (a : p) (b : p) => _inst_3 a b) a b) (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (AddMonoidWithOne.toOne.{u1} R (AddGroupWithOne.toAddMonoidWithOne.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (Ring.toAddCommGroupWithOne.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (List.map.{max u2 u1, max (max u2 u3) u1} (Matrix.TransvectionStruct.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) (Matrix.{max u2 u3, max u2 u3, u1} (Sum.{u2, u3} n p) (Sum.{u2, u3} n p) R) (Function.comp.{succ (max u2 u1), max (succ (max u2 u3)) (succ u1), succ (max (max u2 u3) u1)} (Matrix.TransvectionStruct.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) (Matrix.TransvectionStruct.{u1, max u2 u3} (Sum.{u2, u3} n p) R (fun (a : Sum.{u2, u3} n p) (b : Sum.{u2, u3} n p) => Sum.decidableEq.{u2, u3} n (fun (a : n) (b : n) => _inst_2 a b) p (fun (a : p) (b : p) => _inst_3 a b) a b) _inst_4) (Matrix.{max u2 u3, max u2 u3, u1} (Sum.{u2, u3} n p) (Sum.{u2, u3} n p) R) (Matrix.TransvectionStruct.toMatrix.{u1, max u2 u3} (Sum.{u2, u3} n p) R (fun (a : Sum.{u2, u3} n p) (b : Sum.{u2, u3} n p) => Sum.decidableEq.{u2, u3} n (fun (a : n) (b : n) => _inst_2 a b) p (fun (a : p) (b : p) => _inst_3 a b) a b) _inst_4) (Matrix.TransvectionStruct.sumInl.{u1, u2, u3} n p R (fun (a : n) (b : n) => _inst_2 a b) (fun (a : p) (b : p) => _inst_3 a b) _inst_4)) L))) (Matrix.fromBlocks.{u2, u3, u2, u3, u1} n p n p R (Matrix.mul.{u1, u2, u2, u2} n n n R _inst_5 (Distrib.toHasMul.{u1} R (Ring.toDistrib.{u1} R (CommRing.toRing.{u1} R _inst_4))) (AddCommGroup.toAddCommMonoid.{u1} R (NonUnitalNonAssocRing.toAddCommGroup.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4))))) M (List.prod.{max u2 u1} (Matrix.{u2, u2, u1} n n R) (Matrix.hasMul.{u1, u2} n R _inst_5 (Distrib.toHasMul.{u1} R (Ring.toDistrib.{u1} R (CommRing.toRing.{u1} R _inst_4))) (AddCommGroup.toAddCommMonoid.{u1} R (NonUnitalNonAssocRing.toAddCommGroup.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (Matrix.hasOne.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (AddMonoidWithOne.toOne.{u1} R (AddGroupWithOne.toAddMonoidWithOne.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (Ring.toAddCommGroupWithOne.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (List.map.{max u2 u1, max u2 u1} (Matrix.TransvectionStruct.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) (Matrix.{u2, u2, u1} n n R) (Matrix.TransvectionStruct.toMatrix.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) L))) (OfNat.ofNat.{max u2 u3 u1} (Matrix.{u2, u3, u1} n p R) 0 (OfNat.mk.{max u2 u3 u1} (Matrix.{u2, u3, u1} n p R) 0 (Zero.zero.{max u2 u3 u1} (Matrix.{u2, u3, u1} n p R) (Matrix.hasZero.{u1, u2, u3} n p R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))))))) (OfNat.ofNat.{max u3 u2 u1} (Matrix.{u3, u2, u1} p n R) 0 (OfNat.mk.{max u3 u2 u1} (Matrix.{u3, u2, u1} p n R) 0 (Zero.zero.{max u3 u2 u1} (Matrix.{u3, u2, u1} p n R) (Matrix.hasZero.{u1, u3, u2} p n R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))))))) N)
-but is expected to have type
- forall {n : Type.{u2}} (p : Type.{u1}) {R : Type.{u3}} [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : DecidableEq.{succ u1} p] [_inst_4 : CommRing.{u3} R] [_inst_5 : Fintype.{u2} n] [_inst_6 : Fintype.{u1} p] (M : Matrix.{u2, u2, u3} n n R) (L : List.{max u2 u3} (Matrix.TransvectionStruct.{u3, u2} n R)) (N : Matrix.{u1, u1, u3} p p R), Eq.{max (max (succ u3) (succ u2)) (succ u1)} (Matrix.{max u1 u2, max u2 u1, u3} (Sum.{u2, u1} n p) (Sum.{u2, u1} n p) R) (Matrix.mul.{u3, max u1 u2, max u1 u2, max u2 u1} (Sum.{u2, u1} n p) (Sum.{u2, u1} n p) (Sum.{u2, u1} n p) R (instFintypeSum.{u2, u1} n p _inst_5 _inst_6) (NonUnitalNonAssocRing.toMul.{u3} R (NonAssocRing.toNonUnitalNonAssocRing.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} R (NonAssocRing.toNonUnitalNonAssocRing.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4))))) (Matrix.fromBlocks.{u2, u1, u2, u1, u3} n p n p R M (OfNat.ofNat.{max (max u3 u2) u1} (Matrix.{u2, u1, u3} n p R) 0 (Zero.toOfNat0.{max (max u3 u2) u1} (Matrix.{u2, u1, u3} n p R) (Matrix.zero.{u3, u2, u1} n p R (CommMonoidWithZero.toZero.{u3} R (CommSemiring.toCommMonoidWithZero.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))))) (OfNat.ofNat.{max (max u3 u2) u1} (Matrix.{u1, u2, u3} p n R) 0 (Zero.toOfNat0.{max (max u3 u2) u1} (Matrix.{u1, u2, u3} p n R) (Matrix.zero.{u3, u1, u2} p n R (CommMonoidWithZero.toZero.{u3} R (CommSemiring.toCommMonoidWithZero.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))))) N) (List.prod.{max (max u3 u2) u1} (Matrix.{max u1 u2, max u1 u2, u3} (Sum.{u2, u1} n p) (Sum.{u2, u1} n p) R) (Matrix.instMulMatrix.{u3, max u2 u1} (Sum.{u2, u1} n p) R (instFintypeSum.{u2, u1} n p _inst_5 _inst_6) (NonUnitalNonAssocRing.toMul.{u3} R (NonAssocRing.toNonUnitalNonAssocRing.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} R (NonAssocRing.toNonUnitalNonAssocRing.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4)))))) (Matrix.one.{u3, max u2 u1} (Sum.{u2, u1} n p) R (fun (a : Sum.{u2, u1} n p) (b : Sum.{u2, u1} n p) => Sum.instDecidableEqSum.{u2, u1} n p (fun (a : n) (b : n) => _inst_2 a b) (fun (a : p) (b : p) => _inst_3 a b) a b) (CommMonoidWithZero.toZero.{u3} R (CommSemiring.toCommMonoidWithZero.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Semiring.toOne.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) (List.map.{max u2 u3, max (max u1 u2) u3} (Matrix.TransvectionStruct.{u3, u2} n R) (Matrix.{max u1 u2, max u1 u2, u3} (Sum.{u2, u1} n p) (Sum.{u2, u1} n p) R) (Function.comp.{succ (max u2 u3), max (succ (max u1 u2)) (succ u3), succ (max (max u1 u2) u3)} (Matrix.TransvectionStruct.{u3, u2} n R) (Matrix.TransvectionStruct.{u3, max u1 u2} (Sum.{u2, u1} n p) R) (Matrix.{max u1 u2, max u1 u2, u3} (Sum.{u2, u1} n p) (Sum.{u2, u1} n p) R) (Matrix.TransvectionStruct.toMatrix.{u3, max u1 u2} (Sum.{u2, u1} n p) R (fun (a : Sum.{u2, u1} n p) (b : Sum.{u2, u1} n p) => Sum.instDecidableEqSum.{u2, u1} n p (fun (a : n) (b : n) => _inst_2 a b) (fun (a : p) (b : p) => _inst_3 a b) a b) _inst_4) (Matrix.TransvectionStruct.sumInl.{u3, u2, u1} n p R)) L))) (Matrix.fromBlocks.{u2, u1, u2, u1, u3} n p n p R (Matrix.mul.{u3, u2, u2, u2} n n n R _inst_5 (NonUnitalNonAssocRing.toMul.{u3} R (NonAssocRing.toNonUnitalNonAssocRing.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} R (NonAssocRing.toNonUnitalNonAssocRing.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4))))) M (List.prod.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Matrix.instMulMatrix.{u3, u2} n R _inst_5 (NonUnitalNonAssocRing.toMul.{u3} R (NonAssocRing.toNonUnitalNonAssocRing.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} R (NonAssocRing.toNonUnitalNonAssocRing.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4)))))) (Matrix.one.{u3, u2} n R (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u3} R (CommSemiring.toCommMonoidWithZero.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Semiring.toOne.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) (List.map.{max u2 u3, max u2 u3} (Matrix.TransvectionStruct.{u3, u2} n R) (Matrix.{u2, u2, u3} n n R) (Matrix.TransvectionStruct.toMatrix.{u3, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) L))) (OfNat.ofNat.{max (max u3 u2) u1} (Matrix.{u2, u1, u3} n p R) 0 (Zero.toOfNat0.{max (max u3 u2) u1} (Matrix.{u2, u1, u3} n p R) (Matrix.zero.{u3, u2, u1} n p R (CommMonoidWithZero.toZero.{u3} R (CommSemiring.toCommMonoidWithZero.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))))) (OfNat.ofNat.{max (max u3 u2) u1} (Matrix.{u1, u2, u3} p n R) 0 (Zero.toOfNat0.{max (max u3 u2) u1} (Matrix.{u1, u2, u3} p n R) (Matrix.zero.{u3, u1, u2} p n R (CommMonoidWithZero.toZero.{u3} R (CommSemiring.toCommMonoidWithZero.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))))) N)
+<too large>
Case conversion may be inaccurate. Consider using '#align matrix.transvection_struct.mul_sum_inl_to_matrix_prod Matrix.TransvectionStruct.mul_sumInl_toMatrix_prodₓ'. -/
@[simp]
theorem mul_sumInl_toMatrix_prod [Fintype n] [Fintype p] (M : Matrix n n R)
@@ -455,10 +449,7 @@ def reindexEquiv (e : n ≃ p) (t : TransvectionStruct n R) : TransvectionStruct
variable [Fintype n] [Fintype p]
/- warning: matrix.transvection_struct.to_matrix_reindex_equiv -> Matrix.TransvectionStruct.toMatrix_reindexEquiv is a dubious translation:
-lean 3 declaration is
- forall {n : Type.{u2}} {p : Type.{u3}} {R : Type.{u1}} [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : DecidableEq.{succ u3} p] [_inst_4 : CommRing.{u1} R] [_inst_5 : Fintype.{u2} n] [_inst_6 : Fintype.{u3} p] (e : Equiv.{succ u2, succ u3} n p) (t : Matrix.TransvectionStruct.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4), Eq.{succ (max u3 u1)} (Matrix.{u3, u3, u1} p p R) (Matrix.TransvectionStruct.toMatrix.{u1, u3} p R (fun (a : p) (b : p) => _inst_3 a b) _inst_4 (Matrix.TransvectionStruct.reindexEquiv.{u1, u2, u3} n p R (fun (a : n) (b : n) => _inst_2 a b) (fun (a : p) (b : p) => _inst_3 a b) _inst_4 e t)) (coeFn.{max (succ (max u2 u1)) (succ (max u3 u1)), max (succ (max u2 u1)) (succ (max u3 u1))} (AlgEquiv.{u1, max u2 u1, max u3 u1} R (Matrix.{u2, u2, u1} n n R) (Matrix.{u3, u3, u1} p p R) (CommRing.toCommSemiring.{u1} R _inst_4) (Matrix.semiring.{u1, u2} n R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u1, u3} p R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.algebra.{u1, u2, u1} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u1} R _inst_4) (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4)) (Algebra.id.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4))) (Matrix.algebra.{u1, u3, u1} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u1} R _inst_4) (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4)) (Algebra.id.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4)))) (fun (_x : AlgEquiv.{u1, max u2 u1, max u3 u1} R (Matrix.{u2, u2, u1} n n R) (Matrix.{u3, u3, u1} p p R) (CommRing.toCommSemiring.{u1} R _inst_4) (Matrix.semiring.{u1, u2} n R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u1, u3} p R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.algebra.{u1, u2, u1} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u1} R _inst_4) (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4)) (Algebra.id.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4))) (Matrix.algebra.{u1, u3, u1} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u1} R _inst_4) (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4)) (Algebra.id.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4)))) => (Matrix.{u2, u2, u1} n n R) -> (Matrix.{u3, u3, u1} p p R)) (AlgEquiv.hasCoeToFun.{u1, max u2 u1, max u3 u1} R (Matrix.{u2, u2, u1} n n R) (Matrix.{u3, u3, u1} p p R) (CommRing.toCommSemiring.{u1} R _inst_4) (Matrix.semiring.{u1, u2} n R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u1, u3} p R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.algebra.{u1, u2, u1} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u1} R _inst_4) (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4)) (Algebra.id.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4))) (Matrix.algebra.{u1, u3, u1} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u1} R _inst_4) (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4)) (Algebra.id.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4)))) (Matrix.reindexAlgEquiv.{u2, u3, u1} n p R (CommRing.toCommSemiring.{u1} R _inst_4) _inst_6 _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (fun (a : p) (b : p) => _inst_3 a b) e) (Matrix.TransvectionStruct.toMatrix.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 t))
-but is expected to have type
- forall {n : Type.{u2}} {p : Type.{u1}} {R : Type.{u3}} [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : DecidableEq.{succ u1} p] [_inst_4 : CommRing.{u3} R] [_inst_5 : Fintype.{u2} n] [_inst_6 : Fintype.{u1} p] (e : Equiv.{succ u2, succ u1} n p) (t : Matrix.TransvectionStruct.{u3, u2} n R), Eq.{max (succ u3) (succ u1)} (Matrix.{u1, u1, u3} p p R) (Matrix.TransvectionStruct.toMatrix.{u3, u1} p R (fun (a : p) (b : p) => _inst_3 a b) _inst_4 (Matrix.TransvectionStruct.reindexEquiv.{u3, u2, u1} n p R e t)) (FunLike.coe.{max (max (succ u3) (succ u2)) (succ u1), max (succ u3) (succ u2), max (succ u3) (succ u1)} (AlgEquiv.{u3, max u3 u2, max u3 u1} R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) (Matrix.{u2, u2, u3} n n R) (fun (_x : Matrix.{u2, u2, u3} n n R) => (fun (x._@.Mathlib.Algebra.Hom.GroupAction._hyg.2187 : Matrix.{u2, u2, u3} n n R) => Matrix.{u1, u1, u3} p p R) _x) (SMulHomClass.toFunLike.{max (max u3 u2) u1, u3, max u3 u2, max u3 u1} (AlgEquiv.{u3, max u3 u2, max u3 u1} R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (SMulZeroClass.toSMul.{u3, max u3 u2} R (Matrix.{u2, u2, u3} n n R) (AddMonoid.toZero.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (AddCommMonoid.toAddMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b))))))) (DistribSMul.toSMulZeroClass.{u3, max u3 u2} R (Matrix.{u2, u2, u3} n n R) (AddMonoid.toAddZeroClass.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (AddCommMonoid.toAddMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b))))))) (DistribMulAction.toDistribSMul.{u3, max u3 u2} R (Matrix.{u2, u2, u3} n n R) (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) (AddCommMonoid.toAddMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)))))) (Module.toDistribMulAction.{u3, max u3 u2} R (Matrix.{u2, u2, u3} n n R) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b))))) (Algebra.toModule.{u3, max u3 u2} R (Matrix.{u2, u2, u3} n n R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))))))) (SMulZeroClass.toSMul.{u3, max u3 u1} R (Matrix.{u1, u1, u3} p p R) (AddMonoid.toZero.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (AddCommMonoid.toAddMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Semiring.toNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b))))))) (DistribSMul.toSMulZeroClass.{u3, max u3 u1} R (Matrix.{u1, u1, u3} p p R) (AddMonoid.toAddZeroClass.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (AddCommMonoid.toAddMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Semiring.toNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b))))))) (DistribMulAction.toDistribSMul.{u3, max u3 u1} R (Matrix.{u1, u1, u3} p p R) (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) (AddCommMonoid.toAddMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Semiring.toNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)))))) (Module.toDistribMulAction.{u3, max u3 u1} R (Matrix.{u1, u1, u3} p p R) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Semiring.toNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b))))) (Algebra.toModule.{u3, max u3 u1} R (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))))))) (DistribMulActionHomClass.toSMulHomClass.{max (max u3 u2) u1, u3, max u3 u2, max u3 u1} (AlgEquiv.{u3, max u3 u2, max u3 u1} R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) (AddCommMonoid.toAddMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)))))) (AddCommMonoid.toAddMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Semiring.toNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)))))) (Module.toDistribMulAction.{u3, max u3 u2} R (Matrix.{u2, u2, u3} n n R) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b))))) (Algebra.toModule.{u3, max u3 u2} R (Matrix.{u2, u2, u3} n n R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))))) (Module.toDistribMulAction.{u3, max u3 u1} R (Matrix.{u1, u1, u3} p p R) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Semiring.toNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b))))) (Algebra.toModule.{u3, max u3 u1} R (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))))) (NonUnitalAlgHomClass.toDistribMulActionHomClass.{max (max u3 u2) u1, u3, max u3 u2, max u3 u1} (AlgEquiv.{u3, max u3 u2, max u3 u1} R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Semiring.toNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)))) (Module.toDistribMulAction.{u3, max u3 u2} R (Matrix.{u2, u2, u3} n n R) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b))))) (Algebra.toModule.{u3, max u3 u2} R (Matrix.{u2, u2, u3} n n R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))))) (Module.toDistribMulAction.{u3, max u3 u1} R (Matrix.{u1, u1, u3} p p R) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Semiring.toNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b))))) (Algebra.toModule.{u3, max u3 u1} R (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))))) (AlgHom.instNonUnitalAlgHomClassToMonoidToMonoidWithZeroToSemiringToNonUnitalNonAssocSemiringToNonAssocSemiringToNonUnitalNonAssocSemiringToNonAssocSemiringToDistribMulActionToAddCommMonoidToModuleToDistribMulActionToAddCommMonoidToModule.{u3, max u3 u2, max u3 u1, max (max u3 u2) u1} R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (AlgEquiv.{u3, max u3 u2, max u3 u1} R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) (AlgEquivClass.toAlgHomClass.{max (max u3 u2) u1, u3, max u3 u2, max u3 u1} (AlgEquiv.{u3, max u3 u2, max u3 u1} R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (AlgEquiv.instAlgEquivClassAlgEquiv.{u3, max u3 u2, max u3 u1} R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))))))))) (Matrix.reindexAlgEquiv.{u2, u1, u3} n p R (CommRing.toCommSemiring.{u3} R _inst_4) _inst_6 _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (fun (a : p) (b : p) => _inst_3 a b) e) (Matrix.TransvectionStruct.toMatrix.{u3, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 t))
+<too large>
Case conversion may be inaccurate. Consider using '#align matrix.transvection_struct.to_matrix_reindex_equiv Matrix.TransvectionStruct.toMatrix_reindexEquivₓ'. -/
theorem toMatrix_reindexEquiv (e : n ≃ p) (t : TransvectionStruct n R) :
(t.reindexEquiv e).toMatrix = reindexAlgEquiv R e t.toMatrix :=
@@ -472,10 +463,7 @@ theorem toMatrix_reindexEquiv (e : n ≃ p) (t : TransvectionStruct n R) :
#align matrix.transvection_struct.to_matrix_reindex_equiv Matrix.TransvectionStruct.toMatrix_reindexEquiv
/- warning: matrix.transvection_struct.to_matrix_reindex_equiv_prod -> Matrix.TransvectionStruct.toMatrix_reindexEquiv_prod is a dubious translation:
-lean 3 declaration is
- forall {n : Type.{u2}} {p : Type.{u3}} {R : Type.{u1}} [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : DecidableEq.{succ u3} p] [_inst_4 : CommRing.{u1} R] [_inst_5 : Fintype.{u2} n] [_inst_6 : Fintype.{u3} p] (e : Equiv.{succ u2, succ u3} n p) (L : List.{max u2 u1} (Matrix.TransvectionStruct.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4)), Eq.{succ (max u3 u1)} (Matrix.{u3, u3, u1} p p R) (List.prod.{max u3 u1} (Matrix.{u3, u3, u1} p p R) (Matrix.hasMul.{u1, u3} p R _inst_6 (Distrib.toHasMul.{u1} R (Ring.toDistrib.{u1} R (CommRing.toRing.{u1} R _inst_4))) (AddCommGroup.toAddCommMonoid.{u1} R (NonUnitalNonAssocRing.toAddCommGroup.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (Matrix.hasOne.{u1, u3} p R (fun (a : p) (b : p) => _inst_3 a b) (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (AddMonoidWithOne.toOne.{u1} R (AddGroupWithOne.toAddMonoidWithOne.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (Ring.toAddCommGroupWithOne.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (List.map.{max u2 u1, max u3 u1} (Matrix.TransvectionStruct.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) (Matrix.{u3, u3, u1} p p R) (Function.comp.{succ (max u2 u1), max (succ u3) (succ u1), succ (max u3 u1)} (Matrix.TransvectionStruct.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) (Matrix.TransvectionStruct.{u1, u3} p R (fun (a : p) (b : p) => _inst_3 a b) _inst_4) (Matrix.{u3, u3, u1} p p R) (Matrix.TransvectionStruct.toMatrix.{u1, u3} p R (fun (a : p) (b : p) => _inst_3 a b) _inst_4) (Matrix.TransvectionStruct.reindexEquiv.{u1, u2, u3} n p R (fun (a : n) (b : n) => _inst_2 a b) (fun (a : p) (b : p) => _inst_3 a b) _inst_4 e)) L)) (coeFn.{max (succ (max u2 u1)) (succ (max u3 u1)), max (succ (max u2 u1)) (succ (max u3 u1))} (AlgEquiv.{u1, max u2 u1, max u3 u1} R (Matrix.{u2, u2, u1} n n R) (Matrix.{u3, u3, u1} p p R) (CommRing.toCommSemiring.{u1} R _inst_4) (Matrix.semiring.{u1, u2} n R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u1, u3} p R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.algebra.{u1, u2, u1} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u1} R _inst_4) (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4)) (Algebra.id.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4))) (Matrix.algebra.{u1, u3, u1} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u1} R _inst_4) (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4)) (Algebra.id.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4)))) (fun (_x : AlgEquiv.{u1, max u2 u1, max u3 u1} R (Matrix.{u2, u2, u1} n n R) (Matrix.{u3, u3, u1} p p R) (CommRing.toCommSemiring.{u1} R _inst_4) (Matrix.semiring.{u1, u2} n R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u1, u3} p R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.algebra.{u1, u2, u1} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u1} R _inst_4) (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4)) (Algebra.id.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4))) (Matrix.algebra.{u1, u3, u1} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u1} R _inst_4) (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4)) (Algebra.id.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4)))) => (Matrix.{u2, u2, u1} n n R) -> (Matrix.{u3, u3, u1} p p R)) (AlgEquiv.hasCoeToFun.{u1, max u2 u1, max u3 u1} R (Matrix.{u2, u2, u1} n n R) (Matrix.{u3, u3, u1} p p R) (CommRing.toCommSemiring.{u1} R _inst_4) (Matrix.semiring.{u1, u2} n R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u1, u3} p R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.algebra.{u1, u2, u1} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u1} R _inst_4) (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4)) (Algebra.id.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4))) (Matrix.algebra.{u1, u3, u1} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u1} R _inst_4) (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4)) (Algebra.id.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4)))) (Matrix.reindexAlgEquiv.{u2, u3, u1} n p R (CommRing.toCommSemiring.{u1} R _inst_4) _inst_6 _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (fun (a : p) (b : p) => _inst_3 a b) e) (List.prod.{max u2 u1} (Matrix.{u2, u2, u1} n n R) (Matrix.hasMul.{u1, u2} n R _inst_5 (Distrib.toHasMul.{u1} R (Ring.toDistrib.{u1} R (CommRing.toRing.{u1} R _inst_4))) (AddCommGroup.toAddCommMonoid.{u1} R (NonUnitalNonAssocRing.toAddCommGroup.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (Matrix.hasOne.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (AddMonoidWithOne.toOne.{u1} R (AddGroupWithOne.toAddMonoidWithOne.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (Ring.toAddCommGroupWithOne.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (List.map.{max u2 u1, max u2 u1} (Matrix.TransvectionStruct.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) (Matrix.{u2, u2, u1} n n R) (Matrix.TransvectionStruct.toMatrix.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) L)))
-but is expected to have type
- forall {n : Type.{u2}} {p : Type.{u1}} {R : Type.{u3}} [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : DecidableEq.{succ u1} p] [_inst_4 : CommRing.{u3} R] [_inst_5 : Fintype.{u2} n] [_inst_6 : Fintype.{u1} p] (e : Equiv.{succ u2, succ u1} n p) (L : List.{max u2 u3} (Matrix.TransvectionStruct.{u3, u2} n R)), Eq.{max (succ u3) (succ u1)} (Matrix.{u1, u1, u3} p p R) (List.prod.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Matrix.instMulMatrix.{u3, u1} p R _inst_6 (NonUnitalNonAssocRing.toMul.{u3} R (NonAssocRing.toNonUnitalNonAssocRing.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} R (NonAssocRing.toNonUnitalNonAssocRing.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4)))))) (Matrix.one.{u3, u1} p R (fun (a : p) (b : p) => _inst_3 a b) (CommMonoidWithZero.toZero.{u3} R (CommSemiring.toCommMonoidWithZero.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Semiring.toOne.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) (List.map.{max u2 u3, max u1 u3} (Matrix.TransvectionStruct.{u3, u2} n R) (Matrix.{u1, u1, u3} p p R) (Function.comp.{succ (max u2 u3), max (succ u1) (succ u3), succ (max u1 u3)} (Matrix.TransvectionStruct.{u3, u2} n R) (Matrix.TransvectionStruct.{u3, u1} p R) (Matrix.{u1, u1, u3} p p R) (Matrix.TransvectionStruct.toMatrix.{u3, u1} p R (fun (a : p) (b : p) => _inst_3 a b) _inst_4) (Matrix.TransvectionStruct.reindexEquiv.{u3, u2, u1} n p R e)) L)) (FunLike.coe.{max (max (succ u3) (succ u2)) (succ u1), max (succ u3) (succ u2), max (succ u3) (succ u1)} (AlgEquiv.{u3, max u3 u2, max u3 u1} R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) (Matrix.{u2, u2, u3} n n R) (fun (_x : Matrix.{u2, u2, u3} n n R) => (fun (x._@.Mathlib.Algebra.Hom.GroupAction._hyg.2187 : Matrix.{u2, u2, u3} n n R) => Matrix.{u1, u1, u3} p p R) _x) (SMulHomClass.toFunLike.{max (max u3 u2) u1, u3, max u3 u2, max u3 u1} (AlgEquiv.{u3, max u3 u2, max u3 u1} R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (SMulZeroClass.toSMul.{u3, max u3 u2} R (Matrix.{u2, u2, u3} n n R) (AddMonoid.toZero.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (AddCommMonoid.toAddMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b))))))) (DistribSMul.toSMulZeroClass.{u3, max u3 u2} R (Matrix.{u2, u2, u3} n n R) (AddMonoid.toAddZeroClass.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (AddCommMonoid.toAddMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b))))))) (DistribMulAction.toDistribSMul.{u3, max u3 u2} R (Matrix.{u2, u2, u3} n n R) (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) (AddCommMonoid.toAddMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)))))) (Module.toDistribMulAction.{u3, max u3 u2} R (Matrix.{u2, u2, u3} n n R) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b))))) (Algebra.toModule.{u3, max u3 u2} R (Matrix.{u2, u2, u3} n n R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))))))) (SMulZeroClass.toSMul.{u3, max u3 u1} R (Matrix.{u1, u1, u3} p p R) (AddMonoid.toZero.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (AddCommMonoid.toAddMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Semiring.toNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b))))))) (DistribSMul.toSMulZeroClass.{u3, max u3 u1} R (Matrix.{u1, u1, u3} p p R) (AddMonoid.toAddZeroClass.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (AddCommMonoid.toAddMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Semiring.toNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b))))))) (DistribMulAction.toDistribSMul.{u3, max u3 u1} R (Matrix.{u1, u1, u3} p p R) (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) (AddCommMonoid.toAddMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Semiring.toNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)))))) (Module.toDistribMulAction.{u3, max u3 u1} R (Matrix.{u1, u1, u3} p p R) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Semiring.toNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b))))) (Algebra.toModule.{u3, max u3 u1} R (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))))))) (DistribMulActionHomClass.toSMulHomClass.{max (max u3 u2) u1, u3, max u3 u2, max u3 u1} (AlgEquiv.{u3, max u3 u2, max u3 u1} R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) (AddCommMonoid.toAddMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)))))) (AddCommMonoid.toAddMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Semiring.toNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)))))) (Module.toDistribMulAction.{u3, max u3 u2} R (Matrix.{u2, u2, u3} n n R) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b))))) (Algebra.toModule.{u3, max u3 u2} R (Matrix.{u2, u2, u3} n n R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))))) (Module.toDistribMulAction.{u3, max u3 u1} R (Matrix.{u1, u1, u3} p p R) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Semiring.toNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b))))) (Algebra.toModule.{u3, max u3 u1} R (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))))) (NonUnitalAlgHomClass.toDistribMulActionHomClass.{max (max u3 u2) u1, u3, max u3 u2, max u3 u1} (AlgEquiv.{u3, max u3 u2, max u3 u1} R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Semiring.toNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)))) (Module.toDistribMulAction.{u3, max u3 u2} R (Matrix.{u2, u2, u3} n n R) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b))))) (Algebra.toModule.{u3, max u3 u2} R (Matrix.{u2, u2, u3} n n R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))))) (Module.toDistribMulAction.{u3, max u3 u1} R (Matrix.{u1, u1, u3} p p R) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Semiring.toNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b))))) (Algebra.toModule.{u3, max u3 u1} R (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))))) (AlgHom.instNonUnitalAlgHomClassToMonoidToMonoidWithZeroToSemiringToNonUnitalNonAssocSemiringToNonAssocSemiringToNonUnitalNonAssocSemiringToNonAssocSemiringToDistribMulActionToAddCommMonoidToModuleToDistribMulActionToAddCommMonoidToModule.{u3, max u3 u2, max u3 u1, max (max u3 u2) u1} R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (AlgEquiv.{u3, max u3 u2, max u3 u1} R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) (AlgEquivClass.toAlgHomClass.{max (max u3 u2) u1, u3, max u3 u2, max u3 u1} (AlgEquiv.{u3, max u3 u2, max u3 u1} R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (AlgEquiv.instAlgEquivClassAlgEquiv.{u3, max u3 u2, max u3 u1} R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))))))))) (Matrix.reindexAlgEquiv.{u2, u1, u3} n p R (CommRing.toCommSemiring.{u3} R _inst_4) _inst_6 _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (fun (a : p) (b : p) => _inst_3 a b) e) (List.prod.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Matrix.instMulMatrix.{u3, u2} n R _inst_5 (NonUnitalNonAssocRing.toMul.{u3} R (NonAssocRing.toNonUnitalNonAssocRing.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} R (NonAssocRing.toNonUnitalNonAssocRing.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4)))))) (Matrix.one.{u3, u2} n R (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u3} R (CommSemiring.toCommMonoidWithZero.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Semiring.toOne.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) (List.map.{max u2 u3, max u2 u3} (Matrix.TransvectionStruct.{u3, u2} n R) (Matrix.{u2, u2, u3} n n R) (Matrix.TransvectionStruct.toMatrix.{u3, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) L)))
+<too large>
Case conversion may be inaccurate. Consider using '#align matrix.transvection_struct.to_matrix_reindex_equiv_prod Matrix.TransvectionStruct.toMatrix_reindexEquiv_prodₓ'. -/
theorem toMatrix_reindexEquiv_prod (e : n ≃ p) (L : List (TransvectionStruct n R)) :
(L.map (toMatrix ∘ reindexEquiv e)).Prod = reindexAlgEquiv R e (L.map toMatrix).Prod :=
@@ -713,10 +701,7 @@ theorem mul_listTransvecRow_last_row (hM : M (inr unit) (inr unit) ≠ 0) (i : F
#align matrix.pivot.mul_list_transvec_row_last_row Matrix.Pivot.mul_listTransvecRow_last_row
/- warning: matrix.pivot.list_transvec_col_mul_mul_list_transvec_row_last_col -> Matrix.Pivot.listTransvecCol_mul_mul_listTransvecRow_last_col is a dubious translation:
-lean 3 declaration is
- forall {𝕜 : Type.{u1}} [_inst_1 : Field.{u1} 𝕜] {r : Nat} (M : Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜), (Ne.{succ u1} 𝕜 (M (Sum.inr.{0, 0} (Fin r) Unit Unit.unit) (Sum.inr.{0, 0} (Fin r) Unit Unit.unit)) (OfNat.ofNat.{u1} 𝕜 0 (OfNat.mk.{u1} 𝕜 0 (Zero.zero.{u1} 𝕜 (MulZeroClass.toHasZero.{u1} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))))))) -> (forall (i : Fin r), Eq.{succ u1} 𝕜 (Matrix.mul.{u1, 0, 0, 0} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜 (Sum.fintype.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (Distrib.toHasMul.{u1} 𝕜 (Ring.toDistrib.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) (Matrix.mul.{u1, 0, 0, 0} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜 (Sum.fintype.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (Distrib.toHasMul.{u1} 𝕜 (Ring.toDistrib.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) (List.prod.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.hasMul.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (Sum.fintype.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (Distrib.toHasMul.{u1} 𝕜 (Ring.toDistrib.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.hasOne.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.decidableEq.{0, 0} (Fin r) (fun (a : Fin r) (b : Fin r) => Fin.decidableEq r a b) Unit (fun (a : Unit) (b : Unit) => PUnit.decidableEq.{1} a b) a b) (MulZeroClass.toHasZero.{u1} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (AddMonoidWithOne.toOne.{u1} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u1} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u1} 𝕜 (Ring.toAddCommGroupWithOne.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.Pivot.listTransvecCol.{u1} 𝕜 _inst_1 r M)) M) (List.prod.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.hasMul.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (Sum.fintype.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (Distrib.toHasMul.{u1} 𝕜 (Ring.toDistrib.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.hasOne.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.decidableEq.{0, 0} (Fin r) (fun (a : Fin r) (b : Fin r) => Fin.decidableEq r a b) Unit (fun (a : Unit) (b : Unit) => PUnit.decidableEq.{1} a b) a b) (MulZeroClass.toHasZero.{u1} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (AddMonoidWithOne.toOne.{u1} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u1} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u1} 𝕜 (Ring.toAddCommGroupWithOne.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.Pivot.listTransvecRow.{u1} 𝕜 _inst_1 r M)) (Sum.inr.{0, 0} (Fin r) Unit Unit.unit) (Sum.inl.{0, 0} (Fin r) Unit i)) (OfNat.ofNat.{u1} 𝕜 0 (OfNat.mk.{u1} 𝕜 0 (Zero.zero.{u1} 𝕜 (MulZeroClass.toHasZero.{u1} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))))))))
-but is expected to have type
- forall {𝕜 : Type.{u1}} [_inst_1 : Field.{u1} 𝕜] {r : Nat} (M : Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜), (Ne.{succ u1} 𝕜 (M (Sum.inr.{0, 0} (Fin r) Unit Unit.unit) (Sum.inr.{0, 0} (Fin r) Unit Unit.unit)) (OfNat.ofNat.{u1} 𝕜 0 (Zero.toOfNat0.{u1} 𝕜 (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1))))))) -> (forall (i : Fin r), Eq.{succ u1} 𝕜 (Matrix.mul.{u1, 0, 0, 0} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) (Matrix.mul.{u1, 0, 0, 0} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) (List.prod.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.instMulMatrix.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.one.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.instDecidableEqSum.{0, 0} (Fin r) Unit (fun (a : Fin r) (b : Fin r) => instDecidableEqFin r a b) (fun (a : Unit) (b : Unit) => instDecidableEqPUnit.{1} a b) a b) (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))) (Semiring.toOne.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1))))) (Matrix.Pivot.listTransvecCol.{u1} 𝕜 _inst_1 r M)) M) (List.prod.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.instMulMatrix.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.one.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.instDecidableEqSum.{0, 0} (Fin r) Unit (fun (a : Fin r) (b : Fin r) => instDecidableEqFin r a b) (fun (a : Unit) (b : Unit) => instDecidableEqPUnit.{1} a b) a b) (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))) (Semiring.toOne.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1))))) (Matrix.Pivot.listTransvecRow.{u1} 𝕜 _inst_1 r M)) (Sum.inr.{0, 0} (Fin r) Unit Unit.unit) (Sum.inl.{0, 0} (Fin r) Unit i)) (OfNat.ofNat.{u1} 𝕜 0 (Zero.toOfNat0.{u1} 𝕜 (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))))))
+<too large>
Case conversion may be inaccurate. Consider using '#align matrix.pivot.list_transvec_col_mul_mul_list_transvec_row_last_col Matrix.Pivot.listTransvecCol_mul_mul_listTransvecRow_last_colₓ'. -/
/-- Multiplying by all the matrices either in `list_transvec_col M` and `list_transvec_row M` kills
all the coefficients in the last row but the last one. -/
@@ -732,10 +717,7 @@ theorem listTransvecCol_mul_mul_listTransvecRow_last_col (hM : M (inr unit) (inr
#align matrix.pivot.list_transvec_col_mul_mul_list_transvec_row_last_col Matrix.Pivot.listTransvecCol_mul_mul_listTransvecRow_last_col
/- warning: matrix.pivot.list_transvec_col_mul_mul_list_transvec_row_last_row -> Matrix.Pivot.listTransvecCol_mul_mul_listTransvecRow_last_row is a dubious translation:
-lean 3 declaration is
- forall {𝕜 : Type.{u1}} [_inst_1 : Field.{u1} 𝕜] {r : Nat} (M : Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜), (Ne.{succ u1} 𝕜 (M (Sum.inr.{0, 0} (Fin r) Unit Unit.unit) (Sum.inr.{0, 0} (Fin r) Unit Unit.unit)) (OfNat.ofNat.{u1} 𝕜 0 (OfNat.mk.{u1} 𝕜 0 (Zero.zero.{u1} 𝕜 (MulZeroClass.toHasZero.{u1} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))))))) -> (forall (i : Fin r), Eq.{succ u1} 𝕜 (Matrix.mul.{u1, 0, 0, 0} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜 (Sum.fintype.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (Distrib.toHasMul.{u1} 𝕜 (Ring.toDistrib.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) (Matrix.mul.{u1, 0, 0, 0} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜 (Sum.fintype.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (Distrib.toHasMul.{u1} 𝕜 (Ring.toDistrib.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) (List.prod.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.hasMul.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (Sum.fintype.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (Distrib.toHasMul.{u1} 𝕜 (Ring.toDistrib.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.hasOne.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.decidableEq.{0, 0} (Fin r) (fun (a : Fin r) (b : Fin r) => Fin.decidableEq r a b) Unit (fun (a : Unit) (b : Unit) => PUnit.decidableEq.{1} a b) a b) (MulZeroClass.toHasZero.{u1} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (AddMonoidWithOne.toOne.{u1} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u1} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u1} 𝕜 (Ring.toAddCommGroupWithOne.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.Pivot.listTransvecCol.{u1} 𝕜 _inst_1 r M)) M) (List.prod.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.hasMul.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (Sum.fintype.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (Distrib.toHasMul.{u1} 𝕜 (Ring.toDistrib.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.hasOne.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.decidableEq.{0, 0} (Fin r) (fun (a : Fin r) (b : Fin r) => Fin.decidableEq r a b) Unit (fun (a : Unit) (b : Unit) => PUnit.decidableEq.{1} a b) a b) (MulZeroClass.toHasZero.{u1} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (AddMonoidWithOne.toOne.{u1} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u1} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u1} 𝕜 (Ring.toAddCommGroupWithOne.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.Pivot.listTransvecRow.{u1} 𝕜 _inst_1 r M)) (Sum.inl.{0, 0} (Fin r) Unit i) (Sum.inr.{0, 0} (Fin r) Unit Unit.unit)) (OfNat.ofNat.{u1} 𝕜 0 (OfNat.mk.{u1} 𝕜 0 (Zero.zero.{u1} 𝕜 (MulZeroClass.toHasZero.{u1} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))))))))
-but is expected to have type
- forall {𝕜 : Type.{u1}} [_inst_1 : Field.{u1} 𝕜] {r : Nat} (M : Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜), (Ne.{succ u1} 𝕜 (M (Sum.inr.{0, 0} (Fin r) Unit Unit.unit) (Sum.inr.{0, 0} (Fin r) Unit Unit.unit)) (OfNat.ofNat.{u1} 𝕜 0 (Zero.toOfNat0.{u1} 𝕜 (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1))))))) -> (forall (i : Fin r), Eq.{succ u1} 𝕜 (Matrix.mul.{u1, 0, 0, 0} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) (Matrix.mul.{u1, 0, 0, 0} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) (List.prod.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.instMulMatrix.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.one.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.instDecidableEqSum.{0, 0} (Fin r) Unit (fun (a : Fin r) (b : Fin r) => instDecidableEqFin r a b) (fun (a : Unit) (b : Unit) => instDecidableEqPUnit.{1} a b) a b) (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))) (Semiring.toOne.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1))))) (Matrix.Pivot.listTransvecCol.{u1} 𝕜 _inst_1 r M)) M) (List.prod.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.instMulMatrix.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.one.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.instDecidableEqSum.{0, 0} (Fin r) Unit (fun (a : Fin r) (b : Fin r) => instDecidableEqFin r a b) (fun (a : Unit) (b : Unit) => instDecidableEqPUnit.{1} a b) a b) (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))) (Semiring.toOne.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1))))) (Matrix.Pivot.listTransvecRow.{u1} 𝕜 _inst_1 r M)) (Sum.inl.{0, 0} (Fin r) Unit i) (Sum.inr.{0, 0} (Fin r) Unit Unit.unit)) (OfNat.ofNat.{u1} 𝕜 0 (Zero.toOfNat0.{u1} 𝕜 (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))))))
+<too large>
Case conversion may be inaccurate. Consider using '#align matrix.pivot.list_transvec_col_mul_mul_list_transvec_row_last_row Matrix.Pivot.listTransvecCol_mul_mul_listTransvecRow_last_rowₓ'. -/
/-- Multiplying by all the matrices either in `list_transvec_col M` and `list_transvec_row M` kills
all the coefficients in the last column but the last one. -/
@@ -772,10 +754,7 @@ theorem isTwoBlockDiagonal_listTransvecCol_mul_mul_listTransvecRow
#align matrix.pivot.is_two_block_diagonal_list_transvec_col_mul_mul_list_transvec_row Matrix.Pivot.isTwoBlockDiagonal_listTransvecCol_mul_mul_listTransvecRow
/- warning: matrix.pivot.exists_is_two_block_diagonal_of_ne_zero -> Matrix.Pivot.exists_isTwoBlockDiagonal_of_ne_zero is a dubious translation:
-lean 3 declaration is
- forall {𝕜 : Type.{u1}} [_inst_1 : Field.{u1} 𝕜] {r : Nat} (M : Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜), (Ne.{succ u1} 𝕜 (M (Sum.inr.{0, 0} (Fin r) Unit Unit.unit) (Sum.inr.{0, 0} (Fin r) Unit Unit.unit)) (OfNat.ofNat.{u1} 𝕜 0 (OfNat.mk.{u1} 𝕜 0 (Zero.zero.{u1} 𝕜 (MulZeroClass.toHasZero.{u1} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))))))) -> (Exists.{succ u1} (List.{u1} (Matrix.TransvectionStruct.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.decidableEq.{0, 0} (Fin r) (fun (a : Fin r) (b : Fin r) => Fin.decidableEq r a b) Unit (fun (a : Unit) (b : Unit) => PUnit.decidableEq.{1} a b) a b) (EuclideanDomain.toCommRing.{u1} 𝕜 (Field.toEuclideanDomain.{u1} 𝕜 _inst_1)))) (fun (L : List.{u1} (Matrix.TransvectionStruct.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.decidableEq.{0, 0} (Fin r) (fun (a : Fin r) (b : Fin r) => Fin.decidableEq r a b) Unit (fun (a : Unit) (b : Unit) => PUnit.decidableEq.{1} a b) a b) (EuclideanDomain.toCommRing.{u1} 𝕜 (Field.toEuclideanDomain.{u1} 𝕜 _inst_1)))) => Exists.{succ u1} (List.{u1} (Matrix.TransvectionStruct.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.decidableEq.{0, 0} (Fin r) (fun (a : Fin r) (b : Fin r) => Fin.decidableEq r a b) Unit (fun (a : Unit) (b : Unit) => PUnit.decidableEq.{1} a b) a b) (EuclideanDomain.toCommRing.{u1} 𝕜 (Field.toEuclideanDomain.{u1} 𝕜 _inst_1)))) (fun (L' : List.{u1} (Matrix.TransvectionStruct.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.decidableEq.{0, 0} (Fin r) (fun (a : Fin r) (b : Fin r) => Fin.decidableEq r a b) Unit (fun (a : Unit) (b : Unit) => PUnit.decidableEq.{1} a b) a b) (EuclideanDomain.toCommRing.{u1} 𝕜 (Field.toEuclideanDomain.{u1} 𝕜 _inst_1)))) => Matrix.IsTwoBlockDiagonal.{0, 0, 0, 0, u1} (Fin r) Unit (Fin r) Unit 𝕜 (MulZeroClass.toHasZero.{u1} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.mul.{u1, 0, 0, 0} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜 (Sum.fintype.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (Distrib.toHasMul.{u1} 𝕜 (Ring.toDistrib.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) (Matrix.mul.{u1, 0, 0, 0} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜 (Sum.fintype.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (Distrib.toHasMul.{u1} 𝕜 (Ring.toDistrib.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) (List.prod.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.hasMul.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (Sum.fintype.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (Distrib.toHasMul.{u1} 𝕜 (Ring.toDistrib.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.hasOne.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.decidableEq.{0, 0} (Fin r) (fun (a : Fin r) (b : Fin r) => Fin.decidableEq r a b) Unit (fun (a : Unit) (b : Unit) => PUnit.decidableEq.{1} a b) a b) (MulZeroClass.toHasZero.{u1} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (AddMonoidWithOne.toOne.{u1} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u1} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u1} 𝕜 (Ring.toAddCommGroupWithOne.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (List.map.{u1, u1} (Matrix.TransvectionStruct.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.decidableEq.{0, 0} (Fin r) (fun (a : Fin r) (b : Fin r) => Fin.decidableEq r a b) Unit (fun (a : Unit) (b : Unit) => PUnit.decidableEq.{1} a b) a b) (EuclideanDomain.toCommRing.{u1} 𝕜 (Field.toEuclideanDomain.{u1} 𝕜 _inst_1))) (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.TransvectionStruct.toMatrix.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.decidableEq.{0, 0} (Fin r) (fun (a : Fin r) (b : Fin r) => Fin.decidableEq r a b) Unit (fun (a : Unit) (b : Unit) => PUnit.decidableEq.{1} a b) a b) (EuclideanDomain.toCommRing.{u1} 𝕜 (Field.toEuclideanDomain.{u1} 𝕜 _inst_1))) L)) M) (List.prod.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.hasMul.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (Sum.fintype.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (Distrib.toHasMul.{u1} 𝕜 (Ring.toDistrib.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.hasOne.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.decidableEq.{0, 0} (Fin r) (fun (a : Fin r) (b : Fin r) => Fin.decidableEq r a b) Unit (fun (a : Unit) (b : Unit) => PUnit.decidableEq.{1} a b) a b) (MulZeroClass.toHasZero.{u1} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (AddMonoidWithOne.toOne.{u1} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u1} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u1} 𝕜 (Ring.toAddCommGroupWithOne.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (List.map.{u1, u1} (Matrix.TransvectionStruct.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.decidableEq.{0, 0} (Fin r) (fun (a : Fin r) (b : Fin r) => Fin.decidableEq r a b) Unit (fun (a : Unit) (b : Unit) => PUnit.decidableEq.{1} a b) a b) (EuclideanDomain.toCommRing.{u1} 𝕜 (Field.toEuclideanDomain.{u1} 𝕜 _inst_1))) (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.TransvectionStruct.toMatrix.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.decidableEq.{0, 0} (Fin r) (fun (a : Fin r) (b : Fin r) => Fin.decidableEq r a b) Unit (fun (a : Unit) (b : Unit) => PUnit.decidableEq.{1} a b) a b) (EuclideanDomain.toCommRing.{u1} 𝕜 (Field.toEuclideanDomain.{u1} 𝕜 _inst_1))) L'))))))
-but is expected to have type
- forall {𝕜 : Type.{u1}} [_inst_1 : Field.{u1} 𝕜] {r : Nat} (M : Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜), (Ne.{succ u1} 𝕜 (M (Sum.inr.{0, 0} (Fin r) Unit Unit.unit) (Sum.inr.{0, 0} (Fin r) Unit Unit.unit)) (OfNat.ofNat.{u1} 𝕜 0 (Zero.toOfNat0.{u1} 𝕜 (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1))))))) -> (Exists.{succ u1} (List.{u1} (Matrix.TransvectionStruct.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜)) (fun (L : List.{u1} (Matrix.TransvectionStruct.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜)) => Exists.{succ u1} (List.{u1} (Matrix.TransvectionStruct.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜)) (fun (L' : List.{u1} (Matrix.TransvectionStruct.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜)) => Matrix.IsTwoBlockDiagonal.{0, 0, 0, 0, u1} (Fin r) Unit (Fin r) Unit 𝕜 (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))) (Matrix.mul.{u1, 0, 0, 0} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) (Matrix.mul.{u1, 0, 0, 0} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) (List.prod.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.instMulMatrix.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.one.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.instDecidableEqSum.{0, 0} (Fin r) Unit (fun (a : Fin r) (b : Fin r) => instDecidableEqFin r a b) (fun (a : Unit) (b : Unit) => instDecidableEqPUnit.{1} a b) a b) (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))) (Semiring.toOne.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1))))) (List.map.{u1, u1} (Matrix.TransvectionStruct.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.TransvectionStruct.toMatrix.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.instDecidableEqSum.{0, 0} (Fin r) Unit (fun (a : Fin r) (b : Fin r) => instDecidableEqFin r a b) (fun (a : Unit) (b : Unit) => instDecidableEqPUnit.{1} a b) a b) (EuclideanDomain.toCommRing.{u1} 𝕜 (Field.toEuclideanDomain.{u1} 𝕜 _inst_1))) L)) M) (List.prod.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.instMulMatrix.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.one.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.instDecidableEqSum.{0, 0} (Fin r) Unit (fun (a : Fin r) (b : Fin r) => instDecidableEqFin r a b) (fun (a : Unit) (b : Unit) => instDecidableEqPUnit.{1} a b) a b) (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))) (Semiring.toOne.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1))))) (List.map.{u1, u1} (Matrix.TransvectionStruct.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.TransvectionStruct.toMatrix.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.instDecidableEqSum.{0, 0} (Fin r) Unit (fun (a : Fin r) (b : Fin r) => instDecidableEqFin r a b) (fun (a : Unit) (b : Unit) => instDecidableEqPUnit.{1} a b) a b) (EuclideanDomain.toCommRing.{u1} 𝕜 (Field.toEuclideanDomain.{u1} 𝕜 _inst_1))) L'))))))
+<too large>
Case conversion may be inaccurate. Consider using '#align matrix.pivot.exists_is_two_block_diagonal_of_ne_zero Matrix.Pivot.exists_isTwoBlockDiagonal_of_ne_zeroₓ'. -/
/-- There exist two lists of `transvection_struct` such that multiplying by them on the left and
on the right makes a matrix block-diagonal, when the last coefficient is nonzero. -/
@@ -884,10 +863,7 @@ theorem exists_list_transvec_mul_mul_list_transvec_eq_diagonal_induction
variable {n p} [Fintype n] [Fintype p]
/- warning: matrix.pivot.reindex_exists_list_transvec_mul_mul_list_transvec_eq_diagonal -> Matrix.Pivot.reindex_exists_list_transvec_mul_mul_list_transvec_eq_diagonal is a dubious translation:
-lean 3 declaration is
- forall {n : Type.{u1}} {p : Type.{u2}} {𝕜 : Type.{u3}} [_inst_1 : Field.{u3} 𝕜] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : DecidableEq.{succ u2} p] [_inst_5 : Fintype.{u1} n] [_inst_6 : Fintype.{u2} p] (M : Matrix.{u2, u2, u3} p p 𝕜) (e : Equiv.{succ u2, succ u1} p n), (Exists.{succ (max u1 u3)} (List.{max u1 u3} (Matrix.TransvectionStruct.{u3, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u3} 𝕜 (Field.toEuclideanDomain.{u3} 𝕜 _inst_1)))) (fun (L : List.{max u1 u3} (Matrix.TransvectionStruct.{u3, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u3} 𝕜 (Field.toEuclideanDomain.{u3} 𝕜 _inst_1)))) => Exists.{succ (max u1 u3)} (List.{max u1 u3} (Matrix.TransvectionStruct.{u3, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u3} 𝕜 (Field.toEuclideanDomain.{u3} 𝕜 _inst_1)))) (fun (L' : List.{max u1 u3} (Matrix.TransvectionStruct.{u3, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u3} 𝕜 (Field.toEuclideanDomain.{u3} 𝕜 _inst_1)))) => Exists.{max (succ u1) (succ u3)} (n -> 𝕜) (fun (D : n -> 𝕜) => Eq.{succ (max u1 u3)} (Matrix.{u1, u1, u3} n n 𝕜) (Matrix.mul.{u3, u1, u1, u1} n n n 𝕜 _inst_5 (Distrib.toHasMul.{u3} 𝕜 (Ring.toDistrib.{u3} 𝕜 (DivisionRing.toRing.{u3} 𝕜 (Field.toDivisionRing.{u3} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u3} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u3} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u3} 𝕜 (Ring.toNonAssocRing.{u3} 𝕜 (DivisionRing.toRing.{u3} 𝕜 (Field.toDivisionRing.{u3} 𝕜 _inst_1)))))) (Matrix.mul.{u3, u1, u1, u1} n n n 𝕜 _inst_5 (Distrib.toHasMul.{u3} 𝕜 (Ring.toDistrib.{u3} 𝕜 (DivisionRing.toRing.{u3} 𝕜 (Field.toDivisionRing.{u3} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u3} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u3} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u3} 𝕜 (Ring.toNonAssocRing.{u3} 𝕜 (DivisionRing.toRing.{u3} 𝕜 (Field.toDivisionRing.{u3} 𝕜 _inst_1)))))) (List.prod.{max u1 u3} (Matrix.{u1, u1, u3} n n 𝕜) (Matrix.hasMul.{u3, u1} n 𝕜 _inst_5 (Distrib.toHasMul.{u3} 𝕜 (Ring.toDistrib.{u3} 𝕜 (DivisionRing.toRing.{u3} 𝕜 (Field.toDivisionRing.{u3} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u3} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u3} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u3} 𝕜 (Ring.toNonAssocRing.{u3} 𝕜 (DivisionRing.toRing.{u3} 𝕜 (Field.toDivisionRing.{u3} 𝕜 _inst_1))))))) (Matrix.hasOne.{u3, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (MulZeroClass.toHasZero.{u3} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u3} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u3} 𝕜 (Ring.toNonAssocRing.{u3} 𝕜 (DivisionRing.toRing.{u3} 𝕜 (Field.toDivisionRing.{u3} 𝕜 _inst_1))))))) (AddMonoidWithOne.toOne.{u3} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u3} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u3} 𝕜 (Ring.toAddCommGroupWithOne.{u3} 𝕜 (DivisionRing.toRing.{u3} 𝕜 (Field.toDivisionRing.{u3} 𝕜 _inst_1))))))) (List.map.{max u1 u3, max u1 u3} (Matrix.TransvectionStruct.{u3, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u3} 𝕜 (Field.toEuclideanDomain.{u3} 𝕜 _inst_1))) (Matrix.{u1, u1, u3} n n 𝕜) (Matrix.TransvectionStruct.toMatrix.{u3, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u3} 𝕜 (Field.toEuclideanDomain.{u3} 𝕜 _inst_1))) L)) (coeFn.{max (succ (max u2 u3)) (succ (max u1 u3)), max (succ (max u2 u3)) (succ (max u1 u3))} (AlgEquiv.{u3, max u2 u3, max u1 u3} 𝕜 (Matrix.{u2, u2, u3} p p 𝕜) (Matrix.{u1, u1, u3} n n 𝕜) (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1)) (Matrix.semiring.{u3, u2} p 𝕜 (CommSemiring.toSemiring.{u3} 𝕜 (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.semiring.{u3, u1} n 𝕜 (CommSemiring.toSemiring.{u3} 𝕜 (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.algebra.{u3, u2, u3} p 𝕜 𝕜 _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u3} 𝕜 (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1))) (Algebra.id.{u3} 𝕜 (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1)))) (Matrix.algebra.{u3, u1, u3} n 𝕜 𝕜 _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u3} 𝕜 (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1))) (Algebra.id.{u3} 𝕜 (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1))))) (fun (_x : AlgEquiv.{u3, max u2 u3, max u1 u3} 𝕜 (Matrix.{u2, u2, u3} p p 𝕜) (Matrix.{u1, u1, u3} n n 𝕜) (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1)) (Matrix.semiring.{u3, u2} p 𝕜 (CommSemiring.toSemiring.{u3} 𝕜 (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.semiring.{u3, u1} n 𝕜 (CommSemiring.toSemiring.{u3} 𝕜 (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.algebra.{u3, u2, u3} p 𝕜 𝕜 _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u3} 𝕜 (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1))) (Algebra.id.{u3} 𝕜 (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1)))) (Matrix.algebra.{u3, u1, u3} n 𝕜 𝕜 _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u3} 𝕜 (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1))) (Algebra.id.{u3} 𝕜 (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1))))) => (Matrix.{u2, u2, u3} p p 𝕜) -> (Matrix.{u1, u1, u3} n n 𝕜)) (AlgEquiv.hasCoeToFun.{u3, max u2 u3, max u1 u3} 𝕜 (Matrix.{u2, u2, u3} p p 𝕜) (Matrix.{u1, u1, u3} n n 𝕜) (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1)) (Matrix.semiring.{u3, u2} p 𝕜 (CommSemiring.toSemiring.{u3} 𝕜 (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.semiring.{u3, u1} n 𝕜 (CommSemiring.toSemiring.{u3} 𝕜 (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.algebra.{u3, u2, u3} p 𝕜 𝕜 _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u3} 𝕜 (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1))) (Algebra.id.{u3} 𝕜 (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1)))) (Matrix.algebra.{u3, u1, u3} n 𝕜 𝕜 _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u3} 𝕜 (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1))) (Algebra.id.{u3} 𝕜 (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1))))) (Matrix.reindexAlgEquiv.{u2, u1, u3} p n 𝕜 (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1)) _inst_5 _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (fun (a : n) (b : n) => _inst_2 a b) e) M)) (List.prod.{max u1 u3} (Matrix.{u1, u1, u3} n n 𝕜) (Matrix.hasMul.{u3, u1} n 𝕜 _inst_5 (Distrib.toHasMul.{u3} 𝕜 (Ring.toDistrib.{u3} 𝕜 (DivisionRing.toRing.{u3} 𝕜 (Field.toDivisionRing.{u3} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u3} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u3} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u3} 𝕜 (Ring.toNonAssocRing.{u3} 𝕜 (DivisionRing.toRing.{u3} 𝕜 (Field.toDivisionRing.{u3} 𝕜 _inst_1))))))) (Matrix.hasOne.{u3, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (MulZeroClass.toHasZero.{u3} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u3} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u3} 𝕜 (Ring.toNonAssocRing.{u3} 𝕜 (DivisionRing.toRing.{u3} 𝕜 (Field.toDivisionRing.{u3} 𝕜 _inst_1))))))) (AddMonoidWithOne.toOne.{u3} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u3} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u3} 𝕜 (Ring.toAddCommGroupWithOne.{u3} 𝕜 (DivisionRing.toRing.{u3} 𝕜 (Field.toDivisionRing.{u3} 𝕜 _inst_1))))))) (List.map.{max u1 u3, max u1 u3} (Matrix.TransvectionStruct.{u3, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u3} 𝕜 (Field.toEuclideanDomain.{u3} 𝕜 _inst_1))) (Matrix.{u1, u1, u3} n n 𝕜) (Matrix.TransvectionStruct.toMatrix.{u3, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u3} 𝕜 (Field.toEuclideanDomain.{u3} 𝕜 _inst_1))) L'))) (Matrix.diagonal.{u3, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (MulZeroClass.toHasZero.{u3} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u3} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u3} 𝕜 (Ring.toNonAssocRing.{u3} 𝕜 (DivisionRing.toRing.{u3} 𝕜 (Field.toDivisionRing.{u3} 𝕜 _inst_1))))))) D))))) -> (Exists.{succ (max u2 u3)} (List.{max u2 u3} (Matrix.TransvectionStruct.{u3, u2} p 𝕜 (fun (a : p) (b : p) => _inst_3 a b) (EuclideanDomain.toCommRing.{u3} 𝕜 (Field.toEuclideanDomain.{u3} 𝕜 _inst_1)))) (fun (L : List.{max u2 u3} (Matrix.TransvectionStruct.{u3, u2} p 𝕜 (fun (a : p) (b : p) => _inst_3 a b) (EuclideanDomain.toCommRing.{u3} 𝕜 (Field.toEuclideanDomain.{u3} 𝕜 _inst_1)))) => Exists.{succ (max u2 u3)} (List.{max u2 u3} (Matrix.TransvectionStruct.{u3, u2} p 𝕜 (fun (a : p) (b : p) => _inst_3 a b) (EuclideanDomain.toCommRing.{u3} 𝕜 (Field.toEuclideanDomain.{u3} 𝕜 _inst_1)))) (fun (L' : List.{max u2 u3} (Matrix.TransvectionStruct.{u3, u2} p 𝕜 (fun (a : p) (b : p) => _inst_3 a b) (EuclideanDomain.toCommRing.{u3} 𝕜 (Field.toEuclideanDomain.{u3} 𝕜 _inst_1)))) => Exists.{max (succ u2) (succ u3)} (p -> 𝕜) (fun (D : p -> 𝕜) => Eq.{succ (max u2 u3)} (Matrix.{u2, u2, u3} p p 𝕜) (Matrix.mul.{u3, u2, u2, u2} p p p 𝕜 _inst_6 (Distrib.toHasMul.{u3} 𝕜 (Ring.toDistrib.{u3} 𝕜 (DivisionRing.toRing.{u3} 𝕜 (Field.toDivisionRing.{u3} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u3} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u3} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u3} 𝕜 (Ring.toNonAssocRing.{u3} 𝕜 (DivisionRing.toRing.{u3} 𝕜 (Field.toDivisionRing.{u3} 𝕜 _inst_1)))))) (Matrix.mul.{u3, u2, u2, u2} p p p 𝕜 _inst_6 (Distrib.toHasMul.{u3} 𝕜 (Ring.toDistrib.{u3} 𝕜 (DivisionRing.toRing.{u3} 𝕜 (Field.toDivisionRing.{u3} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u3} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u3} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u3} 𝕜 (Ring.toNonAssocRing.{u3} 𝕜 (DivisionRing.toRing.{u3} 𝕜 (Field.toDivisionRing.{u3} 𝕜 _inst_1)))))) (List.prod.{max u2 u3} (Matrix.{u2, u2, u3} p p 𝕜) (Matrix.hasMul.{u3, u2} p 𝕜 _inst_6 (Distrib.toHasMul.{u3} 𝕜 (Ring.toDistrib.{u3} 𝕜 (DivisionRing.toRing.{u3} 𝕜 (Field.toDivisionRing.{u3} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u3} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u3} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u3} 𝕜 (Ring.toNonAssocRing.{u3} 𝕜 (DivisionRing.toRing.{u3} 𝕜 (Field.toDivisionRing.{u3} 𝕜 _inst_1))))))) (Matrix.hasOne.{u3, u2} p 𝕜 (fun (a : p) (b : p) => _inst_3 a b) (MulZeroClass.toHasZero.{u3} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u3} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u3} 𝕜 (Ring.toNonAssocRing.{u3} 𝕜 (DivisionRing.toRing.{u3} 𝕜 (Field.toDivisionRing.{u3} 𝕜 _inst_1))))))) (AddMonoidWithOne.toOne.{u3} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u3} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u3} 𝕜 (Ring.toAddCommGroupWithOne.{u3} 𝕜 (DivisionRing.toRing.{u3} 𝕜 (Field.toDivisionRing.{u3} 𝕜 _inst_1))))))) (List.map.{max u2 u3, max u2 u3} (Matrix.TransvectionStruct.{u3, u2} p 𝕜 (fun (a : p) (b : p) => _inst_3 a b) (EuclideanDomain.toCommRing.{u3} 𝕜 (Field.toEuclideanDomain.{u3} 𝕜 _inst_1))) (Matrix.{u2, u2, u3} p p 𝕜) (Matrix.TransvectionStruct.toMatrix.{u3, u2} p 𝕜 (fun (a : p) (b : p) => _inst_3 a b) (EuclideanDomain.toCommRing.{u3} 𝕜 (Field.toEuclideanDomain.{u3} 𝕜 _inst_1))) L)) M) (List.prod.{max u2 u3} (Matrix.{u2, u2, u3} p p 𝕜) (Matrix.hasMul.{u3, u2} p 𝕜 _inst_6 (Distrib.toHasMul.{u3} 𝕜 (Ring.toDistrib.{u3} 𝕜 (DivisionRing.toRing.{u3} 𝕜 (Field.toDivisionRing.{u3} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u3} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u3} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u3} 𝕜 (Ring.toNonAssocRing.{u3} 𝕜 (DivisionRing.toRing.{u3} 𝕜 (Field.toDivisionRing.{u3} 𝕜 _inst_1))))))) (Matrix.hasOne.{u3, u2} p 𝕜 (fun (a : p) (b : p) => _inst_3 a b) (MulZeroClass.toHasZero.{u3} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u3} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u3} 𝕜 (Ring.toNonAssocRing.{u3} 𝕜 (DivisionRing.toRing.{u3} 𝕜 (Field.toDivisionRing.{u3} 𝕜 _inst_1))))))) (AddMonoidWithOne.toOne.{u3} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u3} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u3} 𝕜 (Ring.toAddCommGroupWithOne.{u3} 𝕜 (DivisionRing.toRing.{u3} 𝕜 (Field.toDivisionRing.{u3} 𝕜 _inst_1))))))) (List.map.{max u2 u3, max u2 u3} (Matrix.TransvectionStruct.{u3, u2} p 𝕜 (fun (a : p) (b : p) => _inst_3 a b) (EuclideanDomain.toCommRing.{u3} 𝕜 (Field.toEuclideanDomain.{u3} 𝕜 _inst_1))) (Matrix.{u2, u2, u3} p p 𝕜) (Matrix.TransvectionStruct.toMatrix.{u3, u2} p 𝕜 (fun (a : p) (b : p) => _inst_3 a b) (EuclideanDomain.toCommRing.{u3} 𝕜 (Field.toEuclideanDomain.{u3} 𝕜 _inst_1))) L'))) (Matrix.diagonal.{u3, u2} p 𝕜 (fun (a : p) (b : p) => _inst_3 a b) (MulZeroClass.toHasZero.{u3} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u3} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u3} 𝕜 (Ring.toNonAssocRing.{u3} 𝕜 (DivisionRing.toRing.{u3} 𝕜 (Field.toDivisionRing.{u3} 𝕜 _inst_1))))))) D)))))
-but is expected to have type
- forall {n : Type.{u1}} {p : Type.{u3}} {𝕜 : Type.{u2}} [_inst_1 : Field.{u2} 𝕜] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : DecidableEq.{succ u3} p] [_inst_5 : Fintype.{u1} n] [_inst_6 : Fintype.{u3} p] (M : Matrix.{u3, u3, u2} p p 𝕜) (e : Equiv.{succ u3, succ u1} p n), (Exists.{max (succ u1) (succ u2)} (List.{max u1 u2} (Matrix.TransvectionStruct.{u2, u1} n 𝕜)) (fun (L : List.{max u1 u2} (Matrix.TransvectionStruct.{u2, u1} n 𝕜)) => Exists.{max (succ u1) (succ u2)} (List.{max u1 u2} (Matrix.TransvectionStruct.{u2, u1} n 𝕜)) (fun (L' : List.{max u1 u2} (Matrix.TransvectionStruct.{u2, u1} n 𝕜)) => Exists.{max (succ u1) (succ u2)} (n -> 𝕜) (fun (D : n -> 𝕜) => Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.mul.{u2, u1, u1, u1} n n n 𝕜 _inst_5 (NonUnitalNonAssocRing.toMul.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1)))))) (Matrix.mul.{u2, u1, u1, u1} n n n 𝕜 _inst_5 (NonUnitalNonAssocRing.toMul.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1)))))) (List.prod.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.instMulMatrix.{u2, u1} n 𝕜 _inst_5 (NonUnitalNonAssocRing.toMul.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))))) (Matrix.one.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u2} 𝕜 (Semifield.toCommGroupWithZero.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))) (Semiring.toOne.{u2} 𝕜 (DivisionSemiring.toSemiring.{u2} 𝕜 (Semifield.toDivisionSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))))) (List.map.{max u1 u2, max u1 u2} (Matrix.TransvectionStruct.{u2, u1} n 𝕜) (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.TransvectionStruct.toMatrix.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u2} 𝕜 (Field.toEuclideanDomain.{u2} 𝕜 _inst_1))) L)) (FunLike.coe.{max (max (succ u1) (succ u3)) (succ u2), max (succ u3) (succ u2), max (succ u1) (succ u2)} (AlgEquiv.{u2, max u2 u3, max u2 u1} 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.{u1, u1, u2} n n 𝕜) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.instAlgebraMatrixSemiring.{u2, u3, u2} p 𝕜 𝕜 _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))) (Matrix.instAlgebraMatrixSemiring.{u2, u1, u2} n 𝕜 𝕜 _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))))) (Matrix.{u3, u3, u2} p p 𝕜) (fun (_x : Matrix.{u3, u3, u2} p p 𝕜) => (fun (x._@.Mathlib.Algebra.Hom.GroupAction._hyg.2187 : Matrix.{u3, u3, u2} p p 𝕜) => Matrix.{u1, u1, u2} n n 𝕜) _x) (SMulHomClass.toFunLike.{max (max u1 u3) u2, u2, max u3 u2, max u1 u2} (AlgEquiv.{u2, max u2 u3, max u2 u1} 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.{u1, u1, u2} n n 𝕜) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.instAlgebraMatrixSemiring.{u2, u3, u2} p 𝕜 𝕜 _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))) (Matrix.instAlgebraMatrixSemiring.{u2, u1, u2} n 𝕜 𝕜 _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))))) 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.{u1, u1, u2} n n 𝕜) (SMulZeroClass.toSMul.{u2, max u3 u2} 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (AddMonoid.toZero.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (AddCommMonoid.toAddMonoid.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b))))))) (DistribSMul.toSMulZeroClass.{u2, max u3 u2} 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (AddMonoid.toAddZeroClass.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (AddCommMonoid.toAddMonoid.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b))))))) (DistribMulAction.toDistribSMul.{u2, max u3 u2} 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (MonoidWithZero.toMonoid.{u2} 𝕜 (Semiring.toMonoidWithZero.{u2} 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))))) (AddCommMonoid.toAddMonoid.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)))))) (Module.toDistribMulAction.{u2, max u3 u2} 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b))))) (Algebra.toModule.{u2, max u3 u2} 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u2, u3, u2} p 𝕜 𝕜 _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))))))))) (SMulZeroClass.toSMul.{u2, max u1 u2} 𝕜 (Matrix.{u1, u1, u2} n n 𝕜) (AddMonoid.toZero.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (AddCommMonoid.toAddMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Semiring.toNonAssocSemiring.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b))))))) (DistribSMul.toSMulZeroClass.{u2, max u1 u2} 𝕜 (Matrix.{u1, u1, u2} n n 𝕜) (AddMonoid.toAddZeroClass.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (AddCommMonoid.toAddMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Semiring.toNonAssocSemiring.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b))))))) (DistribMulAction.toDistribSMul.{u2, max u1 u2} 𝕜 (Matrix.{u1, u1, u2} n n 𝕜) (MonoidWithZero.toMonoid.{u2} 𝕜 (Semiring.toMonoidWithZero.{u2} 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))))) (AddCommMonoid.toAddMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Semiring.toNonAssocSemiring.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)))))) (Module.toDistribMulAction.{u2, max u1 u2} 𝕜 (Matrix.{u1, u1, u2} n n 𝕜) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Semiring.toNonAssocSemiring.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b))))) (Algebra.toModule.{u2, max u1 u2} 𝕜 (Matrix.{u1, u1, u2} n n 𝕜) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.instAlgebraMatrixSemiring.{u2, u1, u2} n 𝕜 𝕜 _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))))))))) (DistribMulActionHomClass.toSMulHomClass.{max (max u1 u3) u2, u2, max u3 u2, max u1 u2} (AlgEquiv.{u2, max u2 u3, max u2 u1} 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.{u1, u1, u2} n n 𝕜) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.instAlgebraMatrixSemiring.{u2, u3, u2} p 𝕜 𝕜 _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))) (Matrix.instAlgebraMatrixSemiring.{u2, u1, u2} n 𝕜 𝕜 _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))))) 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.{u1, u1, u2} n n 𝕜) (MonoidWithZero.toMonoid.{u2} 𝕜 (Semiring.toMonoidWithZero.{u2} 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))))) (AddCommMonoid.toAddMonoid.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)))))) (AddCommMonoid.toAddMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Semiring.toNonAssocSemiring.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)))))) (Module.toDistribMulAction.{u2, max u3 u2} 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b))))) (Algebra.toModule.{u2, max u3 u2} 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u2, u3, u2} p 𝕜 𝕜 _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))))) (Module.toDistribMulAction.{u2, max u1 u2} 𝕜 (Matrix.{u1, u1, u2} n n 𝕜) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Semiring.toNonAssocSemiring.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b))))) (Algebra.toModule.{u2, max u1 u2} 𝕜 (Matrix.{u1, u1, u2} n n 𝕜) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.instAlgebraMatrixSemiring.{u2, u1, u2} n 𝕜 𝕜 _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))))) (NonUnitalAlgHomClass.toDistribMulActionHomClass.{max (max u1 u3) u2, u2, max u3 u2, max u1 u2} (AlgEquiv.{u2, max u2 u3, max u2 u1} 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.{u1, u1, u2} n n 𝕜) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.instAlgebraMatrixSemiring.{u2, u3, u2} p 𝕜 𝕜 _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))) (Matrix.instAlgebraMatrixSemiring.{u2, u1, u2} n 𝕜 𝕜 _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))))) 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.{u1, u1, u2} n n 𝕜) (MonoidWithZero.toMonoid.{u2} 𝕜 (Semiring.toMonoidWithZero.{u2} 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Semiring.toNonAssocSemiring.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)))) (Module.toDistribMulAction.{u2, max u3 u2} 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b))))) (Algebra.toModule.{u2, max u3 u2} 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u2, u3, u2} p 𝕜 𝕜 _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))))) (Module.toDistribMulAction.{u2, max u1 u2} 𝕜 (Matrix.{u1, u1, u2} n n 𝕜) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Semiring.toNonAssocSemiring.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b))))) (Algebra.toModule.{u2, max u1 u2} 𝕜 (Matrix.{u1, u1, u2} n n 𝕜) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.instAlgebraMatrixSemiring.{u2, u1, u2} n 𝕜 𝕜 _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))))) (AlgHom.instNonUnitalAlgHomClassToMonoidToMonoidWithZeroToSemiringToNonUnitalNonAssocSemiringToNonAssocSemiringToNonUnitalNonAssocSemiringToNonAssocSemiringToDistribMulActionToAddCommMonoidToModuleToDistribMulActionToAddCommMonoidToModule.{u2, max u3 u2, max u1 u2, max (max u1 u3) u2} 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.{u1, u1, u2} n n 𝕜) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.instAlgebraMatrixSemiring.{u2, u3, u2} p 𝕜 𝕜 _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))) (Matrix.instAlgebraMatrixSemiring.{u2, u1, u2} n 𝕜 𝕜 _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))) (AlgEquiv.{u2, max u2 u3, max u2 u1} 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.{u1, u1, u2} n n 𝕜) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.instAlgebraMatrixSemiring.{u2, u3, u2} p 𝕜 𝕜 _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))) (Matrix.instAlgebraMatrixSemiring.{u2, u1, u2} n 𝕜 𝕜 _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))))) (AlgEquivClass.toAlgHomClass.{max (max u1 u3) u2, u2, max u3 u2, max u1 u2} (AlgEquiv.{u2, max u2 u3, max u2 u1} 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.{u1, u1, u2} n n 𝕜) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.instAlgebraMatrixSemiring.{u2, u3, u2} p 𝕜 𝕜 _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))) (Matrix.instAlgebraMatrixSemiring.{u2, u1, u2} n 𝕜 𝕜 _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))))) 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.{u1, u1, u2} n n 𝕜) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.instAlgebraMatrixSemiring.{u2, u3, u2} p 𝕜 𝕜 _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))) (Matrix.instAlgebraMatrixSemiring.{u2, u1, u2} n 𝕜 𝕜 _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))) (AlgEquiv.instAlgEquivClassAlgEquiv.{u2, max u3 u2, max u1 u2} 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.{u1, u1, u2} n n 𝕜) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.instAlgebraMatrixSemiring.{u2, u3, u2} p 𝕜 𝕜 _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))) (Matrix.instAlgebraMatrixSemiring.{u2, u1, u2} n 𝕜 𝕜 _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))))))))) (Matrix.reindexAlgEquiv.{u3, u1, u2} p n 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) _inst_5 _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (fun (a : n) (b : n) => _inst_2 a b) e) M)) (List.prod.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.instMulMatrix.{u2, u1} n 𝕜 _inst_5 (NonUnitalNonAssocRing.toMul.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))))) (Matrix.one.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u2} 𝕜 (Semifield.toCommGroupWithZero.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))) (Semiring.toOne.{u2} 𝕜 (DivisionSemiring.toSemiring.{u2} 𝕜 (Semifield.toDivisionSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))))) (List.map.{max u1 u2, max u1 u2} (Matrix.TransvectionStruct.{u2, u1} n 𝕜) (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.TransvectionStruct.toMatrix.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u2} 𝕜 (Field.toEuclideanDomain.{u2} 𝕜 _inst_1))) L'))) (Matrix.diagonal.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u2} 𝕜 (Semifield.toCommGroupWithZero.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))) D))))) -> (Exists.{max (succ u3) (succ u2)} (List.{max u3 u2} (Matrix.TransvectionStruct.{u2, u3} p 𝕜)) (fun (L : List.{max u3 u2} (Matrix.TransvectionStruct.{u2, u3} p 𝕜)) => Exists.{max (succ u3) (succ u2)} (List.{max u3 u2} (Matrix.TransvectionStruct.{u2, u3} p 𝕜)) (fun (L' : List.{max u3 u2} (Matrix.TransvectionStruct.{u2, u3} p 𝕜)) => Exists.{max (succ u3) (succ u2)} (p -> 𝕜) (fun (D : p -> 𝕜) => Eq.{max (succ u3) (succ u2)} (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.mul.{u2, u3, u3, u3} p p p 𝕜 _inst_6 (NonUnitalNonAssocRing.toMul.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1)))))) (Matrix.mul.{u2, u3, u3, u3} p p p 𝕜 _inst_6 (NonUnitalNonAssocRing.toMul.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1)))))) (List.prod.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.instMulMatrix.{u2, u3} p 𝕜 _inst_6 (NonUnitalNonAssocRing.toMul.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))))) (Matrix.one.{u2, u3} p 𝕜 (fun (a : p) (b : p) => _inst_3 a b) (CommMonoidWithZero.toZero.{u2} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u2} 𝕜 (Semifield.toCommGroupWithZero.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))) (Semiring.toOne.{u2} 𝕜 (DivisionSemiring.toSemiring.{u2} 𝕜 (Semifield.toDivisionSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))))) (List.map.{max u3 u2, max u3 u2} (Matrix.TransvectionStruct.{u2, u3} p 𝕜) (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.TransvectionStruct.toMatrix.{u2, u3} p 𝕜 (fun (a : p) (b : p) => _inst_3 a b) (EuclideanDomain.toCommRing.{u2} 𝕜 (Field.toEuclideanDomain.{u2} 𝕜 _inst_1))) L)) M) (List.prod.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.instMulMatrix.{u2, u3} p 𝕜 _inst_6 (NonUnitalNonAssocRing.toMul.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))))) (Matrix.one.{u2, u3} p 𝕜 (fun (a : p) (b : p) => _inst_3 a b) (CommMonoidWithZero.toZero.{u2} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u2} 𝕜 (Semifield.toCommGroupWithZero.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))) (Semiring.toOne.{u2} 𝕜 (DivisionSemiring.toSemiring.{u2} 𝕜 (Semifield.toDivisionSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))))) (List.map.{max u3 u2, max u3 u2} (Matrix.TransvectionStruct.{u2, u3} p 𝕜) (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.TransvectionStruct.toMatrix.{u2, u3} p 𝕜 (fun (a : p) (b : p) => _inst_3 a b) (EuclideanDomain.toCommRing.{u2} 𝕜 (Field.toEuclideanDomain.{u2} 𝕜 _inst_1))) L'))) (Matrix.diagonal.{u2, u3} p 𝕜 (fun (a : p) (b : p) => _inst_3 a b) (CommMonoidWithZero.toZero.{u2} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u2} 𝕜 (Semifield.toCommGroupWithZero.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))) D)))))
+<too large>
Case conversion may be inaccurate. Consider using '#align matrix.pivot.reindex_exists_list_transvec_mul_mul_list_transvec_eq_diagonal Matrix.Pivot.reindex_exists_list_transvec_mul_mul_list_transvec_eq_diagonalₓ'. -/
/-- Reduction to diagonal form by elementary operations is invariant under reindexing. -/
theorem reindex_exists_list_transvec_mul_mul_list_transvec_eq_diagonal (M : Matrix p p 𝕜)
mathlib commit https://github.com/leanprover-community/mathlib/commit/8d33f09cd7089ecf074b4791907588245aec5d1b
@@ -458,7 +458,7 @@ variable [Fintype n] [Fintype p]
lean 3 declaration is
forall {n : Type.{u2}} {p : Type.{u3}} {R : Type.{u1}} [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : DecidableEq.{succ u3} p] [_inst_4 : CommRing.{u1} R] [_inst_5 : Fintype.{u2} n] [_inst_6 : Fintype.{u3} p] (e : Equiv.{succ u2, succ u3} n p) (t : Matrix.TransvectionStruct.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4), Eq.{succ (max u3 u1)} (Matrix.{u3, u3, u1} p p R) (Matrix.TransvectionStruct.toMatrix.{u1, u3} p R (fun (a : p) (b : p) => _inst_3 a b) _inst_4 (Matrix.TransvectionStruct.reindexEquiv.{u1, u2, u3} n p R (fun (a : n) (b : n) => _inst_2 a b) (fun (a : p) (b : p) => _inst_3 a b) _inst_4 e t)) (coeFn.{max (succ (max u2 u1)) (succ (max u3 u1)), max (succ (max u2 u1)) (succ (max u3 u1))} (AlgEquiv.{u1, max u2 u1, max u3 u1} R (Matrix.{u2, u2, u1} n n R) (Matrix.{u3, u3, u1} p p R) (CommRing.toCommSemiring.{u1} R _inst_4) (Matrix.semiring.{u1, u2} n R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u1, u3} p R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.algebra.{u1, u2, u1} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u1} R _inst_4) (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4)) (Algebra.id.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4))) (Matrix.algebra.{u1, u3, u1} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u1} R _inst_4) (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4)) (Algebra.id.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4)))) (fun (_x : AlgEquiv.{u1, max u2 u1, max u3 u1} R (Matrix.{u2, u2, u1} n n R) (Matrix.{u3, u3, u1} p p R) (CommRing.toCommSemiring.{u1} R _inst_4) (Matrix.semiring.{u1, u2} n R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u1, u3} p R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.algebra.{u1, u2, u1} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u1} R _inst_4) (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4)) (Algebra.id.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4))) (Matrix.algebra.{u1, u3, u1} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u1} R _inst_4) (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4)) (Algebra.id.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4)))) => (Matrix.{u2, u2, u1} n n R) -> (Matrix.{u3, u3, u1} p p R)) (AlgEquiv.hasCoeToFun.{u1, max u2 u1, max u3 u1} R (Matrix.{u2, u2, u1} n n R) (Matrix.{u3, u3, u1} p p R) (CommRing.toCommSemiring.{u1} R _inst_4) (Matrix.semiring.{u1, u2} n R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u1, u3} p R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.algebra.{u1, u2, u1} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u1} R _inst_4) (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4)) (Algebra.id.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4))) (Matrix.algebra.{u1, u3, u1} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u1} R _inst_4) (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4)) (Algebra.id.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4)))) (Matrix.reindexAlgEquiv.{u2, u3, u1} n p R (CommRing.toCommSemiring.{u1} R _inst_4) _inst_6 _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (fun (a : p) (b : p) => _inst_3 a b) e) (Matrix.TransvectionStruct.toMatrix.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 t))
but is expected to have type
- forall {n : Type.{u2}} {p : Type.{u1}} {R : Type.{u3}} [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : DecidableEq.{succ u1} p] [_inst_4 : CommRing.{u3} R] [_inst_5 : Fintype.{u2} n] [_inst_6 : Fintype.{u1} p] (e : Equiv.{succ u2, succ u1} n p) (t : Matrix.TransvectionStruct.{u3, u2} n R), Eq.{max (succ u3) (succ u1)} (Matrix.{u1, u1, u3} p p R) (Matrix.TransvectionStruct.toMatrix.{u3, u1} p R (fun (a : p) (b : p) => _inst_3 a b) _inst_4 (Matrix.TransvectionStruct.reindexEquiv.{u3, u2, u1} n p R e t)) (FunLike.coe.{max (max (succ u3) (succ u2)) (succ u1), max (succ u3) (succ u2), max (succ u3) (succ u1)} (AlgEquiv.{u3, max u3 u2, max u3 u1} R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) (Matrix.{u2, u2, u3} n n R) (fun (_x : Matrix.{u2, u2, u3} n n R) => (fun (x._@.Mathlib.Algebra.Hom.GroupAction._hyg.2186 : Matrix.{u2, u2, u3} n n R) => Matrix.{u1, u1, u3} p p R) _x) (SMulHomClass.toFunLike.{max (max u3 u2) u1, u3, max u3 u2, max u3 u1} (AlgEquiv.{u3, max u3 u2, max u3 u1} R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (SMulZeroClass.toSMul.{u3, max u3 u2} R (Matrix.{u2, u2, u3} n n R) (AddMonoid.toZero.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (AddCommMonoid.toAddMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b))))))) (DistribSMul.toSMulZeroClass.{u3, max u3 u2} R (Matrix.{u2, u2, u3} n n R) (AddMonoid.toAddZeroClass.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (AddCommMonoid.toAddMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b))))))) (DistribMulAction.toDistribSMul.{u3, max u3 u2} R (Matrix.{u2, u2, u3} n n R) (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) (AddCommMonoid.toAddMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)))))) (Module.toDistribMulAction.{u3, max u3 u2} R (Matrix.{u2, u2, u3} n n R) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b))))) (Algebra.toModule.{u3, max u3 u2} R (Matrix.{u2, u2, u3} n n R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))))))) (SMulZeroClass.toSMul.{u3, max u3 u1} R (Matrix.{u1, u1, u3} p p R) (AddMonoid.toZero.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (AddCommMonoid.toAddMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Semiring.toNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b))))))) (DistribSMul.toSMulZeroClass.{u3, max u3 u1} R (Matrix.{u1, u1, u3} p p R) (AddMonoid.toAddZeroClass.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (AddCommMonoid.toAddMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Semiring.toNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b))))))) (DistribMulAction.toDistribSMul.{u3, max u3 u1} R (Matrix.{u1, u1, u3} p p R) (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) (AddCommMonoid.toAddMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Semiring.toNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)))))) (Module.toDistribMulAction.{u3, max u3 u1} R (Matrix.{u1, u1, u3} p p R) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Semiring.toNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b))))) (Algebra.toModule.{u3, max u3 u1} R (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))))))) (DistribMulActionHomClass.toSMulHomClass.{max (max u3 u2) u1, u3, max u3 u2, max u3 u1} (AlgEquiv.{u3, max u3 u2, max u3 u1} R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) (AddCommMonoid.toAddMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)))))) (AddCommMonoid.toAddMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Semiring.toNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)))))) (Module.toDistribMulAction.{u3, max u3 u2} R (Matrix.{u2, u2, u3} n n R) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b))))) (Algebra.toModule.{u3, max u3 u2} R (Matrix.{u2, u2, u3} n n R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))))) (Module.toDistribMulAction.{u3, max u3 u1} R (Matrix.{u1, u1, u3} p p R) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Semiring.toNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b))))) (Algebra.toModule.{u3, max u3 u1} R (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))))) (NonUnitalAlgHomClass.toDistribMulActionHomClass.{max (max u3 u2) u1, u3, max u3 u2, max u3 u1} (AlgEquiv.{u3, max u3 u2, max u3 u1} R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Semiring.toNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)))) (Module.toDistribMulAction.{u3, max u3 u2} R (Matrix.{u2, u2, u3} n n R) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b))))) (Algebra.toModule.{u3, max u3 u2} R (Matrix.{u2, u2, u3} n n R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))))) (Module.toDistribMulAction.{u3, max u3 u1} R (Matrix.{u1, u1, u3} p p R) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Semiring.toNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b))))) (Algebra.toModule.{u3, max u3 u1} R (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))))) (AlgHom.instNonUnitalAlgHomClassToMonoidToMonoidWithZeroToSemiringToNonUnitalNonAssocSemiringToNonAssocSemiringToNonUnitalNonAssocSemiringToNonAssocSemiringToDistribMulActionToAddCommMonoidToModuleToDistribMulActionToAddCommMonoidToModule.{u3, max u3 u2, max u3 u1, max (max u3 u2) u1} R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (AlgEquiv.{u3, max u3 u2, max u3 u1} R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) (AlgEquivClass.toAlgHomClass.{max (max u3 u2) u1, u3, max u3 u2, max u3 u1} (AlgEquiv.{u3, max u3 u2, max u3 u1} R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (AlgEquiv.instAlgEquivClassAlgEquiv.{u3, max u3 u2, max u3 u1} R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))))))))) (Matrix.reindexAlgEquiv.{u2, u1, u3} n p R (CommRing.toCommSemiring.{u3} R _inst_4) _inst_6 _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (fun (a : p) (b : p) => _inst_3 a b) e) (Matrix.TransvectionStruct.toMatrix.{u3, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 t))
+ forall {n : Type.{u2}} {p : Type.{u1}} {R : Type.{u3}} [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : DecidableEq.{succ u1} p] [_inst_4 : CommRing.{u3} R] [_inst_5 : Fintype.{u2} n] [_inst_6 : Fintype.{u1} p] (e : Equiv.{succ u2, succ u1} n p) (t : Matrix.TransvectionStruct.{u3, u2} n R), Eq.{max (succ u3) (succ u1)} (Matrix.{u1, u1, u3} p p R) (Matrix.TransvectionStruct.toMatrix.{u3, u1} p R (fun (a : p) (b : p) => _inst_3 a b) _inst_4 (Matrix.TransvectionStruct.reindexEquiv.{u3, u2, u1} n p R e t)) (FunLike.coe.{max (max (succ u3) (succ u2)) (succ u1), max (succ u3) (succ u2), max (succ u3) (succ u1)} (AlgEquiv.{u3, max u3 u2, max u3 u1} R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) (Matrix.{u2, u2, u3} n n R) (fun (_x : Matrix.{u2, u2, u3} n n R) => (fun (x._@.Mathlib.Algebra.Hom.GroupAction._hyg.2187 : Matrix.{u2, u2, u3} n n R) => Matrix.{u1, u1, u3} p p R) _x) (SMulHomClass.toFunLike.{max (max u3 u2) u1, u3, max u3 u2, max u3 u1} (AlgEquiv.{u3, max u3 u2, max u3 u1} R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (SMulZeroClass.toSMul.{u3, max u3 u2} R (Matrix.{u2, u2, u3} n n R) (AddMonoid.toZero.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (AddCommMonoid.toAddMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b))))))) (DistribSMul.toSMulZeroClass.{u3, max u3 u2} R (Matrix.{u2, u2, u3} n n R) (AddMonoid.toAddZeroClass.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (AddCommMonoid.toAddMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b))))))) (DistribMulAction.toDistribSMul.{u3, max u3 u2} R (Matrix.{u2, u2, u3} n n R) (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) (AddCommMonoid.toAddMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)))))) (Module.toDistribMulAction.{u3, max u3 u2} R (Matrix.{u2, u2, u3} n n R) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b))))) (Algebra.toModule.{u3, max u3 u2} R (Matrix.{u2, u2, u3} n n R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))))))) (SMulZeroClass.toSMul.{u3, max u3 u1} R (Matrix.{u1, u1, u3} p p R) (AddMonoid.toZero.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (AddCommMonoid.toAddMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Semiring.toNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b))))))) (DistribSMul.toSMulZeroClass.{u3, max u3 u1} R (Matrix.{u1, u1, u3} p p R) (AddMonoid.toAddZeroClass.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (AddCommMonoid.toAddMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Semiring.toNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b))))))) (DistribMulAction.toDistribSMul.{u3, max u3 u1} R (Matrix.{u1, u1, u3} p p R) (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) (AddCommMonoid.toAddMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Semiring.toNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)))))) (Module.toDistribMulAction.{u3, max u3 u1} R (Matrix.{u1, u1, u3} p p R) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Semiring.toNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b))))) (Algebra.toModule.{u3, max u3 u1} R (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))))))) (DistribMulActionHomClass.toSMulHomClass.{max (max u3 u2) u1, u3, max u3 u2, max u3 u1} (AlgEquiv.{u3, max u3 u2, max u3 u1} R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) (AddCommMonoid.toAddMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)))))) (AddCommMonoid.toAddMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Semiring.toNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)))))) (Module.toDistribMulAction.{u3, max u3 u2} R (Matrix.{u2, u2, u3} n n R) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b))))) (Algebra.toModule.{u3, max u3 u2} R (Matrix.{u2, u2, u3} n n R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))))) (Module.toDistribMulAction.{u3, max u3 u1} R (Matrix.{u1, u1, u3} p p R) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Semiring.toNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b))))) (Algebra.toModule.{u3, max u3 u1} R (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))))) (NonUnitalAlgHomClass.toDistribMulActionHomClass.{max (max u3 u2) u1, u3, max u3 u2, max u3 u1} (AlgEquiv.{u3, max u3 u2, max u3 u1} R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Semiring.toNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)))) (Module.toDistribMulAction.{u3, max u3 u2} R (Matrix.{u2, u2, u3} n n R) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b))))) (Algebra.toModule.{u3, max u3 u2} R (Matrix.{u2, u2, u3} n n R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))))) (Module.toDistribMulAction.{u3, max u3 u1} R (Matrix.{u1, u1, u3} p p R) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Semiring.toNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b))))) (Algebra.toModule.{u3, max u3 u1} R (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))))) (AlgHom.instNonUnitalAlgHomClassToMonoidToMonoidWithZeroToSemiringToNonUnitalNonAssocSemiringToNonAssocSemiringToNonUnitalNonAssocSemiringToNonAssocSemiringToDistribMulActionToAddCommMonoidToModuleToDistribMulActionToAddCommMonoidToModule.{u3, max u3 u2, max u3 u1, max (max u3 u2) u1} R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (AlgEquiv.{u3, max u3 u2, max u3 u1} R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) (AlgEquivClass.toAlgHomClass.{max (max u3 u2) u1, u3, max u3 u2, max u3 u1} (AlgEquiv.{u3, max u3 u2, max u3 u1} R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (AlgEquiv.instAlgEquivClassAlgEquiv.{u3, max u3 u2, max u3 u1} R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))))))))) (Matrix.reindexAlgEquiv.{u2, u1, u3} n p R (CommRing.toCommSemiring.{u3} R _inst_4) _inst_6 _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (fun (a : p) (b : p) => _inst_3 a b) e) (Matrix.TransvectionStruct.toMatrix.{u3, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 t))
Case conversion may be inaccurate. Consider using '#align matrix.transvection_struct.to_matrix_reindex_equiv Matrix.TransvectionStruct.toMatrix_reindexEquivₓ'. -/
theorem toMatrix_reindexEquiv (e : n ≃ p) (t : TransvectionStruct n R) :
(t.reindexEquiv e).toMatrix = reindexAlgEquiv R e t.toMatrix :=
@@ -475,7 +475,7 @@ theorem toMatrix_reindexEquiv (e : n ≃ p) (t : TransvectionStruct n R) :
lean 3 declaration is
forall {n : Type.{u2}} {p : Type.{u3}} {R : Type.{u1}} [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : DecidableEq.{succ u3} p] [_inst_4 : CommRing.{u1} R] [_inst_5 : Fintype.{u2} n] [_inst_6 : Fintype.{u3} p] (e : Equiv.{succ u2, succ u3} n p) (L : List.{max u2 u1} (Matrix.TransvectionStruct.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4)), Eq.{succ (max u3 u1)} (Matrix.{u3, u3, u1} p p R) (List.prod.{max u3 u1} (Matrix.{u3, u3, u1} p p R) (Matrix.hasMul.{u1, u3} p R _inst_6 (Distrib.toHasMul.{u1} R (Ring.toDistrib.{u1} R (CommRing.toRing.{u1} R _inst_4))) (AddCommGroup.toAddCommMonoid.{u1} R (NonUnitalNonAssocRing.toAddCommGroup.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (Matrix.hasOne.{u1, u3} p R (fun (a : p) (b : p) => _inst_3 a b) (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (AddMonoidWithOne.toOne.{u1} R (AddGroupWithOne.toAddMonoidWithOne.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (Ring.toAddCommGroupWithOne.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (List.map.{max u2 u1, max u3 u1} (Matrix.TransvectionStruct.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) (Matrix.{u3, u3, u1} p p R) (Function.comp.{succ (max u2 u1), max (succ u3) (succ u1), succ (max u3 u1)} (Matrix.TransvectionStruct.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) (Matrix.TransvectionStruct.{u1, u3} p R (fun (a : p) (b : p) => _inst_3 a b) _inst_4) (Matrix.{u3, u3, u1} p p R) (Matrix.TransvectionStruct.toMatrix.{u1, u3} p R (fun (a : p) (b : p) => _inst_3 a b) _inst_4) (Matrix.TransvectionStruct.reindexEquiv.{u1, u2, u3} n p R (fun (a : n) (b : n) => _inst_2 a b) (fun (a : p) (b : p) => _inst_3 a b) _inst_4 e)) L)) (coeFn.{max (succ (max u2 u1)) (succ (max u3 u1)), max (succ (max u2 u1)) (succ (max u3 u1))} (AlgEquiv.{u1, max u2 u1, max u3 u1} R (Matrix.{u2, u2, u1} n n R) (Matrix.{u3, u3, u1} p p R) (CommRing.toCommSemiring.{u1} R _inst_4) (Matrix.semiring.{u1, u2} n R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u1, u3} p R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.algebra.{u1, u2, u1} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u1} R _inst_4) (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4)) (Algebra.id.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4))) (Matrix.algebra.{u1, u3, u1} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u1} R _inst_4) (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4)) (Algebra.id.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4)))) (fun (_x : AlgEquiv.{u1, max u2 u1, max u3 u1} R (Matrix.{u2, u2, u1} n n R) (Matrix.{u3, u3, u1} p p R) (CommRing.toCommSemiring.{u1} R _inst_4) (Matrix.semiring.{u1, u2} n R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u1, u3} p R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.algebra.{u1, u2, u1} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u1} R _inst_4) (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4)) (Algebra.id.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4))) (Matrix.algebra.{u1, u3, u1} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u1} R _inst_4) (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4)) (Algebra.id.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4)))) => (Matrix.{u2, u2, u1} n n R) -> (Matrix.{u3, u3, u1} p p R)) (AlgEquiv.hasCoeToFun.{u1, max u2 u1, max u3 u1} R (Matrix.{u2, u2, u1} n n R) (Matrix.{u3, u3, u1} p p R) (CommRing.toCommSemiring.{u1} R _inst_4) (Matrix.semiring.{u1, u2} n R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u1, u3} p R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.algebra.{u1, u2, u1} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u1} R _inst_4) (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4)) (Algebra.id.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4))) (Matrix.algebra.{u1, u3, u1} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u1} R _inst_4) (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4)) (Algebra.id.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4)))) (Matrix.reindexAlgEquiv.{u2, u3, u1} n p R (CommRing.toCommSemiring.{u1} R _inst_4) _inst_6 _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (fun (a : p) (b : p) => _inst_3 a b) e) (List.prod.{max u2 u1} (Matrix.{u2, u2, u1} n n R) (Matrix.hasMul.{u1, u2} n R _inst_5 (Distrib.toHasMul.{u1} R (Ring.toDistrib.{u1} R (CommRing.toRing.{u1} R _inst_4))) (AddCommGroup.toAddCommMonoid.{u1} R (NonUnitalNonAssocRing.toAddCommGroup.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (Matrix.hasOne.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (AddMonoidWithOne.toOne.{u1} R (AddGroupWithOne.toAddMonoidWithOne.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (Ring.toAddCommGroupWithOne.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (List.map.{max u2 u1, max u2 u1} (Matrix.TransvectionStruct.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) (Matrix.{u2, u2, u1} n n R) (Matrix.TransvectionStruct.toMatrix.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) L)))
but is expected to have type
- forall {n : Type.{u2}} {p : Type.{u1}} {R : Type.{u3}} [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : DecidableEq.{succ u1} p] [_inst_4 : CommRing.{u3} R] [_inst_5 : Fintype.{u2} n] [_inst_6 : Fintype.{u1} p] (e : Equiv.{succ u2, succ u1} n p) (L : List.{max u2 u3} (Matrix.TransvectionStruct.{u3, u2} n R)), Eq.{max (succ u3) (succ u1)} (Matrix.{u1, u1, u3} p p R) (List.prod.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Matrix.instMulMatrix.{u3, u1} p R _inst_6 (NonUnitalNonAssocRing.toMul.{u3} R (NonAssocRing.toNonUnitalNonAssocRing.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} R (NonAssocRing.toNonUnitalNonAssocRing.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4)))))) (Matrix.one.{u3, u1} p R (fun (a : p) (b : p) => _inst_3 a b) (CommMonoidWithZero.toZero.{u3} R (CommSemiring.toCommMonoidWithZero.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Semiring.toOne.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) (List.map.{max u2 u3, max u1 u3} (Matrix.TransvectionStruct.{u3, u2} n R) (Matrix.{u1, u1, u3} p p R) (Function.comp.{succ (max u2 u3), max (succ u1) (succ u3), succ (max u1 u3)} (Matrix.TransvectionStruct.{u3, u2} n R) (Matrix.TransvectionStruct.{u3, u1} p R) (Matrix.{u1, u1, u3} p p R) (Matrix.TransvectionStruct.toMatrix.{u3, u1} p R (fun (a : p) (b : p) => _inst_3 a b) _inst_4) (Matrix.TransvectionStruct.reindexEquiv.{u3, u2, u1} n p R e)) L)) (FunLike.coe.{max (max (succ u3) (succ u2)) (succ u1), max (succ u3) (succ u2), max (succ u3) (succ u1)} (AlgEquiv.{u3, max u3 u2, max u3 u1} R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) (Matrix.{u2, u2, u3} n n R) (fun (_x : Matrix.{u2, u2, u3} n n R) => (fun (x._@.Mathlib.Algebra.Hom.GroupAction._hyg.2186 : Matrix.{u2, u2, u3} n n R) => Matrix.{u1, u1, u3} p p R) _x) (SMulHomClass.toFunLike.{max (max u3 u2) u1, u3, max u3 u2, max u3 u1} (AlgEquiv.{u3, max u3 u2, max u3 u1} R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (SMulZeroClass.toSMul.{u3, max u3 u2} R (Matrix.{u2, u2, u3} n n R) (AddMonoid.toZero.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (AddCommMonoid.toAddMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b))))))) (DistribSMul.toSMulZeroClass.{u3, max u3 u2} R (Matrix.{u2, u2, u3} n n R) (AddMonoid.toAddZeroClass.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (AddCommMonoid.toAddMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b))))))) (DistribMulAction.toDistribSMul.{u3, max u3 u2} R (Matrix.{u2, u2, u3} n n R) (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) (AddCommMonoid.toAddMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)))))) (Module.toDistribMulAction.{u3, max u3 u2} R (Matrix.{u2, u2, u3} n n R) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b))))) (Algebra.toModule.{u3, max u3 u2} R (Matrix.{u2, u2, u3} n n R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))))))) (SMulZeroClass.toSMul.{u3, max u3 u1} R (Matrix.{u1, u1, u3} p p R) (AddMonoid.toZero.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (AddCommMonoid.toAddMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Semiring.toNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b))))))) (DistribSMul.toSMulZeroClass.{u3, max u3 u1} R (Matrix.{u1, u1, u3} p p R) (AddMonoid.toAddZeroClass.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (AddCommMonoid.toAddMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Semiring.toNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b))))))) (DistribMulAction.toDistribSMul.{u3, max u3 u1} R (Matrix.{u1, u1, u3} p p R) (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) (AddCommMonoid.toAddMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Semiring.toNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)))))) (Module.toDistribMulAction.{u3, max u3 u1} R (Matrix.{u1, u1, u3} p p R) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Semiring.toNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b))))) (Algebra.toModule.{u3, max u3 u1} R (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))))))) (DistribMulActionHomClass.toSMulHomClass.{max (max u3 u2) u1, u3, max u3 u2, max u3 u1} (AlgEquiv.{u3, max u3 u2, max u3 u1} R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) (AddCommMonoid.toAddMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)))))) (AddCommMonoid.toAddMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Semiring.toNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)))))) (Module.toDistribMulAction.{u3, max u3 u2} R (Matrix.{u2, u2, u3} n n R) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b))))) (Algebra.toModule.{u3, max u3 u2} R (Matrix.{u2, u2, u3} n n R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))))) (Module.toDistribMulAction.{u3, max u3 u1} R (Matrix.{u1, u1, u3} p p R) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Semiring.toNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b))))) (Algebra.toModule.{u3, max u3 u1} R (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))))) (NonUnitalAlgHomClass.toDistribMulActionHomClass.{max (max u3 u2) u1, u3, max u3 u2, max u3 u1} (AlgEquiv.{u3, max u3 u2, max u3 u1} R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Semiring.toNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)))) (Module.toDistribMulAction.{u3, max u3 u2} R (Matrix.{u2, u2, u3} n n R) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b))))) (Algebra.toModule.{u3, max u3 u2} R (Matrix.{u2, u2, u3} n n R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))))) (Module.toDistribMulAction.{u3, max u3 u1} R (Matrix.{u1, u1, u3} p p R) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Semiring.toNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b))))) (Algebra.toModule.{u3, max u3 u1} R (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))))) (AlgHom.instNonUnitalAlgHomClassToMonoidToMonoidWithZeroToSemiringToNonUnitalNonAssocSemiringToNonAssocSemiringToNonUnitalNonAssocSemiringToNonAssocSemiringToDistribMulActionToAddCommMonoidToModuleToDistribMulActionToAddCommMonoidToModule.{u3, max u3 u2, max u3 u1, max (max u3 u2) u1} R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (AlgEquiv.{u3, max u3 u2, max u3 u1} R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) (AlgEquivClass.toAlgHomClass.{max (max u3 u2) u1, u3, max u3 u2, max u3 u1} (AlgEquiv.{u3, max u3 u2, max u3 u1} R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (AlgEquiv.instAlgEquivClassAlgEquiv.{u3, max u3 u2, max u3 u1} R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))))))))) (Matrix.reindexAlgEquiv.{u2, u1, u3} n p R (CommRing.toCommSemiring.{u3} R _inst_4) _inst_6 _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (fun (a : p) (b : p) => _inst_3 a b) e) (List.prod.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Matrix.instMulMatrix.{u3, u2} n R _inst_5 (NonUnitalNonAssocRing.toMul.{u3} R (NonAssocRing.toNonUnitalNonAssocRing.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} R (NonAssocRing.toNonUnitalNonAssocRing.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4)))))) (Matrix.one.{u3, u2} n R (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u3} R (CommSemiring.toCommMonoidWithZero.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Semiring.toOne.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) (List.map.{max u2 u3, max u2 u3} (Matrix.TransvectionStruct.{u3, u2} n R) (Matrix.{u2, u2, u3} n n R) (Matrix.TransvectionStruct.toMatrix.{u3, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) L)))
+ forall {n : Type.{u2}} {p : Type.{u1}} {R : Type.{u3}} [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : DecidableEq.{succ u1} p] [_inst_4 : CommRing.{u3} R] [_inst_5 : Fintype.{u2} n] [_inst_6 : Fintype.{u1} p] (e : Equiv.{succ u2, succ u1} n p) (L : List.{max u2 u3} (Matrix.TransvectionStruct.{u3, u2} n R)), Eq.{max (succ u3) (succ u1)} (Matrix.{u1, u1, u3} p p R) (List.prod.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Matrix.instMulMatrix.{u3, u1} p R _inst_6 (NonUnitalNonAssocRing.toMul.{u3} R (NonAssocRing.toNonUnitalNonAssocRing.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} R (NonAssocRing.toNonUnitalNonAssocRing.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4)))))) (Matrix.one.{u3, u1} p R (fun (a : p) (b : p) => _inst_3 a b) (CommMonoidWithZero.toZero.{u3} R (CommSemiring.toCommMonoidWithZero.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Semiring.toOne.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) (List.map.{max u2 u3, max u1 u3} (Matrix.TransvectionStruct.{u3, u2} n R) (Matrix.{u1, u1, u3} p p R) (Function.comp.{succ (max u2 u3), max (succ u1) (succ u3), succ (max u1 u3)} (Matrix.TransvectionStruct.{u3, u2} n R) (Matrix.TransvectionStruct.{u3, u1} p R) (Matrix.{u1, u1, u3} p p R) (Matrix.TransvectionStruct.toMatrix.{u3, u1} p R (fun (a : p) (b : p) => _inst_3 a b) _inst_4) (Matrix.TransvectionStruct.reindexEquiv.{u3, u2, u1} n p R e)) L)) (FunLike.coe.{max (max (succ u3) (succ u2)) (succ u1), max (succ u3) (succ u2), max (succ u3) (succ u1)} (AlgEquiv.{u3, max u3 u2, max u3 u1} R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) (Matrix.{u2, u2, u3} n n R) (fun (_x : Matrix.{u2, u2, u3} n n R) => (fun (x._@.Mathlib.Algebra.Hom.GroupAction._hyg.2187 : Matrix.{u2, u2, u3} n n R) => Matrix.{u1, u1, u3} p p R) _x) (SMulHomClass.toFunLike.{max (max u3 u2) u1, u3, max u3 u2, max u3 u1} (AlgEquiv.{u3, max u3 u2, max u3 u1} R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (SMulZeroClass.toSMul.{u3, max u3 u2} R (Matrix.{u2, u2, u3} n n R) (AddMonoid.toZero.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (AddCommMonoid.toAddMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b))))))) (DistribSMul.toSMulZeroClass.{u3, max u3 u2} R (Matrix.{u2, u2, u3} n n R) (AddMonoid.toAddZeroClass.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (AddCommMonoid.toAddMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b))))))) (DistribMulAction.toDistribSMul.{u3, max u3 u2} R (Matrix.{u2, u2, u3} n n R) (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) (AddCommMonoid.toAddMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)))))) (Module.toDistribMulAction.{u3, max u3 u2} R (Matrix.{u2, u2, u3} n n R) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b))))) (Algebra.toModule.{u3, max u3 u2} R (Matrix.{u2, u2, u3} n n R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))))))) (SMulZeroClass.toSMul.{u3, max u3 u1} R (Matrix.{u1, u1, u3} p p R) (AddMonoid.toZero.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (AddCommMonoid.toAddMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Semiring.toNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b))))))) (DistribSMul.toSMulZeroClass.{u3, max u3 u1} R (Matrix.{u1, u1, u3} p p R) (AddMonoid.toAddZeroClass.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (AddCommMonoid.toAddMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Semiring.toNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b))))))) (DistribMulAction.toDistribSMul.{u3, max u3 u1} R (Matrix.{u1, u1, u3} p p R) (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) (AddCommMonoid.toAddMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Semiring.toNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)))))) (Module.toDistribMulAction.{u3, max u3 u1} R (Matrix.{u1, u1, u3} p p R) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Semiring.toNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b))))) (Algebra.toModule.{u3, max u3 u1} R (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))))))) (DistribMulActionHomClass.toSMulHomClass.{max (max u3 u2) u1, u3, max u3 u2, max u3 u1} (AlgEquiv.{u3, max u3 u2, max u3 u1} R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) (AddCommMonoid.toAddMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)))))) (AddCommMonoid.toAddMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Semiring.toNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)))))) (Module.toDistribMulAction.{u3, max u3 u2} R (Matrix.{u2, u2, u3} n n R) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b))))) (Algebra.toModule.{u3, max u3 u2} R (Matrix.{u2, u2, u3} n n R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))))) (Module.toDistribMulAction.{u3, max u3 u1} R (Matrix.{u1, u1, u3} p p R) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Semiring.toNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b))))) (Algebra.toModule.{u3, max u3 u1} R (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))))) (NonUnitalAlgHomClass.toDistribMulActionHomClass.{max (max u3 u2) u1, u3, max u3 u2, max u3 u1} (AlgEquiv.{u3, max u3 u2, max u3 u1} R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Semiring.toNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)))) (Module.toDistribMulAction.{u3, max u3 u2} R (Matrix.{u2, u2, u3} n n R) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b))))) (Algebra.toModule.{u3, max u3 u2} R (Matrix.{u2, u2, u3} n n R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))))) (Module.toDistribMulAction.{u3, max u3 u1} R (Matrix.{u1, u1, u3} p p R) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Semiring.toNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b))))) (Algebra.toModule.{u3, max u3 u1} R (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))))) (AlgHom.instNonUnitalAlgHomClassToMonoidToMonoidWithZeroToSemiringToNonUnitalNonAssocSemiringToNonAssocSemiringToNonUnitalNonAssocSemiringToNonAssocSemiringToDistribMulActionToAddCommMonoidToModuleToDistribMulActionToAddCommMonoidToModule.{u3, max u3 u2, max u3 u1, max (max u3 u2) u1} R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (AlgEquiv.{u3, max u3 u2, max u3 u1} R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) (AlgEquivClass.toAlgHomClass.{max (max u3 u2) u1, u3, max u3 u2, max u3 u1} (AlgEquiv.{u3, max u3 u2, max u3 u1} R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (AlgEquiv.instAlgEquivClassAlgEquiv.{u3, max u3 u2, max u3 u1} R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))))))))) (Matrix.reindexAlgEquiv.{u2, u1, u3} n p R (CommRing.toCommSemiring.{u3} R _inst_4) _inst_6 _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (fun (a : p) (b : p) => _inst_3 a b) e) (List.prod.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Matrix.instMulMatrix.{u3, u2} n R _inst_5 (NonUnitalNonAssocRing.toMul.{u3} R (NonAssocRing.toNonUnitalNonAssocRing.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} R (NonAssocRing.toNonUnitalNonAssocRing.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4)))))) (Matrix.one.{u3, u2} n R (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u3} R (CommSemiring.toCommMonoidWithZero.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Semiring.toOne.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) (List.map.{max u2 u3, max u2 u3} (Matrix.TransvectionStruct.{u3, u2} n R) (Matrix.{u2, u2, u3} n n R) (Matrix.TransvectionStruct.toMatrix.{u3, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) L)))
Case conversion may be inaccurate. Consider using '#align matrix.transvection_struct.to_matrix_reindex_equiv_prod Matrix.TransvectionStruct.toMatrix_reindexEquiv_prodₓ'. -/
theorem toMatrix_reindexEquiv_prod (e : n ≃ p) (L : List (TransvectionStruct n R)) :
(L.map (toMatrix ∘ reindexEquiv e)).Prod = reindexAlgEquiv R e (L.map toMatrix).Prod :=
@@ -887,7 +887,7 @@ variable {n p} [Fintype n] [Fintype p]
lean 3 declaration is
forall {n : Type.{u1}} {p : Type.{u2}} {𝕜 : Type.{u3}} [_inst_1 : Field.{u3} 𝕜] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : DecidableEq.{succ u2} p] [_inst_5 : Fintype.{u1} n] [_inst_6 : Fintype.{u2} p] (M : Matrix.{u2, u2, u3} p p 𝕜) (e : Equiv.{succ u2, succ u1} p n), (Exists.{succ (max u1 u3)} (List.{max u1 u3} (Matrix.TransvectionStruct.{u3, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u3} 𝕜 (Field.toEuclideanDomain.{u3} 𝕜 _inst_1)))) (fun (L : List.{max u1 u3} (Matrix.TransvectionStruct.{u3, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u3} 𝕜 (Field.toEuclideanDomain.{u3} 𝕜 _inst_1)))) => Exists.{succ (max u1 u3)} (List.{max u1 u3} (Matrix.TransvectionStruct.{u3, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u3} 𝕜 (Field.toEuclideanDomain.{u3} 𝕜 _inst_1)))) (fun (L' : List.{max u1 u3} (Matrix.TransvectionStruct.{u3, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u3} 𝕜 (Field.toEuclideanDomain.{u3} 𝕜 _inst_1)))) => Exists.{max (succ u1) (succ u3)} (n -> 𝕜) (fun (D : n -> 𝕜) => Eq.{succ (max u1 u3)} (Matrix.{u1, u1, u3} n n 𝕜) (Matrix.mul.{u3, u1, u1, u1} n n n 𝕜 _inst_5 (Distrib.toHasMul.{u3} 𝕜 (Ring.toDistrib.{u3} 𝕜 (DivisionRing.toRing.{u3} 𝕜 (Field.toDivisionRing.{u3} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u3} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u3} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u3} 𝕜 (Ring.toNonAssocRing.{u3} 𝕜 (DivisionRing.toRing.{u3} 𝕜 (Field.toDivisionRing.{u3} 𝕜 _inst_1)))))) (Matrix.mul.{u3, u1, u1, u1} n n n 𝕜 _inst_5 (Distrib.toHasMul.{u3} 𝕜 (Ring.toDistrib.{u3} 𝕜 (DivisionRing.toRing.{u3} 𝕜 (Field.toDivisionRing.{u3} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u3} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u3} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u3} 𝕜 (Ring.toNonAssocRing.{u3} 𝕜 (DivisionRing.toRing.{u3} 𝕜 (Field.toDivisionRing.{u3} 𝕜 _inst_1)))))) (List.prod.{max u1 u3} (Matrix.{u1, u1, u3} n n 𝕜) (Matrix.hasMul.{u3, u1} n 𝕜 _inst_5 (Distrib.toHasMul.{u3} 𝕜 (Ring.toDistrib.{u3} 𝕜 (DivisionRing.toRing.{u3} 𝕜 (Field.toDivisionRing.{u3} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u3} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u3} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u3} 𝕜 (Ring.toNonAssocRing.{u3} 𝕜 (DivisionRing.toRing.{u3} 𝕜 (Field.toDivisionRing.{u3} 𝕜 _inst_1))))))) (Matrix.hasOne.{u3, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (MulZeroClass.toHasZero.{u3} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u3} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u3} 𝕜 (Ring.toNonAssocRing.{u3} 𝕜 (DivisionRing.toRing.{u3} 𝕜 (Field.toDivisionRing.{u3} 𝕜 _inst_1))))))) (AddMonoidWithOne.toOne.{u3} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u3} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u3} 𝕜 (Ring.toAddCommGroupWithOne.{u3} 𝕜 (DivisionRing.toRing.{u3} 𝕜 (Field.toDivisionRing.{u3} 𝕜 _inst_1))))))) (List.map.{max u1 u3, max u1 u3} (Matrix.TransvectionStruct.{u3, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u3} 𝕜 (Field.toEuclideanDomain.{u3} 𝕜 _inst_1))) (Matrix.{u1, u1, u3} n n 𝕜) (Matrix.TransvectionStruct.toMatrix.{u3, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u3} 𝕜 (Field.toEuclideanDomain.{u3} 𝕜 _inst_1))) L)) (coeFn.{max (succ (max u2 u3)) (succ (max u1 u3)), max (succ (max u2 u3)) (succ (max u1 u3))} (AlgEquiv.{u3, max u2 u3, max u1 u3} 𝕜 (Matrix.{u2, u2, u3} p p 𝕜) (Matrix.{u1, u1, u3} n n 𝕜) (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1)) (Matrix.semiring.{u3, u2} p 𝕜 (CommSemiring.toSemiring.{u3} 𝕜 (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.semiring.{u3, u1} n 𝕜 (CommSemiring.toSemiring.{u3} 𝕜 (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.algebra.{u3, u2, u3} p 𝕜 𝕜 _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u3} 𝕜 (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1))) (Algebra.id.{u3} 𝕜 (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1)))) (Matrix.algebra.{u3, u1, u3} n 𝕜 𝕜 _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u3} 𝕜 (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1))) (Algebra.id.{u3} 𝕜 (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1))))) (fun (_x : AlgEquiv.{u3, max u2 u3, max u1 u3} 𝕜 (Matrix.{u2, u2, u3} p p 𝕜) (Matrix.{u1, u1, u3} n n 𝕜) (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1)) (Matrix.semiring.{u3, u2} p 𝕜 (CommSemiring.toSemiring.{u3} 𝕜 (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.semiring.{u3, u1} n 𝕜 (CommSemiring.toSemiring.{u3} 𝕜 (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.algebra.{u3, u2, u3} p 𝕜 𝕜 _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u3} 𝕜 (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1))) (Algebra.id.{u3} 𝕜 (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1)))) (Matrix.algebra.{u3, u1, u3} n 𝕜 𝕜 _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u3} 𝕜 (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1))) (Algebra.id.{u3} 𝕜 (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1))))) => (Matrix.{u2, u2, u3} p p 𝕜) -> (Matrix.{u1, u1, u3} n n 𝕜)) (AlgEquiv.hasCoeToFun.{u3, max u2 u3, max u1 u3} 𝕜 (Matrix.{u2, u2, u3} p p 𝕜) (Matrix.{u1, u1, u3} n n 𝕜) (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1)) (Matrix.semiring.{u3, u2} p 𝕜 (CommSemiring.toSemiring.{u3} 𝕜 (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.semiring.{u3, u1} n 𝕜 (CommSemiring.toSemiring.{u3} 𝕜 (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.algebra.{u3, u2, u3} p 𝕜 𝕜 _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u3} 𝕜 (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1))) (Algebra.id.{u3} 𝕜 (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1)))) (Matrix.algebra.{u3, u1, u3} n 𝕜 𝕜 _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u3} 𝕜 (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1))) (Algebra.id.{u3} 𝕜 (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1))))) (Matrix.reindexAlgEquiv.{u2, u1, u3} p n 𝕜 (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1)) _inst_5 _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (fun (a : n) (b : n) => _inst_2 a b) e) M)) (List.prod.{max u1 u3} (Matrix.{u1, u1, u3} n n 𝕜) (Matrix.hasMul.{u3, u1} n 𝕜 _inst_5 (Distrib.toHasMul.{u3} 𝕜 (Ring.toDistrib.{u3} 𝕜 (DivisionRing.toRing.{u3} 𝕜 (Field.toDivisionRing.{u3} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u3} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u3} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u3} 𝕜 (Ring.toNonAssocRing.{u3} 𝕜 (DivisionRing.toRing.{u3} 𝕜 (Field.toDivisionRing.{u3} 𝕜 _inst_1))))))) (Matrix.hasOne.{u3, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (MulZeroClass.toHasZero.{u3} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u3} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u3} 𝕜 (Ring.toNonAssocRing.{u3} 𝕜 (DivisionRing.toRing.{u3} 𝕜 (Field.toDivisionRing.{u3} 𝕜 _inst_1))))))) (AddMonoidWithOne.toOne.{u3} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u3} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u3} 𝕜 (Ring.toAddCommGroupWithOne.{u3} 𝕜 (DivisionRing.toRing.{u3} 𝕜 (Field.toDivisionRing.{u3} 𝕜 _inst_1))))))) (List.map.{max u1 u3, max u1 u3} (Matrix.TransvectionStruct.{u3, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u3} 𝕜 (Field.toEuclideanDomain.{u3} 𝕜 _inst_1))) (Matrix.{u1, u1, u3} n n 𝕜) (Matrix.TransvectionStruct.toMatrix.{u3, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u3} 𝕜 (Field.toEuclideanDomain.{u3} 𝕜 _inst_1))) L'))) (Matrix.diagonal.{u3, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (MulZeroClass.toHasZero.{u3} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u3} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u3} 𝕜 (Ring.toNonAssocRing.{u3} 𝕜 (DivisionRing.toRing.{u3} 𝕜 (Field.toDivisionRing.{u3} 𝕜 _inst_1))))))) D))))) -> (Exists.{succ (max u2 u3)} (List.{max u2 u3} (Matrix.TransvectionStruct.{u3, u2} p 𝕜 (fun (a : p) (b : p) => _inst_3 a b) (EuclideanDomain.toCommRing.{u3} 𝕜 (Field.toEuclideanDomain.{u3} 𝕜 _inst_1)))) (fun (L : List.{max u2 u3} (Matrix.TransvectionStruct.{u3, u2} p 𝕜 (fun (a : p) (b : p) => _inst_3 a b) (EuclideanDomain.toCommRing.{u3} 𝕜 (Field.toEuclideanDomain.{u3} 𝕜 _inst_1)))) => Exists.{succ (max u2 u3)} (List.{max u2 u3} (Matrix.TransvectionStruct.{u3, u2} p 𝕜 (fun (a : p) (b : p) => _inst_3 a b) (EuclideanDomain.toCommRing.{u3} 𝕜 (Field.toEuclideanDomain.{u3} 𝕜 _inst_1)))) (fun (L' : List.{max u2 u3} (Matrix.TransvectionStruct.{u3, u2} p 𝕜 (fun (a : p) (b : p) => _inst_3 a b) (EuclideanDomain.toCommRing.{u3} 𝕜 (Field.toEuclideanDomain.{u3} 𝕜 _inst_1)))) => Exists.{max (succ u2) (succ u3)} (p -> 𝕜) (fun (D : p -> 𝕜) => Eq.{succ (max u2 u3)} (Matrix.{u2, u2, u3} p p 𝕜) (Matrix.mul.{u3, u2, u2, u2} p p p 𝕜 _inst_6 (Distrib.toHasMul.{u3} 𝕜 (Ring.toDistrib.{u3} 𝕜 (DivisionRing.toRing.{u3} 𝕜 (Field.toDivisionRing.{u3} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u3} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u3} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u3} 𝕜 (Ring.toNonAssocRing.{u3} 𝕜 (DivisionRing.toRing.{u3} 𝕜 (Field.toDivisionRing.{u3} 𝕜 _inst_1)))))) (Matrix.mul.{u3, u2, u2, u2} p p p 𝕜 _inst_6 (Distrib.toHasMul.{u3} 𝕜 (Ring.toDistrib.{u3} 𝕜 (DivisionRing.toRing.{u3} 𝕜 (Field.toDivisionRing.{u3} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u3} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u3} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u3} 𝕜 (Ring.toNonAssocRing.{u3} 𝕜 (DivisionRing.toRing.{u3} 𝕜 (Field.toDivisionRing.{u3} 𝕜 _inst_1)))))) (List.prod.{max u2 u3} (Matrix.{u2, u2, u3} p p 𝕜) (Matrix.hasMul.{u3, u2} p 𝕜 _inst_6 (Distrib.toHasMul.{u3} 𝕜 (Ring.toDistrib.{u3} 𝕜 (DivisionRing.toRing.{u3} 𝕜 (Field.toDivisionRing.{u3} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u3} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u3} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u3} 𝕜 (Ring.toNonAssocRing.{u3} 𝕜 (DivisionRing.toRing.{u3} 𝕜 (Field.toDivisionRing.{u3} 𝕜 _inst_1))))))) (Matrix.hasOne.{u3, u2} p 𝕜 (fun (a : p) (b : p) => _inst_3 a b) (MulZeroClass.toHasZero.{u3} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u3} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u3} 𝕜 (Ring.toNonAssocRing.{u3} 𝕜 (DivisionRing.toRing.{u3} 𝕜 (Field.toDivisionRing.{u3} 𝕜 _inst_1))))))) (AddMonoidWithOne.toOne.{u3} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u3} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u3} 𝕜 (Ring.toAddCommGroupWithOne.{u3} 𝕜 (DivisionRing.toRing.{u3} 𝕜 (Field.toDivisionRing.{u3} 𝕜 _inst_1))))))) (List.map.{max u2 u3, max u2 u3} (Matrix.TransvectionStruct.{u3, u2} p 𝕜 (fun (a : p) (b : p) => _inst_3 a b) (EuclideanDomain.toCommRing.{u3} 𝕜 (Field.toEuclideanDomain.{u3} 𝕜 _inst_1))) (Matrix.{u2, u2, u3} p p 𝕜) (Matrix.TransvectionStruct.toMatrix.{u3, u2} p 𝕜 (fun (a : p) (b : p) => _inst_3 a b) (EuclideanDomain.toCommRing.{u3} 𝕜 (Field.toEuclideanDomain.{u3} 𝕜 _inst_1))) L)) M) (List.prod.{max u2 u3} (Matrix.{u2, u2, u3} p p 𝕜) (Matrix.hasMul.{u3, u2} p 𝕜 _inst_6 (Distrib.toHasMul.{u3} 𝕜 (Ring.toDistrib.{u3} 𝕜 (DivisionRing.toRing.{u3} 𝕜 (Field.toDivisionRing.{u3} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u3} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u3} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u3} 𝕜 (Ring.toNonAssocRing.{u3} 𝕜 (DivisionRing.toRing.{u3} 𝕜 (Field.toDivisionRing.{u3} 𝕜 _inst_1))))))) (Matrix.hasOne.{u3, u2} p 𝕜 (fun (a : p) (b : p) => _inst_3 a b) (MulZeroClass.toHasZero.{u3} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u3} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u3} 𝕜 (Ring.toNonAssocRing.{u3} 𝕜 (DivisionRing.toRing.{u3} 𝕜 (Field.toDivisionRing.{u3} 𝕜 _inst_1))))))) (AddMonoidWithOne.toOne.{u3} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u3} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u3} 𝕜 (Ring.toAddCommGroupWithOne.{u3} 𝕜 (DivisionRing.toRing.{u3} 𝕜 (Field.toDivisionRing.{u3} 𝕜 _inst_1))))))) (List.map.{max u2 u3, max u2 u3} (Matrix.TransvectionStruct.{u3, u2} p 𝕜 (fun (a : p) (b : p) => _inst_3 a b) (EuclideanDomain.toCommRing.{u3} 𝕜 (Field.toEuclideanDomain.{u3} 𝕜 _inst_1))) (Matrix.{u2, u2, u3} p p 𝕜) (Matrix.TransvectionStruct.toMatrix.{u3, u2} p 𝕜 (fun (a : p) (b : p) => _inst_3 a b) (EuclideanDomain.toCommRing.{u3} 𝕜 (Field.toEuclideanDomain.{u3} 𝕜 _inst_1))) L'))) (Matrix.diagonal.{u3, u2} p 𝕜 (fun (a : p) (b : p) => _inst_3 a b) (MulZeroClass.toHasZero.{u3} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u3} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u3} 𝕜 (Ring.toNonAssocRing.{u3} 𝕜 (DivisionRing.toRing.{u3} 𝕜 (Field.toDivisionRing.{u3} 𝕜 _inst_1))))))) D)))))
but is expected to have type
- forall {n : Type.{u1}} {p : Type.{u3}} {𝕜 : Type.{u2}} [_inst_1 : Field.{u2} 𝕜] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : DecidableEq.{succ u3} p] [_inst_5 : Fintype.{u1} n] [_inst_6 : Fintype.{u3} p] (M : Matrix.{u3, u3, u2} p p 𝕜) (e : Equiv.{succ u3, succ u1} p n), (Exists.{max (succ u1) (succ u2)} (List.{max u1 u2} (Matrix.TransvectionStruct.{u2, u1} n 𝕜)) (fun (L : List.{max u1 u2} (Matrix.TransvectionStruct.{u2, u1} n 𝕜)) => Exists.{max (succ u1) (succ u2)} (List.{max u1 u2} (Matrix.TransvectionStruct.{u2, u1} n 𝕜)) (fun (L' : List.{max u1 u2} (Matrix.TransvectionStruct.{u2, u1} n 𝕜)) => Exists.{max (succ u1) (succ u2)} (n -> 𝕜) (fun (D : n -> 𝕜) => Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.mul.{u2, u1, u1, u1} n n n 𝕜 _inst_5 (NonUnitalNonAssocRing.toMul.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1)))))) (Matrix.mul.{u2, u1, u1, u1} n n n 𝕜 _inst_5 (NonUnitalNonAssocRing.toMul.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1)))))) (List.prod.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.instMulMatrix.{u2, u1} n 𝕜 _inst_5 (NonUnitalNonAssocRing.toMul.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))))) (Matrix.one.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u2} 𝕜 (Semifield.toCommGroupWithZero.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))) (Semiring.toOne.{u2} 𝕜 (DivisionSemiring.toSemiring.{u2} 𝕜 (Semifield.toDivisionSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))))) (List.map.{max u1 u2, max u1 u2} (Matrix.TransvectionStruct.{u2, u1} n 𝕜) (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.TransvectionStruct.toMatrix.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u2} 𝕜 (Field.toEuclideanDomain.{u2} 𝕜 _inst_1))) L)) (FunLike.coe.{max (max (succ u1) (succ u3)) (succ u2), max (succ u3) (succ u2), max (succ u1) (succ u2)} (AlgEquiv.{u2, max u2 u3, max u2 u1} 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.{u1, u1, u2} n n 𝕜) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.instAlgebraMatrixSemiring.{u2, u3, u2} p 𝕜 𝕜 _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))) (Matrix.instAlgebraMatrixSemiring.{u2, u1, u2} n 𝕜 𝕜 _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))))) (Matrix.{u3, u3, u2} p p 𝕜) (fun (_x : Matrix.{u3, u3, u2} p p 𝕜) => (fun (x._@.Mathlib.Algebra.Hom.GroupAction._hyg.2186 : Matrix.{u3, u3, u2} p p 𝕜) => Matrix.{u1, u1, u2} n n 𝕜) _x) (SMulHomClass.toFunLike.{max (max u1 u3) u2, u2, max u3 u2, max u1 u2} (AlgEquiv.{u2, max u2 u3, max u2 u1} 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.{u1, u1, u2} n n 𝕜) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.instAlgebraMatrixSemiring.{u2, u3, u2} p 𝕜 𝕜 _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))) (Matrix.instAlgebraMatrixSemiring.{u2, u1, u2} n 𝕜 𝕜 _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))))) 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.{u1, u1, u2} n n 𝕜) (SMulZeroClass.toSMul.{u2, max u3 u2} 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (AddMonoid.toZero.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (AddCommMonoid.toAddMonoid.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b))))))) (DistribSMul.toSMulZeroClass.{u2, max u3 u2} 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (AddMonoid.toAddZeroClass.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (AddCommMonoid.toAddMonoid.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b))))))) (DistribMulAction.toDistribSMul.{u2, max u3 u2} 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (MonoidWithZero.toMonoid.{u2} 𝕜 (Semiring.toMonoidWithZero.{u2} 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))))) (AddCommMonoid.toAddMonoid.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)))))) (Module.toDistribMulAction.{u2, max u3 u2} 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b))))) (Algebra.toModule.{u2, max u3 u2} 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u2, u3, u2} p 𝕜 𝕜 _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))))))))) (SMulZeroClass.toSMul.{u2, max u1 u2} 𝕜 (Matrix.{u1, u1, u2} n n 𝕜) (AddMonoid.toZero.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (AddCommMonoid.toAddMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Semiring.toNonAssocSemiring.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b))))))) (DistribSMul.toSMulZeroClass.{u2, max u1 u2} 𝕜 (Matrix.{u1, u1, u2} n n 𝕜) (AddMonoid.toAddZeroClass.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (AddCommMonoid.toAddMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Semiring.toNonAssocSemiring.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b))))))) (DistribMulAction.toDistribSMul.{u2, max u1 u2} 𝕜 (Matrix.{u1, u1, u2} n n 𝕜) (MonoidWithZero.toMonoid.{u2} 𝕜 (Semiring.toMonoidWithZero.{u2} 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))))) (AddCommMonoid.toAddMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Semiring.toNonAssocSemiring.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)))))) (Module.toDistribMulAction.{u2, max u1 u2} 𝕜 (Matrix.{u1, u1, u2} n n 𝕜) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Semiring.toNonAssocSemiring.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b))))) (Algebra.toModule.{u2, max u1 u2} 𝕜 (Matrix.{u1, u1, u2} n n 𝕜) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.instAlgebraMatrixSemiring.{u2, u1, u2} n 𝕜 𝕜 _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))))))))) (DistribMulActionHomClass.toSMulHomClass.{max (max u1 u3) u2, u2, max u3 u2, max u1 u2} (AlgEquiv.{u2, max u2 u3, max u2 u1} 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.{u1, u1, u2} n n 𝕜) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.instAlgebraMatrixSemiring.{u2, u3, u2} p 𝕜 𝕜 _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))) (Matrix.instAlgebraMatrixSemiring.{u2, u1, u2} n 𝕜 𝕜 _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))))) 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.{u1, u1, u2} n n 𝕜) (MonoidWithZero.toMonoid.{u2} 𝕜 (Semiring.toMonoidWithZero.{u2} 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))))) (AddCommMonoid.toAddMonoid.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)))))) (AddCommMonoid.toAddMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Semiring.toNonAssocSemiring.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)))))) (Module.toDistribMulAction.{u2, max u3 u2} 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b))))) (Algebra.toModule.{u2, max u3 u2} 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u2, u3, u2} p 𝕜 𝕜 _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))))) (Module.toDistribMulAction.{u2, max u1 u2} 𝕜 (Matrix.{u1, u1, u2} n n 𝕜) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Semiring.toNonAssocSemiring.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b))))) (Algebra.toModule.{u2, max u1 u2} 𝕜 (Matrix.{u1, u1, u2} n n 𝕜) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.instAlgebraMatrixSemiring.{u2, u1, u2} n 𝕜 𝕜 _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))))) (NonUnitalAlgHomClass.toDistribMulActionHomClass.{max (max u1 u3) u2, u2, max u3 u2, max u1 u2} (AlgEquiv.{u2, max u2 u3, max u2 u1} 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.{u1, u1, u2} n n 𝕜) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.instAlgebraMatrixSemiring.{u2, u3, u2} p 𝕜 𝕜 _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))) (Matrix.instAlgebraMatrixSemiring.{u2, u1, u2} n 𝕜 𝕜 _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))))) 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.{u1, u1, u2} n n 𝕜) (MonoidWithZero.toMonoid.{u2} 𝕜 (Semiring.toMonoidWithZero.{u2} 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Semiring.toNonAssocSemiring.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)))) (Module.toDistribMulAction.{u2, max u3 u2} 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b))))) (Algebra.toModule.{u2, max u3 u2} 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u2, u3, u2} p 𝕜 𝕜 _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))))) (Module.toDistribMulAction.{u2, max u1 u2} 𝕜 (Matrix.{u1, u1, u2} n n 𝕜) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Semiring.toNonAssocSemiring.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b))))) (Algebra.toModule.{u2, max u1 u2} 𝕜 (Matrix.{u1, u1, u2} n n 𝕜) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.instAlgebraMatrixSemiring.{u2, u1, u2} n 𝕜 𝕜 _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))))) (AlgHom.instNonUnitalAlgHomClassToMonoidToMonoidWithZeroToSemiringToNonUnitalNonAssocSemiringToNonAssocSemiringToNonUnitalNonAssocSemiringToNonAssocSemiringToDistribMulActionToAddCommMonoidToModuleToDistribMulActionToAddCommMonoidToModule.{u2, max u3 u2, max u1 u2, max (max u1 u3) u2} 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.{u1, u1, u2} n n 𝕜) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.instAlgebraMatrixSemiring.{u2, u3, u2} p 𝕜 𝕜 _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))) (Matrix.instAlgebraMatrixSemiring.{u2, u1, u2} n 𝕜 𝕜 _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))) (AlgEquiv.{u2, max u2 u3, max u2 u1} 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.{u1, u1, u2} n n 𝕜) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.instAlgebraMatrixSemiring.{u2, u3, u2} p 𝕜 𝕜 _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))) (Matrix.instAlgebraMatrixSemiring.{u2, u1, u2} n 𝕜 𝕜 _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))))) (AlgEquivClass.toAlgHomClass.{max (max u1 u3) u2, u2, max u3 u2, max u1 u2} (AlgEquiv.{u2, max u2 u3, max u2 u1} 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.{u1, u1, u2} n n 𝕜) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.instAlgebraMatrixSemiring.{u2, u3, u2} p 𝕜 𝕜 _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))) (Matrix.instAlgebraMatrixSemiring.{u2, u1, u2} n 𝕜 𝕜 _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))))) 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.{u1, u1, u2} n n 𝕜) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.instAlgebraMatrixSemiring.{u2, u3, u2} p 𝕜 𝕜 _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))) (Matrix.instAlgebraMatrixSemiring.{u2, u1, u2} n 𝕜 𝕜 _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))) (AlgEquiv.instAlgEquivClassAlgEquiv.{u2, max u3 u2, max u1 u2} 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.{u1, u1, u2} n n 𝕜) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.instAlgebraMatrixSemiring.{u2, u3, u2} p 𝕜 𝕜 _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))) (Matrix.instAlgebraMatrixSemiring.{u2, u1, u2} n 𝕜 𝕜 _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))))))))) (Matrix.reindexAlgEquiv.{u3, u1, u2} p n 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) _inst_5 _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (fun (a : n) (b : n) => _inst_2 a b) e) M)) (List.prod.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.instMulMatrix.{u2, u1} n 𝕜 _inst_5 (NonUnitalNonAssocRing.toMul.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))))) (Matrix.one.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u2} 𝕜 (Semifield.toCommGroupWithZero.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))) (Semiring.toOne.{u2} 𝕜 (DivisionSemiring.toSemiring.{u2} 𝕜 (Semifield.toDivisionSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))))) (List.map.{max u1 u2, max u1 u2} (Matrix.TransvectionStruct.{u2, u1} n 𝕜) (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.TransvectionStruct.toMatrix.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u2} 𝕜 (Field.toEuclideanDomain.{u2} 𝕜 _inst_1))) L'))) (Matrix.diagonal.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u2} 𝕜 (Semifield.toCommGroupWithZero.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))) D))))) -> (Exists.{max (succ u3) (succ u2)} (List.{max u3 u2} (Matrix.TransvectionStruct.{u2, u3} p 𝕜)) (fun (L : List.{max u3 u2} (Matrix.TransvectionStruct.{u2, u3} p 𝕜)) => Exists.{max (succ u3) (succ u2)} (List.{max u3 u2} (Matrix.TransvectionStruct.{u2, u3} p 𝕜)) (fun (L' : List.{max u3 u2} (Matrix.TransvectionStruct.{u2, u3} p 𝕜)) => Exists.{max (succ u3) (succ u2)} (p -> 𝕜) (fun (D : p -> 𝕜) => Eq.{max (succ u3) (succ u2)} (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.mul.{u2, u3, u3, u3} p p p 𝕜 _inst_6 (NonUnitalNonAssocRing.toMul.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1)))))) (Matrix.mul.{u2, u3, u3, u3} p p p 𝕜 _inst_6 (NonUnitalNonAssocRing.toMul.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1)))))) (List.prod.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.instMulMatrix.{u2, u3} p 𝕜 _inst_6 (NonUnitalNonAssocRing.toMul.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))))) (Matrix.one.{u2, u3} p 𝕜 (fun (a : p) (b : p) => _inst_3 a b) (CommMonoidWithZero.toZero.{u2} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u2} 𝕜 (Semifield.toCommGroupWithZero.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))) (Semiring.toOne.{u2} 𝕜 (DivisionSemiring.toSemiring.{u2} 𝕜 (Semifield.toDivisionSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))))) (List.map.{max u3 u2, max u3 u2} (Matrix.TransvectionStruct.{u2, u3} p 𝕜) (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.TransvectionStruct.toMatrix.{u2, u3} p 𝕜 (fun (a : p) (b : p) => _inst_3 a b) (EuclideanDomain.toCommRing.{u2} 𝕜 (Field.toEuclideanDomain.{u2} 𝕜 _inst_1))) L)) M) (List.prod.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.instMulMatrix.{u2, u3} p 𝕜 _inst_6 (NonUnitalNonAssocRing.toMul.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))))) (Matrix.one.{u2, u3} p 𝕜 (fun (a : p) (b : p) => _inst_3 a b) (CommMonoidWithZero.toZero.{u2} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u2} 𝕜 (Semifield.toCommGroupWithZero.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))) (Semiring.toOne.{u2} 𝕜 (DivisionSemiring.toSemiring.{u2} 𝕜 (Semifield.toDivisionSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))))) (List.map.{max u3 u2, max u3 u2} (Matrix.TransvectionStruct.{u2, u3} p 𝕜) (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.TransvectionStruct.toMatrix.{u2, u3} p 𝕜 (fun (a : p) (b : p) => _inst_3 a b) (EuclideanDomain.toCommRing.{u2} 𝕜 (Field.toEuclideanDomain.{u2} 𝕜 _inst_1))) L'))) (Matrix.diagonal.{u2, u3} p 𝕜 (fun (a : p) (b : p) => _inst_3 a b) (CommMonoidWithZero.toZero.{u2} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u2} 𝕜 (Semifield.toCommGroupWithZero.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))) D)))))
+ forall {n : Type.{u1}} {p : Type.{u3}} {𝕜 : Type.{u2}} [_inst_1 : Field.{u2} 𝕜] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : DecidableEq.{succ u3} p] [_inst_5 : Fintype.{u1} n] [_inst_6 : Fintype.{u3} p] (M : Matrix.{u3, u3, u2} p p 𝕜) (e : Equiv.{succ u3, succ u1} p n), (Exists.{max (succ u1) (succ u2)} (List.{max u1 u2} (Matrix.TransvectionStruct.{u2, u1} n 𝕜)) (fun (L : List.{max u1 u2} (Matrix.TransvectionStruct.{u2, u1} n 𝕜)) => Exists.{max (succ u1) (succ u2)} (List.{max u1 u2} (Matrix.TransvectionStruct.{u2, u1} n 𝕜)) (fun (L' : List.{max u1 u2} (Matrix.TransvectionStruct.{u2, u1} n 𝕜)) => Exists.{max (succ u1) (succ u2)} (n -> 𝕜) (fun (D : n -> 𝕜) => Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.mul.{u2, u1, u1, u1} n n n 𝕜 _inst_5 (NonUnitalNonAssocRing.toMul.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1)))))) (Matrix.mul.{u2, u1, u1, u1} n n n 𝕜 _inst_5 (NonUnitalNonAssocRing.toMul.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1)))))) (List.prod.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.instMulMatrix.{u2, u1} n 𝕜 _inst_5 (NonUnitalNonAssocRing.toMul.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))))) (Matrix.one.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u2} 𝕜 (Semifield.toCommGroupWithZero.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))) (Semiring.toOne.{u2} 𝕜 (DivisionSemiring.toSemiring.{u2} 𝕜 (Semifield.toDivisionSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))))) (List.map.{max u1 u2, max u1 u2} (Matrix.TransvectionStruct.{u2, u1} n 𝕜) (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.TransvectionStruct.toMatrix.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u2} 𝕜 (Field.toEuclideanDomain.{u2} 𝕜 _inst_1))) L)) (FunLike.coe.{max (max (succ u1) (succ u3)) (succ u2), max (succ u3) (succ u2), max (succ u1) (succ u2)} (AlgEquiv.{u2, max u2 u3, max u2 u1} 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.{u1, u1, u2} n n 𝕜) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.instAlgebraMatrixSemiring.{u2, u3, u2} p 𝕜 𝕜 _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))) (Matrix.instAlgebraMatrixSemiring.{u2, u1, u2} n 𝕜 𝕜 _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))))) (Matrix.{u3, u3, u2} p p 𝕜) (fun (_x : Matrix.{u3, u3, u2} p p 𝕜) => (fun (x._@.Mathlib.Algebra.Hom.GroupAction._hyg.2187 : Matrix.{u3, u3, u2} p p 𝕜) => Matrix.{u1, u1, u2} n n 𝕜) _x) (SMulHomClass.toFunLike.{max (max u1 u3) u2, u2, max u3 u2, max u1 u2} (AlgEquiv.{u2, max u2 u3, max u2 u1} 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.{u1, u1, u2} n n 𝕜) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.instAlgebraMatrixSemiring.{u2, u3, u2} p 𝕜 𝕜 _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))) (Matrix.instAlgebraMatrixSemiring.{u2, u1, u2} n 𝕜 𝕜 _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))))) 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.{u1, u1, u2} n n 𝕜) (SMulZeroClass.toSMul.{u2, max u3 u2} 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (AddMonoid.toZero.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (AddCommMonoid.toAddMonoid.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b))))))) (DistribSMul.toSMulZeroClass.{u2, max u3 u2} 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (AddMonoid.toAddZeroClass.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (AddCommMonoid.toAddMonoid.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b))))))) (DistribMulAction.toDistribSMul.{u2, max u3 u2} 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (MonoidWithZero.toMonoid.{u2} 𝕜 (Semiring.toMonoidWithZero.{u2} 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))))) (AddCommMonoid.toAddMonoid.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)))))) (Module.toDistribMulAction.{u2, max u3 u2} 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b))))) (Algebra.toModule.{u2, max u3 u2} 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u2, u3, u2} p 𝕜 𝕜 _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))))))))) (SMulZeroClass.toSMul.{u2, max u1 u2} 𝕜 (Matrix.{u1, u1, u2} n n 𝕜) (AddMonoid.toZero.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (AddCommMonoid.toAddMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Semiring.toNonAssocSemiring.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b))))))) (DistribSMul.toSMulZeroClass.{u2, max u1 u2} 𝕜 (Matrix.{u1, u1, u2} n n 𝕜) (AddMonoid.toAddZeroClass.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (AddCommMonoid.toAddMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Semiring.toNonAssocSemiring.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b))))))) (DistribMulAction.toDistribSMul.{u2, max u1 u2} 𝕜 (Matrix.{u1, u1, u2} n n 𝕜) (MonoidWithZero.toMonoid.{u2} 𝕜 (Semiring.toMonoidWithZero.{u2} 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))))) (AddCommMonoid.toAddMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Semiring.toNonAssocSemiring.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)))))) (Module.toDistribMulAction.{u2, max u1 u2} 𝕜 (Matrix.{u1, u1, u2} n n 𝕜) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Semiring.toNonAssocSemiring.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b))))) (Algebra.toModule.{u2, max u1 u2} 𝕜 (Matrix.{u1, u1, u2} n n 𝕜) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.instAlgebraMatrixSemiring.{u2, u1, u2} n 𝕜 𝕜 _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))))))))) (DistribMulActionHomClass.toSMulHomClass.{max (max u1 u3) u2, u2, max u3 u2, max u1 u2} (AlgEquiv.{u2, max u2 u3, max u2 u1} 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.{u1, u1, u2} n n 𝕜) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.instAlgebraMatrixSemiring.{u2, u3, u2} p 𝕜 𝕜 _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))) (Matrix.instAlgebraMatrixSemiring.{u2, u1, u2} n 𝕜 𝕜 _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))))) 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.{u1, u1, u2} n n 𝕜) (MonoidWithZero.toMonoid.{u2} 𝕜 (Semiring.toMonoidWithZero.{u2} 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))))) (AddCommMonoid.toAddMonoid.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)))))) (AddCommMonoid.toAddMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Semiring.toNonAssocSemiring.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)))))) (Module.toDistribMulAction.{u2, max u3 u2} 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b))))) (Algebra.toModule.{u2, max u3 u2} 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u2, u3, u2} p 𝕜 𝕜 _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))))) (Module.toDistribMulAction.{u2, max u1 u2} 𝕜 (Matrix.{u1, u1, u2} n n 𝕜) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Semiring.toNonAssocSemiring.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b))))) (Algebra.toModule.{u2, max u1 u2} 𝕜 (Matrix.{u1, u1, u2} n n 𝕜) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.instAlgebraMatrixSemiring.{u2, u1, u2} n 𝕜 𝕜 _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))))) (NonUnitalAlgHomClass.toDistribMulActionHomClass.{max (max u1 u3) u2, u2, max u3 u2, max u1 u2} (AlgEquiv.{u2, max u2 u3, max u2 u1} 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.{u1, u1, u2} n n 𝕜) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.instAlgebraMatrixSemiring.{u2, u3, u2} p 𝕜 𝕜 _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))) (Matrix.instAlgebraMatrixSemiring.{u2, u1, u2} n 𝕜 𝕜 _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))))) 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.{u1, u1, u2} n n 𝕜) (MonoidWithZero.toMonoid.{u2} 𝕜 (Semiring.toMonoidWithZero.{u2} 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Semiring.toNonAssocSemiring.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)))) (Module.toDistribMulAction.{u2, max u3 u2} 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b))))) (Algebra.toModule.{u2, max u3 u2} 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u2, u3, u2} p 𝕜 𝕜 _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))))) (Module.toDistribMulAction.{u2, max u1 u2} 𝕜 (Matrix.{u1, u1, u2} n n 𝕜) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Semiring.toNonAssocSemiring.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b))))) (Algebra.toModule.{u2, max u1 u2} 𝕜 (Matrix.{u1, u1, u2} n n 𝕜) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.instAlgebraMatrixSemiring.{u2, u1, u2} n 𝕜 𝕜 _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))))) (AlgHom.instNonUnitalAlgHomClassToMonoidToMonoidWithZeroToSemiringToNonUnitalNonAssocSemiringToNonAssocSemiringToNonUnitalNonAssocSemiringToNonAssocSemiringToDistribMulActionToAddCommMonoidToModuleToDistribMulActionToAddCommMonoidToModule.{u2, max u3 u2, max u1 u2, max (max u1 u3) u2} 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.{u1, u1, u2} n n 𝕜) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.instAlgebraMatrixSemiring.{u2, u3, u2} p 𝕜 𝕜 _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))) (Matrix.instAlgebraMatrixSemiring.{u2, u1, u2} n 𝕜 𝕜 _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))) (AlgEquiv.{u2, max u2 u3, max u2 u1} 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.{u1, u1, u2} n n 𝕜) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.instAlgebraMatrixSemiring.{u2, u3, u2} p 𝕜 𝕜 _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))) (Matrix.instAlgebraMatrixSemiring.{u2, u1, u2} n 𝕜 𝕜 _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))))) (AlgEquivClass.toAlgHomClass.{max (max u1 u3) u2, u2, max u3 u2, max u1 u2} (AlgEquiv.{u2, max u2 u3, max u2 u1} 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.{u1, u1, u2} n n 𝕜) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.instAlgebraMatrixSemiring.{u2, u3, u2} p 𝕜 𝕜 _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))) (Matrix.instAlgebraMatrixSemiring.{u2, u1, u2} n 𝕜 𝕜 _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))))) 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.{u1, u1, u2} n n 𝕜) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.instAlgebraMatrixSemiring.{u2, u3, u2} p 𝕜 𝕜 _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))) (Matrix.instAlgebraMatrixSemiring.{u2, u1, u2} n 𝕜 𝕜 _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))) (AlgEquiv.instAlgEquivClassAlgEquiv.{u2, max u3 u2, max u1 u2} 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.{u1, u1, u2} n n 𝕜) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.instAlgebraMatrixSemiring.{u2, u3, u2} p 𝕜 𝕜 _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))) (Matrix.instAlgebraMatrixSemiring.{u2, u1, u2} n 𝕜 𝕜 _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))))))))) (Matrix.reindexAlgEquiv.{u3, u1, u2} p n 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) _inst_5 _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (fun (a : n) (b : n) => _inst_2 a b) e) M)) (List.prod.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.instMulMatrix.{u2, u1} n 𝕜 _inst_5 (NonUnitalNonAssocRing.toMul.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))))) (Matrix.one.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u2} 𝕜 (Semifield.toCommGroupWithZero.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))) (Semiring.toOne.{u2} 𝕜 (DivisionSemiring.toSemiring.{u2} 𝕜 (Semifield.toDivisionSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))))) (List.map.{max u1 u2, max u1 u2} (Matrix.TransvectionStruct.{u2, u1} n 𝕜) (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.TransvectionStruct.toMatrix.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u2} 𝕜 (Field.toEuclideanDomain.{u2} 𝕜 _inst_1))) L'))) (Matrix.diagonal.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u2} 𝕜 (Semifield.toCommGroupWithZero.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))) D))))) -> (Exists.{max (succ u3) (succ u2)} (List.{max u3 u2} (Matrix.TransvectionStruct.{u2, u3} p 𝕜)) (fun (L : List.{max u3 u2} (Matrix.TransvectionStruct.{u2, u3} p 𝕜)) => Exists.{max (succ u3) (succ u2)} (List.{max u3 u2} (Matrix.TransvectionStruct.{u2, u3} p 𝕜)) (fun (L' : List.{max u3 u2} (Matrix.TransvectionStruct.{u2, u3} p 𝕜)) => Exists.{max (succ u3) (succ u2)} (p -> 𝕜) (fun (D : p -> 𝕜) => Eq.{max (succ u3) (succ u2)} (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.mul.{u2, u3, u3, u3} p p p 𝕜 _inst_6 (NonUnitalNonAssocRing.toMul.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1)))))) (Matrix.mul.{u2, u3, u3, u3} p p p 𝕜 _inst_6 (NonUnitalNonAssocRing.toMul.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1)))))) (List.prod.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.instMulMatrix.{u2, u3} p 𝕜 _inst_6 (NonUnitalNonAssocRing.toMul.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))))) (Matrix.one.{u2, u3} p 𝕜 (fun (a : p) (b : p) => _inst_3 a b) (CommMonoidWithZero.toZero.{u2} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u2} 𝕜 (Semifield.toCommGroupWithZero.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))) (Semiring.toOne.{u2} 𝕜 (DivisionSemiring.toSemiring.{u2} 𝕜 (Semifield.toDivisionSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))))) (List.map.{max u3 u2, max u3 u2} (Matrix.TransvectionStruct.{u2, u3} p 𝕜) (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.TransvectionStruct.toMatrix.{u2, u3} p 𝕜 (fun (a : p) (b : p) => _inst_3 a b) (EuclideanDomain.toCommRing.{u2} 𝕜 (Field.toEuclideanDomain.{u2} 𝕜 _inst_1))) L)) M) (List.prod.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.instMulMatrix.{u2, u3} p 𝕜 _inst_6 (NonUnitalNonAssocRing.toMul.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))))) (Matrix.one.{u2, u3} p 𝕜 (fun (a : p) (b : p) => _inst_3 a b) (CommMonoidWithZero.toZero.{u2} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u2} 𝕜 (Semifield.toCommGroupWithZero.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))) (Semiring.toOne.{u2} 𝕜 (DivisionSemiring.toSemiring.{u2} 𝕜 (Semifield.toDivisionSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))))) (List.map.{max u3 u2, max u3 u2} (Matrix.TransvectionStruct.{u2, u3} p 𝕜) (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.TransvectionStruct.toMatrix.{u2, u3} p 𝕜 (fun (a : p) (b : p) => _inst_3 a b) (EuclideanDomain.toCommRing.{u2} 𝕜 (Field.toEuclideanDomain.{u2} 𝕜 _inst_1))) L'))) (Matrix.diagonal.{u2, u3} p 𝕜 (fun (a : p) (b : p) => _inst_3 a b) (CommMonoidWithZero.toZero.{u2} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u2} 𝕜 (Semifield.toCommGroupWithZero.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))) D)))))
Case conversion may be inaccurate. Consider using '#align matrix.pivot.reindex_exists_list_transvec_mul_mul_list_transvec_eq_diagonal Matrix.Pivot.reindex_exists_list_transvec_mul_mul_list_transvec_eq_diagonalₓ'. -/
/-- Reduction to diagonal form by elementary operations is invariant under reindexing. -/
theorem reindex_exists_list_transvec_mul_mul_list_transvec_eq_diagonal (M : Matrix p p 𝕜)
mathlib commit https://github.com/leanprover-community/mathlib/commit/08e1d8d4d989df3a6df86f385e9053ec8a372cc1
@@ -97,7 +97,7 @@ def transvection (c : R) : Matrix n n R :=
lean 3 declaration is
forall {n : Type.{u2}} {R : Type.{u1}} [_inst_2 : DecidableEq.{succ u2} n] [_inst_4 : CommRing.{u1} R] (i : n) (j : n), Eq.{succ (max u2 u1)} (Matrix.{u2, u2, u1} n n R) (Matrix.transvection.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 i j (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 (CommRing.toRing.{u1} R _inst_4)))))))))) (OfNat.ofNat.{max u2 u1} (Matrix.{u2, u2, u1} n n R) 1 (OfNat.mk.{max u2 u1} (Matrix.{u2, u2, u1} n n R) 1 (One.one.{max u2 u1} (Matrix.{u2, u2, u1} n n R) (Matrix.hasOne.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (AddMonoidWithOne.toOne.{u1} R (AddGroupWithOne.toAddMonoidWithOne.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (Ring.toAddCommGroupWithOne.{u1} R (CommRing.toRing.{u1} R _inst_4)))))))))
but is expected to have type
- forall {n : Type.{u1}} {R : Type.{u2}} [_inst_2 : DecidableEq.{succ u1} n] [_inst_4 : CommRing.{u2} R] (i : n) (j : n), Eq.{max (succ u2) (succ u1)} (Matrix.{u1, u1, u2} n n R) (Matrix.transvection.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 i j (OfNat.ofNat.{u2} R 0 (Zero.toOfNat0.{u2} R (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)))))) (OfNat.ofNat.{max u2 u1} (Matrix.{u1, u1, u2} n n R) 1 (One.toOfNat1.{max u2 u1} (Matrix.{u1, u1, u2} n n R) (Matrix.one.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (NonAssocRing.toOne.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4))))))
+ forall {n : Type.{u1}} {R : Type.{u2}} [_inst_2 : DecidableEq.{succ u1} n] [_inst_4 : CommRing.{u2} R] (i : n) (j : n), Eq.{max (succ u2) (succ u1)} (Matrix.{u1, u1, u2} n n R) (Matrix.transvection.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 i j (OfNat.ofNat.{u2} R 0 (Zero.toOfNat0.{u2} R (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)))))) (OfNat.ofNat.{max u2 u1} (Matrix.{u1, u1, u2} n n R) 1 (One.toOfNat1.{max u2 u1} (Matrix.{u1, u1, u2} n n R) (Matrix.one.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (Semiring.toOne.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))))))
Case conversion may be inaccurate. Consider using '#align matrix.transvection_zero Matrix.transvection_zeroₓ'. -/
@[simp]
theorem transvection_zero : transvection i j (0 : R) = 1 := by simp [transvection]
@@ -109,7 +109,7 @@ section
lean 3 declaration is
forall {n : Type.{u2}} {R : Type.{u1}} [_inst_2 : DecidableEq.{succ u2} n] [_inst_4 : CommRing.{u1} R] (i : n) (j : n) [_inst_5 : Finite.{succ u2} n] (c : R), Eq.{succ (max u2 u1)} (Matrix.{u2, u2, u1} n n R) (Matrix.updateRow.{u1, u2, u2} n n R (fun (a : n) (b : n) => _inst_2 a b) (OfNat.ofNat.{max u2 u1} (Matrix.{u2, u2, u1} n n R) 1 (OfNat.mk.{max u2 u1} (Matrix.{u2, u2, u1} n n R) 1 (One.one.{max u2 u1} (Matrix.{u2, u2, u1} n n R) (Matrix.hasOne.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (AddMonoidWithOne.toOne.{u1} R (AddGroupWithOne.toAddMonoidWithOne.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (Ring.toAddCommGroupWithOne.{u1} R (CommRing.toRing.{u1} R _inst_4))))))))) i (HAdd.hAdd.{max u2 u1, max u2 u1, max u2 u1} (n -> R) (n -> R) (n -> R) (instHAdd.{max u2 u1} (n -> R) (Pi.instAdd.{u2, u1} n (fun (ᾰ : n) => R) (fun (i : n) => Distrib.toHasAdd.{u1} R (Ring.toDistrib.{u1} R (CommRing.toRing.{u1} R _inst_4))))) (One.one.{max u2 u1} (Matrix.{u2, u2, u1} n n R) (Matrix.hasOne.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (AddMonoidWithOne.toOne.{u1} R (AddGroupWithOne.toAddMonoidWithOne.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (Ring.toAddCommGroupWithOne.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) i) (SMul.smul.{u1, max u2 u1} R (n -> R) (Function.hasSMul.{u2, u1, u1} n R R (Mul.toSMul.{u1} R (Distrib.toHasMul.{u1} R (Ring.toDistrib.{u1} R (CommRing.toRing.{u1} R _inst_4))))) c (One.one.{max u2 u1} (Matrix.{u2, u2, u1} n n R) (Matrix.hasOne.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (AddMonoidWithOne.toOne.{u1} R (AddGroupWithOne.toAddMonoidWithOne.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (Ring.toAddCommGroupWithOne.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) j)))) (Matrix.transvection.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 i j c)
but is expected to have type
- forall {n : Type.{u1}} {R : Type.{u2}} [_inst_2 : DecidableEq.{succ u1} n] [_inst_4 : CommRing.{u2} R] (i : n) (j : n) [_inst_5 : Finite.{succ u1} n] (c : R), Eq.{max (succ u2) (succ u1)} (Matrix.{u1, u1, u2} n n R) (Matrix.updateRow.{u2, u1, u1} n n R (fun (a : n) (b : n) => _inst_2 a b) (OfNat.ofNat.{max u2 u1} (Matrix.{u1, u1, u2} n n R) 1 (One.toOfNat1.{max u2 u1} (Matrix.{u1, u1, u2} n n R) (Matrix.one.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (NonAssocRing.toOne.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4)))))) i (HAdd.hAdd.{max u2 u1, max u2 u1, max u2 u1} (n -> R) (n -> R) (n -> R) (instHAdd.{max u2 u1} (n -> R) (Pi.instAdd.{u1, u2} n (fun (ᾰ : n) => R) (fun (i : n) => Distrib.toAdd.{u2} R (NonUnitalNonAssocSemiring.toDistrib.{u2} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4)))))))) (OfNat.ofNat.{max u2 u1} (Matrix.{u1, u1, u2} n n R) 1 (One.toOfNat1.{max u2 u1} (Matrix.{u1, u1, u2} n n R) (Matrix.one.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (NonAssocRing.toOne.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4))))) i) (HSMul.hSMul.{u2, max u2 u1, max u2 u1} R (n -> R) (n -> R) (instHSMul.{u2, max u2 u1} R (n -> R) (Pi.instSMul.{u1, u2, u2} n R (fun (a._@.Mathlib.Data.Matrix.Basic._hyg.12 : n) => R) (fun (i : n) => Algebra.toSMul.{u2, u2} R R (CommRing.toCommSemiring.{u2} R _inst_4) (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) (Algebra.id.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))))) c (OfNat.ofNat.{max u2 u1} (Matrix.{u1, u1, u2} n n R) 1 (One.toOfNat1.{max u2 u1} (Matrix.{u1, u1, u2} n n R) (Matrix.one.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (NonAssocRing.toOne.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4))))) j)))) (Matrix.transvection.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 i j c)
+ forall {n : Type.{u1}} {R : Type.{u2}} [_inst_2 : DecidableEq.{succ u1} n] [_inst_4 : CommRing.{u2} R] (i : n) (j : n) [_inst_5 : Finite.{succ u1} n] (c : R), Eq.{max (succ u2) (succ u1)} (Matrix.{u1, u1, u2} n n R) (Matrix.updateRow.{u2, u1, u1} n n R (fun (a : n) (b : n) => _inst_2 a b) (OfNat.ofNat.{max u2 u1} (Matrix.{u1, u1, u2} n n R) 1 (One.toOfNat1.{max u2 u1} (Matrix.{u1, u1, u2} n n R) (Matrix.one.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (Semiring.toOne.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)))))) i (HAdd.hAdd.{max u2 u1, max u2 u1, max u2 u1} (n -> R) (n -> R) (n -> R) (instHAdd.{max u2 u1} (n -> R) (Pi.instAdd.{u1, u2} n (fun (ᾰ : n) => R) (fun (i : n) => Distrib.toAdd.{u2} R (NonUnitalNonAssocSemiring.toDistrib.{u2} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4)))))))) (OfNat.ofNat.{max u2 u1} (Matrix.{u1, u1, u2} n n R) 1 (One.toOfNat1.{max u2 u1} (Matrix.{u1, u1, u2} n n R) (Matrix.one.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (Semiring.toOne.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))))) i) (HSMul.hSMul.{u2, max u2 u1, max u2 u1} R (n -> R) (n -> R) (instHSMul.{u2, max u2 u1} R (n -> R) (Pi.instSMul.{u1, u2, u2} n R (fun (a._@.Mathlib.Data.Matrix.Basic._hyg.12 : n) => R) (fun (i : n) => Algebra.toSMul.{u2, u2} R R (CommRing.toCommSemiring.{u2} R _inst_4) (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (Algebra.id.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))))) c (OfNat.ofNat.{max u2 u1} (Matrix.{u1, u1, u2} n n R) 1 (One.toOfNat1.{max u2 u1} (Matrix.{u1, u1, u2} n n R) (Matrix.one.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (Semiring.toOne.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))))) j)))) (Matrix.transvection.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 i j c)
Case conversion may be inaccurate. Consider using '#align matrix.update_row_eq_transvection Matrix.updateRow_eq_transvectionₓ'. -/
/-- A transvection matrix is obtained from the identity by adding `c` times the `j`-th row to
the `i`-th row. -/
@@ -196,7 +196,7 @@ theorem mul_transvection_apply_of_ne (a b : n) (hb : b ≠ j) (c : R) (M : Matri
lean 3 declaration is
forall {n : Type.{u2}} {R : Type.{u1}} [_inst_2 : DecidableEq.{succ u2} n] [_inst_4 : CommRing.{u1} R] (i : n) (j : n) [_inst_5 : Fintype.{u2} n], (Ne.{succ u2} n i j) -> (forall (c : R), Eq.{succ u1} R (Matrix.det.{u1, u2} n (fun (a : n) (b : n) => _inst_2 a b) _inst_5 R _inst_4 (Matrix.transvection.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 i j c)) (OfNat.ofNat.{u1} R 1 (OfNat.mk.{u1} R 1 (One.one.{u1} R (AddMonoidWithOne.toOne.{u1} R (AddGroupWithOne.toAddMonoidWithOne.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (Ring.toAddCommGroupWithOne.{u1} R (CommRing.toRing.{u1} R _inst_4)))))))))
but is expected to have type
- forall {n : Type.{u1}} {R : Type.{u2}} [_inst_2 : DecidableEq.{succ u1} n] [_inst_4 : CommRing.{u2} R] (i : n) (j : n) [_inst_5 : Fintype.{u1} n], (Ne.{succ u1} n i j) -> (forall (c : R), Eq.{succ u2} R (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_5 R _inst_4 (Matrix.transvection.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 i j c)) (OfNat.ofNat.{u2} R 1 (One.toOfNat1.{u2} R (NonAssocRing.toOne.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4))))))
+ forall {n : Type.{u1}} {R : Type.{u2}} [_inst_2 : DecidableEq.{succ u1} n] [_inst_4 : CommRing.{u2} R] (i : n) (j : n) [_inst_5 : Fintype.{u1} n], (Ne.{succ u1} n i j) -> (forall (c : R), Eq.{succ u2} R (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_5 R _inst_4 (Matrix.transvection.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 i j c)) (OfNat.ofNat.{u2} R 1 (One.toOfNat1.{u2} R (Semiring.toOne.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))))))
Case conversion may be inaccurate. Consider using '#align matrix.det_transvection_of_ne Matrix.det_transvection_of_neₓ'. -/
@[simp]
theorem det_transvection_of_ne (h : i ≠ j) (c : R) : det (transvection i j c) = 1 := by
@@ -255,7 +255,7 @@ theorem toMatrix_mk (i j : n) (hij : i ≠ j) (c : R) :
lean 3 declaration is
forall {n : Type.{u2}} {R : Type.{u1}} [_inst_2 : DecidableEq.{succ u2} n] [_inst_4 : CommRing.{u1} R] [_inst_5 : Fintype.{u2} n] (t : Matrix.TransvectionStruct.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4), Eq.{succ u1} R (Matrix.det.{u1, u2} n (fun (a : n) (b : n) => _inst_2 a b) _inst_5 R _inst_4 (Matrix.TransvectionStruct.toMatrix.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 t)) (OfNat.ofNat.{u1} R 1 (OfNat.mk.{u1} R 1 (One.one.{u1} R (AddMonoidWithOne.toOne.{u1} R (AddGroupWithOne.toAddMonoidWithOne.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (Ring.toAddCommGroupWithOne.{u1} R (CommRing.toRing.{u1} R _inst_4))))))))
but is expected to have type
- forall {n : Type.{u1}} {R : Type.{u2}} [_inst_2 : DecidableEq.{succ u1} n] [_inst_4 : CommRing.{u2} R] [_inst_5 : Fintype.{u1} n] (t : Matrix.TransvectionStruct.{u2, u1} n R), Eq.{succ u2} R (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_5 R _inst_4 (Matrix.TransvectionStruct.toMatrix.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 t)) (OfNat.ofNat.{u2} R 1 (One.toOfNat1.{u2} R (NonAssocRing.toOne.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4)))))
+ forall {n : Type.{u1}} {R : Type.{u2}} [_inst_2 : DecidableEq.{succ u1} n] [_inst_4 : CommRing.{u2} R] [_inst_5 : Fintype.{u1} n] (t : Matrix.TransvectionStruct.{u2, u1} n R), Eq.{succ u2} R (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_5 R _inst_4 (Matrix.TransvectionStruct.toMatrix.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 t)) (OfNat.ofNat.{u2} R 1 (One.toOfNat1.{u2} R (Semiring.toOne.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)))))
Case conversion may be inaccurate. Consider using '#align matrix.transvection_struct.det Matrix.TransvectionStruct.detₓ'. -/
@[simp]
protected theorem det [Fintype n] (t : TransvectionStruct n R) : det t.toMatrix = 1 :=
@@ -266,7 +266,7 @@ protected theorem det [Fintype n] (t : TransvectionStruct n R) : det t.toMatrix
lean 3 declaration is
forall {n : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : Field.{u2} 𝕜] [_inst_2 : DecidableEq.{succ u1} n] [_inst_5 : Fintype.{u1} n] (L : List.{max u1 u2} (Matrix.TransvectionStruct.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u2} 𝕜 (Field.toEuclideanDomain.{u2} 𝕜 _inst_1)))), Eq.{succ u2} 𝕜 (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_5 𝕜 (EuclideanDomain.toCommRing.{u2} 𝕜 (Field.toEuclideanDomain.{u2} 𝕜 _inst_1)) (List.prod.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.hasMul.{u2, u1} n 𝕜 _inst_5 (Distrib.toHasMul.{u2} 𝕜 (Ring.toDistrib.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))))) (Matrix.hasOne.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (MulZeroClass.toHasZero.{u2} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))))) (AddMonoidWithOne.toOne.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))))) (List.map.{max u1 u2, max u1 u2} (Matrix.TransvectionStruct.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u2} 𝕜 (Field.toEuclideanDomain.{u2} 𝕜 _inst_1))) (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.TransvectionStruct.toMatrix.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u2} 𝕜 (Field.toEuclideanDomain.{u2} 𝕜 _inst_1))) L))) (OfNat.ofNat.{u2} 𝕜 1 (OfNat.mk.{u2} 𝕜 1 (One.one.{u2} 𝕜 (AddMonoidWithOne.toOne.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1)))))))))
but is expected to have type
- forall {n : Type.{u2}} {𝕜 : Type.{u1}} [_inst_1 : Field.{u1} 𝕜] [_inst_2 : DecidableEq.{succ u2} n] [_inst_5 : Fintype.{u2} n] (L : List.{max u2 u1} (Matrix.TransvectionStruct.{u1, u2} n 𝕜)), Eq.{succ u1} 𝕜 (Matrix.det.{u1, u2} n (fun (a : n) (b : n) => _inst_2 a b) _inst_5 𝕜 (EuclideanDomain.toCommRing.{u1} 𝕜 (Field.toEuclideanDomain.{u1} 𝕜 _inst_1)) (List.prod.{max u2 u1} (Matrix.{u2, u2, u1} n n 𝕜) (Matrix.instMulMatrix.{u1, u2} n 𝕜 _inst_5 (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.one.{u1, u2} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))) (NonAssocRing.toOne.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (List.map.{max u2 u1, max u2 u1} (Matrix.TransvectionStruct.{u1, u2} n 𝕜) (Matrix.{u2, u2, u1} n n 𝕜) (Matrix.TransvectionStruct.toMatrix.{u1, u2} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u1} 𝕜 (Field.toEuclideanDomain.{u1} 𝕜 _inst_1))) L))) (OfNat.ofNat.{u1} 𝕜 1 (One.toOfNat1.{u1} 𝕜 (NonAssocRing.toOne.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))
+ forall {n : Type.{u2}} {𝕜 : Type.{u1}} [_inst_1 : Field.{u1} 𝕜] [_inst_2 : DecidableEq.{succ u2} n] [_inst_5 : Fintype.{u2} n] (L : List.{max u2 u1} (Matrix.TransvectionStruct.{u1, u2} n 𝕜)), Eq.{succ u1} 𝕜 (Matrix.det.{u1, u2} n (fun (a : n) (b : n) => _inst_2 a b) _inst_5 𝕜 (EuclideanDomain.toCommRing.{u1} 𝕜 (Field.toEuclideanDomain.{u1} 𝕜 _inst_1)) (List.prod.{max u2 u1} (Matrix.{u2, u2, u1} n n 𝕜) (Matrix.instMulMatrix.{u1, u2} n 𝕜 _inst_5 (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.one.{u1, u2} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))) (Semiring.toOne.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1))))) (List.map.{max u2 u1, max u2 u1} (Matrix.TransvectionStruct.{u1, u2} n 𝕜) (Matrix.{u2, u2, u1} n n 𝕜) (Matrix.TransvectionStruct.toMatrix.{u1, u2} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u1} 𝕜 (Field.toEuclideanDomain.{u1} 𝕜 _inst_1))) L))) (OfNat.ofNat.{u1} 𝕜 1 (One.toOfNat1.{u1} 𝕜 (Semiring.toOne.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1))))))
Case conversion may be inaccurate. Consider using '#align matrix.transvection_struct.det_to_matrix_prod Matrix.TransvectionStruct.det_toMatrix_prodₓ'. -/
@[simp]
theorem det_toMatrix_prod [Fintype n] (L : List (TransvectionStruct n 𝕜)) :
@@ -301,7 +301,7 @@ variable [Fintype n]
lean 3 declaration is
forall {n : Type.{u2}} {R : Type.{u1}} [_inst_2 : DecidableEq.{succ u2} n] [_inst_4 : CommRing.{u1} R] [_inst_5 : Fintype.{u2} n] (t : Matrix.TransvectionStruct.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4), Eq.{succ (max u2 u1)} (Matrix.{u2, u2, u1} n n R) (Matrix.mul.{u1, u2, u2, u2} n n n R _inst_5 (Distrib.toHasMul.{u1} R (Ring.toDistrib.{u1} R (CommRing.toRing.{u1} R _inst_4))) (AddCommGroup.toAddCommMonoid.{u1} R (NonUnitalNonAssocRing.toAddCommGroup.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4))))) (Matrix.TransvectionStruct.toMatrix.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 (Matrix.TransvectionStruct.inv.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 t)) (Matrix.TransvectionStruct.toMatrix.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 t)) (OfNat.ofNat.{max u2 u1} (Matrix.{u2, u2, u1} n n R) 1 (OfNat.mk.{max u2 u1} (Matrix.{u2, u2, u1} n n R) 1 (One.one.{max u2 u1} (Matrix.{u2, u2, u1} n n R) (Matrix.hasOne.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (AddMonoidWithOne.toOne.{u1} R (AddGroupWithOne.toAddMonoidWithOne.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (Ring.toAddCommGroupWithOne.{u1} R (CommRing.toRing.{u1} R _inst_4)))))))))
but is expected to have type
- forall {n : Type.{u1}} {R : Type.{u2}} [_inst_2 : DecidableEq.{succ u1} n] [_inst_4 : CommRing.{u2} R] [_inst_5 : Fintype.{u1} n] (t : Matrix.TransvectionStruct.{u2, u1} n R), Eq.{max (succ u2) (succ u1)} (Matrix.{u1, u1, u2} n n R) (Matrix.mul.{u2, u1, u1, u1} n n n R _inst_5 (NonUnitalNonAssocRing.toMul.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4))))) (Matrix.TransvectionStruct.toMatrix.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 (Matrix.TransvectionStruct.inv.{u2, u1} n R _inst_4 t)) (Matrix.TransvectionStruct.toMatrix.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 t)) (OfNat.ofNat.{max u2 u1} (Matrix.{u1, u1, u2} n n R) 1 (One.toOfNat1.{max u2 u1} (Matrix.{u1, u1, u2} n n R) (Matrix.one.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (NonAssocRing.toOne.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4))))))
+ forall {n : Type.{u1}} {R : Type.{u2}} [_inst_2 : DecidableEq.{succ u1} n] [_inst_4 : CommRing.{u2} R] [_inst_5 : Fintype.{u1} n] (t : Matrix.TransvectionStruct.{u2, u1} n R), Eq.{max (succ u2) (succ u1)} (Matrix.{u1, u1, u2} n n R) (Matrix.mul.{u2, u1, u1, u1} n n n R _inst_5 (NonUnitalNonAssocRing.toMul.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4))))) (Matrix.TransvectionStruct.toMatrix.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 (Matrix.TransvectionStruct.inv.{u2, u1} n R _inst_4 t)) (Matrix.TransvectionStruct.toMatrix.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 t)) (OfNat.ofNat.{max u2 u1} (Matrix.{u1, u1, u2} n n R) 1 (One.toOfNat1.{max u2 u1} (Matrix.{u1, u1, u2} n n R) (Matrix.one.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (Semiring.toOne.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))))))
Case conversion may be inaccurate. Consider using '#align matrix.transvection_struct.inv_mul Matrix.TransvectionStruct.inv_mulₓ'. -/
theorem inv_mul (t : TransvectionStruct n R) : t.inv.toMatrix ⬝ t.toMatrix = 1 :=
by
@@ -313,7 +313,7 @@ theorem inv_mul (t : TransvectionStruct n R) : t.inv.toMatrix ⬝ t.toMatrix = 1
lean 3 declaration is
forall {n : Type.{u2}} {R : Type.{u1}} [_inst_2 : DecidableEq.{succ u2} n] [_inst_4 : CommRing.{u1} R] [_inst_5 : Fintype.{u2} n] (t : Matrix.TransvectionStruct.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4), Eq.{succ (max u2 u1)} (Matrix.{u2, u2, u1} n n R) (Matrix.mul.{u1, u2, u2, u2} n n n R _inst_5 (Distrib.toHasMul.{u1} R (Ring.toDistrib.{u1} R (CommRing.toRing.{u1} R _inst_4))) (AddCommGroup.toAddCommMonoid.{u1} R (NonUnitalNonAssocRing.toAddCommGroup.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4))))) (Matrix.TransvectionStruct.toMatrix.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 t) (Matrix.TransvectionStruct.toMatrix.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 (Matrix.TransvectionStruct.inv.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 t))) (OfNat.ofNat.{max u2 u1} (Matrix.{u2, u2, u1} n n R) 1 (OfNat.mk.{max u2 u1} (Matrix.{u2, u2, u1} n n R) 1 (One.one.{max u2 u1} (Matrix.{u2, u2, u1} n n R) (Matrix.hasOne.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (AddMonoidWithOne.toOne.{u1} R (AddGroupWithOne.toAddMonoidWithOne.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (Ring.toAddCommGroupWithOne.{u1} R (CommRing.toRing.{u1} R _inst_4)))))))))
but is expected to have type
- forall {n : Type.{u1}} {R : Type.{u2}} [_inst_2 : DecidableEq.{succ u1} n] [_inst_4 : CommRing.{u2} R] [_inst_5 : Fintype.{u1} n] (t : Matrix.TransvectionStruct.{u2, u1} n R), Eq.{max (succ u2) (succ u1)} (Matrix.{u1, u1, u2} n n R) (Matrix.mul.{u2, u1, u1, u1} n n n R _inst_5 (NonUnitalNonAssocRing.toMul.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4))))) (Matrix.TransvectionStruct.toMatrix.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 t) (Matrix.TransvectionStruct.toMatrix.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 (Matrix.TransvectionStruct.inv.{u2, u1} n R _inst_4 t))) (OfNat.ofNat.{max u2 u1} (Matrix.{u1, u1, u2} n n R) 1 (One.toOfNat1.{max u2 u1} (Matrix.{u1, u1, u2} n n R) (Matrix.one.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (NonAssocRing.toOne.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4))))))
+ forall {n : Type.{u1}} {R : Type.{u2}} [_inst_2 : DecidableEq.{succ u1} n] [_inst_4 : CommRing.{u2} R] [_inst_5 : Fintype.{u1} n] (t : Matrix.TransvectionStruct.{u2, u1} n R), Eq.{max (succ u2) (succ u1)} (Matrix.{u1, u1, u2} n n R) (Matrix.mul.{u2, u1, u1, u1} n n n R _inst_5 (NonUnitalNonAssocRing.toMul.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4))))) (Matrix.TransvectionStruct.toMatrix.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 t) (Matrix.TransvectionStruct.toMatrix.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 (Matrix.TransvectionStruct.inv.{u2, u1} n R _inst_4 t))) (OfNat.ofNat.{max u2 u1} (Matrix.{u1, u1, u2} n n R) 1 (One.toOfNat1.{max u2 u1} (Matrix.{u1, u1, u2} n n R) (Matrix.one.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (Semiring.toOne.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))))))
Case conversion may be inaccurate. Consider using '#align matrix.transvection_struct.mul_inv Matrix.TransvectionStruct.mul_invₓ'. -/
theorem mul_inv (t : TransvectionStruct n R) : t.toMatrix ⬝ t.inv.toMatrix = 1 :=
by
@@ -325,7 +325,7 @@ theorem mul_inv (t : TransvectionStruct n R) : t.toMatrix ⬝ t.inv.toMatrix = 1
lean 3 declaration is
forall {n : Type.{u2}} {R : Type.{u1}} [_inst_2 : DecidableEq.{succ u2} n] [_inst_4 : CommRing.{u1} R] [_inst_5 : Fintype.{u2} n] (L : List.{max u2 u1} (Matrix.TransvectionStruct.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4)), Eq.{succ (max u2 u1)} (Matrix.{u2, u2, u1} n n R) (Matrix.mul.{u1, u2, u2, u2} n n n R _inst_5 (Distrib.toHasMul.{u1} R (Ring.toDistrib.{u1} R (CommRing.toRing.{u1} R _inst_4))) (AddCommGroup.toAddCommMonoid.{u1} R (NonUnitalNonAssocRing.toAddCommGroup.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4))))) (List.prod.{max u2 u1} (Matrix.{u2, u2, u1} n n R) (Matrix.hasMul.{u1, u2} n R _inst_5 (Distrib.toHasMul.{u1} R (Ring.toDistrib.{u1} R (CommRing.toRing.{u1} R _inst_4))) (AddCommGroup.toAddCommMonoid.{u1} R (NonUnitalNonAssocRing.toAddCommGroup.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (Matrix.hasOne.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (AddMonoidWithOne.toOne.{u1} R (AddGroupWithOne.toAddMonoidWithOne.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (Ring.toAddCommGroupWithOne.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (List.map.{max u2 u1, max u2 u1} (Matrix.TransvectionStruct.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) (Matrix.{u2, u2, u1} n n R) (Function.comp.{succ (max u2 u1), max (succ u2) (succ u1), succ (max u2 u1)} (Matrix.TransvectionStruct.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) (Matrix.TransvectionStruct.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) (Matrix.{u2, u2, u1} n n R) (Matrix.TransvectionStruct.toMatrix.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) (Matrix.TransvectionStruct.inv.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4)) (List.reverse.{max u2 u1} (Matrix.TransvectionStruct.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) L))) (List.prod.{max u2 u1} (Matrix.{u2, u2, u1} n n R) (Matrix.hasMul.{u1, u2} n R _inst_5 (Distrib.toHasMul.{u1} R (Ring.toDistrib.{u1} R (CommRing.toRing.{u1} R _inst_4))) (AddCommGroup.toAddCommMonoid.{u1} R (NonUnitalNonAssocRing.toAddCommGroup.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (Matrix.hasOne.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (AddMonoidWithOne.toOne.{u1} R (AddGroupWithOne.toAddMonoidWithOne.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (Ring.toAddCommGroupWithOne.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (List.map.{max u2 u1, max u2 u1} (Matrix.TransvectionStruct.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) (Matrix.{u2, u2, u1} n n R) (Matrix.TransvectionStruct.toMatrix.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) L))) (OfNat.ofNat.{max u2 u1} (Matrix.{u2, u2, u1} n n R) 1 (OfNat.mk.{max u2 u1} (Matrix.{u2, u2, u1} n n R) 1 (One.one.{max u2 u1} (Matrix.{u2, u2, u1} n n R) (Matrix.hasOne.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (AddMonoidWithOne.toOne.{u1} R (AddGroupWithOne.toAddMonoidWithOne.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (Ring.toAddCommGroupWithOne.{u1} R (CommRing.toRing.{u1} R _inst_4)))))))))
but is expected to have type
- forall {n : Type.{u1}} {R : Type.{u2}} [_inst_2 : DecidableEq.{succ u1} n] [_inst_4 : CommRing.{u2} R] [_inst_5 : Fintype.{u1} n] (L : List.{max u1 u2} (Matrix.TransvectionStruct.{u2, u1} n R)), Eq.{max (succ u2) (succ u1)} (Matrix.{u1, u1, u2} n n R) (Matrix.mul.{u2, u1, u1, u1} n n n R _inst_5 (NonUnitalNonAssocRing.toMul.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4))))) (List.prod.{max u2 u1} (Matrix.{u1, u1, u2} n n R) (Matrix.instMulMatrix.{u2, u1} n R _inst_5 (NonUnitalNonAssocRing.toMul.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4)))))) (Matrix.one.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (NonAssocRing.toOne.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4)))) (List.map.{max u1 u2, max u1 u2} (Matrix.TransvectionStruct.{u2, u1} n R) (Matrix.{u1, u1, u2} n n R) (Function.comp.{succ (max u1 u2), max (succ u1) (succ u2), succ (max u1 u2)} (Matrix.TransvectionStruct.{u2, u1} n R) (Matrix.TransvectionStruct.{u2, u1} n R) (Matrix.{u1, u1, u2} n n R) (Matrix.TransvectionStruct.toMatrix.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) (Matrix.TransvectionStruct.inv.{u2, u1} n R _inst_4)) (List.reverse.{max u2 u1} (Matrix.TransvectionStruct.{u2, u1} n R) L))) (List.prod.{max u2 u1} (Matrix.{u1, u1, u2} n n R) (Matrix.instMulMatrix.{u2, u1} n R _inst_5 (NonUnitalNonAssocRing.toMul.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4)))))) (Matrix.one.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (NonAssocRing.toOne.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4)))) (List.map.{max u1 u2, max u1 u2} (Matrix.TransvectionStruct.{u2, u1} n R) (Matrix.{u1, u1, u2} n n R) (Matrix.TransvectionStruct.toMatrix.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) L))) (OfNat.ofNat.{max u2 u1} (Matrix.{u1, u1, u2} n n R) 1 (One.toOfNat1.{max u2 u1} (Matrix.{u1, u1, u2} n n R) (Matrix.one.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (NonAssocRing.toOne.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4))))))
+ forall {n : Type.{u1}} {R : Type.{u2}} [_inst_2 : DecidableEq.{succ u1} n] [_inst_4 : CommRing.{u2} R] [_inst_5 : Fintype.{u1} n] (L : List.{max u1 u2} (Matrix.TransvectionStruct.{u2, u1} n R)), Eq.{max (succ u2) (succ u1)} (Matrix.{u1, u1, u2} n n R) (Matrix.mul.{u2, u1, u1, u1} n n n R _inst_5 (NonUnitalNonAssocRing.toMul.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4))))) (List.prod.{max u2 u1} (Matrix.{u1, u1, u2} n n R) (Matrix.instMulMatrix.{u2, u1} n R _inst_5 (NonUnitalNonAssocRing.toMul.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4)))))) (Matrix.one.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (Semiring.toOne.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)))) (List.map.{max u1 u2, max u1 u2} (Matrix.TransvectionStruct.{u2, u1} n R) (Matrix.{u1, u1, u2} n n R) (Function.comp.{succ (max u1 u2), max (succ u1) (succ u2), succ (max u1 u2)} (Matrix.TransvectionStruct.{u2, u1} n R) (Matrix.TransvectionStruct.{u2, u1} n R) (Matrix.{u1, u1, u2} n n R) (Matrix.TransvectionStruct.toMatrix.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) (Matrix.TransvectionStruct.inv.{u2, u1} n R _inst_4)) (List.reverse.{max u2 u1} (Matrix.TransvectionStruct.{u2, u1} n R) L))) (List.prod.{max u2 u1} (Matrix.{u1, u1, u2} n n R) (Matrix.instMulMatrix.{u2, u1} n R _inst_5 (NonUnitalNonAssocRing.toMul.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4)))))) (Matrix.one.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (Semiring.toOne.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)))) (List.map.{max u1 u2, max u1 u2} (Matrix.TransvectionStruct.{u2, u1} n R) (Matrix.{u1, u1, u2} n n R) (Matrix.TransvectionStruct.toMatrix.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) L))) (OfNat.ofNat.{max u2 u1} (Matrix.{u1, u1, u2} n n R) 1 (One.toOfNat1.{max u2 u1} (Matrix.{u1, u1, u2} n n R) (Matrix.one.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (Semiring.toOne.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))))))
Case conversion may be inaccurate. Consider using '#align matrix.transvection_struct.reverse_inv_prod_mul_prod Matrix.TransvectionStruct.reverse_inv_prod_mul_prodₓ'. -/
theorem reverse_inv_prod_mul_prod (L : List (TransvectionStruct n R)) :
(L.reverse.map (toMatrix ∘ TransvectionStruct.inv)).Prod ⬝ (L.map toMatrix).Prod = 1 :=
@@ -344,7 +344,7 @@ theorem reverse_inv_prod_mul_prod (L : List (TransvectionStruct n R)) :
lean 3 declaration is
forall {n : Type.{u2}} {R : Type.{u1}} [_inst_2 : DecidableEq.{succ u2} n] [_inst_4 : CommRing.{u1} R] [_inst_5 : Fintype.{u2} n] (L : List.{max u2 u1} (Matrix.TransvectionStruct.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4)), Eq.{succ (max u2 u1)} (Matrix.{u2, u2, u1} n n R) (Matrix.mul.{u1, u2, u2, u2} n n n R _inst_5 (Distrib.toHasMul.{u1} R (Ring.toDistrib.{u1} R (CommRing.toRing.{u1} R _inst_4))) (AddCommGroup.toAddCommMonoid.{u1} R (NonUnitalNonAssocRing.toAddCommGroup.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4))))) (List.prod.{max u2 u1} (Matrix.{u2, u2, u1} n n R) (Matrix.hasMul.{u1, u2} n R _inst_5 (Distrib.toHasMul.{u1} R (Ring.toDistrib.{u1} R (CommRing.toRing.{u1} R _inst_4))) (AddCommGroup.toAddCommMonoid.{u1} R (NonUnitalNonAssocRing.toAddCommGroup.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (Matrix.hasOne.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (AddMonoidWithOne.toOne.{u1} R (AddGroupWithOne.toAddMonoidWithOne.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (Ring.toAddCommGroupWithOne.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (List.map.{max u2 u1, max u2 u1} (Matrix.TransvectionStruct.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) (Matrix.{u2, u2, u1} n n R) (Matrix.TransvectionStruct.toMatrix.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) L)) (List.prod.{max u2 u1} (Matrix.{u2, u2, u1} n n R) (Matrix.hasMul.{u1, u2} n R _inst_5 (Distrib.toHasMul.{u1} R (Ring.toDistrib.{u1} R (CommRing.toRing.{u1} R _inst_4))) (AddCommGroup.toAddCommMonoid.{u1} R (NonUnitalNonAssocRing.toAddCommGroup.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (Matrix.hasOne.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (AddMonoidWithOne.toOne.{u1} R (AddGroupWithOne.toAddMonoidWithOne.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (Ring.toAddCommGroupWithOne.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (List.map.{max u2 u1, max u2 u1} (Matrix.TransvectionStruct.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) (Matrix.{u2, u2, u1} n n R) (Function.comp.{succ (max u2 u1), max (succ u2) (succ u1), succ (max u2 u1)} (Matrix.TransvectionStruct.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) (Matrix.TransvectionStruct.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) (Matrix.{u2, u2, u1} n n R) (Matrix.TransvectionStruct.toMatrix.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) (Matrix.TransvectionStruct.inv.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4)) (List.reverse.{max u2 u1} (Matrix.TransvectionStruct.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) L)))) (OfNat.ofNat.{max u2 u1} (Matrix.{u2, u2, u1} n n R) 1 (OfNat.mk.{max u2 u1} (Matrix.{u2, u2, u1} n n R) 1 (One.one.{max u2 u1} (Matrix.{u2, u2, u1} n n R) (Matrix.hasOne.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (AddMonoidWithOne.toOne.{u1} R (AddGroupWithOne.toAddMonoidWithOne.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (Ring.toAddCommGroupWithOne.{u1} R (CommRing.toRing.{u1} R _inst_4)))))))))
but is expected to have type
- forall {n : Type.{u1}} {R : Type.{u2}} [_inst_2 : DecidableEq.{succ u1} n] [_inst_4 : CommRing.{u2} R] [_inst_5 : Fintype.{u1} n] (L : List.{max u1 u2} (Matrix.TransvectionStruct.{u2, u1} n R)), Eq.{max (succ u2) (succ u1)} (Matrix.{u1, u1, u2} n n R) (Matrix.mul.{u2, u1, u1, u1} n n n R _inst_5 (NonUnitalNonAssocRing.toMul.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4))))) (List.prod.{max u2 u1} (Matrix.{u1, u1, u2} n n R) (Matrix.instMulMatrix.{u2, u1} n R _inst_5 (NonUnitalNonAssocRing.toMul.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4)))))) (Matrix.one.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (NonAssocRing.toOne.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4)))) (List.map.{max u1 u2, max u1 u2} (Matrix.TransvectionStruct.{u2, u1} n R) (Matrix.{u1, u1, u2} n n R) (Matrix.TransvectionStruct.toMatrix.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) L)) (List.prod.{max u2 u1} (Matrix.{u1, u1, u2} n n R) (Matrix.instMulMatrix.{u2, u1} n R _inst_5 (NonUnitalNonAssocRing.toMul.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4)))))) (Matrix.one.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (NonAssocRing.toOne.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4)))) (List.map.{max u1 u2, max u1 u2} (Matrix.TransvectionStruct.{u2, u1} n R) (Matrix.{u1, u1, u2} n n R) (Function.comp.{succ (max u1 u2), max (succ u1) (succ u2), succ (max u1 u2)} (Matrix.TransvectionStruct.{u2, u1} n R) (Matrix.TransvectionStruct.{u2, u1} n R) (Matrix.{u1, u1, u2} n n R) (Matrix.TransvectionStruct.toMatrix.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) (Matrix.TransvectionStruct.inv.{u2, u1} n R _inst_4)) (List.reverse.{max u2 u1} (Matrix.TransvectionStruct.{u2, u1} n R) L)))) (OfNat.ofNat.{max u2 u1} (Matrix.{u1, u1, u2} n n R) 1 (One.toOfNat1.{max u2 u1} (Matrix.{u1, u1, u2} n n R) (Matrix.one.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (NonAssocRing.toOne.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4))))))
+ forall {n : Type.{u1}} {R : Type.{u2}} [_inst_2 : DecidableEq.{succ u1} n] [_inst_4 : CommRing.{u2} R] [_inst_5 : Fintype.{u1} n] (L : List.{max u1 u2} (Matrix.TransvectionStruct.{u2, u1} n R)), Eq.{max (succ u2) (succ u1)} (Matrix.{u1, u1, u2} n n R) (Matrix.mul.{u2, u1, u1, u1} n n n R _inst_5 (NonUnitalNonAssocRing.toMul.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4))))) (List.prod.{max u2 u1} (Matrix.{u1, u1, u2} n n R) (Matrix.instMulMatrix.{u2, u1} n R _inst_5 (NonUnitalNonAssocRing.toMul.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4)))))) (Matrix.one.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (Semiring.toOne.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)))) (List.map.{max u1 u2, max u1 u2} (Matrix.TransvectionStruct.{u2, u1} n R) (Matrix.{u1, u1, u2} n n R) (Matrix.TransvectionStruct.toMatrix.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) L)) (List.prod.{max u2 u1} (Matrix.{u1, u1, u2} n n R) (Matrix.instMulMatrix.{u2, u1} n R _inst_5 (NonUnitalNonAssocRing.toMul.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4)))))) (Matrix.one.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (Semiring.toOne.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)))) (List.map.{max u1 u2, max u1 u2} (Matrix.TransvectionStruct.{u2, u1} n R) (Matrix.{u1, u1, u2} n n R) (Function.comp.{succ (max u1 u2), max (succ u1) (succ u2), succ (max u1 u2)} (Matrix.TransvectionStruct.{u2, u1} n R) (Matrix.TransvectionStruct.{u2, u1} n R) (Matrix.{u1, u1, u2} n n R) (Matrix.TransvectionStruct.toMatrix.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) (Matrix.TransvectionStruct.inv.{u2, u1} n R _inst_4)) (List.reverse.{max u2 u1} (Matrix.TransvectionStruct.{u2, u1} n R) L)))) (OfNat.ofNat.{max u2 u1} (Matrix.{u1, u1, u2} n n R) 1 (One.toOfNat1.{max u2 u1} (Matrix.{u1, u1, u2} n n R) (Matrix.one.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (Semiring.toOne.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))))))
Case conversion may be inaccurate. Consider using '#align matrix.transvection_struct.prod_mul_reverse_inv_prod Matrix.TransvectionStruct.prod_mul_reverse_inv_prodₓ'. -/
theorem prod_mul_reverse_inv_prod (L : List (TransvectionStruct n R)) :
(L.map toMatrix).Prod ⬝ (L.reverse.map (toMatrix ∘ TransvectionStruct.inv)).Prod = 1 :=
@@ -386,7 +386,7 @@ def sumInl (t : TransvectionStruct n R) : TransvectionStruct (Sum n p) R
lean 3 declaration is
forall {n : Type.{u2}} (p : Type.{u3}) {R : Type.{u1}} [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : DecidableEq.{succ u3} p] [_inst_4 : CommRing.{u1} R] (t : Matrix.TransvectionStruct.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4), Eq.{succ (max (max u2 u3) u1)} (Matrix.{max u2 u3, max u2 u3, u1} (Sum.{u2, u3} n p) (Sum.{u2, u3} n p) R) (Matrix.TransvectionStruct.toMatrix.{u1, max u2 u3} (Sum.{u2, u3} n p) R (fun (a : Sum.{u2, u3} n p) (b : Sum.{u2, u3} n p) => Sum.decidableEq.{u2, u3} n (fun (a : n) (b : n) => _inst_2 a b) p (fun (a : p) (b : p) => (fun (a : p) (b : p) => _inst_3 a b) a b) a b) _inst_4 (Matrix.TransvectionStruct.sumInl.{u1, u2, u3} n p R (fun (a : n) (b : n) => _inst_2 a b) (fun (a : p) (b : p) => _inst_3 a b) _inst_4 t)) (Matrix.fromBlocks.{u2, u3, u2, u3, u1} n p n p R (Matrix.TransvectionStruct.toMatrix.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 t) (OfNat.ofNat.{max u2 u3 u1} (Matrix.{u2, u3, u1} n p R) 0 (OfNat.mk.{max u2 u3 u1} (Matrix.{u2, u3, u1} n p R) 0 (Zero.zero.{max u2 u3 u1} (Matrix.{u2, u3, u1} n p R) (Matrix.hasZero.{u1, u2, u3} n p R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))))))) (OfNat.ofNat.{max u3 u2 u1} (Matrix.{u3, u2, u1} p n R) 0 (OfNat.mk.{max u3 u2 u1} (Matrix.{u3, u2, u1} p n R) 0 (Zero.zero.{max u3 u2 u1} (Matrix.{u3, u2, u1} p n R) (Matrix.hasZero.{u1, u3, u2} p n R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))))))) (OfNat.ofNat.{max u3 u1} (Matrix.{u3, u3, u1} p p R) 1 (OfNat.mk.{max u3 u1} (Matrix.{u3, u3, u1} p p R) 1 (One.one.{max u3 u1} (Matrix.{u3, u3, u1} p p R) (Matrix.hasOne.{u1, u3} p R (fun (a : p) (b : p) => _inst_3 a b) (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (AddMonoidWithOne.toOne.{u1} R (AddGroupWithOne.toAddMonoidWithOne.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (Ring.toAddCommGroupWithOne.{u1} R (CommRing.toRing.{u1} R _inst_4))))))))))
but is expected to have type
- forall {n : Type.{u2}} (p : Type.{u1}) {R : Type.{u3}} [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : DecidableEq.{succ u1} p] [_inst_4 : CommRing.{u3} R] (t : Matrix.TransvectionStruct.{u3, u2} n R), Eq.{max (max (succ u3) (succ u2)) (succ u1)} (Matrix.{max u2 u1, max u2 u1, u3} (Sum.{u2, u1} n p) (Sum.{u2, u1} n p) R) (Matrix.TransvectionStruct.toMatrix.{u3, max u2 u1} (Sum.{u2, u1} n p) R (fun (a : Sum.{u2, u1} n p) (b : Sum.{u2, u1} n p) => Sum.instDecidableEqSum.{u2, u1} n p (fun (a : n) (b : n) => _inst_2 a b) (fun (a : p) (b : p) => _inst_3 a b) a b) _inst_4 (Matrix.TransvectionStruct.sumInl.{u3, u2, u1} n p R t)) (Matrix.fromBlocks.{u2, u1, u2, u1, u3} n p n p R (Matrix.TransvectionStruct.toMatrix.{u3, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 t) (OfNat.ofNat.{max (max u3 u2) u1} (Matrix.{u2, u1, u3} n p R) 0 (Zero.toOfNat0.{max (max u3 u2) u1} (Matrix.{u2, u1, u3} n p R) (Matrix.zero.{u3, u2, u1} n p R (CommMonoidWithZero.toZero.{u3} R (CommSemiring.toCommMonoidWithZero.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))))) (OfNat.ofNat.{max (max u3 u2) u1} (Matrix.{u1, u2, u3} p n R) 0 (Zero.toOfNat0.{max (max u3 u2) u1} (Matrix.{u1, u2, u3} p n R) (Matrix.zero.{u3, u1, u2} p n R (CommMonoidWithZero.toZero.{u3} R (CommSemiring.toCommMonoidWithZero.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))))) (OfNat.ofNat.{max u3 u1} (Matrix.{u1, u1, u3} p p R) 1 (One.toOfNat1.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Matrix.one.{u3, u1} p R (fun (a : p) (b : p) => _inst_3 a b) (CommMonoidWithZero.toZero.{u3} R (CommSemiring.toCommMonoidWithZero.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (NonAssocRing.toOne.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4)))))))
+ forall {n : Type.{u2}} (p : Type.{u1}) {R : Type.{u3}} [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : DecidableEq.{succ u1} p] [_inst_4 : CommRing.{u3} R] (t : Matrix.TransvectionStruct.{u3, u2} n R), Eq.{max (max (succ u3) (succ u2)) (succ u1)} (Matrix.{max u2 u1, max u2 u1, u3} (Sum.{u2, u1} n p) (Sum.{u2, u1} n p) R) (Matrix.TransvectionStruct.toMatrix.{u3, max u2 u1} (Sum.{u2, u1} n p) R (fun (a : Sum.{u2, u1} n p) (b : Sum.{u2, u1} n p) => Sum.instDecidableEqSum.{u2, u1} n p (fun (a : n) (b : n) => _inst_2 a b) (fun (a : p) (b : p) => _inst_3 a b) a b) _inst_4 (Matrix.TransvectionStruct.sumInl.{u3, u2, u1} n p R t)) (Matrix.fromBlocks.{u2, u1, u2, u1, u3} n p n p R (Matrix.TransvectionStruct.toMatrix.{u3, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 t) (OfNat.ofNat.{max (max u3 u2) u1} (Matrix.{u2, u1, u3} n p R) 0 (Zero.toOfNat0.{max (max u3 u2) u1} (Matrix.{u2, u1, u3} n p R) (Matrix.zero.{u3, u2, u1} n p R (CommMonoidWithZero.toZero.{u3} R (CommSemiring.toCommMonoidWithZero.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))))) (OfNat.ofNat.{max (max u3 u2) u1} (Matrix.{u1, u2, u3} p n R) 0 (Zero.toOfNat0.{max (max u3 u2) u1} (Matrix.{u1, u2, u3} p n R) (Matrix.zero.{u3, u1, u2} p n R (CommMonoidWithZero.toZero.{u3} R (CommSemiring.toCommMonoidWithZero.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))))) (OfNat.ofNat.{max u3 u1} (Matrix.{u1, u1, u3} p p R) 1 (One.toOfNat1.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Matrix.one.{u3, u1} p R (fun (a : p) (b : p) => _inst_3 a b) (CommMonoidWithZero.toZero.{u3} R (CommSemiring.toCommMonoidWithZero.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Semiring.toOne.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))))))
Case conversion may be inaccurate. Consider using '#align matrix.transvection_struct.to_matrix_sum_inl Matrix.TransvectionStruct.toMatrix_sumInlₓ'. -/
theorem toMatrix_sumInl (t : TransvectionStruct n R) :
(t.sumInl p).toMatrix = fromBlocks t.toMatrix 0 0 1 :=
@@ -404,7 +404,7 @@ theorem toMatrix_sumInl (t : TransvectionStruct n R) :
lean 3 declaration is
forall {n : Type.{u2}} (p : Type.{u3}) {R : Type.{u1}} [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : DecidableEq.{succ u3} p] [_inst_4 : CommRing.{u1} R] [_inst_5 : Fintype.{u2} n] [_inst_6 : Fintype.{u3} p] (M : Matrix.{u2, u2, u1} n n R) (L : List.{max u2 u1} (Matrix.TransvectionStruct.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4)) (N : Matrix.{u3, u3, u1} p p R), Eq.{succ (max (max u2 u3) u1)} (Matrix.{max u2 u3, max u2 u3, u1} (Sum.{u2, u3} n p) (Sum.{u2, u3} n p) R) (Matrix.mul.{u1, max u2 u3, max u2 u3, max u2 u3} (Sum.{u2, u3} n p) (Sum.{u2, u3} n p) (Sum.{u2, u3} n p) R (Sum.fintype.{u2, u3} n p _inst_5 _inst_6) (Distrib.toHasMul.{u1} R (Ring.toDistrib.{u1} R (CommRing.toRing.{u1} R _inst_4))) (AddCommGroup.toAddCommMonoid.{u1} R (NonUnitalNonAssocRing.toAddCommGroup.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4))))) (List.prod.{max (max u2 u3) u1} (Matrix.{max u2 u3, max u2 u3, u1} (Sum.{u2, u3} n p) (Sum.{u2, u3} n p) R) (Matrix.hasMul.{u1, max u2 u3} (Sum.{u2, u3} n p) R (Sum.fintype.{u2, u3} n p _inst_5 _inst_6) (Distrib.toHasMul.{u1} R (Ring.toDistrib.{u1} R (CommRing.toRing.{u1} R _inst_4))) (AddCommGroup.toAddCommMonoid.{u1} R (NonUnitalNonAssocRing.toAddCommGroup.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (Matrix.hasOne.{u1, max u2 u3} (Sum.{u2, u3} n p) R (fun (a : Sum.{u2, u3} n p) (b : Sum.{u2, u3} n p) => Sum.decidableEq.{u2, u3} n (fun (a : n) (b : n) => _inst_2 a b) p (fun (a : p) (b : p) => _inst_3 a b) a b) (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (AddMonoidWithOne.toOne.{u1} R (AddGroupWithOne.toAddMonoidWithOne.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (Ring.toAddCommGroupWithOne.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (List.map.{max u2 u1, max (max u2 u3) u1} (Matrix.TransvectionStruct.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) (Matrix.{max u2 u3, max u2 u3, u1} (Sum.{u2, u3} n p) (Sum.{u2, u3} n p) R) (Function.comp.{succ (max u2 u1), max (succ (max u2 u3)) (succ u1), succ (max (max u2 u3) u1)} (Matrix.TransvectionStruct.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) (Matrix.TransvectionStruct.{u1, max u2 u3} (Sum.{u2, u3} n p) R (fun (a : Sum.{u2, u3} n p) (b : Sum.{u2, u3} n p) => Sum.decidableEq.{u2, u3} n (fun (a : n) (b : n) => _inst_2 a b) p (fun (a : p) (b : p) => _inst_3 a b) a b) _inst_4) (Matrix.{max u2 u3, max u2 u3, u1} (Sum.{u2, u3} n p) (Sum.{u2, u3} n p) R) (Matrix.TransvectionStruct.toMatrix.{u1, max u2 u3} (Sum.{u2, u3} n p) R (fun (a : Sum.{u2, u3} n p) (b : Sum.{u2, u3} n p) => Sum.decidableEq.{u2, u3} n (fun (a : n) (b : n) => _inst_2 a b) p (fun (a : p) (b : p) => _inst_3 a b) a b) _inst_4) (Matrix.TransvectionStruct.sumInl.{u1, u2, u3} n p R (fun (a : n) (b : n) => _inst_2 a b) (fun (a : p) (b : p) => _inst_3 a b) _inst_4)) L)) (Matrix.fromBlocks.{u2, u3, u2, u3, u1} n p n p R M (OfNat.ofNat.{max u2 u3 u1} (Matrix.{u2, u3, u1} n p R) 0 (OfNat.mk.{max u2 u3 u1} (Matrix.{u2, u3, u1} n p R) 0 (Zero.zero.{max u2 u3 u1} (Matrix.{u2, u3, u1} n p R) (Matrix.hasZero.{u1, u2, u3} n p R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))))))) (OfNat.ofNat.{max u3 u2 u1} (Matrix.{u3, u2, u1} p n R) 0 (OfNat.mk.{max u3 u2 u1} (Matrix.{u3, u2, u1} p n R) 0 (Zero.zero.{max u3 u2 u1} (Matrix.{u3, u2, u1} p n R) (Matrix.hasZero.{u1, u3, u2} p n R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))))))) N)) (Matrix.fromBlocks.{u2, u3, u2, u3, u1} n p n p R (Matrix.mul.{u1, u2, u2, u2} n n n R _inst_5 (Distrib.toHasMul.{u1} R (Ring.toDistrib.{u1} R (CommRing.toRing.{u1} R _inst_4))) (AddCommGroup.toAddCommMonoid.{u1} R (NonUnitalNonAssocRing.toAddCommGroup.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4))))) (List.prod.{max u2 u1} (Matrix.{u2, u2, u1} n n R) (Matrix.hasMul.{u1, u2} n R _inst_5 (Distrib.toHasMul.{u1} R (Ring.toDistrib.{u1} R (CommRing.toRing.{u1} R _inst_4))) (AddCommGroup.toAddCommMonoid.{u1} R (NonUnitalNonAssocRing.toAddCommGroup.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (Matrix.hasOne.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (AddMonoidWithOne.toOne.{u1} R (AddGroupWithOne.toAddMonoidWithOne.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (Ring.toAddCommGroupWithOne.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (List.map.{max u2 u1, max u2 u1} (Matrix.TransvectionStruct.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) (Matrix.{u2, u2, u1} n n R) (Matrix.TransvectionStruct.toMatrix.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) L)) M) (OfNat.ofNat.{max u2 u3 u1} (Matrix.{u2, u3, u1} n p R) 0 (OfNat.mk.{max u2 u3 u1} (Matrix.{u2, u3, u1} n p R) 0 (Zero.zero.{max u2 u3 u1} (Matrix.{u2, u3, u1} n p R) (Matrix.hasZero.{u1, u2, u3} n p R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))))))) (OfNat.ofNat.{max u3 u2 u1} (Matrix.{u3, u2, u1} p n R) 0 (OfNat.mk.{max u3 u2 u1} (Matrix.{u3, u2, u1} p n R) 0 (Zero.zero.{max u3 u2 u1} (Matrix.{u3, u2, u1} p n R) (Matrix.hasZero.{u1, u3, u2} p n R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))))))) N)
but is expected to have type
- forall {n : Type.{u2}} (p : Type.{u1}) {R : Type.{u3}} [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : DecidableEq.{succ u1} p] [_inst_4 : CommRing.{u3} R] [_inst_5 : Fintype.{u2} n] [_inst_6 : Fintype.{u1} p] (M : Matrix.{u2, u2, u3} n n R) (L : List.{max u2 u3} (Matrix.TransvectionStruct.{u3, u2} n R)) (N : Matrix.{u1, u1, u3} p p R), Eq.{max (max (succ u3) (succ u2)) (succ u1)} (Matrix.{max u2 u1, max u1 u2, u3} (Sum.{u2, u1} n p) (Sum.{u2, u1} n p) R) (Matrix.mul.{u3, max u2 u1, max u2 u1, max u1 u2} (Sum.{u2, u1} n p) (Sum.{u2, u1} n p) (Sum.{u2, u1} n p) R (instFintypeSum.{u2, u1} n p _inst_5 _inst_6) (NonUnitalNonAssocRing.toMul.{u3} R (NonAssocRing.toNonUnitalNonAssocRing.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} R (NonAssocRing.toNonUnitalNonAssocRing.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4))))) (List.prod.{max (max u3 u2) u1} (Matrix.{max u1 u2, max u1 u2, u3} (Sum.{u2, u1} n p) (Sum.{u2, u1} n p) R) (Matrix.instMulMatrix.{u3, max u2 u1} (Sum.{u2, u1} n p) R (instFintypeSum.{u2, u1} n p _inst_5 _inst_6) (NonUnitalNonAssocRing.toMul.{u3} R (NonAssocRing.toNonUnitalNonAssocRing.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} R (NonAssocRing.toNonUnitalNonAssocRing.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4)))))) (Matrix.one.{u3, max u2 u1} (Sum.{u2, u1} n p) R (fun (a : Sum.{u2, u1} n p) (b : Sum.{u2, u1} n p) => Sum.instDecidableEqSum.{u2, u1} n p (fun (a : n) (b : n) => _inst_2 a b) (fun (a : p) (b : p) => _inst_3 a b) a b) (CommMonoidWithZero.toZero.{u3} R (CommSemiring.toCommMonoidWithZero.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (NonAssocRing.toOne.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4)))) (List.map.{max u2 u3, max (max u1 u2) u3} (Matrix.TransvectionStruct.{u3, u2} n R) (Matrix.{max u1 u2, max u1 u2, u3} (Sum.{u2, u1} n p) (Sum.{u2, u1} n p) R) (Function.comp.{succ (max u2 u3), max (succ (max u1 u2)) (succ u3), succ (max (max u1 u2) u3)} (Matrix.TransvectionStruct.{u3, u2} n R) (Matrix.TransvectionStruct.{u3, max u1 u2} (Sum.{u2, u1} n p) R) (Matrix.{max u1 u2, max u1 u2, u3} (Sum.{u2, u1} n p) (Sum.{u2, u1} n p) R) (Matrix.TransvectionStruct.toMatrix.{u3, max u1 u2} (Sum.{u2, u1} n p) R (fun (a : Sum.{u2, u1} n p) (b : Sum.{u2, u1} n p) => Sum.instDecidableEqSum.{u2, u1} n p (fun (a : n) (b : n) => _inst_2 a b) (fun (a : p) (b : p) => _inst_3 a b) a b) _inst_4) (Matrix.TransvectionStruct.sumInl.{u3, u2, u1} n p R)) L)) (Matrix.fromBlocks.{u2, u1, u2, u1, u3} n p n p R M (OfNat.ofNat.{max (max u3 u2) u1} (Matrix.{u2, u1, u3} n p R) 0 (Zero.toOfNat0.{max (max u3 u2) u1} (Matrix.{u2, u1, u3} n p R) (Matrix.zero.{u3, u2, u1} n p R (CommMonoidWithZero.toZero.{u3} R (CommSemiring.toCommMonoidWithZero.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))))) (OfNat.ofNat.{max (max u3 u2) u1} (Matrix.{u1, u2, u3} p n R) 0 (Zero.toOfNat0.{max (max u3 u2) u1} (Matrix.{u1, u2, u3} p n R) (Matrix.zero.{u3, u1, u2} p n R (CommMonoidWithZero.toZero.{u3} R (CommSemiring.toCommMonoidWithZero.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))))) N)) (Matrix.fromBlocks.{u2, u1, u2, u1, u3} n p n p R (Matrix.mul.{u3, u2, u2, u2} n n n R _inst_5 (NonUnitalNonAssocRing.toMul.{u3} R (NonAssocRing.toNonUnitalNonAssocRing.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} R (NonAssocRing.toNonUnitalNonAssocRing.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4))))) (List.prod.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Matrix.instMulMatrix.{u3, u2} n R _inst_5 (NonUnitalNonAssocRing.toMul.{u3} R (NonAssocRing.toNonUnitalNonAssocRing.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} R (NonAssocRing.toNonUnitalNonAssocRing.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4)))))) (Matrix.one.{u3, u2} n R (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u3} R (CommSemiring.toCommMonoidWithZero.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (NonAssocRing.toOne.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4)))) (List.map.{max u2 u3, max u2 u3} (Matrix.TransvectionStruct.{u3, u2} n R) (Matrix.{u2, u2, u3} n n R) (Matrix.TransvectionStruct.toMatrix.{u3, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) L)) M) (OfNat.ofNat.{max (max u3 u2) u1} (Matrix.{u2, u1, u3} n p R) 0 (Zero.toOfNat0.{max (max u3 u2) u1} (Matrix.{u2, u1, u3} n p R) (Matrix.zero.{u3, u2, u1} n p R (CommMonoidWithZero.toZero.{u3} R (CommSemiring.toCommMonoidWithZero.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))))) (OfNat.ofNat.{max (max u3 u2) u1} (Matrix.{u1, u2, u3} p n R) 0 (Zero.toOfNat0.{max (max u3 u2) u1} (Matrix.{u1, u2, u3} p n R) (Matrix.zero.{u3, u1, u2} p n R (CommMonoidWithZero.toZero.{u3} R (CommSemiring.toCommMonoidWithZero.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))))) N)
+ forall {n : Type.{u2}} (p : Type.{u1}) {R : Type.{u3}} [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : DecidableEq.{succ u1} p] [_inst_4 : CommRing.{u3} R] [_inst_5 : Fintype.{u2} n] [_inst_6 : Fintype.{u1} p] (M : Matrix.{u2, u2, u3} n n R) (L : List.{max u2 u3} (Matrix.TransvectionStruct.{u3, u2} n R)) (N : Matrix.{u1, u1, u3} p p R), Eq.{max (max (succ u3) (succ u2)) (succ u1)} (Matrix.{max u2 u1, max u1 u2, u3} (Sum.{u2, u1} n p) (Sum.{u2, u1} n p) R) (Matrix.mul.{u3, max u2 u1, max u2 u1, max u1 u2} (Sum.{u2, u1} n p) (Sum.{u2, u1} n p) (Sum.{u2, u1} n p) R (instFintypeSum.{u2, u1} n p _inst_5 _inst_6) (NonUnitalNonAssocRing.toMul.{u3} R (NonAssocRing.toNonUnitalNonAssocRing.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} R (NonAssocRing.toNonUnitalNonAssocRing.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4))))) (List.prod.{max (max u3 u2) u1} (Matrix.{max u1 u2, max u1 u2, u3} (Sum.{u2, u1} n p) (Sum.{u2, u1} n p) R) (Matrix.instMulMatrix.{u3, max u2 u1} (Sum.{u2, u1} n p) R (instFintypeSum.{u2, u1} n p _inst_5 _inst_6) (NonUnitalNonAssocRing.toMul.{u3} R (NonAssocRing.toNonUnitalNonAssocRing.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} R (NonAssocRing.toNonUnitalNonAssocRing.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4)))))) (Matrix.one.{u3, max u2 u1} (Sum.{u2, u1} n p) R (fun (a : Sum.{u2, u1} n p) (b : Sum.{u2, u1} n p) => Sum.instDecidableEqSum.{u2, u1} n p (fun (a : n) (b : n) => _inst_2 a b) (fun (a : p) (b : p) => _inst_3 a b) a b) (CommMonoidWithZero.toZero.{u3} R (CommSemiring.toCommMonoidWithZero.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Semiring.toOne.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) (List.map.{max u2 u3, max (max u1 u2) u3} (Matrix.TransvectionStruct.{u3, u2} n R) (Matrix.{max u1 u2, max u1 u2, u3} (Sum.{u2, u1} n p) (Sum.{u2, u1} n p) R) (Function.comp.{succ (max u2 u3), max (succ (max u1 u2)) (succ u3), succ (max (max u1 u2) u3)} (Matrix.TransvectionStruct.{u3, u2} n R) (Matrix.TransvectionStruct.{u3, max u1 u2} (Sum.{u2, u1} n p) R) (Matrix.{max u1 u2, max u1 u2, u3} (Sum.{u2, u1} n p) (Sum.{u2, u1} n p) R) (Matrix.TransvectionStruct.toMatrix.{u3, max u1 u2} (Sum.{u2, u1} n p) R (fun (a : Sum.{u2, u1} n p) (b : Sum.{u2, u1} n p) => Sum.instDecidableEqSum.{u2, u1} n p (fun (a : n) (b : n) => _inst_2 a b) (fun (a : p) (b : p) => _inst_3 a b) a b) _inst_4) (Matrix.TransvectionStruct.sumInl.{u3, u2, u1} n p R)) L)) (Matrix.fromBlocks.{u2, u1, u2, u1, u3} n p n p R M (OfNat.ofNat.{max (max u3 u2) u1} (Matrix.{u2, u1, u3} n p R) 0 (Zero.toOfNat0.{max (max u3 u2) u1} (Matrix.{u2, u1, u3} n p R) (Matrix.zero.{u3, u2, u1} n p R (CommMonoidWithZero.toZero.{u3} R (CommSemiring.toCommMonoidWithZero.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))))) (OfNat.ofNat.{max (max u3 u2) u1} (Matrix.{u1, u2, u3} p n R) 0 (Zero.toOfNat0.{max (max u3 u2) u1} (Matrix.{u1, u2, u3} p n R) (Matrix.zero.{u3, u1, u2} p n R (CommMonoidWithZero.toZero.{u3} R (CommSemiring.toCommMonoidWithZero.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))))) N)) (Matrix.fromBlocks.{u2, u1, u2, u1, u3} n p n p R (Matrix.mul.{u3, u2, u2, u2} n n n R _inst_5 (NonUnitalNonAssocRing.toMul.{u3} R (NonAssocRing.toNonUnitalNonAssocRing.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} R (NonAssocRing.toNonUnitalNonAssocRing.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4))))) (List.prod.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Matrix.instMulMatrix.{u3, u2} n R _inst_5 (NonUnitalNonAssocRing.toMul.{u3} R (NonAssocRing.toNonUnitalNonAssocRing.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} R (NonAssocRing.toNonUnitalNonAssocRing.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4)))))) (Matrix.one.{u3, u2} n R (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u3} R (CommSemiring.toCommMonoidWithZero.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Semiring.toOne.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) (List.map.{max u2 u3, max u2 u3} (Matrix.TransvectionStruct.{u3, u2} n R) (Matrix.{u2, u2, u3} n n R) (Matrix.TransvectionStruct.toMatrix.{u3, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) L)) M) (OfNat.ofNat.{max (max u3 u2) u1} (Matrix.{u2, u1, u3} n p R) 0 (Zero.toOfNat0.{max (max u3 u2) u1} (Matrix.{u2, u1, u3} n p R) (Matrix.zero.{u3, u2, u1} n p R (CommMonoidWithZero.toZero.{u3} R (CommSemiring.toCommMonoidWithZero.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))))) (OfNat.ofNat.{max (max u3 u2) u1} (Matrix.{u1, u2, u3} p n R) 0 (Zero.toOfNat0.{max (max u3 u2) u1} (Matrix.{u1, u2, u3} p n R) (Matrix.zero.{u3, u1, u2} p n R (CommMonoidWithZero.toZero.{u3} R (CommSemiring.toCommMonoidWithZero.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))))) N)
Case conversion may be inaccurate. Consider using '#align matrix.transvection_struct.sum_inl_to_matrix_prod_mul Matrix.TransvectionStruct.sumInl_toMatrix_prod_mulₓ'. -/
@[simp]
theorem sumInl_toMatrix_prod_mul [Fintype n] [Fintype p] (M : Matrix n n R)
@@ -421,7 +421,7 @@ theorem sumInl_toMatrix_prod_mul [Fintype n] [Fintype p] (M : Matrix n n R)
lean 3 declaration is
forall {n : Type.{u2}} (p : Type.{u3}) {R : Type.{u1}} [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : DecidableEq.{succ u3} p] [_inst_4 : CommRing.{u1} R] [_inst_5 : Fintype.{u2} n] [_inst_6 : Fintype.{u3} p] (M : Matrix.{u2, u2, u1} n n R) (L : List.{max u2 u1} (Matrix.TransvectionStruct.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4)) (N : Matrix.{u3, u3, u1} p p R), Eq.{succ (max (max u2 u3) u1)} (Matrix.{max u2 u3, max u2 u3, u1} (Sum.{u2, u3} n p) (Sum.{u2, u3} n p) R) (Matrix.mul.{u1, max u2 u3, max u2 u3, max u2 u3} (Sum.{u2, u3} n p) (Sum.{u2, u3} n p) (Sum.{u2, u3} n p) R (Sum.fintype.{u2, u3} n p _inst_5 _inst_6) (Distrib.toHasMul.{u1} R (Ring.toDistrib.{u1} R (CommRing.toRing.{u1} R _inst_4))) (AddCommGroup.toAddCommMonoid.{u1} R (NonUnitalNonAssocRing.toAddCommGroup.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4))))) (Matrix.fromBlocks.{u2, u3, u2, u3, u1} n p n p R M (OfNat.ofNat.{max u2 u3 u1} (Matrix.{u2, u3, u1} n p R) 0 (OfNat.mk.{max u2 u3 u1} (Matrix.{u2, u3, u1} n p R) 0 (Zero.zero.{max u2 u3 u1} (Matrix.{u2, u3, u1} n p R) (Matrix.hasZero.{u1, u2, u3} n p R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))))))) (OfNat.ofNat.{max u3 u2 u1} (Matrix.{u3, u2, u1} p n R) 0 (OfNat.mk.{max u3 u2 u1} (Matrix.{u3, u2, u1} p n R) 0 (Zero.zero.{max u3 u2 u1} (Matrix.{u3, u2, u1} p n R) (Matrix.hasZero.{u1, u3, u2} p n R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))))))) N) (List.prod.{max (max u2 u3) u1} (Matrix.{max u2 u3, max u2 u3, u1} (Sum.{u2, u3} n p) (Sum.{u2, u3} n p) R) (Matrix.hasMul.{u1, max u2 u3} (Sum.{u2, u3} n p) R (Sum.fintype.{u2, u3} n p _inst_5 _inst_6) (Distrib.toHasMul.{u1} R (Ring.toDistrib.{u1} R (CommRing.toRing.{u1} R _inst_4))) (AddCommGroup.toAddCommMonoid.{u1} R (NonUnitalNonAssocRing.toAddCommGroup.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (Matrix.hasOne.{u1, max u2 u3} (Sum.{u2, u3} n p) R (fun (a : Sum.{u2, u3} n p) (b : Sum.{u2, u3} n p) => Sum.decidableEq.{u2, u3} n (fun (a : n) (b : n) => _inst_2 a b) p (fun (a : p) (b : p) => _inst_3 a b) a b) (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (AddMonoidWithOne.toOne.{u1} R (AddGroupWithOne.toAddMonoidWithOne.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (Ring.toAddCommGroupWithOne.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (List.map.{max u2 u1, max (max u2 u3) u1} (Matrix.TransvectionStruct.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) (Matrix.{max u2 u3, max u2 u3, u1} (Sum.{u2, u3} n p) (Sum.{u2, u3} n p) R) (Function.comp.{succ (max u2 u1), max (succ (max u2 u3)) (succ u1), succ (max (max u2 u3) u1)} (Matrix.TransvectionStruct.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) (Matrix.TransvectionStruct.{u1, max u2 u3} (Sum.{u2, u3} n p) R (fun (a : Sum.{u2, u3} n p) (b : Sum.{u2, u3} n p) => Sum.decidableEq.{u2, u3} n (fun (a : n) (b : n) => _inst_2 a b) p (fun (a : p) (b : p) => _inst_3 a b) a b) _inst_4) (Matrix.{max u2 u3, max u2 u3, u1} (Sum.{u2, u3} n p) (Sum.{u2, u3} n p) R) (Matrix.TransvectionStruct.toMatrix.{u1, max u2 u3} (Sum.{u2, u3} n p) R (fun (a : Sum.{u2, u3} n p) (b : Sum.{u2, u3} n p) => Sum.decidableEq.{u2, u3} n (fun (a : n) (b : n) => _inst_2 a b) p (fun (a : p) (b : p) => _inst_3 a b) a b) _inst_4) (Matrix.TransvectionStruct.sumInl.{u1, u2, u3} n p R (fun (a : n) (b : n) => _inst_2 a b) (fun (a : p) (b : p) => _inst_3 a b) _inst_4)) L))) (Matrix.fromBlocks.{u2, u3, u2, u3, u1} n p n p R (Matrix.mul.{u1, u2, u2, u2} n n n R _inst_5 (Distrib.toHasMul.{u1} R (Ring.toDistrib.{u1} R (CommRing.toRing.{u1} R _inst_4))) (AddCommGroup.toAddCommMonoid.{u1} R (NonUnitalNonAssocRing.toAddCommGroup.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4))))) M (List.prod.{max u2 u1} (Matrix.{u2, u2, u1} n n R) (Matrix.hasMul.{u1, u2} n R _inst_5 (Distrib.toHasMul.{u1} R (Ring.toDistrib.{u1} R (CommRing.toRing.{u1} R _inst_4))) (AddCommGroup.toAddCommMonoid.{u1} R (NonUnitalNonAssocRing.toAddCommGroup.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (Matrix.hasOne.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (AddMonoidWithOne.toOne.{u1} R (AddGroupWithOne.toAddMonoidWithOne.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (Ring.toAddCommGroupWithOne.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (List.map.{max u2 u1, max u2 u1} (Matrix.TransvectionStruct.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) (Matrix.{u2, u2, u1} n n R) (Matrix.TransvectionStruct.toMatrix.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) L))) (OfNat.ofNat.{max u2 u3 u1} (Matrix.{u2, u3, u1} n p R) 0 (OfNat.mk.{max u2 u3 u1} (Matrix.{u2, u3, u1} n p R) 0 (Zero.zero.{max u2 u3 u1} (Matrix.{u2, u3, u1} n p R) (Matrix.hasZero.{u1, u2, u3} n p R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))))))) (OfNat.ofNat.{max u3 u2 u1} (Matrix.{u3, u2, u1} p n R) 0 (OfNat.mk.{max u3 u2 u1} (Matrix.{u3, u2, u1} p n R) 0 (Zero.zero.{max u3 u2 u1} (Matrix.{u3, u2, u1} p n R) (Matrix.hasZero.{u1, u3, u2} p n R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))))))) N)
but is expected to have type
- forall {n : Type.{u2}} (p : Type.{u1}) {R : Type.{u3}} [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : DecidableEq.{succ u1} p] [_inst_4 : CommRing.{u3} R] [_inst_5 : Fintype.{u2} n] [_inst_6 : Fintype.{u1} p] (M : Matrix.{u2, u2, u3} n n R) (L : List.{max u2 u3} (Matrix.TransvectionStruct.{u3, u2} n R)) (N : Matrix.{u1, u1, u3} p p R), Eq.{max (max (succ u3) (succ u2)) (succ u1)} (Matrix.{max u1 u2, max u2 u1, u3} (Sum.{u2, u1} n p) (Sum.{u2, u1} n p) R) (Matrix.mul.{u3, max u1 u2, max u1 u2, max u2 u1} (Sum.{u2, u1} n p) (Sum.{u2, u1} n p) (Sum.{u2, u1} n p) R (instFintypeSum.{u2, u1} n p _inst_5 _inst_6) (NonUnitalNonAssocRing.toMul.{u3} R (NonAssocRing.toNonUnitalNonAssocRing.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} R (NonAssocRing.toNonUnitalNonAssocRing.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4))))) (Matrix.fromBlocks.{u2, u1, u2, u1, u3} n p n p R M (OfNat.ofNat.{max (max u3 u2) u1} (Matrix.{u2, u1, u3} n p R) 0 (Zero.toOfNat0.{max (max u3 u2) u1} (Matrix.{u2, u1, u3} n p R) (Matrix.zero.{u3, u2, u1} n p R (CommMonoidWithZero.toZero.{u3} R (CommSemiring.toCommMonoidWithZero.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))))) (OfNat.ofNat.{max (max u3 u2) u1} (Matrix.{u1, u2, u3} p n R) 0 (Zero.toOfNat0.{max (max u3 u2) u1} (Matrix.{u1, u2, u3} p n R) (Matrix.zero.{u3, u1, u2} p n R (CommMonoidWithZero.toZero.{u3} R (CommSemiring.toCommMonoidWithZero.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))))) N) (List.prod.{max (max u3 u2) u1} (Matrix.{max u1 u2, max u1 u2, u3} (Sum.{u2, u1} n p) (Sum.{u2, u1} n p) R) (Matrix.instMulMatrix.{u3, max u2 u1} (Sum.{u2, u1} n p) R (instFintypeSum.{u2, u1} n p _inst_5 _inst_6) (NonUnitalNonAssocRing.toMul.{u3} R (NonAssocRing.toNonUnitalNonAssocRing.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} R (NonAssocRing.toNonUnitalNonAssocRing.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4)))))) (Matrix.one.{u3, max u2 u1} (Sum.{u2, u1} n p) R (fun (a : Sum.{u2, u1} n p) (b : Sum.{u2, u1} n p) => Sum.instDecidableEqSum.{u2, u1} n p (fun (a : n) (b : n) => _inst_2 a b) (fun (a : p) (b : p) => _inst_3 a b) a b) (CommMonoidWithZero.toZero.{u3} R (CommSemiring.toCommMonoidWithZero.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (NonAssocRing.toOne.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4)))) (List.map.{max u2 u3, max (max u1 u2) u3} (Matrix.TransvectionStruct.{u3, u2} n R) (Matrix.{max u1 u2, max u1 u2, u3} (Sum.{u2, u1} n p) (Sum.{u2, u1} n p) R) (Function.comp.{succ (max u2 u3), max (succ (max u1 u2)) (succ u3), succ (max (max u1 u2) u3)} (Matrix.TransvectionStruct.{u3, u2} n R) (Matrix.TransvectionStruct.{u3, max u1 u2} (Sum.{u2, u1} n p) R) (Matrix.{max u1 u2, max u1 u2, u3} (Sum.{u2, u1} n p) (Sum.{u2, u1} n p) R) (Matrix.TransvectionStruct.toMatrix.{u3, max u1 u2} (Sum.{u2, u1} n p) R (fun (a : Sum.{u2, u1} n p) (b : Sum.{u2, u1} n p) => Sum.instDecidableEqSum.{u2, u1} n p (fun (a : n) (b : n) => _inst_2 a b) (fun (a : p) (b : p) => _inst_3 a b) a b) _inst_4) (Matrix.TransvectionStruct.sumInl.{u3, u2, u1} n p R)) L))) (Matrix.fromBlocks.{u2, u1, u2, u1, u3} n p n p R (Matrix.mul.{u3, u2, u2, u2} n n n R _inst_5 (NonUnitalNonAssocRing.toMul.{u3} R (NonAssocRing.toNonUnitalNonAssocRing.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} R (NonAssocRing.toNonUnitalNonAssocRing.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4))))) M (List.prod.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Matrix.instMulMatrix.{u3, u2} n R _inst_5 (NonUnitalNonAssocRing.toMul.{u3} R (NonAssocRing.toNonUnitalNonAssocRing.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} R (NonAssocRing.toNonUnitalNonAssocRing.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4)))))) (Matrix.one.{u3, u2} n R (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u3} R (CommSemiring.toCommMonoidWithZero.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (NonAssocRing.toOne.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4)))) (List.map.{max u2 u3, max u2 u3} (Matrix.TransvectionStruct.{u3, u2} n R) (Matrix.{u2, u2, u3} n n R) (Matrix.TransvectionStruct.toMatrix.{u3, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) L))) (OfNat.ofNat.{max (max u3 u2) u1} (Matrix.{u2, u1, u3} n p R) 0 (Zero.toOfNat0.{max (max u3 u2) u1} (Matrix.{u2, u1, u3} n p R) (Matrix.zero.{u3, u2, u1} n p R (CommMonoidWithZero.toZero.{u3} R (CommSemiring.toCommMonoidWithZero.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))))) (OfNat.ofNat.{max (max u3 u2) u1} (Matrix.{u1, u2, u3} p n R) 0 (Zero.toOfNat0.{max (max u3 u2) u1} (Matrix.{u1, u2, u3} p n R) (Matrix.zero.{u3, u1, u2} p n R (CommMonoidWithZero.toZero.{u3} R (CommSemiring.toCommMonoidWithZero.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))))) N)
+ forall {n : Type.{u2}} (p : Type.{u1}) {R : Type.{u3}} [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : DecidableEq.{succ u1} p] [_inst_4 : CommRing.{u3} R] [_inst_5 : Fintype.{u2} n] [_inst_6 : Fintype.{u1} p] (M : Matrix.{u2, u2, u3} n n R) (L : List.{max u2 u3} (Matrix.TransvectionStruct.{u3, u2} n R)) (N : Matrix.{u1, u1, u3} p p R), Eq.{max (max (succ u3) (succ u2)) (succ u1)} (Matrix.{max u1 u2, max u2 u1, u3} (Sum.{u2, u1} n p) (Sum.{u2, u1} n p) R) (Matrix.mul.{u3, max u1 u2, max u1 u2, max u2 u1} (Sum.{u2, u1} n p) (Sum.{u2, u1} n p) (Sum.{u2, u1} n p) R (instFintypeSum.{u2, u1} n p _inst_5 _inst_6) (NonUnitalNonAssocRing.toMul.{u3} R (NonAssocRing.toNonUnitalNonAssocRing.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} R (NonAssocRing.toNonUnitalNonAssocRing.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4))))) (Matrix.fromBlocks.{u2, u1, u2, u1, u3} n p n p R M (OfNat.ofNat.{max (max u3 u2) u1} (Matrix.{u2, u1, u3} n p R) 0 (Zero.toOfNat0.{max (max u3 u2) u1} (Matrix.{u2, u1, u3} n p R) (Matrix.zero.{u3, u2, u1} n p R (CommMonoidWithZero.toZero.{u3} R (CommSemiring.toCommMonoidWithZero.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))))) (OfNat.ofNat.{max (max u3 u2) u1} (Matrix.{u1, u2, u3} p n R) 0 (Zero.toOfNat0.{max (max u3 u2) u1} (Matrix.{u1, u2, u3} p n R) (Matrix.zero.{u3, u1, u2} p n R (CommMonoidWithZero.toZero.{u3} R (CommSemiring.toCommMonoidWithZero.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))))) N) (List.prod.{max (max u3 u2) u1} (Matrix.{max u1 u2, max u1 u2, u3} (Sum.{u2, u1} n p) (Sum.{u2, u1} n p) R) (Matrix.instMulMatrix.{u3, max u2 u1} (Sum.{u2, u1} n p) R (instFintypeSum.{u2, u1} n p _inst_5 _inst_6) (NonUnitalNonAssocRing.toMul.{u3} R (NonAssocRing.toNonUnitalNonAssocRing.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} R (NonAssocRing.toNonUnitalNonAssocRing.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4)))))) (Matrix.one.{u3, max u2 u1} (Sum.{u2, u1} n p) R (fun (a : Sum.{u2, u1} n p) (b : Sum.{u2, u1} n p) => Sum.instDecidableEqSum.{u2, u1} n p (fun (a : n) (b : n) => _inst_2 a b) (fun (a : p) (b : p) => _inst_3 a b) a b) (CommMonoidWithZero.toZero.{u3} R (CommSemiring.toCommMonoidWithZero.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Semiring.toOne.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) (List.map.{max u2 u3, max (max u1 u2) u3} (Matrix.TransvectionStruct.{u3, u2} n R) (Matrix.{max u1 u2, max u1 u2, u3} (Sum.{u2, u1} n p) (Sum.{u2, u1} n p) R) (Function.comp.{succ (max u2 u3), max (succ (max u1 u2)) (succ u3), succ (max (max u1 u2) u3)} (Matrix.TransvectionStruct.{u3, u2} n R) (Matrix.TransvectionStruct.{u3, max u1 u2} (Sum.{u2, u1} n p) R) (Matrix.{max u1 u2, max u1 u2, u3} (Sum.{u2, u1} n p) (Sum.{u2, u1} n p) R) (Matrix.TransvectionStruct.toMatrix.{u3, max u1 u2} (Sum.{u2, u1} n p) R (fun (a : Sum.{u2, u1} n p) (b : Sum.{u2, u1} n p) => Sum.instDecidableEqSum.{u2, u1} n p (fun (a : n) (b : n) => _inst_2 a b) (fun (a : p) (b : p) => _inst_3 a b) a b) _inst_4) (Matrix.TransvectionStruct.sumInl.{u3, u2, u1} n p R)) L))) (Matrix.fromBlocks.{u2, u1, u2, u1, u3} n p n p R (Matrix.mul.{u3, u2, u2, u2} n n n R _inst_5 (NonUnitalNonAssocRing.toMul.{u3} R (NonAssocRing.toNonUnitalNonAssocRing.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} R (NonAssocRing.toNonUnitalNonAssocRing.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4))))) M (List.prod.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Matrix.instMulMatrix.{u3, u2} n R _inst_5 (NonUnitalNonAssocRing.toMul.{u3} R (NonAssocRing.toNonUnitalNonAssocRing.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} R (NonAssocRing.toNonUnitalNonAssocRing.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4)))))) (Matrix.one.{u3, u2} n R (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u3} R (CommSemiring.toCommMonoidWithZero.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Semiring.toOne.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) (List.map.{max u2 u3, max u2 u3} (Matrix.TransvectionStruct.{u3, u2} n R) (Matrix.{u2, u2, u3} n n R) (Matrix.TransvectionStruct.toMatrix.{u3, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) L))) (OfNat.ofNat.{max (max u3 u2) u1} (Matrix.{u2, u1, u3} n p R) 0 (Zero.toOfNat0.{max (max u3 u2) u1} (Matrix.{u2, u1, u3} n p R) (Matrix.zero.{u3, u2, u1} n p R (CommMonoidWithZero.toZero.{u3} R (CommSemiring.toCommMonoidWithZero.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))))) (OfNat.ofNat.{max (max u3 u2) u1} (Matrix.{u1, u2, u3} p n R) 0 (Zero.toOfNat0.{max (max u3 u2) u1} (Matrix.{u1, u2, u3} p n R) (Matrix.zero.{u3, u1, u2} p n R (CommMonoidWithZero.toZero.{u3} R (CommSemiring.toCommMonoidWithZero.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))))) N)
Case conversion may be inaccurate. Consider using '#align matrix.transvection_struct.mul_sum_inl_to_matrix_prod Matrix.TransvectionStruct.mul_sumInl_toMatrix_prodₓ'. -/
@[simp]
theorem mul_sumInl_toMatrix_prod [Fintype n] [Fintype p] (M : Matrix n n R)
@@ -475,7 +475,7 @@ theorem toMatrix_reindexEquiv (e : n ≃ p) (t : TransvectionStruct n R) :
lean 3 declaration is
forall {n : Type.{u2}} {p : Type.{u3}} {R : Type.{u1}} [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : DecidableEq.{succ u3} p] [_inst_4 : CommRing.{u1} R] [_inst_5 : Fintype.{u2} n] [_inst_6 : Fintype.{u3} p] (e : Equiv.{succ u2, succ u3} n p) (L : List.{max u2 u1} (Matrix.TransvectionStruct.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4)), Eq.{succ (max u3 u1)} (Matrix.{u3, u3, u1} p p R) (List.prod.{max u3 u1} (Matrix.{u3, u3, u1} p p R) (Matrix.hasMul.{u1, u3} p R _inst_6 (Distrib.toHasMul.{u1} R (Ring.toDistrib.{u1} R (CommRing.toRing.{u1} R _inst_4))) (AddCommGroup.toAddCommMonoid.{u1} R (NonUnitalNonAssocRing.toAddCommGroup.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (Matrix.hasOne.{u1, u3} p R (fun (a : p) (b : p) => _inst_3 a b) (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (AddMonoidWithOne.toOne.{u1} R (AddGroupWithOne.toAddMonoidWithOne.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (Ring.toAddCommGroupWithOne.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (List.map.{max u2 u1, max u3 u1} (Matrix.TransvectionStruct.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) (Matrix.{u3, u3, u1} p p R) (Function.comp.{succ (max u2 u1), max (succ u3) (succ u1), succ (max u3 u1)} (Matrix.TransvectionStruct.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) (Matrix.TransvectionStruct.{u1, u3} p R (fun (a : p) (b : p) => _inst_3 a b) _inst_4) (Matrix.{u3, u3, u1} p p R) (Matrix.TransvectionStruct.toMatrix.{u1, u3} p R (fun (a : p) (b : p) => _inst_3 a b) _inst_4) (Matrix.TransvectionStruct.reindexEquiv.{u1, u2, u3} n p R (fun (a : n) (b : n) => _inst_2 a b) (fun (a : p) (b : p) => _inst_3 a b) _inst_4 e)) L)) (coeFn.{max (succ (max u2 u1)) (succ (max u3 u1)), max (succ (max u2 u1)) (succ (max u3 u1))} (AlgEquiv.{u1, max u2 u1, max u3 u1} R (Matrix.{u2, u2, u1} n n R) (Matrix.{u3, u3, u1} p p R) (CommRing.toCommSemiring.{u1} R _inst_4) (Matrix.semiring.{u1, u2} n R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u1, u3} p R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.algebra.{u1, u2, u1} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u1} R _inst_4) (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4)) (Algebra.id.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4))) (Matrix.algebra.{u1, u3, u1} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u1} R _inst_4) (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4)) (Algebra.id.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4)))) (fun (_x : AlgEquiv.{u1, max u2 u1, max u3 u1} R (Matrix.{u2, u2, u1} n n R) (Matrix.{u3, u3, u1} p p R) (CommRing.toCommSemiring.{u1} R _inst_4) (Matrix.semiring.{u1, u2} n R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u1, u3} p R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.algebra.{u1, u2, u1} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u1} R _inst_4) (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4)) (Algebra.id.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4))) (Matrix.algebra.{u1, u3, u1} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u1} R _inst_4) (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4)) (Algebra.id.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4)))) => (Matrix.{u2, u2, u1} n n R) -> (Matrix.{u3, u3, u1} p p R)) (AlgEquiv.hasCoeToFun.{u1, max u2 u1, max u3 u1} R (Matrix.{u2, u2, u1} n n R) (Matrix.{u3, u3, u1} p p R) (CommRing.toCommSemiring.{u1} R _inst_4) (Matrix.semiring.{u1, u2} n R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u1, u3} p R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.algebra.{u1, u2, u1} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u1} R _inst_4) (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4)) (Algebra.id.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4))) (Matrix.algebra.{u1, u3, u1} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u1} R _inst_4) (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4)) (Algebra.id.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4)))) (Matrix.reindexAlgEquiv.{u2, u3, u1} n p R (CommRing.toCommSemiring.{u1} R _inst_4) _inst_6 _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (fun (a : p) (b : p) => _inst_3 a b) e) (List.prod.{max u2 u1} (Matrix.{u2, u2, u1} n n R) (Matrix.hasMul.{u1, u2} n R _inst_5 (Distrib.toHasMul.{u1} R (Ring.toDistrib.{u1} R (CommRing.toRing.{u1} R _inst_4))) (AddCommGroup.toAddCommMonoid.{u1} R (NonUnitalNonAssocRing.toAddCommGroup.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (Matrix.hasOne.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (AddMonoidWithOne.toOne.{u1} R (AddGroupWithOne.toAddMonoidWithOne.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (Ring.toAddCommGroupWithOne.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (List.map.{max u2 u1, max u2 u1} (Matrix.TransvectionStruct.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) (Matrix.{u2, u2, u1} n n R) (Matrix.TransvectionStruct.toMatrix.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) L)))
but is expected to have type
- forall {n : Type.{u2}} {p : Type.{u1}} {R : Type.{u3}} [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : DecidableEq.{succ u1} p] [_inst_4 : CommRing.{u3} R] [_inst_5 : Fintype.{u2} n] [_inst_6 : Fintype.{u1} p] (e : Equiv.{succ u2, succ u1} n p) (L : List.{max u2 u3} (Matrix.TransvectionStruct.{u3, u2} n R)), Eq.{max (succ u3) (succ u1)} (Matrix.{u1, u1, u3} p p R) (List.prod.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Matrix.instMulMatrix.{u3, u1} p R _inst_6 (NonUnitalNonAssocRing.toMul.{u3} R (NonAssocRing.toNonUnitalNonAssocRing.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} R (NonAssocRing.toNonUnitalNonAssocRing.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4)))))) (Matrix.one.{u3, u1} p R (fun (a : p) (b : p) => _inst_3 a b) (CommMonoidWithZero.toZero.{u3} R (CommSemiring.toCommMonoidWithZero.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (NonAssocRing.toOne.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4)))) (List.map.{max u2 u3, max u1 u3} (Matrix.TransvectionStruct.{u3, u2} n R) (Matrix.{u1, u1, u3} p p R) (Function.comp.{succ (max u2 u3), max (succ u1) (succ u3), succ (max u1 u3)} (Matrix.TransvectionStruct.{u3, u2} n R) (Matrix.TransvectionStruct.{u3, u1} p R) (Matrix.{u1, u1, u3} p p R) (Matrix.TransvectionStruct.toMatrix.{u3, u1} p R (fun (a : p) (b : p) => _inst_3 a b) _inst_4) (Matrix.TransvectionStruct.reindexEquiv.{u3, u2, u1} n p R e)) L)) (FunLike.coe.{max (max (succ u3) (succ u2)) (succ u1), max (succ u3) (succ u2), max (succ u3) (succ u1)} (AlgEquiv.{u3, max u3 u2, max u3 u1} R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) (Matrix.{u2, u2, u3} n n R) (fun (_x : Matrix.{u2, u2, u3} n n R) => (fun (x._@.Mathlib.Algebra.Hom.GroupAction._hyg.2186 : Matrix.{u2, u2, u3} n n R) => Matrix.{u1, u1, u3} p p R) _x) (SMulHomClass.toFunLike.{max (max u3 u2) u1, u3, max u3 u2, max u3 u1} (AlgEquiv.{u3, max u3 u2, max u3 u1} R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (SMulZeroClass.toSMul.{u3, max u3 u2} R (Matrix.{u2, u2, u3} n n R) (AddMonoid.toZero.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (AddCommMonoid.toAddMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b))))))) (DistribSMul.toSMulZeroClass.{u3, max u3 u2} R (Matrix.{u2, u2, u3} n n R) (AddMonoid.toAddZeroClass.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (AddCommMonoid.toAddMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b))))))) (DistribMulAction.toDistribSMul.{u3, max u3 u2} R (Matrix.{u2, u2, u3} n n R) (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) (AddCommMonoid.toAddMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)))))) (Module.toDistribMulAction.{u3, max u3 u2} R (Matrix.{u2, u2, u3} n n R) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b))))) (Algebra.toModule.{u3, max u3 u2} R (Matrix.{u2, u2, u3} n n R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))))))) (SMulZeroClass.toSMul.{u3, max u3 u1} R (Matrix.{u1, u1, u3} p p R) (AddMonoid.toZero.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (AddCommMonoid.toAddMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Semiring.toNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b))))))) (DistribSMul.toSMulZeroClass.{u3, max u3 u1} R (Matrix.{u1, u1, u3} p p R) (AddMonoid.toAddZeroClass.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (AddCommMonoid.toAddMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Semiring.toNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b))))))) (DistribMulAction.toDistribSMul.{u3, max u3 u1} R (Matrix.{u1, u1, u3} p p R) (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) (AddCommMonoid.toAddMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Semiring.toNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)))))) (Module.toDistribMulAction.{u3, max u3 u1} R (Matrix.{u1, u1, u3} p p R) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Semiring.toNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b))))) (Algebra.toModule.{u3, max u3 u1} R (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))))))) (DistribMulActionHomClass.toSMulHomClass.{max (max u3 u2) u1, u3, max u3 u2, max u3 u1} (AlgEquiv.{u3, max u3 u2, max u3 u1} R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) (AddCommMonoid.toAddMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)))))) (AddCommMonoid.toAddMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Semiring.toNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)))))) (Module.toDistribMulAction.{u3, max u3 u2} R (Matrix.{u2, u2, u3} n n R) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b))))) (Algebra.toModule.{u3, max u3 u2} R (Matrix.{u2, u2, u3} n n R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))))) (Module.toDistribMulAction.{u3, max u3 u1} R (Matrix.{u1, u1, u3} p p R) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Semiring.toNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b))))) (Algebra.toModule.{u3, max u3 u1} R (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))))) (NonUnitalAlgHomClass.toDistribMulActionHomClass.{max (max u3 u2) u1, u3, max u3 u2, max u3 u1} (AlgEquiv.{u3, max u3 u2, max u3 u1} R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Semiring.toNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)))) (Module.toDistribMulAction.{u3, max u3 u2} R (Matrix.{u2, u2, u3} n n R) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b))))) (Algebra.toModule.{u3, max u3 u2} R (Matrix.{u2, u2, u3} n n R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))))) (Module.toDistribMulAction.{u3, max u3 u1} R (Matrix.{u1, u1, u3} p p R) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Semiring.toNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b))))) (Algebra.toModule.{u3, max u3 u1} R (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))))) (AlgHom.instNonUnitalAlgHomClassToMonoidToMonoidWithZeroToSemiringToNonUnitalNonAssocSemiringToNonAssocSemiringToNonUnitalNonAssocSemiringToNonAssocSemiringToDistribMulActionToAddCommMonoidToModuleToDistribMulActionToAddCommMonoidToModule.{u3, max u3 u2, max u3 u1, max (max u3 u2) u1} R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (AlgEquiv.{u3, max u3 u2, max u3 u1} R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) (AlgEquivClass.toAlgHomClass.{max (max u3 u2) u1, u3, max u3 u2, max u3 u1} (AlgEquiv.{u3, max u3 u2, max u3 u1} R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (AlgEquiv.instAlgEquivClassAlgEquiv.{u3, max u3 u2, max u3 u1} R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))))))))) (Matrix.reindexAlgEquiv.{u2, u1, u3} n p R (CommRing.toCommSemiring.{u3} R _inst_4) _inst_6 _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (fun (a : p) (b : p) => _inst_3 a b) e) (List.prod.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Matrix.instMulMatrix.{u3, u2} n R _inst_5 (NonUnitalNonAssocRing.toMul.{u3} R (NonAssocRing.toNonUnitalNonAssocRing.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} R (NonAssocRing.toNonUnitalNonAssocRing.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4)))))) (Matrix.one.{u3, u2} n R (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u3} R (CommSemiring.toCommMonoidWithZero.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (NonAssocRing.toOne.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4)))) (List.map.{max u2 u3, max u2 u3} (Matrix.TransvectionStruct.{u3, u2} n R) (Matrix.{u2, u2, u3} n n R) (Matrix.TransvectionStruct.toMatrix.{u3, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) L)))
+ forall {n : Type.{u2}} {p : Type.{u1}} {R : Type.{u3}} [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : DecidableEq.{succ u1} p] [_inst_4 : CommRing.{u3} R] [_inst_5 : Fintype.{u2} n] [_inst_6 : Fintype.{u1} p] (e : Equiv.{succ u2, succ u1} n p) (L : List.{max u2 u3} (Matrix.TransvectionStruct.{u3, u2} n R)), Eq.{max (succ u3) (succ u1)} (Matrix.{u1, u1, u3} p p R) (List.prod.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Matrix.instMulMatrix.{u3, u1} p R _inst_6 (NonUnitalNonAssocRing.toMul.{u3} R (NonAssocRing.toNonUnitalNonAssocRing.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} R (NonAssocRing.toNonUnitalNonAssocRing.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4)))))) (Matrix.one.{u3, u1} p R (fun (a : p) (b : p) => _inst_3 a b) (CommMonoidWithZero.toZero.{u3} R (CommSemiring.toCommMonoidWithZero.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Semiring.toOne.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) (List.map.{max u2 u3, max u1 u3} (Matrix.TransvectionStruct.{u3, u2} n R) (Matrix.{u1, u1, u3} p p R) (Function.comp.{succ (max u2 u3), max (succ u1) (succ u3), succ (max u1 u3)} (Matrix.TransvectionStruct.{u3, u2} n R) (Matrix.TransvectionStruct.{u3, u1} p R) (Matrix.{u1, u1, u3} p p R) (Matrix.TransvectionStruct.toMatrix.{u3, u1} p R (fun (a : p) (b : p) => _inst_3 a b) _inst_4) (Matrix.TransvectionStruct.reindexEquiv.{u3, u2, u1} n p R e)) L)) (FunLike.coe.{max (max (succ u3) (succ u2)) (succ u1), max (succ u3) (succ u2), max (succ u3) (succ u1)} (AlgEquiv.{u3, max u3 u2, max u3 u1} R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) (Matrix.{u2, u2, u3} n n R) (fun (_x : Matrix.{u2, u2, u3} n n R) => (fun (x._@.Mathlib.Algebra.Hom.GroupAction._hyg.2186 : Matrix.{u2, u2, u3} n n R) => Matrix.{u1, u1, u3} p p R) _x) (SMulHomClass.toFunLike.{max (max u3 u2) u1, u3, max u3 u2, max u3 u1} (AlgEquiv.{u3, max u3 u2, max u3 u1} R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (SMulZeroClass.toSMul.{u3, max u3 u2} R (Matrix.{u2, u2, u3} n n R) (AddMonoid.toZero.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (AddCommMonoid.toAddMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b))))))) (DistribSMul.toSMulZeroClass.{u3, max u3 u2} R (Matrix.{u2, u2, u3} n n R) (AddMonoid.toAddZeroClass.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (AddCommMonoid.toAddMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b))))))) (DistribMulAction.toDistribSMul.{u3, max u3 u2} R (Matrix.{u2, u2, u3} n n R) (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) (AddCommMonoid.toAddMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)))))) (Module.toDistribMulAction.{u3, max u3 u2} R (Matrix.{u2, u2, u3} n n R) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b))))) (Algebra.toModule.{u3, max u3 u2} R (Matrix.{u2, u2, u3} n n R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))))))) (SMulZeroClass.toSMul.{u3, max u3 u1} R (Matrix.{u1, u1, u3} p p R) (AddMonoid.toZero.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (AddCommMonoid.toAddMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Semiring.toNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b))))))) (DistribSMul.toSMulZeroClass.{u3, max u3 u1} R (Matrix.{u1, u1, u3} p p R) (AddMonoid.toAddZeroClass.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (AddCommMonoid.toAddMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Semiring.toNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b))))))) (DistribMulAction.toDistribSMul.{u3, max u3 u1} R (Matrix.{u1, u1, u3} p p R) (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) (AddCommMonoid.toAddMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Semiring.toNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)))))) (Module.toDistribMulAction.{u3, max u3 u1} R (Matrix.{u1, u1, u3} p p R) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Semiring.toNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b))))) (Algebra.toModule.{u3, max u3 u1} R (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))))))) (DistribMulActionHomClass.toSMulHomClass.{max (max u3 u2) u1, u3, max u3 u2, max u3 u1} (AlgEquiv.{u3, max u3 u2, max u3 u1} R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) (AddCommMonoid.toAddMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)))))) (AddCommMonoid.toAddMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Semiring.toNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)))))) (Module.toDistribMulAction.{u3, max u3 u2} R (Matrix.{u2, u2, u3} n n R) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b))))) (Algebra.toModule.{u3, max u3 u2} R (Matrix.{u2, u2, u3} n n R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))))) (Module.toDistribMulAction.{u3, max u3 u1} R (Matrix.{u1, u1, u3} p p R) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Semiring.toNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b))))) (Algebra.toModule.{u3, max u3 u1} R (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))))) (NonUnitalAlgHomClass.toDistribMulActionHomClass.{max (max u3 u2) u1, u3, max u3 u2, max u3 u1} (AlgEquiv.{u3, max u3 u2, max u3 u1} R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Semiring.toNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)))) (Module.toDistribMulAction.{u3, max u3 u2} R (Matrix.{u2, u2, u3} n n R) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b))))) (Algebra.toModule.{u3, max u3 u2} R (Matrix.{u2, u2, u3} n n R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))))) (Module.toDistribMulAction.{u3, max u3 u1} R (Matrix.{u1, u1, u3} p p R) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Semiring.toNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b))))) (Algebra.toModule.{u3, max u3 u1} R (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))))) (AlgHom.instNonUnitalAlgHomClassToMonoidToMonoidWithZeroToSemiringToNonUnitalNonAssocSemiringToNonAssocSemiringToNonUnitalNonAssocSemiringToNonAssocSemiringToDistribMulActionToAddCommMonoidToModuleToDistribMulActionToAddCommMonoidToModule.{u3, max u3 u2, max u3 u1, max (max u3 u2) u1} R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (AlgEquiv.{u3, max u3 u2, max u3 u1} R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) (AlgEquivClass.toAlgHomClass.{max (max u3 u2) u1, u3, max u3 u2, max u3 u1} (AlgEquiv.{u3, max u3 u2, max u3 u1} R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (AlgEquiv.instAlgEquivClassAlgEquiv.{u3, max u3 u2, max u3 u1} R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))))))))) (Matrix.reindexAlgEquiv.{u2, u1, u3} n p R (CommRing.toCommSemiring.{u3} R _inst_4) _inst_6 _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (fun (a : p) (b : p) => _inst_3 a b) e) (List.prod.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Matrix.instMulMatrix.{u3, u2} n R _inst_5 (NonUnitalNonAssocRing.toMul.{u3} R (NonAssocRing.toNonUnitalNonAssocRing.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} R (NonAssocRing.toNonUnitalNonAssocRing.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4)))))) (Matrix.one.{u3, u2} n R (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u3} R (CommSemiring.toCommMonoidWithZero.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Semiring.toOne.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) (List.map.{max u2 u3, max u2 u3} (Matrix.TransvectionStruct.{u3, u2} n R) (Matrix.{u2, u2, u3} n n R) (Matrix.TransvectionStruct.toMatrix.{u3, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) L)))
Case conversion may be inaccurate. Consider using '#align matrix.transvection_struct.to_matrix_reindex_equiv_prod Matrix.TransvectionStruct.toMatrix_reindexEquiv_prodₓ'. -/
theorem toMatrix_reindexEquiv_prod (e : n ≃ p) (L : List (TransvectionStruct n R)) :
(L.map (toMatrix ∘ reindexEquiv e)).Prod = reindexAlgEquiv R e (L.map toMatrix).Prod :=
@@ -535,7 +535,7 @@ def listTransvecRow : List (Matrix (Sum (Fin r) Unit) (Sum (Fin r) Unit) 𝕜) :
lean 3 declaration is
forall {𝕜 : Type.{u1}} [_inst_1 : Field.{u1} 𝕜] {r : Nat} (M : Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (i : Sum.{0, 0} (Fin r) Unit) {k : Nat}, (LE.le.{0} Nat Nat.hasLe k r) -> (Eq.{succ u1} 𝕜 (Matrix.mul.{u1, 0, 0, 0} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜 (Sum.fintype.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (Distrib.toHasMul.{u1} 𝕜 (Ring.toDistrib.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) (List.prod.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.hasMul.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (Sum.fintype.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (Distrib.toHasMul.{u1} 𝕜 (Ring.toDistrib.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.hasOne.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.decidableEq.{0, 0} (Fin r) (fun (a : Fin r) (b : Fin r) => Fin.decidableEq r a b) Unit (fun (a : Unit) (b : Unit) => PUnit.decidableEq.{1} a b) a b) (MulZeroClass.toHasZero.{u1} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (AddMonoidWithOne.toOne.{u1} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u1} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u1} 𝕜 (Ring.toAddCommGroupWithOne.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (List.drop.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) k (Matrix.Pivot.listTransvecCol.{u1} 𝕜 _inst_1 r M))) M (Sum.inr.{0, 0} (Fin r) Unit Unit.unit) i) (M (Sum.inr.{0, 0} (Fin r) Unit Unit.unit) i))
but is expected to have type
- forall {𝕜 : Type.{u1}} [_inst_1 : Field.{u1} 𝕜] {r : Nat} (M : Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (i : Sum.{0, 0} (Fin r) Unit) {k : Nat}, (LE.le.{0} Nat instLENat k r) -> (Eq.{succ u1} 𝕜 (Matrix.mul.{u1, 0, 0, 0} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) (List.prod.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.instMulMatrix.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.one.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.instDecidableEqSum.{0, 0} (Fin r) Unit (fun (a : Fin r) (b : Fin r) => instDecidableEqFin r a b) (fun (a : Unit) (b : Unit) => instDecidableEqPUnit.{1} a b) a b) (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))) (NonAssocRing.toOne.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (List.drop.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) k (Matrix.Pivot.listTransvecCol.{u1} 𝕜 _inst_1 r M))) M (Sum.inr.{0, 0} (Fin r) Unit Unit.unit) i) (M (Sum.inr.{0, 0} (Fin r) Unit Unit.unit) i))
+ forall {𝕜 : Type.{u1}} [_inst_1 : Field.{u1} 𝕜] {r : Nat} (M : Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (i : Sum.{0, 0} (Fin r) Unit) {k : Nat}, (LE.le.{0} Nat instLENat k r) -> (Eq.{succ u1} 𝕜 (Matrix.mul.{u1, 0, 0, 0} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) (List.prod.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.instMulMatrix.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.one.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.instDecidableEqSum.{0, 0} (Fin r) Unit (fun (a : Fin r) (b : Fin r) => instDecidableEqFin r a b) (fun (a : Unit) (b : Unit) => instDecidableEqPUnit.{1} a b) a b) (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))) (Semiring.toOne.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1))))) (List.drop.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) k (Matrix.Pivot.listTransvecCol.{u1} 𝕜 _inst_1 r M))) M (Sum.inr.{0, 0} (Fin r) Unit Unit.unit) i) (M (Sum.inr.{0, 0} (Fin r) Unit Unit.unit) i))
Case conversion may be inaccurate. Consider using '#align matrix.pivot.list_transvec_col_mul_last_row_drop Matrix.Pivot.listTransvecCol_mul_last_row_dropₓ'. -/
/-- Multiplying by some of the matrices in `list_transvec_col M` does not change the last row. -/
theorem listTransvecCol_mul_last_row_drop (i : Sum (Fin r) Unit) {k : ℕ} (hk : k ≤ r) :
@@ -555,7 +555,7 @@ theorem listTransvecCol_mul_last_row_drop (i : Sum (Fin r) Unit) {k : ℕ} (hk :
lean 3 declaration is
forall {𝕜 : Type.{u1}} [_inst_1 : Field.{u1} 𝕜] {r : Nat} (M : Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (i : Sum.{0, 0} (Fin r) Unit), Eq.{succ u1} 𝕜 (Matrix.mul.{u1, 0, 0, 0} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜 (Sum.fintype.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (Distrib.toHasMul.{u1} 𝕜 (Ring.toDistrib.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) (List.prod.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.hasMul.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (Sum.fintype.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (Distrib.toHasMul.{u1} 𝕜 (Ring.toDistrib.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.hasOne.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.decidableEq.{0, 0} (Fin r) (fun (a : Fin r) (b : Fin r) => Fin.decidableEq r a b) Unit (fun (a : Unit) (b : Unit) => PUnit.decidableEq.{1} a b) a b) (MulZeroClass.toHasZero.{u1} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (AddMonoidWithOne.toOne.{u1} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u1} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u1} 𝕜 (Ring.toAddCommGroupWithOne.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.Pivot.listTransvecCol.{u1} 𝕜 _inst_1 r M)) M (Sum.inr.{0, 0} (Fin r) Unit Unit.unit) i) (M (Sum.inr.{0, 0} (Fin r) Unit Unit.unit) i)
but is expected to have type
- forall {𝕜 : Type.{u1}} [_inst_1 : Field.{u1} 𝕜] {r : Nat} (M : Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (i : Sum.{0, 0} (Fin r) Unit), Eq.{succ u1} 𝕜 (Matrix.mul.{u1, 0, 0, 0} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) (List.prod.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.instMulMatrix.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.one.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.instDecidableEqSum.{0, 0} (Fin r) Unit (fun (a : Fin r) (b : Fin r) => instDecidableEqFin r a b) (fun (a : Unit) (b : Unit) => instDecidableEqPUnit.{1} a b) a b) (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))) (NonAssocRing.toOne.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (Matrix.Pivot.listTransvecCol.{u1} 𝕜 _inst_1 r M)) M (Sum.inr.{0, 0} (Fin r) Unit Unit.unit) i) (M (Sum.inr.{0, 0} (Fin r) Unit Unit.unit) i)
+ forall {𝕜 : Type.{u1}} [_inst_1 : Field.{u1} 𝕜] {r : Nat} (M : Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (i : Sum.{0, 0} (Fin r) Unit), Eq.{succ u1} 𝕜 (Matrix.mul.{u1, 0, 0, 0} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) (List.prod.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.instMulMatrix.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.one.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.instDecidableEqSum.{0, 0} (Fin r) Unit (fun (a : Fin r) (b : Fin r) => instDecidableEqFin r a b) (fun (a : Unit) (b : Unit) => instDecidableEqPUnit.{1} a b) a b) (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))) (Semiring.toOne.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1))))) (Matrix.Pivot.listTransvecCol.{u1} 𝕜 _inst_1 r M)) M (Sum.inr.{0, 0} (Fin r) Unit Unit.unit) i) (M (Sum.inr.{0, 0} (Fin r) Unit Unit.unit) i)
Case conversion may be inaccurate. Consider using '#align matrix.pivot.list_transvec_col_mul_last_row Matrix.Pivot.listTransvecCol_mul_last_rowₓ'. -/
/-- Multiplying by all the matrices in `list_transvec_col M` does not change the last row. -/
theorem listTransvecCol_mul_last_row (i : Sum (Fin r) Unit) :
@@ -567,7 +567,7 @@ theorem listTransvecCol_mul_last_row (i : Sum (Fin r) Unit) :
lean 3 declaration is
forall {𝕜 : Type.{u1}} [_inst_1 : Field.{u1} 𝕜] {r : Nat} (M : Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜), (Ne.{succ u1} 𝕜 (M (Sum.inr.{0, 0} (Fin r) Unit Unit.unit) (Sum.inr.{0, 0} (Fin r) Unit Unit.unit)) (OfNat.ofNat.{u1} 𝕜 0 (OfNat.mk.{u1} 𝕜 0 (Zero.zero.{u1} 𝕜 (MulZeroClass.toHasZero.{u1} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))))))) -> (forall (i : Fin r), Eq.{succ u1} 𝕜 (Matrix.mul.{u1, 0, 0, 0} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜 (Sum.fintype.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (Distrib.toHasMul.{u1} 𝕜 (Ring.toDistrib.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) (List.prod.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.hasMul.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (Sum.fintype.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (Distrib.toHasMul.{u1} 𝕜 (Ring.toDistrib.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.hasOne.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.decidableEq.{0, 0} (Fin r) (fun (a : Fin r) (b : Fin r) => Fin.decidableEq r a b) Unit (fun (a : Unit) (b : Unit) => PUnit.decidableEq.{1} a b) a b) (MulZeroClass.toHasZero.{u1} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (AddMonoidWithOne.toOne.{u1} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u1} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u1} 𝕜 (Ring.toAddCommGroupWithOne.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.Pivot.listTransvecCol.{u1} 𝕜 _inst_1 r M)) M (Sum.inl.{0, 0} (Fin r) Unit i) (Sum.inr.{0, 0} (Fin r) Unit Unit.unit)) (OfNat.ofNat.{u1} 𝕜 0 (OfNat.mk.{u1} 𝕜 0 (Zero.zero.{u1} 𝕜 (MulZeroClass.toHasZero.{u1} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))))))))
but is expected to have type
- forall {𝕜 : Type.{u1}} [_inst_1 : Field.{u1} 𝕜] {r : Nat} (M : Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜), (Ne.{succ u1} 𝕜 (M (Sum.inr.{0, 0} (Fin r) Unit Unit.unit) (Sum.inr.{0, 0} (Fin r) Unit Unit.unit)) (OfNat.ofNat.{u1} 𝕜 0 (Zero.toOfNat0.{u1} 𝕜 (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1))))))) -> (forall (i : Fin r), Eq.{succ u1} 𝕜 (Matrix.mul.{u1, 0, 0, 0} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) (List.prod.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.instMulMatrix.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.one.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.instDecidableEqSum.{0, 0} (Fin r) Unit (fun (a : Fin r) (b : Fin r) => instDecidableEqFin r a b) (fun (a : Unit) (b : Unit) => instDecidableEqPUnit.{1} a b) a b) (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))) (NonAssocRing.toOne.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (Matrix.Pivot.listTransvecCol.{u1} 𝕜 _inst_1 r M)) M (Sum.inl.{0, 0} (Fin r) Unit i) (Sum.inr.{0, 0} (Fin r) Unit Unit.unit)) (OfNat.ofNat.{u1} 𝕜 0 (Zero.toOfNat0.{u1} 𝕜 (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))))))
+ forall {𝕜 : Type.{u1}} [_inst_1 : Field.{u1} 𝕜] {r : Nat} (M : Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜), (Ne.{succ u1} 𝕜 (M (Sum.inr.{0, 0} (Fin r) Unit Unit.unit) (Sum.inr.{0, 0} (Fin r) Unit Unit.unit)) (OfNat.ofNat.{u1} 𝕜 0 (Zero.toOfNat0.{u1} 𝕜 (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1))))))) -> (forall (i : Fin r), Eq.{succ u1} 𝕜 (Matrix.mul.{u1, 0, 0, 0} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) (List.prod.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.instMulMatrix.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.one.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.instDecidableEqSum.{0, 0} (Fin r) Unit (fun (a : Fin r) (b : Fin r) => instDecidableEqFin r a b) (fun (a : Unit) (b : Unit) => instDecidableEqPUnit.{1} a b) a b) (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))) (Semiring.toOne.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1))))) (Matrix.Pivot.listTransvecCol.{u1} 𝕜 _inst_1 r M)) M (Sum.inl.{0, 0} (Fin r) Unit i) (Sum.inr.{0, 0} (Fin r) Unit Unit.unit)) (OfNat.ofNat.{u1} 𝕜 0 (Zero.toOfNat0.{u1} 𝕜 (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))))))
Case conversion may be inaccurate. Consider using '#align matrix.pivot.list_transvec_col_mul_last_col Matrix.Pivot.listTransvecCol_mul_last_colₓ'. -/
/-- Multiplying by all the matrices in `list_transvec_col M` kills all the coefficients in the
last column but the last one. -/
@@ -619,7 +619,7 @@ theorem listTransvecCol_mul_last_col (hM : M (inr unit) (inr unit) ≠ 0) (i : F
lean 3 declaration is
forall {𝕜 : Type.{u1}} [_inst_1 : Field.{u1} 𝕜] {r : Nat} (M : Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (i : Sum.{0, 0} (Fin r) Unit) {k : Nat}, (LE.le.{0} Nat Nat.hasLe k r) -> (Eq.{succ u1} 𝕜 (Matrix.mul.{u1, 0, 0, 0} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜 (Sum.fintype.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (Distrib.toHasMul.{u1} 𝕜 (Ring.toDistrib.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) M (List.prod.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.hasMul.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (Sum.fintype.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (Distrib.toHasMul.{u1} 𝕜 (Ring.toDistrib.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.hasOne.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.decidableEq.{0, 0} (Fin r) (fun (a : Fin r) (b : Fin r) => Fin.decidableEq r a b) Unit (fun (a : Unit) (b : Unit) => PUnit.decidableEq.{1} a b) a b) (MulZeroClass.toHasZero.{u1} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (AddMonoidWithOne.toOne.{u1} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u1} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u1} 𝕜 (Ring.toAddCommGroupWithOne.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (List.take.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) k (Matrix.Pivot.listTransvecRow.{u1} 𝕜 _inst_1 r M))) i (Sum.inr.{0, 0} (Fin r) Unit Unit.unit)) (M i (Sum.inr.{0, 0} (Fin r) Unit Unit.unit)))
but is expected to have type
- forall {𝕜 : Type.{u1}} [_inst_1 : Field.{u1} 𝕜] {r : Nat} (M : Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (i : Sum.{0, 0} (Fin r) Unit) {k : Nat}, (LE.le.{0} Nat instLENat k r) -> (Eq.{succ u1} 𝕜 (Matrix.mul.{u1, 0, 0, 0} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) M (List.prod.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.instMulMatrix.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.one.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.instDecidableEqSum.{0, 0} (Fin r) Unit (fun (a : Fin r) (b : Fin r) => instDecidableEqFin r a b) (fun (a : Unit) (b : Unit) => instDecidableEqPUnit.{1} a b) a b) (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))) (NonAssocRing.toOne.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (List.take.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) k (Matrix.Pivot.listTransvecRow.{u1} 𝕜 _inst_1 r M))) i (Sum.inr.{0, 0} (Fin r) Unit Unit.unit)) (M i (Sum.inr.{0, 0} (Fin r) Unit Unit.unit)))
+ forall {𝕜 : Type.{u1}} [_inst_1 : Field.{u1} 𝕜] {r : Nat} (M : Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (i : Sum.{0, 0} (Fin r) Unit) {k : Nat}, (LE.le.{0} Nat instLENat k r) -> (Eq.{succ u1} 𝕜 (Matrix.mul.{u1, 0, 0, 0} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) M (List.prod.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.instMulMatrix.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.one.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.instDecidableEqSum.{0, 0} (Fin r) Unit (fun (a : Fin r) (b : Fin r) => instDecidableEqFin r a b) (fun (a : Unit) (b : Unit) => instDecidableEqPUnit.{1} a b) a b) (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))) (Semiring.toOne.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1))))) (List.take.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) k (Matrix.Pivot.listTransvecRow.{u1} 𝕜 _inst_1 r M))) i (Sum.inr.{0, 0} (Fin r) Unit Unit.unit)) (M i (Sum.inr.{0, 0} (Fin r) Unit Unit.unit)))
Case conversion may be inaccurate. Consider using '#align matrix.pivot.mul_list_transvec_row_last_col_take Matrix.Pivot.mul_listTransvecRow_last_col_takeₓ'. -/
/-- Multiplying by some of the matrices in `list_transvec_row M` does not change the last column. -/
theorem mul_listTransvecRow_last_col_take (i : Sum (Fin r) Unit) {k : ℕ} (hk : k ≤ r) :
@@ -646,7 +646,7 @@ theorem mul_listTransvecRow_last_col_take (i : Sum (Fin r) Unit) {k : ℕ} (hk :
lean 3 declaration is
forall {𝕜 : Type.{u1}} [_inst_1 : Field.{u1} 𝕜] {r : Nat} (M : Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (i : Sum.{0, 0} (Fin r) Unit), Eq.{succ u1} 𝕜 (Matrix.mul.{u1, 0, 0, 0} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜 (Sum.fintype.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (Distrib.toHasMul.{u1} 𝕜 (Ring.toDistrib.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) M (List.prod.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.hasMul.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (Sum.fintype.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (Distrib.toHasMul.{u1} 𝕜 (Ring.toDistrib.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.hasOne.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.decidableEq.{0, 0} (Fin r) (fun (a : Fin r) (b : Fin r) => Fin.decidableEq r a b) Unit (fun (a : Unit) (b : Unit) => PUnit.decidableEq.{1} a b) a b) (MulZeroClass.toHasZero.{u1} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (AddMonoidWithOne.toOne.{u1} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u1} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u1} 𝕜 (Ring.toAddCommGroupWithOne.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.Pivot.listTransvecRow.{u1} 𝕜 _inst_1 r M)) i (Sum.inr.{0, 0} (Fin r) Unit Unit.unit)) (M i (Sum.inr.{0, 0} (Fin r) Unit Unit.unit))
but is expected to have type
- forall {𝕜 : Type.{u1}} [_inst_1 : Field.{u1} 𝕜] {r : Nat} (M : Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (i : Sum.{0, 0} (Fin r) Unit), Eq.{succ u1} 𝕜 (Matrix.mul.{u1, 0, 0, 0} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) M (List.prod.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.instMulMatrix.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.one.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.instDecidableEqSum.{0, 0} (Fin r) Unit (fun (a : Fin r) (b : Fin r) => instDecidableEqFin r a b) (fun (a : Unit) (b : Unit) => instDecidableEqPUnit.{1} a b) a b) (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))) (NonAssocRing.toOne.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (Matrix.Pivot.listTransvecRow.{u1} 𝕜 _inst_1 r M)) i (Sum.inr.{0, 0} (Fin r) Unit Unit.unit)) (M i (Sum.inr.{0, 0} (Fin r) Unit Unit.unit))
+ forall {𝕜 : Type.{u1}} [_inst_1 : Field.{u1} 𝕜] {r : Nat} (M : Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (i : Sum.{0, 0} (Fin r) Unit), Eq.{succ u1} 𝕜 (Matrix.mul.{u1, 0, 0, 0} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) M (List.prod.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.instMulMatrix.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.one.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.instDecidableEqSum.{0, 0} (Fin r) Unit (fun (a : Fin r) (b : Fin r) => instDecidableEqFin r a b) (fun (a : Unit) (b : Unit) => instDecidableEqPUnit.{1} a b) a b) (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))) (Semiring.toOne.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1))))) (Matrix.Pivot.listTransvecRow.{u1} 𝕜 _inst_1 r M)) i (Sum.inr.{0, 0} (Fin r) Unit Unit.unit)) (M i (Sum.inr.{0, 0} (Fin r) Unit Unit.unit))
Case conversion may be inaccurate. Consider using '#align matrix.pivot.mul_list_transvec_row_last_col Matrix.Pivot.mul_listTransvecRow_last_colₓ'. -/
/-- Multiplying by all the matrices in `list_transvec_row M` does not change the last column. -/
theorem mul_listTransvecRow_last_col (i : Sum (Fin r) Unit) :
@@ -661,7 +661,7 @@ theorem mul_listTransvecRow_last_col (i : Sum (Fin r) Unit) :
lean 3 declaration is
forall {𝕜 : Type.{u1}} [_inst_1 : Field.{u1} 𝕜] {r : Nat} (M : Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜), (Ne.{succ u1} 𝕜 (M (Sum.inr.{0, 0} (Fin r) Unit Unit.unit) (Sum.inr.{0, 0} (Fin r) Unit Unit.unit)) (OfNat.ofNat.{u1} 𝕜 0 (OfNat.mk.{u1} 𝕜 0 (Zero.zero.{u1} 𝕜 (MulZeroClass.toHasZero.{u1} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))))))) -> (forall (i : Fin r), Eq.{succ u1} 𝕜 (Matrix.mul.{u1, 0, 0, 0} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜 (Sum.fintype.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (Distrib.toHasMul.{u1} 𝕜 (Ring.toDistrib.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) M (List.prod.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.hasMul.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (Sum.fintype.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (Distrib.toHasMul.{u1} 𝕜 (Ring.toDistrib.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.hasOne.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.decidableEq.{0, 0} (Fin r) (fun (a : Fin r) (b : Fin r) => Fin.decidableEq r a b) Unit (fun (a : Unit) (b : Unit) => PUnit.decidableEq.{1} a b) a b) (MulZeroClass.toHasZero.{u1} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (AddMonoidWithOne.toOne.{u1} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u1} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u1} 𝕜 (Ring.toAddCommGroupWithOne.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.Pivot.listTransvecRow.{u1} 𝕜 _inst_1 r M)) (Sum.inr.{0, 0} (Fin r) Unit Unit.unit) (Sum.inl.{0, 0} (Fin r) Unit i)) (OfNat.ofNat.{u1} 𝕜 0 (OfNat.mk.{u1} 𝕜 0 (Zero.zero.{u1} 𝕜 (MulZeroClass.toHasZero.{u1} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))))))))
but is expected to have type
- forall {𝕜 : Type.{u1}} [_inst_1 : Field.{u1} 𝕜] {r : Nat} (M : Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜), (Ne.{succ u1} 𝕜 (M (Sum.inr.{0, 0} (Fin r) Unit Unit.unit) (Sum.inr.{0, 0} (Fin r) Unit Unit.unit)) (OfNat.ofNat.{u1} 𝕜 0 (Zero.toOfNat0.{u1} 𝕜 (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1))))))) -> (forall (i : Fin r), Eq.{succ u1} 𝕜 (Matrix.mul.{u1, 0, 0, 0} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) M (List.prod.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.instMulMatrix.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.one.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.instDecidableEqSum.{0, 0} (Fin r) Unit (fun (a : Fin r) (b : Fin r) => instDecidableEqFin r a b) (fun (a : Unit) (b : Unit) => instDecidableEqPUnit.{1} a b) a b) (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))) (NonAssocRing.toOne.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (Matrix.Pivot.listTransvecRow.{u1} 𝕜 _inst_1 r M)) (Sum.inr.{0, 0} (Fin r) Unit Unit.unit) (Sum.inl.{0, 0} (Fin r) Unit i)) (OfNat.ofNat.{u1} 𝕜 0 (Zero.toOfNat0.{u1} 𝕜 (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))))))
+ forall {𝕜 : Type.{u1}} [_inst_1 : Field.{u1} 𝕜] {r : Nat} (M : Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜), (Ne.{succ u1} 𝕜 (M (Sum.inr.{0, 0} (Fin r) Unit Unit.unit) (Sum.inr.{0, 0} (Fin r) Unit Unit.unit)) (OfNat.ofNat.{u1} 𝕜 0 (Zero.toOfNat0.{u1} 𝕜 (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1))))))) -> (forall (i : Fin r), Eq.{succ u1} 𝕜 (Matrix.mul.{u1, 0, 0, 0} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) M (List.prod.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.instMulMatrix.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.one.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.instDecidableEqSum.{0, 0} (Fin r) Unit (fun (a : Fin r) (b : Fin r) => instDecidableEqFin r a b) (fun (a : Unit) (b : Unit) => instDecidableEqPUnit.{1} a b) a b) (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))) (Semiring.toOne.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1))))) (Matrix.Pivot.listTransvecRow.{u1} 𝕜 _inst_1 r M)) (Sum.inr.{0, 0} (Fin r) Unit Unit.unit) (Sum.inl.{0, 0} (Fin r) Unit i)) (OfNat.ofNat.{u1} 𝕜 0 (Zero.toOfNat0.{u1} 𝕜 (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))))))
Case conversion may be inaccurate. Consider using '#align matrix.pivot.mul_list_transvec_row_last_row Matrix.Pivot.mul_listTransvecRow_last_rowₓ'. -/
/-- Multiplying by all the matrices in `list_transvec_row M` kills all the coefficients in the
last row but the last one. -/
@@ -716,7 +716,7 @@ theorem mul_listTransvecRow_last_row (hM : M (inr unit) (inr unit) ≠ 0) (i : F
lean 3 declaration is
forall {𝕜 : Type.{u1}} [_inst_1 : Field.{u1} 𝕜] {r : Nat} (M : Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜), (Ne.{succ u1} 𝕜 (M (Sum.inr.{0, 0} (Fin r) Unit Unit.unit) (Sum.inr.{0, 0} (Fin r) Unit Unit.unit)) (OfNat.ofNat.{u1} 𝕜 0 (OfNat.mk.{u1} 𝕜 0 (Zero.zero.{u1} 𝕜 (MulZeroClass.toHasZero.{u1} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))))))) -> (forall (i : Fin r), Eq.{succ u1} 𝕜 (Matrix.mul.{u1, 0, 0, 0} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜 (Sum.fintype.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (Distrib.toHasMul.{u1} 𝕜 (Ring.toDistrib.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) (Matrix.mul.{u1, 0, 0, 0} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜 (Sum.fintype.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (Distrib.toHasMul.{u1} 𝕜 (Ring.toDistrib.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) (List.prod.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.hasMul.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (Sum.fintype.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (Distrib.toHasMul.{u1} 𝕜 (Ring.toDistrib.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.hasOne.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.decidableEq.{0, 0} (Fin r) (fun (a : Fin r) (b : Fin r) => Fin.decidableEq r a b) Unit (fun (a : Unit) (b : Unit) => PUnit.decidableEq.{1} a b) a b) (MulZeroClass.toHasZero.{u1} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (AddMonoidWithOne.toOne.{u1} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u1} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u1} 𝕜 (Ring.toAddCommGroupWithOne.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.Pivot.listTransvecCol.{u1} 𝕜 _inst_1 r M)) M) (List.prod.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.hasMul.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (Sum.fintype.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (Distrib.toHasMul.{u1} 𝕜 (Ring.toDistrib.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.hasOne.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.decidableEq.{0, 0} (Fin r) (fun (a : Fin r) (b : Fin r) => Fin.decidableEq r a b) Unit (fun (a : Unit) (b : Unit) => PUnit.decidableEq.{1} a b) a b) (MulZeroClass.toHasZero.{u1} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (AddMonoidWithOne.toOne.{u1} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u1} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u1} 𝕜 (Ring.toAddCommGroupWithOne.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.Pivot.listTransvecRow.{u1} 𝕜 _inst_1 r M)) (Sum.inr.{0, 0} (Fin r) Unit Unit.unit) (Sum.inl.{0, 0} (Fin r) Unit i)) (OfNat.ofNat.{u1} 𝕜 0 (OfNat.mk.{u1} 𝕜 0 (Zero.zero.{u1} 𝕜 (MulZeroClass.toHasZero.{u1} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))))))))
but is expected to have type
- forall {𝕜 : Type.{u1}} [_inst_1 : Field.{u1} 𝕜] {r : Nat} (M : Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜), (Ne.{succ u1} 𝕜 (M (Sum.inr.{0, 0} (Fin r) Unit Unit.unit) (Sum.inr.{0, 0} (Fin r) Unit Unit.unit)) (OfNat.ofNat.{u1} 𝕜 0 (Zero.toOfNat0.{u1} 𝕜 (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1))))))) -> (forall (i : Fin r), Eq.{succ u1} 𝕜 (Matrix.mul.{u1, 0, 0, 0} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) (Matrix.mul.{u1, 0, 0, 0} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) (List.prod.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.instMulMatrix.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.one.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.instDecidableEqSum.{0, 0} (Fin r) Unit (fun (a : Fin r) (b : Fin r) => instDecidableEqFin r a b) (fun (a : Unit) (b : Unit) => instDecidableEqPUnit.{1} a b) a b) (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))) (NonAssocRing.toOne.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (Matrix.Pivot.listTransvecCol.{u1} 𝕜 _inst_1 r M)) M) (List.prod.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.instMulMatrix.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.one.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.instDecidableEqSum.{0, 0} (Fin r) Unit (fun (a : Fin r) (b : Fin r) => instDecidableEqFin r a b) (fun (a : Unit) (b : Unit) => instDecidableEqPUnit.{1} a b) a b) (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))) (NonAssocRing.toOne.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (Matrix.Pivot.listTransvecRow.{u1} 𝕜 _inst_1 r M)) (Sum.inr.{0, 0} (Fin r) Unit Unit.unit) (Sum.inl.{0, 0} (Fin r) Unit i)) (OfNat.ofNat.{u1} 𝕜 0 (Zero.toOfNat0.{u1} 𝕜 (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))))))
+ forall {𝕜 : Type.{u1}} [_inst_1 : Field.{u1} 𝕜] {r : Nat} (M : Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜), (Ne.{succ u1} 𝕜 (M (Sum.inr.{0, 0} (Fin r) Unit Unit.unit) (Sum.inr.{0, 0} (Fin r) Unit Unit.unit)) (OfNat.ofNat.{u1} 𝕜 0 (Zero.toOfNat0.{u1} 𝕜 (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1))))))) -> (forall (i : Fin r), Eq.{succ u1} 𝕜 (Matrix.mul.{u1, 0, 0, 0} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) (Matrix.mul.{u1, 0, 0, 0} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) (List.prod.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.instMulMatrix.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.one.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.instDecidableEqSum.{0, 0} (Fin r) Unit (fun (a : Fin r) (b : Fin r) => instDecidableEqFin r a b) (fun (a : Unit) (b : Unit) => instDecidableEqPUnit.{1} a b) a b) (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))) (Semiring.toOne.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1))))) (Matrix.Pivot.listTransvecCol.{u1} 𝕜 _inst_1 r M)) M) (List.prod.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.instMulMatrix.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.one.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.instDecidableEqSum.{0, 0} (Fin r) Unit (fun (a : Fin r) (b : Fin r) => instDecidableEqFin r a b) (fun (a : Unit) (b : Unit) => instDecidableEqPUnit.{1} a b) a b) (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))) (Semiring.toOne.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1))))) (Matrix.Pivot.listTransvecRow.{u1} 𝕜 _inst_1 r M)) (Sum.inr.{0, 0} (Fin r) Unit Unit.unit) (Sum.inl.{0, 0} (Fin r) Unit i)) (OfNat.ofNat.{u1} 𝕜 0 (Zero.toOfNat0.{u1} 𝕜 (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))))))
Case conversion may be inaccurate. Consider using '#align matrix.pivot.list_transvec_col_mul_mul_list_transvec_row_last_col Matrix.Pivot.listTransvecCol_mul_mul_listTransvecRow_last_colₓ'. -/
/-- Multiplying by all the matrices either in `list_transvec_col M` and `list_transvec_row M` kills
all the coefficients in the last row but the last one. -/
@@ -735,7 +735,7 @@ theorem listTransvecCol_mul_mul_listTransvecRow_last_col (hM : M (inr unit) (inr
lean 3 declaration is
forall {𝕜 : Type.{u1}} [_inst_1 : Field.{u1} 𝕜] {r : Nat} (M : Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜), (Ne.{succ u1} 𝕜 (M (Sum.inr.{0, 0} (Fin r) Unit Unit.unit) (Sum.inr.{0, 0} (Fin r) Unit Unit.unit)) (OfNat.ofNat.{u1} 𝕜 0 (OfNat.mk.{u1} 𝕜 0 (Zero.zero.{u1} 𝕜 (MulZeroClass.toHasZero.{u1} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))))))) -> (forall (i : Fin r), Eq.{succ u1} 𝕜 (Matrix.mul.{u1, 0, 0, 0} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜 (Sum.fintype.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (Distrib.toHasMul.{u1} 𝕜 (Ring.toDistrib.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) (Matrix.mul.{u1, 0, 0, 0} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜 (Sum.fintype.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (Distrib.toHasMul.{u1} 𝕜 (Ring.toDistrib.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) (List.prod.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.hasMul.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (Sum.fintype.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (Distrib.toHasMul.{u1} 𝕜 (Ring.toDistrib.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.hasOne.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.decidableEq.{0, 0} (Fin r) (fun (a : Fin r) (b : Fin r) => Fin.decidableEq r a b) Unit (fun (a : Unit) (b : Unit) => PUnit.decidableEq.{1} a b) a b) (MulZeroClass.toHasZero.{u1} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (AddMonoidWithOne.toOne.{u1} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u1} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u1} 𝕜 (Ring.toAddCommGroupWithOne.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.Pivot.listTransvecCol.{u1} 𝕜 _inst_1 r M)) M) (List.prod.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.hasMul.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (Sum.fintype.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (Distrib.toHasMul.{u1} 𝕜 (Ring.toDistrib.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.hasOne.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.decidableEq.{0, 0} (Fin r) (fun (a : Fin r) (b : Fin r) => Fin.decidableEq r a b) Unit (fun (a : Unit) (b : Unit) => PUnit.decidableEq.{1} a b) a b) (MulZeroClass.toHasZero.{u1} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (AddMonoidWithOne.toOne.{u1} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u1} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u1} 𝕜 (Ring.toAddCommGroupWithOne.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.Pivot.listTransvecRow.{u1} 𝕜 _inst_1 r M)) (Sum.inl.{0, 0} (Fin r) Unit i) (Sum.inr.{0, 0} (Fin r) Unit Unit.unit)) (OfNat.ofNat.{u1} 𝕜 0 (OfNat.mk.{u1} 𝕜 0 (Zero.zero.{u1} 𝕜 (MulZeroClass.toHasZero.{u1} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))))))))
but is expected to have type
- forall {𝕜 : Type.{u1}} [_inst_1 : Field.{u1} 𝕜] {r : Nat} (M : Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜), (Ne.{succ u1} 𝕜 (M (Sum.inr.{0, 0} (Fin r) Unit Unit.unit) (Sum.inr.{0, 0} (Fin r) Unit Unit.unit)) (OfNat.ofNat.{u1} 𝕜 0 (Zero.toOfNat0.{u1} 𝕜 (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1))))))) -> (forall (i : Fin r), Eq.{succ u1} 𝕜 (Matrix.mul.{u1, 0, 0, 0} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) (Matrix.mul.{u1, 0, 0, 0} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) (List.prod.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.instMulMatrix.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.one.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.instDecidableEqSum.{0, 0} (Fin r) Unit (fun (a : Fin r) (b : Fin r) => instDecidableEqFin r a b) (fun (a : Unit) (b : Unit) => instDecidableEqPUnit.{1} a b) a b) (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))) (NonAssocRing.toOne.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (Matrix.Pivot.listTransvecCol.{u1} 𝕜 _inst_1 r M)) M) (List.prod.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.instMulMatrix.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.one.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.instDecidableEqSum.{0, 0} (Fin r) Unit (fun (a : Fin r) (b : Fin r) => instDecidableEqFin r a b) (fun (a : Unit) (b : Unit) => instDecidableEqPUnit.{1} a b) a b) (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))) (NonAssocRing.toOne.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (Matrix.Pivot.listTransvecRow.{u1} 𝕜 _inst_1 r M)) (Sum.inl.{0, 0} (Fin r) Unit i) (Sum.inr.{0, 0} (Fin r) Unit Unit.unit)) (OfNat.ofNat.{u1} 𝕜 0 (Zero.toOfNat0.{u1} 𝕜 (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))))))
+ forall {𝕜 : Type.{u1}} [_inst_1 : Field.{u1} 𝕜] {r : Nat} (M : Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜), (Ne.{succ u1} 𝕜 (M (Sum.inr.{0, 0} (Fin r) Unit Unit.unit) (Sum.inr.{0, 0} (Fin r) Unit Unit.unit)) (OfNat.ofNat.{u1} 𝕜 0 (Zero.toOfNat0.{u1} 𝕜 (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1))))))) -> (forall (i : Fin r), Eq.{succ u1} 𝕜 (Matrix.mul.{u1, 0, 0, 0} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) (Matrix.mul.{u1, 0, 0, 0} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) (List.prod.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.instMulMatrix.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.one.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.instDecidableEqSum.{0, 0} (Fin r) Unit (fun (a : Fin r) (b : Fin r) => instDecidableEqFin r a b) (fun (a : Unit) (b : Unit) => instDecidableEqPUnit.{1} a b) a b) (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))) (Semiring.toOne.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1))))) (Matrix.Pivot.listTransvecCol.{u1} 𝕜 _inst_1 r M)) M) (List.prod.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.instMulMatrix.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.one.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.instDecidableEqSum.{0, 0} (Fin r) Unit (fun (a : Fin r) (b : Fin r) => instDecidableEqFin r a b) (fun (a : Unit) (b : Unit) => instDecidableEqPUnit.{1} a b) a b) (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))) (Semiring.toOne.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1))))) (Matrix.Pivot.listTransvecRow.{u1} 𝕜 _inst_1 r M)) (Sum.inl.{0, 0} (Fin r) Unit i) (Sum.inr.{0, 0} (Fin r) Unit Unit.unit)) (OfNat.ofNat.{u1} 𝕜 0 (Zero.toOfNat0.{u1} 𝕜 (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))))))
Case conversion may be inaccurate. Consider using '#align matrix.pivot.list_transvec_col_mul_mul_list_transvec_row_last_row Matrix.Pivot.listTransvecCol_mul_mul_listTransvecRow_last_rowₓ'. -/
/-- Multiplying by all the matrices either in `list_transvec_col M` and `list_transvec_row M` kills
all the coefficients in the last column but the last one. -/
@@ -754,7 +754,7 @@ theorem listTransvecCol_mul_mul_listTransvecRow_last_row (hM : M (inr unit) (inr
lean 3 declaration is
forall {𝕜 : Type.{u1}} [_inst_1 : Field.{u1} 𝕜] {r : Nat} (M : Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜), (Ne.{succ u1} 𝕜 (M (Sum.inr.{0, 0} (Fin r) Unit Unit.unit) (Sum.inr.{0, 0} (Fin r) Unit Unit.unit)) (OfNat.ofNat.{u1} 𝕜 0 (OfNat.mk.{u1} 𝕜 0 (Zero.zero.{u1} 𝕜 (MulZeroClass.toHasZero.{u1} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))))))) -> (Matrix.IsTwoBlockDiagonal.{0, 0, 0, 0, u1} (Fin r) Unit (Fin r) Unit 𝕜 (MulZeroClass.toHasZero.{u1} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.mul.{u1, 0, 0, 0} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜 (Sum.fintype.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (Distrib.toHasMul.{u1} 𝕜 (Ring.toDistrib.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) (Matrix.mul.{u1, 0, 0, 0} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜 (Sum.fintype.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (Distrib.toHasMul.{u1} 𝕜 (Ring.toDistrib.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) (List.prod.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.hasMul.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (Sum.fintype.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (Distrib.toHasMul.{u1} 𝕜 (Ring.toDistrib.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.hasOne.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.decidableEq.{0, 0} (Fin r) (fun (a : Fin r) (b : Fin r) => Fin.decidableEq r a b) Unit (fun (a : Unit) (b : Unit) => PUnit.decidableEq.{1} a b) a b) (MulZeroClass.toHasZero.{u1} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (AddMonoidWithOne.toOne.{u1} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u1} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u1} 𝕜 (Ring.toAddCommGroupWithOne.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.Pivot.listTransvecCol.{u1} 𝕜 _inst_1 r M)) M) (List.prod.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.hasMul.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (Sum.fintype.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (Distrib.toHasMul.{u1} 𝕜 (Ring.toDistrib.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.hasOne.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.decidableEq.{0, 0} (Fin r) (fun (a : Fin r) (b : Fin r) => Fin.decidableEq r a b) Unit (fun (a : Unit) (b : Unit) => PUnit.decidableEq.{1} a b) a b) (MulZeroClass.toHasZero.{u1} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (AddMonoidWithOne.toOne.{u1} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u1} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u1} 𝕜 (Ring.toAddCommGroupWithOne.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.Pivot.listTransvecRow.{u1} 𝕜 _inst_1 r M))))
but is expected to have type
- forall {𝕜 : Type.{u1}} [_inst_1 : Field.{u1} 𝕜] {r : Nat} (M : Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜), (Ne.{succ u1} 𝕜 (M (Sum.inr.{0, 0} (Fin r) Unit Unit.unit) (Sum.inr.{0, 0} (Fin r) Unit Unit.unit)) (OfNat.ofNat.{u1} 𝕜 0 (Zero.toOfNat0.{u1} 𝕜 (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1))))))) -> (Matrix.IsTwoBlockDiagonal.{0, 0, 0, 0, u1} (Fin r) Unit (Fin r) Unit 𝕜 (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))) (Matrix.mul.{u1, 0, 0, 0} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) (Matrix.mul.{u1, 0, 0, 0} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) (List.prod.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.instMulMatrix.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.one.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.instDecidableEqSum.{0, 0} (Fin r) Unit (fun (a : Fin r) (b : Fin r) => instDecidableEqFin r a b) (fun (a : Unit) (b : Unit) => instDecidableEqPUnit.{1} a b) a b) (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))) (NonAssocRing.toOne.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (Matrix.Pivot.listTransvecCol.{u1} 𝕜 _inst_1 r M)) M) (List.prod.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.instMulMatrix.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.one.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.instDecidableEqSum.{0, 0} (Fin r) Unit (fun (a : Fin r) (b : Fin r) => instDecidableEqFin r a b) (fun (a : Unit) (b : Unit) => instDecidableEqPUnit.{1} a b) a b) (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))) (NonAssocRing.toOne.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (Matrix.Pivot.listTransvecRow.{u1} 𝕜 _inst_1 r M))))
+ forall {𝕜 : Type.{u1}} [_inst_1 : Field.{u1} 𝕜] {r : Nat} (M : Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜), (Ne.{succ u1} 𝕜 (M (Sum.inr.{0, 0} (Fin r) Unit Unit.unit) (Sum.inr.{0, 0} (Fin r) Unit Unit.unit)) (OfNat.ofNat.{u1} 𝕜 0 (Zero.toOfNat0.{u1} 𝕜 (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1))))))) -> (Matrix.IsTwoBlockDiagonal.{0, 0, 0, 0, u1} (Fin r) Unit (Fin r) Unit 𝕜 (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))) (Matrix.mul.{u1, 0, 0, 0} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) (Matrix.mul.{u1, 0, 0, 0} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) (List.prod.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.instMulMatrix.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.one.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.instDecidableEqSum.{0, 0} (Fin r) Unit (fun (a : Fin r) (b : Fin r) => instDecidableEqFin r a b) (fun (a : Unit) (b : Unit) => instDecidableEqPUnit.{1} a b) a b) (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))) (Semiring.toOne.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1))))) (Matrix.Pivot.listTransvecCol.{u1} 𝕜 _inst_1 r M)) M) (List.prod.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.instMulMatrix.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.one.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.instDecidableEqSum.{0, 0} (Fin r) Unit (fun (a : Fin r) (b : Fin r) => instDecidableEqFin r a b) (fun (a : Unit) (b : Unit) => instDecidableEqPUnit.{1} a b) a b) (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))) (Semiring.toOne.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1))))) (Matrix.Pivot.listTransvecRow.{u1} 𝕜 _inst_1 r M))))
Case conversion may be inaccurate. Consider using '#align matrix.pivot.is_two_block_diagonal_list_transvec_col_mul_mul_list_transvec_row Matrix.Pivot.isTwoBlockDiagonal_listTransvecCol_mul_mul_listTransvecRowₓ'. -/
/-- Multiplying by all the matrices either in `list_transvec_col M` and `list_transvec_row M` turns
the matrix in block-diagonal form. -/
@@ -775,7 +775,7 @@ theorem isTwoBlockDiagonal_listTransvecCol_mul_mul_listTransvecRow
lean 3 declaration is
forall {𝕜 : Type.{u1}} [_inst_1 : Field.{u1} 𝕜] {r : Nat} (M : Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜), (Ne.{succ u1} 𝕜 (M (Sum.inr.{0, 0} (Fin r) Unit Unit.unit) (Sum.inr.{0, 0} (Fin r) Unit Unit.unit)) (OfNat.ofNat.{u1} 𝕜 0 (OfNat.mk.{u1} 𝕜 0 (Zero.zero.{u1} 𝕜 (MulZeroClass.toHasZero.{u1} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))))))) -> (Exists.{succ u1} (List.{u1} (Matrix.TransvectionStruct.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.decidableEq.{0, 0} (Fin r) (fun (a : Fin r) (b : Fin r) => Fin.decidableEq r a b) Unit (fun (a : Unit) (b : Unit) => PUnit.decidableEq.{1} a b) a b) (EuclideanDomain.toCommRing.{u1} 𝕜 (Field.toEuclideanDomain.{u1} 𝕜 _inst_1)))) (fun (L : List.{u1} (Matrix.TransvectionStruct.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.decidableEq.{0, 0} (Fin r) (fun (a : Fin r) (b : Fin r) => Fin.decidableEq r a b) Unit (fun (a : Unit) (b : Unit) => PUnit.decidableEq.{1} a b) a b) (EuclideanDomain.toCommRing.{u1} 𝕜 (Field.toEuclideanDomain.{u1} 𝕜 _inst_1)))) => Exists.{succ u1} (List.{u1} (Matrix.TransvectionStruct.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.decidableEq.{0, 0} (Fin r) (fun (a : Fin r) (b : Fin r) => Fin.decidableEq r a b) Unit (fun (a : Unit) (b : Unit) => PUnit.decidableEq.{1} a b) a b) (EuclideanDomain.toCommRing.{u1} 𝕜 (Field.toEuclideanDomain.{u1} 𝕜 _inst_1)))) (fun (L' : List.{u1} (Matrix.TransvectionStruct.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.decidableEq.{0, 0} (Fin r) (fun (a : Fin r) (b : Fin r) => Fin.decidableEq r a b) Unit (fun (a : Unit) (b : Unit) => PUnit.decidableEq.{1} a b) a b) (EuclideanDomain.toCommRing.{u1} 𝕜 (Field.toEuclideanDomain.{u1} 𝕜 _inst_1)))) => Matrix.IsTwoBlockDiagonal.{0, 0, 0, 0, u1} (Fin r) Unit (Fin r) Unit 𝕜 (MulZeroClass.toHasZero.{u1} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.mul.{u1, 0, 0, 0} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜 (Sum.fintype.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (Distrib.toHasMul.{u1} 𝕜 (Ring.toDistrib.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) (Matrix.mul.{u1, 0, 0, 0} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜 (Sum.fintype.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (Distrib.toHasMul.{u1} 𝕜 (Ring.toDistrib.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) (List.prod.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.hasMul.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (Sum.fintype.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (Distrib.toHasMul.{u1} 𝕜 (Ring.toDistrib.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.hasOne.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.decidableEq.{0, 0} (Fin r) (fun (a : Fin r) (b : Fin r) => Fin.decidableEq r a b) Unit (fun (a : Unit) (b : Unit) => PUnit.decidableEq.{1} a b) a b) (MulZeroClass.toHasZero.{u1} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (AddMonoidWithOne.toOne.{u1} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u1} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u1} 𝕜 (Ring.toAddCommGroupWithOne.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (List.map.{u1, u1} (Matrix.TransvectionStruct.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.decidableEq.{0, 0} (Fin r) (fun (a : Fin r) (b : Fin r) => Fin.decidableEq r a b) Unit (fun (a : Unit) (b : Unit) => PUnit.decidableEq.{1} a b) a b) (EuclideanDomain.toCommRing.{u1} 𝕜 (Field.toEuclideanDomain.{u1} 𝕜 _inst_1))) (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.TransvectionStruct.toMatrix.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.decidableEq.{0, 0} (Fin r) (fun (a : Fin r) (b : Fin r) => Fin.decidableEq r a b) Unit (fun (a : Unit) (b : Unit) => PUnit.decidableEq.{1} a b) a b) (EuclideanDomain.toCommRing.{u1} 𝕜 (Field.toEuclideanDomain.{u1} 𝕜 _inst_1))) L)) M) (List.prod.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.hasMul.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (Sum.fintype.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (Distrib.toHasMul.{u1} 𝕜 (Ring.toDistrib.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.hasOne.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.decidableEq.{0, 0} (Fin r) (fun (a : Fin r) (b : Fin r) => Fin.decidableEq r a b) Unit (fun (a : Unit) (b : Unit) => PUnit.decidableEq.{1} a b) a b) (MulZeroClass.toHasZero.{u1} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (AddMonoidWithOne.toOne.{u1} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u1} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u1} 𝕜 (Ring.toAddCommGroupWithOne.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (List.map.{u1, u1} (Matrix.TransvectionStruct.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.decidableEq.{0, 0} (Fin r) (fun (a : Fin r) (b : Fin r) => Fin.decidableEq r a b) Unit (fun (a : Unit) (b : Unit) => PUnit.decidableEq.{1} a b) a b) (EuclideanDomain.toCommRing.{u1} 𝕜 (Field.toEuclideanDomain.{u1} 𝕜 _inst_1))) (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.TransvectionStruct.toMatrix.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.decidableEq.{0, 0} (Fin r) (fun (a : Fin r) (b : Fin r) => Fin.decidableEq r a b) Unit (fun (a : Unit) (b : Unit) => PUnit.decidableEq.{1} a b) a b) (EuclideanDomain.toCommRing.{u1} 𝕜 (Field.toEuclideanDomain.{u1} 𝕜 _inst_1))) L'))))))
but is expected to have type
- forall {𝕜 : Type.{u1}} [_inst_1 : Field.{u1} 𝕜] {r : Nat} (M : Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜), (Ne.{succ u1} 𝕜 (M (Sum.inr.{0, 0} (Fin r) Unit Unit.unit) (Sum.inr.{0, 0} (Fin r) Unit Unit.unit)) (OfNat.ofNat.{u1} 𝕜 0 (Zero.toOfNat0.{u1} 𝕜 (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1))))))) -> (Exists.{succ u1} (List.{u1} (Matrix.TransvectionStruct.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜)) (fun (L : List.{u1} (Matrix.TransvectionStruct.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜)) => Exists.{succ u1} (List.{u1} (Matrix.TransvectionStruct.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜)) (fun (L' : List.{u1} (Matrix.TransvectionStruct.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜)) => Matrix.IsTwoBlockDiagonal.{0, 0, 0, 0, u1} (Fin r) Unit (Fin r) Unit 𝕜 (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))) (Matrix.mul.{u1, 0, 0, 0} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) (Matrix.mul.{u1, 0, 0, 0} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) (List.prod.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.instMulMatrix.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.one.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.instDecidableEqSum.{0, 0} (Fin r) Unit (fun (a : Fin r) (b : Fin r) => instDecidableEqFin r a b) (fun (a : Unit) (b : Unit) => instDecidableEqPUnit.{1} a b) a b) (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))) (NonAssocRing.toOne.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (List.map.{u1, u1} (Matrix.TransvectionStruct.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.TransvectionStruct.toMatrix.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.instDecidableEqSum.{0, 0} (Fin r) Unit (fun (a : Fin r) (b : Fin r) => instDecidableEqFin r a b) (fun (a : Unit) (b : Unit) => instDecidableEqPUnit.{1} a b) a b) (EuclideanDomain.toCommRing.{u1} 𝕜 (Field.toEuclideanDomain.{u1} 𝕜 _inst_1))) L)) M) (List.prod.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.instMulMatrix.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.one.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.instDecidableEqSum.{0, 0} (Fin r) Unit (fun (a : Fin r) (b : Fin r) => instDecidableEqFin r a b) (fun (a : Unit) (b : Unit) => instDecidableEqPUnit.{1} a b) a b) (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))) (NonAssocRing.toOne.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (List.map.{u1, u1} (Matrix.TransvectionStruct.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.TransvectionStruct.toMatrix.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.instDecidableEqSum.{0, 0} (Fin r) Unit (fun (a : Fin r) (b : Fin r) => instDecidableEqFin r a b) (fun (a : Unit) (b : Unit) => instDecidableEqPUnit.{1} a b) a b) (EuclideanDomain.toCommRing.{u1} 𝕜 (Field.toEuclideanDomain.{u1} 𝕜 _inst_1))) L'))))))
+ forall {𝕜 : Type.{u1}} [_inst_1 : Field.{u1} 𝕜] {r : Nat} (M : Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜), (Ne.{succ u1} 𝕜 (M (Sum.inr.{0, 0} (Fin r) Unit Unit.unit) (Sum.inr.{0, 0} (Fin r) Unit Unit.unit)) (OfNat.ofNat.{u1} 𝕜 0 (Zero.toOfNat0.{u1} 𝕜 (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1))))))) -> (Exists.{succ u1} (List.{u1} (Matrix.TransvectionStruct.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜)) (fun (L : List.{u1} (Matrix.TransvectionStruct.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜)) => Exists.{succ u1} (List.{u1} (Matrix.TransvectionStruct.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜)) (fun (L' : List.{u1} (Matrix.TransvectionStruct.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜)) => Matrix.IsTwoBlockDiagonal.{0, 0, 0, 0, u1} (Fin r) Unit (Fin r) Unit 𝕜 (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))) (Matrix.mul.{u1, 0, 0, 0} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) (Matrix.mul.{u1, 0, 0, 0} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) (List.prod.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.instMulMatrix.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.one.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.instDecidableEqSum.{0, 0} (Fin r) Unit (fun (a : Fin r) (b : Fin r) => instDecidableEqFin r a b) (fun (a : Unit) (b : Unit) => instDecidableEqPUnit.{1} a b) a b) (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))) (Semiring.toOne.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1))))) (List.map.{u1, u1} (Matrix.TransvectionStruct.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.TransvectionStruct.toMatrix.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.instDecidableEqSum.{0, 0} (Fin r) Unit (fun (a : Fin r) (b : Fin r) => instDecidableEqFin r a b) (fun (a : Unit) (b : Unit) => instDecidableEqPUnit.{1} a b) a b) (EuclideanDomain.toCommRing.{u1} 𝕜 (Field.toEuclideanDomain.{u1} 𝕜 _inst_1))) L)) M) (List.prod.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.instMulMatrix.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.one.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.instDecidableEqSum.{0, 0} (Fin r) Unit (fun (a : Fin r) (b : Fin r) => instDecidableEqFin r a b) (fun (a : Unit) (b : Unit) => instDecidableEqPUnit.{1} a b) a b) (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))) (Semiring.toOne.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1))))) (List.map.{u1, u1} (Matrix.TransvectionStruct.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.TransvectionStruct.toMatrix.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.instDecidableEqSum.{0, 0} (Fin r) Unit (fun (a : Fin r) (b : Fin r) => instDecidableEqFin r a b) (fun (a : Unit) (b : Unit) => instDecidableEqPUnit.{1} a b) a b) (EuclideanDomain.toCommRing.{u1} 𝕜 (Field.toEuclideanDomain.{u1} 𝕜 _inst_1))) L'))))))
Case conversion may be inaccurate. Consider using '#align matrix.pivot.exists_is_two_block_diagonal_of_ne_zero Matrix.Pivot.exists_isTwoBlockDiagonal_of_ne_zeroₓ'. -/
/-- There exist two lists of `transvection_struct` such that multiplying by them on the left and
on the right makes a matrix block-diagonal, when the last coefficient is nonzero. -/
@@ -887,7 +887,7 @@ variable {n p} [Fintype n] [Fintype p]
lean 3 declaration is
forall {n : Type.{u1}} {p : Type.{u2}} {𝕜 : Type.{u3}} [_inst_1 : Field.{u3} 𝕜] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : DecidableEq.{succ u2} p] [_inst_5 : Fintype.{u1} n] [_inst_6 : Fintype.{u2} p] (M : Matrix.{u2, u2, u3} p p 𝕜) (e : Equiv.{succ u2, succ u1} p n), (Exists.{succ (max u1 u3)} (List.{max u1 u3} (Matrix.TransvectionStruct.{u3, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u3} 𝕜 (Field.toEuclideanDomain.{u3} 𝕜 _inst_1)))) (fun (L : List.{max u1 u3} (Matrix.TransvectionStruct.{u3, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u3} 𝕜 (Field.toEuclideanDomain.{u3} 𝕜 _inst_1)))) => Exists.{succ (max u1 u3)} (List.{max u1 u3} (Matrix.TransvectionStruct.{u3, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u3} 𝕜 (Field.toEuclideanDomain.{u3} 𝕜 _inst_1)))) (fun (L' : List.{max u1 u3} (Matrix.TransvectionStruct.{u3, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u3} 𝕜 (Field.toEuclideanDomain.{u3} 𝕜 _inst_1)))) => Exists.{max (succ u1) (succ u3)} (n -> 𝕜) (fun (D : n -> 𝕜) => Eq.{succ (max u1 u3)} (Matrix.{u1, u1, u3} n n 𝕜) (Matrix.mul.{u3, u1, u1, u1} n n n 𝕜 _inst_5 (Distrib.toHasMul.{u3} 𝕜 (Ring.toDistrib.{u3} 𝕜 (DivisionRing.toRing.{u3} 𝕜 (Field.toDivisionRing.{u3} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u3} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u3} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u3} 𝕜 (Ring.toNonAssocRing.{u3} 𝕜 (DivisionRing.toRing.{u3} 𝕜 (Field.toDivisionRing.{u3} 𝕜 _inst_1)))))) (Matrix.mul.{u3, u1, u1, u1} n n n 𝕜 _inst_5 (Distrib.toHasMul.{u3} 𝕜 (Ring.toDistrib.{u3} 𝕜 (DivisionRing.toRing.{u3} 𝕜 (Field.toDivisionRing.{u3} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u3} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u3} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u3} 𝕜 (Ring.toNonAssocRing.{u3} 𝕜 (DivisionRing.toRing.{u3} 𝕜 (Field.toDivisionRing.{u3} 𝕜 _inst_1)))))) (List.prod.{max u1 u3} (Matrix.{u1, u1, u3} n n 𝕜) (Matrix.hasMul.{u3, u1} n 𝕜 _inst_5 (Distrib.toHasMul.{u3} 𝕜 (Ring.toDistrib.{u3} 𝕜 (DivisionRing.toRing.{u3} 𝕜 (Field.toDivisionRing.{u3} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u3} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u3} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u3} 𝕜 (Ring.toNonAssocRing.{u3} 𝕜 (DivisionRing.toRing.{u3} 𝕜 (Field.toDivisionRing.{u3} 𝕜 _inst_1))))))) (Matrix.hasOne.{u3, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (MulZeroClass.toHasZero.{u3} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u3} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u3} 𝕜 (Ring.toNonAssocRing.{u3} 𝕜 (DivisionRing.toRing.{u3} 𝕜 (Field.toDivisionRing.{u3} 𝕜 _inst_1))))))) (AddMonoidWithOne.toOne.{u3} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u3} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u3} 𝕜 (Ring.toAddCommGroupWithOne.{u3} 𝕜 (DivisionRing.toRing.{u3} 𝕜 (Field.toDivisionRing.{u3} 𝕜 _inst_1))))))) (List.map.{max u1 u3, max u1 u3} (Matrix.TransvectionStruct.{u3, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u3} 𝕜 (Field.toEuclideanDomain.{u3} 𝕜 _inst_1))) (Matrix.{u1, u1, u3} n n 𝕜) (Matrix.TransvectionStruct.toMatrix.{u3, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u3} 𝕜 (Field.toEuclideanDomain.{u3} 𝕜 _inst_1))) L)) (coeFn.{max (succ (max u2 u3)) (succ (max u1 u3)), max (succ (max u2 u3)) (succ (max u1 u3))} (AlgEquiv.{u3, max u2 u3, max u1 u3} 𝕜 (Matrix.{u2, u2, u3} p p 𝕜) (Matrix.{u1, u1, u3} n n 𝕜) (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1)) (Matrix.semiring.{u3, u2} p 𝕜 (CommSemiring.toSemiring.{u3} 𝕜 (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.semiring.{u3, u1} n 𝕜 (CommSemiring.toSemiring.{u3} 𝕜 (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.algebra.{u3, u2, u3} p 𝕜 𝕜 _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u3} 𝕜 (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1))) (Algebra.id.{u3} 𝕜 (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1)))) (Matrix.algebra.{u3, u1, u3} n 𝕜 𝕜 _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u3} 𝕜 (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1))) (Algebra.id.{u3} 𝕜 (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1))))) (fun (_x : AlgEquiv.{u3, max u2 u3, max u1 u3} 𝕜 (Matrix.{u2, u2, u3} p p 𝕜) (Matrix.{u1, u1, u3} n n 𝕜) (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1)) (Matrix.semiring.{u3, u2} p 𝕜 (CommSemiring.toSemiring.{u3} 𝕜 (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.semiring.{u3, u1} n 𝕜 (CommSemiring.toSemiring.{u3} 𝕜 (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.algebra.{u3, u2, u3} p 𝕜 𝕜 _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u3} 𝕜 (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1))) (Algebra.id.{u3} 𝕜 (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1)))) (Matrix.algebra.{u3, u1, u3} n 𝕜 𝕜 _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u3} 𝕜 (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1))) (Algebra.id.{u3} 𝕜 (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1))))) => (Matrix.{u2, u2, u3} p p 𝕜) -> (Matrix.{u1, u1, u3} n n 𝕜)) (AlgEquiv.hasCoeToFun.{u3, max u2 u3, max u1 u3} 𝕜 (Matrix.{u2, u2, u3} p p 𝕜) (Matrix.{u1, u1, u3} n n 𝕜) (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1)) (Matrix.semiring.{u3, u2} p 𝕜 (CommSemiring.toSemiring.{u3} 𝕜 (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.semiring.{u3, u1} n 𝕜 (CommSemiring.toSemiring.{u3} 𝕜 (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.algebra.{u3, u2, u3} p 𝕜 𝕜 _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u3} 𝕜 (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1))) (Algebra.id.{u3} 𝕜 (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1)))) (Matrix.algebra.{u3, u1, u3} n 𝕜 𝕜 _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u3} 𝕜 (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1))) (Algebra.id.{u3} 𝕜 (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1))))) (Matrix.reindexAlgEquiv.{u2, u1, u3} p n 𝕜 (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1)) _inst_5 _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (fun (a : n) (b : n) => _inst_2 a b) e) M)) (List.prod.{max u1 u3} (Matrix.{u1, u1, u3} n n 𝕜) (Matrix.hasMul.{u3, u1} n 𝕜 _inst_5 (Distrib.toHasMul.{u3} 𝕜 (Ring.toDistrib.{u3} 𝕜 (DivisionRing.toRing.{u3} 𝕜 (Field.toDivisionRing.{u3} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u3} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u3} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u3} 𝕜 (Ring.toNonAssocRing.{u3} 𝕜 (DivisionRing.toRing.{u3} 𝕜 (Field.toDivisionRing.{u3} 𝕜 _inst_1))))))) (Matrix.hasOne.{u3, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (MulZeroClass.toHasZero.{u3} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u3} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u3} 𝕜 (Ring.toNonAssocRing.{u3} 𝕜 (DivisionRing.toRing.{u3} 𝕜 (Field.toDivisionRing.{u3} 𝕜 _inst_1))))))) (AddMonoidWithOne.toOne.{u3} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u3} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u3} 𝕜 (Ring.toAddCommGroupWithOne.{u3} 𝕜 (DivisionRing.toRing.{u3} 𝕜 (Field.toDivisionRing.{u3} 𝕜 _inst_1))))))) (List.map.{max u1 u3, max u1 u3} (Matrix.TransvectionStruct.{u3, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u3} 𝕜 (Field.toEuclideanDomain.{u3} 𝕜 _inst_1))) (Matrix.{u1, u1, u3} n n 𝕜) (Matrix.TransvectionStruct.toMatrix.{u3, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u3} 𝕜 (Field.toEuclideanDomain.{u3} 𝕜 _inst_1))) L'))) (Matrix.diagonal.{u3, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (MulZeroClass.toHasZero.{u3} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u3} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u3} 𝕜 (Ring.toNonAssocRing.{u3} 𝕜 (DivisionRing.toRing.{u3} 𝕜 (Field.toDivisionRing.{u3} 𝕜 _inst_1))))))) D))))) -> (Exists.{succ (max u2 u3)} (List.{max u2 u3} (Matrix.TransvectionStruct.{u3, u2} p 𝕜 (fun (a : p) (b : p) => _inst_3 a b) (EuclideanDomain.toCommRing.{u3} 𝕜 (Field.toEuclideanDomain.{u3} 𝕜 _inst_1)))) (fun (L : List.{max u2 u3} (Matrix.TransvectionStruct.{u3, u2} p 𝕜 (fun (a : p) (b : p) => _inst_3 a b) (EuclideanDomain.toCommRing.{u3} 𝕜 (Field.toEuclideanDomain.{u3} 𝕜 _inst_1)))) => Exists.{succ (max u2 u3)} (List.{max u2 u3} (Matrix.TransvectionStruct.{u3, u2} p 𝕜 (fun (a : p) (b : p) => _inst_3 a b) (EuclideanDomain.toCommRing.{u3} 𝕜 (Field.toEuclideanDomain.{u3} 𝕜 _inst_1)))) (fun (L' : List.{max u2 u3} (Matrix.TransvectionStruct.{u3, u2} p 𝕜 (fun (a : p) (b : p) => _inst_3 a b) (EuclideanDomain.toCommRing.{u3} 𝕜 (Field.toEuclideanDomain.{u3} 𝕜 _inst_1)))) => Exists.{max (succ u2) (succ u3)} (p -> 𝕜) (fun (D : p -> 𝕜) => Eq.{succ (max u2 u3)} (Matrix.{u2, u2, u3} p p 𝕜) (Matrix.mul.{u3, u2, u2, u2} p p p 𝕜 _inst_6 (Distrib.toHasMul.{u3} 𝕜 (Ring.toDistrib.{u3} 𝕜 (DivisionRing.toRing.{u3} 𝕜 (Field.toDivisionRing.{u3} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u3} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u3} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u3} 𝕜 (Ring.toNonAssocRing.{u3} 𝕜 (DivisionRing.toRing.{u3} 𝕜 (Field.toDivisionRing.{u3} 𝕜 _inst_1)))))) (Matrix.mul.{u3, u2, u2, u2} p p p 𝕜 _inst_6 (Distrib.toHasMul.{u3} 𝕜 (Ring.toDistrib.{u3} 𝕜 (DivisionRing.toRing.{u3} 𝕜 (Field.toDivisionRing.{u3} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u3} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u3} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u3} 𝕜 (Ring.toNonAssocRing.{u3} 𝕜 (DivisionRing.toRing.{u3} 𝕜 (Field.toDivisionRing.{u3} 𝕜 _inst_1)))))) (List.prod.{max u2 u3} (Matrix.{u2, u2, u3} p p 𝕜) (Matrix.hasMul.{u3, u2} p 𝕜 _inst_6 (Distrib.toHasMul.{u3} 𝕜 (Ring.toDistrib.{u3} 𝕜 (DivisionRing.toRing.{u3} 𝕜 (Field.toDivisionRing.{u3} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u3} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u3} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u3} 𝕜 (Ring.toNonAssocRing.{u3} 𝕜 (DivisionRing.toRing.{u3} 𝕜 (Field.toDivisionRing.{u3} 𝕜 _inst_1))))))) (Matrix.hasOne.{u3, u2} p 𝕜 (fun (a : p) (b : p) => _inst_3 a b) (MulZeroClass.toHasZero.{u3} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u3} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u3} 𝕜 (Ring.toNonAssocRing.{u3} 𝕜 (DivisionRing.toRing.{u3} 𝕜 (Field.toDivisionRing.{u3} 𝕜 _inst_1))))))) (AddMonoidWithOne.toOne.{u3} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u3} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u3} 𝕜 (Ring.toAddCommGroupWithOne.{u3} 𝕜 (DivisionRing.toRing.{u3} 𝕜 (Field.toDivisionRing.{u3} 𝕜 _inst_1))))))) (List.map.{max u2 u3, max u2 u3} (Matrix.TransvectionStruct.{u3, u2} p 𝕜 (fun (a : p) (b : p) => _inst_3 a b) (EuclideanDomain.toCommRing.{u3} 𝕜 (Field.toEuclideanDomain.{u3} 𝕜 _inst_1))) (Matrix.{u2, u2, u3} p p 𝕜) (Matrix.TransvectionStruct.toMatrix.{u3, u2} p 𝕜 (fun (a : p) (b : p) => _inst_3 a b) (EuclideanDomain.toCommRing.{u3} 𝕜 (Field.toEuclideanDomain.{u3} 𝕜 _inst_1))) L)) M) (List.prod.{max u2 u3} (Matrix.{u2, u2, u3} p p 𝕜) (Matrix.hasMul.{u3, u2} p 𝕜 _inst_6 (Distrib.toHasMul.{u3} 𝕜 (Ring.toDistrib.{u3} 𝕜 (DivisionRing.toRing.{u3} 𝕜 (Field.toDivisionRing.{u3} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u3} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u3} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u3} 𝕜 (Ring.toNonAssocRing.{u3} 𝕜 (DivisionRing.toRing.{u3} 𝕜 (Field.toDivisionRing.{u3} 𝕜 _inst_1))))))) (Matrix.hasOne.{u3, u2} p 𝕜 (fun (a : p) (b : p) => _inst_3 a b) (MulZeroClass.toHasZero.{u3} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u3} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u3} 𝕜 (Ring.toNonAssocRing.{u3} 𝕜 (DivisionRing.toRing.{u3} 𝕜 (Field.toDivisionRing.{u3} 𝕜 _inst_1))))))) (AddMonoidWithOne.toOne.{u3} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u3} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u3} 𝕜 (Ring.toAddCommGroupWithOne.{u3} 𝕜 (DivisionRing.toRing.{u3} 𝕜 (Field.toDivisionRing.{u3} 𝕜 _inst_1))))))) (List.map.{max u2 u3, max u2 u3} (Matrix.TransvectionStruct.{u3, u2} p 𝕜 (fun (a : p) (b : p) => _inst_3 a b) (EuclideanDomain.toCommRing.{u3} 𝕜 (Field.toEuclideanDomain.{u3} 𝕜 _inst_1))) (Matrix.{u2, u2, u3} p p 𝕜) (Matrix.TransvectionStruct.toMatrix.{u3, u2} p 𝕜 (fun (a : p) (b : p) => _inst_3 a b) (EuclideanDomain.toCommRing.{u3} 𝕜 (Field.toEuclideanDomain.{u3} 𝕜 _inst_1))) L'))) (Matrix.diagonal.{u3, u2} p 𝕜 (fun (a : p) (b : p) => _inst_3 a b) (MulZeroClass.toHasZero.{u3} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u3} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u3} 𝕜 (Ring.toNonAssocRing.{u3} 𝕜 (DivisionRing.toRing.{u3} 𝕜 (Field.toDivisionRing.{u3} 𝕜 _inst_1))))))) D)))))
but is expected to have type
- forall {n : Type.{u1}} {p : Type.{u3}} {𝕜 : Type.{u2}} [_inst_1 : Field.{u2} 𝕜] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : DecidableEq.{succ u3} p] [_inst_5 : Fintype.{u1} n] [_inst_6 : Fintype.{u3} p] (M : Matrix.{u3, u3, u2} p p 𝕜) (e : Equiv.{succ u3, succ u1} p n), (Exists.{max (succ u1) (succ u2)} (List.{max u1 u2} (Matrix.TransvectionStruct.{u2, u1} n 𝕜)) (fun (L : List.{max u1 u2} (Matrix.TransvectionStruct.{u2, u1} n 𝕜)) => Exists.{max (succ u1) (succ u2)} (List.{max u1 u2} (Matrix.TransvectionStruct.{u2, u1} n 𝕜)) (fun (L' : List.{max u1 u2} (Matrix.TransvectionStruct.{u2, u1} n 𝕜)) => Exists.{max (succ u1) (succ u2)} (n -> 𝕜) (fun (D : n -> 𝕜) => Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.mul.{u2, u1, u1, u1} n n n 𝕜 _inst_5 (NonUnitalNonAssocRing.toMul.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1)))))) (Matrix.mul.{u2, u1, u1, u1} n n n 𝕜 _inst_5 (NonUnitalNonAssocRing.toMul.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1)))))) (List.prod.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.instMulMatrix.{u2, u1} n 𝕜 _inst_5 (NonUnitalNonAssocRing.toMul.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))))) (Matrix.one.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u2} 𝕜 (Semifield.toCommGroupWithZero.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))) (NonAssocRing.toOne.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))) (List.map.{max u1 u2, max u1 u2} (Matrix.TransvectionStruct.{u2, u1} n 𝕜) (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.TransvectionStruct.toMatrix.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u2} 𝕜 (Field.toEuclideanDomain.{u2} 𝕜 _inst_1))) L)) (FunLike.coe.{max (max (succ u1) (succ u3)) (succ u2), max (succ u3) (succ u2), max (succ u1) (succ u2)} (AlgEquiv.{u2, max u2 u3, max u2 u1} 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.{u1, u1, u2} n n 𝕜) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.instAlgebraMatrixSemiring.{u2, u3, u2} p 𝕜 𝕜 _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))) (Matrix.instAlgebraMatrixSemiring.{u2, u1, u2} n 𝕜 𝕜 _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))))) (Matrix.{u3, u3, u2} p p 𝕜) (fun (_x : Matrix.{u3, u3, u2} p p 𝕜) => (fun (x._@.Mathlib.Algebra.Hom.GroupAction._hyg.2186 : Matrix.{u3, u3, u2} p p 𝕜) => Matrix.{u1, u1, u2} n n 𝕜) _x) (SMulHomClass.toFunLike.{max (max u1 u3) u2, u2, max u3 u2, max u1 u2} (AlgEquiv.{u2, max u2 u3, max u2 u1} 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.{u1, u1, u2} n n 𝕜) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.instAlgebraMatrixSemiring.{u2, u3, u2} p 𝕜 𝕜 _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))) (Matrix.instAlgebraMatrixSemiring.{u2, u1, u2} n 𝕜 𝕜 _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))))) 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.{u1, u1, u2} n n 𝕜) (SMulZeroClass.toSMul.{u2, max u3 u2} 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (AddMonoid.toZero.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (AddCommMonoid.toAddMonoid.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b))))))) (DistribSMul.toSMulZeroClass.{u2, max u3 u2} 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (AddMonoid.toAddZeroClass.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (AddCommMonoid.toAddMonoid.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b))))))) (DistribMulAction.toDistribSMul.{u2, max u3 u2} 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (MonoidWithZero.toMonoid.{u2} 𝕜 (Semiring.toMonoidWithZero.{u2} 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))))) (AddCommMonoid.toAddMonoid.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)))))) (Module.toDistribMulAction.{u2, max u3 u2} 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b))))) (Algebra.toModule.{u2, max u3 u2} 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u2, u3, u2} p 𝕜 𝕜 _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))))))))) (SMulZeroClass.toSMul.{u2, max u1 u2} 𝕜 (Matrix.{u1, u1, u2} n n 𝕜) (AddMonoid.toZero.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (AddCommMonoid.toAddMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Semiring.toNonAssocSemiring.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b))))))) (DistribSMul.toSMulZeroClass.{u2, max u1 u2} 𝕜 (Matrix.{u1, u1, u2} n n 𝕜) (AddMonoid.toAddZeroClass.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (AddCommMonoid.toAddMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Semiring.toNonAssocSemiring.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b))))))) (DistribMulAction.toDistribSMul.{u2, max u1 u2} 𝕜 (Matrix.{u1, u1, u2} n n 𝕜) (MonoidWithZero.toMonoid.{u2} 𝕜 (Semiring.toMonoidWithZero.{u2} 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))))) (AddCommMonoid.toAddMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Semiring.toNonAssocSemiring.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)))))) (Module.toDistribMulAction.{u2, max u1 u2} 𝕜 (Matrix.{u1, u1, u2} n n 𝕜) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Semiring.toNonAssocSemiring.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b))))) (Algebra.toModule.{u2, max u1 u2} 𝕜 (Matrix.{u1, u1, u2} n n 𝕜) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.instAlgebraMatrixSemiring.{u2, u1, u2} n 𝕜 𝕜 _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))))))))) (DistribMulActionHomClass.toSMulHomClass.{max (max u1 u3) u2, u2, max u3 u2, max u1 u2} (AlgEquiv.{u2, max u2 u3, max u2 u1} 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.{u1, u1, u2} n n 𝕜) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.instAlgebraMatrixSemiring.{u2, u3, u2} p 𝕜 𝕜 _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))) (Matrix.instAlgebraMatrixSemiring.{u2, u1, u2} n 𝕜 𝕜 _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))))) 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.{u1, u1, u2} n n 𝕜) (MonoidWithZero.toMonoid.{u2} 𝕜 (Semiring.toMonoidWithZero.{u2} 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))))) (AddCommMonoid.toAddMonoid.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)))))) (AddCommMonoid.toAddMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Semiring.toNonAssocSemiring.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)))))) (Module.toDistribMulAction.{u2, max u3 u2} 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b))))) (Algebra.toModule.{u2, max u3 u2} 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u2, u3, u2} p 𝕜 𝕜 _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))))) (Module.toDistribMulAction.{u2, max u1 u2} 𝕜 (Matrix.{u1, u1, u2} n n 𝕜) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Semiring.toNonAssocSemiring.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b))))) (Algebra.toModule.{u2, max u1 u2} 𝕜 (Matrix.{u1, u1, u2} n n 𝕜) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.instAlgebraMatrixSemiring.{u2, u1, u2} n 𝕜 𝕜 _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))))) (NonUnitalAlgHomClass.toDistribMulActionHomClass.{max (max u1 u3) u2, u2, max u3 u2, max u1 u2} (AlgEquiv.{u2, max u2 u3, max u2 u1} 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.{u1, u1, u2} n n 𝕜) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.instAlgebraMatrixSemiring.{u2, u3, u2} p 𝕜 𝕜 _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))) (Matrix.instAlgebraMatrixSemiring.{u2, u1, u2} n 𝕜 𝕜 _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))))) 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.{u1, u1, u2} n n 𝕜) (MonoidWithZero.toMonoid.{u2} 𝕜 (Semiring.toMonoidWithZero.{u2} 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Semiring.toNonAssocSemiring.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)))) (Module.toDistribMulAction.{u2, max u3 u2} 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b))))) (Algebra.toModule.{u2, max u3 u2} 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u2, u3, u2} p 𝕜 𝕜 _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))))) (Module.toDistribMulAction.{u2, max u1 u2} 𝕜 (Matrix.{u1, u1, u2} n n 𝕜) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Semiring.toNonAssocSemiring.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b))))) (Algebra.toModule.{u2, max u1 u2} 𝕜 (Matrix.{u1, u1, u2} n n 𝕜) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.instAlgebraMatrixSemiring.{u2, u1, u2} n 𝕜 𝕜 _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))))) (AlgHom.instNonUnitalAlgHomClassToMonoidToMonoidWithZeroToSemiringToNonUnitalNonAssocSemiringToNonAssocSemiringToNonUnitalNonAssocSemiringToNonAssocSemiringToDistribMulActionToAddCommMonoidToModuleToDistribMulActionToAddCommMonoidToModule.{u2, max u3 u2, max u1 u2, max (max u1 u3) u2} 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.{u1, u1, u2} n n 𝕜) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.instAlgebraMatrixSemiring.{u2, u3, u2} p 𝕜 𝕜 _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))) (Matrix.instAlgebraMatrixSemiring.{u2, u1, u2} n 𝕜 𝕜 _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))) (AlgEquiv.{u2, max u2 u3, max u2 u1} 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.{u1, u1, u2} n n 𝕜) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.instAlgebraMatrixSemiring.{u2, u3, u2} p 𝕜 𝕜 _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))) (Matrix.instAlgebraMatrixSemiring.{u2, u1, u2} n 𝕜 𝕜 _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))))) (AlgEquivClass.toAlgHomClass.{max (max u1 u3) u2, u2, max u3 u2, max u1 u2} (AlgEquiv.{u2, max u2 u3, max u2 u1} 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.{u1, u1, u2} n n 𝕜) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.instAlgebraMatrixSemiring.{u2, u3, u2} p 𝕜 𝕜 _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))) (Matrix.instAlgebraMatrixSemiring.{u2, u1, u2} n 𝕜 𝕜 _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))))) 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.{u1, u1, u2} n n 𝕜) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.instAlgebraMatrixSemiring.{u2, u3, u2} p 𝕜 𝕜 _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))) (Matrix.instAlgebraMatrixSemiring.{u2, u1, u2} n 𝕜 𝕜 _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))) (AlgEquiv.instAlgEquivClassAlgEquiv.{u2, max u3 u2, max u1 u2} 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.{u1, u1, u2} n n 𝕜) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.instAlgebraMatrixSemiring.{u2, u3, u2} p 𝕜 𝕜 _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))) (Matrix.instAlgebraMatrixSemiring.{u2, u1, u2} n 𝕜 𝕜 _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))))))))) (Matrix.reindexAlgEquiv.{u3, u1, u2} p n 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) _inst_5 _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (fun (a : n) (b : n) => _inst_2 a b) e) M)) (List.prod.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.instMulMatrix.{u2, u1} n 𝕜 _inst_5 (NonUnitalNonAssocRing.toMul.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))))) (Matrix.one.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u2} 𝕜 (Semifield.toCommGroupWithZero.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))) (NonAssocRing.toOne.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))) (List.map.{max u1 u2, max u1 u2} (Matrix.TransvectionStruct.{u2, u1} n 𝕜) (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.TransvectionStruct.toMatrix.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u2} 𝕜 (Field.toEuclideanDomain.{u2} 𝕜 _inst_1))) L'))) (Matrix.diagonal.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u2} 𝕜 (Semifield.toCommGroupWithZero.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))) D))))) -> (Exists.{max (succ u3) (succ u2)} (List.{max u3 u2} (Matrix.TransvectionStruct.{u2, u3} p 𝕜)) (fun (L : List.{max u3 u2} (Matrix.TransvectionStruct.{u2, u3} p 𝕜)) => Exists.{max (succ u3) (succ u2)} (List.{max u3 u2} (Matrix.TransvectionStruct.{u2, u3} p 𝕜)) (fun (L' : List.{max u3 u2} (Matrix.TransvectionStruct.{u2, u3} p 𝕜)) => Exists.{max (succ u3) (succ u2)} (p -> 𝕜) (fun (D : p -> 𝕜) => Eq.{max (succ u3) (succ u2)} (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.mul.{u2, u3, u3, u3} p p p 𝕜 _inst_6 (NonUnitalNonAssocRing.toMul.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1)))))) (Matrix.mul.{u2, u3, u3, u3} p p p 𝕜 _inst_6 (NonUnitalNonAssocRing.toMul.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1)))))) (List.prod.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.instMulMatrix.{u2, u3} p 𝕜 _inst_6 (NonUnitalNonAssocRing.toMul.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))))) (Matrix.one.{u2, u3} p 𝕜 (fun (a : p) (b : p) => _inst_3 a b) (CommMonoidWithZero.toZero.{u2} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u2} 𝕜 (Semifield.toCommGroupWithZero.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))) (NonAssocRing.toOne.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))) (List.map.{max u3 u2, max u3 u2} (Matrix.TransvectionStruct.{u2, u3} p 𝕜) (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.TransvectionStruct.toMatrix.{u2, u3} p 𝕜 (fun (a : p) (b : p) => _inst_3 a b) (EuclideanDomain.toCommRing.{u2} 𝕜 (Field.toEuclideanDomain.{u2} 𝕜 _inst_1))) L)) M) (List.prod.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.instMulMatrix.{u2, u3} p 𝕜 _inst_6 (NonUnitalNonAssocRing.toMul.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))))) (Matrix.one.{u2, u3} p 𝕜 (fun (a : p) (b : p) => _inst_3 a b) (CommMonoidWithZero.toZero.{u2} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u2} 𝕜 (Semifield.toCommGroupWithZero.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))) (NonAssocRing.toOne.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))) (List.map.{max u3 u2, max u3 u2} (Matrix.TransvectionStruct.{u2, u3} p 𝕜) (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.TransvectionStruct.toMatrix.{u2, u3} p 𝕜 (fun (a : p) (b : p) => _inst_3 a b) (EuclideanDomain.toCommRing.{u2} 𝕜 (Field.toEuclideanDomain.{u2} 𝕜 _inst_1))) L'))) (Matrix.diagonal.{u2, u3} p 𝕜 (fun (a : p) (b : p) => _inst_3 a b) (CommMonoidWithZero.toZero.{u2} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u2} 𝕜 (Semifield.toCommGroupWithZero.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))) D)))))
+ forall {n : Type.{u1}} {p : Type.{u3}} {𝕜 : Type.{u2}} [_inst_1 : Field.{u2} 𝕜] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : DecidableEq.{succ u3} p] [_inst_5 : Fintype.{u1} n] [_inst_6 : Fintype.{u3} p] (M : Matrix.{u3, u3, u2} p p 𝕜) (e : Equiv.{succ u3, succ u1} p n), (Exists.{max (succ u1) (succ u2)} (List.{max u1 u2} (Matrix.TransvectionStruct.{u2, u1} n 𝕜)) (fun (L : List.{max u1 u2} (Matrix.TransvectionStruct.{u2, u1} n 𝕜)) => Exists.{max (succ u1) (succ u2)} (List.{max u1 u2} (Matrix.TransvectionStruct.{u2, u1} n 𝕜)) (fun (L' : List.{max u1 u2} (Matrix.TransvectionStruct.{u2, u1} n 𝕜)) => Exists.{max (succ u1) (succ u2)} (n -> 𝕜) (fun (D : n -> 𝕜) => Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.mul.{u2, u1, u1, u1} n n n 𝕜 _inst_5 (NonUnitalNonAssocRing.toMul.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1)))))) (Matrix.mul.{u2, u1, u1, u1} n n n 𝕜 _inst_5 (NonUnitalNonAssocRing.toMul.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1)))))) (List.prod.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.instMulMatrix.{u2, u1} n 𝕜 _inst_5 (NonUnitalNonAssocRing.toMul.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))))) (Matrix.one.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u2} 𝕜 (Semifield.toCommGroupWithZero.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))) (Semiring.toOne.{u2} 𝕜 (DivisionSemiring.toSemiring.{u2} 𝕜 (Semifield.toDivisionSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))))) (List.map.{max u1 u2, max u1 u2} (Matrix.TransvectionStruct.{u2, u1} n 𝕜) (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.TransvectionStruct.toMatrix.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u2} 𝕜 (Field.toEuclideanDomain.{u2} 𝕜 _inst_1))) L)) (FunLike.coe.{max (max (succ u1) (succ u3)) (succ u2), max (succ u3) (succ u2), max (succ u1) (succ u2)} (AlgEquiv.{u2, max u2 u3, max u2 u1} 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.{u1, u1, u2} n n 𝕜) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.instAlgebraMatrixSemiring.{u2, u3, u2} p 𝕜 𝕜 _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))) (Matrix.instAlgebraMatrixSemiring.{u2, u1, u2} n 𝕜 𝕜 _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))))) (Matrix.{u3, u3, u2} p p 𝕜) (fun (_x : Matrix.{u3, u3, u2} p p 𝕜) => (fun (x._@.Mathlib.Algebra.Hom.GroupAction._hyg.2186 : Matrix.{u3, u3, u2} p p 𝕜) => Matrix.{u1, u1, u2} n n 𝕜) _x) (SMulHomClass.toFunLike.{max (max u1 u3) u2, u2, max u3 u2, max u1 u2} (AlgEquiv.{u2, max u2 u3, max u2 u1} 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.{u1, u1, u2} n n 𝕜) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.instAlgebraMatrixSemiring.{u2, u3, u2} p 𝕜 𝕜 _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))) (Matrix.instAlgebraMatrixSemiring.{u2, u1, u2} n 𝕜 𝕜 _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))))) 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.{u1, u1, u2} n n 𝕜) (SMulZeroClass.toSMul.{u2, max u3 u2} 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (AddMonoid.toZero.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (AddCommMonoid.toAddMonoid.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b))))))) (DistribSMul.toSMulZeroClass.{u2, max u3 u2} 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (AddMonoid.toAddZeroClass.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (AddCommMonoid.toAddMonoid.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b))))))) (DistribMulAction.toDistribSMul.{u2, max u3 u2} 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (MonoidWithZero.toMonoid.{u2} 𝕜 (Semiring.toMonoidWithZero.{u2} 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))))) (AddCommMonoid.toAddMonoid.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)))))) (Module.toDistribMulAction.{u2, max u3 u2} 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b))))) (Algebra.toModule.{u2, max u3 u2} 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u2, u3, u2} p 𝕜 𝕜 _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))))))))) (SMulZeroClass.toSMul.{u2, max u1 u2} 𝕜 (Matrix.{u1, u1, u2} n n 𝕜) (AddMonoid.toZero.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (AddCommMonoid.toAddMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Semiring.toNonAssocSemiring.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b))))))) (DistribSMul.toSMulZeroClass.{u2, max u1 u2} 𝕜 (Matrix.{u1, u1, u2} n n 𝕜) (AddMonoid.toAddZeroClass.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (AddCommMonoid.toAddMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Semiring.toNonAssocSemiring.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b))))))) (DistribMulAction.toDistribSMul.{u2, max u1 u2} 𝕜 (Matrix.{u1, u1, u2} n n 𝕜) (MonoidWithZero.toMonoid.{u2} 𝕜 (Semiring.toMonoidWithZero.{u2} 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))))) (AddCommMonoid.toAddMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Semiring.toNonAssocSemiring.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)))))) (Module.toDistribMulAction.{u2, max u1 u2} 𝕜 (Matrix.{u1, u1, u2} n n 𝕜) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Semiring.toNonAssocSemiring.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b))))) (Algebra.toModule.{u2, max u1 u2} 𝕜 (Matrix.{u1, u1, u2} n n 𝕜) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.instAlgebraMatrixSemiring.{u2, u1, u2} n 𝕜 𝕜 _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))))))))) (DistribMulActionHomClass.toSMulHomClass.{max (max u1 u3) u2, u2, max u3 u2, max u1 u2} (AlgEquiv.{u2, max u2 u3, max u2 u1} 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.{u1, u1, u2} n n 𝕜) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.instAlgebraMatrixSemiring.{u2, u3, u2} p 𝕜 𝕜 _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))) (Matrix.instAlgebraMatrixSemiring.{u2, u1, u2} n 𝕜 𝕜 _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))))) 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.{u1, u1, u2} n n 𝕜) (MonoidWithZero.toMonoid.{u2} 𝕜 (Semiring.toMonoidWithZero.{u2} 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))))) (AddCommMonoid.toAddMonoid.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)))))) (AddCommMonoid.toAddMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Semiring.toNonAssocSemiring.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)))))) (Module.toDistribMulAction.{u2, max u3 u2} 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b))))) (Algebra.toModule.{u2, max u3 u2} 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u2, u3, u2} p 𝕜 𝕜 _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))))) (Module.toDistribMulAction.{u2, max u1 u2} 𝕜 (Matrix.{u1, u1, u2} n n 𝕜) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Semiring.toNonAssocSemiring.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b))))) (Algebra.toModule.{u2, max u1 u2} 𝕜 (Matrix.{u1, u1, u2} n n 𝕜) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.instAlgebraMatrixSemiring.{u2, u1, u2} n 𝕜 𝕜 _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))))) (NonUnitalAlgHomClass.toDistribMulActionHomClass.{max (max u1 u3) u2, u2, max u3 u2, max u1 u2} (AlgEquiv.{u2, max u2 u3, max u2 u1} 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.{u1, u1, u2} n n 𝕜) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.instAlgebraMatrixSemiring.{u2, u3, u2} p 𝕜 𝕜 _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))) (Matrix.instAlgebraMatrixSemiring.{u2, u1, u2} n 𝕜 𝕜 _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))))) 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.{u1, u1, u2} n n 𝕜) (MonoidWithZero.toMonoid.{u2} 𝕜 (Semiring.toMonoidWithZero.{u2} 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Semiring.toNonAssocSemiring.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)))) (Module.toDistribMulAction.{u2, max u3 u2} 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b))))) (Algebra.toModule.{u2, max u3 u2} 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u2, u3, u2} p 𝕜 𝕜 _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))))) (Module.toDistribMulAction.{u2, max u1 u2} 𝕜 (Matrix.{u1, u1, u2} n n 𝕜) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Semiring.toNonAssocSemiring.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b))))) (Algebra.toModule.{u2, max u1 u2} 𝕜 (Matrix.{u1, u1, u2} n n 𝕜) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.instAlgebraMatrixSemiring.{u2, u1, u2} n 𝕜 𝕜 _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))))) (AlgHom.instNonUnitalAlgHomClassToMonoidToMonoidWithZeroToSemiringToNonUnitalNonAssocSemiringToNonAssocSemiringToNonUnitalNonAssocSemiringToNonAssocSemiringToDistribMulActionToAddCommMonoidToModuleToDistribMulActionToAddCommMonoidToModule.{u2, max u3 u2, max u1 u2, max (max u1 u3) u2} 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.{u1, u1, u2} n n 𝕜) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.instAlgebraMatrixSemiring.{u2, u3, u2} p 𝕜 𝕜 _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))) (Matrix.instAlgebraMatrixSemiring.{u2, u1, u2} n 𝕜 𝕜 _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))) (AlgEquiv.{u2, max u2 u3, max u2 u1} 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.{u1, u1, u2} n n 𝕜) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.instAlgebraMatrixSemiring.{u2, u3, u2} p 𝕜 𝕜 _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))) (Matrix.instAlgebraMatrixSemiring.{u2, u1, u2} n 𝕜 𝕜 _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))))) (AlgEquivClass.toAlgHomClass.{max (max u1 u3) u2, u2, max u3 u2, max u1 u2} (AlgEquiv.{u2, max u2 u3, max u2 u1} 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.{u1, u1, u2} n n 𝕜) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.instAlgebraMatrixSemiring.{u2, u3, u2} p 𝕜 𝕜 _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))) (Matrix.instAlgebraMatrixSemiring.{u2, u1, u2} n 𝕜 𝕜 _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))))) 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.{u1, u1, u2} n n 𝕜) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.instAlgebraMatrixSemiring.{u2, u3, u2} p 𝕜 𝕜 _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))) (Matrix.instAlgebraMatrixSemiring.{u2, u1, u2} n 𝕜 𝕜 _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))) (AlgEquiv.instAlgEquivClassAlgEquiv.{u2, max u3 u2, max u1 u2} 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.{u1, u1, u2} n n 𝕜) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.instAlgebraMatrixSemiring.{u2, u3, u2} p 𝕜 𝕜 _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))) (Matrix.instAlgebraMatrixSemiring.{u2, u1, u2} n 𝕜 𝕜 _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))))))))) (Matrix.reindexAlgEquiv.{u3, u1, u2} p n 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) _inst_5 _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (fun (a : n) (b : n) => _inst_2 a b) e) M)) (List.prod.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.instMulMatrix.{u2, u1} n 𝕜 _inst_5 (NonUnitalNonAssocRing.toMul.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))))) (Matrix.one.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u2} 𝕜 (Semifield.toCommGroupWithZero.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))) (Semiring.toOne.{u2} 𝕜 (DivisionSemiring.toSemiring.{u2} 𝕜 (Semifield.toDivisionSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))))) (List.map.{max u1 u2, max u1 u2} (Matrix.TransvectionStruct.{u2, u1} n 𝕜) (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.TransvectionStruct.toMatrix.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u2} 𝕜 (Field.toEuclideanDomain.{u2} 𝕜 _inst_1))) L'))) (Matrix.diagonal.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u2} 𝕜 (Semifield.toCommGroupWithZero.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))) D))))) -> (Exists.{max (succ u3) (succ u2)} (List.{max u3 u2} (Matrix.TransvectionStruct.{u2, u3} p 𝕜)) (fun (L : List.{max u3 u2} (Matrix.TransvectionStruct.{u2, u3} p 𝕜)) => Exists.{max (succ u3) (succ u2)} (List.{max u3 u2} (Matrix.TransvectionStruct.{u2, u3} p 𝕜)) (fun (L' : List.{max u3 u2} (Matrix.TransvectionStruct.{u2, u3} p 𝕜)) => Exists.{max (succ u3) (succ u2)} (p -> 𝕜) (fun (D : p -> 𝕜) => Eq.{max (succ u3) (succ u2)} (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.mul.{u2, u3, u3, u3} p p p 𝕜 _inst_6 (NonUnitalNonAssocRing.toMul.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1)))))) (Matrix.mul.{u2, u3, u3, u3} p p p 𝕜 _inst_6 (NonUnitalNonAssocRing.toMul.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1)))))) (List.prod.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.instMulMatrix.{u2, u3} p 𝕜 _inst_6 (NonUnitalNonAssocRing.toMul.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))))) (Matrix.one.{u2, u3} p 𝕜 (fun (a : p) (b : p) => _inst_3 a b) (CommMonoidWithZero.toZero.{u2} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u2} 𝕜 (Semifield.toCommGroupWithZero.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))) (Semiring.toOne.{u2} 𝕜 (DivisionSemiring.toSemiring.{u2} 𝕜 (Semifield.toDivisionSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))))) (List.map.{max u3 u2, max u3 u2} (Matrix.TransvectionStruct.{u2, u3} p 𝕜) (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.TransvectionStruct.toMatrix.{u2, u3} p 𝕜 (fun (a : p) (b : p) => _inst_3 a b) (EuclideanDomain.toCommRing.{u2} 𝕜 (Field.toEuclideanDomain.{u2} 𝕜 _inst_1))) L)) M) (List.prod.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.instMulMatrix.{u2, u3} p 𝕜 _inst_6 (NonUnitalNonAssocRing.toMul.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))))) (Matrix.one.{u2, u3} p 𝕜 (fun (a : p) (b : p) => _inst_3 a b) (CommMonoidWithZero.toZero.{u2} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u2} 𝕜 (Semifield.toCommGroupWithZero.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))) (Semiring.toOne.{u2} 𝕜 (DivisionSemiring.toSemiring.{u2} 𝕜 (Semifield.toDivisionSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))))) (List.map.{max u3 u2, max u3 u2} (Matrix.TransvectionStruct.{u2, u3} p 𝕜) (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.TransvectionStruct.toMatrix.{u2, u3} p 𝕜 (fun (a : p) (b : p) => _inst_3 a b) (EuclideanDomain.toCommRing.{u2} 𝕜 (Field.toEuclideanDomain.{u2} 𝕜 _inst_1))) L'))) (Matrix.diagonal.{u2, u3} p 𝕜 (fun (a : p) (b : p) => _inst_3 a b) (CommMonoidWithZero.toZero.{u2} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u2} 𝕜 (Semifield.toCommGroupWithZero.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))) D)))))
Case conversion may be inaccurate. Consider using '#align matrix.pivot.reindex_exists_list_transvec_mul_mul_list_transvec_eq_diagonal Matrix.Pivot.reindex_exists_list_transvec_mul_mul_list_transvec_eq_diagonalₓ'. -/
/-- Reduction to diagonal form by elementary operations is invariant under reindexing. -/
theorem reindex_exists_list_transvec_mul_mul_list_transvec_eq_diagonal (M : Matrix p p 𝕜)
@@ -942,7 +942,7 @@ theorem exists_list_transvec_mul_mul_list_transvec_eq_diagonal_aux (n : Type) [F
lean 3 declaration is
forall {n : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : Field.{u2} 𝕜] [_inst_2 : DecidableEq.{succ u1} n] [_inst_5 : Fintype.{u1} n] (M : Matrix.{u1, u1, u2} n n 𝕜), Exists.{succ (max u1 u2)} (List.{max u1 u2} (Matrix.TransvectionStruct.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u2} 𝕜 (Field.toEuclideanDomain.{u2} 𝕜 _inst_1)))) (fun (L : List.{max u1 u2} (Matrix.TransvectionStruct.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u2} 𝕜 (Field.toEuclideanDomain.{u2} 𝕜 _inst_1)))) => Exists.{succ (max u1 u2)} (List.{max u1 u2} (Matrix.TransvectionStruct.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u2} 𝕜 (Field.toEuclideanDomain.{u2} 𝕜 _inst_1)))) (fun (L' : List.{max u1 u2} (Matrix.TransvectionStruct.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u2} 𝕜 (Field.toEuclideanDomain.{u2} 𝕜 _inst_1)))) => Exists.{max (succ u1) (succ u2)} (n -> 𝕜) (fun (D : n -> 𝕜) => Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.mul.{u2, u1, u1, u1} n n n 𝕜 _inst_5 (Distrib.toHasMul.{u2} 𝕜 (Ring.toDistrib.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1)))))) (Matrix.mul.{u2, u1, u1, u1} n n n 𝕜 _inst_5 (Distrib.toHasMul.{u2} 𝕜 (Ring.toDistrib.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1)))))) (List.prod.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.hasMul.{u2, u1} n 𝕜 _inst_5 (Distrib.toHasMul.{u2} 𝕜 (Ring.toDistrib.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))))) (Matrix.hasOne.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (MulZeroClass.toHasZero.{u2} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))))) (AddMonoidWithOne.toOne.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))))) (List.map.{max u1 u2, max u1 u2} (Matrix.TransvectionStruct.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u2} 𝕜 (Field.toEuclideanDomain.{u2} 𝕜 _inst_1))) (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.TransvectionStruct.toMatrix.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u2} 𝕜 (Field.toEuclideanDomain.{u2} 𝕜 _inst_1))) L)) M) (List.prod.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.hasMul.{u2, u1} n 𝕜 _inst_5 (Distrib.toHasMul.{u2} 𝕜 (Ring.toDistrib.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))))) (Matrix.hasOne.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (MulZeroClass.toHasZero.{u2} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))))) (AddMonoidWithOne.toOne.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))))) (List.map.{max u1 u2, max u1 u2} (Matrix.TransvectionStruct.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u2} 𝕜 (Field.toEuclideanDomain.{u2} 𝕜 _inst_1))) (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.TransvectionStruct.toMatrix.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u2} 𝕜 (Field.toEuclideanDomain.{u2} 𝕜 _inst_1))) L'))) (Matrix.diagonal.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (MulZeroClass.toHasZero.{u2} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))))) D))))
but is expected to have type
- forall {n : Type.{u2}} {𝕜 : Type.{u1}} [_inst_1 : Field.{u1} 𝕜] [_inst_2 : DecidableEq.{succ u2} n] [_inst_5 : Fintype.{u2} n] (M : Matrix.{u2, u2, u1} n n 𝕜), Exists.{max (succ u2) (succ u1)} (List.{max u2 u1} (Matrix.TransvectionStruct.{u1, u2} n 𝕜)) (fun (L : List.{max u2 u1} (Matrix.TransvectionStruct.{u1, u2} n 𝕜)) => Exists.{max (succ u2) (succ u1)} (List.{max u2 u1} (Matrix.TransvectionStruct.{u1, u2} n 𝕜)) (fun (L' : List.{max u2 u1} (Matrix.TransvectionStruct.{u1, u2} n 𝕜)) => Exists.{max (succ u2) (succ u1)} (n -> 𝕜) (fun (D : n -> 𝕜) => Eq.{max (succ u2) (succ u1)} (Matrix.{u2, u2, u1} n n 𝕜) (Matrix.mul.{u1, u2, u2, u2} n n n 𝕜 _inst_5 (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) (Matrix.mul.{u1, u2, u2, u2} n n n 𝕜 _inst_5 (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) (List.prod.{max u2 u1} (Matrix.{u2, u2, u1} n n 𝕜) (Matrix.instMulMatrix.{u1, u2} n 𝕜 _inst_5 (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.one.{u1, u2} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))) (NonAssocRing.toOne.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (List.map.{max u2 u1, max u2 u1} (Matrix.TransvectionStruct.{u1, u2} n 𝕜) (Matrix.{u2, u2, u1} n n 𝕜) (Matrix.TransvectionStruct.toMatrix.{u1, u2} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u1} 𝕜 (Field.toEuclideanDomain.{u1} 𝕜 _inst_1))) L)) M) (List.prod.{max u2 u1} (Matrix.{u2, u2, u1} n n 𝕜) (Matrix.instMulMatrix.{u1, u2} n 𝕜 _inst_5 (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.one.{u1, u2} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))) (NonAssocRing.toOne.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (List.map.{max u2 u1, max u2 u1} (Matrix.TransvectionStruct.{u1, u2} n 𝕜) (Matrix.{u2, u2, u1} n n 𝕜) (Matrix.TransvectionStruct.toMatrix.{u1, u2} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u1} 𝕜 (Field.toEuclideanDomain.{u1} 𝕜 _inst_1))) L'))) (Matrix.diagonal.{u1, u2} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))) D))))
+ forall {n : Type.{u2}} {𝕜 : Type.{u1}} [_inst_1 : Field.{u1} 𝕜] [_inst_2 : DecidableEq.{succ u2} n] [_inst_5 : Fintype.{u2} n] (M : Matrix.{u2, u2, u1} n n 𝕜), Exists.{max (succ u2) (succ u1)} (List.{max u2 u1} (Matrix.TransvectionStruct.{u1, u2} n 𝕜)) (fun (L : List.{max u2 u1} (Matrix.TransvectionStruct.{u1, u2} n 𝕜)) => Exists.{max (succ u2) (succ u1)} (List.{max u2 u1} (Matrix.TransvectionStruct.{u1, u2} n 𝕜)) (fun (L' : List.{max u2 u1} (Matrix.TransvectionStruct.{u1, u2} n 𝕜)) => Exists.{max (succ u2) (succ u1)} (n -> 𝕜) (fun (D : n -> 𝕜) => Eq.{max (succ u2) (succ u1)} (Matrix.{u2, u2, u1} n n 𝕜) (Matrix.mul.{u1, u2, u2, u2} n n n 𝕜 _inst_5 (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) (Matrix.mul.{u1, u2, u2, u2} n n n 𝕜 _inst_5 (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) (List.prod.{max u2 u1} (Matrix.{u2, u2, u1} n n 𝕜) (Matrix.instMulMatrix.{u1, u2} n 𝕜 _inst_5 (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.one.{u1, u2} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))) (Semiring.toOne.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1))))) (List.map.{max u2 u1, max u2 u1} (Matrix.TransvectionStruct.{u1, u2} n 𝕜) (Matrix.{u2, u2, u1} n n 𝕜) (Matrix.TransvectionStruct.toMatrix.{u1, u2} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u1} 𝕜 (Field.toEuclideanDomain.{u1} 𝕜 _inst_1))) L)) M) (List.prod.{max u2 u1} (Matrix.{u2, u2, u1} n n 𝕜) (Matrix.instMulMatrix.{u1, u2} n 𝕜 _inst_5 (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.one.{u1, u2} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))) (Semiring.toOne.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1))))) (List.map.{max u2 u1, max u2 u1} (Matrix.TransvectionStruct.{u1, u2} n 𝕜) (Matrix.{u2, u2, u1} n n 𝕜) (Matrix.TransvectionStruct.toMatrix.{u1, u2} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u1} 𝕜 (Field.toEuclideanDomain.{u1} 𝕜 _inst_1))) L'))) (Matrix.diagonal.{u1, u2} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))) D))))
Case conversion may be inaccurate. Consider using '#align matrix.pivot.exists_list_transvec_mul_mul_list_transvec_eq_diagonal Matrix.Pivot.exists_list_transvec_mul_mul_list_transvec_eq_diagonalₓ'. -/
/-- Any matrix can be reduced to diagonal form by elementary operations. -/
theorem exists_list_transvec_mul_mul_list_transvec_eq_diagonal (M : Matrix n n 𝕜) :
@@ -958,7 +958,7 @@ theorem exists_list_transvec_mul_mul_list_transvec_eq_diagonal (M : Matrix n n
lean 3 declaration is
forall {n : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : Field.{u2} 𝕜] [_inst_2 : DecidableEq.{succ u1} n] [_inst_5 : Fintype.{u1} n] (M : Matrix.{u1, u1, u2} n n 𝕜), Exists.{succ (max u1 u2)} (List.{max u1 u2} (Matrix.TransvectionStruct.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u2} 𝕜 (Field.toEuclideanDomain.{u2} 𝕜 _inst_1)))) (fun (L : List.{max u1 u2} (Matrix.TransvectionStruct.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u2} 𝕜 (Field.toEuclideanDomain.{u2} 𝕜 _inst_1)))) => Exists.{succ (max u1 u2)} (List.{max u1 u2} (Matrix.TransvectionStruct.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u2} 𝕜 (Field.toEuclideanDomain.{u2} 𝕜 _inst_1)))) (fun (L' : List.{max u1 u2} (Matrix.TransvectionStruct.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u2} 𝕜 (Field.toEuclideanDomain.{u2} 𝕜 _inst_1)))) => Exists.{max (succ u1) (succ u2)} (n -> 𝕜) (fun (D : n -> 𝕜) => Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n 𝕜) M (Matrix.mul.{u2, u1, u1, u1} n n n 𝕜 _inst_5 (Distrib.toHasMul.{u2} 𝕜 (Ring.toDistrib.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1)))))) (Matrix.mul.{u2, u1, u1, u1} n n n 𝕜 _inst_5 (Distrib.toHasMul.{u2} 𝕜 (Ring.toDistrib.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1)))))) (List.prod.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.hasMul.{u2, u1} n 𝕜 _inst_5 (Distrib.toHasMul.{u2} 𝕜 (Ring.toDistrib.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))))) (Matrix.hasOne.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (MulZeroClass.toHasZero.{u2} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))))) (AddMonoidWithOne.toOne.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))))) (List.map.{max u1 u2, max u1 u2} (Matrix.TransvectionStruct.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u2} 𝕜 (Field.toEuclideanDomain.{u2} 𝕜 _inst_1))) (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.TransvectionStruct.toMatrix.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u2} 𝕜 (Field.toEuclideanDomain.{u2} 𝕜 _inst_1))) L)) (Matrix.diagonal.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (MulZeroClass.toHasZero.{u2} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))))) D)) (List.prod.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.hasMul.{u2, u1} n 𝕜 _inst_5 (Distrib.toHasMul.{u2} 𝕜 (Ring.toDistrib.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))))) (Matrix.hasOne.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (MulZeroClass.toHasZero.{u2} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))))) (AddMonoidWithOne.toOne.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))))) (List.map.{max u1 u2, max u1 u2} (Matrix.TransvectionStruct.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u2} 𝕜 (Field.toEuclideanDomain.{u2} 𝕜 _inst_1))) (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.TransvectionStruct.toMatrix.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u2} 𝕜 (Field.toEuclideanDomain.{u2} 𝕜 _inst_1))) L'))))))
but is expected to have type
- forall {n : Type.{u2}} {𝕜 : Type.{u1}} [_inst_1 : Field.{u1} 𝕜] [_inst_2 : DecidableEq.{succ u2} n] [_inst_5 : Fintype.{u2} n] (M : Matrix.{u2, u2, u1} n n 𝕜), Exists.{max (succ u2) (succ u1)} (List.{max u2 u1} (Matrix.TransvectionStruct.{u1, u2} n 𝕜)) (fun (L : List.{max u2 u1} (Matrix.TransvectionStruct.{u1, u2} n 𝕜)) => Exists.{max (succ u2) (succ u1)} (List.{max u2 u1} (Matrix.TransvectionStruct.{u1, u2} n 𝕜)) (fun (L' : List.{max u2 u1} (Matrix.TransvectionStruct.{u1, u2} n 𝕜)) => Exists.{max (succ u2) (succ u1)} (n -> 𝕜) (fun (D : n -> 𝕜) => Eq.{max (succ u2) (succ u1)} (Matrix.{u2, u2, u1} n n 𝕜) M (Matrix.mul.{u1, u2, u2, u2} n n n 𝕜 _inst_5 (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) (Matrix.mul.{u1, u2, u2, u2} n n n 𝕜 _inst_5 (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) (List.prod.{max u2 u1} (Matrix.{u2, u2, u1} n n 𝕜) (Matrix.instMulMatrix.{u1, u2} n 𝕜 _inst_5 (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.one.{u1, u2} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))) (NonAssocRing.toOne.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (List.map.{max u2 u1, max u2 u1} (Matrix.TransvectionStruct.{u1, u2} n 𝕜) (Matrix.{u2, u2, u1} n n 𝕜) (Matrix.TransvectionStruct.toMatrix.{u1, u2} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u1} 𝕜 (Field.toEuclideanDomain.{u1} 𝕜 _inst_1))) L)) (Matrix.diagonal.{u1, u2} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))) D)) (List.prod.{max u2 u1} (Matrix.{u2, u2, u1} n n 𝕜) (Matrix.instMulMatrix.{u1, u2} n 𝕜 _inst_5 (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.one.{u1, u2} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))) (NonAssocRing.toOne.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (List.map.{max u2 u1, max u2 u1} (Matrix.TransvectionStruct.{u1, u2} n 𝕜) (Matrix.{u2, u2, u1} n n 𝕜) (Matrix.TransvectionStruct.toMatrix.{u1, u2} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u1} 𝕜 (Field.toEuclideanDomain.{u1} 𝕜 _inst_1))) L'))))))
+ forall {n : Type.{u2}} {𝕜 : Type.{u1}} [_inst_1 : Field.{u1} 𝕜] [_inst_2 : DecidableEq.{succ u2} n] [_inst_5 : Fintype.{u2} n] (M : Matrix.{u2, u2, u1} n n 𝕜), Exists.{max (succ u2) (succ u1)} (List.{max u2 u1} (Matrix.TransvectionStruct.{u1, u2} n 𝕜)) (fun (L : List.{max u2 u1} (Matrix.TransvectionStruct.{u1, u2} n 𝕜)) => Exists.{max (succ u2) (succ u1)} (List.{max u2 u1} (Matrix.TransvectionStruct.{u1, u2} n 𝕜)) (fun (L' : List.{max u2 u1} (Matrix.TransvectionStruct.{u1, u2} n 𝕜)) => Exists.{max (succ u2) (succ u1)} (n -> 𝕜) (fun (D : n -> 𝕜) => Eq.{max (succ u2) (succ u1)} (Matrix.{u2, u2, u1} n n 𝕜) M (Matrix.mul.{u1, u2, u2, u2} n n n 𝕜 _inst_5 (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) (Matrix.mul.{u1, u2, u2, u2} n n n 𝕜 _inst_5 (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) (List.prod.{max u2 u1} (Matrix.{u2, u2, u1} n n 𝕜) (Matrix.instMulMatrix.{u1, u2} n 𝕜 _inst_5 (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.one.{u1, u2} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))) (Semiring.toOne.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1))))) (List.map.{max u2 u1, max u2 u1} (Matrix.TransvectionStruct.{u1, u2} n 𝕜) (Matrix.{u2, u2, u1} n n 𝕜) (Matrix.TransvectionStruct.toMatrix.{u1, u2} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u1} 𝕜 (Field.toEuclideanDomain.{u1} 𝕜 _inst_1))) L)) (Matrix.diagonal.{u1, u2} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))) D)) (List.prod.{max u2 u1} (Matrix.{u2, u2, u1} n n 𝕜) (Matrix.instMulMatrix.{u1, u2} n 𝕜 _inst_5 (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.one.{u1, u2} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))) (Semiring.toOne.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1))))) (List.map.{max u2 u1, max u2 u1} (Matrix.TransvectionStruct.{u1, u2} n 𝕜) (Matrix.{u2, u2, u1} n n 𝕜) (Matrix.TransvectionStruct.toMatrix.{u1, u2} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u1} 𝕜 (Field.toEuclideanDomain.{u1} 𝕜 _inst_1))) L'))))))
Case conversion may be inaccurate. Consider using '#align matrix.pivot.exists_list_transvec_mul_diagonal_mul_list_transvec Matrix.Pivot.exists_list_transvec_mul_diagonal_mul_list_transvecₓ'. -/
/-- Any matrix can be written as the product of transvections, a diagonal matrix, and
transvections.-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/86d04064ca33ee3d3405fbfc497d494fd2dd4796
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Sébastien Gouëzel
! This file was ported from Lean 3 source module linear_algebra.matrix.transvection
-! leanprover-community/mathlib commit 0e2aab2b0d521f060f62a14d2cf2e2c54e8491d6
+! leanprover-community/mathlib commit f2b757fc5c341d88741b9c4630b1e8ba973c5726
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -17,6 +17,9 @@ import Mathbin.Tactic.FieldSimp
/-!
# Transvections
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
Transvections are matrices of the form `1 + std_basis_matrix i j c`, where `std_basis_matrix i j c`
is the basic matrix with a `c` at position `(i, j)`. Multiplying by such a transvection on the left
(resp. on the right) amounts to adding `c` times the `j`-th row to to the `i`-th row
mathlib commit https://github.com/leanprover-community/mathlib/commit/fa78268d4d77cb2b2fbc89f0527e2e7807763780
@@ -80,6 +80,7 @@ section Transvection
variable {R n} (i j : n)
+#print Matrix.transvection /-
/-- The transvection matrix `transvection i j c` is equal to the identity plus `c` at position
`(i, j)`. Multiplying by it on the left (as in `transvection i j c ⬝ M`) corresponds to adding
`c` times the `j`-th line of `M` to its `i`-th line. Multiplying by it on the right corresponds
@@ -87,13 +88,26 @@ to adding `c` times the `i`-th column to the `j`-th column. -/
def transvection (c : R) : Matrix n n R :=
1 + Matrix.stdBasisMatrix i j c
#align matrix.transvection Matrix.transvection
+-/
+/- warning: matrix.transvection_zero -> Matrix.transvection_zero is a dubious translation:
+lean 3 declaration is
+ forall {n : Type.{u2}} {R : Type.{u1}} [_inst_2 : DecidableEq.{succ u2} n] [_inst_4 : CommRing.{u1} R] (i : n) (j : n), Eq.{succ (max u2 u1)} (Matrix.{u2, u2, u1} n n R) (Matrix.transvection.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 i j (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 (CommRing.toRing.{u1} R _inst_4)))))))))) (OfNat.ofNat.{max u2 u1} (Matrix.{u2, u2, u1} n n R) 1 (OfNat.mk.{max u2 u1} (Matrix.{u2, u2, u1} n n R) 1 (One.one.{max u2 u1} (Matrix.{u2, u2, u1} n n R) (Matrix.hasOne.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (AddMonoidWithOne.toOne.{u1} R (AddGroupWithOne.toAddMonoidWithOne.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (Ring.toAddCommGroupWithOne.{u1} R (CommRing.toRing.{u1} R _inst_4)))))))))
+but is expected to have type
+ forall {n : Type.{u1}} {R : Type.{u2}} [_inst_2 : DecidableEq.{succ u1} n] [_inst_4 : CommRing.{u2} R] (i : n) (j : n), Eq.{max (succ u2) (succ u1)} (Matrix.{u1, u1, u2} n n R) (Matrix.transvection.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 i j (OfNat.ofNat.{u2} R 0 (Zero.toOfNat0.{u2} R (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)))))) (OfNat.ofNat.{max u2 u1} (Matrix.{u1, u1, u2} n n R) 1 (One.toOfNat1.{max u2 u1} (Matrix.{u1, u1, u2} n n R) (Matrix.one.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (NonAssocRing.toOne.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4))))))
+Case conversion may be inaccurate. Consider using '#align matrix.transvection_zero Matrix.transvection_zeroₓ'. -/
@[simp]
theorem transvection_zero : transvection i j (0 : R) = 1 := by simp [transvection]
#align matrix.transvection_zero Matrix.transvection_zero
section
+/- warning: matrix.update_row_eq_transvection -> Matrix.updateRow_eq_transvection is a dubious translation:
+lean 3 declaration is
+ forall {n : Type.{u2}} {R : Type.{u1}} [_inst_2 : DecidableEq.{succ u2} n] [_inst_4 : CommRing.{u1} R] (i : n) (j : n) [_inst_5 : Finite.{succ u2} n] (c : R), Eq.{succ (max u2 u1)} (Matrix.{u2, u2, u1} n n R) (Matrix.updateRow.{u1, u2, u2} n n R (fun (a : n) (b : n) => _inst_2 a b) (OfNat.ofNat.{max u2 u1} (Matrix.{u2, u2, u1} n n R) 1 (OfNat.mk.{max u2 u1} (Matrix.{u2, u2, u1} n n R) 1 (One.one.{max u2 u1} (Matrix.{u2, u2, u1} n n R) (Matrix.hasOne.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (AddMonoidWithOne.toOne.{u1} R (AddGroupWithOne.toAddMonoidWithOne.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (Ring.toAddCommGroupWithOne.{u1} R (CommRing.toRing.{u1} R _inst_4))))))))) i (HAdd.hAdd.{max u2 u1, max u2 u1, max u2 u1} (n -> R) (n -> R) (n -> R) (instHAdd.{max u2 u1} (n -> R) (Pi.instAdd.{u2, u1} n (fun (ᾰ : n) => R) (fun (i : n) => Distrib.toHasAdd.{u1} R (Ring.toDistrib.{u1} R (CommRing.toRing.{u1} R _inst_4))))) (One.one.{max u2 u1} (Matrix.{u2, u2, u1} n n R) (Matrix.hasOne.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (AddMonoidWithOne.toOne.{u1} R (AddGroupWithOne.toAddMonoidWithOne.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (Ring.toAddCommGroupWithOne.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) i) (SMul.smul.{u1, max u2 u1} R (n -> R) (Function.hasSMul.{u2, u1, u1} n R R (Mul.toSMul.{u1} R (Distrib.toHasMul.{u1} R (Ring.toDistrib.{u1} R (CommRing.toRing.{u1} R _inst_4))))) c (One.one.{max u2 u1} (Matrix.{u2, u2, u1} n n R) (Matrix.hasOne.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (AddMonoidWithOne.toOne.{u1} R (AddGroupWithOne.toAddMonoidWithOne.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (Ring.toAddCommGroupWithOne.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) j)))) (Matrix.transvection.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 i j c)
+but is expected to have type
+ forall {n : Type.{u1}} {R : Type.{u2}} [_inst_2 : DecidableEq.{succ u1} n] [_inst_4 : CommRing.{u2} R] (i : n) (j : n) [_inst_5 : Finite.{succ u1} n] (c : R), Eq.{max (succ u2) (succ u1)} (Matrix.{u1, u1, u2} n n R) (Matrix.updateRow.{u2, u1, u1} n n R (fun (a : n) (b : n) => _inst_2 a b) (OfNat.ofNat.{max u2 u1} (Matrix.{u1, u1, u2} n n R) 1 (One.toOfNat1.{max u2 u1} (Matrix.{u1, u1, u2} n n R) (Matrix.one.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (NonAssocRing.toOne.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4)))))) i (HAdd.hAdd.{max u2 u1, max u2 u1, max u2 u1} (n -> R) (n -> R) (n -> R) (instHAdd.{max u2 u1} (n -> R) (Pi.instAdd.{u1, u2} n (fun (ᾰ : n) => R) (fun (i : n) => Distrib.toAdd.{u2} R (NonUnitalNonAssocSemiring.toDistrib.{u2} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4)))))))) (OfNat.ofNat.{max u2 u1} (Matrix.{u1, u1, u2} n n R) 1 (One.toOfNat1.{max u2 u1} (Matrix.{u1, u1, u2} n n R) (Matrix.one.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (NonAssocRing.toOne.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4))))) i) (HSMul.hSMul.{u2, max u2 u1, max u2 u1} R (n -> R) (n -> R) (instHSMul.{u2, max u2 u1} R (n -> R) (Pi.instSMul.{u1, u2, u2} n R (fun (a._@.Mathlib.Data.Matrix.Basic._hyg.12 : n) => R) (fun (i : n) => Algebra.toSMul.{u2, u2} R R (CommRing.toCommSemiring.{u2} R _inst_4) (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) (Algebra.id.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))))) c (OfNat.ofNat.{max u2 u1} (Matrix.{u1, u1, u2} n n R) 1 (One.toOfNat1.{max u2 u1} (Matrix.{u1, u1, u2} n n R) (Matrix.one.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (NonAssocRing.toOne.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4))))) j)))) (Matrix.transvection.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 i j c)
+Case conversion may be inaccurate. Consider using '#align matrix.update_row_eq_transvection Matrix.updateRow_eq_transvectionₓ'. -/
/-- A transvection matrix is obtained from the identity by adding `c` times the `j`-th row to
the `i`-th row. -/
theorem updateRow_eq_transvection [Finite n] (c : R) :
@@ -118,33 +132,69 @@ theorem updateRow_eq_transvection [Finite n] (c : R) :
variable [Fintype n]
+/- warning: matrix.transvection_mul_transvection_same -> Matrix.transvection_mul_transvection_same is a dubious translation:
+lean 3 declaration is
+ forall {n : Type.{u2}} {R : Type.{u1}} [_inst_2 : DecidableEq.{succ u2} n] [_inst_4 : CommRing.{u1} R] (i : n) (j : n) [_inst_5 : Fintype.{u2} n], (Ne.{succ u2} n i j) -> (forall (c : R) (d : R), Eq.{succ (max u2 u1)} (Matrix.{u2, u2, u1} n n R) (Matrix.mul.{u1, u2, u2, u2} n n n R _inst_5 (Distrib.toHasMul.{u1} R (Ring.toDistrib.{u1} R (CommRing.toRing.{u1} R _inst_4))) (AddCommGroup.toAddCommMonoid.{u1} R (NonUnitalNonAssocRing.toAddCommGroup.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4))))) (Matrix.transvection.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 i j c) (Matrix.transvection.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 i j d)) (Matrix.transvection.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 i j (HAdd.hAdd.{u1, u1, u1} R R R (instHAdd.{u1} R (Distrib.toHasAdd.{u1} R (Ring.toDistrib.{u1} R (CommRing.toRing.{u1} R _inst_4)))) c d)))
+but is expected to have type
+ forall {n : Type.{u1}} {R : Type.{u2}} [_inst_2 : DecidableEq.{succ u1} n] [_inst_4 : CommRing.{u2} R] (i : n) (j : n) [_inst_5 : Fintype.{u1} n], (Ne.{succ u1} n i j) -> (forall (c : R) (d : R), Eq.{max (succ u2) (succ u1)} (Matrix.{u1, u1, u2} n n R) (Matrix.mul.{u2, u1, u1, u1} n n n R _inst_5 (NonUnitalNonAssocRing.toMul.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4))))) (Matrix.transvection.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 i j c) (Matrix.transvection.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 i j d)) (Matrix.transvection.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 i j (HAdd.hAdd.{u2, u2, u2} R R R (instHAdd.{u2} R (Distrib.toAdd.{u2} R (NonUnitalNonAssocSemiring.toDistrib.{u2} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4))))))) c d)))
+Case conversion may be inaccurate. Consider using '#align matrix.transvection_mul_transvection_same Matrix.transvection_mul_transvection_sameₓ'. -/
theorem transvection_mul_transvection_same (h : i ≠ j) (c d : R) :
transvection i j c ⬝ transvection i j d = transvection i j (c + d) := by
simp [transvection, Matrix.add_mul, Matrix.mul_add, h, h.symm, add_smul, add_assoc,
std_basis_matrix_add]
#align matrix.transvection_mul_transvection_same Matrix.transvection_mul_transvection_same
+/- warning: matrix.transvection_mul_apply_same -> Matrix.transvection_mul_apply_same is a dubious translation:
+lean 3 declaration is
+ forall {n : Type.{u2}} {R : Type.{u1}} [_inst_2 : DecidableEq.{succ u2} n] [_inst_4 : CommRing.{u1} R] (i : n) (j : n) [_inst_5 : Fintype.{u2} n] (b : n) (c : R) (M : Matrix.{u2, u2, u1} n n R), Eq.{succ u1} R (Matrix.mul.{u1, u2, u2, u2} n n n R _inst_5 (Distrib.toHasMul.{u1} R (Ring.toDistrib.{u1} R (CommRing.toRing.{u1} R _inst_4))) (AddCommGroup.toAddCommMonoid.{u1} R (NonUnitalNonAssocRing.toAddCommGroup.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4))))) (Matrix.transvection.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 i j c) M i b) (HAdd.hAdd.{u1, u1, u1} R R R (instHAdd.{u1} R (Distrib.toHasAdd.{u1} R (Ring.toDistrib.{u1} R (CommRing.toRing.{u1} R _inst_4)))) (M i b) (HMul.hMul.{u1, u1, u1} R R R (instHMul.{u1} R (Distrib.toHasMul.{u1} R (Ring.toDistrib.{u1} R (CommRing.toRing.{u1} R _inst_4)))) c (M j b)))
+but is expected to have type
+ forall {n : Type.{u1}} {R : Type.{u2}} [_inst_2 : DecidableEq.{succ u1} n] [_inst_4 : CommRing.{u2} R] (i : n) (j : n) [_inst_5 : Fintype.{u1} n] (b : n) (c : R) (M : Matrix.{u1, u1, u2} n n R), Eq.{succ u2} R (Matrix.mul.{u2, u1, u1, u1} n n n R _inst_5 (NonUnitalNonAssocRing.toMul.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4))))) (Matrix.transvection.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 i j c) M i b) (HAdd.hAdd.{u2, u2, u2} R R R (instHAdd.{u2} R (Distrib.toAdd.{u2} R (NonUnitalNonAssocSemiring.toDistrib.{u2} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4))))))) (M i b) (HMul.hMul.{u2, u2, u2} R R R (instHMul.{u2} R (NonUnitalNonAssocRing.toMul.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4))))) c (M j b)))
+Case conversion may be inaccurate. Consider using '#align matrix.transvection_mul_apply_same Matrix.transvection_mul_apply_sameₓ'. -/
@[simp]
theorem transvection_mul_apply_same (b : n) (c : R) (M : Matrix n n R) :
(transvection i j c ⬝ M) i b = M i b + c * M j b := by simp [transvection, Matrix.add_mul]
#align matrix.transvection_mul_apply_same Matrix.transvection_mul_apply_same
+/- warning: matrix.mul_transvection_apply_same -> Matrix.mul_transvection_apply_same is a dubious translation:
+lean 3 declaration is
+ forall {n : Type.{u2}} {R : Type.{u1}} [_inst_2 : DecidableEq.{succ u2} n] [_inst_4 : CommRing.{u1} R] (i : n) (j : n) [_inst_5 : Fintype.{u2} n] (a : n) (c : R) (M : Matrix.{u2, u2, u1} n n R), Eq.{succ u1} R (Matrix.mul.{u1, u2, u2, u2} n n n R _inst_5 (Distrib.toHasMul.{u1} R (Ring.toDistrib.{u1} R (CommRing.toRing.{u1} R _inst_4))) (AddCommGroup.toAddCommMonoid.{u1} R (NonUnitalNonAssocRing.toAddCommGroup.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4))))) M (Matrix.transvection.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 i j c) a j) (HAdd.hAdd.{u1, u1, u1} R R R (instHAdd.{u1} R (Distrib.toHasAdd.{u1} R (Ring.toDistrib.{u1} R (CommRing.toRing.{u1} R _inst_4)))) (M a j) (HMul.hMul.{u1, u1, u1} R R R (instHMul.{u1} R (Distrib.toHasMul.{u1} R (Ring.toDistrib.{u1} R (CommRing.toRing.{u1} R _inst_4)))) c (M a i)))
+but is expected to have type
+ forall {n : Type.{u1}} {R : Type.{u2}} [_inst_2 : DecidableEq.{succ u1} n] [_inst_4 : CommRing.{u2} R] (i : n) (j : n) [_inst_5 : Fintype.{u1} n] (a : n) (c : R) (M : Matrix.{u1, u1, u2} n n R), Eq.{succ u2} R (Matrix.mul.{u2, u1, u1, u1} n n n R _inst_5 (NonUnitalNonAssocRing.toMul.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4))))) M (Matrix.transvection.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 i j c) a j) (HAdd.hAdd.{u2, u2, u2} R R R (instHAdd.{u2} R (Distrib.toAdd.{u2} R (NonUnitalNonAssocSemiring.toDistrib.{u2} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4))))))) (M a j) (HMul.hMul.{u2, u2, u2} R R R (instHMul.{u2} R (NonUnitalNonAssocRing.toMul.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4))))) c (M a i)))
+Case conversion may be inaccurate. Consider using '#align matrix.mul_transvection_apply_same Matrix.mul_transvection_apply_sameₓ'. -/
@[simp]
theorem mul_transvection_apply_same (a : n) (c : R) (M : Matrix n n R) :
(M ⬝ transvection i j c) a j = M a j + c * M a i := by
simp [transvection, Matrix.mul_add, mul_comm]
#align matrix.mul_transvection_apply_same Matrix.mul_transvection_apply_same
+/- warning: matrix.transvection_mul_apply_of_ne -> Matrix.transvection_mul_apply_of_ne is a dubious translation:
+lean 3 declaration is
+ forall {n : Type.{u2}} {R : Type.{u1}} [_inst_2 : DecidableEq.{succ u2} n] [_inst_4 : CommRing.{u1} R] (i : n) (j : n) [_inst_5 : Fintype.{u2} n] (a : n) (b : n), (Ne.{succ u2} n a i) -> (forall (c : R) (M : Matrix.{u2, u2, u1} n n R), Eq.{succ u1} R (Matrix.mul.{u1, u2, u2, u2} n n n R _inst_5 (Distrib.toHasMul.{u1} R (Ring.toDistrib.{u1} R (CommRing.toRing.{u1} R _inst_4))) (AddCommGroup.toAddCommMonoid.{u1} R (NonUnitalNonAssocRing.toAddCommGroup.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4))))) (Matrix.transvection.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 i j c) M a b) (M a b))
+but is expected to have type
+ forall {n : Type.{u1}} {R : Type.{u2}} [_inst_2 : DecidableEq.{succ u1} n] [_inst_4 : CommRing.{u2} R] (i : n) (j : n) [_inst_5 : Fintype.{u1} n] (a : n) (b : n), (Ne.{succ u1} n a i) -> (forall (c : R) (M : Matrix.{u1, u1, u2} n n R), Eq.{succ u2} R (Matrix.mul.{u2, u1, u1, u1} n n n R _inst_5 (NonUnitalNonAssocRing.toMul.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4))))) (Matrix.transvection.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 i j c) M a b) (M a b))
+Case conversion may be inaccurate. Consider using '#align matrix.transvection_mul_apply_of_ne Matrix.transvection_mul_apply_of_neₓ'. -/
@[simp]
theorem transvection_mul_apply_of_ne (a b : n) (ha : a ≠ i) (c : R) (M : Matrix n n R) :
(transvection i j c ⬝ M) a b = M a b := by simp [transvection, Matrix.add_mul, ha]
#align matrix.transvection_mul_apply_of_ne Matrix.transvection_mul_apply_of_ne
+/- warning: matrix.mul_transvection_apply_of_ne -> Matrix.mul_transvection_apply_of_ne is a dubious translation:
+lean 3 declaration is
+ forall {n : Type.{u2}} {R : Type.{u1}} [_inst_2 : DecidableEq.{succ u2} n] [_inst_4 : CommRing.{u1} R] (i : n) (j : n) [_inst_5 : Fintype.{u2} n] (a : n) (b : n), (Ne.{succ u2} n b j) -> (forall (c : R) (M : Matrix.{u2, u2, u1} n n R), Eq.{succ u1} R (Matrix.mul.{u1, u2, u2, u2} n n n R _inst_5 (Distrib.toHasMul.{u1} R (Ring.toDistrib.{u1} R (CommRing.toRing.{u1} R _inst_4))) (AddCommGroup.toAddCommMonoid.{u1} R (NonUnitalNonAssocRing.toAddCommGroup.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4))))) M (Matrix.transvection.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 i j c) a b) (M a b))
+but is expected to have type
+ forall {n : Type.{u1}} {R : Type.{u2}} [_inst_2 : DecidableEq.{succ u1} n] [_inst_4 : CommRing.{u2} R] (i : n) (j : n) [_inst_5 : Fintype.{u1} n] (a : n) (b : n), (Ne.{succ u1} n b j) -> (forall (c : R) (M : Matrix.{u1, u1, u2} n n R), Eq.{succ u2} R (Matrix.mul.{u2, u1, u1, u1} n n n R _inst_5 (NonUnitalNonAssocRing.toMul.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4))))) M (Matrix.transvection.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 i j c) a b) (M a b))
+Case conversion may be inaccurate. Consider using '#align matrix.mul_transvection_apply_of_ne Matrix.mul_transvection_apply_of_neₓ'. -/
@[simp]
theorem mul_transvection_apply_of_ne (a b : n) (hb : b ≠ j) (c : R) (M : Matrix n n R) :
(M ⬝ transvection i j c) a b = M a b := by simp [transvection, Matrix.mul_add, hb]
#align matrix.mul_transvection_apply_of_ne Matrix.mul_transvection_apply_of_ne
+/- warning: matrix.det_transvection_of_ne -> Matrix.det_transvection_of_ne is a dubious translation:
+lean 3 declaration is
+ forall {n : Type.{u2}} {R : Type.{u1}} [_inst_2 : DecidableEq.{succ u2} n] [_inst_4 : CommRing.{u1} R] (i : n) (j : n) [_inst_5 : Fintype.{u2} n], (Ne.{succ u2} n i j) -> (forall (c : R), Eq.{succ u1} R (Matrix.det.{u1, u2} n (fun (a : n) (b : n) => _inst_2 a b) _inst_5 R _inst_4 (Matrix.transvection.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 i j c)) (OfNat.ofNat.{u1} R 1 (OfNat.mk.{u1} R 1 (One.one.{u1} R (AddMonoidWithOne.toOne.{u1} R (AddGroupWithOne.toAddMonoidWithOne.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (Ring.toAddCommGroupWithOne.{u1} R (CommRing.toRing.{u1} R _inst_4)))))))))
+but is expected to have type
+ forall {n : Type.{u1}} {R : Type.{u2}} [_inst_2 : DecidableEq.{succ u1} n] [_inst_4 : CommRing.{u2} R] (i : n) (j : n) [_inst_5 : Fintype.{u1} n], (Ne.{succ u1} n i j) -> (forall (c : R), Eq.{succ u2} R (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_5 R _inst_4 (Matrix.transvection.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 i j c)) (OfNat.ofNat.{u2} R 1 (One.toOfNat1.{u2} R (NonAssocRing.toOne.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4))))))
+Case conversion may be inaccurate. Consider using '#align matrix.det_transvection_of_ne Matrix.det_transvection_of_neₓ'. -/
@[simp]
theorem det_transvection_of_ne (h : i ≠ j) (c : R) : det (transvection i j c) = 1 := by
rw [← update_row_eq_transvection i j, det_update_row_add_smul_self _ h, det_one]
@@ -154,6 +204,12 @@ end
variable (R n)
+/- warning: matrix.transvection_struct -> Matrix.TransvectionStruct is a dubious translation:
+lean 3 declaration is
+ forall (n : Type.{u2}) (R : Type.{u1}) [_inst_2 : DecidableEq.{succ u2} n] [_inst_4 : CommRing.{u1} R], Sort.{max (succ u2) (succ u1)}
+but is expected to have type
+ Type.{u2} -> Type.{u1} -> Sort.{max (succ u2) (succ u1)}
+Case conversion may be inaccurate. Consider using '#align matrix.transvection_struct Matrix.TransvectionStructₓ'. -/
/-- A structure containing all the information from which one can build a nontrivial transvection.
This structure is easier to manipulate than transvections as one has a direct access to all the
relevant fields. -/
@@ -173,22 +229,42 @@ namespace TransvectionStruct
variable {R n}
+#print Matrix.TransvectionStruct.toMatrix /-
/-- Associating to a `transvection_struct` the corresponding transvection matrix. -/
def toMatrix (t : TransvectionStruct n R) : Matrix n n R :=
transvection t.i t.j t.c
#align matrix.transvection_struct.to_matrix Matrix.TransvectionStruct.toMatrix
+-/
+/- warning: matrix.transvection_struct.to_matrix_mk -> Matrix.TransvectionStruct.toMatrix_mk is a dubious translation:
+lean 3 declaration is
+ forall {n : Type.{u2}} {R : Type.{u1}} [_inst_2 : DecidableEq.{succ u2} n] [_inst_4 : CommRing.{u1} R] (i : n) (j : n) (hij : Ne.{succ u2} n i j) (c : R), Eq.{succ (max u2 u1)} (Matrix.{u2, u2, u1} n n R) (Matrix.TransvectionStruct.toMatrix.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 (Matrix.TransvectionStruct.mk.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 i j hij c)) (Matrix.transvection.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 i j c)
+but is expected to have type
+ forall {n : Type.{u1}} {R : Type.{u2}} [_inst_2 : DecidableEq.{succ u1} n] [_inst_4 : CommRing.{u2} R] (i : n) (j : n) (hij : Ne.{succ u1} n i j) (c : R), Eq.{max (succ u2) (succ u1)} (Matrix.{u1, u1, u2} n n R) (Matrix.TransvectionStruct.toMatrix.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 (Matrix.TransvectionStruct.mk.{u2, u1} n R i j hij c)) (Matrix.transvection.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 i j c)
+Case conversion may be inaccurate. Consider using '#align matrix.transvection_struct.to_matrix_mk Matrix.TransvectionStruct.toMatrix_mkₓ'. -/
@[simp]
theorem toMatrix_mk (i j : n) (hij : i ≠ j) (c : R) :
TransvectionStruct.toMatrix ⟨i, j, hij, c⟩ = transvection i j c :=
rfl
#align matrix.transvection_struct.to_matrix_mk Matrix.TransvectionStruct.toMatrix_mk
+/- warning: matrix.transvection_struct.det -> Matrix.TransvectionStruct.det is a dubious translation:
+lean 3 declaration is
+ forall {n : Type.{u2}} {R : Type.{u1}} [_inst_2 : DecidableEq.{succ u2} n] [_inst_4 : CommRing.{u1} R] [_inst_5 : Fintype.{u2} n] (t : Matrix.TransvectionStruct.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4), Eq.{succ u1} R (Matrix.det.{u1, u2} n (fun (a : n) (b : n) => _inst_2 a b) _inst_5 R _inst_4 (Matrix.TransvectionStruct.toMatrix.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 t)) (OfNat.ofNat.{u1} R 1 (OfNat.mk.{u1} R 1 (One.one.{u1} R (AddMonoidWithOne.toOne.{u1} R (AddGroupWithOne.toAddMonoidWithOne.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (Ring.toAddCommGroupWithOne.{u1} R (CommRing.toRing.{u1} R _inst_4))))))))
+but is expected to have type
+ forall {n : Type.{u1}} {R : Type.{u2}} [_inst_2 : DecidableEq.{succ u1} n] [_inst_4 : CommRing.{u2} R] [_inst_5 : Fintype.{u1} n] (t : Matrix.TransvectionStruct.{u2, u1} n R), Eq.{succ u2} R (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_5 R _inst_4 (Matrix.TransvectionStruct.toMatrix.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 t)) (OfNat.ofNat.{u2} R 1 (One.toOfNat1.{u2} R (NonAssocRing.toOne.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4)))))
+Case conversion may be inaccurate. Consider using '#align matrix.transvection_struct.det Matrix.TransvectionStruct.detₓ'. -/
@[simp]
protected theorem det [Fintype n] (t : TransvectionStruct n R) : det t.toMatrix = 1 :=
det_transvection_of_ne _ _ t.hij _
#align matrix.transvection_struct.det Matrix.TransvectionStruct.det
+/- warning: matrix.transvection_struct.det_to_matrix_prod -> Matrix.TransvectionStruct.det_toMatrix_prod is a dubious translation:
+lean 3 declaration is
+ forall {n : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : Field.{u2} 𝕜] [_inst_2 : DecidableEq.{succ u1} n] [_inst_5 : Fintype.{u1} n] (L : List.{max u1 u2} (Matrix.TransvectionStruct.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u2} 𝕜 (Field.toEuclideanDomain.{u2} 𝕜 _inst_1)))), Eq.{succ u2} 𝕜 (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_5 𝕜 (EuclideanDomain.toCommRing.{u2} 𝕜 (Field.toEuclideanDomain.{u2} 𝕜 _inst_1)) (List.prod.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.hasMul.{u2, u1} n 𝕜 _inst_5 (Distrib.toHasMul.{u2} 𝕜 (Ring.toDistrib.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))))) (Matrix.hasOne.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (MulZeroClass.toHasZero.{u2} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))))) (AddMonoidWithOne.toOne.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))))) (List.map.{max u1 u2, max u1 u2} (Matrix.TransvectionStruct.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u2} 𝕜 (Field.toEuclideanDomain.{u2} 𝕜 _inst_1))) (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.TransvectionStruct.toMatrix.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u2} 𝕜 (Field.toEuclideanDomain.{u2} 𝕜 _inst_1))) L))) (OfNat.ofNat.{u2} 𝕜 1 (OfNat.mk.{u2} 𝕜 1 (One.one.{u2} 𝕜 (AddMonoidWithOne.toOne.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1)))))))))
+but is expected to have type
+ forall {n : Type.{u2}} {𝕜 : Type.{u1}} [_inst_1 : Field.{u1} 𝕜] [_inst_2 : DecidableEq.{succ u2} n] [_inst_5 : Fintype.{u2} n] (L : List.{max u2 u1} (Matrix.TransvectionStruct.{u1, u2} n 𝕜)), Eq.{succ u1} 𝕜 (Matrix.det.{u1, u2} n (fun (a : n) (b : n) => _inst_2 a b) _inst_5 𝕜 (EuclideanDomain.toCommRing.{u1} 𝕜 (Field.toEuclideanDomain.{u1} 𝕜 _inst_1)) (List.prod.{max u2 u1} (Matrix.{u2, u2, u1} n n 𝕜) (Matrix.instMulMatrix.{u1, u2} n 𝕜 _inst_5 (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.one.{u1, u2} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))) (NonAssocRing.toOne.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (List.map.{max u2 u1, max u2 u1} (Matrix.TransvectionStruct.{u1, u2} n 𝕜) (Matrix.{u2, u2, u1} n n 𝕜) (Matrix.TransvectionStruct.toMatrix.{u1, u2} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u1} 𝕜 (Field.toEuclideanDomain.{u1} 𝕜 _inst_1))) L))) (OfNat.ofNat.{u1} 𝕜 1 (One.toOfNat1.{u1} 𝕜 (NonAssocRing.toOne.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))
+Case conversion may be inaccurate. Consider using '#align matrix.transvection_struct.det_to_matrix_prod Matrix.TransvectionStruct.det_toMatrix_prodₓ'. -/
@[simp]
theorem det_toMatrix_prod [Fintype n] (L : List (TransvectionStruct n 𝕜)) :
det (L.map toMatrix).Prod = 1 := by
@@ -197,6 +273,12 @@ theorem det_toMatrix_prod [Fintype n] (L : List (TransvectionStruct n 𝕜)) :
· simp [IH]
#align matrix.transvection_struct.det_to_matrix_prod Matrix.TransvectionStruct.det_toMatrix_prod
+/- warning: matrix.transvection_struct.inv -> Matrix.TransvectionStruct.inv is a dubious translation:
+lean 3 declaration is
+ forall {n : Type.{u2}} {R : Type.{u1}} [_inst_2 : DecidableEq.{succ u2} n] [_inst_4 : CommRing.{u1} R], (Matrix.TransvectionStruct.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) -> (Matrix.TransvectionStruct.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4)
+but is expected to have type
+ forall {n : Type.{u2}} {R : Type.{u1}} [_inst_2 : CommRing.{u1} R], (Matrix.TransvectionStruct.{u1, u2} n R) -> (Matrix.TransvectionStruct.{u1, u2} n R)
+Case conversion may be inaccurate. Consider using '#align matrix.transvection_struct.inv Matrix.TransvectionStruct.invₓ'. -/
/-- The inverse of a `transvection_struct`, designed so that `t.inv.to_matrix` is the inverse of
`t.to_matrix`. -/
@[simps]
@@ -212,18 +294,36 @@ section
variable [Fintype n]
+/- warning: matrix.transvection_struct.inv_mul -> Matrix.TransvectionStruct.inv_mul is a dubious translation:
+lean 3 declaration is
+ forall {n : Type.{u2}} {R : Type.{u1}} [_inst_2 : DecidableEq.{succ u2} n] [_inst_4 : CommRing.{u1} R] [_inst_5 : Fintype.{u2} n] (t : Matrix.TransvectionStruct.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4), Eq.{succ (max u2 u1)} (Matrix.{u2, u2, u1} n n R) (Matrix.mul.{u1, u2, u2, u2} n n n R _inst_5 (Distrib.toHasMul.{u1} R (Ring.toDistrib.{u1} R (CommRing.toRing.{u1} R _inst_4))) (AddCommGroup.toAddCommMonoid.{u1} R (NonUnitalNonAssocRing.toAddCommGroup.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4))))) (Matrix.TransvectionStruct.toMatrix.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 (Matrix.TransvectionStruct.inv.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 t)) (Matrix.TransvectionStruct.toMatrix.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 t)) (OfNat.ofNat.{max u2 u1} (Matrix.{u2, u2, u1} n n R) 1 (OfNat.mk.{max u2 u1} (Matrix.{u2, u2, u1} n n R) 1 (One.one.{max u2 u1} (Matrix.{u2, u2, u1} n n R) (Matrix.hasOne.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (AddMonoidWithOne.toOne.{u1} R (AddGroupWithOne.toAddMonoidWithOne.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (Ring.toAddCommGroupWithOne.{u1} R (CommRing.toRing.{u1} R _inst_4)))))))))
+but is expected to have type
+ forall {n : Type.{u1}} {R : Type.{u2}} [_inst_2 : DecidableEq.{succ u1} n] [_inst_4 : CommRing.{u2} R] [_inst_5 : Fintype.{u1} n] (t : Matrix.TransvectionStruct.{u2, u1} n R), Eq.{max (succ u2) (succ u1)} (Matrix.{u1, u1, u2} n n R) (Matrix.mul.{u2, u1, u1, u1} n n n R _inst_5 (NonUnitalNonAssocRing.toMul.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4))))) (Matrix.TransvectionStruct.toMatrix.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 (Matrix.TransvectionStruct.inv.{u2, u1} n R _inst_4 t)) (Matrix.TransvectionStruct.toMatrix.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 t)) (OfNat.ofNat.{max u2 u1} (Matrix.{u1, u1, u2} n n R) 1 (One.toOfNat1.{max u2 u1} (Matrix.{u1, u1, u2} n n R) (Matrix.one.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (NonAssocRing.toOne.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4))))))
+Case conversion may be inaccurate. Consider using '#align matrix.transvection_struct.inv_mul Matrix.TransvectionStruct.inv_mulₓ'. -/
theorem inv_mul (t : TransvectionStruct n R) : t.inv.toMatrix ⬝ t.toMatrix = 1 :=
by
rcases t with ⟨⟩
simp [to_matrix, transvection_mul_transvection_same, t_hij]
#align matrix.transvection_struct.inv_mul Matrix.TransvectionStruct.inv_mul
+/- warning: matrix.transvection_struct.mul_inv -> Matrix.TransvectionStruct.mul_inv is a dubious translation:
+lean 3 declaration is
+ forall {n : Type.{u2}} {R : Type.{u1}} [_inst_2 : DecidableEq.{succ u2} n] [_inst_4 : CommRing.{u1} R] [_inst_5 : Fintype.{u2} n] (t : Matrix.TransvectionStruct.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4), Eq.{succ (max u2 u1)} (Matrix.{u2, u2, u1} n n R) (Matrix.mul.{u1, u2, u2, u2} n n n R _inst_5 (Distrib.toHasMul.{u1} R (Ring.toDistrib.{u1} R (CommRing.toRing.{u1} R _inst_4))) (AddCommGroup.toAddCommMonoid.{u1} R (NonUnitalNonAssocRing.toAddCommGroup.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4))))) (Matrix.TransvectionStruct.toMatrix.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 t) (Matrix.TransvectionStruct.toMatrix.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 (Matrix.TransvectionStruct.inv.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 t))) (OfNat.ofNat.{max u2 u1} (Matrix.{u2, u2, u1} n n R) 1 (OfNat.mk.{max u2 u1} (Matrix.{u2, u2, u1} n n R) 1 (One.one.{max u2 u1} (Matrix.{u2, u2, u1} n n R) (Matrix.hasOne.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (AddMonoidWithOne.toOne.{u1} R (AddGroupWithOne.toAddMonoidWithOne.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (Ring.toAddCommGroupWithOne.{u1} R (CommRing.toRing.{u1} R _inst_4)))))))))
+but is expected to have type
+ forall {n : Type.{u1}} {R : Type.{u2}} [_inst_2 : DecidableEq.{succ u1} n] [_inst_4 : CommRing.{u2} R] [_inst_5 : Fintype.{u1} n] (t : Matrix.TransvectionStruct.{u2, u1} n R), Eq.{max (succ u2) (succ u1)} (Matrix.{u1, u1, u2} n n R) (Matrix.mul.{u2, u1, u1, u1} n n n R _inst_5 (NonUnitalNonAssocRing.toMul.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4))))) (Matrix.TransvectionStruct.toMatrix.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 t) (Matrix.TransvectionStruct.toMatrix.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 (Matrix.TransvectionStruct.inv.{u2, u1} n R _inst_4 t))) (OfNat.ofNat.{max u2 u1} (Matrix.{u1, u1, u2} n n R) 1 (One.toOfNat1.{max u2 u1} (Matrix.{u1, u1, u2} n n R) (Matrix.one.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (NonAssocRing.toOne.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4))))))
+Case conversion may be inaccurate. Consider using '#align matrix.transvection_struct.mul_inv Matrix.TransvectionStruct.mul_invₓ'. -/
theorem mul_inv (t : TransvectionStruct n R) : t.toMatrix ⬝ t.inv.toMatrix = 1 :=
by
rcases t with ⟨⟩
simp [to_matrix, transvection_mul_transvection_same, t_hij]
#align matrix.transvection_struct.mul_inv Matrix.TransvectionStruct.mul_inv
+/- warning: matrix.transvection_struct.reverse_inv_prod_mul_prod -> Matrix.TransvectionStruct.reverse_inv_prod_mul_prod is a dubious translation:
+lean 3 declaration is
+ forall {n : Type.{u2}} {R : Type.{u1}} [_inst_2 : DecidableEq.{succ u2} n] [_inst_4 : CommRing.{u1} R] [_inst_5 : Fintype.{u2} n] (L : List.{max u2 u1} (Matrix.TransvectionStruct.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4)), Eq.{succ (max u2 u1)} (Matrix.{u2, u2, u1} n n R) (Matrix.mul.{u1, u2, u2, u2} n n n R _inst_5 (Distrib.toHasMul.{u1} R (Ring.toDistrib.{u1} R (CommRing.toRing.{u1} R _inst_4))) (AddCommGroup.toAddCommMonoid.{u1} R (NonUnitalNonAssocRing.toAddCommGroup.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4))))) (List.prod.{max u2 u1} (Matrix.{u2, u2, u1} n n R) (Matrix.hasMul.{u1, u2} n R _inst_5 (Distrib.toHasMul.{u1} R (Ring.toDistrib.{u1} R (CommRing.toRing.{u1} R _inst_4))) (AddCommGroup.toAddCommMonoid.{u1} R (NonUnitalNonAssocRing.toAddCommGroup.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (Matrix.hasOne.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (AddMonoidWithOne.toOne.{u1} R (AddGroupWithOne.toAddMonoidWithOne.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (Ring.toAddCommGroupWithOne.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (List.map.{max u2 u1, max u2 u1} (Matrix.TransvectionStruct.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) (Matrix.{u2, u2, u1} n n R) (Function.comp.{succ (max u2 u1), max (succ u2) (succ u1), succ (max u2 u1)} (Matrix.TransvectionStruct.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) (Matrix.TransvectionStruct.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) (Matrix.{u2, u2, u1} n n R) (Matrix.TransvectionStruct.toMatrix.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) (Matrix.TransvectionStruct.inv.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4)) (List.reverse.{max u2 u1} (Matrix.TransvectionStruct.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) L))) (List.prod.{max u2 u1} (Matrix.{u2, u2, u1} n n R) (Matrix.hasMul.{u1, u2} n R _inst_5 (Distrib.toHasMul.{u1} R (Ring.toDistrib.{u1} R (CommRing.toRing.{u1} R _inst_4))) (AddCommGroup.toAddCommMonoid.{u1} R (NonUnitalNonAssocRing.toAddCommGroup.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (Matrix.hasOne.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (AddMonoidWithOne.toOne.{u1} R (AddGroupWithOne.toAddMonoidWithOne.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (Ring.toAddCommGroupWithOne.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (List.map.{max u2 u1, max u2 u1} (Matrix.TransvectionStruct.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) (Matrix.{u2, u2, u1} n n R) (Matrix.TransvectionStruct.toMatrix.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) L))) (OfNat.ofNat.{max u2 u1} (Matrix.{u2, u2, u1} n n R) 1 (OfNat.mk.{max u2 u1} (Matrix.{u2, u2, u1} n n R) 1 (One.one.{max u2 u1} (Matrix.{u2, u2, u1} n n R) (Matrix.hasOne.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (AddMonoidWithOne.toOne.{u1} R (AddGroupWithOne.toAddMonoidWithOne.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (Ring.toAddCommGroupWithOne.{u1} R (CommRing.toRing.{u1} R _inst_4)))))))))
+but is expected to have type
+ forall {n : Type.{u1}} {R : Type.{u2}} [_inst_2 : DecidableEq.{succ u1} n] [_inst_4 : CommRing.{u2} R] [_inst_5 : Fintype.{u1} n] (L : List.{max u1 u2} (Matrix.TransvectionStruct.{u2, u1} n R)), Eq.{max (succ u2) (succ u1)} (Matrix.{u1, u1, u2} n n R) (Matrix.mul.{u2, u1, u1, u1} n n n R _inst_5 (NonUnitalNonAssocRing.toMul.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4))))) (List.prod.{max u2 u1} (Matrix.{u1, u1, u2} n n R) (Matrix.instMulMatrix.{u2, u1} n R _inst_5 (NonUnitalNonAssocRing.toMul.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4)))))) (Matrix.one.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (NonAssocRing.toOne.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4)))) (List.map.{max u1 u2, max u1 u2} (Matrix.TransvectionStruct.{u2, u1} n R) (Matrix.{u1, u1, u2} n n R) (Function.comp.{succ (max u1 u2), max (succ u1) (succ u2), succ (max u1 u2)} (Matrix.TransvectionStruct.{u2, u1} n R) (Matrix.TransvectionStruct.{u2, u1} n R) (Matrix.{u1, u1, u2} n n R) (Matrix.TransvectionStruct.toMatrix.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) (Matrix.TransvectionStruct.inv.{u2, u1} n R _inst_4)) (List.reverse.{max u2 u1} (Matrix.TransvectionStruct.{u2, u1} n R) L))) (List.prod.{max u2 u1} (Matrix.{u1, u1, u2} n n R) (Matrix.instMulMatrix.{u2, u1} n R _inst_5 (NonUnitalNonAssocRing.toMul.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4)))))) (Matrix.one.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (NonAssocRing.toOne.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4)))) (List.map.{max u1 u2, max u1 u2} (Matrix.TransvectionStruct.{u2, u1} n R) (Matrix.{u1, u1, u2} n n R) (Matrix.TransvectionStruct.toMatrix.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) L))) (OfNat.ofNat.{max u2 u1} (Matrix.{u1, u1, u2} n n R) 1 (One.toOfNat1.{max u2 u1} (Matrix.{u1, u1, u2} n n R) (Matrix.one.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (NonAssocRing.toOne.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4))))))
+Case conversion may be inaccurate. Consider using '#align matrix.transvection_struct.reverse_inv_prod_mul_prod Matrix.TransvectionStruct.reverse_inv_prod_mul_prodₓ'. -/
theorem reverse_inv_prod_mul_prod (L : List (TransvectionStruct n R)) :
(L.reverse.map (toMatrix ∘ TransvectionStruct.inv)).Prod ⬝ (L.map toMatrix).Prod = 1 :=
by
@@ -237,6 +337,12 @@ theorem reverse_inv_prod_mul_prod (L : List (TransvectionStruct n R)) :
simpa [inv_mul] using IH
#align matrix.transvection_struct.reverse_inv_prod_mul_prod Matrix.TransvectionStruct.reverse_inv_prod_mul_prod
+/- warning: matrix.transvection_struct.prod_mul_reverse_inv_prod -> Matrix.TransvectionStruct.prod_mul_reverse_inv_prod is a dubious translation:
+lean 3 declaration is
+ forall {n : Type.{u2}} {R : Type.{u1}} [_inst_2 : DecidableEq.{succ u2} n] [_inst_4 : CommRing.{u1} R] [_inst_5 : Fintype.{u2} n] (L : List.{max u2 u1} (Matrix.TransvectionStruct.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4)), Eq.{succ (max u2 u1)} (Matrix.{u2, u2, u1} n n R) (Matrix.mul.{u1, u2, u2, u2} n n n R _inst_5 (Distrib.toHasMul.{u1} R (Ring.toDistrib.{u1} R (CommRing.toRing.{u1} R _inst_4))) (AddCommGroup.toAddCommMonoid.{u1} R (NonUnitalNonAssocRing.toAddCommGroup.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4))))) (List.prod.{max u2 u1} (Matrix.{u2, u2, u1} n n R) (Matrix.hasMul.{u1, u2} n R _inst_5 (Distrib.toHasMul.{u1} R (Ring.toDistrib.{u1} R (CommRing.toRing.{u1} R _inst_4))) (AddCommGroup.toAddCommMonoid.{u1} R (NonUnitalNonAssocRing.toAddCommGroup.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (Matrix.hasOne.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (AddMonoidWithOne.toOne.{u1} R (AddGroupWithOne.toAddMonoidWithOne.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (Ring.toAddCommGroupWithOne.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (List.map.{max u2 u1, max u2 u1} (Matrix.TransvectionStruct.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) (Matrix.{u2, u2, u1} n n R) (Matrix.TransvectionStruct.toMatrix.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) L)) (List.prod.{max u2 u1} (Matrix.{u2, u2, u1} n n R) (Matrix.hasMul.{u1, u2} n R _inst_5 (Distrib.toHasMul.{u1} R (Ring.toDistrib.{u1} R (CommRing.toRing.{u1} R _inst_4))) (AddCommGroup.toAddCommMonoid.{u1} R (NonUnitalNonAssocRing.toAddCommGroup.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (Matrix.hasOne.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (AddMonoidWithOne.toOne.{u1} R (AddGroupWithOne.toAddMonoidWithOne.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (Ring.toAddCommGroupWithOne.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (List.map.{max u2 u1, max u2 u1} (Matrix.TransvectionStruct.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) (Matrix.{u2, u2, u1} n n R) (Function.comp.{succ (max u2 u1), max (succ u2) (succ u1), succ (max u2 u1)} (Matrix.TransvectionStruct.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) (Matrix.TransvectionStruct.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) (Matrix.{u2, u2, u1} n n R) (Matrix.TransvectionStruct.toMatrix.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) (Matrix.TransvectionStruct.inv.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4)) (List.reverse.{max u2 u1} (Matrix.TransvectionStruct.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) L)))) (OfNat.ofNat.{max u2 u1} (Matrix.{u2, u2, u1} n n R) 1 (OfNat.mk.{max u2 u1} (Matrix.{u2, u2, u1} n n R) 1 (One.one.{max u2 u1} (Matrix.{u2, u2, u1} n n R) (Matrix.hasOne.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (AddMonoidWithOne.toOne.{u1} R (AddGroupWithOne.toAddMonoidWithOne.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (Ring.toAddCommGroupWithOne.{u1} R (CommRing.toRing.{u1} R _inst_4)))))))))
+but is expected to have type
+ forall {n : Type.{u1}} {R : Type.{u2}} [_inst_2 : DecidableEq.{succ u1} n] [_inst_4 : CommRing.{u2} R] [_inst_5 : Fintype.{u1} n] (L : List.{max u1 u2} (Matrix.TransvectionStruct.{u2, u1} n R)), Eq.{max (succ u2) (succ u1)} (Matrix.{u1, u1, u2} n n R) (Matrix.mul.{u2, u1, u1, u1} n n n R _inst_5 (NonUnitalNonAssocRing.toMul.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4))))) (List.prod.{max u2 u1} (Matrix.{u1, u1, u2} n n R) (Matrix.instMulMatrix.{u2, u1} n R _inst_5 (NonUnitalNonAssocRing.toMul.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4)))))) (Matrix.one.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (NonAssocRing.toOne.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4)))) (List.map.{max u1 u2, max u1 u2} (Matrix.TransvectionStruct.{u2, u1} n R) (Matrix.{u1, u1, u2} n n R) (Matrix.TransvectionStruct.toMatrix.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) L)) (List.prod.{max u2 u1} (Matrix.{u1, u1, u2} n n R) (Matrix.instMulMatrix.{u2, u1} n R _inst_5 (NonUnitalNonAssocRing.toMul.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4)))))) (Matrix.one.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (NonAssocRing.toOne.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4)))) (List.map.{max u1 u2, max u1 u2} (Matrix.TransvectionStruct.{u2, u1} n R) (Matrix.{u1, u1, u2} n n R) (Function.comp.{succ (max u1 u2), max (succ u1) (succ u2), succ (max u1 u2)} (Matrix.TransvectionStruct.{u2, u1} n R) (Matrix.TransvectionStruct.{u2, u1} n R) (Matrix.{u1, u1, u2} n n R) (Matrix.TransvectionStruct.toMatrix.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) (Matrix.TransvectionStruct.inv.{u2, u1} n R _inst_4)) (List.reverse.{max u2 u1} (Matrix.TransvectionStruct.{u2, u1} n R) L)))) (OfNat.ofNat.{max u2 u1} (Matrix.{u1, u1, u2} n n R) 1 (One.toOfNat1.{max u2 u1} (Matrix.{u1, u1, u2} n n R) (Matrix.one.{u2, u1} n R (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (NonAssocRing.toOne.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4))))))
+Case conversion may be inaccurate. Consider using '#align matrix.transvection_struct.prod_mul_reverse_inv_prod Matrix.TransvectionStruct.prod_mul_reverse_inv_prodₓ'. -/
theorem prod_mul_reverse_inv_prod (L : List (TransvectionStruct n R)) :
(L.map toMatrix).Prod ⬝ (L.reverse.map (toMatrix ∘ TransvectionStruct.inv)).Prod = 1 :=
by
@@ -257,6 +363,12 @@ variable (p)
open Sum
+/- warning: matrix.transvection_struct.sum_inl -> Matrix.TransvectionStruct.sumInl is a dubious translation:
+lean 3 declaration is
+ forall {n : Type.{u2}} (p : Type.{u3}) {R : Type.{u1}} [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : DecidableEq.{succ u3} p] [_inst_4 : CommRing.{u1} R], (Matrix.TransvectionStruct.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) -> (Matrix.TransvectionStruct.{u1, max u2 u3} (Sum.{u2, u3} n p) R (fun (a : Sum.{u2, u3} n p) (b : Sum.{u2, u3} n p) => Sum.decidableEq.{u2, u3} n (fun (a : n) (b : n) => _inst_2 a b) p (fun (a : p) (b : p) => _inst_3 a b) a b) _inst_4)
+but is expected to have type
+ forall {n : Type.{u2}} (p : Type.{u3}) {R : Type.{u1}}, (Matrix.TransvectionStruct.{u1, u2} n R) -> (Matrix.TransvectionStruct.{u1, max u3 u2} (Sum.{u2, u3} n p) R)
+Case conversion may be inaccurate. Consider using '#align matrix.transvection_struct.sum_inl Matrix.TransvectionStruct.sumInlₓ'. -/
/-- Given a `transvection_struct` on `n`, define the corresponding `transvection_struct` on `n ⊕ p`
using the identity on `p`. -/
def sumInl (t : TransvectionStruct n R) : TransvectionStruct (Sum n p) R
@@ -267,6 +379,12 @@ def sumInl (t : TransvectionStruct n R) : TransvectionStruct (Sum n p) R
c := t.c
#align matrix.transvection_struct.sum_inl Matrix.TransvectionStruct.sumInl
+/- warning: matrix.transvection_struct.to_matrix_sum_inl -> Matrix.TransvectionStruct.toMatrix_sumInl is a dubious translation:
+lean 3 declaration is
+ forall {n : Type.{u2}} (p : Type.{u3}) {R : Type.{u1}} [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : DecidableEq.{succ u3} p] [_inst_4 : CommRing.{u1} R] (t : Matrix.TransvectionStruct.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4), Eq.{succ (max (max u2 u3) u1)} (Matrix.{max u2 u3, max u2 u3, u1} (Sum.{u2, u3} n p) (Sum.{u2, u3} n p) R) (Matrix.TransvectionStruct.toMatrix.{u1, max u2 u3} (Sum.{u2, u3} n p) R (fun (a : Sum.{u2, u3} n p) (b : Sum.{u2, u3} n p) => Sum.decidableEq.{u2, u3} n (fun (a : n) (b : n) => _inst_2 a b) p (fun (a : p) (b : p) => (fun (a : p) (b : p) => _inst_3 a b) a b) a b) _inst_4 (Matrix.TransvectionStruct.sumInl.{u1, u2, u3} n p R (fun (a : n) (b : n) => _inst_2 a b) (fun (a : p) (b : p) => _inst_3 a b) _inst_4 t)) (Matrix.fromBlocks.{u2, u3, u2, u3, u1} n p n p R (Matrix.TransvectionStruct.toMatrix.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 t) (OfNat.ofNat.{max u2 u3 u1} (Matrix.{u2, u3, u1} n p R) 0 (OfNat.mk.{max u2 u3 u1} (Matrix.{u2, u3, u1} n p R) 0 (Zero.zero.{max u2 u3 u1} (Matrix.{u2, u3, u1} n p R) (Matrix.hasZero.{u1, u2, u3} n p R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))))))) (OfNat.ofNat.{max u3 u2 u1} (Matrix.{u3, u2, u1} p n R) 0 (OfNat.mk.{max u3 u2 u1} (Matrix.{u3, u2, u1} p n R) 0 (Zero.zero.{max u3 u2 u1} (Matrix.{u3, u2, u1} p n R) (Matrix.hasZero.{u1, u3, u2} p n R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))))))) (OfNat.ofNat.{max u3 u1} (Matrix.{u3, u3, u1} p p R) 1 (OfNat.mk.{max u3 u1} (Matrix.{u3, u3, u1} p p R) 1 (One.one.{max u3 u1} (Matrix.{u3, u3, u1} p p R) (Matrix.hasOne.{u1, u3} p R (fun (a : p) (b : p) => _inst_3 a b) (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (AddMonoidWithOne.toOne.{u1} R (AddGroupWithOne.toAddMonoidWithOne.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (Ring.toAddCommGroupWithOne.{u1} R (CommRing.toRing.{u1} R _inst_4))))))))))
+but is expected to have type
+ forall {n : Type.{u2}} (p : Type.{u1}) {R : Type.{u3}} [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : DecidableEq.{succ u1} p] [_inst_4 : CommRing.{u3} R] (t : Matrix.TransvectionStruct.{u3, u2} n R), Eq.{max (max (succ u3) (succ u2)) (succ u1)} (Matrix.{max u2 u1, max u2 u1, u3} (Sum.{u2, u1} n p) (Sum.{u2, u1} n p) R) (Matrix.TransvectionStruct.toMatrix.{u3, max u2 u1} (Sum.{u2, u1} n p) R (fun (a : Sum.{u2, u1} n p) (b : Sum.{u2, u1} n p) => Sum.instDecidableEqSum.{u2, u1} n p (fun (a : n) (b : n) => _inst_2 a b) (fun (a : p) (b : p) => _inst_3 a b) a b) _inst_4 (Matrix.TransvectionStruct.sumInl.{u3, u2, u1} n p R t)) (Matrix.fromBlocks.{u2, u1, u2, u1, u3} n p n p R (Matrix.TransvectionStruct.toMatrix.{u3, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 t) (OfNat.ofNat.{max (max u3 u2) u1} (Matrix.{u2, u1, u3} n p R) 0 (Zero.toOfNat0.{max (max u3 u2) u1} (Matrix.{u2, u1, u3} n p R) (Matrix.zero.{u3, u2, u1} n p R (CommMonoidWithZero.toZero.{u3} R (CommSemiring.toCommMonoidWithZero.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))))) (OfNat.ofNat.{max (max u3 u2) u1} (Matrix.{u1, u2, u3} p n R) 0 (Zero.toOfNat0.{max (max u3 u2) u1} (Matrix.{u1, u2, u3} p n R) (Matrix.zero.{u3, u1, u2} p n R (CommMonoidWithZero.toZero.{u3} R (CommSemiring.toCommMonoidWithZero.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))))) (OfNat.ofNat.{max u3 u1} (Matrix.{u1, u1, u3} p p R) 1 (One.toOfNat1.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Matrix.one.{u3, u1} p R (fun (a : p) (b : p) => _inst_3 a b) (CommMonoidWithZero.toZero.{u3} R (CommSemiring.toCommMonoidWithZero.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (NonAssocRing.toOne.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4)))))))
+Case conversion may be inaccurate. Consider using '#align matrix.transvection_struct.to_matrix_sum_inl Matrix.TransvectionStruct.toMatrix_sumInlₓ'. -/
theorem toMatrix_sumInl (t : TransvectionStruct n R) :
(t.sumInl p).toMatrix = fromBlocks t.toMatrix 0 0 1 :=
by
@@ -279,6 +397,12 @@ theorem toMatrix_sumInl (t : TransvectionStruct n R) :
· by_cases h : a = b <;> simp [transvection_struct.sum_inl, transvection, h]
#align matrix.transvection_struct.to_matrix_sum_inl Matrix.TransvectionStruct.toMatrix_sumInl
+/- warning: matrix.transvection_struct.sum_inl_to_matrix_prod_mul -> Matrix.TransvectionStruct.sumInl_toMatrix_prod_mul is a dubious translation:
+lean 3 declaration is
+ forall {n : Type.{u2}} (p : Type.{u3}) {R : Type.{u1}} [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : DecidableEq.{succ u3} p] [_inst_4 : CommRing.{u1} R] [_inst_5 : Fintype.{u2} n] [_inst_6 : Fintype.{u3} p] (M : Matrix.{u2, u2, u1} n n R) (L : List.{max u2 u1} (Matrix.TransvectionStruct.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4)) (N : Matrix.{u3, u3, u1} p p R), Eq.{succ (max (max u2 u3) u1)} (Matrix.{max u2 u3, max u2 u3, u1} (Sum.{u2, u3} n p) (Sum.{u2, u3} n p) R) (Matrix.mul.{u1, max u2 u3, max u2 u3, max u2 u3} (Sum.{u2, u3} n p) (Sum.{u2, u3} n p) (Sum.{u2, u3} n p) R (Sum.fintype.{u2, u3} n p _inst_5 _inst_6) (Distrib.toHasMul.{u1} R (Ring.toDistrib.{u1} R (CommRing.toRing.{u1} R _inst_4))) (AddCommGroup.toAddCommMonoid.{u1} R (NonUnitalNonAssocRing.toAddCommGroup.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4))))) (List.prod.{max (max u2 u3) u1} (Matrix.{max u2 u3, max u2 u3, u1} (Sum.{u2, u3} n p) (Sum.{u2, u3} n p) R) (Matrix.hasMul.{u1, max u2 u3} (Sum.{u2, u3} n p) R (Sum.fintype.{u2, u3} n p _inst_5 _inst_6) (Distrib.toHasMul.{u1} R (Ring.toDistrib.{u1} R (CommRing.toRing.{u1} R _inst_4))) (AddCommGroup.toAddCommMonoid.{u1} R (NonUnitalNonAssocRing.toAddCommGroup.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (Matrix.hasOne.{u1, max u2 u3} (Sum.{u2, u3} n p) R (fun (a : Sum.{u2, u3} n p) (b : Sum.{u2, u3} n p) => Sum.decidableEq.{u2, u3} n (fun (a : n) (b : n) => _inst_2 a b) p (fun (a : p) (b : p) => _inst_3 a b) a b) (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (AddMonoidWithOne.toOne.{u1} R (AddGroupWithOne.toAddMonoidWithOne.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (Ring.toAddCommGroupWithOne.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (List.map.{max u2 u1, max (max u2 u3) u1} (Matrix.TransvectionStruct.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) (Matrix.{max u2 u3, max u2 u3, u1} (Sum.{u2, u3} n p) (Sum.{u2, u3} n p) R) (Function.comp.{succ (max u2 u1), max (succ (max u2 u3)) (succ u1), succ (max (max u2 u3) u1)} (Matrix.TransvectionStruct.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) (Matrix.TransvectionStruct.{u1, max u2 u3} (Sum.{u2, u3} n p) R (fun (a : Sum.{u2, u3} n p) (b : Sum.{u2, u3} n p) => Sum.decidableEq.{u2, u3} n (fun (a : n) (b : n) => _inst_2 a b) p (fun (a : p) (b : p) => _inst_3 a b) a b) _inst_4) (Matrix.{max u2 u3, max u2 u3, u1} (Sum.{u2, u3} n p) (Sum.{u2, u3} n p) R) (Matrix.TransvectionStruct.toMatrix.{u1, max u2 u3} (Sum.{u2, u3} n p) R (fun (a : Sum.{u2, u3} n p) (b : Sum.{u2, u3} n p) => Sum.decidableEq.{u2, u3} n (fun (a : n) (b : n) => _inst_2 a b) p (fun (a : p) (b : p) => _inst_3 a b) a b) _inst_4) (Matrix.TransvectionStruct.sumInl.{u1, u2, u3} n p R (fun (a : n) (b : n) => _inst_2 a b) (fun (a : p) (b : p) => _inst_3 a b) _inst_4)) L)) (Matrix.fromBlocks.{u2, u3, u2, u3, u1} n p n p R M (OfNat.ofNat.{max u2 u3 u1} (Matrix.{u2, u3, u1} n p R) 0 (OfNat.mk.{max u2 u3 u1} (Matrix.{u2, u3, u1} n p R) 0 (Zero.zero.{max u2 u3 u1} (Matrix.{u2, u3, u1} n p R) (Matrix.hasZero.{u1, u2, u3} n p R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))))))) (OfNat.ofNat.{max u3 u2 u1} (Matrix.{u3, u2, u1} p n R) 0 (OfNat.mk.{max u3 u2 u1} (Matrix.{u3, u2, u1} p n R) 0 (Zero.zero.{max u3 u2 u1} (Matrix.{u3, u2, u1} p n R) (Matrix.hasZero.{u1, u3, u2} p n R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))))))) N)) (Matrix.fromBlocks.{u2, u3, u2, u3, u1} n p n p R (Matrix.mul.{u1, u2, u2, u2} n n n R _inst_5 (Distrib.toHasMul.{u1} R (Ring.toDistrib.{u1} R (CommRing.toRing.{u1} R _inst_4))) (AddCommGroup.toAddCommMonoid.{u1} R (NonUnitalNonAssocRing.toAddCommGroup.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4))))) (List.prod.{max u2 u1} (Matrix.{u2, u2, u1} n n R) (Matrix.hasMul.{u1, u2} n R _inst_5 (Distrib.toHasMul.{u1} R (Ring.toDistrib.{u1} R (CommRing.toRing.{u1} R _inst_4))) (AddCommGroup.toAddCommMonoid.{u1} R (NonUnitalNonAssocRing.toAddCommGroup.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (Matrix.hasOne.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (AddMonoidWithOne.toOne.{u1} R (AddGroupWithOne.toAddMonoidWithOne.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (Ring.toAddCommGroupWithOne.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (List.map.{max u2 u1, max u2 u1} (Matrix.TransvectionStruct.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) (Matrix.{u2, u2, u1} n n R) (Matrix.TransvectionStruct.toMatrix.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) L)) M) (OfNat.ofNat.{max u2 u3 u1} (Matrix.{u2, u3, u1} n p R) 0 (OfNat.mk.{max u2 u3 u1} (Matrix.{u2, u3, u1} n p R) 0 (Zero.zero.{max u2 u3 u1} (Matrix.{u2, u3, u1} n p R) (Matrix.hasZero.{u1, u2, u3} n p R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))))))) (OfNat.ofNat.{max u3 u2 u1} (Matrix.{u3, u2, u1} p n R) 0 (OfNat.mk.{max u3 u2 u1} (Matrix.{u3, u2, u1} p n R) 0 (Zero.zero.{max u3 u2 u1} (Matrix.{u3, u2, u1} p n R) (Matrix.hasZero.{u1, u3, u2} p n R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))))))) N)
+but is expected to have type
+ forall {n : Type.{u2}} (p : Type.{u1}) {R : Type.{u3}} [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : DecidableEq.{succ u1} p] [_inst_4 : CommRing.{u3} R] [_inst_5 : Fintype.{u2} n] [_inst_6 : Fintype.{u1} p] (M : Matrix.{u2, u2, u3} n n R) (L : List.{max u2 u3} (Matrix.TransvectionStruct.{u3, u2} n R)) (N : Matrix.{u1, u1, u3} p p R), Eq.{max (max (succ u3) (succ u2)) (succ u1)} (Matrix.{max u2 u1, max u1 u2, u3} (Sum.{u2, u1} n p) (Sum.{u2, u1} n p) R) (Matrix.mul.{u3, max u2 u1, max u2 u1, max u1 u2} (Sum.{u2, u1} n p) (Sum.{u2, u1} n p) (Sum.{u2, u1} n p) R (instFintypeSum.{u2, u1} n p _inst_5 _inst_6) (NonUnitalNonAssocRing.toMul.{u3} R (NonAssocRing.toNonUnitalNonAssocRing.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} R (NonAssocRing.toNonUnitalNonAssocRing.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4))))) (List.prod.{max (max u3 u2) u1} (Matrix.{max u1 u2, max u1 u2, u3} (Sum.{u2, u1} n p) (Sum.{u2, u1} n p) R) (Matrix.instMulMatrix.{u3, max u2 u1} (Sum.{u2, u1} n p) R (instFintypeSum.{u2, u1} n p _inst_5 _inst_6) (NonUnitalNonAssocRing.toMul.{u3} R (NonAssocRing.toNonUnitalNonAssocRing.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} R (NonAssocRing.toNonUnitalNonAssocRing.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4)))))) (Matrix.one.{u3, max u2 u1} (Sum.{u2, u1} n p) R (fun (a : Sum.{u2, u1} n p) (b : Sum.{u2, u1} n p) => Sum.instDecidableEqSum.{u2, u1} n p (fun (a : n) (b : n) => _inst_2 a b) (fun (a : p) (b : p) => _inst_3 a b) a b) (CommMonoidWithZero.toZero.{u3} R (CommSemiring.toCommMonoidWithZero.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (NonAssocRing.toOne.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4)))) (List.map.{max u2 u3, max (max u1 u2) u3} (Matrix.TransvectionStruct.{u3, u2} n R) (Matrix.{max u1 u2, max u1 u2, u3} (Sum.{u2, u1} n p) (Sum.{u2, u1} n p) R) (Function.comp.{succ (max u2 u3), max (succ (max u1 u2)) (succ u3), succ (max (max u1 u2) u3)} (Matrix.TransvectionStruct.{u3, u2} n R) (Matrix.TransvectionStruct.{u3, max u1 u2} (Sum.{u2, u1} n p) R) (Matrix.{max u1 u2, max u1 u2, u3} (Sum.{u2, u1} n p) (Sum.{u2, u1} n p) R) (Matrix.TransvectionStruct.toMatrix.{u3, max u1 u2} (Sum.{u2, u1} n p) R (fun (a : Sum.{u2, u1} n p) (b : Sum.{u2, u1} n p) => Sum.instDecidableEqSum.{u2, u1} n p (fun (a : n) (b : n) => _inst_2 a b) (fun (a : p) (b : p) => _inst_3 a b) a b) _inst_4) (Matrix.TransvectionStruct.sumInl.{u3, u2, u1} n p R)) L)) (Matrix.fromBlocks.{u2, u1, u2, u1, u3} n p n p R M (OfNat.ofNat.{max (max u3 u2) u1} (Matrix.{u2, u1, u3} n p R) 0 (Zero.toOfNat0.{max (max u3 u2) u1} (Matrix.{u2, u1, u3} n p R) (Matrix.zero.{u3, u2, u1} n p R (CommMonoidWithZero.toZero.{u3} R (CommSemiring.toCommMonoidWithZero.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))))) (OfNat.ofNat.{max (max u3 u2) u1} (Matrix.{u1, u2, u3} p n R) 0 (Zero.toOfNat0.{max (max u3 u2) u1} (Matrix.{u1, u2, u3} p n R) (Matrix.zero.{u3, u1, u2} p n R (CommMonoidWithZero.toZero.{u3} R (CommSemiring.toCommMonoidWithZero.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))))) N)) (Matrix.fromBlocks.{u2, u1, u2, u1, u3} n p n p R (Matrix.mul.{u3, u2, u2, u2} n n n R _inst_5 (NonUnitalNonAssocRing.toMul.{u3} R (NonAssocRing.toNonUnitalNonAssocRing.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} R (NonAssocRing.toNonUnitalNonAssocRing.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4))))) (List.prod.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Matrix.instMulMatrix.{u3, u2} n R _inst_5 (NonUnitalNonAssocRing.toMul.{u3} R (NonAssocRing.toNonUnitalNonAssocRing.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} R (NonAssocRing.toNonUnitalNonAssocRing.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4)))))) (Matrix.one.{u3, u2} n R (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u3} R (CommSemiring.toCommMonoidWithZero.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (NonAssocRing.toOne.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4)))) (List.map.{max u2 u3, max u2 u3} (Matrix.TransvectionStruct.{u3, u2} n R) (Matrix.{u2, u2, u3} n n R) (Matrix.TransvectionStruct.toMatrix.{u3, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) L)) M) (OfNat.ofNat.{max (max u3 u2) u1} (Matrix.{u2, u1, u3} n p R) 0 (Zero.toOfNat0.{max (max u3 u2) u1} (Matrix.{u2, u1, u3} n p R) (Matrix.zero.{u3, u2, u1} n p R (CommMonoidWithZero.toZero.{u3} R (CommSemiring.toCommMonoidWithZero.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))))) (OfNat.ofNat.{max (max u3 u2) u1} (Matrix.{u1, u2, u3} p n R) 0 (Zero.toOfNat0.{max (max u3 u2) u1} (Matrix.{u1, u2, u3} p n R) (Matrix.zero.{u3, u1, u2} p n R (CommMonoidWithZero.toZero.{u3} R (CommSemiring.toCommMonoidWithZero.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))))) N)
+Case conversion may be inaccurate. Consider using '#align matrix.transvection_struct.sum_inl_to_matrix_prod_mul Matrix.TransvectionStruct.sumInl_toMatrix_prod_mulₓ'. -/
@[simp]
theorem sumInl_toMatrix_prod_mul [Fintype n] [Fintype p] (M : Matrix n n R)
(L : List (TransvectionStruct n R)) (N : Matrix p p R) :
@@ -290,6 +414,12 @@ theorem sumInl_toMatrix_prod_mul [Fintype n] [Fintype p] (M : Matrix n n R)
· simp [Matrix.mul_assoc, IH, to_matrix_sum_inl, from_blocks_multiply]
#align matrix.transvection_struct.sum_inl_to_matrix_prod_mul Matrix.TransvectionStruct.sumInl_toMatrix_prod_mul
+/- warning: matrix.transvection_struct.mul_sum_inl_to_matrix_prod -> Matrix.TransvectionStruct.mul_sumInl_toMatrix_prod is a dubious translation:
+lean 3 declaration is
+ forall {n : Type.{u2}} (p : Type.{u3}) {R : Type.{u1}} [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : DecidableEq.{succ u3} p] [_inst_4 : CommRing.{u1} R] [_inst_5 : Fintype.{u2} n] [_inst_6 : Fintype.{u3} p] (M : Matrix.{u2, u2, u1} n n R) (L : List.{max u2 u1} (Matrix.TransvectionStruct.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4)) (N : Matrix.{u3, u3, u1} p p R), Eq.{succ (max (max u2 u3) u1)} (Matrix.{max u2 u3, max u2 u3, u1} (Sum.{u2, u3} n p) (Sum.{u2, u3} n p) R) (Matrix.mul.{u1, max u2 u3, max u2 u3, max u2 u3} (Sum.{u2, u3} n p) (Sum.{u2, u3} n p) (Sum.{u2, u3} n p) R (Sum.fintype.{u2, u3} n p _inst_5 _inst_6) (Distrib.toHasMul.{u1} R (Ring.toDistrib.{u1} R (CommRing.toRing.{u1} R _inst_4))) (AddCommGroup.toAddCommMonoid.{u1} R (NonUnitalNonAssocRing.toAddCommGroup.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4))))) (Matrix.fromBlocks.{u2, u3, u2, u3, u1} n p n p R M (OfNat.ofNat.{max u2 u3 u1} (Matrix.{u2, u3, u1} n p R) 0 (OfNat.mk.{max u2 u3 u1} (Matrix.{u2, u3, u1} n p R) 0 (Zero.zero.{max u2 u3 u1} (Matrix.{u2, u3, u1} n p R) (Matrix.hasZero.{u1, u2, u3} n p R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))))))) (OfNat.ofNat.{max u3 u2 u1} (Matrix.{u3, u2, u1} p n R) 0 (OfNat.mk.{max u3 u2 u1} (Matrix.{u3, u2, u1} p n R) 0 (Zero.zero.{max u3 u2 u1} (Matrix.{u3, u2, u1} p n R) (Matrix.hasZero.{u1, u3, u2} p n R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))))))) N) (List.prod.{max (max u2 u3) u1} (Matrix.{max u2 u3, max u2 u3, u1} (Sum.{u2, u3} n p) (Sum.{u2, u3} n p) R) (Matrix.hasMul.{u1, max u2 u3} (Sum.{u2, u3} n p) R (Sum.fintype.{u2, u3} n p _inst_5 _inst_6) (Distrib.toHasMul.{u1} R (Ring.toDistrib.{u1} R (CommRing.toRing.{u1} R _inst_4))) (AddCommGroup.toAddCommMonoid.{u1} R (NonUnitalNonAssocRing.toAddCommGroup.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (Matrix.hasOne.{u1, max u2 u3} (Sum.{u2, u3} n p) R (fun (a : Sum.{u2, u3} n p) (b : Sum.{u2, u3} n p) => Sum.decidableEq.{u2, u3} n (fun (a : n) (b : n) => _inst_2 a b) p (fun (a : p) (b : p) => _inst_3 a b) a b) (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (AddMonoidWithOne.toOne.{u1} R (AddGroupWithOne.toAddMonoidWithOne.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (Ring.toAddCommGroupWithOne.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (List.map.{max u2 u1, max (max u2 u3) u1} (Matrix.TransvectionStruct.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) (Matrix.{max u2 u3, max u2 u3, u1} (Sum.{u2, u3} n p) (Sum.{u2, u3} n p) R) (Function.comp.{succ (max u2 u1), max (succ (max u2 u3)) (succ u1), succ (max (max u2 u3) u1)} (Matrix.TransvectionStruct.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) (Matrix.TransvectionStruct.{u1, max u2 u3} (Sum.{u2, u3} n p) R (fun (a : Sum.{u2, u3} n p) (b : Sum.{u2, u3} n p) => Sum.decidableEq.{u2, u3} n (fun (a : n) (b : n) => _inst_2 a b) p (fun (a : p) (b : p) => _inst_3 a b) a b) _inst_4) (Matrix.{max u2 u3, max u2 u3, u1} (Sum.{u2, u3} n p) (Sum.{u2, u3} n p) R) (Matrix.TransvectionStruct.toMatrix.{u1, max u2 u3} (Sum.{u2, u3} n p) R (fun (a : Sum.{u2, u3} n p) (b : Sum.{u2, u3} n p) => Sum.decidableEq.{u2, u3} n (fun (a : n) (b : n) => _inst_2 a b) p (fun (a : p) (b : p) => _inst_3 a b) a b) _inst_4) (Matrix.TransvectionStruct.sumInl.{u1, u2, u3} n p R (fun (a : n) (b : n) => _inst_2 a b) (fun (a : p) (b : p) => _inst_3 a b) _inst_4)) L))) (Matrix.fromBlocks.{u2, u3, u2, u3, u1} n p n p R (Matrix.mul.{u1, u2, u2, u2} n n n R _inst_5 (Distrib.toHasMul.{u1} R (Ring.toDistrib.{u1} R (CommRing.toRing.{u1} R _inst_4))) (AddCommGroup.toAddCommMonoid.{u1} R (NonUnitalNonAssocRing.toAddCommGroup.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4))))) M (List.prod.{max u2 u1} (Matrix.{u2, u2, u1} n n R) (Matrix.hasMul.{u1, u2} n R _inst_5 (Distrib.toHasMul.{u1} R (Ring.toDistrib.{u1} R (CommRing.toRing.{u1} R _inst_4))) (AddCommGroup.toAddCommMonoid.{u1} R (NonUnitalNonAssocRing.toAddCommGroup.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (Matrix.hasOne.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (AddMonoidWithOne.toOne.{u1} R (AddGroupWithOne.toAddMonoidWithOne.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (Ring.toAddCommGroupWithOne.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (List.map.{max u2 u1, max u2 u1} (Matrix.TransvectionStruct.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) (Matrix.{u2, u2, u1} n n R) (Matrix.TransvectionStruct.toMatrix.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) L))) (OfNat.ofNat.{max u2 u3 u1} (Matrix.{u2, u3, u1} n p R) 0 (OfNat.mk.{max u2 u3 u1} (Matrix.{u2, u3, u1} n p R) 0 (Zero.zero.{max u2 u3 u1} (Matrix.{u2, u3, u1} n p R) (Matrix.hasZero.{u1, u2, u3} n p R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))))))) (OfNat.ofNat.{max u3 u2 u1} (Matrix.{u3, u2, u1} p n R) 0 (OfNat.mk.{max u3 u2 u1} (Matrix.{u3, u2, u1} p n R) 0 (Zero.zero.{max u3 u2 u1} (Matrix.{u3, u2, u1} p n R) (Matrix.hasZero.{u1, u3, u2} p n R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))))))) N)
+but is expected to have type
+ forall {n : Type.{u2}} (p : Type.{u1}) {R : Type.{u3}} [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : DecidableEq.{succ u1} p] [_inst_4 : CommRing.{u3} R] [_inst_5 : Fintype.{u2} n] [_inst_6 : Fintype.{u1} p] (M : Matrix.{u2, u2, u3} n n R) (L : List.{max u2 u3} (Matrix.TransvectionStruct.{u3, u2} n R)) (N : Matrix.{u1, u1, u3} p p R), Eq.{max (max (succ u3) (succ u2)) (succ u1)} (Matrix.{max u1 u2, max u2 u1, u3} (Sum.{u2, u1} n p) (Sum.{u2, u1} n p) R) (Matrix.mul.{u3, max u1 u2, max u1 u2, max u2 u1} (Sum.{u2, u1} n p) (Sum.{u2, u1} n p) (Sum.{u2, u1} n p) R (instFintypeSum.{u2, u1} n p _inst_5 _inst_6) (NonUnitalNonAssocRing.toMul.{u3} R (NonAssocRing.toNonUnitalNonAssocRing.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} R (NonAssocRing.toNonUnitalNonAssocRing.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4))))) (Matrix.fromBlocks.{u2, u1, u2, u1, u3} n p n p R M (OfNat.ofNat.{max (max u3 u2) u1} (Matrix.{u2, u1, u3} n p R) 0 (Zero.toOfNat0.{max (max u3 u2) u1} (Matrix.{u2, u1, u3} n p R) (Matrix.zero.{u3, u2, u1} n p R (CommMonoidWithZero.toZero.{u3} R (CommSemiring.toCommMonoidWithZero.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))))) (OfNat.ofNat.{max (max u3 u2) u1} (Matrix.{u1, u2, u3} p n R) 0 (Zero.toOfNat0.{max (max u3 u2) u1} (Matrix.{u1, u2, u3} p n R) (Matrix.zero.{u3, u1, u2} p n R (CommMonoidWithZero.toZero.{u3} R (CommSemiring.toCommMonoidWithZero.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))))) N) (List.prod.{max (max u3 u2) u1} (Matrix.{max u1 u2, max u1 u2, u3} (Sum.{u2, u1} n p) (Sum.{u2, u1} n p) R) (Matrix.instMulMatrix.{u3, max u2 u1} (Sum.{u2, u1} n p) R (instFintypeSum.{u2, u1} n p _inst_5 _inst_6) (NonUnitalNonAssocRing.toMul.{u3} R (NonAssocRing.toNonUnitalNonAssocRing.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} R (NonAssocRing.toNonUnitalNonAssocRing.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4)))))) (Matrix.one.{u3, max u2 u1} (Sum.{u2, u1} n p) R (fun (a : Sum.{u2, u1} n p) (b : Sum.{u2, u1} n p) => Sum.instDecidableEqSum.{u2, u1} n p (fun (a : n) (b : n) => _inst_2 a b) (fun (a : p) (b : p) => _inst_3 a b) a b) (CommMonoidWithZero.toZero.{u3} R (CommSemiring.toCommMonoidWithZero.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (NonAssocRing.toOne.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4)))) (List.map.{max u2 u3, max (max u1 u2) u3} (Matrix.TransvectionStruct.{u3, u2} n R) (Matrix.{max u1 u2, max u1 u2, u3} (Sum.{u2, u1} n p) (Sum.{u2, u1} n p) R) (Function.comp.{succ (max u2 u3), max (succ (max u1 u2)) (succ u3), succ (max (max u1 u2) u3)} (Matrix.TransvectionStruct.{u3, u2} n R) (Matrix.TransvectionStruct.{u3, max u1 u2} (Sum.{u2, u1} n p) R) (Matrix.{max u1 u2, max u1 u2, u3} (Sum.{u2, u1} n p) (Sum.{u2, u1} n p) R) (Matrix.TransvectionStruct.toMatrix.{u3, max u1 u2} (Sum.{u2, u1} n p) R (fun (a : Sum.{u2, u1} n p) (b : Sum.{u2, u1} n p) => Sum.instDecidableEqSum.{u2, u1} n p (fun (a : n) (b : n) => _inst_2 a b) (fun (a : p) (b : p) => _inst_3 a b) a b) _inst_4) (Matrix.TransvectionStruct.sumInl.{u3, u2, u1} n p R)) L))) (Matrix.fromBlocks.{u2, u1, u2, u1, u3} n p n p R (Matrix.mul.{u3, u2, u2, u2} n n n R _inst_5 (NonUnitalNonAssocRing.toMul.{u3} R (NonAssocRing.toNonUnitalNonAssocRing.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} R (NonAssocRing.toNonUnitalNonAssocRing.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4))))) M (List.prod.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Matrix.instMulMatrix.{u3, u2} n R _inst_5 (NonUnitalNonAssocRing.toMul.{u3} R (NonAssocRing.toNonUnitalNonAssocRing.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} R (NonAssocRing.toNonUnitalNonAssocRing.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4)))))) (Matrix.one.{u3, u2} n R (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u3} R (CommSemiring.toCommMonoidWithZero.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (NonAssocRing.toOne.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4)))) (List.map.{max u2 u3, max u2 u3} (Matrix.TransvectionStruct.{u3, u2} n R) (Matrix.{u2, u2, u3} n n R) (Matrix.TransvectionStruct.toMatrix.{u3, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) L))) (OfNat.ofNat.{max (max u3 u2) u1} (Matrix.{u2, u1, u3} n p R) 0 (Zero.toOfNat0.{max (max u3 u2) u1} (Matrix.{u2, u1, u3} n p R) (Matrix.zero.{u3, u2, u1} n p R (CommMonoidWithZero.toZero.{u3} R (CommSemiring.toCommMonoidWithZero.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))))) (OfNat.ofNat.{max (max u3 u2) u1} (Matrix.{u1, u2, u3} p n R) 0 (Zero.toOfNat0.{max (max u3 u2) u1} (Matrix.{u1, u2, u3} p n R) (Matrix.zero.{u3, u1, u2} p n R (CommMonoidWithZero.toZero.{u3} R (CommSemiring.toCommMonoidWithZero.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))))) N)
+Case conversion may be inaccurate. Consider using '#align matrix.transvection_struct.mul_sum_inl_to_matrix_prod Matrix.TransvectionStruct.mul_sumInl_toMatrix_prodₓ'. -/
@[simp]
theorem mul_sumInl_toMatrix_prod [Fintype n] [Fintype p] (M : Matrix n n R)
(L : List (TransvectionStruct n R)) (N : Matrix p p R) :
@@ -303,6 +433,12 @@ theorem mul_sumInl_toMatrix_prod [Fintype n] [Fintype p] (M : Matrix n n R)
variable {p}
+/- warning: matrix.transvection_struct.reindex_equiv -> Matrix.TransvectionStruct.reindexEquiv is a dubious translation:
+lean 3 declaration is
+ forall {n : Type.{u2}} {p : Type.{u3}} {R : Type.{u1}} [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : DecidableEq.{succ u3} p] [_inst_4 : CommRing.{u1} R], (Equiv.{succ u2, succ u3} n p) -> (Matrix.TransvectionStruct.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) -> (Matrix.TransvectionStruct.{u1, u3} p R (fun (a : p) (b : p) => _inst_3 a b) _inst_4)
+but is expected to have type
+ forall {n : Type.{u2}} {p : Type.{u3}} {R : Type.{u1}}, (Equiv.{succ u2, succ u3} n p) -> (Matrix.TransvectionStruct.{u1, u2} n R) -> (Matrix.TransvectionStruct.{u1, u3} p R)
+Case conversion may be inaccurate. Consider using '#align matrix.transvection_struct.reindex_equiv Matrix.TransvectionStruct.reindexEquivₓ'. -/
/-- Given a `transvection_struct` on `n` and an equivalence between `n` and `p`, define the
corresponding `transvection_struct` on `p`. -/
def reindexEquiv (e : n ≃ p) (t : TransvectionStruct n R) : TransvectionStruct p R
@@ -315,6 +451,12 @@ def reindexEquiv (e : n ≃ p) (t : TransvectionStruct n R) : TransvectionStruct
variable [Fintype n] [Fintype p]
+/- warning: matrix.transvection_struct.to_matrix_reindex_equiv -> Matrix.TransvectionStruct.toMatrix_reindexEquiv is a dubious translation:
+lean 3 declaration is
+ forall {n : Type.{u2}} {p : Type.{u3}} {R : Type.{u1}} [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : DecidableEq.{succ u3} p] [_inst_4 : CommRing.{u1} R] [_inst_5 : Fintype.{u2} n] [_inst_6 : Fintype.{u3} p] (e : Equiv.{succ u2, succ u3} n p) (t : Matrix.TransvectionStruct.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4), Eq.{succ (max u3 u1)} (Matrix.{u3, u3, u1} p p R) (Matrix.TransvectionStruct.toMatrix.{u1, u3} p R (fun (a : p) (b : p) => _inst_3 a b) _inst_4 (Matrix.TransvectionStruct.reindexEquiv.{u1, u2, u3} n p R (fun (a : n) (b : n) => _inst_2 a b) (fun (a : p) (b : p) => _inst_3 a b) _inst_4 e t)) (coeFn.{max (succ (max u2 u1)) (succ (max u3 u1)), max (succ (max u2 u1)) (succ (max u3 u1))} (AlgEquiv.{u1, max u2 u1, max u3 u1} R (Matrix.{u2, u2, u1} n n R) (Matrix.{u3, u3, u1} p p R) (CommRing.toCommSemiring.{u1} R _inst_4) (Matrix.semiring.{u1, u2} n R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u1, u3} p R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.algebra.{u1, u2, u1} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u1} R _inst_4) (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4)) (Algebra.id.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4))) (Matrix.algebra.{u1, u3, u1} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u1} R _inst_4) (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4)) (Algebra.id.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4)))) (fun (_x : AlgEquiv.{u1, max u2 u1, max u3 u1} R (Matrix.{u2, u2, u1} n n R) (Matrix.{u3, u3, u1} p p R) (CommRing.toCommSemiring.{u1} R _inst_4) (Matrix.semiring.{u1, u2} n R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u1, u3} p R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.algebra.{u1, u2, u1} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u1} R _inst_4) (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4)) (Algebra.id.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4))) (Matrix.algebra.{u1, u3, u1} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u1} R _inst_4) (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4)) (Algebra.id.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4)))) => (Matrix.{u2, u2, u1} n n R) -> (Matrix.{u3, u3, u1} p p R)) (AlgEquiv.hasCoeToFun.{u1, max u2 u1, max u3 u1} R (Matrix.{u2, u2, u1} n n R) (Matrix.{u3, u3, u1} p p R) (CommRing.toCommSemiring.{u1} R _inst_4) (Matrix.semiring.{u1, u2} n R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u1, u3} p R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.algebra.{u1, u2, u1} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u1} R _inst_4) (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4)) (Algebra.id.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4))) (Matrix.algebra.{u1, u3, u1} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u1} R _inst_4) (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4)) (Algebra.id.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4)))) (Matrix.reindexAlgEquiv.{u2, u3, u1} n p R (CommRing.toCommSemiring.{u1} R _inst_4) _inst_6 _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (fun (a : p) (b : p) => _inst_3 a b) e) (Matrix.TransvectionStruct.toMatrix.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 t))
+but is expected to have type
+ forall {n : Type.{u2}} {p : Type.{u1}} {R : Type.{u3}} [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : DecidableEq.{succ u1} p] [_inst_4 : CommRing.{u3} R] [_inst_5 : Fintype.{u2} n] [_inst_6 : Fintype.{u1} p] (e : Equiv.{succ u2, succ u1} n p) (t : Matrix.TransvectionStruct.{u3, u2} n R), Eq.{max (succ u3) (succ u1)} (Matrix.{u1, u1, u3} p p R) (Matrix.TransvectionStruct.toMatrix.{u3, u1} p R (fun (a : p) (b : p) => _inst_3 a b) _inst_4 (Matrix.TransvectionStruct.reindexEquiv.{u3, u2, u1} n p R e t)) (FunLike.coe.{max (max (succ u3) (succ u2)) (succ u1), max (succ u3) (succ u2), max (succ u3) (succ u1)} (AlgEquiv.{u3, max u3 u2, max u3 u1} R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) (Matrix.{u2, u2, u3} n n R) (fun (_x : Matrix.{u2, u2, u3} n n R) => (fun (x._@.Mathlib.Algebra.Hom.GroupAction._hyg.2186 : Matrix.{u2, u2, u3} n n R) => Matrix.{u1, u1, u3} p p R) _x) (SMulHomClass.toFunLike.{max (max u3 u2) u1, u3, max u3 u2, max u3 u1} (AlgEquiv.{u3, max u3 u2, max u3 u1} R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (SMulZeroClass.toSMul.{u3, max u3 u2} R (Matrix.{u2, u2, u3} n n R) (AddMonoid.toZero.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (AddCommMonoid.toAddMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b))))))) (DistribSMul.toSMulZeroClass.{u3, max u3 u2} R (Matrix.{u2, u2, u3} n n R) (AddMonoid.toAddZeroClass.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (AddCommMonoid.toAddMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b))))))) (DistribMulAction.toDistribSMul.{u3, max u3 u2} R (Matrix.{u2, u2, u3} n n R) (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) (AddCommMonoid.toAddMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)))))) (Module.toDistribMulAction.{u3, max u3 u2} R (Matrix.{u2, u2, u3} n n R) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b))))) (Algebra.toModule.{u3, max u3 u2} R (Matrix.{u2, u2, u3} n n R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))))))) (SMulZeroClass.toSMul.{u3, max u3 u1} R (Matrix.{u1, u1, u3} p p R) (AddMonoid.toZero.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (AddCommMonoid.toAddMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Semiring.toNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b))))))) (DistribSMul.toSMulZeroClass.{u3, max u3 u1} R (Matrix.{u1, u1, u3} p p R) (AddMonoid.toAddZeroClass.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (AddCommMonoid.toAddMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Semiring.toNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b))))))) (DistribMulAction.toDistribSMul.{u3, max u3 u1} R (Matrix.{u1, u1, u3} p p R) (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) (AddCommMonoid.toAddMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Semiring.toNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)))))) (Module.toDistribMulAction.{u3, max u3 u1} R (Matrix.{u1, u1, u3} p p R) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Semiring.toNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b))))) (Algebra.toModule.{u3, max u3 u1} R (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))))))) (DistribMulActionHomClass.toSMulHomClass.{max (max u3 u2) u1, u3, max u3 u2, max u3 u1} (AlgEquiv.{u3, max u3 u2, max u3 u1} R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) (AddCommMonoid.toAddMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)))))) (AddCommMonoid.toAddMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Semiring.toNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)))))) (Module.toDistribMulAction.{u3, max u3 u2} R (Matrix.{u2, u2, u3} n n R) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b))))) (Algebra.toModule.{u3, max u3 u2} R (Matrix.{u2, u2, u3} n n R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))))) (Module.toDistribMulAction.{u3, max u3 u1} R (Matrix.{u1, u1, u3} p p R) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Semiring.toNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b))))) (Algebra.toModule.{u3, max u3 u1} R (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))))) (NonUnitalAlgHomClass.toDistribMulActionHomClass.{max (max u3 u2) u1, u3, max u3 u2, max u3 u1} (AlgEquiv.{u3, max u3 u2, max u3 u1} R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Semiring.toNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)))) (Module.toDistribMulAction.{u3, max u3 u2} R (Matrix.{u2, u2, u3} n n R) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b))))) (Algebra.toModule.{u3, max u3 u2} R (Matrix.{u2, u2, u3} n n R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))))) (Module.toDistribMulAction.{u3, max u3 u1} R (Matrix.{u1, u1, u3} p p R) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Semiring.toNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b))))) (Algebra.toModule.{u3, max u3 u1} R (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))))) (AlgHom.instNonUnitalAlgHomClassToMonoidToMonoidWithZeroToSemiringToNonUnitalNonAssocSemiringToNonAssocSemiringToNonUnitalNonAssocSemiringToNonAssocSemiringToDistribMulActionToAddCommMonoidToModuleToDistribMulActionToAddCommMonoidToModule.{u3, max u3 u2, max u3 u1, max (max u3 u2) u1} R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (AlgEquiv.{u3, max u3 u2, max u3 u1} R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) (AlgEquivClass.toAlgHomClass.{max (max u3 u2) u1, u3, max u3 u2, max u3 u1} (AlgEquiv.{u3, max u3 u2, max u3 u1} R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (AlgEquiv.instAlgEquivClassAlgEquiv.{u3, max u3 u2, max u3 u1} R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))))))))) (Matrix.reindexAlgEquiv.{u2, u1, u3} n p R (CommRing.toCommSemiring.{u3} R _inst_4) _inst_6 _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (fun (a : p) (b : p) => _inst_3 a b) e) (Matrix.TransvectionStruct.toMatrix.{u3, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4 t))
+Case conversion may be inaccurate. Consider using '#align matrix.transvection_struct.to_matrix_reindex_equiv Matrix.TransvectionStruct.toMatrix_reindexEquivₓ'. -/
theorem toMatrix_reindexEquiv (e : n ≃ p) (t : TransvectionStruct n R) :
(t.reindexEquiv e).toMatrix = reindexAlgEquiv R e t.toMatrix :=
by
@@ -326,6 +468,12 @@ theorem toMatrix_reindexEquiv (e : n ≃ p) (t : TransvectionStruct n R) :
simp [ha, hb, hab, ← e.apply_eq_iff_eq_symm_apply, std_basis_matrix]
#align matrix.transvection_struct.to_matrix_reindex_equiv Matrix.TransvectionStruct.toMatrix_reindexEquiv
+/- warning: matrix.transvection_struct.to_matrix_reindex_equiv_prod -> Matrix.TransvectionStruct.toMatrix_reindexEquiv_prod is a dubious translation:
+lean 3 declaration is
+ forall {n : Type.{u2}} {p : Type.{u3}} {R : Type.{u1}} [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : DecidableEq.{succ u3} p] [_inst_4 : CommRing.{u1} R] [_inst_5 : Fintype.{u2} n] [_inst_6 : Fintype.{u3} p] (e : Equiv.{succ u2, succ u3} n p) (L : List.{max u2 u1} (Matrix.TransvectionStruct.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4)), Eq.{succ (max u3 u1)} (Matrix.{u3, u3, u1} p p R) (List.prod.{max u3 u1} (Matrix.{u3, u3, u1} p p R) (Matrix.hasMul.{u1, u3} p R _inst_6 (Distrib.toHasMul.{u1} R (Ring.toDistrib.{u1} R (CommRing.toRing.{u1} R _inst_4))) (AddCommGroup.toAddCommMonoid.{u1} R (NonUnitalNonAssocRing.toAddCommGroup.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (Matrix.hasOne.{u1, u3} p R (fun (a : p) (b : p) => _inst_3 a b) (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (AddMonoidWithOne.toOne.{u1} R (AddGroupWithOne.toAddMonoidWithOne.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (Ring.toAddCommGroupWithOne.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (List.map.{max u2 u1, max u3 u1} (Matrix.TransvectionStruct.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) (Matrix.{u3, u3, u1} p p R) (Function.comp.{succ (max u2 u1), max (succ u3) (succ u1), succ (max u3 u1)} (Matrix.TransvectionStruct.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) (Matrix.TransvectionStruct.{u1, u3} p R (fun (a : p) (b : p) => _inst_3 a b) _inst_4) (Matrix.{u3, u3, u1} p p R) (Matrix.TransvectionStruct.toMatrix.{u1, u3} p R (fun (a : p) (b : p) => _inst_3 a b) _inst_4) (Matrix.TransvectionStruct.reindexEquiv.{u1, u2, u3} n p R (fun (a : n) (b : n) => _inst_2 a b) (fun (a : p) (b : p) => _inst_3 a b) _inst_4 e)) L)) (coeFn.{max (succ (max u2 u1)) (succ (max u3 u1)), max (succ (max u2 u1)) (succ (max u3 u1))} (AlgEquiv.{u1, max u2 u1, max u3 u1} R (Matrix.{u2, u2, u1} n n R) (Matrix.{u3, u3, u1} p p R) (CommRing.toCommSemiring.{u1} R _inst_4) (Matrix.semiring.{u1, u2} n R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u1, u3} p R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.algebra.{u1, u2, u1} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u1} R _inst_4) (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4)) (Algebra.id.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4))) (Matrix.algebra.{u1, u3, u1} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u1} R _inst_4) (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4)) (Algebra.id.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4)))) (fun (_x : AlgEquiv.{u1, max u2 u1, max u3 u1} R (Matrix.{u2, u2, u1} n n R) (Matrix.{u3, u3, u1} p p R) (CommRing.toCommSemiring.{u1} R _inst_4) (Matrix.semiring.{u1, u2} n R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u1, u3} p R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.algebra.{u1, u2, u1} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u1} R _inst_4) (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4)) (Algebra.id.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4))) (Matrix.algebra.{u1, u3, u1} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u1} R _inst_4) (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4)) (Algebra.id.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4)))) => (Matrix.{u2, u2, u1} n n R) -> (Matrix.{u3, u3, u1} p p R)) (AlgEquiv.hasCoeToFun.{u1, max u2 u1, max u3 u1} R (Matrix.{u2, u2, u1} n n R) (Matrix.{u3, u3, u1} p p R) (CommRing.toCommSemiring.{u1} R _inst_4) (Matrix.semiring.{u1, u2} n R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u1, u3} p R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.algebra.{u1, u2, u1} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u1} R _inst_4) (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4)) (Algebra.id.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4))) (Matrix.algebra.{u1, u3, u1} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u1} R _inst_4) (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4)) (Algebra.id.{u1} R (CommRing.toCommSemiring.{u1} R _inst_4)))) (Matrix.reindexAlgEquiv.{u2, u3, u1} n p R (CommRing.toCommSemiring.{u1} R _inst_4) _inst_6 _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (fun (a : p) (b : p) => _inst_3 a b) e) (List.prod.{max u2 u1} (Matrix.{u2, u2, u1} n n R) (Matrix.hasMul.{u1, u2} n R _inst_5 (Distrib.toHasMul.{u1} R (Ring.toDistrib.{u1} R (CommRing.toRing.{u1} R _inst_4))) (AddCommGroup.toAddCommMonoid.{u1} R (NonUnitalNonAssocRing.toAddCommGroup.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (Matrix.hasOne.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (AddMonoidWithOne.toOne.{u1} R (AddGroupWithOne.toAddMonoidWithOne.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (Ring.toAddCommGroupWithOne.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (List.map.{max u2 u1, max u2 u1} (Matrix.TransvectionStruct.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) (Matrix.{u2, u2, u1} n n R) (Matrix.TransvectionStruct.toMatrix.{u1, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) L)))
+but is expected to have type
+ forall {n : Type.{u2}} {p : Type.{u1}} {R : Type.{u3}} [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : DecidableEq.{succ u1} p] [_inst_4 : CommRing.{u3} R] [_inst_5 : Fintype.{u2} n] [_inst_6 : Fintype.{u1} p] (e : Equiv.{succ u2, succ u1} n p) (L : List.{max u2 u3} (Matrix.TransvectionStruct.{u3, u2} n R)), Eq.{max (succ u3) (succ u1)} (Matrix.{u1, u1, u3} p p R) (List.prod.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Matrix.instMulMatrix.{u3, u1} p R _inst_6 (NonUnitalNonAssocRing.toMul.{u3} R (NonAssocRing.toNonUnitalNonAssocRing.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} R (NonAssocRing.toNonUnitalNonAssocRing.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4)))))) (Matrix.one.{u3, u1} p R (fun (a : p) (b : p) => _inst_3 a b) (CommMonoidWithZero.toZero.{u3} R (CommSemiring.toCommMonoidWithZero.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (NonAssocRing.toOne.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4)))) (List.map.{max u2 u3, max u1 u3} (Matrix.TransvectionStruct.{u3, u2} n R) (Matrix.{u1, u1, u3} p p R) (Function.comp.{succ (max u2 u3), max (succ u1) (succ u3), succ (max u1 u3)} (Matrix.TransvectionStruct.{u3, u2} n R) (Matrix.TransvectionStruct.{u3, u1} p R) (Matrix.{u1, u1, u3} p p R) (Matrix.TransvectionStruct.toMatrix.{u3, u1} p R (fun (a : p) (b : p) => _inst_3 a b) _inst_4) (Matrix.TransvectionStruct.reindexEquiv.{u3, u2, u1} n p R e)) L)) (FunLike.coe.{max (max (succ u3) (succ u2)) (succ u1), max (succ u3) (succ u2), max (succ u3) (succ u1)} (AlgEquiv.{u3, max u3 u2, max u3 u1} R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) (Matrix.{u2, u2, u3} n n R) (fun (_x : Matrix.{u2, u2, u3} n n R) => (fun (x._@.Mathlib.Algebra.Hom.GroupAction._hyg.2186 : Matrix.{u2, u2, u3} n n R) => Matrix.{u1, u1, u3} p p R) _x) (SMulHomClass.toFunLike.{max (max u3 u2) u1, u3, max u3 u2, max u3 u1} (AlgEquiv.{u3, max u3 u2, max u3 u1} R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (SMulZeroClass.toSMul.{u3, max u3 u2} R (Matrix.{u2, u2, u3} n n R) (AddMonoid.toZero.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (AddCommMonoid.toAddMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b))))))) (DistribSMul.toSMulZeroClass.{u3, max u3 u2} R (Matrix.{u2, u2, u3} n n R) (AddMonoid.toAddZeroClass.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (AddCommMonoid.toAddMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b))))))) (DistribMulAction.toDistribSMul.{u3, max u3 u2} R (Matrix.{u2, u2, u3} n n R) (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) (AddCommMonoid.toAddMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)))))) (Module.toDistribMulAction.{u3, max u3 u2} R (Matrix.{u2, u2, u3} n n R) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b))))) (Algebra.toModule.{u3, max u3 u2} R (Matrix.{u2, u2, u3} n n R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))))))) (SMulZeroClass.toSMul.{u3, max u3 u1} R (Matrix.{u1, u1, u3} p p R) (AddMonoid.toZero.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (AddCommMonoid.toAddMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Semiring.toNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b))))))) (DistribSMul.toSMulZeroClass.{u3, max u3 u1} R (Matrix.{u1, u1, u3} p p R) (AddMonoid.toAddZeroClass.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (AddCommMonoid.toAddMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Semiring.toNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b))))))) (DistribMulAction.toDistribSMul.{u3, max u3 u1} R (Matrix.{u1, u1, u3} p p R) (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) (AddCommMonoid.toAddMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Semiring.toNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)))))) (Module.toDistribMulAction.{u3, max u3 u1} R (Matrix.{u1, u1, u3} p p R) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Semiring.toNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b))))) (Algebra.toModule.{u3, max u3 u1} R (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))))))) (DistribMulActionHomClass.toSMulHomClass.{max (max u3 u2) u1, u3, max u3 u2, max u3 u1} (AlgEquiv.{u3, max u3 u2, max u3 u1} R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) (AddCommMonoid.toAddMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)))))) (AddCommMonoid.toAddMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Semiring.toNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)))))) (Module.toDistribMulAction.{u3, max u3 u2} R (Matrix.{u2, u2, u3} n n R) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b))))) (Algebra.toModule.{u3, max u3 u2} R (Matrix.{u2, u2, u3} n n R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))))) (Module.toDistribMulAction.{u3, max u3 u1} R (Matrix.{u1, u1, u3} p p R) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Semiring.toNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b))))) (Algebra.toModule.{u3, max u3 u1} R (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))))) (NonUnitalAlgHomClass.toDistribMulActionHomClass.{max (max u3 u2) u1, u3, max u3 u2, max u3 u1} (AlgEquiv.{u3, max u3 u2, max u3 u1} R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Semiring.toNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)))) (Module.toDistribMulAction.{u3, max u3 u2} R (Matrix.{u2, u2, u3} n n R) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b))))) (Algebra.toModule.{u3, max u3 u2} R (Matrix.{u2, u2, u3} n n R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))))) (Module.toDistribMulAction.{u3, max u3 u1} R (Matrix.{u1, u1, u3} p p R) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Semiring.toNonAssocSemiring.{max u3 u1} (Matrix.{u1, u1, u3} p p R) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b))))) (Algebra.toModule.{u3, max u3 u1} R (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))))) (AlgHom.instNonUnitalAlgHomClassToMonoidToMonoidWithZeroToSemiringToNonUnitalNonAssocSemiringToNonAssocSemiringToNonUnitalNonAssocSemiringToNonAssocSemiringToDistribMulActionToAddCommMonoidToModuleToDistribMulActionToAddCommMonoidToModule.{u3, max u3 u2, max u3 u1, max (max u3 u2) u1} R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (AlgEquiv.{u3, max u3 u2, max u3 u1} R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) (AlgEquivClass.toAlgHomClass.{max (max u3 u2) u1, u3, max u3 u2, max u3 u1} (AlgEquiv.{u3, max u3 u2, max u3 u1} R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (AlgEquiv.instAlgEquivClassAlgEquiv.{u3, max u3 u2, max u3 u1} R (Matrix.{u2, u2, u3} n n R) (Matrix.{u1, u1, u3} p p R) (CommRing.toCommSemiring.{u3} R _inst_4) (Matrix.semiring.{u3, u2} n R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.semiring.{u3, u1} p R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u3, u2, u3} n R R _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Matrix.instAlgebraMatrixSemiring.{u3, u1, u3} p R R _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (CommRing.toCommSemiring.{u3} R _inst_4) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (Algebra.id.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))))))))) (Matrix.reindexAlgEquiv.{u2, u1, u3} n p R (CommRing.toCommSemiring.{u3} R _inst_4) _inst_6 _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (fun (a : p) (b : p) => _inst_3 a b) e) (List.prod.{max u3 u2} (Matrix.{u2, u2, u3} n n R) (Matrix.instMulMatrix.{u3, u2} n R _inst_5 (NonUnitalNonAssocRing.toMul.{u3} R (NonAssocRing.toNonUnitalNonAssocRing.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} R (NonAssocRing.toNonUnitalNonAssocRing.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4)))))) (Matrix.one.{u3, u2} n R (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u3} R (CommSemiring.toCommMonoidWithZero.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (NonAssocRing.toOne.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4)))) (List.map.{max u2 u3, max u2 u3} (Matrix.TransvectionStruct.{u3, u2} n R) (Matrix.{u2, u2, u3} n n R) (Matrix.TransvectionStruct.toMatrix.{u3, u2} n R (fun (a : n) (b : n) => _inst_2 a b) _inst_4) L)))
+Case conversion may be inaccurate. Consider using '#align matrix.transvection_struct.to_matrix_reindex_equiv_prod Matrix.TransvectionStruct.toMatrix_reindexEquiv_prodₓ'. -/
theorem toMatrix_reindexEquiv_prod (e : n ≃ p) (L : List (TransvectionStruct n R)) :
(L.map (toMatrix ∘ reindexEquiv e)).Prod = reindexAlgEquiv R e (L.map toMatrix).Prod :=
by
@@ -362,20 +510,30 @@ variable {R} {r : ℕ} (M : Matrix (Sum (Fin r) Unit) (Sum (Fin r) Unit) 𝕜)
open Sum Unit Fin TransvectionStruct
+#print Matrix.Pivot.listTransvecCol /-
/-- A list of transvections such that multiplying on the left with these transvections will replace
the last column with zeroes. -/
def listTransvecCol : List (Matrix (Sum (Fin r) Unit) (Sum (Fin r) Unit) 𝕜) :=
List.ofFn fun i : Fin r =>
transvection (inl i) (inr unit) <| -M (inl i) (inr unit) / M (inr unit) (inr unit)
#align matrix.pivot.list_transvec_col Matrix.Pivot.listTransvecCol
+-/
+#print Matrix.Pivot.listTransvecRow /-
/-- A list of transvections such that multiplying on the right with these transvections will replace
the last row with zeroes. -/
def listTransvecRow : List (Matrix (Sum (Fin r) Unit) (Sum (Fin r) Unit) 𝕜) :=
List.ofFn fun i : Fin r =>
transvection (inr unit) (inl i) <| -M (inr unit) (inl i) / M (inr unit) (inr unit)
#align matrix.pivot.list_transvec_row Matrix.Pivot.listTransvecRow
+-/
+/- warning: matrix.pivot.list_transvec_col_mul_last_row_drop -> Matrix.Pivot.listTransvecCol_mul_last_row_drop is a dubious translation:
+lean 3 declaration is
+ forall {𝕜 : Type.{u1}} [_inst_1 : Field.{u1} 𝕜] {r : Nat} (M : Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (i : Sum.{0, 0} (Fin r) Unit) {k : Nat}, (LE.le.{0} Nat Nat.hasLe k r) -> (Eq.{succ u1} 𝕜 (Matrix.mul.{u1, 0, 0, 0} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜 (Sum.fintype.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (Distrib.toHasMul.{u1} 𝕜 (Ring.toDistrib.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) (List.prod.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.hasMul.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (Sum.fintype.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (Distrib.toHasMul.{u1} 𝕜 (Ring.toDistrib.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.hasOne.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.decidableEq.{0, 0} (Fin r) (fun (a : Fin r) (b : Fin r) => Fin.decidableEq r a b) Unit (fun (a : Unit) (b : Unit) => PUnit.decidableEq.{1} a b) a b) (MulZeroClass.toHasZero.{u1} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (AddMonoidWithOne.toOne.{u1} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u1} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u1} 𝕜 (Ring.toAddCommGroupWithOne.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (List.drop.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) k (Matrix.Pivot.listTransvecCol.{u1} 𝕜 _inst_1 r M))) M (Sum.inr.{0, 0} (Fin r) Unit Unit.unit) i) (M (Sum.inr.{0, 0} (Fin r) Unit Unit.unit) i))
+but is expected to have type
+ forall {𝕜 : Type.{u1}} [_inst_1 : Field.{u1} 𝕜] {r : Nat} (M : Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (i : Sum.{0, 0} (Fin r) Unit) {k : Nat}, (LE.le.{0} Nat instLENat k r) -> (Eq.{succ u1} 𝕜 (Matrix.mul.{u1, 0, 0, 0} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) (List.prod.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.instMulMatrix.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.one.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.instDecidableEqSum.{0, 0} (Fin r) Unit (fun (a : Fin r) (b : Fin r) => instDecidableEqFin r a b) (fun (a : Unit) (b : Unit) => instDecidableEqPUnit.{1} a b) a b) (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))) (NonAssocRing.toOne.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (List.drop.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) k (Matrix.Pivot.listTransvecCol.{u1} 𝕜 _inst_1 r M))) M (Sum.inr.{0, 0} (Fin r) Unit Unit.unit) i) (M (Sum.inr.{0, 0} (Fin r) Unit Unit.unit) i))
+Case conversion may be inaccurate. Consider using '#align matrix.pivot.list_transvec_col_mul_last_row_drop Matrix.Pivot.listTransvecCol_mul_last_row_dropₓ'. -/
/-- Multiplying by some of the matrices in `list_transvec_col M` does not change the last row. -/
theorem listTransvecCol_mul_last_row_drop (i : Sum (Fin r) Unit) {k : ℕ} (hk : k ≤ r) :
(((listTransvecCol M).drop k).Prod ⬝ M) (inr unit) i = M (inr unit) i :=
@@ -390,12 +548,24 @@ theorem listTransvecCol_mul_last_row_drop (i : Sum (Fin r) Unit) {k : ℕ} (hk :
simpa [list_transvec_col, Matrix.mul_assoc]
#align matrix.pivot.list_transvec_col_mul_last_row_drop Matrix.Pivot.listTransvecCol_mul_last_row_drop
+/- warning: matrix.pivot.list_transvec_col_mul_last_row -> Matrix.Pivot.listTransvecCol_mul_last_row is a dubious translation:
+lean 3 declaration is
+ forall {𝕜 : Type.{u1}} [_inst_1 : Field.{u1} 𝕜] {r : Nat} (M : Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (i : Sum.{0, 0} (Fin r) Unit), Eq.{succ u1} 𝕜 (Matrix.mul.{u1, 0, 0, 0} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜 (Sum.fintype.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (Distrib.toHasMul.{u1} 𝕜 (Ring.toDistrib.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) (List.prod.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.hasMul.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (Sum.fintype.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (Distrib.toHasMul.{u1} 𝕜 (Ring.toDistrib.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.hasOne.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.decidableEq.{0, 0} (Fin r) (fun (a : Fin r) (b : Fin r) => Fin.decidableEq r a b) Unit (fun (a : Unit) (b : Unit) => PUnit.decidableEq.{1} a b) a b) (MulZeroClass.toHasZero.{u1} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (AddMonoidWithOne.toOne.{u1} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u1} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u1} 𝕜 (Ring.toAddCommGroupWithOne.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.Pivot.listTransvecCol.{u1} 𝕜 _inst_1 r M)) M (Sum.inr.{0, 0} (Fin r) Unit Unit.unit) i) (M (Sum.inr.{0, 0} (Fin r) Unit Unit.unit) i)
+but is expected to have type
+ forall {𝕜 : Type.{u1}} [_inst_1 : Field.{u1} 𝕜] {r : Nat} (M : Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (i : Sum.{0, 0} (Fin r) Unit), Eq.{succ u1} 𝕜 (Matrix.mul.{u1, 0, 0, 0} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) (List.prod.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.instMulMatrix.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.one.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.instDecidableEqSum.{0, 0} (Fin r) Unit (fun (a : Fin r) (b : Fin r) => instDecidableEqFin r a b) (fun (a : Unit) (b : Unit) => instDecidableEqPUnit.{1} a b) a b) (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))) (NonAssocRing.toOne.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (Matrix.Pivot.listTransvecCol.{u1} 𝕜 _inst_1 r M)) M (Sum.inr.{0, 0} (Fin r) Unit Unit.unit) i) (M (Sum.inr.{0, 0} (Fin r) Unit Unit.unit) i)
+Case conversion may be inaccurate. Consider using '#align matrix.pivot.list_transvec_col_mul_last_row Matrix.Pivot.listTransvecCol_mul_last_rowₓ'. -/
/-- Multiplying by all the matrices in `list_transvec_col M` does not change the last row. -/
theorem listTransvecCol_mul_last_row (i : Sum (Fin r) Unit) :
((listTransvecCol M).Prod ⬝ M) (inr unit) i = M (inr unit) i := by
simpa using list_transvec_col_mul_last_row_drop M i (zero_le _)
#align matrix.pivot.list_transvec_col_mul_last_row Matrix.Pivot.listTransvecCol_mul_last_row
+/- warning: matrix.pivot.list_transvec_col_mul_last_col -> Matrix.Pivot.listTransvecCol_mul_last_col is a dubious translation:
+lean 3 declaration is
+ forall {𝕜 : Type.{u1}} [_inst_1 : Field.{u1} 𝕜] {r : Nat} (M : Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜), (Ne.{succ u1} 𝕜 (M (Sum.inr.{0, 0} (Fin r) Unit Unit.unit) (Sum.inr.{0, 0} (Fin r) Unit Unit.unit)) (OfNat.ofNat.{u1} 𝕜 0 (OfNat.mk.{u1} 𝕜 0 (Zero.zero.{u1} 𝕜 (MulZeroClass.toHasZero.{u1} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))))))) -> (forall (i : Fin r), Eq.{succ u1} 𝕜 (Matrix.mul.{u1, 0, 0, 0} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜 (Sum.fintype.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (Distrib.toHasMul.{u1} 𝕜 (Ring.toDistrib.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) (List.prod.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.hasMul.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (Sum.fintype.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (Distrib.toHasMul.{u1} 𝕜 (Ring.toDistrib.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.hasOne.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.decidableEq.{0, 0} (Fin r) (fun (a : Fin r) (b : Fin r) => Fin.decidableEq r a b) Unit (fun (a : Unit) (b : Unit) => PUnit.decidableEq.{1} a b) a b) (MulZeroClass.toHasZero.{u1} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (AddMonoidWithOne.toOne.{u1} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u1} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u1} 𝕜 (Ring.toAddCommGroupWithOne.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.Pivot.listTransvecCol.{u1} 𝕜 _inst_1 r M)) M (Sum.inl.{0, 0} (Fin r) Unit i) (Sum.inr.{0, 0} (Fin r) Unit Unit.unit)) (OfNat.ofNat.{u1} 𝕜 0 (OfNat.mk.{u1} 𝕜 0 (Zero.zero.{u1} 𝕜 (MulZeroClass.toHasZero.{u1} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))))))))
+but is expected to have type
+ forall {𝕜 : Type.{u1}} [_inst_1 : Field.{u1} 𝕜] {r : Nat} (M : Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜), (Ne.{succ u1} 𝕜 (M (Sum.inr.{0, 0} (Fin r) Unit Unit.unit) (Sum.inr.{0, 0} (Fin r) Unit Unit.unit)) (OfNat.ofNat.{u1} 𝕜 0 (Zero.toOfNat0.{u1} 𝕜 (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1))))))) -> (forall (i : Fin r), Eq.{succ u1} 𝕜 (Matrix.mul.{u1, 0, 0, 0} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) (List.prod.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.instMulMatrix.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.one.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.instDecidableEqSum.{0, 0} (Fin r) Unit (fun (a : Fin r) (b : Fin r) => instDecidableEqFin r a b) (fun (a : Unit) (b : Unit) => instDecidableEqPUnit.{1} a b) a b) (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))) (NonAssocRing.toOne.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (Matrix.Pivot.listTransvecCol.{u1} 𝕜 _inst_1 r M)) M (Sum.inl.{0, 0} (Fin r) Unit i) (Sum.inr.{0, 0} (Fin r) Unit Unit.unit)) (OfNat.ofNat.{u1} 𝕜 0 (Zero.toOfNat0.{u1} 𝕜 (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))))))
+Case conversion may be inaccurate. Consider using '#align matrix.pivot.list_transvec_col_mul_last_col Matrix.Pivot.listTransvecCol_mul_last_colₓ'. -/
/-- Multiplying by all the matrices in `list_transvec_col M` kills all the coefficients in the
last column but the last one. -/
theorem listTransvecCol_mul_last_col (hM : M (inr unit) (inr unit) ≠ 0) (i : Fin r) :
@@ -442,6 +612,12 @@ theorem listTransvecCol_mul_last_col (hM : M (inr unit) (inr unit) ≠ 0) (i : F
· simpa only [not_le] using hi
#align matrix.pivot.list_transvec_col_mul_last_col Matrix.Pivot.listTransvecCol_mul_last_col
+/- warning: matrix.pivot.mul_list_transvec_row_last_col_take -> Matrix.Pivot.mul_listTransvecRow_last_col_take is a dubious translation:
+lean 3 declaration is
+ forall {𝕜 : Type.{u1}} [_inst_1 : Field.{u1} 𝕜] {r : Nat} (M : Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (i : Sum.{0, 0} (Fin r) Unit) {k : Nat}, (LE.le.{0} Nat Nat.hasLe k r) -> (Eq.{succ u1} 𝕜 (Matrix.mul.{u1, 0, 0, 0} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜 (Sum.fintype.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (Distrib.toHasMul.{u1} 𝕜 (Ring.toDistrib.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) M (List.prod.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.hasMul.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (Sum.fintype.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (Distrib.toHasMul.{u1} 𝕜 (Ring.toDistrib.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.hasOne.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.decidableEq.{0, 0} (Fin r) (fun (a : Fin r) (b : Fin r) => Fin.decidableEq r a b) Unit (fun (a : Unit) (b : Unit) => PUnit.decidableEq.{1} a b) a b) (MulZeroClass.toHasZero.{u1} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (AddMonoidWithOne.toOne.{u1} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u1} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u1} 𝕜 (Ring.toAddCommGroupWithOne.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (List.take.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) k (Matrix.Pivot.listTransvecRow.{u1} 𝕜 _inst_1 r M))) i (Sum.inr.{0, 0} (Fin r) Unit Unit.unit)) (M i (Sum.inr.{0, 0} (Fin r) Unit Unit.unit)))
+but is expected to have type
+ forall {𝕜 : Type.{u1}} [_inst_1 : Field.{u1} 𝕜] {r : Nat} (M : Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (i : Sum.{0, 0} (Fin r) Unit) {k : Nat}, (LE.le.{0} Nat instLENat k r) -> (Eq.{succ u1} 𝕜 (Matrix.mul.{u1, 0, 0, 0} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) M (List.prod.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.instMulMatrix.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.one.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.instDecidableEqSum.{0, 0} (Fin r) Unit (fun (a : Fin r) (b : Fin r) => instDecidableEqFin r a b) (fun (a : Unit) (b : Unit) => instDecidableEqPUnit.{1} a b) a b) (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))) (NonAssocRing.toOne.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (List.take.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) k (Matrix.Pivot.listTransvecRow.{u1} 𝕜 _inst_1 r M))) i (Sum.inr.{0, 0} (Fin r) Unit Unit.unit)) (M i (Sum.inr.{0, 0} (Fin r) Unit Unit.unit)))
+Case conversion may be inaccurate. Consider using '#align matrix.pivot.mul_list_transvec_row_last_col_take Matrix.Pivot.mul_listTransvecRow_last_col_takeₓ'. -/
/-- Multiplying by some of the matrices in `list_transvec_row M` does not change the last column. -/
theorem mul_listTransvecRow_last_col_take (i : Sum (Fin r) Unit) {k : ℕ} (hk : k ≤ r) :
(M ⬝ ((listTransvecRow M).take k).Prod) i (inr unit) = M i (inr unit) :=
@@ -463,6 +639,12 @@ theorem mul_listTransvecRow_last_col_take (i : Sum (Fin r) Unit) {k : ℕ} (hk :
simp only [Ne.def, not_false_iff]
#align matrix.pivot.mul_list_transvec_row_last_col_take Matrix.Pivot.mul_listTransvecRow_last_col_take
+/- warning: matrix.pivot.mul_list_transvec_row_last_col -> Matrix.Pivot.mul_listTransvecRow_last_col is a dubious translation:
+lean 3 declaration is
+ forall {𝕜 : Type.{u1}} [_inst_1 : Field.{u1} 𝕜] {r : Nat} (M : Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (i : Sum.{0, 0} (Fin r) Unit), Eq.{succ u1} 𝕜 (Matrix.mul.{u1, 0, 0, 0} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜 (Sum.fintype.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (Distrib.toHasMul.{u1} 𝕜 (Ring.toDistrib.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) M (List.prod.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.hasMul.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (Sum.fintype.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (Distrib.toHasMul.{u1} 𝕜 (Ring.toDistrib.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.hasOne.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.decidableEq.{0, 0} (Fin r) (fun (a : Fin r) (b : Fin r) => Fin.decidableEq r a b) Unit (fun (a : Unit) (b : Unit) => PUnit.decidableEq.{1} a b) a b) (MulZeroClass.toHasZero.{u1} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (AddMonoidWithOne.toOne.{u1} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u1} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u1} 𝕜 (Ring.toAddCommGroupWithOne.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.Pivot.listTransvecRow.{u1} 𝕜 _inst_1 r M)) i (Sum.inr.{0, 0} (Fin r) Unit Unit.unit)) (M i (Sum.inr.{0, 0} (Fin r) Unit Unit.unit))
+but is expected to have type
+ forall {𝕜 : Type.{u1}} [_inst_1 : Field.{u1} 𝕜] {r : Nat} (M : Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (i : Sum.{0, 0} (Fin r) Unit), Eq.{succ u1} 𝕜 (Matrix.mul.{u1, 0, 0, 0} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) M (List.prod.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.instMulMatrix.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.one.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.instDecidableEqSum.{0, 0} (Fin r) Unit (fun (a : Fin r) (b : Fin r) => instDecidableEqFin r a b) (fun (a : Unit) (b : Unit) => instDecidableEqPUnit.{1} a b) a b) (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))) (NonAssocRing.toOne.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (Matrix.Pivot.listTransvecRow.{u1} 𝕜 _inst_1 r M)) i (Sum.inr.{0, 0} (Fin r) Unit Unit.unit)) (M i (Sum.inr.{0, 0} (Fin r) Unit Unit.unit))
+Case conversion may be inaccurate. Consider using '#align matrix.pivot.mul_list_transvec_row_last_col Matrix.Pivot.mul_listTransvecRow_last_colₓ'. -/
/-- Multiplying by all the matrices in `list_transvec_row M` does not change the last column. -/
theorem mul_listTransvecRow_last_col (i : Sum (Fin r) Unit) :
(M ⬝ (listTransvecRow M).Prod) i (inr unit) = M i (inr unit) :=
@@ -472,6 +654,12 @@ theorem mul_listTransvecRow_last_col (i : Sum (Fin r) Unit) :
simpa using mul_list_transvec_row_last_col_take M i le_rfl
#align matrix.pivot.mul_list_transvec_row_last_col Matrix.Pivot.mul_listTransvecRow_last_col
+/- warning: matrix.pivot.mul_list_transvec_row_last_row -> Matrix.Pivot.mul_listTransvecRow_last_row is a dubious translation:
+lean 3 declaration is
+ forall {𝕜 : Type.{u1}} [_inst_1 : Field.{u1} 𝕜] {r : Nat} (M : Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜), (Ne.{succ u1} 𝕜 (M (Sum.inr.{0, 0} (Fin r) Unit Unit.unit) (Sum.inr.{0, 0} (Fin r) Unit Unit.unit)) (OfNat.ofNat.{u1} 𝕜 0 (OfNat.mk.{u1} 𝕜 0 (Zero.zero.{u1} 𝕜 (MulZeroClass.toHasZero.{u1} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))))))) -> (forall (i : Fin r), Eq.{succ u1} 𝕜 (Matrix.mul.{u1, 0, 0, 0} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜 (Sum.fintype.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (Distrib.toHasMul.{u1} 𝕜 (Ring.toDistrib.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) M (List.prod.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.hasMul.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (Sum.fintype.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (Distrib.toHasMul.{u1} 𝕜 (Ring.toDistrib.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.hasOne.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.decidableEq.{0, 0} (Fin r) (fun (a : Fin r) (b : Fin r) => Fin.decidableEq r a b) Unit (fun (a : Unit) (b : Unit) => PUnit.decidableEq.{1} a b) a b) (MulZeroClass.toHasZero.{u1} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (AddMonoidWithOne.toOne.{u1} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u1} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u1} 𝕜 (Ring.toAddCommGroupWithOne.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.Pivot.listTransvecRow.{u1} 𝕜 _inst_1 r M)) (Sum.inr.{0, 0} (Fin r) Unit Unit.unit) (Sum.inl.{0, 0} (Fin r) Unit i)) (OfNat.ofNat.{u1} 𝕜 0 (OfNat.mk.{u1} 𝕜 0 (Zero.zero.{u1} 𝕜 (MulZeroClass.toHasZero.{u1} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))))))))
+but is expected to have type
+ forall {𝕜 : Type.{u1}} [_inst_1 : Field.{u1} 𝕜] {r : Nat} (M : Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜), (Ne.{succ u1} 𝕜 (M (Sum.inr.{0, 0} (Fin r) Unit Unit.unit) (Sum.inr.{0, 0} (Fin r) Unit Unit.unit)) (OfNat.ofNat.{u1} 𝕜 0 (Zero.toOfNat0.{u1} 𝕜 (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1))))))) -> (forall (i : Fin r), Eq.{succ u1} 𝕜 (Matrix.mul.{u1, 0, 0, 0} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) M (List.prod.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.instMulMatrix.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.one.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.instDecidableEqSum.{0, 0} (Fin r) Unit (fun (a : Fin r) (b : Fin r) => instDecidableEqFin r a b) (fun (a : Unit) (b : Unit) => instDecidableEqPUnit.{1} a b) a b) (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))) (NonAssocRing.toOne.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (Matrix.Pivot.listTransvecRow.{u1} 𝕜 _inst_1 r M)) (Sum.inr.{0, 0} (Fin r) Unit Unit.unit) (Sum.inl.{0, 0} (Fin r) Unit i)) (OfNat.ofNat.{u1} 𝕜 0 (Zero.toOfNat0.{u1} 𝕜 (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))))))
+Case conversion may be inaccurate. Consider using '#align matrix.pivot.mul_list_transvec_row_last_row Matrix.Pivot.mul_listTransvecRow_last_rowₓ'. -/
/-- Multiplying by all the matrices in `list_transvec_row M` kills all the coefficients in the
last row but the last one. -/
theorem mul_listTransvecRow_last_row (hM : M (inr unit) (inr unit) ≠ 0) (i : Fin r) :
@@ -521,6 +709,12 @@ theorem mul_listTransvecRow_last_row (hM : M (inr unit) (inr unit) ≠ 0) (i : F
· simpa only [hni.symm, not_le, or_false_iff] using Nat.lt_succ_iff_lt_or_eq.1 hi
#align matrix.pivot.mul_list_transvec_row_last_row Matrix.Pivot.mul_listTransvecRow_last_row
+/- warning: matrix.pivot.list_transvec_col_mul_mul_list_transvec_row_last_col -> Matrix.Pivot.listTransvecCol_mul_mul_listTransvecRow_last_col is a dubious translation:
+lean 3 declaration is
+ forall {𝕜 : Type.{u1}} [_inst_1 : Field.{u1} 𝕜] {r : Nat} (M : Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜), (Ne.{succ u1} 𝕜 (M (Sum.inr.{0, 0} (Fin r) Unit Unit.unit) (Sum.inr.{0, 0} (Fin r) Unit Unit.unit)) (OfNat.ofNat.{u1} 𝕜 0 (OfNat.mk.{u1} 𝕜 0 (Zero.zero.{u1} 𝕜 (MulZeroClass.toHasZero.{u1} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))))))) -> (forall (i : Fin r), Eq.{succ u1} 𝕜 (Matrix.mul.{u1, 0, 0, 0} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜 (Sum.fintype.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (Distrib.toHasMul.{u1} 𝕜 (Ring.toDistrib.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) (Matrix.mul.{u1, 0, 0, 0} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜 (Sum.fintype.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (Distrib.toHasMul.{u1} 𝕜 (Ring.toDistrib.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) (List.prod.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.hasMul.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (Sum.fintype.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (Distrib.toHasMul.{u1} 𝕜 (Ring.toDistrib.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.hasOne.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.decidableEq.{0, 0} (Fin r) (fun (a : Fin r) (b : Fin r) => Fin.decidableEq r a b) Unit (fun (a : Unit) (b : Unit) => PUnit.decidableEq.{1} a b) a b) (MulZeroClass.toHasZero.{u1} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (AddMonoidWithOne.toOne.{u1} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u1} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u1} 𝕜 (Ring.toAddCommGroupWithOne.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.Pivot.listTransvecCol.{u1} 𝕜 _inst_1 r M)) M) (List.prod.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.hasMul.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (Sum.fintype.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (Distrib.toHasMul.{u1} 𝕜 (Ring.toDistrib.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.hasOne.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.decidableEq.{0, 0} (Fin r) (fun (a : Fin r) (b : Fin r) => Fin.decidableEq r a b) Unit (fun (a : Unit) (b : Unit) => PUnit.decidableEq.{1} a b) a b) (MulZeroClass.toHasZero.{u1} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (AddMonoidWithOne.toOne.{u1} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u1} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u1} 𝕜 (Ring.toAddCommGroupWithOne.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.Pivot.listTransvecRow.{u1} 𝕜 _inst_1 r M)) (Sum.inr.{0, 0} (Fin r) Unit Unit.unit) (Sum.inl.{0, 0} (Fin r) Unit i)) (OfNat.ofNat.{u1} 𝕜 0 (OfNat.mk.{u1} 𝕜 0 (Zero.zero.{u1} 𝕜 (MulZeroClass.toHasZero.{u1} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))))))))
+but is expected to have type
+ forall {𝕜 : Type.{u1}} [_inst_1 : Field.{u1} 𝕜] {r : Nat} (M : Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜), (Ne.{succ u1} 𝕜 (M (Sum.inr.{0, 0} (Fin r) Unit Unit.unit) (Sum.inr.{0, 0} (Fin r) Unit Unit.unit)) (OfNat.ofNat.{u1} 𝕜 0 (Zero.toOfNat0.{u1} 𝕜 (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1))))))) -> (forall (i : Fin r), Eq.{succ u1} 𝕜 (Matrix.mul.{u1, 0, 0, 0} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) (Matrix.mul.{u1, 0, 0, 0} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) (List.prod.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.instMulMatrix.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.one.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.instDecidableEqSum.{0, 0} (Fin r) Unit (fun (a : Fin r) (b : Fin r) => instDecidableEqFin r a b) (fun (a : Unit) (b : Unit) => instDecidableEqPUnit.{1} a b) a b) (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))) (NonAssocRing.toOne.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (Matrix.Pivot.listTransvecCol.{u1} 𝕜 _inst_1 r M)) M) (List.prod.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.instMulMatrix.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.one.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.instDecidableEqSum.{0, 0} (Fin r) Unit (fun (a : Fin r) (b : Fin r) => instDecidableEqFin r a b) (fun (a : Unit) (b : Unit) => instDecidableEqPUnit.{1} a b) a b) (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))) (NonAssocRing.toOne.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (Matrix.Pivot.listTransvecRow.{u1} 𝕜 _inst_1 r M)) (Sum.inr.{0, 0} (Fin r) Unit Unit.unit) (Sum.inl.{0, 0} (Fin r) Unit i)) (OfNat.ofNat.{u1} 𝕜 0 (Zero.toOfNat0.{u1} 𝕜 (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))))))
+Case conversion may be inaccurate. Consider using '#align matrix.pivot.list_transvec_col_mul_mul_list_transvec_row_last_col Matrix.Pivot.listTransvecCol_mul_mul_listTransvecRow_last_colₓ'. -/
/-- Multiplying by all the matrices either in `list_transvec_col M` and `list_transvec_row M` kills
all the coefficients in the last row but the last one. -/
theorem listTransvecCol_mul_mul_listTransvecRow_last_col (hM : M (inr unit) (inr unit) ≠ 0)
@@ -534,6 +728,12 @@ theorem listTransvecCol_mul_mul_listTransvecRow_last_col (hM : M (inr unit) (inr
simpa [list_transvec_col_mul_last_row] using hM
#align matrix.pivot.list_transvec_col_mul_mul_list_transvec_row_last_col Matrix.Pivot.listTransvecCol_mul_mul_listTransvecRow_last_col
+/- warning: matrix.pivot.list_transvec_col_mul_mul_list_transvec_row_last_row -> Matrix.Pivot.listTransvecCol_mul_mul_listTransvecRow_last_row is a dubious translation:
+lean 3 declaration is
+ forall {𝕜 : Type.{u1}} [_inst_1 : Field.{u1} 𝕜] {r : Nat} (M : Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜), (Ne.{succ u1} 𝕜 (M (Sum.inr.{0, 0} (Fin r) Unit Unit.unit) (Sum.inr.{0, 0} (Fin r) Unit Unit.unit)) (OfNat.ofNat.{u1} 𝕜 0 (OfNat.mk.{u1} 𝕜 0 (Zero.zero.{u1} 𝕜 (MulZeroClass.toHasZero.{u1} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))))))) -> (forall (i : Fin r), Eq.{succ u1} 𝕜 (Matrix.mul.{u1, 0, 0, 0} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜 (Sum.fintype.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (Distrib.toHasMul.{u1} 𝕜 (Ring.toDistrib.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) (Matrix.mul.{u1, 0, 0, 0} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜 (Sum.fintype.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (Distrib.toHasMul.{u1} 𝕜 (Ring.toDistrib.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) (List.prod.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.hasMul.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (Sum.fintype.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (Distrib.toHasMul.{u1} 𝕜 (Ring.toDistrib.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.hasOne.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.decidableEq.{0, 0} (Fin r) (fun (a : Fin r) (b : Fin r) => Fin.decidableEq r a b) Unit (fun (a : Unit) (b : Unit) => PUnit.decidableEq.{1} a b) a b) (MulZeroClass.toHasZero.{u1} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (AddMonoidWithOne.toOne.{u1} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u1} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u1} 𝕜 (Ring.toAddCommGroupWithOne.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.Pivot.listTransvecCol.{u1} 𝕜 _inst_1 r M)) M) (List.prod.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.hasMul.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (Sum.fintype.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (Distrib.toHasMul.{u1} 𝕜 (Ring.toDistrib.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.hasOne.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.decidableEq.{0, 0} (Fin r) (fun (a : Fin r) (b : Fin r) => Fin.decidableEq r a b) Unit (fun (a : Unit) (b : Unit) => PUnit.decidableEq.{1} a b) a b) (MulZeroClass.toHasZero.{u1} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (AddMonoidWithOne.toOne.{u1} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u1} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u1} 𝕜 (Ring.toAddCommGroupWithOne.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.Pivot.listTransvecRow.{u1} 𝕜 _inst_1 r M)) (Sum.inl.{0, 0} (Fin r) Unit i) (Sum.inr.{0, 0} (Fin r) Unit Unit.unit)) (OfNat.ofNat.{u1} 𝕜 0 (OfNat.mk.{u1} 𝕜 0 (Zero.zero.{u1} 𝕜 (MulZeroClass.toHasZero.{u1} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))))))))
+but is expected to have type
+ forall {𝕜 : Type.{u1}} [_inst_1 : Field.{u1} 𝕜] {r : Nat} (M : Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜), (Ne.{succ u1} 𝕜 (M (Sum.inr.{0, 0} (Fin r) Unit Unit.unit) (Sum.inr.{0, 0} (Fin r) Unit Unit.unit)) (OfNat.ofNat.{u1} 𝕜 0 (Zero.toOfNat0.{u1} 𝕜 (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1))))))) -> (forall (i : Fin r), Eq.{succ u1} 𝕜 (Matrix.mul.{u1, 0, 0, 0} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) (Matrix.mul.{u1, 0, 0, 0} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) (List.prod.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.instMulMatrix.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.one.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.instDecidableEqSum.{0, 0} (Fin r) Unit (fun (a : Fin r) (b : Fin r) => instDecidableEqFin r a b) (fun (a : Unit) (b : Unit) => instDecidableEqPUnit.{1} a b) a b) (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))) (NonAssocRing.toOne.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (Matrix.Pivot.listTransvecCol.{u1} 𝕜 _inst_1 r M)) M) (List.prod.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.instMulMatrix.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.one.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.instDecidableEqSum.{0, 0} (Fin r) Unit (fun (a : Fin r) (b : Fin r) => instDecidableEqFin r a b) (fun (a : Unit) (b : Unit) => instDecidableEqPUnit.{1} a b) a b) (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))) (NonAssocRing.toOne.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (Matrix.Pivot.listTransvecRow.{u1} 𝕜 _inst_1 r M)) (Sum.inl.{0, 0} (Fin r) Unit i) (Sum.inr.{0, 0} (Fin r) Unit Unit.unit)) (OfNat.ofNat.{u1} 𝕜 0 (Zero.toOfNat0.{u1} 𝕜 (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))))))
+Case conversion may be inaccurate. Consider using '#align matrix.pivot.list_transvec_col_mul_mul_list_transvec_row_last_row Matrix.Pivot.listTransvecCol_mul_mul_listTransvecRow_last_rowₓ'. -/
/-- Multiplying by all the matrices either in `list_transvec_col M` and `list_transvec_row M` kills
all the coefficients in the last column but the last one. -/
theorem listTransvecCol_mul_mul_listTransvecRow_last_row (hM : M (inr unit) (inr unit) ≠ 0)
@@ -547,6 +747,12 @@ theorem listTransvecCol_mul_mul_listTransvecRow_last_row (hM : M (inr unit) (inr
simpa [mul_list_transvec_row_last_col] using hM
#align matrix.pivot.list_transvec_col_mul_mul_list_transvec_row_last_row Matrix.Pivot.listTransvecCol_mul_mul_listTransvecRow_last_row
+/- warning: matrix.pivot.is_two_block_diagonal_list_transvec_col_mul_mul_list_transvec_row -> Matrix.Pivot.isTwoBlockDiagonal_listTransvecCol_mul_mul_listTransvecRow is a dubious translation:
+lean 3 declaration is
+ forall {𝕜 : Type.{u1}} [_inst_1 : Field.{u1} 𝕜] {r : Nat} (M : Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜), (Ne.{succ u1} 𝕜 (M (Sum.inr.{0, 0} (Fin r) Unit Unit.unit) (Sum.inr.{0, 0} (Fin r) Unit Unit.unit)) (OfNat.ofNat.{u1} 𝕜 0 (OfNat.mk.{u1} 𝕜 0 (Zero.zero.{u1} 𝕜 (MulZeroClass.toHasZero.{u1} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))))))) -> (Matrix.IsTwoBlockDiagonal.{0, 0, 0, 0, u1} (Fin r) Unit (Fin r) Unit 𝕜 (MulZeroClass.toHasZero.{u1} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.mul.{u1, 0, 0, 0} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜 (Sum.fintype.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (Distrib.toHasMul.{u1} 𝕜 (Ring.toDistrib.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) (Matrix.mul.{u1, 0, 0, 0} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜 (Sum.fintype.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (Distrib.toHasMul.{u1} 𝕜 (Ring.toDistrib.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) (List.prod.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.hasMul.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (Sum.fintype.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (Distrib.toHasMul.{u1} 𝕜 (Ring.toDistrib.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.hasOne.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.decidableEq.{0, 0} (Fin r) (fun (a : Fin r) (b : Fin r) => Fin.decidableEq r a b) Unit (fun (a : Unit) (b : Unit) => PUnit.decidableEq.{1} a b) a b) (MulZeroClass.toHasZero.{u1} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (AddMonoidWithOne.toOne.{u1} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u1} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u1} 𝕜 (Ring.toAddCommGroupWithOne.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.Pivot.listTransvecCol.{u1} 𝕜 _inst_1 r M)) M) (List.prod.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.hasMul.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (Sum.fintype.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (Distrib.toHasMul.{u1} 𝕜 (Ring.toDistrib.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.hasOne.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.decidableEq.{0, 0} (Fin r) (fun (a : Fin r) (b : Fin r) => Fin.decidableEq r a b) Unit (fun (a : Unit) (b : Unit) => PUnit.decidableEq.{1} a b) a b) (MulZeroClass.toHasZero.{u1} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (AddMonoidWithOne.toOne.{u1} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u1} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u1} 𝕜 (Ring.toAddCommGroupWithOne.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.Pivot.listTransvecRow.{u1} 𝕜 _inst_1 r M))))
+but is expected to have type
+ forall {𝕜 : Type.{u1}} [_inst_1 : Field.{u1} 𝕜] {r : Nat} (M : Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜), (Ne.{succ u1} 𝕜 (M (Sum.inr.{0, 0} (Fin r) Unit Unit.unit) (Sum.inr.{0, 0} (Fin r) Unit Unit.unit)) (OfNat.ofNat.{u1} 𝕜 0 (Zero.toOfNat0.{u1} 𝕜 (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1))))))) -> (Matrix.IsTwoBlockDiagonal.{0, 0, 0, 0, u1} (Fin r) Unit (Fin r) Unit 𝕜 (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))) (Matrix.mul.{u1, 0, 0, 0} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) (Matrix.mul.{u1, 0, 0, 0} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) (List.prod.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.instMulMatrix.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.one.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.instDecidableEqSum.{0, 0} (Fin r) Unit (fun (a : Fin r) (b : Fin r) => instDecidableEqFin r a b) (fun (a : Unit) (b : Unit) => instDecidableEqPUnit.{1} a b) a b) (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))) (NonAssocRing.toOne.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (Matrix.Pivot.listTransvecCol.{u1} 𝕜 _inst_1 r M)) M) (List.prod.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.instMulMatrix.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.one.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.instDecidableEqSum.{0, 0} (Fin r) Unit (fun (a : Fin r) (b : Fin r) => instDecidableEqFin r a b) (fun (a : Unit) (b : Unit) => instDecidableEqPUnit.{1} a b) a b) (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))) (NonAssocRing.toOne.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (Matrix.Pivot.listTransvecRow.{u1} 𝕜 _inst_1 r M))))
+Case conversion may be inaccurate. Consider using '#align matrix.pivot.is_two_block_diagonal_list_transvec_col_mul_mul_list_transvec_row Matrix.Pivot.isTwoBlockDiagonal_listTransvecCol_mul_mul_listTransvecRowₓ'. -/
/-- Multiplying by all the matrices either in `list_transvec_col M` and `list_transvec_row M` turns
the matrix in block-diagonal form. -/
theorem isTwoBlockDiagonal_listTransvecCol_mul_mul_listTransvecRow
@@ -562,6 +768,12 @@ theorem isTwoBlockDiagonal_listTransvecCol_mul_mul_listTransvecRow
simp [to_blocks₂₁, this, list_transvec_col_mul_mul_list_transvec_row_last_col M hM]
#align matrix.pivot.is_two_block_diagonal_list_transvec_col_mul_mul_list_transvec_row Matrix.Pivot.isTwoBlockDiagonal_listTransvecCol_mul_mul_listTransvecRow
+/- warning: matrix.pivot.exists_is_two_block_diagonal_of_ne_zero -> Matrix.Pivot.exists_isTwoBlockDiagonal_of_ne_zero is a dubious translation:
+lean 3 declaration is
+ forall {𝕜 : Type.{u1}} [_inst_1 : Field.{u1} 𝕜] {r : Nat} (M : Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜), (Ne.{succ u1} 𝕜 (M (Sum.inr.{0, 0} (Fin r) Unit Unit.unit) (Sum.inr.{0, 0} (Fin r) Unit Unit.unit)) (OfNat.ofNat.{u1} 𝕜 0 (OfNat.mk.{u1} 𝕜 0 (Zero.zero.{u1} 𝕜 (MulZeroClass.toHasZero.{u1} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))))))) -> (Exists.{succ u1} (List.{u1} (Matrix.TransvectionStruct.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.decidableEq.{0, 0} (Fin r) (fun (a : Fin r) (b : Fin r) => Fin.decidableEq r a b) Unit (fun (a : Unit) (b : Unit) => PUnit.decidableEq.{1} a b) a b) (EuclideanDomain.toCommRing.{u1} 𝕜 (Field.toEuclideanDomain.{u1} 𝕜 _inst_1)))) (fun (L : List.{u1} (Matrix.TransvectionStruct.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.decidableEq.{0, 0} (Fin r) (fun (a : Fin r) (b : Fin r) => Fin.decidableEq r a b) Unit (fun (a : Unit) (b : Unit) => PUnit.decidableEq.{1} a b) a b) (EuclideanDomain.toCommRing.{u1} 𝕜 (Field.toEuclideanDomain.{u1} 𝕜 _inst_1)))) => Exists.{succ u1} (List.{u1} (Matrix.TransvectionStruct.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.decidableEq.{0, 0} (Fin r) (fun (a : Fin r) (b : Fin r) => Fin.decidableEq r a b) Unit (fun (a : Unit) (b : Unit) => PUnit.decidableEq.{1} a b) a b) (EuclideanDomain.toCommRing.{u1} 𝕜 (Field.toEuclideanDomain.{u1} 𝕜 _inst_1)))) (fun (L' : List.{u1} (Matrix.TransvectionStruct.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.decidableEq.{0, 0} (Fin r) (fun (a : Fin r) (b : Fin r) => Fin.decidableEq r a b) Unit (fun (a : Unit) (b : Unit) => PUnit.decidableEq.{1} a b) a b) (EuclideanDomain.toCommRing.{u1} 𝕜 (Field.toEuclideanDomain.{u1} 𝕜 _inst_1)))) => Matrix.IsTwoBlockDiagonal.{0, 0, 0, 0, u1} (Fin r) Unit (Fin r) Unit 𝕜 (MulZeroClass.toHasZero.{u1} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.mul.{u1, 0, 0, 0} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜 (Sum.fintype.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (Distrib.toHasMul.{u1} 𝕜 (Ring.toDistrib.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) (Matrix.mul.{u1, 0, 0, 0} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜 (Sum.fintype.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (Distrib.toHasMul.{u1} 𝕜 (Ring.toDistrib.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) (List.prod.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.hasMul.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (Sum.fintype.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (Distrib.toHasMul.{u1} 𝕜 (Ring.toDistrib.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.hasOne.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.decidableEq.{0, 0} (Fin r) (fun (a : Fin r) (b : Fin r) => Fin.decidableEq r a b) Unit (fun (a : Unit) (b : Unit) => PUnit.decidableEq.{1} a b) a b) (MulZeroClass.toHasZero.{u1} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (AddMonoidWithOne.toOne.{u1} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u1} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u1} 𝕜 (Ring.toAddCommGroupWithOne.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (List.map.{u1, u1} (Matrix.TransvectionStruct.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.decidableEq.{0, 0} (Fin r) (fun (a : Fin r) (b : Fin r) => Fin.decidableEq r a b) Unit (fun (a : Unit) (b : Unit) => PUnit.decidableEq.{1} a b) a b) (EuclideanDomain.toCommRing.{u1} 𝕜 (Field.toEuclideanDomain.{u1} 𝕜 _inst_1))) (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.TransvectionStruct.toMatrix.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.decidableEq.{0, 0} (Fin r) (fun (a : Fin r) (b : Fin r) => Fin.decidableEq r a b) Unit (fun (a : Unit) (b : Unit) => PUnit.decidableEq.{1} a b) a b) (EuclideanDomain.toCommRing.{u1} 𝕜 (Field.toEuclideanDomain.{u1} 𝕜 _inst_1))) L)) M) (List.prod.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.hasMul.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (Sum.fintype.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (Distrib.toHasMul.{u1} 𝕜 (Ring.toDistrib.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.hasOne.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.decidableEq.{0, 0} (Fin r) (fun (a : Fin r) (b : Fin r) => Fin.decidableEq r a b) Unit (fun (a : Unit) (b : Unit) => PUnit.decidableEq.{1} a b) a b) (MulZeroClass.toHasZero.{u1} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (AddMonoidWithOne.toOne.{u1} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u1} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u1} 𝕜 (Ring.toAddCommGroupWithOne.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (List.map.{u1, u1} (Matrix.TransvectionStruct.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.decidableEq.{0, 0} (Fin r) (fun (a : Fin r) (b : Fin r) => Fin.decidableEq r a b) Unit (fun (a : Unit) (b : Unit) => PUnit.decidableEq.{1} a b) a b) (EuclideanDomain.toCommRing.{u1} 𝕜 (Field.toEuclideanDomain.{u1} 𝕜 _inst_1))) (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.TransvectionStruct.toMatrix.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.decidableEq.{0, 0} (Fin r) (fun (a : Fin r) (b : Fin r) => Fin.decidableEq r a b) Unit (fun (a : Unit) (b : Unit) => PUnit.decidableEq.{1} a b) a b) (EuclideanDomain.toCommRing.{u1} 𝕜 (Field.toEuclideanDomain.{u1} 𝕜 _inst_1))) L'))))))
+but is expected to have type
+ forall {𝕜 : Type.{u1}} [_inst_1 : Field.{u1} 𝕜] {r : Nat} (M : Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜), (Ne.{succ u1} 𝕜 (M (Sum.inr.{0, 0} (Fin r) Unit Unit.unit) (Sum.inr.{0, 0} (Fin r) Unit Unit.unit)) (OfNat.ofNat.{u1} 𝕜 0 (Zero.toOfNat0.{u1} 𝕜 (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1))))))) -> (Exists.{succ u1} (List.{u1} (Matrix.TransvectionStruct.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜)) (fun (L : List.{u1} (Matrix.TransvectionStruct.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜)) => Exists.{succ u1} (List.{u1} (Matrix.TransvectionStruct.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜)) (fun (L' : List.{u1} (Matrix.TransvectionStruct.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜)) => Matrix.IsTwoBlockDiagonal.{0, 0, 0, 0, u1} (Fin r) Unit (Fin r) Unit 𝕜 (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))) (Matrix.mul.{u1, 0, 0, 0} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) (Matrix.mul.{u1, 0, 0, 0} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) (List.prod.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.instMulMatrix.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.one.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.instDecidableEqSum.{0, 0} (Fin r) Unit (fun (a : Fin r) (b : Fin r) => instDecidableEqFin r a b) (fun (a : Unit) (b : Unit) => instDecidableEqPUnit.{1} a b) a b) (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))) (NonAssocRing.toOne.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (List.map.{u1, u1} (Matrix.TransvectionStruct.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.TransvectionStruct.toMatrix.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.instDecidableEqSum.{0, 0} (Fin r) Unit (fun (a : Fin r) (b : Fin r) => instDecidableEqFin r a b) (fun (a : Unit) (b : Unit) => instDecidableEqPUnit.{1} a b) a b) (EuclideanDomain.toCommRing.{u1} 𝕜 (Field.toEuclideanDomain.{u1} 𝕜 _inst_1))) L)) M) (List.prod.{u1} (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.instMulMatrix.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (instFintypeSum.{0, 0} (Fin r) Unit (Fin.fintype r) PUnit.fintype.{0}) (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.one.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.instDecidableEqSum.{0, 0} (Fin r) Unit (fun (a : Fin r) (b : Fin r) => instDecidableEqFin r a b) (fun (a : Unit) (b : Unit) => instDecidableEqPUnit.{1} a b) a b) (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))) (NonAssocRing.toOne.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (List.map.{u1, u1} (Matrix.TransvectionStruct.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.{0, 0, u1} (Sum.{0, 0} (Fin r) Unit) (Sum.{0, 0} (Fin r) Unit) 𝕜) (Matrix.TransvectionStruct.toMatrix.{u1, 0} (Sum.{0, 0} (Fin r) Unit) 𝕜 (fun (a : Sum.{0, 0} (Fin r) Unit) (b : Sum.{0, 0} (Fin r) Unit) => Sum.instDecidableEqSum.{0, 0} (Fin r) Unit (fun (a : Fin r) (b : Fin r) => instDecidableEqFin r a b) (fun (a : Unit) (b : Unit) => instDecidableEqPUnit.{1} a b) a b) (EuclideanDomain.toCommRing.{u1} 𝕜 (Field.toEuclideanDomain.{u1} 𝕜 _inst_1))) L'))))))
+Case conversion may be inaccurate. Consider using '#align matrix.pivot.exists_is_two_block_diagonal_of_ne_zero Matrix.Pivot.exists_isTwoBlockDiagonal_of_ne_zeroₓ'. -/
/-- There exist two lists of `transvection_struct` such that multiplying by them on the left and
on the right makes a matrix block-diagonal, when the last coefficient is nonzero. -/
theorem exists_isTwoBlockDiagonal_of_ne_zero (hM : M (inr unit) (inr unit) ≠ 0) :
@@ -582,6 +794,7 @@ theorem exists_isTwoBlockDiagonal_of_ne_zero (hM : M (inr unit) (inr unit) ≠ 0
#align matrix.pivot.exists_is_two_block_diagonal_of_ne_zero Matrix.Pivot.exists_isTwoBlockDiagonal_of_ne_zero
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+#print Matrix.Pivot.exists_isTwoBlockDiagonal_list_transvec_mul_mul_list_transvec /-
/-- There exist two lists of `transvection_struct` such that multiplying by them on the left and
on the right makes a matrix block-diagonal. -/
theorem exists_isTwoBlockDiagonal_list_transvec_mul_mul_list_transvec
@@ -625,7 +838,9 @@ theorem exists_isTwoBlockDiagonal_list_transvec_mul_mul_list_transvec
rw [Matrix.mul_assoc (L.map to_matrix).Prod]
exact hLL'
#align matrix.pivot.exists_is_two_block_diagonal_list_transvec_mul_mul_list_transvec Matrix.Pivot.exists_isTwoBlockDiagonal_list_transvec_mul_mul_list_transvec
+-/
+#print Matrix.Pivot.exists_list_transvec_mul_mul_list_transvec_eq_diagonal_induction /-
/-- Inductive step for the reduction: if one knows that any size `r` matrix can be reduced to
diagonal form by elementary operations, then one deduces it for matrices over `fin r ⊕ unit`. -/
theorem exists_list_transvec_mul_mul_list_transvec_eq_diagonal_induction
@@ -661,9 +876,16 @@ theorem exists_list_transvec_mul_mul_list_transvec_eq_diagonal_induction
rw [this]
simp [h₀]
#align matrix.pivot.exists_list_transvec_mul_mul_list_transvec_eq_diagonal_induction Matrix.Pivot.exists_list_transvec_mul_mul_list_transvec_eq_diagonal_induction
+-/
variable {n p} [Fintype n] [Fintype p]
+/- warning: matrix.pivot.reindex_exists_list_transvec_mul_mul_list_transvec_eq_diagonal -> Matrix.Pivot.reindex_exists_list_transvec_mul_mul_list_transvec_eq_diagonal is a dubious translation:
+lean 3 declaration is
+ forall {n : Type.{u1}} {p : Type.{u2}} {𝕜 : Type.{u3}} [_inst_1 : Field.{u3} 𝕜] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : DecidableEq.{succ u2} p] [_inst_5 : Fintype.{u1} n] [_inst_6 : Fintype.{u2} p] (M : Matrix.{u2, u2, u3} p p 𝕜) (e : Equiv.{succ u2, succ u1} p n), (Exists.{succ (max u1 u3)} (List.{max u1 u3} (Matrix.TransvectionStruct.{u3, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u3} 𝕜 (Field.toEuclideanDomain.{u3} 𝕜 _inst_1)))) (fun (L : List.{max u1 u3} (Matrix.TransvectionStruct.{u3, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u3} 𝕜 (Field.toEuclideanDomain.{u3} 𝕜 _inst_1)))) => Exists.{succ (max u1 u3)} (List.{max u1 u3} (Matrix.TransvectionStruct.{u3, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u3} 𝕜 (Field.toEuclideanDomain.{u3} 𝕜 _inst_1)))) (fun (L' : List.{max u1 u3} (Matrix.TransvectionStruct.{u3, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u3} 𝕜 (Field.toEuclideanDomain.{u3} 𝕜 _inst_1)))) => Exists.{max (succ u1) (succ u3)} (n -> 𝕜) (fun (D : n -> 𝕜) => Eq.{succ (max u1 u3)} (Matrix.{u1, u1, u3} n n 𝕜) (Matrix.mul.{u3, u1, u1, u1} n n n 𝕜 _inst_5 (Distrib.toHasMul.{u3} 𝕜 (Ring.toDistrib.{u3} 𝕜 (DivisionRing.toRing.{u3} 𝕜 (Field.toDivisionRing.{u3} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u3} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u3} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u3} 𝕜 (Ring.toNonAssocRing.{u3} 𝕜 (DivisionRing.toRing.{u3} 𝕜 (Field.toDivisionRing.{u3} 𝕜 _inst_1)))))) (Matrix.mul.{u3, u1, u1, u1} n n n 𝕜 _inst_5 (Distrib.toHasMul.{u3} 𝕜 (Ring.toDistrib.{u3} 𝕜 (DivisionRing.toRing.{u3} 𝕜 (Field.toDivisionRing.{u3} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u3} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u3} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u3} 𝕜 (Ring.toNonAssocRing.{u3} 𝕜 (DivisionRing.toRing.{u3} 𝕜 (Field.toDivisionRing.{u3} 𝕜 _inst_1)))))) (List.prod.{max u1 u3} (Matrix.{u1, u1, u3} n n 𝕜) (Matrix.hasMul.{u3, u1} n 𝕜 _inst_5 (Distrib.toHasMul.{u3} 𝕜 (Ring.toDistrib.{u3} 𝕜 (DivisionRing.toRing.{u3} 𝕜 (Field.toDivisionRing.{u3} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u3} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u3} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u3} 𝕜 (Ring.toNonAssocRing.{u3} 𝕜 (DivisionRing.toRing.{u3} 𝕜 (Field.toDivisionRing.{u3} 𝕜 _inst_1))))))) (Matrix.hasOne.{u3, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (MulZeroClass.toHasZero.{u3} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u3} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u3} 𝕜 (Ring.toNonAssocRing.{u3} 𝕜 (DivisionRing.toRing.{u3} 𝕜 (Field.toDivisionRing.{u3} 𝕜 _inst_1))))))) (AddMonoidWithOne.toOne.{u3} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u3} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u3} 𝕜 (Ring.toAddCommGroupWithOne.{u3} 𝕜 (DivisionRing.toRing.{u3} 𝕜 (Field.toDivisionRing.{u3} 𝕜 _inst_1))))))) (List.map.{max u1 u3, max u1 u3} (Matrix.TransvectionStruct.{u3, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u3} 𝕜 (Field.toEuclideanDomain.{u3} 𝕜 _inst_1))) (Matrix.{u1, u1, u3} n n 𝕜) (Matrix.TransvectionStruct.toMatrix.{u3, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u3} 𝕜 (Field.toEuclideanDomain.{u3} 𝕜 _inst_1))) L)) (coeFn.{max (succ (max u2 u3)) (succ (max u1 u3)), max (succ (max u2 u3)) (succ (max u1 u3))} (AlgEquiv.{u3, max u2 u3, max u1 u3} 𝕜 (Matrix.{u2, u2, u3} p p 𝕜) (Matrix.{u1, u1, u3} n n 𝕜) (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1)) (Matrix.semiring.{u3, u2} p 𝕜 (CommSemiring.toSemiring.{u3} 𝕜 (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.semiring.{u3, u1} n 𝕜 (CommSemiring.toSemiring.{u3} 𝕜 (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.algebra.{u3, u2, u3} p 𝕜 𝕜 _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u3} 𝕜 (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1))) (Algebra.id.{u3} 𝕜 (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1)))) (Matrix.algebra.{u3, u1, u3} n 𝕜 𝕜 _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u3} 𝕜 (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1))) (Algebra.id.{u3} 𝕜 (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1))))) (fun (_x : AlgEquiv.{u3, max u2 u3, max u1 u3} 𝕜 (Matrix.{u2, u2, u3} p p 𝕜) (Matrix.{u1, u1, u3} n n 𝕜) (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1)) (Matrix.semiring.{u3, u2} p 𝕜 (CommSemiring.toSemiring.{u3} 𝕜 (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.semiring.{u3, u1} n 𝕜 (CommSemiring.toSemiring.{u3} 𝕜 (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.algebra.{u3, u2, u3} p 𝕜 𝕜 _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u3} 𝕜 (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1))) (Algebra.id.{u3} 𝕜 (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1)))) (Matrix.algebra.{u3, u1, u3} n 𝕜 𝕜 _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u3} 𝕜 (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1))) (Algebra.id.{u3} 𝕜 (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1))))) => (Matrix.{u2, u2, u3} p p 𝕜) -> (Matrix.{u1, u1, u3} n n 𝕜)) (AlgEquiv.hasCoeToFun.{u3, max u2 u3, max u1 u3} 𝕜 (Matrix.{u2, u2, u3} p p 𝕜) (Matrix.{u1, u1, u3} n n 𝕜) (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1)) (Matrix.semiring.{u3, u2} p 𝕜 (CommSemiring.toSemiring.{u3} 𝕜 (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.semiring.{u3, u1} n 𝕜 (CommSemiring.toSemiring.{u3} 𝕜 (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.algebra.{u3, u2, u3} p 𝕜 𝕜 _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u3} 𝕜 (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1))) (Algebra.id.{u3} 𝕜 (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1)))) (Matrix.algebra.{u3, u1, u3} n 𝕜 𝕜 _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u3} 𝕜 (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1))) (Algebra.id.{u3} 𝕜 (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1))))) (Matrix.reindexAlgEquiv.{u2, u1, u3} p n 𝕜 (Semifield.toCommSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 _inst_1)) _inst_5 _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (fun (a : n) (b : n) => _inst_2 a b) e) M)) (List.prod.{max u1 u3} (Matrix.{u1, u1, u3} n n 𝕜) (Matrix.hasMul.{u3, u1} n 𝕜 _inst_5 (Distrib.toHasMul.{u3} 𝕜 (Ring.toDistrib.{u3} 𝕜 (DivisionRing.toRing.{u3} 𝕜 (Field.toDivisionRing.{u3} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u3} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u3} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u3} 𝕜 (Ring.toNonAssocRing.{u3} 𝕜 (DivisionRing.toRing.{u3} 𝕜 (Field.toDivisionRing.{u3} 𝕜 _inst_1))))))) (Matrix.hasOne.{u3, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (MulZeroClass.toHasZero.{u3} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u3} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u3} 𝕜 (Ring.toNonAssocRing.{u3} 𝕜 (DivisionRing.toRing.{u3} 𝕜 (Field.toDivisionRing.{u3} 𝕜 _inst_1))))))) (AddMonoidWithOne.toOne.{u3} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u3} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u3} 𝕜 (Ring.toAddCommGroupWithOne.{u3} 𝕜 (DivisionRing.toRing.{u3} 𝕜 (Field.toDivisionRing.{u3} 𝕜 _inst_1))))))) (List.map.{max u1 u3, max u1 u3} (Matrix.TransvectionStruct.{u3, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u3} 𝕜 (Field.toEuclideanDomain.{u3} 𝕜 _inst_1))) (Matrix.{u1, u1, u3} n n 𝕜) (Matrix.TransvectionStruct.toMatrix.{u3, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u3} 𝕜 (Field.toEuclideanDomain.{u3} 𝕜 _inst_1))) L'))) (Matrix.diagonal.{u3, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (MulZeroClass.toHasZero.{u3} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u3} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u3} 𝕜 (Ring.toNonAssocRing.{u3} 𝕜 (DivisionRing.toRing.{u3} 𝕜 (Field.toDivisionRing.{u3} 𝕜 _inst_1))))))) D))))) -> (Exists.{succ (max u2 u3)} (List.{max u2 u3} (Matrix.TransvectionStruct.{u3, u2} p 𝕜 (fun (a : p) (b : p) => _inst_3 a b) (EuclideanDomain.toCommRing.{u3} 𝕜 (Field.toEuclideanDomain.{u3} 𝕜 _inst_1)))) (fun (L : List.{max u2 u3} (Matrix.TransvectionStruct.{u3, u2} p 𝕜 (fun (a : p) (b : p) => _inst_3 a b) (EuclideanDomain.toCommRing.{u3} 𝕜 (Field.toEuclideanDomain.{u3} 𝕜 _inst_1)))) => Exists.{succ (max u2 u3)} (List.{max u2 u3} (Matrix.TransvectionStruct.{u3, u2} p 𝕜 (fun (a : p) (b : p) => _inst_3 a b) (EuclideanDomain.toCommRing.{u3} 𝕜 (Field.toEuclideanDomain.{u3} 𝕜 _inst_1)))) (fun (L' : List.{max u2 u3} (Matrix.TransvectionStruct.{u3, u2} p 𝕜 (fun (a : p) (b : p) => _inst_3 a b) (EuclideanDomain.toCommRing.{u3} 𝕜 (Field.toEuclideanDomain.{u3} 𝕜 _inst_1)))) => Exists.{max (succ u2) (succ u3)} (p -> 𝕜) (fun (D : p -> 𝕜) => Eq.{succ (max u2 u3)} (Matrix.{u2, u2, u3} p p 𝕜) (Matrix.mul.{u3, u2, u2, u2} p p p 𝕜 _inst_6 (Distrib.toHasMul.{u3} 𝕜 (Ring.toDistrib.{u3} 𝕜 (DivisionRing.toRing.{u3} 𝕜 (Field.toDivisionRing.{u3} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u3} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u3} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u3} 𝕜 (Ring.toNonAssocRing.{u3} 𝕜 (DivisionRing.toRing.{u3} 𝕜 (Field.toDivisionRing.{u3} 𝕜 _inst_1)))))) (Matrix.mul.{u3, u2, u2, u2} p p p 𝕜 _inst_6 (Distrib.toHasMul.{u3} 𝕜 (Ring.toDistrib.{u3} 𝕜 (DivisionRing.toRing.{u3} 𝕜 (Field.toDivisionRing.{u3} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u3} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u3} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u3} 𝕜 (Ring.toNonAssocRing.{u3} 𝕜 (DivisionRing.toRing.{u3} 𝕜 (Field.toDivisionRing.{u3} 𝕜 _inst_1)))))) (List.prod.{max u2 u3} (Matrix.{u2, u2, u3} p p 𝕜) (Matrix.hasMul.{u3, u2} p 𝕜 _inst_6 (Distrib.toHasMul.{u3} 𝕜 (Ring.toDistrib.{u3} 𝕜 (DivisionRing.toRing.{u3} 𝕜 (Field.toDivisionRing.{u3} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u3} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u3} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u3} 𝕜 (Ring.toNonAssocRing.{u3} 𝕜 (DivisionRing.toRing.{u3} 𝕜 (Field.toDivisionRing.{u3} 𝕜 _inst_1))))))) (Matrix.hasOne.{u3, u2} p 𝕜 (fun (a : p) (b : p) => _inst_3 a b) (MulZeroClass.toHasZero.{u3} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u3} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u3} 𝕜 (Ring.toNonAssocRing.{u3} 𝕜 (DivisionRing.toRing.{u3} 𝕜 (Field.toDivisionRing.{u3} 𝕜 _inst_1))))))) (AddMonoidWithOne.toOne.{u3} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u3} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u3} 𝕜 (Ring.toAddCommGroupWithOne.{u3} 𝕜 (DivisionRing.toRing.{u3} 𝕜 (Field.toDivisionRing.{u3} 𝕜 _inst_1))))))) (List.map.{max u2 u3, max u2 u3} (Matrix.TransvectionStruct.{u3, u2} p 𝕜 (fun (a : p) (b : p) => _inst_3 a b) (EuclideanDomain.toCommRing.{u3} 𝕜 (Field.toEuclideanDomain.{u3} 𝕜 _inst_1))) (Matrix.{u2, u2, u3} p p 𝕜) (Matrix.TransvectionStruct.toMatrix.{u3, u2} p 𝕜 (fun (a : p) (b : p) => _inst_3 a b) (EuclideanDomain.toCommRing.{u3} 𝕜 (Field.toEuclideanDomain.{u3} 𝕜 _inst_1))) L)) M) (List.prod.{max u2 u3} (Matrix.{u2, u2, u3} p p 𝕜) (Matrix.hasMul.{u3, u2} p 𝕜 _inst_6 (Distrib.toHasMul.{u3} 𝕜 (Ring.toDistrib.{u3} 𝕜 (DivisionRing.toRing.{u3} 𝕜 (Field.toDivisionRing.{u3} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u3} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u3} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u3} 𝕜 (Ring.toNonAssocRing.{u3} 𝕜 (DivisionRing.toRing.{u3} 𝕜 (Field.toDivisionRing.{u3} 𝕜 _inst_1))))))) (Matrix.hasOne.{u3, u2} p 𝕜 (fun (a : p) (b : p) => _inst_3 a b) (MulZeroClass.toHasZero.{u3} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u3} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u3} 𝕜 (Ring.toNonAssocRing.{u3} 𝕜 (DivisionRing.toRing.{u3} 𝕜 (Field.toDivisionRing.{u3} 𝕜 _inst_1))))))) (AddMonoidWithOne.toOne.{u3} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u3} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u3} 𝕜 (Ring.toAddCommGroupWithOne.{u3} 𝕜 (DivisionRing.toRing.{u3} 𝕜 (Field.toDivisionRing.{u3} 𝕜 _inst_1))))))) (List.map.{max u2 u3, max u2 u3} (Matrix.TransvectionStruct.{u3, u2} p 𝕜 (fun (a : p) (b : p) => _inst_3 a b) (EuclideanDomain.toCommRing.{u3} 𝕜 (Field.toEuclideanDomain.{u3} 𝕜 _inst_1))) (Matrix.{u2, u2, u3} p p 𝕜) (Matrix.TransvectionStruct.toMatrix.{u3, u2} p 𝕜 (fun (a : p) (b : p) => _inst_3 a b) (EuclideanDomain.toCommRing.{u3} 𝕜 (Field.toEuclideanDomain.{u3} 𝕜 _inst_1))) L'))) (Matrix.diagonal.{u3, u2} p 𝕜 (fun (a : p) (b : p) => _inst_3 a b) (MulZeroClass.toHasZero.{u3} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u3} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u3} 𝕜 (Ring.toNonAssocRing.{u3} 𝕜 (DivisionRing.toRing.{u3} 𝕜 (Field.toDivisionRing.{u3} 𝕜 _inst_1))))))) D)))))
+but is expected to have type
+ forall {n : Type.{u1}} {p : Type.{u3}} {𝕜 : Type.{u2}} [_inst_1 : Field.{u2} 𝕜] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : DecidableEq.{succ u3} p] [_inst_5 : Fintype.{u1} n] [_inst_6 : Fintype.{u3} p] (M : Matrix.{u3, u3, u2} p p 𝕜) (e : Equiv.{succ u3, succ u1} p n), (Exists.{max (succ u1) (succ u2)} (List.{max u1 u2} (Matrix.TransvectionStruct.{u2, u1} n 𝕜)) (fun (L : List.{max u1 u2} (Matrix.TransvectionStruct.{u2, u1} n 𝕜)) => Exists.{max (succ u1) (succ u2)} (List.{max u1 u2} (Matrix.TransvectionStruct.{u2, u1} n 𝕜)) (fun (L' : List.{max u1 u2} (Matrix.TransvectionStruct.{u2, u1} n 𝕜)) => Exists.{max (succ u1) (succ u2)} (n -> 𝕜) (fun (D : n -> 𝕜) => Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.mul.{u2, u1, u1, u1} n n n 𝕜 _inst_5 (NonUnitalNonAssocRing.toMul.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1)))))) (Matrix.mul.{u2, u1, u1, u1} n n n 𝕜 _inst_5 (NonUnitalNonAssocRing.toMul.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1)))))) (List.prod.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.instMulMatrix.{u2, u1} n 𝕜 _inst_5 (NonUnitalNonAssocRing.toMul.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))))) (Matrix.one.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u2} 𝕜 (Semifield.toCommGroupWithZero.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))) (NonAssocRing.toOne.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))) (List.map.{max u1 u2, max u1 u2} (Matrix.TransvectionStruct.{u2, u1} n 𝕜) (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.TransvectionStruct.toMatrix.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u2} 𝕜 (Field.toEuclideanDomain.{u2} 𝕜 _inst_1))) L)) (FunLike.coe.{max (max (succ u1) (succ u3)) (succ u2), max (succ u3) (succ u2), max (succ u1) (succ u2)} (AlgEquiv.{u2, max u2 u3, max u2 u1} 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.{u1, u1, u2} n n 𝕜) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.instAlgebraMatrixSemiring.{u2, u3, u2} p 𝕜 𝕜 _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))) (Matrix.instAlgebraMatrixSemiring.{u2, u1, u2} n 𝕜 𝕜 _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))))) (Matrix.{u3, u3, u2} p p 𝕜) (fun (_x : Matrix.{u3, u3, u2} p p 𝕜) => (fun (x._@.Mathlib.Algebra.Hom.GroupAction._hyg.2186 : Matrix.{u3, u3, u2} p p 𝕜) => Matrix.{u1, u1, u2} n n 𝕜) _x) (SMulHomClass.toFunLike.{max (max u1 u3) u2, u2, max u3 u2, max u1 u2} (AlgEquiv.{u2, max u2 u3, max u2 u1} 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.{u1, u1, u2} n n 𝕜) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.instAlgebraMatrixSemiring.{u2, u3, u2} p 𝕜 𝕜 _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))) (Matrix.instAlgebraMatrixSemiring.{u2, u1, u2} n 𝕜 𝕜 _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))))) 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.{u1, u1, u2} n n 𝕜) (SMulZeroClass.toSMul.{u2, max u3 u2} 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (AddMonoid.toZero.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (AddCommMonoid.toAddMonoid.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b))))))) (DistribSMul.toSMulZeroClass.{u2, max u3 u2} 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (AddMonoid.toAddZeroClass.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (AddCommMonoid.toAddMonoid.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b))))))) (DistribMulAction.toDistribSMul.{u2, max u3 u2} 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (MonoidWithZero.toMonoid.{u2} 𝕜 (Semiring.toMonoidWithZero.{u2} 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))))) (AddCommMonoid.toAddMonoid.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)))))) (Module.toDistribMulAction.{u2, max u3 u2} 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b))))) (Algebra.toModule.{u2, max u3 u2} 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u2, u3, u2} p 𝕜 𝕜 _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))))))))) (SMulZeroClass.toSMul.{u2, max u1 u2} 𝕜 (Matrix.{u1, u1, u2} n n 𝕜) (AddMonoid.toZero.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (AddCommMonoid.toAddMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Semiring.toNonAssocSemiring.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b))))))) (DistribSMul.toSMulZeroClass.{u2, max u1 u2} 𝕜 (Matrix.{u1, u1, u2} n n 𝕜) (AddMonoid.toAddZeroClass.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (AddCommMonoid.toAddMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Semiring.toNonAssocSemiring.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b))))))) (DistribMulAction.toDistribSMul.{u2, max u1 u2} 𝕜 (Matrix.{u1, u1, u2} n n 𝕜) (MonoidWithZero.toMonoid.{u2} 𝕜 (Semiring.toMonoidWithZero.{u2} 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))))) (AddCommMonoid.toAddMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Semiring.toNonAssocSemiring.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)))))) (Module.toDistribMulAction.{u2, max u1 u2} 𝕜 (Matrix.{u1, u1, u2} n n 𝕜) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Semiring.toNonAssocSemiring.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b))))) (Algebra.toModule.{u2, max u1 u2} 𝕜 (Matrix.{u1, u1, u2} n n 𝕜) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.instAlgebraMatrixSemiring.{u2, u1, u2} n 𝕜 𝕜 _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))))))))) (DistribMulActionHomClass.toSMulHomClass.{max (max u1 u3) u2, u2, max u3 u2, max u1 u2} (AlgEquiv.{u2, max u2 u3, max u2 u1} 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.{u1, u1, u2} n n 𝕜) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.instAlgebraMatrixSemiring.{u2, u3, u2} p 𝕜 𝕜 _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))) (Matrix.instAlgebraMatrixSemiring.{u2, u1, u2} n 𝕜 𝕜 _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))))) 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.{u1, u1, u2} n n 𝕜) (MonoidWithZero.toMonoid.{u2} 𝕜 (Semiring.toMonoidWithZero.{u2} 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))))) (AddCommMonoid.toAddMonoid.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)))))) (AddCommMonoid.toAddMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Semiring.toNonAssocSemiring.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)))))) (Module.toDistribMulAction.{u2, max u3 u2} 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b))))) (Algebra.toModule.{u2, max u3 u2} 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u2, u3, u2} p 𝕜 𝕜 _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))))) (Module.toDistribMulAction.{u2, max u1 u2} 𝕜 (Matrix.{u1, u1, u2} n n 𝕜) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Semiring.toNonAssocSemiring.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b))))) (Algebra.toModule.{u2, max u1 u2} 𝕜 (Matrix.{u1, u1, u2} n n 𝕜) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.instAlgebraMatrixSemiring.{u2, u1, u2} n 𝕜 𝕜 _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))))) (NonUnitalAlgHomClass.toDistribMulActionHomClass.{max (max u1 u3) u2, u2, max u3 u2, max u1 u2} (AlgEquiv.{u2, max u2 u3, max u2 u1} 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.{u1, u1, u2} n n 𝕜) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.instAlgebraMatrixSemiring.{u2, u3, u2} p 𝕜 𝕜 _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))) (Matrix.instAlgebraMatrixSemiring.{u2, u1, u2} n 𝕜 𝕜 _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))))) 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.{u1, u1, u2} n n 𝕜) (MonoidWithZero.toMonoid.{u2} 𝕜 (Semiring.toMonoidWithZero.{u2} 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Semiring.toNonAssocSemiring.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)))) (Module.toDistribMulAction.{u2, max u3 u2} 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Semiring.toNonAssocSemiring.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b))))) (Algebra.toModule.{u2, max u3 u2} 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.instAlgebraMatrixSemiring.{u2, u3, u2} p 𝕜 𝕜 _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))))) (Module.toDistribMulAction.{u2, max u1 u2} 𝕜 (Matrix.{u1, u1, u2} n n 𝕜) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Semiring.toNonAssocSemiring.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b))))) (Algebra.toModule.{u2, max u1 u2} 𝕜 (Matrix.{u1, u1, u2} n n 𝕜) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.instAlgebraMatrixSemiring.{u2, u1, u2} n 𝕜 𝕜 _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))))) (AlgHom.instNonUnitalAlgHomClassToMonoidToMonoidWithZeroToSemiringToNonUnitalNonAssocSemiringToNonAssocSemiringToNonUnitalNonAssocSemiringToNonAssocSemiringToDistribMulActionToAddCommMonoidToModuleToDistribMulActionToAddCommMonoidToModule.{u2, max u3 u2, max u1 u2, max (max u1 u3) u2} 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.{u1, u1, u2} n n 𝕜) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.instAlgebraMatrixSemiring.{u2, u3, u2} p 𝕜 𝕜 _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))) (Matrix.instAlgebraMatrixSemiring.{u2, u1, u2} n 𝕜 𝕜 _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))) (AlgEquiv.{u2, max u2 u3, max u2 u1} 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.{u1, u1, u2} n n 𝕜) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.instAlgebraMatrixSemiring.{u2, u3, u2} p 𝕜 𝕜 _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))) (Matrix.instAlgebraMatrixSemiring.{u2, u1, u2} n 𝕜 𝕜 _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))))) (AlgEquivClass.toAlgHomClass.{max (max u1 u3) u2, u2, max u3 u2, max u1 u2} (AlgEquiv.{u2, max u2 u3, max u2 u1} 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.{u1, u1, u2} n n 𝕜) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.instAlgebraMatrixSemiring.{u2, u3, u2} p 𝕜 𝕜 _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))) (Matrix.instAlgebraMatrixSemiring.{u2, u1, u2} n 𝕜 𝕜 _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))))) 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.{u1, u1, u2} n n 𝕜) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.instAlgebraMatrixSemiring.{u2, u3, u2} p 𝕜 𝕜 _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))) (Matrix.instAlgebraMatrixSemiring.{u2, u1, u2} n 𝕜 𝕜 _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))) (AlgEquiv.instAlgEquivClassAlgEquiv.{u2, max u3 u2, max u1 u2} 𝕜 (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.{u1, u1, u2} n n 𝕜) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (Matrix.semiring.{u2, u3} p 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_6 (fun (a : p) (b : p) => _inst_3 a b)) (Matrix.semiring.{u2, u1} n 𝕜 (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) _inst_5 (fun (a : n) (b : n) => _inst_2 a b)) (Matrix.instAlgebraMatrixSemiring.{u2, u3, u2} p 𝕜 𝕜 _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))) (Matrix.instAlgebraMatrixSemiring.{u2, u1, u2} n 𝕜 𝕜 _inst_5 (fun (a : n) (b : n) => _inst_2 a b) (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) (CommSemiring.toSemiring.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1))) (Algebra.id.{u2} 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))))))))) (Matrix.reindexAlgEquiv.{u3, u1, u2} p n 𝕜 (Semifield.toCommSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)) _inst_5 _inst_6 (fun (a : p) (b : p) => _inst_3 a b) (fun (a : n) (b : n) => _inst_2 a b) e) M)) (List.prod.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.instMulMatrix.{u2, u1} n 𝕜 _inst_5 (NonUnitalNonAssocRing.toMul.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))))) (Matrix.one.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u2} 𝕜 (Semifield.toCommGroupWithZero.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))) (NonAssocRing.toOne.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))) (List.map.{max u1 u2, max u1 u2} (Matrix.TransvectionStruct.{u2, u1} n 𝕜) (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.TransvectionStruct.toMatrix.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u2} 𝕜 (Field.toEuclideanDomain.{u2} 𝕜 _inst_1))) L'))) (Matrix.diagonal.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u2} 𝕜 (Semifield.toCommGroupWithZero.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))) D))))) -> (Exists.{max (succ u3) (succ u2)} (List.{max u3 u2} (Matrix.TransvectionStruct.{u2, u3} p 𝕜)) (fun (L : List.{max u3 u2} (Matrix.TransvectionStruct.{u2, u3} p 𝕜)) => Exists.{max (succ u3) (succ u2)} (List.{max u3 u2} (Matrix.TransvectionStruct.{u2, u3} p 𝕜)) (fun (L' : List.{max u3 u2} (Matrix.TransvectionStruct.{u2, u3} p 𝕜)) => Exists.{max (succ u3) (succ u2)} (p -> 𝕜) (fun (D : p -> 𝕜) => Eq.{max (succ u3) (succ u2)} (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.mul.{u2, u3, u3, u3} p p p 𝕜 _inst_6 (NonUnitalNonAssocRing.toMul.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1)))))) (Matrix.mul.{u2, u3, u3, u3} p p p 𝕜 _inst_6 (NonUnitalNonAssocRing.toMul.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1)))))) (List.prod.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.instMulMatrix.{u2, u3} p 𝕜 _inst_6 (NonUnitalNonAssocRing.toMul.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))))) (Matrix.one.{u2, u3} p 𝕜 (fun (a : p) (b : p) => _inst_3 a b) (CommMonoidWithZero.toZero.{u2} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u2} 𝕜 (Semifield.toCommGroupWithZero.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))) (NonAssocRing.toOne.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))) (List.map.{max u3 u2, max u3 u2} (Matrix.TransvectionStruct.{u2, u3} p 𝕜) (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.TransvectionStruct.toMatrix.{u2, u3} p 𝕜 (fun (a : p) (b : p) => _inst_3 a b) (EuclideanDomain.toCommRing.{u2} 𝕜 (Field.toEuclideanDomain.{u2} 𝕜 _inst_1))) L)) M) (List.prod.{max u3 u2} (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.instMulMatrix.{u2, u3} p 𝕜 _inst_6 (NonUnitalNonAssocRing.toMul.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))))) (Matrix.one.{u2, u3} p 𝕜 (fun (a : p) (b : p) => _inst_3 a b) (CommMonoidWithZero.toZero.{u2} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u2} 𝕜 (Semifield.toCommGroupWithZero.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))) (NonAssocRing.toOne.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))) (List.map.{max u3 u2, max u3 u2} (Matrix.TransvectionStruct.{u2, u3} p 𝕜) (Matrix.{u3, u3, u2} p p 𝕜) (Matrix.TransvectionStruct.toMatrix.{u2, u3} p 𝕜 (fun (a : p) (b : p) => _inst_3 a b) (EuclideanDomain.toCommRing.{u2} 𝕜 (Field.toEuclideanDomain.{u2} 𝕜 _inst_1))) L'))) (Matrix.diagonal.{u2, u3} p 𝕜 (fun (a : p) (b : p) => _inst_3 a b) (CommMonoidWithZero.toZero.{u2} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u2} 𝕜 (Semifield.toCommGroupWithZero.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 _inst_1)))) D)))))
+Case conversion may be inaccurate. Consider using '#align matrix.pivot.reindex_exists_list_transvec_mul_mul_list_transvec_eq_diagonal Matrix.Pivot.reindex_exists_list_transvec_mul_mul_list_transvec_eq_diagonalₓ'. -/
/-- Reduction to diagonal form by elementary operations is invariant under reindexing. -/
theorem reindex_exists_list_transvec_mul_mul_list_transvec_eq_diagonal (M : Matrix p p 𝕜)
(e : p ≃ n)
@@ -685,6 +907,7 @@ theorem reindex_exists_list_transvec_mul_mul_list_transvec_eq_diagonal (M : Matr
simp only [Equiv.symm_symm, reindex_apply, submatrix_diagonal_equiv, reindex_alg_equiv_apply]
#align matrix.pivot.reindex_exists_list_transvec_mul_mul_list_transvec_eq_diagonal Matrix.Pivot.reindex_exists_list_transvec_mul_mul_list_transvec_eq_diagonal
+#print Matrix.Pivot.exists_list_transvec_mul_mul_list_transvec_eq_diagonal_aux /-
/-- Any matrix can be reduced to diagonal form by elementary operations. Formulated here on `Type 0`
because we will make an induction using `fin r`.
See `exists_list_transvec_mul_mul_list_transvec_eq_diagonal` for the general version (which follows
@@ -710,7 +933,14 @@ theorem exists_list_transvec_mul_mul_list_transvec_eq_diagonal_aux (n : Type) [F
exists_list_transvec_mul_mul_list_transvec_eq_diagonal_induction fun N =>
IH (Fin r) N (by simp)
#align matrix.pivot.exists_list_transvec_mul_mul_list_transvec_eq_diagonal_aux Matrix.Pivot.exists_list_transvec_mul_mul_list_transvec_eq_diagonal_aux
+-/
+/- warning: matrix.pivot.exists_list_transvec_mul_mul_list_transvec_eq_diagonal -> Matrix.Pivot.exists_list_transvec_mul_mul_list_transvec_eq_diagonal is a dubious translation:
+lean 3 declaration is
+ forall {n : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : Field.{u2} 𝕜] [_inst_2 : DecidableEq.{succ u1} n] [_inst_5 : Fintype.{u1} n] (M : Matrix.{u1, u1, u2} n n 𝕜), Exists.{succ (max u1 u2)} (List.{max u1 u2} (Matrix.TransvectionStruct.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u2} 𝕜 (Field.toEuclideanDomain.{u2} 𝕜 _inst_1)))) (fun (L : List.{max u1 u2} (Matrix.TransvectionStruct.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u2} 𝕜 (Field.toEuclideanDomain.{u2} 𝕜 _inst_1)))) => Exists.{succ (max u1 u2)} (List.{max u1 u2} (Matrix.TransvectionStruct.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u2} 𝕜 (Field.toEuclideanDomain.{u2} 𝕜 _inst_1)))) (fun (L' : List.{max u1 u2} (Matrix.TransvectionStruct.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u2} 𝕜 (Field.toEuclideanDomain.{u2} 𝕜 _inst_1)))) => Exists.{max (succ u1) (succ u2)} (n -> 𝕜) (fun (D : n -> 𝕜) => Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.mul.{u2, u1, u1, u1} n n n 𝕜 _inst_5 (Distrib.toHasMul.{u2} 𝕜 (Ring.toDistrib.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1)))))) (Matrix.mul.{u2, u1, u1, u1} n n n 𝕜 _inst_5 (Distrib.toHasMul.{u2} 𝕜 (Ring.toDistrib.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1)))))) (List.prod.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.hasMul.{u2, u1} n 𝕜 _inst_5 (Distrib.toHasMul.{u2} 𝕜 (Ring.toDistrib.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))))) (Matrix.hasOne.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (MulZeroClass.toHasZero.{u2} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))))) (AddMonoidWithOne.toOne.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))))) (List.map.{max u1 u2, max u1 u2} (Matrix.TransvectionStruct.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u2} 𝕜 (Field.toEuclideanDomain.{u2} 𝕜 _inst_1))) (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.TransvectionStruct.toMatrix.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u2} 𝕜 (Field.toEuclideanDomain.{u2} 𝕜 _inst_1))) L)) M) (List.prod.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.hasMul.{u2, u1} n 𝕜 _inst_5 (Distrib.toHasMul.{u2} 𝕜 (Ring.toDistrib.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))))) (Matrix.hasOne.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (MulZeroClass.toHasZero.{u2} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))))) (AddMonoidWithOne.toOne.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))))) (List.map.{max u1 u2, max u1 u2} (Matrix.TransvectionStruct.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u2} 𝕜 (Field.toEuclideanDomain.{u2} 𝕜 _inst_1))) (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.TransvectionStruct.toMatrix.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u2} 𝕜 (Field.toEuclideanDomain.{u2} 𝕜 _inst_1))) L'))) (Matrix.diagonal.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (MulZeroClass.toHasZero.{u2} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))))) D))))
+but is expected to have type
+ forall {n : Type.{u2}} {𝕜 : Type.{u1}} [_inst_1 : Field.{u1} 𝕜] [_inst_2 : DecidableEq.{succ u2} n] [_inst_5 : Fintype.{u2} n] (M : Matrix.{u2, u2, u1} n n 𝕜), Exists.{max (succ u2) (succ u1)} (List.{max u2 u1} (Matrix.TransvectionStruct.{u1, u2} n 𝕜)) (fun (L : List.{max u2 u1} (Matrix.TransvectionStruct.{u1, u2} n 𝕜)) => Exists.{max (succ u2) (succ u1)} (List.{max u2 u1} (Matrix.TransvectionStruct.{u1, u2} n 𝕜)) (fun (L' : List.{max u2 u1} (Matrix.TransvectionStruct.{u1, u2} n 𝕜)) => Exists.{max (succ u2) (succ u1)} (n -> 𝕜) (fun (D : n -> 𝕜) => Eq.{max (succ u2) (succ u1)} (Matrix.{u2, u2, u1} n n 𝕜) (Matrix.mul.{u1, u2, u2, u2} n n n 𝕜 _inst_5 (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) (Matrix.mul.{u1, u2, u2, u2} n n n 𝕜 _inst_5 (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) (List.prod.{max u2 u1} (Matrix.{u2, u2, u1} n n 𝕜) (Matrix.instMulMatrix.{u1, u2} n 𝕜 _inst_5 (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.one.{u1, u2} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))) (NonAssocRing.toOne.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (List.map.{max u2 u1, max u2 u1} (Matrix.TransvectionStruct.{u1, u2} n 𝕜) (Matrix.{u2, u2, u1} n n 𝕜) (Matrix.TransvectionStruct.toMatrix.{u1, u2} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u1} 𝕜 (Field.toEuclideanDomain.{u1} 𝕜 _inst_1))) L)) M) (List.prod.{max u2 u1} (Matrix.{u2, u2, u1} n n 𝕜) (Matrix.instMulMatrix.{u1, u2} n 𝕜 _inst_5 (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.one.{u1, u2} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))) (NonAssocRing.toOne.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (List.map.{max u2 u1, max u2 u1} (Matrix.TransvectionStruct.{u1, u2} n 𝕜) (Matrix.{u2, u2, u1} n n 𝕜) (Matrix.TransvectionStruct.toMatrix.{u1, u2} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u1} 𝕜 (Field.toEuclideanDomain.{u1} 𝕜 _inst_1))) L'))) (Matrix.diagonal.{u1, u2} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))) D))))
+Case conversion may be inaccurate. Consider using '#align matrix.pivot.exists_list_transvec_mul_mul_list_transvec_eq_diagonal Matrix.Pivot.exists_list_transvec_mul_mul_list_transvec_eq_diagonalₓ'. -/
/-- Any matrix can be reduced to diagonal form by elementary operations. -/
theorem exists_list_transvec_mul_mul_list_transvec_eq_diagonal (M : Matrix n n 𝕜) :
∃ (L L' : List (TransvectionStruct n 𝕜))(D : n → 𝕜),
@@ -721,6 +951,12 @@ theorem exists_list_transvec_mul_mul_list_transvec_eq_diagonal (M : Matrix n n
apply exists_list_transvec_mul_mul_list_transvec_eq_diagonal_aux
#align matrix.pivot.exists_list_transvec_mul_mul_list_transvec_eq_diagonal Matrix.Pivot.exists_list_transvec_mul_mul_list_transvec_eq_diagonal
+/- warning: matrix.pivot.exists_list_transvec_mul_diagonal_mul_list_transvec -> Matrix.Pivot.exists_list_transvec_mul_diagonal_mul_list_transvec is a dubious translation:
+lean 3 declaration is
+ forall {n : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : Field.{u2} 𝕜] [_inst_2 : DecidableEq.{succ u1} n] [_inst_5 : Fintype.{u1} n] (M : Matrix.{u1, u1, u2} n n 𝕜), Exists.{succ (max u1 u2)} (List.{max u1 u2} (Matrix.TransvectionStruct.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u2} 𝕜 (Field.toEuclideanDomain.{u2} 𝕜 _inst_1)))) (fun (L : List.{max u1 u2} (Matrix.TransvectionStruct.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u2} 𝕜 (Field.toEuclideanDomain.{u2} 𝕜 _inst_1)))) => Exists.{succ (max u1 u2)} (List.{max u1 u2} (Matrix.TransvectionStruct.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u2} 𝕜 (Field.toEuclideanDomain.{u2} 𝕜 _inst_1)))) (fun (L' : List.{max u1 u2} (Matrix.TransvectionStruct.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u2} 𝕜 (Field.toEuclideanDomain.{u2} 𝕜 _inst_1)))) => Exists.{max (succ u1) (succ u2)} (n -> 𝕜) (fun (D : n -> 𝕜) => Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n 𝕜) M (Matrix.mul.{u2, u1, u1, u1} n n n 𝕜 _inst_5 (Distrib.toHasMul.{u2} 𝕜 (Ring.toDistrib.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1)))))) (Matrix.mul.{u2, u1, u1, u1} n n n 𝕜 _inst_5 (Distrib.toHasMul.{u2} 𝕜 (Ring.toDistrib.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1)))))) (List.prod.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.hasMul.{u2, u1} n 𝕜 _inst_5 (Distrib.toHasMul.{u2} 𝕜 (Ring.toDistrib.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))))) (Matrix.hasOne.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (MulZeroClass.toHasZero.{u2} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))))) (AddMonoidWithOne.toOne.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))))) (List.map.{max u1 u2, max u1 u2} (Matrix.TransvectionStruct.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u2} 𝕜 (Field.toEuclideanDomain.{u2} 𝕜 _inst_1))) (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.TransvectionStruct.toMatrix.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u2} 𝕜 (Field.toEuclideanDomain.{u2} 𝕜 _inst_1))) L)) (Matrix.diagonal.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (MulZeroClass.toHasZero.{u2} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))))) D)) (List.prod.{max u1 u2} (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.hasMul.{u2, u1} n 𝕜 _inst_5 (Distrib.toHasMul.{u2} 𝕜 (Ring.toDistrib.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))))) (Matrix.hasOne.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (MulZeroClass.toHasZero.{u2} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))))) (AddMonoidWithOne.toOne.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))))) (List.map.{max u1 u2, max u1 u2} (Matrix.TransvectionStruct.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u2} 𝕜 (Field.toEuclideanDomain.{u2} 𝕜 _inst_1))) (Matrix.{u1, u1, u2} n n 𝕜) (Matrix.TransvectionStruct.toMatrix.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u2} 𝕜 (Field.toEuclideanDomain.{u2} 𝕜 _inst_1))) L'))))))
+but is expected to have type
+ forall {n : Type.{u2}} {𝕜 : Type.{u1}} [_inst_1 : Field.{u1} 𝕜] [_inst_2 : DecidableEq.{succ u2} n] [_inst_5 : Fintype.{u2} n] (M : Matrix.{u2, u2, u1} n n 𝕜), Exists.{max (succ u2) (succ u1)} (List.{max u2 u1} (Matrix.TransvectionStruct.{u1, u2} n 𝕜)) (fun (L : List.{max u2 u1} (Matrix.TransvectionStruct.{u1, u2} n 𝕜)) => Exists.{max (succ u2) (succ u1)} (List.{max u2 u1} (Matrix.TransvectionStruct.{u1, u2} n 𝕜)) (fun (L' : List.{max u2 u1} (Matrix.TransvectionStruct.{u1, u2} n 𝕜)) => Exists.{max (succ u2) (succ u1)} (n -> 𝕜) (fun (D : n -> 𝕜) => Eq.{max (succ u2) (succ u1)} (Matrix.{u2, u2, u1} n n 𝕜) M (Matrix.mul.{u1, u2, u2, u2} n n n 𝕜 _inst_5 (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) (Matrix.mul.{u1, u2, u2, u2} n n n 𝕜 _inst_5 (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) (List.prod.{max u2 u1} (Matrix.{u2, u2, u1} n n 𝕜) (Matrix.instMulMatrix.{u1, u2} n 𝕜 _inst_5 (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.one.{u1, u2} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))) (NonAssocRing.toOne.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (List.map.{max u2 u1, max u2 u1} (Matrix.TransvectionStruct.{u1, u2} n 𝕜) (Matrix.{u2, u2, u1} n n 𝕜) (Matrix.TransvectionStruct.toMatrix.{u1, u2} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u1} 𝕜 (Field.toEuclideanDomain.{u1} 𝕜 _inst_1))) L)) (Matrix.diagonal.{u1, u2} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))) D)) (List.prod.{max u2 u1} (Matrix.{u2, u2, u1} n n 𝕜) (Matrix.instMulMatrix.{u1, u2} n 𝕜 _inst_5 (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))))) (Matrix.one.{u1, u2} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))) (NonAssocRing.toOne.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (List.map.{max u2 u1, max u2 u1} (Matrix.TransvectionStruct.{u1, u2} n 𝕜) (Matrix.{u2, u2, u1} n n 𝕜) (Matrix.TransvectionStruct.toMatrix.{u1, u2} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u1} 𝕜 (Field.toEuclideanDomain.{u1} 𝕜 _inst_1))) L'))))))
+Case conversion may be inaccurate. Consider using '#align matrix.pivot.exists_list_transvec_mul_diagonal_mul_list_transvec Matrix.Pivot.exists_list_transvec_mul_diagonal_mul_list_transvecₓ'. -/
/-- Any matrix can be written as the product of transvections, a diagonal matrix, and
transvections.-/
theorem exists_list_transvec_mul_diagonal_mul_list_transvec (M : Matrix n n 𝕜) :
@@ -743,6 +979,12 @@ open Pivot TransvectionStruct
variable {n} [Fintype n]
+/- warning: matrix.diagonal_transvection_induction -> Matrix.diagonal_transvection_induction is a dubious translation:
+lean 3 declaration is
+ forall {n : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : Field.{u2} 𝕜] [_inst_2 : DecidableEq.{succ u1} n] [_inst_5 : Fintype.{u1} n] (P : (Matrix.{u1, u1, u2} n n 𝕜) -> Prop) (M : Matrix.{u1, u1, u2} n n 𝕜), (forall (D : n -> 𝕜), (Eq.{succ u2} 𝕜 (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_5 𝕜 (EuclideanDomain.toCommRing.{u2} 𝕜 (Field.toEuclideanDomain.{u2} 𝕜 _inst_1)) (Matrix.diagonal.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (MulZeroClass.toHasZero.{u2} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))))) D)) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_5 𝕜 (EuclideanDomain.toCommRing.{u2} 𝕜 (Field.toEuclideanDomain.{u2} 𝕜 _inst_1)) M)) -> (P (Matrix.diagonal.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (MulZeroClass.toHasZero.{u2} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))))) D))) -> (forall (t : Matrix.TransvectionStruct.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u2} 𝕜 (Field.toEuclideanDomain.{u2} 𝕜 _inst_1))), P (Matrix.TransvectionStruct.toMatrix.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u2} 𝕜 (Field.toEuclideanDomain.{u2} 𝕜 _inst_1)) t)) -> (forall (A : Matrix.{u1, u1, u2} n n 𝕜) (B : Matrix.{u1, u1, u2} n n 𝕜), (P A) -> (P B) -> (P (Matrix.mul.{u2, u1, u1, u1} n n n 𝕜 _inst_5 (Distrib.toHasMul.{u2} 𝕜 (Ring.toDistrib.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1)))))) A B))) -> (P M)
+but is expected to have type
+ forall {n : Type.{u2}} {𝕜 : Type.{u1}} [_inst_1 : Field.{u1} 𝕜] [_inst_2 : DecidableEq.{succ u2} n] [_inst_5 : Fintype.{u2} n] (P : (Matrix.{u2, u2, u1} n n 𝕜) -> Prop) (M : Matrix.{u2, u2, u1} n n 𝕜), (forall (D : n -> 𝕜), (Eq.{succ u1} 𝕜 (Matrix.det.{u1, u2} n (fun (a : n) (b : n) => _inst_2 a b) _inst_5 𝕜 (EuclideanDomain.toCommRing.{u1} 𝕜 (Field.toEuclideanDomain.{u1} 𝕜 _inst_1)) (Matrix.diagonal.{u1, u2} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))) D)) (Matrix.det.{u1, u2} n (fun (a : n) (b : n) => _inst_2 a b) _inst_5 𝕜 (EuclideanDomain.toCommRing.{u1} 𝕜 (Field.toEuclideanDomain.{u1} 𝕜 _inst_1)) M)) -> (P (Matrix.diagonal.{u1, u2} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))) D))) -> (forall (t : Matrix.TransvectionStruct.{u1, u2} n 𝕜), P (Matrix.TransvectionStruct.toMatrix.{u1, u2} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u1} 𝕜 (Field.toEuclideanDomain.{u1} 𝕜 _inst_1)) t)) -> (forall (A : Matrix.{u2, u2, u1} n n 𝕜) (B : Matrix.{u2, u2, u1} n n 𝕜), (P A) -> (P B) -> (P (Matrix.mul.{u1, u2, u2, u2} n n n 𝕜 _inst_5 (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) A B))) -> (P M)
+Case conversion may be inaccurate. Consider using '#align matrix.diagonal_transvection_induction Matrix.diagonal_transvection_inductionₓ'. -/
/-- Induction principle for matrices based on transvections: if a property is true for all diagonal
matrices, all transvections, and is stable under product, then it is true for all matrices. This is
the useful way to say that matrices are generated by diagonal matrices and transvections.
@@ -775,6 +1017,12 @@ theorem diagonal_transvection_induction (P : Matrix n n 𝕜 → Prop) (M : Matr
exact hmul _ _ (htransvec _) IH
#align matrix.diagonal_transvection_induction Matrix.diagonal_transvection_induction
+/- warning: matrix.diagonal_transvection_induction_of_det_ne_zero -> Matrix.diagonal_transvection_induction_of_det_ne_zero is a dubious translation:
+lean 3 declaration is
+ forall {n : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : Field.{u2} 𝕜] [_inst_2 : DecidableEq.{succ u1} n] [_inst_5 : Fintype.{u1} n] (P : (Matrix.{u1, u1, u2} n n 𝕜) -> Prop) (M : Matrix.{u1, u1, u2} n n 𝕜), (Ne.{succ u2} 𝕜 (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_5 𝕜 (EuclideanDomain.toCommRing.{u2} 𝕜 (Field.toEuclideanDomain.{u2} 𝕜 _inst_1)) M) (OfNat.ofNat.{u2} 𝕜 0 (OfNat.mk.{u2} 𝕜 0 (Zero.zero.{u2} 𝕜 (MulZeroClass.toHasZero.{u2} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))))))))) -> (forall (D : n -> 𝕜), (Ne.{succ u2} 𝕜 (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_5 𝕜 (EuclideanDomain.toCommRing.{u2} 𝕜 (Field.toEuclideanDomain.{u2} 𝕜 _inst_1)) (Matrix.diagonal.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (MulZeroClass.toHasZero.{u2} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))))) D)) (OfNat.ofNat.{u2} 𝕜 0 (OfNat.mk.{u2} 𝕜 0 (Zero.zero.{u2} 𝕜 (MulZeroClass.toHasZero.{u2} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))))))))) -> (P (Matrix.diagonal.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (MulZeroClass.toHasZero.{u2} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))))) D))) -> (forall (t : Matrix.TransvectionStruct.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u2} 𝕜 (Field.toEuclideanDomain.{u2} 𝕜 _inst_1))), P (Matrix.TransvectionStruct.toMatrix.{u2, u1} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u2} 𝕜 (Field.toEuclideanDomain.{u2} 𝕜 _inst_1)) t)) -> (forall (A : Matrix.{u1, u1, u2} n n 𝕜) (B : Matrix.{u1, u1, u2} n n 𝕜), (Ne.{succ u2} 𝕜 (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_5 𝕜 (EuclideanDomain.toCommRing.{u2} 𝕜 (Field.toEuclideanDomain.{u2} 𝕜 _inst_1)) A) (OfNat.ofNat.{u2} 𝕜 0 (OfNat.mk.{u2} 𝕜 0 (Zero.zero.{u2} 𝕜 (MulZeroClass.toHasZero.{u2} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))))))))) -> (Ne.{succ u2} 𝕜 (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_5 𝕜 (EuclideanDomain.toCommRing.{u2} 𝕜 (Field.toEuclideanDomain.{u2} 𝕜 _inst_1)) B) (OfNat.ofNat.{u2} 𝕜 0 (OfNat.mk.{u2} 𝕜 0 (Zero.zero.{u2} 𝕜 (MulZeroClass.toHasZero.{u2} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1))))))))))) -> (P A) -> (P B) -> (P (Matrix.mul.{u2, u1, u1, u1} n n n 𝕜 _inst_5 (Distrib.toHasMul.{u2} 𝕜 (Ring.toDistrib.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} 𝕜 (NonUnitalNonAssocRing.toAddCommGroup.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 _inst_1)))))) A B))) -> (P M)
+but is expected to have type
+ forall {n : Type.{u2}} {𝕜 : Type.{u1}} [_inst_1 : Field.{u1} 𝕜] [_inst_2 : DecidableEq.{succ u2} n] [_inst_5 : Fintype.{u2} n] (P : (Matrix.{u2, u2, u1} n n 𝕜) -> Prop) (M : Matrix.{u2, u2, u1} n n 𝕜), (Ne.{succ u1} 𝕜 (Matrix.det.{u1, u2} n (fun (a : n) (b : n) => _inst_2 a b) _inst_5 𝕜 (EuclideanDomain.toCommRing.{u1} 𝕜 (Field.toEuclideanDomain.{u1} 𝕜 _inst_1)) M) (OfNat.ofNat.{u1} 𝕜 0 (Zero.toOfNat0.{u1} 𝕜 (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1))))))) -> (forall (D : n -> 𝕜), (Ne.{succ u1} 𝕜 (Matrix.det.{u1, u2} n (fun (a : n) (b : n) => _inst_2 a b) _inst_5 𝕜 (EuclideanDomain.toCommRing.{u1} 𝕜 (Field.toEuclideanDomain.{u1} 𝕜 _inst_1)) (Matrix.diagonal.{u1, u2} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))) D)) (OfNat.ofNat.{u1} 𝕜 0 (Zero.toOfNat0.{u1} 𝕜 (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1))))))) -> (P (Matrix.diagonal.{u1, u2} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1)))) D))) -> (forall (t : Matrix.TransvectionStruct.{u1, u2} n 𝕜), P (Matrix.TransvectionStruct.toMatrix.{u1, u2} n 𝕜 (fun (a : n) (b : n) => _inst_2 a b) (EuclideanDomain.toCommRing.{u1} 𝕜 (Field.toEuclideanDomain.{u1} 𝕜 _inst_1)) t)) -> (forall (A : Matrix.{u2, u2, u1} n n 𝕜) (B : Matrix.{u2, u2, u1} n n 𝕜), (Ne.{succ u1} 𝕜 (Matrix.det.{u1, u2} n (fun (a : n) (b : n) => _inst_2 a b) _inst_5 𝕜 (EuclideanDomain.toCommRing.{u1} 𝕜 (Field.toEuclideanDomain.{u1} 𝕜 _inst_1)) A) (OfNat.ofNat.{u1} 𝕜 0 (Zero.toOfNat0.{u1} 𝕜 (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1))))))) -> (Ne.{succ u1} 𝕜 (Matrix.det.{u1, u2} n (fun (a : n) (b : n) => _inst_2 a b) _inst_5 𝕜 (EuclideanDomain.toCommRing.{u1} 𝕜 (Field.toEuclideanDomain.{u1} 𝕜 _inst_1)) B) (OfNat.ofNat.{u1} 𝕜 0 (Zero.toOfNat0.{u1} 𝕜 (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 _inst_1))))))) -> (P A) -> (P B) -> (P (Matrix.mul.{u1, u2, u2, u2} n n n 𝕜 _inst_5 (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1))))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 _inst_1)))))) A B))) -> (P M)
+Case conversion may be inaccurate. Consider using '#align matrix.diagonal_transvection_induction_of_det_ne_zero Matrix.diagonal_transvection_induction_of_det_ne_zeroₓ'. -/
/-- Induction principle for invertible matrices based on transvections: if a property is true for
all invertible diagonal matrices, all transvections, and is stable under product of invertible
matrices, then it is true for all invertible matrices. This is the useful way to say that
mathlib commit https://github.com/leanprover-community/mathlib/commit/0e2aab2b0d521f060f62a14d2cf2e2c54e8491d6
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Sébastien Gouëzel
! This file was ported from Lean 3 source module linear_algebra.matrix.transvection
-! leanprover-community/mathlib commit 70fd9563a21e7b963887c9360bd29b2393e6225a
+! leanprover-community/mathlib commit 0e2aab2b0d521f060f62a14d2cf2e2c54e8491d6
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -104,16 +104,16 @@ theorem updateRow_eq_transvection [Finite n] (c : R) :
ext (a b)
by_cases ha : i = a; by_cases hb : j = b
·
- simp only [update_row, transvection, ha, hb, Function.update_same, std_basis_matrix.apply_same,
- Pi.add_apply, one_apply_eq, Pi.smul_apply, mul_one, Algebra.id.smul_eq_mul]
+ simp only [update_row_self, transvection, ha, hb, Pi.add_apply, std_basis_matrix.apply_same,
+ one_apply_eq, Pi.smul_apply, mul_one, Algebra.id.smul_eq_mul]
·
- simp only [update_row, transvection, ha, hb, std_basis_matrix.apply_of_ne, Function.update_same,
- Pi.add_apply, Ne.def, not_false_iff, Pi.smul_apply, and_false_iff, one_apply_ne,
- Algebra.id.smul_eq_mul, MulZeroClass.mul_zero]
+ simp only [update_row_self, transvection, ha, hb, std_basis_matrix.apply_of_ne, Pi.add_apply,
+ Ne.def, not_false_iff, Pi.smul_apply, and_false_iff, one_apply_ne, Algebra.id.smul_eq_mul,
+ MulZeroClass.mul_zero]
·
- simp only [update_row, transvection, ha, Ne.symm ha, std_basis_matrix.apply_of_ne, add_zero,
- Algebra.id.smul_eq_mul, Function.update_noteq, Ne.def, not_false_iff, DMatrix.add_apply,
- Pi.smul_apply, MulZeroClass.mul_zero, false_and_iff]
+ simp only [update_row_ne, transvection, ha, Ne.symm ha, std_basis_matrix.apply_of_ne, add_zero,
+ Algebra.id.smul_eq_mul, Ne.def, not_false_iff, DMatrix.add_apply, Pi.smul_apply,
+ MulZeroClass.mul_zero, false_and_iff]
#align matrix.update_row_eq_transvection Matrix.updateRow_eq_transvection
variable [Fintype n]
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce7e9d53d4bbc38065db3b595cd5bd73c323bc1d
@@ -703,7 +703,7 @@ theorem exists_list_transvec_mul_mul_list_transvec_eq_diagonal_aux (n : Type) [F
by
refine' Fintype.equivOfCardEq _
rw [hn]
- convert (@Fintype.card_sum (Fin r) Unit _ _).symm
+ convert(@Fintype.card_sum (Fin r) Unit _ _).symm
simp
apply reindex_exists_list_transvec_mul_mul_list_transvec_eq_diagonal M e
apply
mathlib commit https://github.com/leanprover-community/mathlib/commit/3180fab693e2cee3bff62675571264cb8778b212
@@ -109,11 +109,11 @@ theorem updateRow_eq_transvection [Finite n] (c : R) :
·
simp only [update_row, transvection, ha, hb, std_basis_matrix.apply_of_ne, Function.update_same,
Pi.add_apply, Ne.def, not_false_iff, Pi.smul_apply, and_false_iff, one_apply_ne,
- Algebra.id.smul_eq_mul, mul_zero]
+ Algebra.id.smul_eq_mul, MulZeroClass.mul_zero]
·
simp only [update_row, transvection, ha, Ne.symm ha, std_basis_matrix.apply_of_ne, add_zero,
Algebra.id.smul_eq_mul, Function.update_noteq, Ne.def, not_false_iff, DMatrix.add_apply,
- Pi.smul_apply, mul_zero, false_and_iff]
+ Pi.smul_apply, MulZeroClass.mul_zero, false_and_iff]
#align matrix.update_row_eq_transvection Matrix.updateRow_eq_transvection
variable [Fintype n]
mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
@@ -96,12 +96,13 @@ theorem updateRow_eq_transvection [Finite n] (c : R) :
transvection i j c := by
cases nonempty_fintype n
ext a b
- by_cases ha : i = a; by_cases hb : j = b
- · simp only [updateRow_self, transvection, ha, hb, Pi.add_apply, StdBasisMatrix.apply_same,
- one_apply_eq, Pi.smul_apply, mul_one, Algebra.id.smul_eq_mul, add_apply]
- · simp only [updateRow_self, transvection, ha, hb, StdBasisMatrix.apply_of_ne, Pi.add_apply,
- Ne, not_false_iff, Pi.smul_apply, and_false_iff, one_apply_ne, Algebra.id.smul_eq_mul,
- mul_zero, add_apply]
+ by_cases ha : i = a
+ · by_cases hb : j = b
+ · simp only [updateRow_self, transvection, ha, hb, Pi.add_apply, StdBasisMatrix.apply_same,
+ one_apply_eq, Pi.smul_apply, mul_one, Algebra.id.smul_eq_mul, add_apply]
+ · simp only [updateRow_self, transvection, ha, hb, StdBasisMatrix.apply_of_ne, Pi.add_apply,
+ Ne, not_false_iff, Pi.smul_apply, and_false_iff, one_apply_ne, Algebra.id.smul_eq_mul,
+ mul_zero, add_apply]
· simp only [updateRow_ne, transvection, ha, Ne.symm ha, StdBasisMatrix.apply_of_ne, add_zero,
Algebra.id.smul_eq_mul, Ne, not_false_iff, DMatrix.add_apply, Pi.smul_apply,
mul_zero, false_and_iff, add_apply]
@@ -373,8 +373,7 @@ theorem listTransvecCol_mul_last_row_drop (i : Sum (Fin r) Unit) {k : ℕ} (hk :
refine' Nat.decreasingInduction' _ hk _
· intro n hn _ IH
have hn' : n < (listTransvecCol M).length := by simpa [listTransvecCol] using hn
- -- Porting note: after changing from `nthLe` to `get`, we need to provide all arguments
- rw [← @List.cons_get_drop_succ _ _ ⟨n, hn'⟩]
+ rw [List.drop_eq_get_cons hn']
simpa [listTransvecCol, Matrix.mul_assoc]
· simp only [listTransvecCol, List.length_ofFn, le_refl, List.drop_eq_nil_of_le, List.prod_nil,
Matrix.one_mul]
@@ -402,8 +401,7 @@ theorem listTransvecCol_mul_last_col (hM : M (inr unit) (inr unit) ≠ 0) (i : F
· intro n hn hk IH
have hn' : n < (listTransvecCol M).length := by simpa [listTransvecCol] using hn
let n' : Fin r := ⟨n, hn⟩
- -- Porting note: after changing from `nthLe` to `get`, we need to provide all arguments
- rw [← @List.cons_get_drop_succ _ _ ⟨n, hn'⟩]
+ rw [List.drop_eq_get_cons hn']
have A :
(listTransvecCol M).get ⟨n, hn'⟩ =
transvection (inl n') (inr unit) (-M (inl n') (inr unit) / M (inr unit) (inr unit)) :=
@@ -148,7 +148,7 @@ variable (R n)
/-- A structure containing all the information from which one can build a nontrivial transvection.
This structure is easier to manipulate than transvections as one has a direct access to all the
relevant fields. -/
--- porting note (#10927): removed @[nolint has_nonempty_instance]
+-- porting note (#5171): removed @[nolint has_nonempty_instance]
structure TransvectionStruct where
(i j : n)
hij : i ≠ j
Purely automatic replacement. If this is in any way controversial; I'm happy to just close this PR.
@@ -234,7 +234,7 @@ theorem prod_mul_reverse_inv_prod (L : List (TransvectionStruct n R)) :
simp_rw [IH, Matrix.mul_one, t.mul_inv]
#align matrix.transvection_struct.prod_mul_reverse_inv_prod Matrix.TransvectionStruct.prod_mul_reverse_inv_prod
-/-- `M` is a scalar matrix if it commutes with every nontrivial transvection (elementary matrix).-/
+/-- `M` is a scalar matrix if it commutes with every nontrivial transvection (elementary matrix). -/
theorem _root_.Matrix.mem_range_scalar_of_commute_transvectionStruct {M : Matrix n n R}
(hM : ∀ t : TransvectionStruct n R, Commute t.toMatrix M) :
M ∈ Set.range (Matrix.scalar n) := by
@@ -690,7 +690,7 @@ theorem exists_list_transvec_mul_mul_list_transvec_eq_diagonal (M : Matrix n n
#align matrix.pivot.exists_list_transvec_mul_mul_list_transvec_eq_diagonal Matrix.Pivot.exists_list_transvec_mul_mul_list_transvec_eq_diagonal
/-- Any matrix can be written as the product of transvections, a diagonal matrix, and
-transvections.-/
+transvections. -/
theorem exists_list_transvec_mul_diagonal_mul_list_transvec (M : Matrix n n 𝕜) :
∃ (L L' : List (TransvectionStruct n 𝕜)) (D : n → 𝕜),
M = (L.map toMatrix).prod * diagonal D * (L'.map toMatrix).prod := by
@@ -100,10 +100,10 @@ theorem updateRow_eq_transvection [Finite n] (c : R) :
· simp only [updateRow_self, transvection, ha, hb, Pi.add_apply, StdBasisMatrix.apply_same,
one_apply_eq, Pi.smul_apply, mul_one, Algebra.id.smul_eq_mul, add_apply]
· simp only [updateRow_self, transvection, ha, hb, StdBasisMatrix.apply_of_ne, Pi.add_apply,
- Ne.def, not_false_iff, Pi.smul_apply, and_false_iff, one_apply_ne, Algebra.id.smul_eq_mul,
+ Ne, not_false_iff, Pi.smul_apply, and_false_iff, one_apply_ne, Algebra.id.smul_eq_mul,
mul_zero, add_apply]
· simp only [updateRow_ne, transvection, ha, Ne.symm ha, StdBasisMatrix.apply_of_ne, add_zero,
- Algebra.id.smul_eq_mul, Ne.def, not_false_iff, DMatrix.add_apply, Pi.smul_apply,
+ Algebra.id.smul_eq_mul, Ne, not_false_iff, DMatrix.add_apply, Pi.smul_apply,
mul_zero, false_and_iff, add_apply]
#align matrix.update_row_eq_transvection Matrix.updateRow_eq_transvection
@@ -449,7 +449,7 @@ theorem mul_listTransvecRow_last_col_take (i : Sum (Fin r) Unit) {k : ℕ} (hk :
simp only [List.take_succ, ← Matrix.mul_assoc, this, List.prod_append, Matrix.mul_one,
List.prod_cons, List.prod_nil, Option.toList_some]
rw [mul_transvection_apply_of_ne, IH hkr.le]
- simp only [Ne.def, not_false_iff]
+ simp only [Ne, not_false_iff]
#align matrix.pivot.mul_list_transvec_row_last_col_take Matrix.Pivot.mul_listTransvecRow_last_col_take
/-- Multiplying by all the matrices in `listTransvecRow M` does not change the last column. -/
@@ -498,7 +498,7 @@ theorem mul_listTransvecRow_last_row (hM : M (inr unit) (inr unit) ≠ 0) (i : F
rintro rfl
cases i
tauto
- simp only [IH hnr.le, Ne.def, mul_transvection_apply_of_ne, Ne.symm h, inl.injEq,
+ simp only [IH hnr.le, Ne, mul_transvection_apply_of_ne, Ne.symm h, inl.injEq,
not_false_eq_true]
rcases le_or_lt (n + 1) i with (hi | hi)
· simp [hi, n.le_succ.trans hi, if_true]
Empty lines were removed by executing the following Python script twice
import os
import re
# Loop through each file in the repository
for dir_path, dirs, files in os.walk('.'):
for filename in files:
if filename.endswith('.lean'):
file_path = os.path.join(dir_path, filename)
# Open the file and read its contents
with open(file_path, 'r') as file:
content = file.read()
# Use a regular expression to replace sequences of "variable" lines separated by empty lines
# with sequences without empty lines
modified_content = re.sub(r'(variable.*\n)\n(variable(?! .* in))', r'\1\2', content)
# Write the modified content back to the file
with open(file_path, 'w') as file:
file.write(modified_content)
@@ -68,9 +68,7 @@ namespace Matrix
open Matrix
variable (n p : Type*) (R : Type u₂) {𝕜 : Type*} [Field 𝕜]
-
variable [DecidableEq n] [DecidableEq p]
-
variable [CommRing R]
section Transvection
This is a very large PR, but it has been reviewed piecemeal already in PRs to the bump/v4.7.0
branch as we update to intermediate nightlies.
Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: Kyle Miller <kmill31415@gmail.com> Co-authored-by: damiano <adomani@gmail.com>
@@ -449,7 +449,7 @@ theorem mul_listTransvecRow_last_col_take (i : Sum (Fin r) Unit) {k : ℕ} (hk :
(-M (inr Unit.unit) (inl k') / M (inr Unit.unit) (inr Unit.unit))) := by
simp only [listTransvecRow, List.ofFnNthVal, hkr, dif_pos, List.get?_ofFn]
simp only [List.take_succ, ← Matrix.mul_assoc, this, List.prod_append, Matrix.mul_one,
- List.prod_cons, List.prod_nil, Option.to_list_some]
+ List.prod_cons, List.prod_nil, Option.toList_some]
rw [mul_transvection_apply_of_ne, IH hkr.le]
simp only [Ne.def, not_false_iff]
#align matrix.pivot.mul_list_transvec_row_last_col_take Matrix.Pivot.mul_listTransvecRow_last_col_take
@@ -486,7 +486,7 @@ theorem mul_listTransvecRow_last_row (hM : M (inr unit) (inr unit) ≠ 0) (i : F
(-M (inr unit) (inl n') / M (inr unit) (inr unit))) := by
simp only [listTransvecRow, List.ofFnNthVal, hnr, dif_pos, List.get?_ofFn]
simp only [List.take_succ, A, ← Matrix.mul_assoc, List.prod_append, Matrix.mul_one,
- List.prod_cons, List.prod_nil, Option.to_list_some]
+ List.prod_cons, List.prod_nil, Option.toList_some]
by_cases h : n' = i
· have hni : n = i := by
cases i
Homogenises porting notes via capitalisation and addition of whitespace.
It makes the following changes:
@@ -371,11 +371,11 @@ def listTransvecRow : List (Matrix (Sum (Fin r) Unit) (Sum (Fin r) Unit) 𝕜) :
/-- Multiplying by some of the matrices in `listTransvecCol M` does not change the last row. -/
theorem listTransvecCol_mul_last_row_drop (i : Sum (Fin r) Unit) {k : ℕ} (hk : k ≤ r) :
(((listTransvecCol M).drop k).prod * M) (inr unit) i = M (inr unit) i := by
- -- porting note: `apply` didn't work anymore, because of the implicit arguments
+ -- Porting note: `apply` didn't work anymore, because of the implicit arguments
refine' Nat.decreasingInduction' _ hk _
· intro n hn _ IH
have hn' : n < (listTransvecCol M).length := by simpa [listTransvecCol] using hn
- -- porting note: after changing from `nthLe` to `get`, we need to provide all arguments
+ -- Porting note: after changing from `nthLe` to `get`, we need to provide all arguments
rw [← @List.cons_get_drop_succ _ _ ⟨n, hn'⟩]
simpa [listTransvecCol, Matrix.mul_assoc]
· simp only [listTransvecCol, List.length_ofFn, le_refl, List.drop_eq_nil_of_le, List.prod_nil,
@@ -399,12 +399,12 @@ theorem listTransvecCol_mul_last_col (hM : M (inr unit) (inr unit) ≠ 0) (i : F
if k ≤ i then 0 else M (inl i) (inr unit) by
simpa only [List.drop, _root_.zero_le, ite_true] using H 0 (zero_le _)
intro k hk
- -- porting note: `apply` didn't work anymore, because of the implicit arguments
+ -- Porting note: `apply` didn't work anymore, because of the implicit arguments
refine' Nat.decreasingInduction' _ hk _
· intro n hn hk IH
have hn' : n < (listTransvecCol M).length := by simpa [listTransvecCol] using hn
let n' : Fin r := ⟨n, hn⟩
- -- porting note: after changing from `nthLe` to `get`, we need to provide all arguments
+ -- Porting note: after changing from `nthLe` to `get`, we need to provide all arguments
rw [← @List.cons_get_drop_succ _ _ ⟨n, hn'⟩]
have A :
(listTransvecCol M).get ⟨n, hn'⟩ =
@@ -629,7 +629,7 @@ theorem exists_list_transvec_mul_mul_list_transvec_eq_diagonal_induction
diagonal (Sum.elim D₀ fun _ => c) by
simpa [M', c, Matrix.mul_assoc]
have : M' = fromBlocks M'' 0 0 (diagonal fun _ => c) := by
- -- porting note: simplified proof, because `congr` didn't work anymore
+ -- Porting note: simplified proof, because `congr` didn't work anymore
rw [← fromBlocks_toBlocks M', hM.1, hM.2]
rfl
rw [this]
@@ -414,7 +414,7 @@ theorem listTransvecCol_mul_last_col (hM : M (inr unit) (inr unit) ≠ 0) (i : F
by_cases h : n' = i
· have hni : n = i := by
cases i
- simp only [Fin.mk_eq_mk] at h
+ simp only [n', Fin.mk_eq_mk] at h
simp [h]
simp only [h, transvection_mul_apply_same, IH, ← hni, add_le_iff_nonpos_right,
listTransvecCol_mul_last_row_drop _ _ hn]
@@ -490,7 +490,7 @@ theorem mul_listTransvecRow_last_row (hM : M (inr unit) (inr unit) ≠ 0) (i : F
by_cases h : n' = i
· have hni : n = i := by
cases i
- simp only [Fin.mk_eq_mk] at h
+ simp only [n', Fin.mk_eq_mk] at h
simp only [h]
have : ¬n.succ ≤ i := by simp only [← hni, n.lt_succ_self, not_le]
simp only [h, mul_transvection_apply_same, List.take, if_false,
@@ -559,8 +559,8 @@ theorem exists_isTwoBlockDiagonal_of_ne_zero (hM : M (inr unit) (inr unit) ≠ 0
List.ofFn fun i : Fin r =>
⟨inr unit, inl i, by simp, -M (inr unit) (inl i) / M (inr unit) (inr unit)⟩
refine' ⟨L, L', _⟩
- have A : L.map toMatrix = listTransvecCol M := by simp [listTransvecCol, (· ∘ ·)]
- have B : L'.map toMatrix = listTransvecRow M := by simp [listTransvecRow, (· ∘ ·)]
+ have A : L.map toMatrix = listTransvecCol M := by simp [L, listTransvecCol, (· ∘ ·)]
+ have B : L'.map toMatrix = listTransvecRow M := by simp [L', listTransvecRow, (· ∘ ·)]
rw [A, B]
exact isTwoBlockDiagonal_listTransvecCol_mul_mul_listTransvecRow M hM
#align matrix.pivot.exists_is_two_block_diagonal_of_ne_zero Matrix.Pivot.exists_isTwoBlockDiagonal_of_ne_zero
@@ -591,7 +591,7 @@ theorem exists_isTwoBlockDiagonal_list_transvec_mul_mul_list_transvec
exact (H j).2
rcases this with ⟨i, h | h⟩
· let M' := transvection (inr Unit.unit) (inl i) 1 * M
- have hM' : M' (inr unit) (inr unit) ≠ 0 := by simpa [hM]
+ have hM' : M' (inr unit) (inr unit) ≠ 0 := by simpa [M', hM]
rcases exists_isTwoBlockDiagonal_of_ne_zero M' hM' with ⟨L, L', hLL'⟩
rw [Matrix.mul_assoc] at hLL'
refine' ⟨L ++ [⟨inr unit, inl i, by simp, 1⟩], L', _⟩
@@ -599,7 +599,7 @@ theorem exists_isTwoBlockDiagonal_list_transvec_mul_mul_list_transvec
List.prod_nil, List.map, Matrix.mul_assoc (L.map toMatrix).prod]
exact hLL'
· let M' := M * transvection (inl i) (inr unit) 1
- have hM' : M' (inr unit) (inr unit) ≠ 0 := by simpa [hM]
+ have hM' : M' (inr unit) (inr unit) ≠ 0 := by simpa [M', hM]
rcases exists_isTwoBlockDiagonal_of_ne_zero M' hM' with ⟨L, L', hLL'⟩
refine' ⟨L, ⟨inl i, inr unit, by simp, 1⟩::L', _⟩
simp only [← Matrix.mul_assoc, toMatrix_mk, List.prod_cons, List.map]
@@ -627,7 +627,7 @@ theorem exists_list_transvec_mul_mul_list_transvec_eq_diagonal_induction
Sum.elim D₀ fun _ => M' (inr unit) (inr unit), _⟩
suffices (L₀.map (toMatrix ∘ sumInl Unit)).prod * M' * (L₀'.map (toMatrix ∘ sumInl Unit)).prod =
diagonal (Sum.elim D₀ fun _ => c) by
- simpa [Matrix.mul_assoc]
+ simpa [M', c, Matrix.mul_assoc]
have : M' = fromBlocks M'' 0 0 (diagonal fun _ => c) := by
-- porting note: simplified proof, because `congr` didn't work anymore
rw [← fromBlocks_toBlocks M', hM.1, hM.2]
@@ -150,7 +150,7 @@ variable (R n)
/-- A structure containing all the information from which one can build a nontrivial transvection.
This structure is easier to manipulate than transvections as one has a direct access to all the
relevant fields. -/
--- porting note: removed @[nolint has_nonempty_instance]
+-- porting note (#10927): removed @[nolint has_nonempty_instance]
structure TransvectionStruct where
(i j : n)
hij : i ≠ j
have
, replace
and suffices
(#10640)
No changes to tactic file, it's just boring fixes throughout the library.
This follows on from #6964.
Co-authored-by: sgouezel <sebastien.gouezel@univ-rennes1.fr> Co-authored-by: Eric Wieser <wieser.eric@gmail.com>
@@ -396,8 +396,8 @@ theorem listTransvecCol_mul_last_col (hM : M (inr unit) (inr unit) ≠ 0) (i : F
∀ k : ℕ,
k ≤ r →
(((listTransvecCol M).drop k).prod * M) (inl i) (inr unit) =
- if k ≤ i then 0 else M (inl i) (inr unit)
- · simpa only [List.drop, _root_.zero_le, ite_true] using H 0 (zero_le _)
+ if k ≤ i then 0 else M (inl i) (inr unit) by
+ simpa only [List.drop, _root_.zero_le, ite_true] using H 0 (zero_le _)
intro k hk
-- porting note: `apply` didn't work anymore, because of the implicit arguments
refine' Nat.decreasingInduction' _ hk _
@@ -470,8 +470,8 @@ theorem mul_listTransvecRow_last_row (hM : M (inr unit) (inr unit) ≠ 0) (i : F
∀ k : ℕ,
k ≤ r →
(M * ((listTransvecRow M).take k).prod) (inr unit) (inl i) =
- if k ≤ i then M (inr unit) (inl i) else 0
- · have A : (listTransvecRow M).length = r := by simp [listTransvecRow]
+ if k ≤ i then M (inr unit) (inl i) else 0 by
+ have A : (listTransvecRow M).length = r := by simp [listTransvecRow]
rw [← List.take_length (listTransvecRow M), A]
have : ¬r ≤ i := by simp
simpa only [this, ite_eq_right_iff] using H r le_rfl
@@ -727,8 +727,8 @@ theorem diagonal_transvection_induction (P : Matrix n n 𝕜 → Prop) (M : Matr
have PD : P (diagonal D) := hdiag D (by simp [h])
suffices H :
∀ (L₁ L₂ : List (TransvectionStruct n 𝕜)) (E : Matrix n n 𝕜),
- P E → P ((L₁.map toMatrix).prod * E * (L₂.map toMatrix).prod)
- · rw [h]
+ P E → P ((L₁.map toMatrix).prod * E * (L₂.map toMatrix).prod) by
+ rw [h]
apply H L L'
exact PD
intro L₁ L₂ E PE
M
is a scalar matrix if it commutes with every nontrivial transvection (elementary matrix).
Also adds iff
versions and corrects the names of the lemmas in #7810
Co-authored-by: Eric Wieser <wieser.eric@gmail.com>
Co-authored-by: Wen Yang <yang-wen@139.com> Co-authored-by: Mario Carneiro <di.gama@gmail.com> Co-authored-by: Eric Wieser <wieser.eric@gmail.com>
@@ -236,6 +236,22 @@ theorem prod_mul_reverse_inv_prod (L : List (TransvectionStruct n R)) :
simp_rw [IH, Matrix.mul_one, t.mul_inv]
#align matrix.transvection_struct.prod_mul_reverse_inv_prod Matrix.TransvectionStruct.prod_mul_reverse_inv_prod
+/-- `M` is a scalar matrix if it commutes with every nontrivial transvection (elementary matrix).-/
+theorem _root_.Matrix.mem_range_scalar_of_commute_transvectionStruct {M : Matrix n n R}
+ (hM : ∀ t : TransvectionStruct n R, Commute t.toMatrix M) :
+ M ∈ Set.range (Matrix.scalar n) := by
+ refine mem_range_scalar_of_commute_stdBasisMatrix ?_
+ intro i j hij
+ simpa [transvection, mul_add, add_mul] using (hM ⟨i, j, hij, 1⟩).eq
+
+theorem _root_.Matrix.mem_range_scalar_iff_commute_transvectionStruct {M : Matrix n n R} :
+ M ∈ Set.range (Matrix.scalar n) ↔ ∀ t : TransvectionStruct n R, Commute t.toMatrix M := by
+ refine ⟨fun h t => ?_, mem_range_scalar_of_commute_transvectionStruct⟩
+ rw [mem_range_scalar_iff_commute_stdBasisMatrix] at h
+ refine (Commute.one_left M).add_left ?_
+ convert (h _ _ t.hij).smul_left t.c using 1
+ rw [smul_stdBasisMatrix, smul_eq_mul, mul_one]
+
end
open Sum
This is the supremum of
along with some minor fixes from failures on nightly-testing as Mathlib master
is merged into it.
Note that some PRs for changes that are already compatible with the current toolchain and will be necessary have already been split out: #8380.
I am hopeful that in future we will be able to progressively merge adaptation PRs into a bump/v4.X.0
branch, so we never end up with a "big merge" like this. However one of these adaptation PRs (#8056) predates my new scheme for combined CI, and it wasn't possible to keep that PR viable in the meantime.
In particular this includes adjustments for the Lean PRs
We can get rid of all the
local macro_rules | `($x ^ $y) => `(HPow.hPow $x $y) -- Porting note: See issue [lean4#2220](https://github.com/leanprover/lean4/pull/2220)
macros across Mathlib (and in any projects that want to write natural number powers of reals).
Changes the default behaviour of simp
to (config := {decide := false})
. This makes simp
(and consequentially norm_num
) less powerful, but also more consistent, and less likely to blow up in long failures. This requires a variety of changes: changing some previously by simp
or norm_num
to decide
or rfl
, or adding (config := {decide := true})
.
This changed the behaviour of simp
so that simp [f]
will only unfold "fully applied" occurrences of f
. The old behaviour can be recovered with simp (config := { unfoldPartialApp := true })
. We may in future add a syntax for this, e.g. simp [!f]
; please provide feedback! In the meantime, we have made the following changes:
(config := { unfoldPartialApp := true })
in some places, to recover the old behaviour@[eqns]
to manually adjust the equation lemmas for a particular definition, recovering the old behaviour just for that definition. See #8371, where we do this for Function.comp
and Function.flip
.This change in Lean may require further changes down the line (e.g. adding the !f
syntax, and/or upstreaming the special treatment for Function.comp
and Function.flip
, and/or removing this special treatment). Please keep an open and skeptical mind about these changes!
Co-authored-by: leanprover-community-mathlib4-bot <leanprover-community-mathlib4-bot@users.noreply.github.com> Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: Eric Wieser <wieser.eric@gmail.com> Co-authored-by: Mauricio Collares <mauricio@collares.org>
@@ -484,7 +484,8 @@ theorem mul_listTransvecRow_last_row (hM : M (inr unit) (inr unit) ≠ 0) (i : F
rintro rfl
cases i
tauto
- simp only [IH hnr.le, Ne.def, mul_transvection_apply_of_ne, Ne.symm h, inl.injEq]
+ simp only [IH hnr.le, Ne.def, mul_transvection_apply_of_ne, Ne.symm h, inl.injEq,
+ not_false_eq_true]
rcases le_or_lt (n + 1) i with (hi | hi)
· simp [hi, n.le_succ.trans hi, if_true]
· rw [if_neg, if_neg]
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).
@@ -103,10 +103,10 @@ theorem updateRow_eq_transvection [Finite n] (c : R) :
one_apply_eq, Pi.smul_apply, mul_one, Algebra.id.smul_eq_mul, add_apply]
· simp only [updateRow_self, transvection, ha, hb, StdBasisMatrix.apply_of_ne, Pi.add_apply,
Ne.def, not_false_iff, Pi.smul_apply, and_false_iff, one_apply_ne, Algebra.id.smul_eq_mul,
- MulZeroClass.mul_zero, add_apply]
+ mul_zero, add_apply]
· simp only [updateRow_ne, transvection, ha, Ne.symm ha, StdBasisMatrix.apply_of_ne, add_zero,
Algebra.id.smul_eq_mul, Ne.def, not_false_iff, DMatrix.add_apply, Pi.smul_apply,
- MulZeroClass.mul_zero, false_and_iff, add_apply]
+ mul_zero, false_and_iff, add_apply]
#align matrix.update_row_eq_transvection Matrix.updateRow_eq_transvection
variable [Fintype n]
⬝
notation in favor of HMul
(#6487)
The main difficulty here is that *
has a slightly difference precedence to ⬝
. notably around smul
and neg
.
The other annoyance is that ↑U ⬝ A ⬝ ↑U⁻¹ : Matrix m m 𝔸
now has to be written U.val * A * (U⁻¹).val
in order to typecheck.
A downside of this change to consider: if you have a goal of A * (B * C) = (A * B) * C
, mul_assoc
now gives the illusion of matching, when in fact Matrix.mul_assoc
is needed. Previously the distinct symbol made it easy to avoid this mistake.
On the flipside, there is now no need to rewrite by Matrix.mul_eq_mul
all the time (indeed, the lemma is now removed).
@@ -23,7 +23,7 @@ algorithms operating on rows and columns.
Transvections are a special case of *elementary matrices* (according to most references, these also
contain the matrices exchanging rows, and the matrices multiplying a row by a constant).
-We show that, over a field, any matrix can be written as `L ⬝ D ⬝ L'`, where `L` and `L'` are
+We show that, over a field, any matrix can be written as `L * D * L'`, where `L` and `L'` are
products of transvections and `D` is diagonal. In other words, one can reduce a matrix to diagonal
form by operations on its rows and columns, a variant of Gauss' pivot algorithm.
@@ -35,7 +35,7 @@ form by operations on its rows and columns, a variant of Gauss' pivot algorithm.
arguments.
* `exists_list_transvec_mul_diagonal_mul_list_transvec` states that any matrix `M` over a field can
- be written in the form `t_1 ⬝ ... ⬝ t_k ⬝ D ⬝ t'_1 ⬝ ... ⬝ t'_l`, where `D` is diagonal and
+ be written in the form `t_1 * ... * t_k * D * t'_1 * ... * t'_l`, where `D` is diagonal and
the `t_i`, `t'_j` are transvections.
* `diagonal_transvection_induction` shows that a property which is true for diagonal matrices and
@@ -78,7 +78,7 @@ section Transvection
variable {R n} (i j : n)
/-- The transvection matrix `Transvection i j c` is equal to the identity plus `c` at position
-`(i, j)`. Multiplying by it on the left (as in `Transvection i j c ⬝ M`) corresponds to adding
+`(i, j)`. Multiplying by it on the left (as in `Transvection i j c * M`) corresponds to adding
`c` times the `j`-th line of `M` to its `i`-th line. Multiplying by it on the right corresponds
to adding `c` times the `i`-th column to the `j`-th column. -/
def transvection (c : R) : Matrix n n R :=
@@ -112,30 +112,30 @@ theorem updateRow_eq_transvection [Finite n] (c : R) :
variable [Fintype n]
theorem transvection_mul_transvection_same (h : i ≠ j) (c d : R) :
- transvection i j c ⬝ transvection i j d = transvection i j (c + d) := by
+ transvection i j c * transvection i j d = transvection i j (c + d) := by
simp [transvection, Matrix.add_mul, Matrix.mul_add, h, h.symm, add_smul, add_assoc,
stdBasisMatrix_add]
#align matrix.transvection_mul_transvection_same Matrix.transvection_mul_transvection_same
@[simp]
theorem transvection_mul_apply_same (b : n) (c : R) (M : Matrix n n R) :
- (transvection i j c ⬝ M) i b = M i b + c * M j b := by simp [transvection, Matrix.add_mul]
+ (transvection i j c * M) i b = M i b + c * M j b := by simp [transvection, Matrix.add_mul]
#align matrix.transvection_mul_apply_same Matrix.transvection_mul_apply_same
@[simp]
theorem mul_transvection_apply_same (a : n) (c : R) (M : Matrix n n R) :
- (M ⬝ transvection i j c) a j = M a j + c * M a i := by
+ (M * transvection i j c) a j = M a j + c * M a i := by
simp [transvection, Matrix.mul_add, mul_comm]
#align matrix.mul_transvection_apply_same Matrix.mul_transvection_apply_same
@[simp]
theorem transvection_mul_apply_of_ne (a b : n) (ha : a ≠ i) (c : R) (M : Matrix n n R) :
- (transvection i j c ⬝ M) a b = M a b := by simp [transvection, Matrix.add_mul, ha]
+ (transvection i j c * M) a b = M a b := by simp [transvection, Matrix.add_mul, ha]
#align matrix.transvection_mul_apply_of_ne Matrix.transvection_mul_apply_of_ne
@[simp]
theorem mul_transvection_apply_of_ne (a b : n) (hb : b ≠ j) (c : R) (M : Matrix n n R) :
- (M ⬝ transvection i j c) a b = M a b := by simp [transvection, Matrix.mul_add, hb]
+ (M * transvection i j c) a b = M a b := by simp [transvection, Matrix.mul_add, hb]
#align matrix.mul_transvection_apply_of_ne Matrix.mul_transvection_apply_of_ne
@[simp]
@@ -203,34 +203,34 @@ section
variable [Fintype n]
-theorem inv_mul (t : TransvectionStruct n R) : t.inv.toMatrix ⬝ t.toMatrix = 1 := by
+theorem inv_mul (t : TransvectionStruct n R) : t.inv.toMatrix * t.toMatrix = 1 := by
rcases t with ⟨_, _, t_hij⟩
simp [toMatrix, transvection_mul_transvection_same, t_hij]
#align matrix.transvection_struct.inv_mul Matrix.TransvectionStruct.inv_mul
-theorem mul_inv (t : TransvectionStruct n R) : t.toMatrix ⬝ t.inv.toMatrix = 1 := by
+theorem mul_inv (t : TransvectionStruct n R) : t.toMatrix * t.inv.toMatrix = 1 := by
rcases t with ⟨_, _, t_hij⟩
simp [toMatrix, transvection_mul_transvection_same, t_hij]
#align matrix.transvection_struct.mul_inv Matrix.TransvectionStruct.mul_inv
theorem reverse_inv_prod_mul_prod (L : List (TransvectionStruct n R)) :
- (L.reverse.map (toMatrix ∘ TransvectionStruct.inv)).prod ⬝ (L.map toMatrix).prod = 1 := by
+ (L.reverse.map (toMatrix ∘ TransvectionStruct.inv)).prod * (L.map toMatrix).prod = 1 := by
induction' L with t L IH
· simp
· suffices
- (L.reverse.map (toMatrix ∘ TransvectionStruct.inv)).prod ⬝ (t.inv.toMatrix ⬝ t.toMatrix) ⬝
+ (L.reverse.map (toMatrix ∘ TransvectionStruct.inv)).prod * (t.inv.toMatrix * t.toMatrix) *
(L.map toMatrix).prod = 1
by simpa [Matrix.mul_assoc]
simpa [inv_mul] using IH
#align matrix.transvection_struct.reverse_inv_prod_mul_prod Matrix.TransvectionStruct.reverse_inv_prod_mul_prod
theorem prod_mul_reverse_inv_prod (L : List (TransvectionStruct n R)) :
- (L.map toMatrix).prod ⬝ (L.reverse.map (toMatrix ∘ TransvectionStruct.inv)).prod = 1 := by
+ (L.map toMatrix).prod * (L.reverse.map (toMatrix ∘ TransvectionStruct.inv)).prod = 1 := by
induction' L with t L IH
· simp
· suffices
- t.toMatrix ⬝
- ((L.map toMatrix).prod ⬝ (L.reverse.map (toMatrix ∘ TransvectionStruct.inv)).prod) ⬝
+ t.toMatrix *
+ ((L.map toMatrix).prod * (L.reverse.map (toMatrix ∘ TransvectionStruct.inv)).prod) *
t.inv.toMatrix = 1
by simpa [Matrix.mul_assoc]
simp_rw [IH, Matrix.mul_one, t.mul_inv]
@@ -263,8 +263,8 @@ theorem toMatrix_sumInl (t : TransvectionStruct n R) :
@[simp]
theorem sumInl_toMatrix_prod_mul [Fintype n] [Fintype p] (M : Matrix n n R)
(L : List (TransvectionStruct n R)) (N : Matrix p p R) :
- (L.map (toMatrix ∘ sumInl p)).prod ⬝ fromBlocks M 0 0 N =
- fromBlocks ((L.map toMatrix).prod ⬝ M) 0 0 N := by
+ (L.map (toMatrix ∘ sumInl p)).prod * fromBlocks M 0 0 N =
+ fromBlocks ((L.map toMatrix).prod * M) 0 0 N := by
induction' L with t L IH
· simp
· simp [Matrix.mul_assoc, IH, toMatrix_sumInl, fromBlocks_multiply]
@@ -273,8 +273,8 @@ theorem sumInl_toMatrix_prod_mul [Fintype n] [Fintype p] (M : Matrix n n R)
@[simp]
theorem mul_sumInl_toMatrix_prod [Fintype n] [Fintype p] (M : Matrix n n R)
(L : List (TransvectionStruct n R)) (N : Matrix p p R) :
- fromBlocks M 0 0 N ⬝ (L.map (toMatrix ∘ sumInl p)).prod =
- fromBlocks (M ⬝ (L.map toMatrix).prod) 0 0 N := by
+ fromBlocks M 0 0 N * (L.map (toMatrix ∘ sumInl p)).prod =
+ fromBlocks (M * (L.map toMatrix).prod) 0 0 N := by
induction' L with t L IH generalizing M N
· simp
· simp [IH, toMatrix_sumInl, fromBlocks_multiply]
@@ -307,7 +307,7 @@ theorem toMatrix_reindexEquiv_prod (e : n ≃ p) (L : List (TransvectionStruct n
(L.map (toMatrix ∘ reindexEquiv e)).prod = reindexAlgEquiv R e (L.map toMatrix).prod := by
induction' L with t L IH
· simp
- · simp only [toMatrix_reindexEquiv, IH, Function.comp_apply, List.prod_cons, mul_eq_mul,
+ · simp only [toMatrix_reindexEquiv, IH, Function.comp_apply, List.prod_cons,
reindexAlgEquiv_apply, List.map]
exact (reindexAlgEquiv_mul _ _ _ _).symm
#align matrix.transvection_struct.to_matrix_reindex_equiv_prod Matrix.TransvectionStruct.toMatrix_reindexEquiv_prod
@@ -354,7 +354,7 @@ def listTransvecRow : List (Matrix (Sum (Fin r) Unit) (Sum (Fin r) Unit) 𝕜) :
/-- Multiplying by some of the matrices in `listTransvecCol M` does not change the last row. -/
theorem listTransvecCol_mul_last_row_drop (i : Sum (Fin r) Unit) {k : ℕ} (hk : k ≤ r) :
- (((listTransvecCol M).drop k).prod ⬝ M) (inr unit) i = M (inr unit) i := by
+ (((listTransvecCol M).drop k).prod * M) (inr unit) i = M (inr unit) i := by
-- porting note: `apply` didn't work anymore, because of the implicit arguments
refine' Nat.decreasingInduction' _ hk _
· intro n hn _ IH
@@ -368,18 +368,18 @@ theorem listTransvecCol_mul_last_row_drop (i : Sum (Fin r) Unit) {k : ℕ} (hk :
/-- Multiplying by all the matrices in `listTransvecCol M` does not change the last row. -/
theorem listTransvecCol_mul_last_row (i : Sum (Fin r) Unit) :
- ((listTransvecCol M).prod ⬝ M) (inr unit) i = M (inr unit) i := by
+ ((listTransvecCol M).prod * M) (inr unit) i = M (inr unit) i := by
simpa using listTransvecCol_mul_last_row_drop M i (zero_le _)
#align matrix.pivot.list_transvec_col_mul_last_row Matrix.Pivot.listTransvecCol_mul_last_row
/-- Multiplying by all the matrices in `listTransvecCol M` kills all the coefficients in the
last column but the last one. -/
theorem listTransvecCol_mul_last_col (hM : M (inr unit) (inr unit) ≠ 0) (i : Fin r) :
- ((listTransvecCol M).prod ⬝ M) (inl i) (inr unit) = 0 := by
+ ((listTransvecCol M).prod * M) (inl i) (inr unit) = 0 := by
suffices H :
∀ k : ℕ,
k ≤ r →
- (((listTransvecCol M).drop k).prod ⬝ M) (inl i) (inr unit) =
+ (((listTransvecCol M).drop k).prod * M) (inl i) (inr unit) =
if k ≤ i then 0 else M (inl i) (inr unit)
· simpa only [List.drop, _root_.zero_le, ite_true] using H 0 (zero_le _)
intro k hk
@@ -394,7 +394,7 @@ theorem listTransvecCol_mul_last_col (hM : M (inr unit) (inr unit) ≠ 0) (i : F
(listTransvecCol M).get ⟨n, hn'⟩ =
transvection (inl n') (inr unit) (-M (inl n') (inr unit) / M (inr unit) (inr unit)) :=
by simp [listTransvecCol]
- simp only [Matrix.mul_assoc, A, Matrix.mul_eq_mul, List.prod_cons]
+ simp only [Matrix.mul_assoc, A, List.prod_cons]
by_cases h : n' = i
· have hni : n = i := by
cases i
@@ -422,7 +422,7 @@ theorem listTransvecCol_mul_last_col (hM : M (inr unit) (inr unit) ≠ 0) (i : F
/-- Multiplying by some of the matrices in `listTransvecRow M` does not change the last column. -/
theorem mul_listTransvecRow_last_col_take (i : Sum (Fin r) Unit) {k : ℕ} (hk : k ≤ r) :
- (M ⬝ ((listTransvecRow M).take k).prod) i (inr unit) = M i (inr unit) := by
+ (M * ((listTransvecRow M).take k).prod) i (inr unit) = M i (inr unit) := by
induction' k with k IH
· simp only [Matrix.mul_one, List.take_zero, List.prod_nil, List.take, Matrix.mul_one]
· have hkr : k < r := hk
@@ -433,14 +433,14 @@ theorem mul_listTransvecRow_last_col_take (i : Sum (Fin r) Unit) {k : ℕ} (hk :
(-M (inr Unit.unit) (inl k') / M (inr Unit.unit) (inr Unit.unit))) := by
simp only [listTransvecRow, List.ofFnNthVal, hkr, dif_pos, List.get?_ofFn]
simp only [List.take_succ, ← Matrix.mul_assoc, this, List.prod_append, Matrix.mul_one,
- Matrix.mul_eq_mul, List.prod_cons, List.prod_nil, Option.to_list_some]
+ List.prod_cons, List.prod_nil, Option.to_list_some]
rw [mul_transvection_apply_of_ne, IH hkr.le]
simp only [Ne.def, not_false_iff]
#align matrix.pivot.mul_list_transvec_row_last_col_take Matrix.Pivot.mul_listTransvecRow_last_col_take
/-- Multiplying by all the matrices in `listTransvecRow M` does not change the last column. -/
theorem mul_listTransvecRow_last_col (i : Sum (Fin r) Unit) :
- (M ⬝ (listTransvecRow M).prod) i (inr unit) = M i (inr unit) := by
+ (M * (listTransvecRow M).prod) i (inr unit) = M i (inr unit) := by
have A : (listTransvecRow M).length = r := by simp [listTransvecRow]
rw [← List.take_length (listTransvecRow M), A]
simpa using mul_listTransvecRow_last_col_take M i le_rfl
@@ -449,11 +449,11 @@ theorem mul_listTransvecRow_last_col (i : Sum (Fin r) Unit) :
/-- Multiplying by all the matrices in `listTransvecRow M` kills all the coefficients in the
last row but the last one. -/
theorem mul_listTransvecRow_last_row (hM : M (inr unit) (inr unit) ≠ 0) (i : Fin r) :
- (M ⬝ (listTransvecRow M).prod) (inr unit) (inl i) = 0 := by
+ (M * (listTransvecRow M).prod) (inr unit) (inl i) = 0 := by
suffices H :
∀ k : ℕ,
k ≤ r →
- (M ⬝ ((listTransvecRow M).take k).prod) (inr unit) (inl i) =
+ (M * ((listTransvecRow M).take k).prod) (inr unit) (inl i) =
if k ≤ i then M (inr unit) (inl i) else 0
· have A : (listTransvecRow M).length = r := by simp [listTransvecRow]
rw [← List.take_length (listTransvecRow M), A]
@@ -470,7 +470,7 @@ theorem mul_listTransvecRow_last_row (hM : M (inr unit) (inr unit) ≠ 0) (i : F
(-M (inr unit) (inl n') / M (inr unit) (inr unit))) := by
simp only [listTransvecRow, List.ofFnNthVal, hnr, dif_pos, List.get?_ofFn]
simp only [List.take_succ, A, ← Matrix.mul_assoc, List.prod_append, Matrix.mul_one,
- Matrix.mul_eq_mul, List.prod_cons, List.prod_nil, Option.to_list_some]
+ List.prod_cons, List.prod_nil, Option.to_list_some]
by_cases h : n' = i
· have hni : n = i := by
cases i
@@ -496,8 +496,8 @@ theorem mul_listTransvecRow_last_row (hM : M (inr unit) (inr unit) ≠ 0) (i : F
all the coefficients in the last row but the last one. -/
theorem listTransvecCol_mul_mul_listTransvecRow_last_col (hM : M (inr unit) (inr unit) ≠ 0)
(i : Fin r) :
- ((listTransvecCol M).prod ⬝ M ⬝ (listTransvecRow M).prod) (inr unit) (inl i) = 0 := by
- have : listTransvecRow M = listTransvecRow ((listTransvecCol M).prod ⬝ M) := by
+ ((listTransvecCol M).prod * M * (listTransvecRow M).prod) (inr unit) (inl i) = 0 := by
+ have : listTransvecRow M = listTransvecRow ((listTransvecCol M).prod * M) := by
simp [listTransvecRow, listTransvecCol_mul_last_row]
rw [this]
apply mul_listTransvecRow_last_row
@@ -508,8 +508,8 @@ theorem listTransvecCol_mul_mul_listTransvecRow_last_col (hM : M (inr unit) (inr
all the coefficients in the last column but the last one. -/
theorem listTransvecCol_mul_mul_listTransvecRow_last_row (hM : M (inr unit) (inr unit) ≠ 0)
(i : Fin r) :
- ((listTransvecCol M).prod ⬝ M ⬝ (listTransvecRow M).prod) (inl i) (inr unit) = 0 := by
- have : listTransvecCol M = listTransvecCol (M ⬝ (listTransvecRow M).prod) := by
+ ((listTransvecCol M).prod * M * (listTransvecRow M).prod) (inl i) (inr unit) = 0 := by
+ have : listTransvecCol M = listTransvecCol (M * (listTransvecRow M).prod) := by
simp [listTransvecCol, mul_listTransvecRow_last_col]
rw [this, Matrix.mul_assoc]
apply listTransvecCol_mul_last_col
@@ -520,7 +520,7 @@ theorem listTransvecCol_mul_mul_listTransvecRow_last_row (hM : M (inr unit) (inr
the matrix in block-diagonal form. -/
theorem isTwoBlockDiagonal_listTransvecCol_mul_mul_listTransvecRow
(hM : M (inr unit) (inr unit) ≠ 0) :
- IsTwoBlockDiagonal ((listTransvecCol M).prod ⬝ M ⬝ (listTransvecRow M).prod) := by
+ IsTwoBlockDiagonal ((listTransvecCol M).prod * M * (listTransvecRow M).prod) := by
constructor
· ext i j
have : j = unit := by simp only [eq_iff_true_of_subsingleton]
@@ -534,7 +534,7 @@ theorem isTwoBlockDiagonal_listTransvecCol_mul_mul_listTransvecRow
on the right makes a matrix block-diagonal, when the last coefficient is nonzero. -/
theorem exists_isTwoBlockDiagonal_of_ne_zero (hM : M (inr unit) (inr unit) ≠ 0) :
∃ L L' : List (TransvectionStruct (Sum (Fin r) Unit) 𝕜),
- IsTwoBlockDiagonal ((L.map toMatrix).prod ⬝ M ⬝ (L'.map toMatrix).prod) := by
+ IsTwoBlockDiagonal ((L.map toMatrix).prod * M * (L'.map toMatrix).prod) := by
let L : List (TransvectionStruct (Sum (Fin r) Unit) 𝕜) :=
List.ofFn fun i : Fin r =>
⟨inl i, inr unit, by simp, -M (inl i) (inr unit) / M (inr unit) (inr unit)⟩
@@ -553,7 +553,7 @@ on the right makes a matrix block-diagonal. -/
theorem exists_isTwoBlockDiagonal_list_transvec_mul_mul_list_transvec
(M : Matrix (Sum (Fin r) Unit) (Sum (Fin r) Unit) 𝕜) :
∃ L L' : List (TransvectionStruct (Sum (Fin r) Unit) 𝕜),
- IsTwoBlockDiagonal ((L.map toMatrix).prod ⬝ M ⬝ (L'.map toMatrix).prod) := by
+ IsTwoBlockDiagonal ((L.map toMatrix).prod * M * (L'.map toMatrix).prod) := by
by_cases H : IsTwoBlockDiagonal M
· refine' ⟨List.nil, List.nil, by simpa using H⟩
-- we have already proved this when the last coefficient is nonzero
@@ -573,19 +573,19 @@ theorem exists_isTwoBlockDiagonal_list_transvec_mul_mul_list_transvec
rintro ⟨⟩ j
exact (H j).2
rcases this with ⟨i, h | h⟩
- · let M' := transvection (inr Unit.unit) (inl i) 1 ⬝ M
+ · let M' := transvection (inr Unit.unit) (inl i) 1 * M
have hM' : M' (inr unit) (inr unit) ≠ 0 := by simpa [hM]
rcases exists_isTwoBlockDiagonal_of_ne_zero M' hM' with ⟨L, L', hLL'⟩
rw [Matrix.mul_assoc] at hLL'
refine' ⟨L ++ [⟨inr unit, inl i, by simp, 1⟩], L', _⟩
simp only [List.map_append, List.prod_append, Matrix.mul_one, toMatrix_mk, List.prod_cons,
- List.prod_nil, mul_eq_mul, List.map, Matrix.mul_assoc (L.map toMatrix).prod]
+ List.prod_nil, List.map, Matrix.mul_assoc (L.map toMatrix).prod]
exact hLL'
- · let M' := M ⬝ transvection (inl i) (inr unit) 1
+ · let M' := M * transvection (inl i) (inr unit) 1
have hM' : M' (inr unit) (inr unit) ≠ 0 := by simpa [hM]
rcases exists_isTwoBlockDiagonal_of_ne_zero M' hM' with ⟨L, L', hLL'⟩
refine' ⟨L, ⟨inl i, inr unit, by simp, 1⟩::L', _⟩
- simp only [← Matrix.mul_assoc, toMatrix_mk, List.prod_cons, mul_eq_mul, List.map]
+ simp only [← Matrix.mul_assoc, toMatrix_mk, List.prod_cons, List.map]
rw [Matrix.mul_assoc (L.map toMatrix).prod]
exact hLL'
#align matrix.pivot.exists_is_two_block_diagonal_list_transvec_mul_mul_list_transvec Matrix.Pivot.exists_isTwoBlockDiagonal_list_transvec_mul_mul_list_transvec
@@ -596,19 +596,19 @@ theorem exists_list_transvec_mul_mul_list_transvec_eq_diagonal_induction
(IH :
∀ M : Matrix (Fin r) (Fin r) 𝕜,
∃ (L₀ L₀' : List (TransvectionStruct (Fin r) 𝕜)) (D₀ : Fin r → 𝕜),
- (L₀.map toMatrix).prod ⬝ M ⬝ (L₀'.map toMatrix).prod = diagonal D₀)
+ (L₀.map toMatrix).prod * M * (L₀'.map toMatrix).prod = diagonal D₀)
(M : Matrix (Sum (Fin r) Unit) (Sum (Fin r) Unit) 𝕜) :
∃ (L L' : List (TransvectionStruct (Sum (Fin r) Unit) 𝕜)) (D : Sum (Fin r) Unit → 𝕜),
- (L.map toMatrix).prod ⬝ M ⬝ (L'.map toMatrix).prod = diagonal D := by
+ (L.map toMatrix).prod * M * (L'.map toMatrix).prod = diagonal D := by
rcases exists_isTwoBlockDiagonal_list_transvec_mul_mul_list_transvec M with ⟨L₁, L₁', hM⟩
- let M' := (L₁.map toMatrix).prod ⬝ M ⬝ (L₁'.map toMatrix).prod
+ let M' := (L₁.map toMatrix).prod * M * (L₁'.map toMatrix).prod
let M'' := toBlocks₁₁ M'
rcases IH M'' with ⟨L₀, L₀', D₀, h₀⟩
set c := M' (inr unit) (inr unit)
refine'
⟨L₀.map (sumInl Unit) ++ L₁, L₁' ++ L₀'.map (sumInl Unit),
Sum.elim D₀ fun _ => M' (inr unit) (inr unit), _⟩
- suffices (L₀.map (toMatrix ∘ sumInl Unit)).prod ⬝ M' ⬝ (L₀'.map (toMatrix ∘ sumInl Unit)).prod =
+ suffices (L₀.map (toMatrix ∘ sumInl Unit)).prod * M' * (L₀'.map (toMatrix ∘ sumInl Unit)).prod =
diagonal (Sum.elim D₀ fun _ => c) by
simpa [Matrix.mul_assoc]
have : M' = fromBlocks M'' 0 0 (diagonal fun _ => c) := by
@@ -626,10 +626,10 @@ theorem reindex_exists_list_transvec_mul_mul_list_transvec_eq_diagonal (M : Matr
(e : p ≃ n)
(H :
∃ (L L' : List (TransvectionStruct n 𝕜)) (D : n → 𝕜),
- (L.map toMatrix).prod ⬝ Matrix.reindexAlgEquiv 𝕜 e M ⬝ (L'.map toMatrix).prod =
+ (L.map toMatrix).prod * Matrix.reindexAlgEquiv 𝕜 e M * (L'.map toMatrix).prod =
diagonal D) :
∃ (L L' : List (TransvectionStruct p 𝕜)) (D : p → 𝕜),
- (L.map toMatrix).prod ⬝ M ⬝ (L'.map toMatrix).prod = diagonal D := by
+ (L.map toMatrix).prod * M * (L'.map toMatrix).prod = diagonal D := by
rcases H with ⟨L₀, L₀', D₀, h₀⟩
refine' ⟨L₀.map (reindexEquiv e.symm), L₀'.map (reindexEquiv e.symm), D₀ ∘ e, _⟩
have : M = reindexAlgEquiv 𝕜 e.symm (reindexAlgEquiv 𝕜 e M) := by
@@ -648,7 +648,7 @@ from this one and reindexing). -/
theorem exists_list_transvec_mul_mul_list_transvec_eq_diagonal_aux (n : Type) [Fintype n]
[DecidableEq n] (M : Matrix n n 𝕜) :
∃ (L L' : List (TransvectionStruct n 𝕜)) (D : n → 𝕜),
- (L.map toMatrix).prod ⬝ M ⬝ (L'.map toMatrix).prod = diagonal D := by
+ (L.map toMatrix).prod * M * (L'.map toMatrix).prod = diagonal D := by
induction' hn : Fintype.card n with r IH generalizing n M
· refine' ⟨List.nil, List.nil, fun _ => 1, _⟩
ext i j
@@ -668,7 +668,7 @@ theorem exists_list_transvec_mul_mul_list_transvec_eq_diagonal_aux (n : Type) [F
/-- Any matrix can be reduced to diagonal form by elementary operations. -/
theorem exists_list_transvec_mul_mul_list_transvec_eq_diagonal (M : Matrix n n 𝕜) :
∃ (L L' : List (TransvectionStruct n 𝕜)) (D : n → 𝕜),
- (L.map toMatrix).prod ⬝ M ⬝ (L'.map toMatrix).prod = diagonal D := by
+ (L.map toMatrix).prod * M * (L'.map toMatrix).prod = diagonal D := by
have e : n ≃ Fin (Fintype.card n) := Fintype.equivOfCardEq (by simp)
apply reindex_exists_list_transvec_mul_mul_list_transvec_eq_diagonal M e
apply exists_list_transvec_mul_mul_list_transvec_eq_diagonal_aux
@@ -678,13 +678,13 @@ theorem exists_list_transvec_mul_mul_list_transvec_eq_diagonal (M : Matrix n n
transvections.-/
theorem exists_list_transvec_mul_diagonal_mul_list_transvec (M : Matrix n n 𝕜) :
∃ (L L' : List (TransvectionStruct n 𝕜)) (D : n → 𝕜),
- M = (L.map toMatrix).prod ⬝ diagonal D ⬝ (L'.map toMatrix).prod := by
+ M = (L.map toMatrix).prod * diagonal D * (L'.map toMatrix).prod := by
rcases exists_list_transvec_mul_mul_list_transvec_eq_diagonal M with ⟨L, L', D, h⟩
refine' ⟨L.reverse.map TransvectionStruct.inv, L'.reverse.map TransvectionStruct.inv, D, _⟩
suffices
M =
- (L.reverse.map (toMatrix ∘ TransvectionStruct.inv)).prod ⬝ (L.map toMatrix).prod ⬝ M ⬝
- ((L'.map toMatrix).prod ⬝ (L'.reverse.map (toMatrix ∘ TransvectionStruct.inv)).prod)
+ (L.reverse.map (toMatrix ∘ TransvectionStruct.inv)).prod * (L.map toMatrix).prod * M *
+ ((L'.map toMatrix).prod * (L'.reverse.map (toMatrix ∘ TransvectionStruct.inv)).prod)
by simpa [← h, Matrix.mul_assoc]
rw [reverse_inv_prod_mul_prod, prod_mul_reverse_inv_prod, Matrix.one_mul, Matrix.mul_one]
#align matrix.pivot.exists_list_transvec_mul_diagonal_mul_list_transvec Matrix.Pivot.exists_list_transvec_mul_diagonal_mul_list_transvec
@@ -704,13 +704,13 @@ assume that the diagonal matrices we consider have the same determinant as `M`.
obtain similar principles for `SLₙ` or `GLₙ`. -/
theorem diagonal_transvection_induction (P : Matrix n n 𝕜 → Prop) (M : Matrix n n 𝕜)
(hdiag : ∀ D : n → 𝕜, det (diagonal D) = det M → P (diagonal D))
- (htransvec : ∀ t : TransvectionStruct n 𝕜, P t.toMatrix) (hmul : ∀ A B, P A → P B → P (A ⬝ B)) :
+ (htransvec : ∀ t : TransvectionStruct n 𝕜, P t.toMatrix) (hmul : ∀ A B, P A → P B → P (A * B)) :
P M := by
rcases exists_list_transvec_mul_diagonal_mul_list_transvec M with ⟨L, L', D, h⟩
have PD : P (diagonal D) := hdiag D (by simp [h])
suffices H :
∀ (L₁ L₂ : List (TransvectionStruct n 𝕜)) (E : Matrix n n 𝕜),
- P E → P ((L₁.map toMatrix).prod ⬝ E ⬝ (L₂.map toMatrix).prod)
+ P E → P ((L₁.map toMatrix).prod * E * (L₂.map toMatrix).prod)
· rw [h]
apply H L L'
exact PD
@@ -719,10 +719,10 @@ theorem diagonal_transvection_induction (P : Matrix n n 𝕜 → Prop) (M : Matr
· simp only [Matrix.one_mul, List.prod_nil, List.map]
induction' L₂ with t L₂ IH generalizing E
· simpa
- · simp only [← Matrix.mul_assoc, List.prod_cons, mul_eq_mul, List.map]
+ · simp only [← Matrix.mul_assoc, List.prod_cons, List.map]
apply IH
exact hmul _ _ PE (htransvec _)
- · simp only [Matrix.mul_assoc, List.prod_cons, mul_eq_mul, List.map] at IH ⊢
+ · simp only [Matrix.mul_assoc, List.prod_cons, List.map] at IH ⊢
exact hmul _ _ (htransvec _) IH
#align matrix.diagonal_transvection_induction Matrix.diagonal_transvection_induction
@@ -733,7 +733,7 @@ invertible matrices are generated by invertible diagonal matrices and transvecti
theorem diagonal_transvection_induction_of_det_ne_zero (P : Matrix n n 𝕜 → Prop) (M : Matrix n n 𝕜)
(hMdet : det M ≠ 0) (hdiag : ∀ D : n → 𝕜, det (diagonal D) ≠ 0 → P (diagonal D))
(htransvec : ∀ t : TransvectionStruct n 𝕜, P t.toMatrix)
- (hmul : ∀ A B, det A ≠ 0 → det B ≠ 0 → P A → P B → P (A ⬝ B)) : P M := by
+ (hmul : ∀ A B, det A ≠ 0 → det B ≠ 0 → P A → P B → P (A * B)) : P M := by
let Q : Matrix n n 𝕜 → Prop := fun N => det N ≠ 0 ∧ P N
have : Q M := by
apply diagonal_transvection_induction Q M
Type _
and Sort _
(#6499)
We remove all possible occurences of Type _
and Sort _
in favor of Type*
and Sort*
.
This has nice performance benefits.
@@ -67,7 +67,7 @@ namespace Matrix
open Matrix
-variable (n p : Type _) (R : Type u₂) {𝕜 : Type _} [Field 𝕜]
+variable (n p : Type*) (R : Type u₂) {𝕜 : Type*} [Field 𝕜]
variable [DecidableEq n] [DecidableEq p]
@@ -16,7 +16,7 @@ import Mathlib.Tactic.FieldSimp
Transvections are matrices of the form `1 + StdBasisMatrix i j c`, where `StdBasisMatrix i j c`
is the basic matrix with a `c` at position `(i, j)`. Multiplying by such a transvection on the left
-(resp. on the right) amounts to adding `c` times the `j`-th row to to the `i`-th row
+(resp. on the right) amounts to adding `c` times the `j`-th row to the `i`-th row
(resp `c` times the `i`-th column to the `j`-th column). Therefore, they are useful to present
algorithms operating on rows and columns.
@@ -2,11 +2,6 @@
Copyright (c) 2021 Sébastien Gouëzel. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Sébastien Gouëzel
-
-! This file was ported from Lean 3 source module linear_algebra.matrix.transvection
-! leanprover-community/mathlib commit 0e2aab2b0d521f060f62a14d2cf2e2c54e8491d6
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathlib.Data.Matrix.Basis
import Mathlib.Data.Matrix.DMatrix
@@ -14,6 +9,8 @@ import Mathlib.LinearAlgebra.Matrix.Determinant
import Mathlib.LinearAlgebra.Matrix.Reindex
import Mathlib.Tactic.FieldSimp
+#align_import linear_algebra.matrix.transvection from "leanprover-community/mathlib"@"0e2aab2b0d521f060f62a14d2cf2e2c54e8491d6"
+
/-!
# Transvections
at
and goals (#5387)
Changes are of the form
some_tactic at h⊢
-> some_tactic at h ⊢
some_tactic at h
-> some_tactic at h
@@ -565,7 +565,7 @@ theorem exists_isTwoBlockDiagonal_list_transvec_mul_mul_list_transvec
-- when the last coefficient is zero but there is a nonzero coefficient on the last row or the
-- last column, we will first put this nonzero coefficient in last position, and then argue as
-- above.
- push_neg at hM
+ push_neg at hM
simp only [not_and_or, IsTwoBlockDiagonal, toBlocks₁₂, toBlocks₂₁, ← Matrix.ext_iff] at H
have : ∃ i : Fin r, M (inl i) (inr unit) ≠ 0 ∨ M (inr unit) (inl i) ≠ 0 := by
cases' H with H H
@@ -725,7 +725,7 @@ theorem diagonal_transvection_induction (P : Matrix n n 𝕜 → Prop) (M : Matr
· simp only [← Matrix.mul_assoc, List.prod_cons, mul_eq_mul, List.map]
apply IH
exact hmul _ _ PE (htransvec _)
- · simp only [Matrix.mul_assoc, List.prod_cons, mul_eq_mul, List.map] at IH⊢
+ · simp only [Matrix.mul_assoc, List.prod_cons, mul_eq_mul, List.map] at IH ⊢
exact hmul _ _ (htransvec _) IH
#align matrix.diagonal_transvection_induction Matrix.diagonal_transvection_induction
ext
(#5258)
Co-authored-by: Xavier Roblot <46200072+xroblot@users.noreply.github.com> Co-authored-by: Joël Riou <joel.riou@universite-paris-saclay.fr> Co-authored-by: Riccardo Brasca <riccardo.brasca@gmail.com> Co-authored-by: Yury G. Kudryashov <urkud@urkud.name> Co-authored-by: Scott Morrison <scott.morrison@anu.edu.au> Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: Jeremy Tan Jie Rui <reddeloostw@gmail.com> Co-authored-by: Pol'tta / Miyahara Kō <pol_tta@outlook.jp> Co-authored-by: Jason Yuen <jason_yuen2007@hotmail.com> Co-authored-by: Mario Carneiro <di.gama@gmail.com> Co-authored-by: Jireh Loreaux <loreaujy@gmail.com> Co-authored-by: Ruben Van de Velde <65514131+Ruben-VandeVelde@users.noreply.github.com> Co-authored-by: Kyle Miller <kmill31415@gmail.com> Co-authored-by: Heather Macbeth <25316162+hrmacbeth@users.noreply.github.com> Co-authored-by: Jujian Zhang <jujian.zhang1998@outlook.com> Co-authored-by: Yaël Dillies <yael.dillies@gmail.com>
@@ -100,7 +100,7 @@ theorem updateRow_eq_transvection [Finite n] (c : R) :
updateRow (1 : Matrix n n R) i ((1 : Matrix n n R) i + c • (1 : Matrix n n R) j) =
transvection i j c := by
cases nonempty_fintype n
- ext (a b)
+ ext a b
by_cases ha : i = a; by_cases hb : j = b
· simp only [updateRow_self, transvection, ha, hb, Pi.add_apply, StdBasisMatrix.apply_same,
one_apply_eq, Pi.smul_apply, mul_one, Algebra.id.smul_eq_mul, add_apply]
@@ -255,7 +255,7 @@ def sumInl (t : TransvectionStruct n R) : TransvectionStruct (Sum n p) R where
theorem toMatrix_sumInl (t : TransvectionStruct n R) :
(t.sumInl p).toMatrix = fromBlocks t.toMatrix 0 0 1 := by
cases t
- ext (a b)
+ ext a b
cases' a with a a <;> cases' b with b b
· by_cases h : a = b <;> simp [TransvectionStruct.sumInl, transvection, h, stdBasisMatrix]
· simp [TransvectionStruct.sumInl, transvection]
@@ -299,7 +299,7 @@ variable [Fintype n] [Fintype p]
theorem toMatrix_reindexEquiv (e : n ≃ p) (t : TransvectionStruct n R) :
(t.reindexEquiv e).toMatrix = reindexAlgEquiv R e t.toMatrix := by
rcases t with ⟨t_i, t_j, _⟩
- ext (a b)
+ ext a b
simp only [reindexEquiv, transvection, mul_boole, Algebra.id.smul_eq_mul, toMatrix_mk,
submatrix_apply, reindex_apply, DMatrix.add_apply, Pi.smul_apply, reindexAlgEquiv_apply]
by_cases ha : e t_i = a <;> by_cases hb : e t_j = b <;> by_cases hab : a = b <;>
@@ -525,10 +525,10 @@ theorem isTwoBlockDiagonal_listTransvecCol_mul_mul_listTransvecRow
(hM : M (inr unit) (inr unit) ≠ 0) :
IsTwoBlockDiagonal ((listTransvecCol M).prod ⬝ M ⬝ (listTransvecRow M).prod) := by
constructor
- · ext (i j)
+ · ext i j
have : j = unit := by simp only [eq_iff_true_of_subsingleton]
simp [toBlocks₁₂, this, listTransvecCol_mul_mul_listTransvecRow_last_row M hM]
- · ext (i j)
+ · ext i j
have : i = unit := by simp only [eq_iff_true_of_subsingleton]
simp [toBlocks₂₁, this, listTransvecCol_mul_mul_listTransvecRow_last_col M hM]
#align matrix.pivot.is_two_block_diagonal_list_transvec_col_mul_mul_list_transvec_row Matrix.Pivot.isTwoBlockDiagonal_listTransvecCol_mul_mul_listTransvecRow
@@ -654,7 +654,7 @@ theorem exists_list_transvec_mul_mul_list_transvec_eq_diagonal_aux (n : Type) [F
(L.map toMatrix).prod ⬝ M ⬝ (L'.map toMatrix).prod = diagonal D := by
induction' hn : Fintype.card n with r IH generalizing n M
· refine' ⟨List.nil, List.nil, fun _ => 1, _⟩
- ext (i j)
+ ext i j
rw [Fintype.card_eq_zero_iff] at hn
exact hn.elim' i
· have e : n ≃ Sum (Fin r) Unit := by
@@ -598,10 +598,10 @@ diagonal form by elementary operations, then one deduces it for matrices over `F
theorem exists_list_transvec_mul_mul_list_transvec_eq_diagonal_induction
(IH :
∀ M : Matrix (Fin r) (Fin r) 𝕜,
- ∃ (L₀ L₀' : List (TransvectionStruct (Fin r) 𝕜))(D₀ : Fin r → 𝕜),
+ ∃ (L₀ L₀' : List (TransvectionStruct (Fin r) 𝕜)) (D₀ : Fin r → 𝕜),
(L₀.map toMatrix).prod ⬝ M ⬝ (L₀'.map toMatrix).prod = diagonal D₀)
(M : Matrix (Sum (Fin r) Unit) (Sum (Fin r) Unit) 𝕜) :
- ∃ (L L' : List (TransvectionStruct (Sum (Fin r) Unit) 𝕜))(D : Sum (Fin r) Unit → 𝕜),
+ ∃ (L L' : List (TransvectionStruct (Sum (Fin r) Unit) 𝕜)) (D : Sum (Fin r) Unit → 𝕜),
(L.map toMatrix).prod ⬝ M ⬝ (L'.map toMatrix).prod = diagonal D := by
rcases exists_isTwoBlockDiagonal_list_transvec_mul_mul_list_transvec M with ⟨L₁, L₁', hM⟩
let M' := (L₁.map toMatrix).prod ⬝ M ⬝ (L₁'.map toMatrix).prod
@@ -628,10 +628,10 @@ variable {n p} [Fintype n] [Fintype p]
theorem reindex_exists_list_transvec_mul_mul_list_transvec_eq_diagonal (M : Matrix p p 𝕜)
(e : p ≃ n)
(H :
- ∃ (L L' : List (TransvectionStruct n 𝕜))(D : n → 𝕜),
+ ∃ (L L' : List (TransvectionStruct n 𝕜)) (D : n → 𝕜),
(L.map toMatrix).prod ⬝ Matrix.reindexAlgEquiv 𝕜 e M ⬝ (L'.map toMatrix).prod =
diagonal D) :
- ∃ (L L' : List (TransvectionStruct p 𝕜))(D : p → 𝕜),
+ ∃ (L L' : List (TransvectionStruct p 𝕜)) (D : p → 𝕜),
(L.map toMatrix).prod ⬝ M ⬝ (L'.map toMatrix).prod = diagonal D := by
rcases H with ⟨L₀, L₀', D₀, h₀⟩
refine' ⟨L₀.map (reindexEquiv e.symm), L₀'.map (reindexEquiv e.symm), D₀ ∘ e, _⟩
@@ -650,7 +650,7 @@ See `exists_list_transvec_mul_mul_list_transvec_eq_diagonal` for the general ver
from this one and reindexing). -/
theorem exists_list_transvec_mul_mul_list_transvec_eq_diagonal_aux (n : Type) [Fintype n]
[DecidableEq n] (M : Matrix n n 𝕜) :
- ∃ (L L' : List (TransvectionStruct n 𝕜))(D : n → 𝕜),
+ ∃ (L L' : List (TransvectionStruct n 𝕜)) (D : n → 𝕜),
(L.map toMatrix).prod ⬝ M ⬝ (L'.map toMatrix).prod = diagonal D := by
induction' hn : Fintype.card n with r IH generalizing n M
· refine' ⟨List.nil, List.nil, fun _ => 1, _⟩
@@ -670,7 +670,7 @@ theorem exists_list_transvec_mul_mul_list_transvec_eq_diagonal_aux (n : Type) [F
/-- Any matrix can be reduced to diagonal form by elementary operations. -/
theorem exists_list_transvec_mul_mul_list_transvec_eq_diagonal (M : Matrix n n 𝕜) :
- ∃ (L L' : List (TransvectionStruct n 𝕜))(D : n → 𝕜),
+ ∃ (L L' : List (TransvectionStruct n 𝕜)) (D : n → 𝕜),
(L.map toMatrix).prod ⬝ M ⬝ (L'.map toMatrix).prod = diagonal D := by
have e : n ≃ Fin (Fintype.card n) := Fintype.equivOfCardEq (by simp)
apply reindex_exists_list_transvec_mul_mul_list_transvec_eq_diagonal M e
@@ -680,7 +680,7 @@ theorem exists_list_transvec_mul_mul_list_transvec_eq_diagonal (M : Matrix n n
/-- Any matrix can be written as the product of transvections, a diagonal matrix, and
transvections.-/
theorem exists_list_transvec_mul_diagonal_mul_list_transvec (M : Matrix n n 𝕜) :
- ∃ (L L' : List (TransvectionStruct n 𝕜))(D : n → 𝕜),
+ ∃ (L L' : List (TransvectionStruct n 𝕜)) (D : n → 𝕜),
M = (L.map toMatrix).prod ⬝ diagonal D ⬝ (L'.map toMatrix).prod := by
rcases exists_list_transvec_mul_mul_list_transvec_eq_diagonal M with ⟨L, L', D, h⟩
refine' ⟨L.reverse.map TransvectionStruct.inv, L'.reverse.map TransvectionStruct.inv, D, _⟩
@@ -615,7 +615,7 @@ theorem exists_list_transvec_mul_mul_list_transvec_eq_diagonal_induction
diagonal (Sum.elim D₀ fun _ => c) by
simpa [Matrix.mul_assoc]
have : M' = fromBlocks M'' 0 0 (diagonal fun _ => c) := by
- -- porting note: simplyfied proof, because `congr` didn't work anymore
+ -- porting note: simplified proof, because `congr` didn't work anymore
rw [← fromBlocks_toBlocks M', hM.1, hM.2]
rfl
rw [this]
by
s! (#3825)
This PR puts, with one exception, every single remaining by
that lies all by itself on its own line to the previous line, thus matching the current behaviour of start-port.sh
. The exception is when the by
begins the second or later argument to a tuple or anonymous constructor; see https://github.com/leanprover-community/mathlib4/pull/3825#discussion_r1186702599.
Essentially this is s/\n *by$/ by/g
, but with manual editing to satisfy the linter's max-100-char-line requirement. The Python style linter is also modified to catch these "isolated by
s".
@@ -611,11 +611,9 @@ theorem exists_list_transvec_mul_mul_list_transvec_eq_diagonal_induction
refine'
⟨L₀.map (sumInl Unit) ++ L₁, L₁' ++ L₀'.map (sumInl Unit),
Sum.elim D₀ fun _ => M' (inr unit) (inr unit), _⟩
- suffices
- (L₀.map (toMatrix ∘ sumInl Unit)).prod ⬝ M' ⬝ (L₀'.map (toMatrix ∘ sumInl Unit)).prod =
- diagonal (Sum.elim D₀ fun _ => c)
- by
- simpa [Matrix.mul_assoc]
+ suffices (L₀.map (toMatrix ∘ sumInl Unit)).prod ⬝ M' ⬝ (L₀'.map (toMatrix ∘ sumInl Unit)).prod =
+ diagonal (Sum.elim D₀ fun _ => c) by
+ simpa [Matrix.mul_assoc]
have : M' = fromBlocks M'' 0 0 (diagonal fun _ => c) := by
-- porting note: simplyfied proof, because `congr` didn't work anymore
rw [← fromBlocks_toBlocks M', hM.1, hM.2]
The unported dependencies are