linear_algebra.matrix.transvectionMathlib.LinearAlgebra.Matrix.Transvection

This file has been ported!

Changes since the initial port

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

Changes in mathlib3

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(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)

Changes in mathlib3port

mathlib3
mathlib3port
Diff
@@ -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
Diff
@@ -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
Diff
@@ -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"
 
Diff
@@ -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]
Diff
@@ -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
 
Diff
@@ -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 :=
Diff
@@ -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
 
Diff
@@ -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
Diff
@@ -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
 
Diff
@@ -71,7 +71,7 @@ universe u₁ u₂
 
 namespace Matrix
 
-open Matrix
+open scoped Matrix
 
 variable (n p : Type _) (R : Type u₂) {𝕜 : Type _} [Field 𝕜]
 
Diff
@@ -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
Diff
@@ -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⟩
Diff
@@ -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 𝕜)
Diff
@@ -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 𝕜)
Diff
@@ -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.-/
Diff
@@ -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
Diff
@@ -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
Diff
@@ -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]
Diff
@@ -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
Diff
@@ -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]

Changes in mathlib4

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

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

Diff
@@ -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]
chore(*): drop porting notes about List.nthLeList.get (#12203)
Diff
@@ -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)) :=
chore: classify porting notes referring to missing linters (#12098)

Reference the newly created issues #12094 and #12096, as well as the pre-existing #5171. Change all references to #10927 to #5171. Some of these changes were not labelled as "porting note"; change this for good measure.

Diff
@@ -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
style: replace '.-/' by '. -/' (#11938)

Purely automatic replacement. If this is in any way controversial; I'm happy to just close this PR.

Diff
@@ -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
chore: avoid Ne.def (adaptation for nightly-2024-03-27) (#11801)
Diff
@@ -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]
chore(*): remove empty lines between variable statements (#11418)

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)
Diff
@@ -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
chore: move Mathlib to v4.7.0-rc1 (#11162)

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>

Diff
@@ -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
style: homogenise porting notes (#11145)

Homogenises porting notes via capitalisation and addition of whitespace.

It makes the following changes:

  • converts "--porting note" into "-- Porting note";
  • converts "porting note" into "Porting note".
Diff
@@ -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]
chore: prepare Lean version bump with explicit simp (#10999)

Co-authored-by: Scott Morrison <scott.morrison@gmail.com>

Diff
@@ -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]
chore: classify removed @[nolint has_nonempty_instance] porting notes (#10929)

Classifies by adding issue number (#10927) to porting notes claiming removed @[nolint has_nonempty_instance].

Diff
@@ -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
chore: remove stream-of-consciousness uses of 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>

Diff
@@ -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
feat(LinearAlgebra/Matrix): scalar if commutes with every nontrivial transvection (#7815)

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>

Diff
@@ -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
chore: bump to v4.3.0-rc2 (#8366)

PR contents

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.

Lean PRs involved in this bump

In particular this includes adjustments for the Lean PRs

leanprover/lean4#2778

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).

leanprover/lean4#2722

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}).

leanprover/lean4#2783

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:

  • switching to using explicit lemmas that have the intended level of application
  • (config := { unfoldPartialApp := true }) in some places, to recover the old behaviour
  • Using @[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>

Diff
@@ -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]
chore: drop MulZeroClass. in mul_zero/zero_mul (#6682)

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

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

Diff
@@ -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]
refactor(Data/Matrix): Eliminate 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).

Diff
@@ -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
chore: banish Type _ and Sort _ (#6499)

We remove all possible occurences of Type _ and Sort _ in favor of Type* and Sort*.

This has nice performance benefits.

Diff
@@ -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]
 
chore: fix grammar mistakes (#6121)
Diff
@@ -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.
 
chore: script to replace headers with #align_import statements (#5979)

Open in Gitpod

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

Diff
@@ -2,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
 
chore: clean up spacing around 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
Diff
@@ -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
 
chore: remove superfluous parentheses in calls to 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>

Diff
@@ -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
chore: formatting issues (#4947)

Co-authored-by: Scott Morrison <scott.morrison@anu.edu.au> Co-authored-by: Parcly Taxel <reddeloostw@gmail.com>

Diff
@@ -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, _⟩
chore: fix many typos (#4967)

These are all doc fixes

Diff
@@ -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]
chore: bye-bye, solo bys! (#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 bys".

Diff
@@ -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]
feat: port LinearAlgebra.Matrix.Transvection (#3700)

Co-authored-by: Moritz Firsching <firsching@google.com> Co-authored-by: ChrisHughes24 <chrishughes24@gmail.com>

Dependencies 8 + 527

528 files ported (98.5%)
218218 lines ported (98.6%)
Show graph

The unported dependencies are