linear_algebra.matrix.nonsingular_inverseMathlib.LinearAlgebra.Matrix.NonsingularInverse

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)

(last sync)

refactor(data/matrix/invertible): more results about invertible matrices (#19204)

Many results about invertible apply directly to matrices simply by replacing * with matrix.mul.

This also adds some missing lemmas about invertibility of products.

Diff
@@ -3,6 +3,7 @@ Copyright (c) 2019 Tim Baanen. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Tim Baanen, Lu-Ming Zhang
 -/
+import data.matrix.invertible
 import linear_algebra.matrix.adjugate
 
 /-!
@@ -60,31 +61,6 @@ open equiv equiv.perm finset
 section invertible
 variables [fintype n] [decidable_eq n] [comm_ring α]
 
-/-- A copy of `inv_of_mul_self` using `⬝` not `*`. -/
-protected lemma inv_of_mul_self (A : matrix n n α) [invertible A] : ⅟A ⬝ A = 1 := inv_of_mul_self A
-
-/-- A copy of `mul_inv_of_self` using `⬝` not `*`. -/
-protected lemma mul_inv_of_self (A : matrix n n α) [invertible A] : A ⬝ ⅟A = 1 := mul_inv_of_self A
-
-/-- A copy of `inv_of_mul_self_assoc` using `⬝` not `*`. -/
-protected lemma inv_of_mul_self_assoc (A : matrix n n α) (B : matrix n m α) [invertible A] :
-  ⅟A ⬝ (A ⬝ B) = B :=
-by rw [←matrix.mul_assoc, matrix.inv_of_mul_self, matrix.one_mul]
-
-/-- A copy of `mul_inv_of_self_assoc` using `⬝` not `*`. -/
-protected lemma mul_inv_of_self_assoc (A : matrix n n α) (B : matrix n m α) [invertible A] :
-  A ⬝ (⅟A ⬝ B) = B :=
-by rw [←matrix.mul_assoc, matrix.mul_inv_of_self, matrix.one_mul]
-
-/-- A copy of `mul_inv_of_mul_self_cancel` using `⬝` not `*`. -/
-protected lemma mul_inv_of_mul_self_cancel (A : matrix m n α) (B : matrix n n α)
-  [invertible B] : A ⬝ ⅟B ⬝ B = A :=
-by rw [matrix.mul_assoc, matrix.inv_of_mul_self, matrix.mul_one]
-
-/-- A copy of `mul_mul_inv_of_self_cancel` using `⬝` not `*`. -/
-protected lemma mul_mul_inv_of_self_cancel (A : matrix m n α) (B : matrix n n α)
-  [invertible B] : A ⬝ B ⬝ ⅟B = A :=
-by rw [matrix.mul_assoc, matrix.mul_inv_of_self, matrix.mul_one]
 
 variables (A : matrix n n α) (B : matrix n n α)
 

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(first ported)

Changes in mathlib3port

mathlib3
mathlib3port
Diff
@@ -589,7 +589,7 @@ theorem inv_zero : (0 : Matrix n n α)⁻¹ = 0 :=
   cases' subsingleton_or_nontrivial α with ht ht
   · simp
   cases' (Fintype.card n).zero_le.eq_or_lt with hc hc
-  · rw [eq_comm, Fintype.card_eq_zero_iff] at hc 
+  · rw [eq_comm, Fintype.card_eq_zero_iff] at hc
     haveI := hc
     ext i
     exact (IsEmpty.false i).elim
Diff
@@ -3,8 +3,8 @@ Copyright (c) 2019 Tim Baanen. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Tim Baanen, Lu-Ming Zhang
 -/
-import Mathbin.Data.Matrix.Invertible
-import Mathbin.LinearAlgebra.Matrix.Adjugate
+import Data.Matrix.Invertible
+import LinearAlgebra.Matrix.Adjugate
 
 #align_import linear_algebra.matrix.nonsingular_inverse from "leanprover-community/mathlib"@"722b3b152ddd5e0cf21c0a29787c76596cb6b422"
 
Diff
@@ -77,10 +77,10 @@ variable (A : Matrix n n α) (B : Matrix n n α)
 def invertibleOfDetInvertible [Invertible A.det] : Invertible A
     where
   invOf := ⅟ A.det • A.adjugate
-  mul_invOf_self := by
-    rw [mul_smul_comm, Matrix.mul_eq_mul, mul_adjugate, smul_smul, invOf_mul_self, one_smul]
-  invOf_mul_self := by
-    rw [smul_mul_assoc, Matrix.mul_eq_mul, adjugate_mul, smul_smul, invOf_mul_self, one_smul]
+  hMul_invOf_self := by
+    rw [mul_smul_comm, Matrix.hMul_eq_hMul, mul_adjugate, smul_smul, invOf_mul_self, one_smul]
+  invOf_hMul_self := by
+    rw [smul_mul_assoc, Matrix.hMul_eq_hMul, adjugate_mul, smul_smul, invOf_mul_self, one_smul]
 #align matrix.invertible_of_det_invertible Matrix.invertibleOfDetInvertible
 -/
 
@@ -95,8 +95,8 @@ theorem invOf_eq [Invertible A.det] [Invertible A] : ⅟ A = ⅟ A.det • A.adj
 def detInvertibleOfLeftInverse (h : B ⬝ A = 1) : Invertible A.det
     where
   invOf := B.det
-  mul_invOf_self := by rw [mul_comm, ← det_mul, h, det_one]
-  invOf_mul_self := by rw [← det_mul, h, det_one]
+  hMul_invOf_self := by rw [mul_comm, ← det_mul, h, det_one]
+  invOf_hMul_self := by rw [← det_mul, h, det_one]
 #align matrix.det_invertible_of_left_inverse Matrix.detInvertibleOfLeftInverse
 -/
 
@@ -105,8 +105,8 @@ def detInvertibleOfLeftInverse (h : B ⬝ A = 1) : Invertible A.det
 def detInvertibleOfRightInverse (h : A ⬝ B = 1) : Invertible A.det
     where
   invOf := B.det
-  mul_invOf_self := by rw [← det_mul, h, det_one]
-  invOf_mul_self := by rw [mul_comm, ← det_mul, h, det_one]
+  hMul_invOf_self := by rw [← det_mul, h, det_one]
+  invOf_hMul_self := by rw [mul_comm, ← det_mul, h, det_one]
 #align matrix.det_invertible_of_right_inverse Matrix.detInvertibleOfRightInverse
 -/
 
@@ -145,10 +145,10 @@ theorem mul_eq_one_comm : A ⬝ B = 1 ↔ B ⬝ A = 1 :=
   letI : Invertible B.det := det_invertible_of_left_inverse _ _ h
   letI : Invertible B := invertible_of_det_invertible B
   calc
-    B ⬝ A = B ⬝ A ⬝ (B ⬝ ⅟ B) := by rw [Matrix.mul_invOf_self, Matrix.mul_one]
+    B ⬝ A = B ⬝ A ⬝ (B ⬝ ⅟ B) := by rw [mul_invOf_self, Matrix.mul_one]
     _ = B ⬝ (A ⬝ B ⬝ ⅟ B) := by simp only [Matrix.mul_assoc]
     _ = B ⬝ ⅟ B := by rw [h, Matrix.one_mul]
-    _ = 1 := Matrix.mul_invOf_self B
+    _ = 1 := mul_invOf_self B
 #align matrix.mul_eq_one_comm Matrix.mul_eq_one_comm
 -/
 
@@ -343,7 +343,7 @@ theorem conjTranspose_nonsing_inv [StarRing α] : A⁻¹ᴴ = Aᴴ⁻¹ := by
 theorem mul_nonsing_inv (h : IsUnit A.det) : A ⬝ A⁻¹ = 1 :=
   by
   cases (A.is_unit_iff_is_unit_det.mpr h).nonempty_invertible
-  rw [← inv_of_eq_nonsing_inv, Matrix.mul_invOf_self]
+  rw [← inv_of_eq_nonsing_inv, mul_invOf_self]
 #align matrix.mul_nonsing_inv Matrix.mul_nonsing_inv
 -/
 
@@ -353,7 +353,7 @@ theorem mul_nonsing_inv (h : IsUnit A.det) : A ⬝ A⁻¹ = 1 :=
 theorem nonsing_inv_mul (h : IsUnit A.det) : A⁻¹ ⬝ A = 1 :=
   by
   cases (A.is_unit_iff_is_unit_det.mpr h).nonempty_invertible
-  rw [← inv_of_eq_nonsing_inv, Matrix.invOf_mul_self]
+  rw [← inv_of_eq_nonsing_inv, invOf_mul_self]
 #align matrix.nonsing_inv_mul Matrix.nonsing_inv_mul
 -/
 
@@ -647,7 +647,7 @@ theorem invOf_diagonal_eq {α} [Semiring α] (v : n → α) [Invertible v] [Inve
 def invertibleOfDiagonalInvertible (v : n → α) [Invertible (diagonal v)] : Invertible v
     where
   invOf := diag (⅟ (diagonal v))
-  invOf_mul_self :=
+  invOf_hMul_self :=
     funext fun i =>
       by
       letI : Invertible (diagonal v).det := det_invertible_of_invertible _
@@ -655,7 +655,7 @@ def invertibleOfDiagonalInvertible (v : n → α) [Invertible (diagonal v)] : In
       dsimp
       rw [mul_assoc, prod_erase_mul _ _ (Finset.mem_univ _), ← det_diagonal]
       exact mul_invOf_self _
-  mul_invOf_self :=
+  hMul_invOf_self :=
     funext fun i =>
       by
       letI : Invertible (diagonal v).det := det_invertible_of_invertible _
@@ -729,8 +729,8 @@ theorem mul_inv_rev (A B : Matrix n n α) : (A ⬝ B)⁻¹ = B⁻¹ ⬝ A⁻¹ :
 theorem list_prod_inv_reverse : ∀ l : List (Matrix n n α), l.Prod⁻¹ = (l.reverse.map Inv.inv).Prod
   | [] => by rw [List.reverse_nil, List.map_nil, List.prod_nil, inv_one]
   | A::Xs => by
-    rw [List.reverse_cons', List.map_concat, List.prod_concat, List.prod_cons, Matrix.mul_eq_mul,
-      Matrix.mul_eq_mul, mul_inv_rev, list_prod_inv_reverse]
+    rw [List.reverse_cons', List.map_concat, List.prod_concat, List.prod_cons, Matrix.hMul_eq_hMul,
+      Matrix.hMul_eq_hMul, mul_inv_rev, list_prod_inv_reverse]
 #align matrix.list_prod_inv_reverse Matrix.list_prod_inv_reverse
 -/
 
@@ -772,7 +772,7 @@ variable [DecidableEq m]
 def submatrixEquivInvertible (A : Matrix m m α) (e₁ e₂ : n ≃ m) [Invertible A] :
     Invertible (A.submatrix e₁ e₂) :=
   invertibleOfRightInverse _ ((⅟ A).submatrix e₂ e₁) <| by
-    rw [Matrix.submatrix_mul_equiv, Matrix.mul_invOf_self, submatrix_one_equiv]
+    rw [Matrix.submatrix_mul_equiv, mul_invOf_self, submatrix_one_equiv]
 #align matrix.submatrix_equiv_invertible Matrix.submatrixEquivInvertible
 -/
 
@@ -786,7 +786,7 @@ def invertibleOfSubmatrixEquivInvertible (A : Matrix m m α) (e₁ e₂ : n ≃
     conv in _ ⬝ _ =>
       congr
       rw [this]
-    rw [Matrix.submatrix_mul_equiv, Matrix.mul_invOf_self, submatrix_one_equiv]
+    rw [Matrix.submatrix_mul_equiv, mul_invOf_self, submatrix_one_equiv]
 #align matrix.invertible_of_submatrix_equiv_invertible Matrix.invertibleOfSubmatrixEquivInvertible
 -/
 
Diff
@@ -2,15 +2,12 @@
 Copyright (c) 2019 Tim Baanen. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Tim Baanen, Lu-Ming Zhang
-
-! This file was ported from Lean 3 source module linear_algebra.matrix.nonsingular_inverse
-! leanprover-community/mathlib commit 722b3b152ddd5e0cf21c0a29787c76596cb6b422
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
 -/
 import Mathbin.Data.Matrix.Invertible
 import Mathbin.LinearAlgebra.Matrix.Adjugate
 
+#align_import linear_algebra.matrix.nonsingular_inverse from "leanprover-community/mathlib"@"722b3b152ddd5e0cf21c0a29787c76596cb6b422"
+
 /-!
 # Nonsingular inverses
 
Diff
@@ -4,10 +4,11 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Tim Baanen, Lu-Ming Zhang
 
 ! This file was ported from Lean 3 source module linear_algebra.matrix.nonsingular_inverse
-! leanprover-community/mathlib commit 9d2f0748e6c50d7a2657c564b1ff2c695b39148d
+! leanprover-community/mathlib commit 722b3b152ddd5e0cf21c0a29787c76596cb6b422
 ! Please do not edit these lines, except to modify the commit id
 ! if you have ported upstream changes.
 -/
+import Mathbin.Data.Matrix.Invertible
 import Mathbin.LinearAlgebra.Matrix.Adjugate
 
 /-!
@@ -72,48 +73,6 @@ section Invertible
 
 variable [Fintype n] [DecidableEq n] [CommRing α]
 
-#print Matrix.invOf_mul_self /-
-/-- A copy of `inv_of_mul_self` using `⬝` not `*`. -/
-protected theorem invOf_mul_self (A : Matrix n n α) [Invertible A] : ⅟ A ⬝ A = 1 :=
-  invOf_mul_self A
-#align matrix.inv_of_mul_self Matrix.invOf_mul_self
--/
-
-#print Matrix.mul_invOf_self /-
-/-- A copy of `mul_inv_of_self` using `⬝` not `*`. -/
-protected theorem mul_invOf_self (A : Matrix n n α) [Invertible A] : A ⬝ ⅟ A = 1 :=
-  mul_invOf_self A
-#align matrix.mul_inv_of_self Matrix.mul_invOf_self
--/
-
-#print Matrix.invOf_mul_self_assoc /-
-/-- A copy of `inv_of_mul_self_assoc` using `⬝` not `*`. -/
-protected theorem invOf_mul_self_assoc (A : Matrix n n α) (B : Matrix n m α) [Invertible A] :
-    ⅟ A ⬝ (A ⬝ B) = B := by rw [← Matrix.mul_assoc, Matrix.invOf_mul_self, Matrix.one_mul]
-#align matrix.inv_of_mul_self_assoc Matrix.invOf_mul_self_assoc
--/
-
-#print Matrix.mul_invOf_self_assoc /-
-/-- A copy of `mul_inv_of_self_assoc` using `⬝` not `*`. -/
-protected theorem mul_invOf_self_assoc (A : Matrix n n α) (B : Matrix n m α) [Invertible A] :
-    A ⬝ (⅟ A ⬝ B) = B := by rw [← Matrix.mul_assoc, Matrix.mul_invOf_self, Matrix.one_mul]
-#align matrix.mul_inv_of_self_assoc Matrix.mul_invOf_self_assoc
--/
-
-#print Matrix.mul_invOf_mul_self_cancel /-
-/-- A copy of `mul_inv_of_mul_self_cancel` using `⬝` not `*`. -/
-protected theorem mul_invOf_mul_self_cancel (A : Matrix m n α) (B : Matrix n n α) [Invertible B] :
-    A ⬝ ⅟ B ⬝ B = A := by rw [Matrix.mul_assoc, Matrix.invOf_mul_self, Matrix.mul_one]
-#align matrix.mul_inv_of_mul_self_cancel Matrix.mul_invOf_mul_self_cancel
--/
-
-#print Matrix.mul_mul_invOf_self_cancel /-
-/-- A copy of `mul_mul_inv_of_self_cancel` using `⬝` not `*`. -/
-protected theorem mul_mul_invOf_self_cancel (A : Matrix m n α) (B : Matrix n n α) [Invertible B] :
-    A ⬝ B ⬝ ⅟ B = A := by rw [Matrix.mul_assoc, Matrix.mul_invOf_self, Matrix.mul_one]
-#align matrix.mul_mul_inv_of_self_cancel Matrix.mul_mul_invOf_self_cancel
--/
-
 variable (A : Matrix n n α) (B : Matrix n n α)
 
 #print Matrix.invertibleOfDetInvertible /-
Diff
@@ -72,38 +72,51 @@ section Invertible
 
 variable [Fintype n] [DecidableEq n] [CommRing α]
 
+#print Matrix.invOf_mul_self /-
 /-- A copy of `inv_of_mul_self` using `⬝` not `*`. -/
 protected theorem invOf_mul_self (A : Matrix n n α) [Invertible A] : ⅟ A ⬝ A = 1 :=
   invOf_mul_self A
 #align matrix.inv_of_mul_self Matrix.invOf_mul_self
+-/
 
+#print Matrix.mul_invOf_self /-
 /-- A copy of `mul_inv_of_self` using `⬝` not `*`. -/
 protected theorem mul_invOf_self (A : Matrix n n α) [Invertible A] : A ⬝ ⅟ A = 1 :=
   mul_invOf_self A
 #align matrix.mul_inv_of_self Matrix.mul_invOf_self
+-/
 
+#print Matrix.invOf_mul_self_assoc /-
 /-- A copy of `inv_of_mul_self_assoc` using `⬝` not `*`. -/
 protected theorem invOf_mul_self_assoc (A : Matrix n n α) (B : Matrix n m α) [Invertible A] :
     ⅟ A ⬝ (A ⬝ B) = B := by rw [← Matrix.mul_assoc, Matrix.invOf_mul_self, Matrix.one_mul]
 #align matrix.inv_of_mul_self_assoc Matrix.invOf_mul_self_assoc
+-/
 
+#print Matrix.mul_invOf_self_assoc /-
 /-- A copy of `mul_inv_of_self_assoc` using `⬝` not `*`. -/
 protected theorem mul_invOf_self_assoc (A : Matrix n n α) (B : Matrix n m α) [Invertible A] :
     A ⬝ (⅟ A ⬝ B) = B := by rw [← Matrix.mul_assoc, Matrix.mul_invOf_self, Matrix.one_mul]
 #align matrix.mul_inv_of_self_assoc Matrix.mul_invOf_self_assoc
+-/
 
+#print Matrix.mul_invOf_mul_self_cancel /-
 /-- A copy of `mul_inv_of_mul_self_cancel` using `⬝` not `*`. -/
 protected theorem mul_invOf_mul_self_cancel (A : Matrix m n α) (B : Matrix n n α) [Invertible B] :
     A ⬝ ⅟ B ⬝ B = A := by rw [Matrix.mul_assoc, Matrix.invOf_mul_self, Matrix.mul_one]
 #align matrix.mul_inv_of_mul_self_cancel Matrix.mul_invOf_mul_self_cancel
+-/
 
+#print Matrix.mul_mul_invOf_self_cancel /-
 /-- A copy of `mul_mul_inv_of_self_cancel` using `⬝` not `*`. -/
 protected theorem mul_mul_invOf_self_cancel (A : Matrix m n α) (B : Matrix n n α) [Invertible B] :
     A ⬝ B ⬝ ⅟ B = A := by rw [Matrix.mul_assoc, Matrix.mul_invOf_self, Matrix.mul_one]
 #align matrix.mul_mul_inv_of_self_cancel Matrix.mul_mul_invOf_self_cancel
+-/
 
 variable (A : Matrix n n α) (B : Matrix n n α)
 
+#print Matrix.invertibleOfDetInvertible /-
 /-- If `A.det` has a constructive inverse, produce one for `A`. -/
 def invertibleOfDetInvertible [Invertible A.det] : Invertible A
     where
@@ -113,11 +126,15 @@ def invertibleOfDetInvertible [Invertible A.det] : Invertible A
   invOf_mul_self := by
     rw [smul_mul_assoc, Matrix.mul_eq_mul, adjugate_mul, smul_smul, invOf_mul_self, one_smul]
 #align matrix.invertible_of_det_invertible Matrix.invertibleOfDetInvertible
+-/
 
+#print Matrix.invOf_eq /-
 theorem invOf_eq [Invertible A.det] [Invertible A] : ⅟ A = ⅟ A.det • A.adjugate := by
   letI := invertible_of_det_invertible A; convert (rfl : ⅟ A = _)
 #align matrix.inv_of_eq Matrix.invOf_eq
+-/
 
+#print Matrix.detInvertibleOfLeftInverse /-
 /-- `A.det` is invertible if `A` has a left inverse. -/
 def detInvertibleOfLeftInverse (h : B ⬝ A = 1) : Invertible A.det
     where
@@ -125,7 +142,9 @@ def detInvertibleOfLeftInverse (h : B ⬝ A = 1) : Invertible A.det
   mul_invOf_self := by rw [mul_comm, ← det_mul, h, det_one]
   invOf_mul_self := by rw [← det_mul, h, det_one]
 #align matrix.det_invertible_of_left_inverse Matrix.detInvertibleOfLeftInverse
+-/
 
+#print Matrix.detInvertibleOfRightInverse /-
 /-- `A.det` is invertible if `A` has a right inverse. -/
 def detInvertibleOfRightInverse (h : A ⬝ B = 1) : Invertible A.det
     where
@@ -133,16 +152,22 @@ def detInvertibleOfRightInverse (h : A ⬝ B = 1) : Invertible A.det
   mul_invOf_self := by rw [← det_mul, h, det_one]
   invOf_mul_self := by rw [mul_comm, ← det_mul, h, det_one]
 #align matrix.det_invertible_of_right_inverse Matrix.detInvertibleOfRightInverse
+-/
 
+#print Matrix.detInvertibleOfInvertible /-
 /-- If `A` has a constructive inverse, produce one for `A.det`. -/
 def detInvertibleOfInvertible [Invertible A] : Invertible A.det :=
   detInvertibleOfLeftInverse A (⅟ A) (invOf_mul_self _)
 #align matrix.det_invertible_of_invertible Matrix.detInvertibleOfInvertible
+-/
 
+#print Matrix.det_invOf /-
 theorem det_invOf [Invertible A] [Invertible A.det] : (⅟ A).det = ⅟ A.det := by
   letI := det_invertible_of_invertible A; convert (rfl : _ = ⅟ A.det)
 #align matrix.det_inv_of Matrix.det_invOf
+-/
 
+#print Matrix.invertibleEquivDetInvertible /-
 /-- Together `matrix.det_invertible_of_invertible` and `matrix.invertible_of_det_invertible` form an
 equivalence, although both sides of the equiv are subsingleton anyway. -/
 @[simps]
@@ -153,9 +178,11 @@ def invertibleEquivDetInvertible : Invertible A ≃ Invertible A.det
   left_inv _ := Subsingleton.elim _ _
   right_inv _ := Subsingleton.elim _ _
 #align matrix.invertible_equiv_det_invertible Matrix.invertibleEquivDetInvertible
+-/
 
 variable {A B}
 
+#print Matrix.mul_eq_one_comm /-
 theorem mul_eq_one_comm : A ⬝ B = 1 ↔ B ⬝ A = 1 :=
   suffices ∀ A B, A ⬝ B = 1 → B ⬝ A = 1 from ⟨this A B, this B A⟩
   fun A B h => by
@@ -167,81 +194,110 @@ theorem mul_eq_one_comm : A ⬝ B = 1 ↔ B ⬝ A = 1 :=
     _ = B ⬝ ⅟ B := by rw [h, Matrix.one_mul]
     _ = 1 := Matrix.mul_invOf_self B
 #align matrix.mul_eq_one_comm Matrix.mul_eq_one_comm
+-/
 
 variable (A B)
 
+#print Matrix.invertibleOfLeftInverse /-
 /-- We can construct an instance of invertible A if A has a left inverse. -/
 def invertibleOfLeftInverse (h : B ⬝ A = 1) : Invertible A :=
   ⟨B, h, mul_eq_one_comm.mp h⟩
 #align matrix.invertible_of_left_inverse Matrix.invertibleOfLeftInverse
+-/
 
+#print Matrix.invertibleOfRightInverse /-
 /-- We can construct an instance of invertible A if A has a right inverse. -/
 def invertibleOfRightInverse (h : A ⬝ B = 1) : Invertible A :=
   ⟨B, mul_eq_one_comm.mp h, h⟩
 #align matrix.invertible_of_right_inverse Matrix.invertibleOfRightInverse
+-/
 
+#print Matrix.invertibleTranspose /-
 /-- The transpose of an invertible matrix is invertible. -/
 instance invertibleTranspose [Invertible A] : Invertible Aᵀ :=
   haveI : Invertible Aᵀ.det := by simpa using det_invertible_of_invertible A
   invertible_of_det_invertible Aᵀ
 #align matrix.invertible_transpose Matrix.invertibleTranspose
+-/
 
+#print Matrix.invertibleOfInvertibleTranspose /-
 /-- A matrix is invertible if the transpose is invertible. -/
 def invertibleOfInvertibleTranspose [Invertible Aᵀ] : Invertible A :=
   by
   rw [← transpose_transpose A]
   infer_instance
 #align matrix.invertible__of_invertible_transpose Matrix.invertibleOfInvertibleTranspose
+-/
 
+#print Matrix.invertibleOfInvertibleConjTranspose /-
 /-- A matrix is invertible if the conjugate transpose is invertible. -/
 def invertibleOfInvertibleConjTranspose [StarRing α] [Invertible Aᴴ] : Invertible A :=
   by
   rw [← conj_transpose_conj_transpose A]
   infer_instance
 #align matrix.invertible_of_invertible_conj_transpose Matrix.invertibleOfInvertibleConjTranspose
+-/
 
+#print Matrix.unitOfDetInvertible /-
 /-- Given a proof that `A.det` has a constructive inverse, lift `A` to `(matrix n n α)ˣ`-/
 def unitOfDetInvertible [Invertible A.det] : (Matrix n n α)ˣ :=
   @unitOfInvertible _ _ A (invertibleOfDetInvertible A)
 #align matrix.unit_of_det_invertible Matrix.unitOfDetInvertible
+-/
 
+#print Matrix.isUnit_iff_isUnit_det /-
 /-- When lowered to a prop, `matrix.invertible_equiv_det_invertible` forms an `iff`. -/
 theorem isUnit_iff_isUnit_det : IsUnit A ↔ IsUnit A.det := by
   simp only [← nonempty_invertible_iff_isUnit, (invertible_equiv_det_invertible A).nonempty_congr]
 #align matrix.is_unit_iff_is_unit_det Matrix.isUnit_iff_isUnit_det
+-/
 
 /-! #### Variants of the statements above with `is_unit`-/
 
 
+#print Matrix.isUnit_det_of_invertible /-
 theorem isUnit_det_of_invertible [Invertible A] : IsUnit A.det :=
   @isUnit_of_invertible _ _ _ (detInvertibleOfInvertible A)
 #align matrix.is_unit_det_of_invertible Matrix.isUnit_det_of_invertible
+-/
 
 variable {A B}
 
+#print Matrix.isUnit_of_left_inverse /-
 theorem isUnit_of_left_inverse (h : B ⬝ A = 1) : IsUnit A :=
   ⟨⟨A, B, mul_eq_one_comm.mp h, h⟩, rfl⟩
 #align matrix.is_unit_of_left_inverse Matrix.isUnit_of_left_inverse
+-/
 
+#print Matrix.isUnit_of_right_inverse /-
 theorem isUnit_of_right_inverse (h : A ⬝ B = 1) : IsUnit A :=
   ⟨⟨A, B, h, mul_eq_one_comm.mp h⟩, rfl⟩
 #align matrix.is_unit_of_right_inverse Matrix.isUnit_of_right_inverse
+-/
 
+#print Matrix.isUnit_det_of_left_inverse /-
 theorem isUnit_det_of_left_inverse (h : B ⬝ A = 1) : IsUnit A.det :=
   @isUnit_of_invertible _ _ _ (detInvertibleOfLeftInverse _ _ h)
 #align matrix.is_unit_det_of_left_inverse Matrix.isUnit_det_of_left_inverse
+-/
 
+#print Matrix.isUnit_det_of_right_inverse /-
 theorem isUnit_det_of_right_inverse (h : A ⬝ B = 1) : IsUnit A.det :=
   @isUnit_of_invertible _ _ _ (detInvertibleOfRightInverse _ _ h)
 #align matrix.is_unit_det_of_right_inverse Matrix.isUnit_det_of_right_inverse
+-/
 
+#print Matrix.det_ne_zero_of_left_inverse /-
 theorem det_ne_zero_of_left_inverse [Nontrivial α] (h : B ⬝ A = 1) : A.det ≠ 0 :=
   (isUnit_det_of_left_inverse h).NeZero
 #align matrix.det_ne_zero_of_left_inverse Matrix.det_ne_zero_of_left_inverse
+-/
 
+#print Matrix.det_ne_zero_of_right_inverse /-
 theorem det_ne_zero_of_right_inverse [Nontrivial α] (h : A ⬝ B = 1) : A.det ≠ 0 :=
   (isUnit_det_of_right_inverse h).NeZero
 #align matrix.det_ne_zero_of_right_inverse Matrix.det_ne_zero_of_right_inverse
+-/
 
 end Invertible
 
@@ -249,8 +305,10 @@ variable [Fintype n] [DecidableEq n] [CommRing α]
 
 variable (A : Matrix n n α) (B : Matrix n n α)
 
+#print Matrix.isUnit_det_transpose /-
 theorem isUnit_det_transpose (h : IsUnit A.det) : IsUnit Aᵀ.det := by rw [det_transpose]; exact h
 #align matrix.is_unit_det_transpose Matrix.isUnit_det_transpose
+-/
 
 /-! ### A noncomputable `has_inv` instance  -/
 
@@ -259,18 +317,25 @@ theorem isUnit_det_transpose (h : IsUnit A.det) : IsUnit Aᵀ.det := by rw [det_
 noncomputable instance : Inv (Matrix n n α) :=
   ⟨fun A => Ring.inverse A.det • A.adjugate⟩
 
+#print Matrix.inv_def /-
 theorem inv_def (A : Matrix n n α) : A⁻¹ = Ring.inverse A.det • A.adjugate :=
   rfl
 #align matrix.inv_def Matrix.inv_def
+-/
 
+#print Matrix.nonsing_inv_apply_not_isUnit /-
 theorem nonsing_inv_apply_not_isUnit (h : ¬IsUnit A.det) : A⁻¹ = 0 := by
   rw [inv_def, Ring.inverse_non_unit _ h, zero_smul]
 #align matrix.nonsing_inv_apply_not_is_unit Matrix.nonsing_inv_apply_not_isUnit
+-/
 
+#print Matrix.nonsing_inv_apply /-
 theorem nonsing_inv_apply (h : IsUnit A.det) : A⁻¹ = (↑h.Unit⁻¹ : α) • A.adjugate := by
   rw [inv_def, ← Ring.inverse_unit h.unit, IsUnit.unit_spec]
 #align matrix.nonsing_inv_apply Matrix.nonsing_inv_apply
+-/
 
+#print Matrix.invOf_eq_nonsing_inv /-
 /-- The nonsingular inverse is the same as `inv_of` when `A` is invertible. -/
 @[simp]
 theorem invOf_eq_nonsing_inv [Invertible A] : ⅟ A = A⁻¹ :=
@@ -278,7 +343,9 @@ theorem invOf_eq_nonsing_inv [Invertible A] : ⅟ A = A⁻¹ :=
   letI := det_invertible_of_invertible A
   rw [inv_def, Ring.inverse_invertible, inv_of_eq]
 #align matrix.inv_of_eq_nonsing_inv Matrix.invOf_eq_nonsing_inv
+-/
 
+#print Matrix.coe_units_inv /-
 /-- Coercing the result of `units.has_inv` is the same as coercing first and applying the
 nonsingular inverse. -/
 @[simp, norm_cast]
@@ -287,7 +354,9 @@ theorem coe_units_inv (A : (Matrix n n α)ˣ) : ↑A⁻¹ = (A⁻¹ : Matrix n n
   letI := A.invertible
   rw [← inv_of_eq_nonsing_inv, invOf_units]
 #align matrix.coe_units_inv Matrix.coe_units_inv
+-/
 
+#print Matrix.nonsing_inv_eq_ring_inverse /-
 /-- The nonsingular inverse is the same as the general `ring.inverse`. -/
 theorem nonsing_inv_eq_ring_inverse : A⁻¹ = Ring.inverse A :=
   by
@@ -297,16 +366,22 @@ theorem nonsing_inv_eq_ring_inverse : A⁻¹ = Ring.inverse A :=
   · have h := mt A.is_unit_iff_is_unit_det.mp h_det
     rw [Ring.inverse_non_unit _ h, nonsing_inv_apply_not_is_unit A h_det]
 #align matrix.nonsing_inv_eq_ring_inverse Matrix.nonsing_inv_eq_ring_inverse
+-/
 
+#print Matrix.transpose_nonsing_inv /-
 theorem transpose_nonsing_inv : A⁻¹ᵀ = Aᵀ⁻¹ := by
   rw [inv_def, inv_def, transpose_smul, det_transpose, adjugate_transpose]
 #align matrix.transpose_nonsing_inv Matrix.transpose_nonsing_inv
+-/
 
+#print Matrix.conjTranspose_nonsing_inv /-
 theorem conjTranspose_nonsing_inv [StarRing α] : A⁻¹ᴴ = Aᴴ⁻¹ := by
   rw [inv_def, inv_def, conj_transpose_smul, det_conj_transpose, adjugate_conj_transpose,
     Ring.inverse_star]
 #align matrix.conj_transpose_nonsing_inv Matrix.conjTranspose_nonsing_inv
+-/
 
+#print Matrix.mul_nonsing_inv /-
 /-- The `nonsing_inv` of `A` is a right inverse. -/
 @[simp]
 theorem mul_nonsing_inv (h : IsUnit A.det) : A ⬝ A⁻¹ = 1 :=
@@ -314,7 +389,9 @@ theorem mul_nonsing_inv (h : IsUnit A.det) : A ⬝ A⁻¹ = 1 :=
   cases (A.is_unit_iff_is_unit_det.mpr h).nonempty_invertible
   rw [← inv_of_eq_nonsing_inv, Matrix.mul_invOf_self]
 #align matrix.mul_nonsing_inv Matrix.mul_nonsing_inv
+-/
 
+#print Matrix.nonsing_inv_mul /-
 /-- The `nonsing_inv` of `A` is a left inverse. -/
 @[simp]
 theorem nonsing_inv_mul (h : IsUnit A.det) : A⁻¹ ⬝ A = 1 :=
@@ -322,87 +399,119 @@ theorem nonsing_inv_mul (h : IsUnit A.det) : A⁻¹ ⬝ A = 1 :=
   cases (A.is_unit_iff_is_unit_det.mpr h).nonempty_invertible
   rw [← inv_of_eq_nonsing_inv, Matrix.invOf_mul_self]
 #align matrix.nonsing_inv_mul Matrix.nonsing_inv_mul
+-/
 
 instance [Invertible A] : Invertible A⁻¹ := by rw [← inv_of_eq_nonsing_inv]; infer_instance
 
+#print Matrix.inv_inv_of_invertible /-
 @[simp]
 theorem inv_inv_of_invertible [Invertible A] : A⁻¹⁻¹ = A := by
   simp only [← inv_of_eq_nonsing_inv, invOf_invOf]
 #align matrix.inv_inv_of_invertible Matrix.inv_inv_of_invertible
+-/
 
+#print Matrix.mul_nonsing_inv_cancel_right /-
 @[simp]
 theorem mul_nonsing_inv_cancel_right (B : Matrix m n α) (h : IsUnit A.det) : B ⬝ A ⬝ A⁻¹ = B := by
   simp [Matrix.mul_assoc, mul_nonsing_inv A h]
 #align matrix.mul_nonsing_inv_cancel_right Matrix.mul_nonsing_inv_cancel_right
+-/
 
+#print Matrix.mul_nonsing_inv_cancel_left /-
 @[simp]
 theorem mul_nonsing_inv_cancel_left (B : Matrix n m α) (h : IsUnit A.det) : A ⬝ (A⁻¹ ⬝ B) = B := by
   simp [← Matrix.mul_assoc, mul_nonsing_inv A h]
 #align matrix.mul_nonsing_inv_cancel_left Matrix.mul_nonsing_inv_cancel_left
+-/
 
+#print Matrix.nonsing_inv_mul_cancel_right /-
 @[simp]
 theorem nonsing_inv_mul_cancel_right (B : Matrix m n α) (h : IsUnit A.det) : B ⬝ A⁻¹ ⬝ A = B := by
   simp [Matrix.mul_assoc, nonsing_inv_mul A h]
 #align matrix.nonsing_inv_mul_cancel_right Matrix.nonsing_inv_mul_cancel_right
+-/
 
+#print Matrix.nonsing_inv_mul_cancel_left /-
 @[simp]
 theorem nonsing_inv_mul_cancel_left (B : Matrix n m α) (h : IsUnit A.det) : A⁻¹ ⬝ (A ⬝ B) = B := by
   simp [← Matrix.mul_assoc, nonsing_inv_mul A h]
 #align matrix.nonsing_inv_mul_cancel_left Matrix.nonsing_inv_mul_cancel_left
+-/
 
+#print Matrix.mul_inv_of_invertible /-
 @[simp]
 theorem mul_inv_of_invertible [Invertible A] : A ⬝ A⁻¹ = 1 :=
   mul_nonsing_inv A (isUnit_det_of_invertible A)
 #align matrix.mul_inv_of_invertible Matrix.mul_inv_of_invertible
+-/
 
+#print Matrix.inv_mul_of_invertible /-
 @[simp]
 theorem inv_mul_of_invertible [Invertible A] : A⁻¹ ⬝ A = 1 :=
   nonsing_inv_mul A (isUnit_det_of_invertible A)
 #align matrix.inv_mul_of_invertible Matrix.inv_mul_of_invertible
+-/
 
+#print Matrix.mul_inv_cancel_right_of_invertible /-
 @[simp]
 theorem mul_inv_cancel_right_of_invertible (B : Matrix m n α) [Invertible A] : B ⬝ A ⬝ A⁻¹ = B :=
   mul_nonsing_inv_cancel_right A B (isUnit_det_of_invertible A)
 #align matrix.mul_inv_cancel_right_of_invertible Matrix.mul_inv_cancel_right_of_invertible
+-/
 
+#print Matrix.mul_inv_cancel_left_of_invertible /-
 @[simp]
 theorem mul_inv_cancel_left_of_invertible (B : Matrix n m α) [Invertible A] : A ⬝ (A⁻¹ ⬝ B) = B :=
   mul_nonsing_inv_cancel_left A B (isUnit_det_of_invertible A)
 #align matrix.mul_inv_cancel_left_of_invertible Matrix.mul_inv_cancel_left_of_invertible
+-/
 
+#print Matrix.inv_mul_cancel_right_of_invertible /-
 @[simp]
 theorem inv_mul_cancel_right_of_invertible (B : Matrix m n α) [Invertible A] : B ⬝ A⁻¹ ⬝ A = B :=
   nonsing_inv_mul_cancel_right A B (isUnit_det_of_invertible A)
 #align matrix.inv_mul_cancel_right_of_invertible Matrix.inv_mul_cancel_right_of_invertible
+-/
 
+#print Matrix.inv_mul_cancel_left_of_invertible /-
 @[simp]
 theorem inv_mul_cancel_left_of_invertible (B : Matrix n m α) [Invertible A] : A⁻¹ ⬝ (A ⬝ B) = B :=
   nonsing_inv_mul_cancel_left A B (isUnit_det_of_invertible A)
 #align matrix.inv_mul_cancel_left_of_invertible Matrix.inv_mul_cancel_left_of_invertible
+-/
 
+#print Matrix.inv_mul_eq_iff_eq_mul_of_invertible /-
 theorem inv_mul_eq_iff_eq_mul_of_invertible (A B C : Matrix n n α) [Invertible A] :
     A⁻¹ ⬝ B = C ↔ B = A ⬝ C :=
   ⟨fun h => by rw [← h, mul_inv_cancel_left_of_invertible], fun h => by
     rw [h, inv_mul_cancel_left_of_invertible]⟩
 #align matrix.inv_mul_eq_iff_eq_mul_of_invertible Matrix.inv_mul_eq_iff_eq_mul_of_invertible
+-/
 
+#print Matrix.mul_inv_eq_iff_eq_mul_of_invertible /-
 theorem mul_inv_eq_iff_eq_mul_of_invertible (A B C : Matrix n n α) [Invertible A] :
     B ⬝ A⁻¹ = C ↔ B = C ⬝ A :=
   ⟨fun h => by rw [← h, inv_mul_cancel_right_of_invertible], fun h => by
     rw [h, mul_inv_cancel_right_of_invertible]⟩
 #align matrix.mul_inv_eq_iff_eq_mul_of_invertible Matrix.mul_inv_eq_iff_eq_mul_of_invertible
+-/
 
+#print Matrix.nonsing_inv_cancel_or_zero /-
 theorem nonsing_inv_cancel_or_zero : A⁻¹ ⬝ A = 1 ∧ A ⬝ A⁻¹ = 1 ∨ A⁻¹ = 0 :=
   by
   by_cases h : IsUnit A.det
   · exact Or.inl ⟨nonsing_inv_mul _ h, mul_nonsing_inv _ h⟩
   · exact Or.inr (nonsing_inv_apply_not_is_unit _ h)
 #align matrix.nonsing_inv_cancel_or_zero Matrix.nonsing_inv_cancel_or_zero
+-/
 
+#print Matrix.det_nonsing_inv_mul_det /-
 theorem det_nonsing_inv_mul_det (h : IsUnit A.det) : A⁻¹.det * A.det = 1 := by
   rw [← det_mul, A.nonsing_inv_mul h, det_one]
 #align matrix.det_nonsing_inv_mul_det Matrix.det_nonsing_inv_mul_det
+-/
 
+#print Matrix.det_nonsing_inv /-
 @[simp]
 theorem det_nonsing_inv : A⁻¹.det = Ring.inverse A.det :=
   by
@@ -413,11 +522,15 @@ theorem det_nonsing_inv : A⁻¹.det = Ring.inverse A.det :=
   · rw [det_is_empty, det_is_empty, Ring.inverse_one]
   · rw [Ring.inverse_non_unit _ h, nonsing_inv_apply_not_is_unit _ h, det_zero ‹_›]
 #align matrix.det_nonsing_inv Matrix.det_nonsing_inv
+-/
 
+#print Matrix.isUnit_nonsing_inv_det /-
 theorem isUnit_nonsing_inv_det (h : IsUnit A.det) : IsUnit A⁻¹.det :=
   isUnit_of_mul_eq_one _ _ (A.det_nonsing_inv_mul_det h)
 #align matrix.is_unit_nonsing_inv_det Matrix.isUnit_nonsing_inv_det
+-/
 
+#print Matrix.nonsing_inv_nonsing_inv /-
 @[simp]
 theorem nonsing_inv_nonsing_inv (h : IsUnit A.det) : A⁻¹⁻¹ = A :=
   calc
@@ -426,60 +539,80 @@ theorem nonsing_inv_nonsing_inv (h : IsUnit A.det) : A⁻¹⁻¹ = A :=
     _ = A := by
       rw [Matrix.mul_assoc, A⁻¹.mul_nonsing_inv (A.is_unit_nonsing_inv_det h), Matrix.mul_one]
 #align matrix.nonsing_inv_nonsing_inv Matrix.nonsing_inv_nonsing_inv
+-/
 
+#print Matrix.isUnit_nonsing_inv_det_iff /-
 theorem isUnit_nonsing_inv_det_iff {A : Matrix n n α} : IsUnit A⁻¹.det ↔ IsUnit A.det := by
   rw [Matrix.det_nonsing_inv, isUnit_ring_inverse]
 #align matrix.is_unit_nonsing_inv_det_iff Matrix.isUnit_nonsing_inv_det_iff
+-/
 
+#print Matrix.invertibleOfIsUnitDet /-
 -- `is_unit.invertible` lifts the proposition `is_unit A` to a constructive inverse of `A`.
 /-- A version of `matrix.invertible_of_det_invertible` with the inverse defeq to `A⁻¹` that is
 therefore noncomputable. -/
 noncomputable def invertibleOfIsUnitDet (h : IsUnit A.det) : Invertible A :=
   ⟨A⁻¹, nonsing_inv_mul A h, mul_nonsing_inv A h⟩
 #align matrix.invertible_of_is_unit_det Matrix.invertibleOfIsUnitDet
+-/
 
+#print Matrix.nonsingInvUnit /-
 /-- A version of `matrix.units_of_det_invertible` with the inverse defeq to `A⁻¹` that is therefore
 noncomputable. -/
 noncomputable def nonsingInvUnit (h : IsUnit A.det) : (Matrix n n α)ˣ :=
   @unitOfInvertible _ _ _ (invertibleOfIsUnitDet A h)
 #align matrix.nonsing_inv_unit Matrix.nonsingInvUnit
+-/
 
+#print Matrix.unitOfDetInvertible_eq_nonsingInvUnit /-
 theorem unitOfDetInvertible_eq_nonsingInvUnit [Invertible A.det] :
     unitOfDetInvertible A = nonsingInvUnit A (isUnit_of_invertible _) := by ext; rfl
 #align matrix.unit_of_det_invertible_eq_nonsing_inv_unit Matrix.unitOfDetInvertible_eq_nonsingInvUnit
+-/
 
 variable {A} {B}
 
+#print Matrix.inv_eq_left_inv /-
 /-- If matrix A is left invertible, then its inverse equals its left inverse. -/
 theorem inv_eq_left_inv (h : B ⬝ A = 1) : A⁻¹ = B :=
   letI := invertible_of_left_inverse _ _ h
   inv_of_eq_nonsing_inv A ▸ invOf_eq_left_inv h
 #align matrix.inv_eq_left_inv Matrix.inv_eq_left_inv
+-/
 
+#print Matrix.inv_eq_right_inv /-
 /-- If matrix A is right invertible, then its inverse equals its right inverse. -/
 theorem inv_eq_right_inv (h : A ⬝ B = 1) : A⁻¹ = B :=
   inv_eq_left_inv (mul_eq_one_comm.2 h)
 #align matrix.inv_eq_right_inv Matrix.inv_eq_right_inv
+-/
 
 section InvEqInv
 
 variable {C : Matrix n n α}
 
+#print Matrix.left_inv_eq_left_inv /-
 /-- The left inverse of matrix A is unique when existing. -/
 theorem left_inv_eq_left_inv (h : B ⬝ A = 1) (g : C ⬝ A = 1) : B = C := by
   rw [← inv_eq_left_inv h, ← inv_eq_left_inv g]
 #align matrix.left_inv_eq_left_inv Matrix.left_inv_eq_left_inv
+-/
 
+#print Matrix.right_inv_eq_right_inv /-
 /-- The right inverse of matrix A is unique when existing. -/
 theorem right_inv_eq_right_inv (h : A ⬝ B = 1) (g : A ⬝ C = 1) : B = C := by
   rw [← inv_eq_right_inv h, ← inv_eq_right_inv g]
 #align matrix.right_inv_eq_right_inv Matrix.right_inv_eq_right_inv
+-/
 
+#print Matrix.right_inv_eq_left_inv /-
 /-- The right inverse of matrix A equals the left inverse of A when they exist. -/
 theorem right_inv_eq_left_inv (h : A ⬝ B = 1) (g : C ⬝ A = 1) : B = C := by
   rw [← inv_eq_right_inv h, ← inv_eq_left_inv g]
 #align matrix.right_inv_eq_left_inv Matrix.right_inv_eq_left_inv
+-/
 
+#print Matrix.inv_inj /-
 theorem inv_inj (h : A⁻¹ = B⁻¹) (h' : IsUnit A.det) : A = B :=
   by
   refine' left_inv_eq_left_inv (mul_nonsing_inv _ h') _
@@ -487,11 +620,13 @@ theorem inv_inj (h : A⁻¹ = B⁻¹) (h' : IsUnit A.det) : A = B :=
   refine' mul_nonsing_inv _ _
   rwa [← is_unit_nonsing_inv_det_iff, ← h, is_unit_nonsing_inv_det_iff]
 #align matrix.inv_inj Matrix.inv_inj
+-/
 
 end InvEqInv
 
 variable (A)
 
+#print Matrix.inv_zero /-
 @[simp]
 theorem inv_zero : (0 : Matrix n n α)⁻¹ = 0 :=
   by
@@ -506,32 +641,42 @@ theorem inv_zero : (0 : Matrix n n α)⁻¹ = 0 :=
     refine' nonsing_inv_apply_not_is_unit _ _
     simp [hn]
 #align matrix.inv_zero Matrix.inv_zero
+-/
 
 noncomputable instance : InvOneClass (Matrix n n α) :=
   { Matrix.hasOne, Matrix.hasInv with inv_one := inv_eq_left_inv (by simp) }
 
+#print Matrix.inv_smul /-
 theorem inv_smul (k : α) [Invertible k] (h : IsUnit A.det) : (k • A)⁻¹ = ⅟ k • A⁻¹ :=
   inv_eq_left_inv (by simp [h, smul_smul])
 #align matrix.inv_smul Matrix.inv_smul
+-/
 
+#print Matrix.inv_smul' /-
 theorem inv_smul' (k : αˣ) (h : IsUnit A.det) : (k • A)⁻¹ = k⁻¹ • A⁻¹ :=
   inv_eq_left_inv (by simp [h, smul_smul])
 #align matrix.inv_smul' Matrix.inv_smul'
+-/
 
+#print Matrix.inv_adjugate /-
 theorem inv_adjugate (A : Matrix n n α) (h : IsUnit A.det) : (adjugate A)⁻¹ = h.Unit⁻¹ • A :=
   by
   refine' inv_eq_left_inv _
   rw [smul_mul, mul_adjugate, Units.smul_def, smul_smul, h.coe_inv_mul, one_smul]
 #align matrix.inv_adjugate Matrix.inv_adjugate
+-/
 
 section Diagonal
 
+#print Matrix.diagonalInvertible /-
 /-- `diagonal v` is invertible if `v` is -/
 def diagonalInvertible {α} [NonAssocSemiring α] (v : n → α) [Invertible v] :
     Invertible (diagonal v) :=
   Invertible.map (diagonalRingHom n α) v
 #align matrix.diagonal_invertible Matrix.diagonalInvertible
+-/
 
+#print Matrix.invOf_diagonal_eq /-
 theorem invOf_diagonal_eq {α} [Semiring α] (v : n → α) [Invertible v] [Invertible (diagonal v)] :
     ⅟ (diagonal v) = diagonal (⅟ v) :=
   by
@@ -539,7 +684,9 @@ theorem invOf_diagonal_eq {α} [Semiring α] (v : n → α) [Invertible v] [Inve
   haveI := Invertible.subsingleton (diagonal v)
   convert (rfl : ⅟ (diagonal v) = _)
 #align matrix.inv_of_diagonal_eq Matrix.invOf_diagonal_eq
+-/
 
+#print Matrix.invertibleOfDiagonalInvertible /-
 /-- `v` is invertible if `diagonal v` is -/
 def invertibleOfDiagonalInvertible (v : n → α) [Invertible (diagonal v)] : Invertible v
     where
@@ -561,7 +708,9 @@ def invertibleOfDiagonalInvertible (v : n → α) [Invertible (diagonal v)] : In
       rw [mul_left_comm, mul_prod_erase _ _ (Finset.mem_univ _), ← det_diagonal]
       exact mul_invOf_self _
 #align matrix.invertible_of_diagonal_invertible Matrix.invertibleOfDiagonalInvertible
+-/
 
+#print Matrix.diagonalInvertibleEquivInvertible /-
 /-- Together `matrix.diagonal_invertible` and `matrix.invertible_of_diagonal_invertible` form an
 equivalence, although both sides of the equiv are subsingleton anyway. -/
 @[simps]
@@ -572,14 +721,18 @@ def diagonalInvertibleEquivInvertible (v : n → α) : Invertible (diagonal v) 
   left_inv _ := Subsingleton.elim _ _
   right_inv _ := Subsingleton.elim _ _
 #align matrix.diagonal_invertible_equiv_invertible Matrix.diagonalInvertibleEquivInvertible
+-/
 
+#print Matrix.isUnit_diagonal /-
 /-- When lowered to a prop, `matrix.diagonal_invertible_equiv_invertible` forms an `iff`. -/
 @[simp]
 theorem isUnit_diagonal {v : n → α} : IsUnit (diagonal v) ↔ IsUnit v := by
   simp only [← nonempty_invertible_iff_isUnit,
     (diagonal_invertible_equiv_invertible v).nonempty_congr]
 #align matrix.is_unit_diagonal Matrix.isUnit_diagonal
+-/
 
+#print Matrix.inv_diagonal /-
 theorem inv_diagonal (v : n → α) : (diagonal v)⁻¹ = diagonal (Ring.inverse v) :=
   by
   rw [nonsing_inv_eq_ring_inverse]
@@ -591,9 +744,11 @@ theorem inv_diagonal (v : n → α) : (diagonal v)⁻¹ = diagonal (Ring.inverse
   · have := is_unit_diagonal.not.mpr h
     rw [Ring.inverse_non_unit _ h, Pi.zero_def, diagonal_zero, Ring.inverse_non_unit _ this]
 #align matrix.inv_diagonal Matrix.inv_diagonal
+-/
 
 end Diagonal
 
+#print Matrix.inv_inv_inv /-
 @[simp]
 theorem inv_inv_inv (A : Matrix n n α) : A⁻¹⁻¹⁻¹ = A⁻¹ :=
   by
@@ -601,15 +756,19 @@ theorem inv_inv_inv (A : Matrix n n α) : A⁻¹⁻¹⁻¹ = A⁻¹ :=
   · rw [nonsing_inv_nonsing_inv _ h]
   · simp [nonsing_inv_apply_not_is_unit _ h]
 #align matrix.inv_inv_inv Matrix.inv_inv_inv
+-/
 
+#print Matrix.mul_inv_rev /-
 theorem mul_inv_rev (A B : Matrix n n α) : (A ⬝ B)⁻¹ = B⁻¹ ⬝ A⁻¹ :=
   by
   simp only [inv_def]
   rw [Matrix.smul_mul, Matrix.mul_smul, smul_smul, det_mul, adjugate_mul_distrib,
     Ring.mul_inverse_rev]
 #align matrix.mul_inv_rev Matrix.mul_inv_rev
+-/
 
 /- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+#print Matrix.list_prod_inv_reverse /-
 /-- A version of `list.prod_inv_reverse` for `matrix.has_inv`. -/
 theorem list_prod_inv_reverse : ∀ l : List (Matrix n n α), l.Prod⁻¹ = (l.reverse.map Inv.inv).Prod
   | [] => by rw [List.reverse_nil, List.map_nil, List.prod_nil, inv_one]
@@ -617,7 +776,9 @@ theorem list_prod_inv_reverse : ∀ l : List (Matrix n n α), l.Prod⁻¹ = (l.r
     rw [List.reverse_cons', List.map_concat, List.prod_concat, List.prod_cons, Matrix.mul_eq_mul,
       Matrix.mul_eq_mul, mul_inv_rev, list_prod_inv_reverse]
 #align matrix.list_prod_inv_reverse Matrix.list_prod_inv_reverse
+-/
 
+#print Matrix.det_smul_inv_mulVec_eq_cramer /-
 /-- One form of **Cramer's rule**. See `matrix.mul_vec_cramer` for a stronger form. -/
 @[simp]
 theorem det_smul_inv_mulVec_eq_cramer (A : Matrix n n α) (b : n → α) (h : IsUnit A.det) :
@@ -625,7 +786,9 @@ theorem det_smul_inv_mulVec_eq_cramer (A : Matrix n n α) (b : n → α) (h : Is
   rw [cramer_eq_adjugate_mul_vec, A.nonsing_inv_apply h, ← smul_mul_vec_assoc, smul_smul,
     h.mul_coe_inv, one_smul]
 #align matrix.det_smul_inv_mul_vec_eq_cramer Matrix.det_smul_inv_mulVec_eq_cramer
+-/
 
+#print Matrix.det_smul_inv_vecMul_eq_cramer_transpose /-
 /-- One form of **Cramer's rule**. See `matrix.mul_vec_cramer` for a stronger form. -/
 @[simp]
 theorem det_smul_inv_vecMul_eq_cramer_transpose (A : Matrix n n α) (b : n → α) (h : IsUnit A.det) :
@@ -633,6 +796,7 @@ theorem det_smul_inv_vecMul_eq_cramer_transpose (A : Matrix n n α) (b : n → 
   rw [← A⁻¹.transpose_transpose, vec_mul_transpose, transpose_nonsing_inv, ← det_transpose,
     Aᵀ.det_smul_inv_mulVec_eq_cramer _ (is_unit_det_transpose A h)]
 #align matrix.det_smul_inv_vec_mul_eq_cramer_transpose Matrix.det_smul_inv_vecMul_eq_cramer_transpose
+-/
 
 /-! ### Inverses of permutated matrices
 
@@ -647,13 +811,16 @@ variable [Fintype m]
 
 variable [DecidableEq m]
 
+#print Matrix.submatrixEquivInvertible /-
 /-- `A.submatrix e₁ e₂` is invertible if `A` is -/
 def submatrixEquivInvertible (A : Matrix m m α) (e₁ e₂ : n ≃ m) [Invertible A] :
     Invertible (A.submatrix e₁ e₂) :=
   invertibleOfRightInverse _ ((⅟ A).submatrix e₂ e₁) <| by
     rw [Matrix.submatrix_mul_equiv, Matrix.mul_invOf_self, submatrix_one_equiv]
 #align matrix.submatrix_equiv_invertible Matrix.submatrixEquivInvertible
+-/
 
+#print Matrix.invertibleOfSubmatrixEquivInvertible /-
 /-- `A` is invertible if `A.submatrix e₁ e₂` is -/
 def invertibleOfSubmatrixEquivInvertible (A : Matrix m m α) (e₁ e₂ : n ≃ m)
     [Invertible (A.submatrix e₁ e₂)] : Invertible A :=
@@ -665,7 +832,9 @@ def invertibleOfSubmatrixEquivInvertible (A : Matrix m m α) (e₁ e₂ : n ≃
       rw [this]
     rw [Matrix.submatrix_mul_equiv, Matrix.mul_invOf_self, submatrix_one_equiv]
 #align matrix.invertible_of_submatrix_equiv_invertible Matrix.invertibleOfSubmatrixEquivInvertible
+-/
 
+#print Matrix.invOf_submatrix_equiv_eq /-
 theorem invOf_submatrix_equiv_eq (A : Matrix m m α) (e₁ e₂ : n ≃ m) [Invertible A]
     [Invertible (A.submatrix e₁ e₂)] : ⅟ (A.submatrix e₁ e₂) = (⅟ A).submatrix e₂ e₁ :=
   by
@@ -673,7 +842,9 @@ theorem invOf_submatrix_equiv_eq (A : Matrix m m α) (e₁ e₂ : n ≃ m) [Inve
   haveI := Invertible.subsingleton (A.submatrix e₁ e₂)
   convert (rfl : ⅟ (A.submatrix e₁ e₂) = _)
 #align matrix.inv_of_submatrix_equiv_eq Matrix.invOf_submatrix_equiv_eq
+-/
 
+#print Matrix.submatrixEquivInvertibleEquivInvertible /-
 /-- Together `matrix.submatrix_equiv_invertible` and
 `matrix.invertible_of_submatrix_equiv_invertible` form an equivalence, although both sides of the
 equiv are subsingleton anyway. -/
@@ -686,6 +857,7 @@ def submatrixEquivInvertibleEquivInvertible (A : Matrix m m α) (e₁ e₂ : n 
   left_inv _ := Subsingleton.elim _ _
   right_inv _ := Subsingleton.elim _ _
 #align matrix.submatrix_equiv_invertible_equiv_invertible Matrix.submatrixEquivInvertibleEquivInvertible
+-/
 
 #print Matrix.isUnit_submatrix_equiv /-
 /-- When lowered to a prop, `matrix.invertible_of_submatrix_equiv_invertible` forms an `iff`. -/
@@ -697,6 +869,7 @@ theorem isUnit_submatrix_equiv {A : Matrix m m α} (e₁ e₂ : n ≃ m) :
 #align matrix.is_unit_submatrix_equiv Matrix.isUnit_submatrix_equiv
 -/
 
+#print Matrix.inv_submatrix_equiv /-
 @[simp]
 theorem inv_submatrix_equiv (A : Matrix m m α) (e₁ e₂ : n ≃ m) :
     (A.submatrix e₁ e₂)⁻¹ = A⁻¹.submatrix e₂ e₁ :=
@@ -709,10 +882,13 @@ theorem inv_submatrix_equiv (A : Matrix m m α) (e₁ e₂ : n ≃ m) :
     simp_rw [nonsing_inv_eq_ring_inverse, Ring.inverse_non_unit _ h, Ring.inverse_non_unit _ this,
       submatrix_zero, Pi.zero_apply]
 #align matrix.inv_submatrix_equiv Matrix.inv_submatrix_equiv
+-/
 
+#print Matrix.inv_reindex /-
 theorem inv_reindex (e₁ e₂ : n ≃ m) (A : Matrix n n α) : (reindex e₁ e₂ A)⁻¹ = reindex e₂ e₁ A⁻¹ :=
   inv_submatrix_equiv A e₁.symm e₂.symm
 #align matrix.inv_reindex Matrix.inv_reindex
+-/
 
 end Submatrix
 
@@ -723,15 +899,19 @@ section Det
 
 variable [Fintype m] [DecidableEq m]
 
+#print Matrix.det_conj /-
 /-- A variant of `matrix.det_units_conj`. -/
 theorem det_conj {M : Matrix m m α} (h : IsUnit M) (N : Matrix m m α) : det (M ⬝ N ⬝ M⁻¹) = det N :=
   by rw [← h.unit_spec, ← coe_units_inv, det_units_conj]
 #align matrix.det_conj Matrix.det_conj
+-/
 
+#print Matrix.det_conj' /-
 /-- A variant of `matrix.det_units_conj'`. -/
 theorem det_conj' {M : Matrix m m α} (h : IsUnit M) (N : Matrix m m α) :
     det (M⁻¹ ⬝ N ⬝ M) = det N := by rw [← h.unit_spec, ← coe_units_inv, det_units_conj']
 #align matrix.det_conj' Matrix.det_conj'
+-/
 
 end Det
 
Diff
@@ -166,7 +166,6 @@ theorem mul_eq_one_comm : A ⬝ B = 1 ↔ B ⬝ A = 1 :=
     _ = B ⬝ (A ⬝ B ⬝ ⅟ B) := by simp only [Matrix.mul_assoc]
     _ = B ⬝ ⅟ B := by rw [h, Matrix.one_mul]
     _ = 1 := Matrix.mul_invOf_self B
-    
 #align matrix.mul_eq_one_comm Matrix.mul_eq_one_comm
 
 variable (A B)
@@ -426,7 +425,6 @@ theorem nonsing_inv_nonsing_inv (h : IsUnit A.det) : A⁻¹⁻¹ = A :=
     _ = A ⬝ A⁻¹ ⬝ A⁻¹⁻¹ := by rw [A.mul_nonsing_inv h]
     _ = A := by
       rw [Matrix.mul_assoc, A⁻¹.mul_nonsing_inv (A.is_unit_nonsing_inv_det h), Matrix.mul_one]
-    
 #align matrix.nonsing_inv_nonsing_inv Matrix.nonsing_inv_nonsing_inv
 
 theorem isUnit_nonsing_inv_det_iff {A : Matrix n n α} : IsUnit A⁻¹.det ↔ IsUnit A.det := by
Diff
@@ -115,7 +115,7 @@ def invertibleOfDetInvertible [Invertible A.det] : Invertible A
 #align matrix.invertible_of_det_invertible Matrix.invertibleOfDetInvertible
 
 theorem invOf_eq [Invertible A.det] [Invertible A] : ⅟ A = ⅟ A.det • A.adjugate := by
-  letI := invertible_of_det_invertible A; convert(rfl : ⅟ A = _)
+  letI := invertible_of_det_invertible A; convert (rfl : ⅟ A = _)
 #align matrix.inv_of_eq Matrix.invOf_eq
 
 /-- `A.det` is invertible if `A` has a left inverse. -/
@@ -140,7 +140,7 @@ def detInvertibleOfInvertible [Invertible A] : Invertible A.det :=
 #align matrix.det_invertible_of_invertible Matrix.detInvertibleOfInvertible
 
 theorem det_invOf [Invertible A] [Invertible A.det] : (⅟ A).det = ⅟ A.det := by
-  letI := det_invertible_of_invertible A; convert(rfl : _ = ⅟ A.det)
+  letI := det_invertible_of_invertible A; convert (rfl : _ = ⅟ A.det)
 #align matrix.det_inv_of Matrix.det_invOf
 
 /-- Together `matrix.det_invertible_of_invertible` and `matrix.invertible_of_det_invertible` form an
@@ -539,7 +539,7 @@ theorem invOf_diagonal_eq {α} [Semiring α] (v : n → α) [Invertible v] [Inve
   by
   letI := diagonal_invertible v
   haveI := Invertible.subsingleton (diagonal v)
-  convert(rfl : ⅟ (diagonal v) = _)
+  convert (rfl : ⅟ (diagonal v) = _)
 #align matrix.inv_of_diagonal_eq Matrix.invOf_diagonal_eq
 
 /-- `v` is invertible if `diagonal v` is -/
@@ -673,7 +673,7 @@ theorem invOf_submatrix_equiv_eq (A : Matrix m m α) (e₁ e₂ : n ≃ m) [Inve
   by
   letI := submatrix_equiv_invertible A e₁ e₂
   haveI := Invertible.subsingleton (A.submatrix e₁ e₂)
-  convert(rfl : ⅟ (A.submatrix e₁ e₂) = _)
+  convert (rfl : ⅟ (A.submatrix e₁ e₂) = _)
 #align matrix.inv_of_submatrix_equiv_eq Matrix.invOf_submatrix_equiv_eq
 
 /-- Together `matrix.submatrix_equiv_invertible` and
Diff
@@ -500,7 +500,7 @@ theorem inv_zero : (0 : Matrix n n α)⁻¹ = 0 :=
   cases' subsingleton_or_nontrivial α with ht ht
   · simp
   cases' (Fintype.card n).zero_le.eq_or_lt with hc hc
-  · rw [eq_comm, Fintype.card_eq_zero_iff] at hc
+  · rw [eq_comm, Fintype.card_eq_zero_iff] at hc 
     haveI := hc
     ext i
     exact (IsEmpty.false i).elim
Diff
@@ -61,7 +61,7 @@ universe u u' v
 
 variable {l : Type _} {m : Type u} {n : Type u'} {α : Type v}
 
-open Matrix BigOperators
+open scoped Matrix BigOperators
 
 open Equiv Equiv.Perm Finset
 
Diff
@@ -72,67 +72,31 @@ section Invertible
 
 variable [Fintype n] [DecidableEq n] [CommRing α]
 
-/- warning: matrix.inv_of_mul_self -> Matrix.invOf_mul_self is a dubious translation:
-lean 3 declaration is
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasMul.{u2, u1} n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) A], Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Invertible.invOf.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasMul.{u2, u1} n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) A _inst_4) A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (OfNat.mk.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.one.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))))))
-but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) A], Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Invertible.invOf.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) A _inst_4) A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))))
-Case conversion may be inaccurate. Consider using '#align matrix.inv_of_mul_self Matrix.invOf_mul_selfₓ'. -/
 /-- A copy of `inv_of_mul_self` using `⬝` not `*`. -/
 protected theorem invOf_mul_self (A : Matrix n n α) [Invertible A] : ⅟ A ⬝ A = 1 :=
   invOf_mul_self A
 #align matrix.inv_of_mul_self Matrix.invOf_mul_self
 
-/- warning: matrix.mul_inv_of_self -> Matrix.mul_invOf_self is a dubious translation:
-lean 3 declaration is
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasMul.{u2, u1} n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) A], Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A (Invertible.invOf.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasMul.{u2, u1} n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) A _inst_4)) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (OfNat.mk.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.one.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))))))
-but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) A], Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A (Invertible.invOf.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) A _inst_4)) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))))
-Case conversion may be inaccurate. Consider using '#align matrix.mul_inv_of_self Matrix.mul_invOf_selfₓ'. -/
 /-- A copy of `mul_inv_of_self` using `⬝` not `*`. -/
 protected theorem mul_invOf_self (A : Matrix n n α) [Invertible A] : A ⬝ ⅟ A = 1 :=
   mul_invOf_self A
 #align matrix.mul_inv_of_self Matrix.mul_invOf_self
 
-/- warning: matrix.inv_of_mul_self_assoc -> Matrix.invOf_mul_self_assoc is a dubious translation:
-lean 3 declaration is
-  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] (A : Matrix.{u2, u2, u3} n n α) (B : Matrix.{u2, u1, u3} n m α) [_inst_4 : Invertible.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.hasMul.{u3, u2} n α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.hasOne.{u3, u2} 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} α (CommRing.toRing.{u3} α _inst_3)))))) (AddMonoidWithOne.toOne.{u3} α (AddGroupWithOne.toAddMonoidWithOne.{u3} α (AddCommGroupWithOne.toAddGroupWithOne.{u3} α (Ring.toAddCommGroupWithOne.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) A], Eq.{succ (max u2 u1 u3)} (Matrix.{u2, u1, u3} n m α) (Matrix.mul.{u3, u2, u2, u1} n n m α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) (Invertible.invOf.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.hasMul.{u3, u2} n α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.hasOne.{u3, u2} 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} α (CommRing.toRing.{u3} α _inst_3)))))) (AddMonoidWithOne.toOne.{u3} α (AddGroupWithOne.toAddMonoidWithOne.{u3} α (AddCommGroupWithOne.toAddGroupWithOne.{u3} α (Ring.toAddCommGroupWithOne.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) A _inst_4) (Matrix.mul.{u3, u2, u2, u1} n n m α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) A B)) B
-but is expected to have type
-  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] (A : Matrix.{u2, u2, u3} n n α) (B : Matrix.{u2, u1, u3} n m α) [_inst_4 : Invertible.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.instMulMatrix.{u3, u2} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u2} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (Semiring.toOne.{u3} α (CommSemiring.toSemiring.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3)))) A], Eq.{max (max (succ u1) (succ u2)) (succ u3)} (Matrix.{u2, u1, u3} n m α) (Matrix.mul.{u3, u2, u2, u1} n n m α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) (Invertible.invOf.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.instMulMatrix.{u3, u2} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u2} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (Semiring.toOne.{u3} α (CommSemiring.toSemiring.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3)))) A _inst_4) (Matrix.mul.{u3, u2, u2, u1} n n m α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) A B)) B
-Case conversion may be inaccurate. Consider using '#align matrix.inv_of_mul_self_assoc Matrix.invOf_mul_self_assocₓ'. -/
 /-- A copy of `inv_of_mul_self_assoc` using `⬝` not `*`. -/
 protected theorem invOf_mul_self_assoc (A : Matrix n n α) (B : Matrix n m α) [Invertible A] :
     ⅟ A ⬝ (A ⬝ B) = B := by rw [← Matrix.mul_assoc, Matrix.invOf_mul_self, Matrix.one_mul]
 #align matrix.inv_of_mul_self_assoc Matrix.invOf_mul_self_assoc
 
-/- warning: matrix.mul_inv_of_self_assoc -> Matrix.mul_invOf_self_assoc is a dubious translation:
-lean 3 declaration is
-  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] (A : Matrix.{u2, u2, u3} n n α) (B : Matrix.{u2, u1, u3} n m α) [_inst_4 : Invertible.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.hasMul.{u3, u2} n α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.hasOne.{u3, u2} 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} α (CommRing.toRing.{u3} α _inst_3)))))) (AddMonoidWithOne.toOne.{u3} α (AddGroupWithOne.toAddMonoidWithOne.{u3} α (AddCommGroupWithOne.toAddGroupWithOne.{u3} α (Ring.toAddCommGroupWithOne.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) A], Eq.{succ (max u2 u1 u3)} (Matrix.{u2, u1, u3} n m α) (Matrix.mul.{u3, u2, u2, u1} n n m α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) A (Matrix.mul.{u3, u2, u2, u1} n n m α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) (Invertible.invOf.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.hasMul.{u3, u2} n α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.hasOne.{u3, u2} 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} α (CommRing.toRing.{u3} α _inst_3)))))) (AddMonoidWithOne.toOne.{u3} α (AddGroupWithOne.toAddMonoidWithOne.{u3} α (AddCommGroupWithOne.toAddGroupWithOne.{u3} α (Ring.toAddCommGroupWithOne.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) A _inst_4) B)) B
-but is expected to have type
-  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] (A : Matrix.{u2, u2, u3} n n α) (B : Matrix.{u2, u1, u3} n m α) [_inst_4 : Invertible.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.instMulMatrix.{u3, u2} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u2} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (Semiring.toOne.{u3} α (CommSemiring.toSemiring.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3)))) A], Eq.{max (max (succ u1) (succ u2)) (succ u3)} (Matrix.{u2, u1, u3} n m α) (Matrix.mul.{u3, u2, u2, u1} n n m α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) A (Matrix.mul.{u3, u2, u2, u1} n n m α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) (Invertible.invOf.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.instMulMatrix.{u3, u2} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u2} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (Semiring.toOne.{u3} α (CommSemiring.toSemiring.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3)))) A _inst_4) B)) B
-Case conversion may be inaccurate. Consider using '#align matrix.mul_inv_of_self_assoc Matrix.mul_invOf_self_assocₓ'. -/
 /-- A copy of `mul_inv_of_self_assoc` using `⬝` not `*`. -/
 protected theorem mul_invOf_self_assoc (A : Matrix n n α) (B : Matrix n m α) [Invertible A] :
     A ⬝ (⅟ A ⬝ B) = B := by rw [← Matrix.mul_assoc, Matrix.mul_invOf_self, Matrix.one_mul]
 #align matrix.mul_inv_of_self_assoc Matrix.mul_invOf_self_assoc
 
-/- warning: matrix.mul_inv_of_mul_self_cancel -> Matrix.mul_invOf_mul_self_cancel is a dubious translation:
-lean 3 declaration is
-  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] (A : Matrix.{u1, u2, u3} m n α) (B : Matrix.{u2, u2, u3} n n α) [_inst_4 : Invertible.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.hasMul.{u3, u2} n α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.hasOne.{u3, u2} 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} α (CommRing.toRing.{u3} α _inst_3)))))) (AddMonoidWithOne.toOne.{u3} α (AddGroupWithOne.toAddMonoidWithOne.{u3} α (AddCommGroupWithOne.toAddGroupWithOne.{u3} α (Ring.toAddCommGroupWithOne.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) B], Eq.{succ (max u1 u2 u3)} (Matrix.{u1, u2, u3} m n α) (Matrix.mul.{u3, u1, u2, u2} m n n α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) (Matrix.mul.{u3, u1, u2, u2} m n n α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) A (Invertible.invOf.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.hasMul.{u3, u2} n α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.hasOne.{u3, u2} 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} α (CommRing.toRing.{u3} α _inst_3)))))) (AddMonoidWithOne.toOne.{u3} α (AddGroupWithOne.toAddMonoidWithOne.{u3} α (AddCommGroupWithOne.toAddGroupWithOne.{u3} α (Ring.toAddCommGroupWithOne.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) B _inst_4)) B) A
-but is expected to have type
-  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] (A : Matrix.{u1, u2, u3} m n α) (B : Matrix.{u2, u2, u3} n n α) [_inst_4 : Invertible.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.instMulMatrix.{u3, u2} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u2} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (Semiring.toOne.{u3} α (CommSemiring.toSemiring.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3)))) B], Eq.{max (max (succ u1) (succ u2)) (succ u3)} (Matrix.{u1, u2, u3} m n α) (Matrix.mul.{u3, u1, u2, u2} m n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) (Matrix.mul.{u3, u1, u2, u2} m n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) A (Invertible.invOf.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.instMulMatrix.{u3, u2} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u2} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (Semiring.toOne.{u3} α (CommSemiring.toSemiring.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3)))) B _inst_4)) B) A
-Case conversion may be inaccurate. Consider using '#align matrix.mul_inv_of_mul_self_cancel Matrix.mul_invOf_mul_self_cancelₓ'. -/
 /-- A copy of `mul_inv_of_mul_self_cancel` using `⬝` not `*`. -/
 protected theorem mul_invOf_mul_self_cancel (A : Matrix m n α) (B : Matrix n n α) [Invertible B] :
     A ⬝ ⅟ B ⬝ B = A := by rw [Matrix.mul_assoc, Matrix.invOf_mul_self, Matrix.mul_one]
 #align matrix.mul_inv_of_mul_self_cancel Matrix.mul_invOf_mul_self_cancel
 
-/- warning: matrix.mul_mul_inv_of_self_cancel -> Matrix.mul_mul_invOf_self_cancel is a dubious translation:
-lean 3 declaration is
-  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] (A : Matrix.{u1, u2, u3} m n α) (B : Matrix.{u2, u2, u3} n n α) [_inst_4 : Invertible.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.hasMul.{u3, u2} n α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.hasOne.{u3, u2} 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} α (CommRing.toRing.{u3} α _inst_3)))))) (AddMonoidWithOne.toOne.{u3} α (AddGroupWithOne.toAddMonoidWithOne.{u3} α (AddCommGroupWithOne.toAddGroupWithOne.{u3} α (Ring.toAddCommGroupWithOne.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) B], Eq.{succ (max u1 u2 u3)} (Matrix.{u1, u2, u3} m n α) (Matrix.mul.{u3, u1, u2, u2} m n n α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) (Matrix.mul.{u3, u1, u2, u2} m n n α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) A B) (Invertible.invOf.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.hasMul.{u3, u2} n α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.hasOne.{u3, u2} 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} α (CommRing.toRing.{u3} α _inst_3)))))) (AddMonoidWithOne.toOne.{u3} α (AddGroupWithOne.toAddMonoidWithOne.{u3} α (AddCommGroupWithOne.toAddGroupWithOne.{u3} α (Ring.toAddCommGroupWithOne.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) B _inst_4)) A
-but is expected to have type
-  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] (A : Matrix.{u1, u2, u3} m n α) (B : Matrix.{u2, u2, u3} n n α) [_inst_4 : Invertible.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.instMulMatrix.{u3, u2} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u2} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (Semiring.toOne.{u3} α (CommSemiring.toSemiring.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3)))) B], Eq.{max (max (succ u1) (succ u2)) (succ u3)} (Matrix.{u1, u2, u3} m n α) (Matrix.mul.{u3, u1, u2, u2} m n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) (Matrix.mul.{u3, u1, u2, u2} m n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) A B) (Invertible.invOf.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.instMulMatrix.{u3, u2} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u2} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (Semiring.toOne.{u3} α (CommSemiring.toSemiring.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3)))) B _inst_4)) A
-Case conversion may be inaccurate. Consider using '#align matrix.mul_mul_inv_of_self_cancel Matrix.mul_mul_invOf_self_cancelₓ'. -/
 /-- A copy of `mul_mul_inv_of_self_cancel` using `⬝` not `*`. -/
 protected theorem mul_mul_invOf_self_cancel (A : Matrix m n α) (B : Matrix n n α) [Invertible B] :
     A ⬝ B ⬝ ⅟ B = A := by rw [Matrix.mul_assoc, Matrix.mul_invOf_self, Matrix.mul_one]
@@ -140,12 +104,6 @@ protected theorem mul_mul_invOf_self_cancel (A : Matrix m n α) (B : Matrix n n
 
 variable (A : Matrix n n α) (B : Matrix n n α)
 
-/- warning: matrix.invertible_of_det_invertible -> Matrix.invertibleOfDetInvertible is a dubious translation:
-lean 3 declaration is
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{u2} α (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)], Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasMul.{u2, u1} n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) A
-but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{u2} α (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)], Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) A
-Case conversion may be inaccurate. Consider using '#align matrix.invertible_of_det_invertible Matrix.invertibleOfDetInvertibleₓ'. -/
 /-- If `A.det` has a constructive inverse, produce one for `A`. -/
 def invertibleOfDetInvertible [Invertible A.det] : Invertible A
     where
@@ -156,22 +114,10 @@ def invertibleOfDetInvertible [Invertible A.det] : Invertible A
     rw [smul_mul_assoc, Matrix.mul_eq_mul, adjugate_mul, smul_smul, invOf_mul_self, one_smul]
 #align matrix.invertible_of_det_invertible Matrix.invertibleOfDetInvertible
 
-/- warning: matrix.inv_of_eq -> Matrix.invOf_eq is a dubious translation:
-lean 3 declaration is
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{u2} α (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)] [_inst_5 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasMul.{u2, u1} n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) A], Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Invertible.invOf.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasMul.{u2, u1} n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) A _inst_5) (SMul.smul.{u2, max u1 u2} α (Matrix.{u1, u1, u2} n n α) (Matrix.hasSmul.{u2, u1, u1, u2} n n α α (Mul.toSMul.{u2} α (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Invertible.invOf.{u2} α (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A) _inst_4) (Matrix.adjugate.{u1, u2} n α (fun (a : n) (b : n) => _inst_2 a b) _inst_1 _inst_3 A))
-but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{u2} α (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)] [_inst_5 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) A], Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Invertible.invOf.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) A _inst_5) (HSMul.hSMul.{u2, max u1 u2, max u1 u2} α (Matrix.{u1, u1, u2} n n α) (Matrix.{u1, u1, u2} n n α) (instHSMul.{u2, max u1 u2} α (Matrix.{u1, u1, u2} n n α) (Matrix.smul.{u2, u1, u1, u2} n n α α (Algebra.toSMul.{u2, u2} α α (CommRing.toCommSemiring.{u2} α _inst_3) (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (Algebra.id.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) (Invertible.invOf.{u2} α (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A) _inst_4) (Matrix.adjugate.{u1, u2} n α (fun (a : n) (b : n) => _inst_2 a b) _inst_1 _inst_3 A))
-Case conversion may be inaccurate. Consider using '#align matrix.inv_of_eq Matrix.invOf_eqₓ'. -/
 theorem invOf_eq [Invertible A.det] [Invertible A] : ⅟ A = ⅟ A.det • A.adjugate := by
   letI := invertible_of_det_invertible A; convert(rfl : ⅟ A = _)
 #align matrix.inv_of_eq Matrix.invOf_eq
 
-/- warning: matrix.det_invertible_of_left_inverse -> Matrix.detInvertibleOfLeftInverse is a dubious translation:
-lean 3 declaration is
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (B : Matrix.{u1, u1, u2} n n α), (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) B A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (OfNat.mk.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.one.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))))))) -> (Invertible.{u2} α (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A))
-but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (B : Matrix.{u1, u1, u2} n n α), (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) B A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))))) -> (Invertible.{u2} α (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A))
-Case conversion may be inaccurate. Consider using '#align matrix.det_invertible_of_left_inverse Matrix.detInvertibleOfLeftInverseₓ'. -/
 /-- `A.det` is invertible if `A` has a left inverse. -/
 def detInvertibleOfLeftInverse (h : B ⬝ A = 1) : Invertible A.det
     where
@@ -180,12 +126,6 @@ def detInvertibleOfLeftInverse (h : B ⬝ A = 1) : Invertible A.det
   invOf_mul_self := by rw [← det_mul, h, det_one]
 #align matrix.det_invertible_of_left_inverse Matrix.detInvertibleOfLeftInverse
 
-/- warning: matrix.det_invertible_of_right_inverse -> Matrix.detInvertibleOfRightInverse is a dubious translation:
-lean 3 declaration is
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (B : Matrix.{u1, u1, u2} n n α), (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A B) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (OfNat.mk.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.one.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))))))) -> (Invertible.{u2} α (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A))
-but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (B : Matrix.{u1, u1, u2} n n α), (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A B) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))))) -> (Invertible.{u2} α (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A))
-Case conversion may be inaccurate. Consider using '#align matrix.det_invertible_of_right_inverse Matrix.detInvertibleOfRightInverseₓ'. -/
 /-- `A.det` is invertible if `A` has a right inverse. -/
 def detInvertibleOfRightInverse (h : A ⬝ B = 1) : Invertible A.det
     where
@@ -194,33 +134,15 @@ def detInvertibleOfRightInverse (h : A ⬝ B = 1) : Invertible A.det
   invOf_mul_self := by rw [mul_comm, ← det_mul, h, det_one]
 #align matrix.det_invertible_of_right_inverse Matrix.detInvertibleOfRightInverse
 
-/- warning: matrix.det_invertible_of_invertible -> Matrix.detInvertibleOfInvertible is a dubious translation:
-lean 3 declaration is
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasMul.{u2, u1} n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) A], Invertible.{u2} α (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)
-but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) A], Invertible.{u2} α (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)
-Case conversion may be inaccurate. Consider using '#align matrix.det_invertible_of_invertible Matrix.detInvertibleOfInvertibleₓ'. -/
 /-- If `A` has a constructive inverse, produce one for `A.det`. -/
 def detInvertibleOfInvertible [Invertible A] : Invertible A.det :=
   detInvertibleOfLeftInverse A (⅟ A) (invOf_mul_self _)
 #align matrix.det_invertible_of_invertible Matrix.detInvertibleOfInvertible
 
-/- warning: matrix.det_inv_of -> Matrix.det_invOf is a dubious translation:
-lean 3 declaration is
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasMul.{u2, u1} n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) A] [_inst_5 : Invertible.{u2} α (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)], Eq.{succ u2} α (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 (Invertible.invOf.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasMul.{u2, u1} n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) A _inst_4)) (Invertible.invOf.{u2} α (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A) _inst_5)
-but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) A] [_inst_5 : Invertible.{u2} α (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)], Eq.{succ u2} α (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 (Invertible.invOf.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) A _inst_4)) (Invertible.invOf.{u2} α (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A) _inst_5)
-Case conversion may be inaccurate. Consider using '#align matrix.det_inv_of Matrix.det_invOfₓ'. -/
 theorem det_invOf [Invertible A] [Invertible A.det] : (⅟ A).det = ⅟ A.det := by
   letI := det_invertible_of_invertible A; convert(rfl : _ = ⅟ A.det)
 #align matrix.det_inv_of Matrix.det_invOf
 
-/- warning: matrix.invertible_equiv_det_invertible -> Matrix.invertibleEquivDetInvertible is a dubious translation:
-lean 3 declaration is
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), Equiv.{succ (max u1 u2), succ u2} (Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasMul.{u2, u1} n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) A) (Invertible.{u2} α (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A))
-but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), Equiv.{succ (max u1 u2), succ u2} (Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) A) (Invertible.{u2} α (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A))
-Case conversion may be inaccurate. Consider using '#align matrix.invertible_equiv_det_invertible Matrix.invertibleEquivDetInvertibleₓ'. -/
 /-- Together `matrix.det_invertible_of_invertible` and `matrix.invertible_of_det_invertible` form an
 equivalence, although both sides of the equiv are subsingleton anyway. -/
 @[simps]
@@ -234,12 +156,6 @@ def invertibleEquivDetInvertible : Invertible A ≃ Invertible A.det
 
 variable {A B}
 
-/- warning: matrix.mul_eq_one_comm -> Matrix.mul_eq_one_comm is a dubious translation:
-lean 3 declaration is
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] {A : Matrix.{u1, u1, u2} n n α} {B : Matrix.{u1, u1, u2} n n α}, Iff (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A B) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (OfNat.mk.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.one.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))))))) (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) B A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (OfNat.mk.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.one.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3))))))))))
-but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] {A : Matrix.{u1, u1, u2} n n α} {B : Matrix.{u1, u1, u2} n n α}, Iff (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A B) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))))) (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) B A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))))))
-Case conversion may be inaccurate. Consider using '#align matrix.mul_eq_one_comm Matrix.mul_eq_one_commₓ'. -/
 theorem mul_eq_one_comm : A ⬝ B = 1 ↔ B ⬝ A = 1 :=
   suffices ∀ A B, A ⬝ B = 1 → B ⬝ A = 1 from ⟨this A B, this B A⟩
   fun A B h => by
@@ -255,46 +171,22 @@ theorem mul_eq_one_comm : A ⬝ B = 1 ↔ B ⬝ A = 1 :=
 
 variable (A B)
 
-/- warning: matrix.invertible_of_left_inverse -> Matrix.invertibleOfLeftInverse is a dubious translation:
-lean 3 declaration is
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (B : Matrix.{u1, u1, u2} n n α), (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) B A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (OfNat.mk.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.one.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))))))) -> (Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasMul.{u2, u1} n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) A)
-but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (B : Matrix.{u1, u1, u2} n n α), (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) B A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))))) -> (Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) A)
-Case conversion may be inaccurate. Consider using '#align matrix.invertible_of_left_inverse Matrix.invertibleOfLeftInverseₓ'. -/
 /-- We can construct an instance of invertible A if A has a left inverse. -/
 def invertibleOfLeftInverse (h : B ⬝ A = 1) : Invertible A :=
   ⟨B, h, mul_eq_one_comm.mp h⟩
 #align matrix.invertible_of_left_inverse Matrix.invertibleOfLeftInverse
 
-/- warning: matrix.invertible_of_right_inverse -> Matrix.invertibleOfRightInverse is a dubious translation:
-lean 3 declaration is
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (B : Matrix.{u1, u1, u2} n n α), (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A B) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (OfNat.mk.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.one.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))))))) -> (Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasMul.{u2, u1} n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) A)
-but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (B : Matrix.{u1, u1, u2} n n α), (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A B) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))))) -> (Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) A)
-Case conversion may be inaccurate. Consider using '#align matrix.invertible_of_right_inverse Matrix.invertibleOfRightInverseₓ'. -/
 /-- We can construct an instance of invertible A if A has a right inverse. -/
 def invertibleOfRightInverse (h : A ⬝ B = 1) : Invertible A :=
   ⟨B, mul_eq_one_comm.mp h, h⟩
 #align matrix.invertible_of_right_inverse Matrix.invertibleOfRightInverse
 
-/- warning: matrix.invertible_transpose -> Matrix.invertibleTranspose is a dubious translation:
-lean 3 declaration is
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasMul.{u2, u1} n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) A], Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasMul.{u2, u1} n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.transpose.{u2, u1, u1} n n α A)
-but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) A], Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Matrix.transpose.{u2, u1, u1} n n α A)
-Case conversion may be inaccurate. Consider using '#align matrix.invertible_transpose Matrix.invertibleTransposeₓ'. -/
 /-- The transpose of an invertible matrix is invertible. -/
 instance invertibleTranspose [Invertible A] : Invertible Aᵀ :=
   haveI : Invertible Aᵀ.det := by simpa using det_invertible_of_invertible A
   invertible_of_det_invertible Aᵀ
 #align matrix.invertible_transpose Matrix.invertibleTranspose
 
-/- warning: matrix.invertible__of_invertible_transpose -> Matrix.invertibleOfInvertibleTranspose is a dubious translation:
-lean 3 declaration is
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasMul.{u2, u1} n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.transpose.{u2, u1, u1} n n α A)], Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasMul.{u2, u1} n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) A
-but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Matrix.transpose.{u2, u1, u1} n n α A)], Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) A
-Case conversion may be inaccurate. Consider using '#align matrix.invertible__of_invertible_transpose Matrix.invertibleOfInvertibleTransposeₓ'. -/
 /-- A matrix is invertible if the transpose is invertible. -/
 def invertibleOfInvertibleTranspose [Invertible Aᵀ] : Invertible A :=
   by
@@ -302,12 +194,6 @@ def invertibleOfInvertibleTranspose [Invertible Aᵀ] : Invertible A :=
   infer_instance
 #align matrix.invertible__of_invertible_transpose Matrix.invertibleOfInvertibleTranspose
 
-/- warning: matrix.invertible_of_invertible_conj_transpose -> Matrix.invertibleOfInvertibleConjTranspose is a dubious translation:
-lean 3 declaration is
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : StarRing.{u2} α (NonUnitalRing.toNonUnitalSemiring.{u2} α (NonUnitalCommRing.toNonUnitalRing.{u2} α (CommRing.toNonUnitalCommRing.{u2} α _inst_3)))] [_inst_5 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasMul.{u2, u1} n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.conjTranspose.{u2, u1, u1} n n α (InvolutiveStar.toHasStar.{u2} α (StarAddMonoid.toHasInvolutiveStar.{u2} α (AddCommMonoid.toAddMonoid.{u2} α (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalSemiring.toNonUnitalNonAssocSemiring.{u2} α (NonUnitalRing.toNonUnitalSemiring.{u2} α (NonUnitalCommRing.toNonUnitalRing.{u2} α (CommRing.toNonUnitalCommRing.{u2} α _inst_3)))))) (StarRing.toStarAddMonoid.{u2} α (NonUnitalRing.toNonUnitalSemiring.{u2} α (NonUnitalCommRing.toNonUnitalRing.{u2} α (CommRing.toNonUnitalCommRing.{u2} α _inst_3))) _inst_4))) A)], Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasMul.{u2, u1} n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) A
-but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : StarRing.{u2} α (NonUnitalCommSemiring.toNonUnitalSemiring.{u2} α (NonUnitalCommRing.toNonUnitalCommSemiring.{u2} α (CommRing.toNonUnitalCommRing.{u2} α _inst_3)))] [_inst_5 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Matrix.conjTranspose.{u2, u1, u1} n n α (InvolutiveStar.toStar.{u2} α (StarAddMonoid.toInvolutiveStar.{u2} α (AddMonoidWithOne.toAddMonoid.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (Ring.toAddGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (StarRing.toStarAddMonoid.{u2} α (NonUnitalCommSemiring.toNonUnitalSemiring.{u2} α (NonUnitalCommRing.toNonUnitalCommSemiring.{u2} α (CommRing.toNonUnitalCommRing.{u2} α _inst_3))) _inst_4))) A)], Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) A
-Case conversion may be inaccurate. Consider using '#align matrix.invertible_of_invertible_conj_transpose Matrix.invertibleOfInvertibleConjTransposeₓ'. -/
 /-- A matrix is invertible if the conjugate transpose is invertible. -/
 def invertibleOfInvertibleConjTranspose [StarRing α] [Invertible Aᴴ] : Invertible A :=
   by
@@ -315,23 +201,11 @@ def invertibleOfInvertibleConjTranspose [StarRing α] [Invertible Aᴴ] : Invert
   infer_instance
 #align matrix.invertible_of_invertible_conj_transpose Matrix.invertibleOfInvertibleConjTranspose
 
-/- warning: matrix.unit_of_det_invertible -> Matrix.unitOfDetInvertible is a dubious translation:
-lean 3 declaration is
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{u2} α (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)], Units.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Ring.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.ring.{u2, u1} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toRing.{u2} α _inst_3)))
-but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{u2} α (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)], Units.{max u2 u1} (Matrix.{u1, u1, u2} n n α) (MonoidWithZero.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Semiring.toMonoidWithZero.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.semiring.{u2, u1} n α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) _inst_1 (fun (a : n) (b : n) => _inst_2 a b))))
-Case conversion may be inaccurate. Consider using '#align matrix.unit_of_det_invertible Matrix.unitOfDetInvertibleₓ'. -/
 /-- Given a proof that `A.det` has a constructive inverse, lift `A` to `(matrix n n α)ˣ`-/
 def unitOfDetInvertible [Invertible A.det] : (Matrix n n α)ˣ :=
   @unitOfInvertible _ _ A (invertibleOfDetInvertible A)
 #align matrix.unit_of_det_invertible Matrix.unitOfDetInvertible
 
-/- warning: matrix.is_unit_iff_is_unit_det -> Matrix.isUnit_iff_isUnit_det is a dubious translation:
-lean 3 declaration is
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), Iff (IsUnit.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Ring.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.ring.{u2, u1} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toRing.{u2} α _inst_3))) A) (IsUnit.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A))
-but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), Iff (IsUnit.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (MonoidWithZero.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Semiring.toMonoidWithZero.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.semiring.{u2, u1} n α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) _inst_1 (fun (a : n) (b : n) => _inst_2 a b)))) A) (IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A))
-Case conversion may be inaccurate. Consider using '#align matrix.is_unit_iff_is_unit_det Matrix.isUnit_iff_isUnit_detₓ'. -/
 /-- When lowered to a prop, `matrix.invertible_equiv_det_invertible` forms an `iff`. -/
 theorem isUnit_iff_isUnit_det : IsUnit A ↔ IsUnit A.det := by
   simp only [← nonempty_invertible_iff_isUnit, (invertible_equiv_det_invertible A).nonempty_congr]
@@ -340,74 +214,32 @@ theorem isUnit_iff_isUnit_det : IsUnit A ↔ IsUnit A.det := by
 /-! #### Variants of the statements above with `is_unit`-/
 
 
-/- warning: matrix.is_unit_det_of_invertible -> Matrix.isUnit_det_of_invertible is a dubious translation:
-lean 3 declaration is
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasMul.{u2, u1} n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) A], IsUnit.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)
-but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) A], IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)
-Case conversion may be inaccurate. Consider using '#align matrix.is_unit_det_of_invertible Matrix.isUnit_det_of_invertibleₓ'. -/
 theorem isUnit_det_of_invertible [Invertible A] : IsUnit A.det :=
   @isUnit_of_invertible _ _ _ (detInvertibleOfInvertible A)
 #align matrix.is_unit_det_of_invertible Matrix.isUnit_det_of_invertible
 
 variable {A B}
 
-/- warning: matrix.is_unit_of_left_inverse -> Matrix.isUnit_of_left_inverse is a dubious translation:
-lean 3 declaration is
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] {A : Matrix.{u1, u1, u2} n n α} {B : Matrix.{u1, u1, u2} n n α}, (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) B A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (OfNat.mk.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.one.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))))))) -> (IsUnit.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Ring.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.ring.{u2, u1} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toRing.{u2} α _inst_3))) A)
-but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] {A : Matrix.{u1, u1, u2} n n α} {B : Matrix.{u1, u1, u2} n n α}, (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) B A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))))) -> (IsUnit.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (MonoidWithZero.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Semiring.toMonoidWithZero.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.semiring.{u2, u1} n α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) _inst_1 (fun (a : n) (b : n) => _inst_2 a b)))) A)
-Case conversion may be inaccurate. Consider using '#align matrix.is_unit_of_left_inverse Matrix.isUnit_of_left_inverseₓ'. -/
 theorem isUnit_of_left_inverse (h : B ⬝ A = 1) : IsUnit A :=
   ⟨⟨A, B, mul_eq_one_comm.mp h, h⟩, rfl⟩
 #align matrix.is_unit_of_left_inverse Matrix.isUnit_of_left_inverse
 
-/- warning: matrix.is_unit_of_right_inverse -> Matrix.isUnit_of_right_inverse is a dubious translation:
-lean 3 declaration is
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] {A : Matrix.{u1, u1, u2} n n α} {B : Matrix.{u1, u1, u2} n n α}, (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A B) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (OfNat.mk.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.one.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))))))) -> (IsUnit.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Ring.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.ring.{u2, u1} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toRing.{u2} α _inst_3))) A)
-but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] {A : Matrix.{u1, u1, u2} n n α} {B : Matrix.{u1, u1, u2} n n α}, (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A B) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))))) -> (IsUnit.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (MonoidWithZero.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Semiring.toMonoidWithZero.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.semiring.{u2, u1} n α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) _inst_1 (fun (a : n) (b : n) => _inst_2 a b)))) A)
-Case conversion may be inaccurate. Consider using '#align matrix.is_unit_of_right_inverse Matrix.isUnit_of_right_inverseₓ'. -/
 theorem isUnit_of_right_inverse (h : A ⬝ B = 1) : IsUnit A :=
   ⟨⟨A, B, h, mul_eq_one_comm.mp h⟩, rfl⟩
 #align matrix.is_unit_of_right_inverse Matrix.isUnit_of_right_inverse
 
-/- warning: matrix.is_unit_det_of_left_inverse -> Matrix.isUnit_det_of_left_inverse is a dubious translation:
-lean 3 declaration is
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] {A : Matrix.{u1, u1, u2} n n α} {B : Matrix.{u1, u1, u2} n n α}, (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) B A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (OfNat.mk.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.one.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))))))) -> (IsUnit.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A))
-but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] {A : Matrix.{u1, u1, u2} n n α} {B : Matrix.{u1, u1, u2} n n α}, (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) B A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))))) -> (IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A))
-Case conversion may be inaccurate. Consider using '#align matrix.is_unit_det_of_left_inverse Matrix.isUnit_det_of_left_inverseₓ'. -/
 theorem isUnit_det_of_left_inverse (h : B ⬝ A = 1) : IsUnit A.det :=
   @isUnit_of_invertible _ _ _ (detInvertibleOfLeftInverse _ _ h)
 #align matrix.is_unit_det_of_left_inverse Matrix.isUnit_det_of_left_inverse
 
-/- warning: matrix.is_unit_det_of_right_inverse -> Matrix.isUnit_det_of_right_inverse is a dubious translation:
-lean 3 declaration is
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] {A : Matrix.{u1, u1, u2} n n α} {B : Matrix.{u1, u1, u2} n n α}, (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A B) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (OfNat.mk.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.one.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))))))) -> (IsUnit.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A))
-but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] {A : Matrix.{u1, u1, u2} n n α} {B : Matrix.{u1, u1, u2} n n α}, (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A B) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))))) -> (IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A))
-Case conversion may be inaccurate. Consider using '#align matrix.is_unit_det_of_right_inverse Matrix.isUnit_det_of_right_inverseₓ'. -/
 theorem isUnit_det_of_right_inverse (h : A ⬝ B = 1) : IsUnit A.det :=
   @isUnit_of_invertible _ _ _ (detInvertibleOfRightInverse _ _ h)
 #align matrix.is_unit_det_of_right_inverse Matrix.isUnit_det_of_right_inverse
 
-/- warning: matrix.det_ne_zero_of_left_inverse -> Matrix.det_ne_zero_of_left_inverse is a dubious translation:
-lean 3 declaration is
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] {A : Matrix.{u1, u1, u2} n n α} {B : Matrix.{u1, u1, u2} n n α} [_inst_4 : Nontrivial.{u2} α], (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) B A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (OfNat.mk.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.one.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))))))) -> (Ne.{succ u2} α (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 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} α (CommRing.toRing.{u2} α _inst_3))))))))))
-but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] {A : Matrix.{u1, u1, u2} n n α} {B : Matrix.{u1, u1, u2} n n α} [_inst_4 : Nontrivial.{u2} α], (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) B A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))))) -> (Ne.{succ u2} α (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A) (OfNat.ofNat.{u2} α 0 (Zero.toOfNat0.{u2} α (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))))
-Case conversion may be inaccurate. Consider using '#align matrix.det_ne_zero_of_left_inverse Matrix.det_ne_zero_of_left_inverseₓ'. -/
 theorem det_ne_zero_of_left_inverse [Nontrivial α] (h : B ⬝ A = 1) : A.det ≠ 0 :=
   (isUnit_det_of_left_inverse h).NeZero
 #align matrix.det_ne_zero_of_left_inverse Matrix.det_ne_zero_of_left_inverse
 
-/- warning: matrix.det_ne_zero_of_right_inverse -> Matrix.det_ne_zero_of_right_inverse is a dubious translation:
-lean 3 declaration is
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] {A : Matrix.{u1, u1, u2} n n α} {B : Matrix.{u1, u1, u2} n n α} [_inst_4 : Nontrivial.{u2} α], (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A B) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (OfNat.mk.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.one.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))))))) -> (Ne.{succ u2} α (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 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} α (CommRing.toRing.{u2} α _inst_3))))))))))
-but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] {A : Matrix.{u1, u1, u2} n n α} {B : Matrix.{u1, u1, u2} n n α} [_inst_4 : Nontrivial.{u2} α], (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A B) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))))) -> (Ne.{succ u2} α (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A) (OfNat.ofNat.{u2} α 0 (Zero.toOfNat0.{u2} α (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))))
-Case conversion may be inaccurate. Consider using '#align matrix.det_ne_zero_of_right_inverse Matrix.det_ne_zero_of_right_inverseₓ'. -/
 theorem det_ne_zero_of_right_inverse [Nontrivial α] (h : A ⬝ B = 1) : A.det ≠ 0 :=
   (isUnit_det_of_right_inverse h).NeZero
 #align matrix.det_ne_zero_of_right_inverse Matrix.det_ne_zero_of_right_inverse
@@ -418,12 +250,6 @@ variable [Fintype n] [DecidableEq n] [CommRing α]
 
 variable (A : Matrix n n α) (B : Matrix n n α)
 
-/- warning: matrix.is_unit_det_transpose -> Matrix.isUnit_det_transpose is a dubious translation:
-lean 3 declaration is
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), (IsUnit.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (IsUnit.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 (Matrix.transpose.{u2, u1, u1} n n α A)))
-but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), (IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 (Matrix.transpose.{u2, u1, u1} n n α A)))
-Case conversion may be inaccurate. Consider using '#align matrix.is_unit_det_transpose Matrix.isUnit_det_transposeₓ'. -/
 theorem isUnit_det_transpose (h : IsUnit A.det) : IsUnit Aᵀ.det := by rw [det_transpose]; exact h
 #align matrix.is_unit_det_transpose Matrix.isUnit_det_transpose
 
@@ -434,42 +260,18 @@ theorem isUnit_det_transpose (h : IsUnit A.det) : IsUnit Aᵀ.det := by rw [det_
 noncomputable instance : Inv (Matrix n n α) :=
   ⟨fun A => Ring.inverse A.det • A.adjugate⟩
 
-/- warning: matrix.inv_def -> Matrix.inv_def is a dubious translation:
-lean 3 declaration is
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) (SMul.smul.{u2, max u1 u2} α (Matrix.{u1, u1, u2} n n α) (Matrix.hasSmul.{u2, u1, u1, u2} n n α α (Mul.toSMul.{u2} α (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Ring.inverse.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) (Matrix.adjugate.{u1, u2} n α (fun (a : n) (b : n) => _inst_2 a b) _inst_1 _inst_3 A))
-but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) (HSMul.hSMul.{u2, max u1 u2, max u1 u2} α (Matrix.{u1, u1, u2} n n α) (Matrix.{u1, u1, u2} n n α) (instHSMul.{u2, max u1 u2} α (Matrix.{u1, u1, u2} n n α) (Matrix.smul.{u2, u1, u1, u2} n n α α (Algebra.toSMul.{u2, u2} α α (CommRing.toCommSemiring.{u2} α _inst_3) (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (Algebra.id.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) (Ring.inverse.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) (Matrix.adjugate.{u1, u2} n α (fun (a : n) (b : n) => _inst_2 a b) _inst_1 _inst_3 A))
-Case conversion may be inaccurate. Consider using '#align matrix.inv_def Matrix.inv_defₓ'. -/
 theorem inv_def (A : Matrix n n α) : A⁻¹ = Ring.inverse A.det • A.adjugate :=
   rfl
 #align matrix.inv_def Matrix.inv_def
 
-/- warning: matrix.nonsing_inv_apply_not_is_unit -> Matrix.nonsing_inv_apply_not_isUnit is a dubious translation:
-lean 3 declaration is
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), (Not (IsUnit.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A))) -> (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 0 (OfNat.mk.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 0 (Zero.zero.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasZero.{u2, u1, u1} n n α (MulZeroClass.toHasZero.{u2} α (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))))))))
-but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), (Not (IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A))) -> (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 0 (Zero.toOfNat0.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.zero.{u2, u1, u1} n n α (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))))))
-Case conversion may be inaccurate. Consider using '#align matrix.nonsing_inv_apply_not_is_unit Matrix.nonsing_inv_apply_not_isUnitₓ'. -/
 theorem nonsing_inv_apply_not_isUnit (h : ¬IsUnit A.det) : A⁻¹ = 0 := by
   rw [inv_def, Ring.inverse_non_unit _ h, zero_smul]
 #align matrix.nonsing_inv_apply_not_is_unit Matrix.nonsing_inv_apply_not_isUnit
 
-/- warning: matrix.nonsing_inv_apply -> Matrix.nonsing_inv_apply is a dubious translation:
-lean 3 declaration is
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (h : IsUnit.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)), Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) (SMul.smul.{u2, max u1 u2} α (Matrix.{u1, u1, u2} n n α) (Matrix.hasSmul.{u2, u1, u1, u2} n n α α (Mul.toSMul.{u2} α (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))))) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (Units.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3))) α (HasLiftT.mk.{succ u2, succ u2} (Units.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3))) α (CoeTCₓ.coe.{succ u2, succ u2} (Units.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3))) α (coeBase.{succ u2, succ u2} (Units.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3))) α (Units.hasCoe.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Inv.inv.{u2} (Units.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3))) (Units.hasInv.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3))) (IsUnit.unit.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A) h))) (Matrix.adjugate.{u1, u2} n α (fun (a : n) (b : n) => _inst_2 a b) _inst_1 _inst_3 A))
-but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (h : IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)), Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) (HSMul.hSMul.{u2, max u1 u2, max u1 u2} α (Matrix.{u1, u1, u2} n n α) (Matrix.{u1, u1, u2} n n α) (instHSMul.{u2, max u1 u2} α (Matrix.{u1, u1, u2} n n α) (Matrix.smul.{u2, u1, u1, u2} n n α α (Algebra.toSMul.{u2, u2} α α (CommRing.toCommSemiring.{u2} α _inst_3) (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (Algebra.id.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) (Units.val.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Inv.inv.{u2} (Units.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) (Units.instInv.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) (IsUnit.unit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A) h))) (Matrix.adjugate.{u1, u2} n α (fun (a : n) (b : n) => _inst_2 a b) _inst_1 _inst_3 A))
-Case conversion may be inaccurate. Consider using '#align matrix.nonsing_inv_apply Matrix.nonsing_inv_applyₓ'. -/
 theorem nonsing_inv_apply (h : IsUnit A.det) : A⁻¹ = (↑h.Unit⁻¹ : α) • A.adjugate := by
   rw [inv_def, ← Ring.inverse_unit h.unit, IsUnit.unit_spec]
 #align matrix.nonsing_inv_apply Matrix.nonsing_inv_apply
 
-/- warning: matrix.inv_of_eq_nonsing_inv -> Matrix.invOf_eq_nonsing_inv is a dubious translation:
-lean 3 declaration is
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasMul.{u2, u1} n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) A], Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Invertible.invOf.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasMul.{u2, u1} n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) A _inst_4) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)
-but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) A], Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Invertible.invOf.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) A _inst_4) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)
-Case conversion may be inaccurate. Consider using '#align matrix.inv_of_eq_nonsing_inv Matrix.invOf_eq_nonsing_invₓ'. -/
 /-- The nonsingular inverse is the same as `inv_of` when `A` is invertible. -/
 @[simp]
 theorem invOf_eq_nonsing_inv [Invertible A] : ⅟ A = A⁻¹ :=
@@ -478,12 +280,6 @@ theorem invOf_eq_nonsing_inv [Invertible A] : ⅟ A = A⁻¹ :=
   rw [inv_def, Ring.inverse_invertible, inv_of_eq]
 #align matrix.inv_of_eq_nonsing_inv Matrix.invOf_eq_nonsing_inv
 
-/- warning: matrix.coe_units_inv -> Matrix.coe_units_inv is a dubious translation:
-lean 3 declaration is
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Units.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Ring.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.ring.{u2, u1} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toRing.{u2} α _inst_3)))), Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) ((fun (a : Type.{max u1 u2}) (b : Type.{max u1 u2}) [self : HasLiftT.{succ (max u1 u2), succ (max u1 u2)} a b] => self.0) (Units.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Ring.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.ring.{u2, u1} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toRing.{u2} α _inst_3)))) (Matrix.{u1, u1, u2} n n α) (HasLiftT.mk.{succ (max u1 u2), succ (max u1 u2)} (Units.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Ring.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.ring.{u2, u1} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toRing.{u2} α _inst_3)))) (Matrix.{u1, u1, u2} n n α) (CoeTCₓ.coe.{succ (max u1 u2), succ (max u1 u2)} (Units.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Ring.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.ring.{u2, u1} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toRing.{u2} α _inst_3)))) (Matrix.{u1, u1, u2} n n α) (coeBase.{succ (max u1 u2), succ (max u1 u2)} (Units.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Ring.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.ring.{u2, u1} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toRing.{u2} α _inst_3)))) (Matrix.{u1, u1, u2} n n α) (Units.hasCoe.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Ring.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.ring.{u2, u1} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toRing.{u2} α _inst_3))))))) (Inv.inv.{max u1 u2} (Units.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Ring.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.ring.{u2, u1} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toRing.{u2} α _inst_3)))) (Units.hasInv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Ring.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.ring.{u2, u1} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toRing.{u2} α _inst_3)))) A)) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) ((fun (a : Type.{max u1 u2}) (b : Type.{max u1 u2}) [self : HasLiftT.{succ (max u1 u2), succ (max u1 u2)} a b] => self.0) (Units.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Ring.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.ring.{u2, u1} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toRing.{u2} α _inst_3)))) (Matrix.{u1, u1, u2} n n α) (HasLiftT.mk.{succ (max u1 u2), succ (max u1 u2)} (Units.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Ring.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.ring.{u2, u1} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toRing.{u2} α _inst_3)))) (Matrix.{u1, u1, u2} n n α) (CoeTCₓ.coe.{succ (max u1 u2), succ (max u1 u2)} (Units.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Ring.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.ring.{u2, u1} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toRing.{u2} α _inst_3)))) (Matrix.{u1, u1, u2} n n α) (coeBase.{succ (max u1 u2), succ (max u1 u2)} (Units.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Ring.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.ring.{u2, u1} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toRing.{u2} α _inst_3)))) (Matrix.{u1, u1, u2} n n α) (Units.hasCoe.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Ring.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.ring.{u2, u1} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toRing.{u2} α _inst_3))))))) A))
-but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Units.{max u2 u1} (Matrix.{u1, u1, u2} n n α) (MonoidWithZero.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Semiring.toMonoidWithZero.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.semiring.{u2, u1} n α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) _inst_1 (fun (a : n) (b : n) => _inst_2 a b))))), Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Units.val.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (MonoidWithZero.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Semiring.toMonoidWithZero.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.semiring.{u2, u1} n α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) _inst_1 (fun (a : n) (b : n) => _inst_2 a b)))) (Inv.inv.{max u1 u2} (Units.{max u2 u1} (Matrix.{u1, u1, u2} n n α) (MonoidWithZero.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Semiring.toMonoidWithZero.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.semiring.{u2, u1} n α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) _inst_1 (fun (a : n) (b : n) => _inst_2 a b))))) (Units.instInv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (MonoidWithZero.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Semiring.toMonoidWithZero.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.semiring.{u2, u1} n α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) _inst_1 (fun (a : n) (b : n) => _inst_2 a b))))) A)) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) (Units.val.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (MonoidWithZero.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Semiring.toMonoidWithZero.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.semiring.{u2, u1} n α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) _inst_1 (fun (a : n) (b : n) => _inst_2 a b)))) A))
-Case conversion may be inaccurate. Consider using '#align matrix.coe_units_inv Matrix.coe_units_invₓ'. -/
 /-- Coercing the result of `units.has_inv` is the same as coercing first and applying the
 nonsingular inverse. -/
 @[simp, norm_cast]
@@ -493,12 +289,6 @@ theorem coe_units_inv (A : (Matrix n n α)ˣ) : ↑A⁻¹ = (A⁻¹ : Matrix n n
   rw [← inv_of_eq_nonsing_inv, invOf_units]
 #align matrix.coe_units_inv Matrix.coe_units_inv
 
-/- warning: matrix.nonsing_inv_eq_ring_inverse -> Matrix.nonsing_inv_eq_ring_inverse is a dubious translation:
-lean 3 declaration is
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) (Ring.inverse.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Semiring.toMonoidWithZero.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.semiring.{u2, u1} n α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) _inst_1 (fun (a : n) (b : n) => _inst_2 a b))) A)
-but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) (Ring.inverse.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Semiring.toMonoidWithZero.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.semiring.{u2, u1} n α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) _inst_1 (fun (a : n) (b : n) => _inst_2 a b))) A)
-Case conversion may be inaccurate. Consider using '#align matrix.nonsing_inv_eq_ring_inverse Matrix.nonsing_inv_eq_ring_inverseₓ'. -/
 /-- The nonsingular inverse is the same as the general `ring.inverse`. -/
 theorem nonsing_inv_eq_ring_inverse : A⁻¹ = Ring.inverse A :=
   by
@@ -509,33 +299,15 @@ theorem nonsing_inv_eq_ring_inverse : A⁻¹ = Ring.inverse A :=
     rw [Ring.inverse_non_unit _ h, nonsing_inv_apply_not_is_unit A h_det]
 #align matrix.nonsing_inv_eq_ring_inverse Matrix.nonsing_inv_eq_ring_inverse
 
-/- warning: matrix.transpose_nonsing_inv -> Matrix.transpose_nonsing_inv is a dubious translation:
-lean 3 declaration is
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.transpose.{u2, u1, u1} n n α (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) (Matrix.transpose.{u2, u1, u1} n n α A))
-but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.transpose.{u2, u1, u1} n n α (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) (Matrix.transpose.{u2, u1, u1} n n α A))
-Case conversion may be inaccurate. Consider using '#align matrix.transpose_nonsing_inv Matrix.transpose_nonsing_invₓ'. -/
 theorem transpose_nonsing_inv : A⁻¹ᵀ = Aᵀ⁻¹ := by
   rw [inv_def, inv_def, transpose_smul, det_transpose, adjugate_transpose]
 #align matrix.transpose_nonsing_inv Matrix.transpose_nonsing_inv
 
-/- warning: matrix.conj_transpose_nonsing_inv -> Matrix.conjTranspose_nonsing_inv is a dubious translation:
-lean 3 declaration is
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : StarRing.{u2} α (NonUnitalRing.toNonUnitalSemiring.{u2} α (NonUnitalCommRing.toNonUnitalRing.{u2} α (CommRing.toNonUnitalCommRing.{u2} α _inst_3)))], Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.conjTranspose.{u2, u1, u1} n n α (InvolutiveStar.toHasStar.{u2} α (StarAddMonoid.toHasInvolutiveStar.{u2} α (AddCommMonoid.toAddMonoid.{u2} α (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalSemiring.toNonUnitalNonAssocSemiring.{u2} α (NonUnitalRing.toNonUnitalSemiring.{u2} α (NonUnitalCommRing.toNonUnitalRing.{u2} α (CommRing.toNonUnitalCommRing.{u2} α _inst_3)))))) (StarRing.toStarAddMonoid.{u2} α (NonUnitalRing.toNonUnitalSemiring.{u2} α (NonUnitalCommRing.toNonUnitalRing.{u2} α (CommRing.toNonUnitalCommRing.{u2} α _inst_3))) _inst_4))) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) (Matrix.conjTranspose.{u2, u1, u1} n n α (InvolutiveStar.toHasStar.{u2} α (StarAddMonoid.toHasInvolutiveStar.{u2} α (AddCommMonoid.toAddMonoid.{u2} α (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalSemiring.toNonUnitalNonAssocSemiring.{u2} α (NonUnitalRing.toNonUnitalSemiring.{u2} α (NonUnitalCommRing.toNonUnitalRing.{u2} α (CommRing.toNonUnitalCommRing.{u2} α _inst_3)))))) (StarRing.toStarAddMonoid.{u2} α (NonUnitalRing.toNonUnitalSemiring.{u2} α (NonUnitalCommRing.toNonUnitalRing.{u2} α (CommRing.toNonUnitalCommRing.{u2} α _inst_3))) _inst_4))) A))
-but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : StarRing.{u2} α (NonUnitalCommSemiring.toNonUnitalSemiring.{u2} α (NonUnitalCommRing.toNonUnitalCommSemiring.{u2} α (CommRing.toNonUnitalCommRing.{u2} α _inst_3)))], Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.conjTranspose.{u2, u1, u1} n n α (InvolutiveStar.toStar.{u2} α (StarAddMonoid.toInvolutiveStar.{u2} α (AddMonoidWithOne.toAddMonoid.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (Ring.toAddGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (StarRing.toStarAddMonoid.{u2} α (NonUnitalCommSemiring.toNonUnitalSemiring.{u2} α (NonUnitalCommRing.toNonUnitalCommSemiring.{u2} α (CommRing.toNonUnitalCommRing.{u2} α _inst_3))) _inst_4))) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) (Matrix.conjTranspose.{u2, u1, u1} n n α (InvolutiveStar.toStar.{u2} α (StarAddMonoid.toInvolutiveStar.{u2} α (AddMonoidWithOne.toAddMonoid.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (Ring.toAddGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (StarRing.toStarAddMonoid.{u2} α (NonUnitalCommSemiring.toNonUnitalSemiring.{u2} α (NonUnitalCommRing.toNonUnitalCommSemiring.{u2} α (CommRing.toNonUnitalCommRing.{u2} α _inst_3))) _inst_4))) A))
-Case conversion may be inaccurate. Consider using '#align matrix.conj_transpose_nonsing_inv Matrix.conjTranspose_nonsing_invₓ'. -/
 theorem conjTranspose_nonsing_inv [StarRing α] : A⁻¹ᴴ = Aᴴ⁻¹ := by
   rw [inv_def, inv_def, conj_transpose_smul, det_conj_transpose, adjugate_conj_transpose,
     Ring.inverse_star]
 #align matrix.conj_transpose_nonsing_inv Matrix.conjTranspose_nonsing_inv
 
-/- warning: matrix.mul_nonsing_inv -> Matrix.mul_nonsing_inv is a dubious translation:
-lean 3 declaration is
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), (IsUnit.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (OfNat.mk.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.one.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3))))))))))
-but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), (IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))))))
-Case conversion may be inaccurate. Consider using '#align matrix.mul_nonsing_inv Matrix.mul_nonsing_invₓ'. -/
 /-- The `nonsing_inv` of `A` is a right inverse. -/
 @[simp]
 theorem mul_nonsing_inv (h : IsUnit A.det) : A ⬝ A⁻¹ = 1 :=
@@ -544,12 +316,6 @@ theorem mul_nonsing_inv (h : IsUnit A.det) : A ⬝ A⁻¹ = 1 :=
   rw [← inv_of_eq_nonsing_inv, Matrix.mul_invOf_self]
 #align matrix.mul_nonsing_inv Matrix.mul_nonsing_inv
 
-/- warning: matrix.nonsing_inv_mul -> Matrix.nonsing_inv_mul is a dubious translation:
-lean 3 declaration is
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), (IsUnit.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (OfNat.mk.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.one.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3))))))))))
-but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), (IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))))))
-Case conversion may be inaccurate. Consider using '#align matrix.nonsing_inv_mul Matrix.nonsing_inv_mulₓ'. -/
 /-- The `nonsing_inv` of `A` is a left inverse. -/
 @[simp]
 theorem nonsing_inv_mul (h : IsUnit A.det) : A⁻¹ ⬝ A = 1 :=
@@ -560,157 +326,73 @@ theorem nonsing_inv_mul (h : IsUnit A.det) : A⁻¹ ⬝ A = 1 :=
 
 instance [Invertible A] : Invertible A⁻¹ := by rw [← inv_of_eq_nonsing_inv]; infer_instance
 
-/- warning: matrix.inv_inv_of_invertible -> Matrix.inv_inv_of_invertible is a dubious translation:
-lean 3 declaration is
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasMul.{u2, u1} n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) A], Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)) A
-but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) A], Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)) A
-Case conversion may be inaccurate. Consider using '#align matrix.inv_inv_of_invertible Matrix.inv_inv_of_invertibleₓ'. -/
 @[simp]
 theorem inv_inv_of_invertible [Invertible A] : A⁻¹⁻¹ = A := by
   simp only [← inv_of_eq_nonsing_inv, invOf_invOf]
 #align matrix.inv_inv_of_invertible Matrix.inv_inv_of_invertible
 
-/- warning: matrix.mul_nonsing_inv_cancel_right -> Matrix.mul_nonsing_inv_cancel_right is a dubious translation:
-lean 3 declaration is
-  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] (A : Matrix.{u2, u2, u3} n n α) (B : Matrix.{u1, u2, u3} m n α), (IsUnit.{u3} α (Ring.toMonoid.{u3} α (CommRing.toRing.{u3} α _inst_3)) (Matrix.det.{u3, u2} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{succ (max u1 u2 u3)} (Matrix.{u1, u2, u3} m n α) (Matrix.mul.{u3, u1, u2, u2} m n n α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) (Matrix.mul.{u3, u1, u2, u2} m n n α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) B A) (Inv.inv.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.hasInv.{u2, u3} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)) B)
-but is expected to have type
-  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] (A : Matrix.{u2, u2, u3} n n α) (B : Matrix.{u1, u2, u3} m n α), (IsUnit.{u3} α (MonoidWithZero.toMonoid.{u3} α (Semiring.toMonoidWithZero.{u3} α (CommSemiring.toSemiring.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3)))) (Matrix.det.{u3, u2} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{max (max (succ u1) (succ u2)) (succ u3)} (Matrix.{u1, u2, u3} m n α) (Matrix.mul.{u3, u1, u2, u2} m n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) (Matrix.mul.{u3, u1, u2, u2} m n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) B A) (Inv.inv.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.inv.{u2, u3} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)) B)
-Case conversion may be inaccurate. Consider using '#align matrix.mul_nonsing_inv_cancel_right Matrix.mul_nonsing_inv_cancel_rightₓ'. -/
 @[simp]
 theorem mul_nonsing_inv_cancel_right (B : Matrix m n α) (h : IsUnit A.det) : B ⬝ A ⬝ A⁻¹ = B := by
   simp [Matrix.mul_assoc, mul_nonsing_inv A h]
 #align matrix.mul_nonsing_inv_cancel_right Matrix.mul_nonsing_inv_cancel_right
 
-/- warning: matrix.mul_nonsing_inv_cancel_left -> Matrix.mul_nonsing_inv_cancel_left is a dubious translation:
-lean 3 declaration is
-  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] (A : Matrix.{u2, u2, u3} n n α) (B : Matrix.{u2, u1, u3} n m α), (IsUnit.{u3} α (Ring.toMonoid.{u3} α (CommRing.toRing.{u3} α _inst_3)) (Matrix.det.{u3, u2} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{succ (max u2 u1 u3)} (Matrix.{u2, u1, u3} n m α) (Matrix.mul.{u3, u2, u2, u1} n n m α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) A (Matrix.mul.{u3, u2, u2, u1} n n m α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) (Inv.inv.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.hasInv.{u2, u3} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) B)) B)
-but is expected to have type
-  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] (A : Matrix.{u2, u2, u3} n n α) (B : Matrix.{u2, u1, u3} n m α), (IsUnit.{u3} α (MonoidWithZero.toMonoid.{u3} α (Semiring.toMonoidWithZero.{u3} α (CommSemiring.toSemiring.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3)))) (Matrix.det.{u3, u2} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{max (max (succ u1) (succ u2)) (succ u3)} (Matrix.{u2, u1, u3} n m α) (Matrix.mul.{u3, u2, u2, u1} n n m α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) A (Matrix.mul.{u3, u2, u2, u1} n n m α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) (Inv.inv.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.inv.{u2, u3} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) B)) B)
-Case conversion may be inaccurate. Consider using '#align matrix.mul_nonsing_inv_cancel_left Matrix.mul_nonsing_inv_cancel_leftₓ'. -/
 @[simp]
 theorem mul_nonsing_inv_cancel_left (B : Matrix n m α) (h : IsUnit A.det) : A ⬝ (A⁻¹ ⬝ B) = B := by
   simp [← Matrix.mul_assoc, mul_nonsing_inv A h]
 #align matrix.mul_nonsing_inv_cancel_left Matrix.mul_nonsing_inv_cancel_left
 
-/- warning: matrix.nonsing_inv_mul_cancel_right -> Matrix.nonsing_inv_mul_cancel_right is a dubious translation:
-lean 3 declaration is
-  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] (A : Matrix.{u2, u2, u3} n n α) (B : Matrix.{u1, u2, u3} m n α), (IsUnit.{u3} α (Ring.toMonoid.{u3} α (CommRing.toRing.{u3} α _inst_3)) (Matrix.det.{u3, u2} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{succ (max u1 u2 u3)} (Matrix.{u1, u2, u3} m n α) (Matrix.mul.{u3, u1, u2, u2} m n n α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) (Matrix.mul.{u3, u1, u2, u2} m n n α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) B (Inv.inv.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.hasInv.{u2, u3} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)) A) B)
-but is expected to have type
-  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] (A : Matrix.{u2, u2, u3} n n α) (B : Matrix.{u1, u2, u3} m n α), (IsUnit.{u3} α (MonoidWithZero.toMonoid.{u3} α (Semiring.toMonoidWithZero.{u3} α (CommSemiring.toSemiring.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3)))) (Matrix.det.{u3, u2} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{max (max (succ u1) (succ u2)) (succ u3)} (Matrix.{u1, u2, u3} m n α) (Matrix.mul.{u3, u1, u2, u2} m n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) (Matrix.mul.{u3, u1, u2, u2} m n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) B (Inv.inv.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.inv.{u2, u3} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)) A) B)
-Case conversion may be inaccurate. Consider using '#align matrix.nonsing_inv_mul_cancel_right Matrix.nonsing_inv_mul_cancel_rightₓ'. -/
 @[simp]
 theorem nonsing_inv_mul_cancel_right (B : Matrix m n α) (h : IsUnit A.det) : B ⬝ A⁻¹ ⬝ A = B := by
   simp [Matrix.mul_assoc, nonsing_inv_mul A h]
 #align matrix.nonsing_inv_mul_cancel_right Matrix.nonsing_inv_mul_cancel_right
 
-/- warning: matrix.nonsing_inv_mul_cancel_left -> Matrix.nonsing_inv_mul_cancel_left is a dubious translation:
-lean 3 declaration is
-  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] (A : Matrix.{u2, u2, u3} n n α) (B : Matrix.{u2, u1, u3} n m α), (IsUnit.{u3} α (Ring.toMonoid.{u3} α (CommRing.toRing.{u3} α _inst_3)) (Matrix.det.{u3, u2} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{succ (max u2 u1 u3)} (Matrix.{u2, u1, u3} n m α) (Matrix.mul.{u3, u2, u2, u1} n n m α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) (Inv.inv.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.hasInv.{u2, u3} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) (Matrix.mul.{u3, u2, u2, u1} n n m α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) A B)) B)
-but is expected to have type
-  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] (A : Matrix.{u2, u2, u3} n n α) (B : Matrix.{u2, u1, u3} n m α), (IsUnit.{u3} α (MonoidWithZero.toMonoid.{u3} α (Semiring.toMonoidWithZero.{u3} α (CommSemiring.toSemiring.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3)))) (Matrix.det.{u3, u2} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{max (max (succ u1) (succ u2)) (succ u3)} (Matrix.{u2, u1, u3} n m α) (Matrix.mul.{u3, u2, u2, u1} n n m α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) (Inv.inv.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.inv.{u2, u3} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) (Matrix.mul.{u3, u2, u2, u1} n n m α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) A B)) B)
-Case conversion may be inaccurate. Consider using '#align matrix.nonsing_inv_mul_cancel_left Matrix.nonsing_inv_mul_cancel_leftₓ'. -/
 @[simp]
 theorem nonsing_inv_mul_cancel_left (B : Matrix n m α) (h : IsUnit A.det) : A⁻¹ ⬝ (A ⬝ B) = B := by
   simp [← Matrix.mul_assoc, nonsing_inv_mul A h]
 #align matrix.nonsing_inv_mul_cancel_left Matrix.nonsing_inv_mul_cancel_left
 
-/- warning: matrix.mul_inv_of_invertible -> Matrix.mul_inv_of_invertible is a dubious translation:
-lean 3 declaration is
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasMul.{u2, u1} n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) A], Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (OfNat.mk.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.one.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))))))
-but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) A], Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))))
-Case conversion may be inaccurate. Consider using '#align matrix.mul_inv_of_invertible Matrix.mul_inv_of_invertibleₓ'. -/
 @[simp]
 theorem mul_inv_of_invertible [Invertible A] : A ⬝ A⁻¹ = 1 :=
   mul_nonsing_inv A (isUnit_det_of_invertible A)
 #align matrix.mul_inv_of_invertible Matrix.mul_inv_of_invertible
 
-/- warning: matrix.inv_mul_of_invertible -> Matrix.inv_mul_of_invertible is a dubious translation:
-lean 3 declaration is
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasMul.{u2, u1} n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) A], Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (OfNat.mk.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.one.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))))))
-but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) A], Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))))
-Case conversion may be inaccurate. Consider using '#align matrix.inv_mul_of_invertible Matrix.inv_mul_of_invertibleₓ'. -/
 @[simp]
 theorem inv_mul_of_invertible [Invertible A] : A⁻¹ ⬝ A = 1 :=
   nonsing_inv_mul A (isUnit_det_of_invertible A)
 #align matrix.inv_mul_of_invertible Matrix.inv_mul_of_invertible
 
-/- warning: matrix.mul_inv_cancel_right_of_invertible -> Matrix.mul_inv_cancel_right_of_invertible is a dubious translation:
-lean 3 declaration is
-  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] (A : Matrix.{u2, u2, u3} n n α) (B : Matrix.{u1, u2, u3} m n α) [_inst_4 : Invertible.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.hasMul.{u3, u2} n α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.hasOne.{u3, u2} 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} α (CommRing.toRing.{u3} α _inst_3)))))) (AddMonoidWithOne.toOne.{u3} α (AddGroupWithOne.toAddMonoidWithOne.{u3} α (AddCommGroupWithOne.toAddGroupWithOne.{u3} α (Ring.toAddCommGroupWithOne.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) A], Eq.{succ (max u1 u2 u3)} (Matrix.{u1, u2, u3} m n α) (Matrix.mul.{u3, u1, u2, u2} m n n α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) (Matrix.mul.{u3, u1, u2, u2} m n n α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) B A) (Inv.inv.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.hasInv.{u2, u3} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)) B
-but is expected to have type
-  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] (A : Matrix.{u2, u2, u3} n n α) (B : Matrix.{u1, u2, u3} m n α) [_inst_4 : Invertible.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.instMulMatrix.{u3, u2} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u2} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (Semiring.toOne.{u3} α (CommSemiring.toSemiring.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3)))) A], Eq.{max (max (succ u1) (succ u2)) (succ u3)} (Matrix.{u1, u2, u3} m n α) (Matrix.mul.{u3, u1, u2, u2} m n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) (Matrix.mul.{u3, u1, u2, u2} m n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) B A) (Inv.inv.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.inv.{u2, u3} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)) B
-Case conversion may be inaccurate. Consider using '#align matrix.mul_inv_cancel_right_of_invertible Matrix.mul_inv_cancel_right_of_invertibleₓ'. -/
 @[simp]
 theorem mul_inv_cancel_right_of_invertible (B : Matrix m n α) [Invertible A] : B ⬝ A ⬝ A⁻¹ = B :=
   mul_nonsing_inv_cancel_right A B (isUnit_det_of_invertible A)
 #align matrix.mul_inv_cancel_right_of_invertible Matrix.mul_inv_cancel_right_of_invertible
 
-/- warning: matrix.mul_inv_cancel_left_of_invertible -> Matrix.mul_inv_cancel_left_of_invertible is a dubious translation:
-lean 3 declaration is
-  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] (A : Matrix.{u2, u2, u3} n n α) (B : Matrix.{u2, u1, u3} n m α) [_inst_4 : Invertible.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.hasMul.{u3, u2} n α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.hasOne.{u3, u2} 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} α (CommRing.toRing.{u3} α _inst_3)))))) (AddMonoidWithOne.toOne.{u3} α (AddGroupWithOne.toAddMonoidWithOne.{u3} α (AddCommGroupWithOne.toAddGroupWithOne.{u3} α (Ring.toAddCommGroupWithOne.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) A], Eq.{succ (max u2 u1 u3)} (Matrix.{u2, u1, u3} n m α) (Matrix.mul.{u3, u2, u2, u1} n n m α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) A (Matrix.mul.{u3, u2, u2, u1} n n m α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) (Inv.inv.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.hasInv.{u2, u3} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) B)) B
-but is expected to have type
-  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] (A : Matrix.{u2, u2, u3} n n α) (B : Matrix.{u2, u1, u3} n m α) [_inst_4 : Invertible.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.instMulMatrix.{u3, u2} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u2} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (Semiring.toOne.{u3} α (CommSemiring.toSemiring.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3)))) A], Eq.{max (max (succ u1) (succ u2)) (succ u3)} (Matrix.{u2, u1, u3} n m α) (Matrix.mul.{u3, u2, u2, u1} n n m α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) A (Matrix.mul.{u3, u2, u2, u1} n n m α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) (Inv.inv.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.inv.{u2, u3} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) B)) B
-Case conversion may be inaccurate. Consider using '#align matrix.mul_inv_cancel_left_of_invertible Matrix.mul_inv_cancel_left_of_invertibleₓ'. -/
 @[simp]
 theorem mul_inv_cancel_left_of_invertible (B : Matrix n m α) [Invertible A] : A ⬝ (A⁻¹ ⬝ B) = B :=
   mul_nonsing_inv_cancel_left A B (isUnit_det_of_invertible A)
 #align matrix.mul_inv_cancel_left_of_invertible Matrix.mul_inv_cancel_left_of_invertible
 
-/- warning: matrix.inv_mul_cancel_right_of_invertible -> Matrix.inv_mul_cancel_right_of_invertible is a dubious translation:
-lean 3 declaration is
-  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] (A : Matrix.{u2, u2, u3} n n α) (B : Matrix.{u1, u2, u3} m n α) [_inst_4 : Invertible.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.hasMul.{u3, u2} n α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.hasOne.{u3, u2} 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} α (CommRing.toRing.{u3} α _inst_3)))))) (AddMonoidWithOne.toOne.{u3} α (AddGroupWithOne.toAddMonoidWithOne.{u3} α (AddCommGroupWithOne.toAddGroupWithOne.{u3} α (Ring.toAddCommGroupWithOne.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) A], Eq.{succ (max u1 u2 u3)} (Matrix.{u1, u2, u3} m n α) (Matrix.mul.{u3, u1, u2, u2} m n n α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) (Matrix.mul.{u3, u1, u2, u2} m n n α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) B (Inv.inv.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.hasInv.{u2, u3} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)) A) B
-but is expected to have type
-  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] (A : Matrix.{u2, u2, u3} n n α) (B : Matrix.{u1, u2, u3} m n α) [_inst_4 : Invertible.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.instMulMatrix.{u3, u2} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u2} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (Semiring.toOne.{u3} α (CommSemiring.toSemiring.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3)))) A], Eq.{max (max (succ u1) (succ u2)) (succ u3)} (Matrix.{u1, u2, u3} m n α) (Matrix.mul.{u3, u1, u2, u2} m n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) (Matrix.mul.{u3, u1, u2, u2} m n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) B (Inv.inv.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.inv.{u2, u3} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)) A) B
-Case conversion may be inaccurate. Consider using '#align matrix.inv_mul_cancel_right_of_invertible Matrix.inv_mul_cancel_right_of_invertibleₓ'. -/
 @[simp]
 theorem inv_mul_cancel_right_of_invertible (B : Matrix m n α) [Invertible A] : B ⬝ A⁻¹ ⬝ A = B :=
   nonsing_inv_mul_cancel_right A B (isUnit_det_of_invertible A)
 #align matrix.inv_mul_cancel_right_of_invertible Matrix.inv_mul_cancel_right_of_invertible
 
-/- warning: matrix.inv_mul_cancel_left_of_invertible -> Matrix.inv_mul_cancel_left_of_invertible is a dubious translation:
-lean 3 declaration is
-  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] (A : Matrix.{u2, u2, u3} n n α) (B : Matrix.{u2, u1, u3} n m α) [_inst_4 : Invertible.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.hasMul.{u3, u2} n α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.hasOne.{u3, u2} 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} α (CommRing.toRing.{u3} α _inst_3)))))) (AddMonoidWithOne.toOne.{u3} α (AddGroupWithOne.toAddMonoidWithOne.{u3} α (AddCommGroupWithOne.toAddGroupWithOne.{u3} α (Ring.toAddCommGroupWithOne.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) A], Eq.{succ (max u2 u1 u3)} (Matrix.{u2, u1, u3} n m α) (Matrix.mul.{u3, u2, u2, u1} n n m α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) (Inv.inv.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.hasInv.{u2, u3} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) (Matrix.mul.{u3, u2, u2, u1} n n m α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) A B)) B
-but is expected to have type
-  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] (A : Matrix.{u2, u2, u3} n n α) (B : Matrix.{u2, u1, u3} n m α) [_inst_4 : Invertible.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.instMulMatrix.{u3, u2} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u2} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (Semiring.toOne.{u3} α (CommSemiring.toSemiring.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3)))) A], Eq.{max (max (succ u1) (succ u2)) (succ u3)} (Matrix.{u2, u1, u3} n m α) (Matrix.mul.{u3, u2, u2, u1} n n m α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) (Inv.inv.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.inv.{u2, u3} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) (Matrix.mul.{u3, u2, u2, u1} n n m α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) A B)) B
-Case conversion may be inaccurate. Consider using '#align matrix.inv_mul_cancel_left_of_invertible Matrix.inv_mul_cancel_left_of_invertibleₓ'. -/
 @[simp]
 theorem inv_mul_cancel_left_of_invertible (B : Matrix n m α) [Invertible A] : A⁻¹ ⬝ (A ⬝ B) = B :=
   nonsing_inv_mul_cancel_left A B (isUnit_det_of_invertible A)
 #align matrix.inv_mul_cancel_left_of_invertible Matrix.inv_mul_cancel_left_of_invertible
 
-/- warning: matrix.inv_mul_eq_iff_eq_mul_of_invertible -> Matrix.inv_mul_eq_iff_eq_mul_of_invertible is a dubious translation:
-lean 3 declaration is
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (B : Matrix.{u1, u1, u2} n n α) (C : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasMul.{u2, u1} n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) A], Iff (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) B) C) (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) B (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A C))
-but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (B : Matrix.{u1, u1, u2} n n α) (C : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) A], Iff (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) B) C) (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) B (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A C))
-Case conversion may be inaccurate. Consider using '#align matrix.inv_mul_eq_iff_eq_mul_of_invertible Matrix.inv_mul_eq_iff_eq_mul_of_invertibleₓ'. -/
 theorem inv_mul_eq_iff_eq_mul_of_invertible (A B C : Matrix n n α) [Invertible A] :
     A⁻¹ ⬝ B = C ↔ B = A ⬝ C :=
   ⟨fun h => by rw [← h, mul_inv_cancel_left_of_invertible], fun h => by
     rw [h, inv_mul_cancel_left_of_invertible]⟩
 #align matrix.inv_mul_eq_iff_eq_mul_of_invertible Matrix.inv_mul_eq_iff_eq_mul_of_invertible
 
-/- warning: matrix.mul_inv_eq_iff_eq_mul_of_invertible -> Matrix.mul_inv_eq_iff_eq_mul_of_invertible is a dubious translation:
-lean 3 declaration is
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (B : Matrix.{u1, u1, u2} n n α) (C : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasMul.{u2, u1} n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) A], Iff (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) B (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)) C) (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) B (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) C A))
-but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (B : Matrix.{u1, u1, u2} n n α) (C : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) A], Iff (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) B (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)) C) (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) B (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) C A))
-Case conversion may be inaccurate. Consider using '#align matrix.mul_inv_eq_iff_eq_mul_of_invertible Matrix.mul_inv_eq_iff_eq_mul_of_invertibleₓ'. -/
 theorem mul_inv_eq_iff_eq_mul_of_invertible (A B C : Matrix n n α) [Invertible A] :
     B ⬝ A⁻¹ = C ↔ B = C ⬝ A :=
   ⟨fun h => by rw [← h, inv_mul_cancel_right_of_invertible], fun h => by
     rw [h, mul_inv_cancel_right_of_invertible]⟩
 #align matrix.mul_inv_eq_iff_eq_mul_of_invertible Matrix.mul_inv_eq_iff_eq_mul_of_invertible
 
-/- warning: matrix.nonsing_inv_cancel_or_zero -> Matrix.nonsing_inv_cancel_or_zero is a dubious translation:
-lean 3 declaration is
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), Or (And (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (OfNat.mk.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.one.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))))))) (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (OfNat.mk.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.one.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3))))))))))) (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 0 (OfNat.mk.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 0 (Zero.zero.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasZero.{u2, u1, u1} n n α (MulZeroClass.toHasZero.{u2} α (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))))))))
-but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), Or (And (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))))) (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))))))) (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 0 (Zero.toOfNat0.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.zero.{u2, u1, u1} n n α (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))))))
-Case conversion may be inaccurate. Consider using '#align matrix.nonsing_inv_cancel_or_zero Matrix.nonsing_inv_cancel_or_zeroₓ'. -/
 theorem nonsing_inv_cancel_or_zero : A⁻¹ ⬝ A = 1 ∧ A ⬝ A⁻¹ = 1 ∨ A⁻¹ = 0 :=
   by
   by_cases h : IsUnit A.det
@@ -718,22 +400,10 @@ theorem nonsing_inv_cancel_or_zero : A⁻¹ ⬝ A = 1 ∧ A ⬝ A⁻¹ = 1 ∨ A
   · exact Or.inr (nonsing_inv_apply_not_is_unit _ h)
 #align matrix.nonsing_inv_cancel_or_zero Matrix.nonsing_inv_cancel_or_zero
 
-/- warning: matrix.det_nonsing_inv_mul_det -> Matrix.det_nonsing_inv_mul_det is a dubious translation:
-lean 3 declaration is
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), (IsUnit.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{succ u2} α (HMul.hMul.{u2, u2, u2} α α α (instHMul.{u2} α (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) (OfNat.ofNat.{u2} α 1 (OfNat.mk.{u2} α 1 (One.one.{u2} α (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))))))
-but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), (IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{succ u2} α (HMul.hMul.{u2, u2, u2} α α α (instHMul.{u2} α (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) (OfNat.ofNat.{u2} α 1 (One.toOfNat1.{u2} α (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))))
-Case conversion may be inaccurate. Consider using '#align matrix.det_nonsing_inv_mul_det Matrix.det_nonsing_inv_mul_detₓ'. -/
 theorem det_nonsing_inv_mul_det (h : IsUnit A.det) : A⁻¹.det * A.det = 1 := by
   rw [← det_mul, A.nonsing_inv_mul h, det_one]
 #align matrix.det_nonsing_inv_mul_det Matrix.det_nonsing_inv_mul_det
 
-/- warning: matrix.det_nonsing_inv -> Matrix.det_nonsing_inv is a dubious translation:
-lean 3 declaration is
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), Eq.{succ u2} α (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)) (Ring.inverse.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A))
-but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), Eq.{succ u2} α (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)) (Ring.inverse.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A))
-Case conversion may be inaccurate. Consider using '#align matrix.det_nonsing_inv Matrix.det_nonsing_invₓ'. -/
 @[simp]
 theorem det_nonsing_inv : A⁻¹.det = Ring.inverse A.det :=
   by
@@ -745,22 +415,10 @@ theorem det_nonsing_inv : A⁻¹.det = Ring.inverse A.det :=
   · rw [Ring.inverse_non_unit _ h, nonsing_inv_apply_not_is_unit _ h, det_zero ‹_›]
 #align matrix.det_nonsing_inv Matrix.det_nonsing_inv
 
-/- warning: matrix.is_unit_nonsing_inv_det -> Matrix.isUnit_nonsing_inv_det is a dubious translation:
-lean 3 declaration is
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), (IsUnit.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (IsUnit.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)))
-but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), (IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)))
-Case conversion may be inaccurate. Consider using '#align matrix.is_unit_nonsing_inv_det Matrix.isUnit_nonsing_inv_detₓ'. -/
 theorem isUnit_nonsing_inv_det (h : IsUnit A.det) : IsUnit A⁻¹.det :=
   isUnit_of_mul_eq_one _ _ (A.det_nonsing_inv_mul_det h)
 #align matrix.is_unit_nonsing_inv_det Matrix.isUnit_nonsing_inv_det
 
-/- warning: matrix.nonsing_inv_nonsing_inv -> Matrix.nonsing_inv_nonsing_inv is a dubious translation:
-lean 3 declaration is
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), (IsUnit.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)) A)
-but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), (IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)) A)
-Case conversion may be inaccurate. Consider using '#align matrix.nonsing_inv_nonsing_inv Matrix.nonsing_inv_nonsing_invₓ'. -/
 @[simp]
 theorem nonsing_inv_nonsing_inv (h : IsUnit A.det) : A⁻¹⁻¹ = A :=
   calc
@@ -771,22 +429,10 @@ theorem nonsing_inv_nonsing_inv (h : IsUnit A.det) : A⁻¹⁻¹ = A :=
     
 #align matrix.nonsing_inv_nonsing_inv Matrix.nonsing_inv_nonsing_inv
 
-/- warning: matrix.is_unit_nonsing_inv_det_iff -> Matrix.isUnit_nonsing_inv_det_iff is a dubious translation:
-lean 3 declaration is
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] {A : Matrix.{u1, u1, u2} n n α}, Iff (IsUnit.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A))) (IsUnit.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A))
-but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] {A : Matrix.{u1, u1, u2} n n α}, Iff (IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A))) (IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A))
-Case conversion may be inaccurate. Consider using '#align matrix.is_unit_nonsing_inv_det_iff Matrix.isUnit_nonsing_inv_det_iffₓ'. -/
 theorem isUnit_nonsing_inv_det_iff {A : Matrix n n α} : IsUnit A⁻¹.det ↔ IsUnit A.det := by
   rw [Matrix.det_nonsing_inv, isUnit_ring_inverse]
 #align matrix.is_unit_nonsing_inv_det_iff Matrix.isUnit_nonsing_inv_det_iff
 
-/- warning: matrix.invertible_of_is_unit_det -> Matrix.invertibleOfIsUnitDet is a dubious translation:
-lean 3 declaration is
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), (IsUnit.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasMul.{u2, u1} n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) A)
-but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), (IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) A)
-Case conversion may be inaccurate. Consider using '#align matrix.invertible_of_is_unit_det Matrix.invertibleOfIsUnitDetₓ'. -/
 -- `is_unit.invertible` lifts the proposition `is_unit A` to a constructive inverse of `A`.
 /-- A version of `matrix.invertible_of_det_invertible` with the inverse defeq to `A⁻¹` that is
 therefore noncomputable. -/
@@ -794,48 +440,24 @@ noncomputable def invertibleOfIsUnitDet (h : IsUnit A.det) : Invertible A :=
   ⟨A⁻¹, nonsing_inv_mul A h, mul_nonsing_inv A h⟩
 #align matrix.invertible_of_is_unit_det Matrix.invertibleOfIsUnitDet
 
-/- warning: matrix.nonsing_inv_unit -> Matrix.nonsingInvUnit is a dubious translation:
-lean 3 declaration is
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), (IsUnit.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Units.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Ring.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.ring.{u2, u1} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toRing.{u2} α _inst_3))))
-but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), (IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Units.{max u2 u1} (Matrix.{u1, u1, u2} n n α) (MonoidWithZero.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Semiring.toMonoidWithZero.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.semiring.{u2, u1} n α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) _inst_1 (fun (a : n) (b : n) => _inst_2 a b)))))
-Case conversion may be inaccurate. Consider using '#align matrix.nonsing_inv_unit Matrix.nonsingInvUnitₓ'. -/
 /-- A version of `matrix.units_of_det_invertible` with the inverse defeq to `A⁻¹` that is therefore
 noncomputable. -/
 noncomputable def nonsingInvUnit (h : IsUnit A.det) : (Matrix n n α)ˣ :=
   @unitOfInvertible _ _ _ (invertibleOfIsUnitDet A h)
 #align matrix.nonsing_inv_unit Matrix.nonsingInvUnit
 
-/- warning: matrix.unit_of_det_invertible_eq_nonsing_inv_unit -> Matrix.unitOfDetInvertible_eq_nonsingInvUnit is a dubious translation:
-lean 3 declaration is
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{u2} α (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)], Eq.{succ (max u1 u2)} (Units.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Ring.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.ring.{u2, u1} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toRing.{u2} α _inst_3)))) (Matrix.unitOfDetInvertible.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3 A _inst_4) (Matrix.nonsingInvUnit.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3 A (isUnit_of_invertible.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A) _inst_4))
-but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{u2} α (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)], Eq.{max (succ u1) (succ u2)} (Units.{max u2 u1} (Matrix.{u1, u1, u2} n n α) (MonoidWithZero.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Semiring.toMonoidWithZero.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.semiring.{u2, u1} n α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) _inst_1 (fun (a : n) (b : n) => _inst_2 a b))))) (Matrix.unitOfDetInvertible.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3 A _inst_4) (Matrix.nonsingInvUnit.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3 A (isUnit_of_invertible.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A) _inst_4))
-Case conversion may be inaccurate. Consider using '#align matrix.unit_of_det_invertible_eq_nonsing_inv_unit Matrix.unitOfDetInvertible_eq_nonsingInvUnitₓ'. -/
 theorem unitOfDetInvertible_eq_nonsingInvUnit [Invertible A.det] :
     unitOfDetInvertible A = nonsingInvUnit A (isUnit_of_invertible _) := by ext; rfl
 #align matrix.unit_of_det_invertible_eq_nonsing_inv_unit Matrix.unitOfDetInvertible_eq_nonsingInvUnit
 
 variable {A} {B}
 
-/- warning: matrix.inv_eq_left_inv -> Matrix.inv_eq_left_inv is a dubious translation:
-lean 3 declaration is
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] {A : Matrix.{u1, u1, u2} n n α} {B : Matrix.{u1, u1, u2} n n α}, (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) B A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (OfNat.mk.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.one.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))))))) -> (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) B)
-but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] {A : Matrix.{u1, u1, u2} n n α} {B : Matrix.{u1, u1, u2} n n α}, (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) B A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))))) -> (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) B)
-Case conversion may be inaccurate. Consider using '#align matrix.inv_eq_left_inv Matrix.inv_eq_left_invₓ'. -/
 /-- If matrix A is left invertible, then its inverse equals its left inverse. -/
 theorem inv_eq_left_inv (h : B ⬝ A = 1) : A⁻¹ = B :=
   letI := invertible_of_left_inverse _ _ h
   inv_of_eq_nonsing_inv A ▸ invOf_eq_left_inv h
 #align matrix.inv_eq_left_inv Matrix.inv_eq_left_inv
 
-/- warning: matrix.inv_eq_right_inv -> Matrix.inv_eq_right_inv is a dubious translation:
-lean 3 declaration is
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] {A : Matrix.{u1, u1, u2} n n α} {B : Matrix.{u1, u1, u2} n n α}, (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A B) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (OfNat.mk.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.one.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))))))) -> (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) B)
-but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] {A : Matrix.{u1, u1, u2} n n α} {B : Matrix.{u1, u1, u2} n n α}, (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A B) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))))) -> (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) B)
-Case conversion may be inaccurate. Consider using '#align matrix.inv_eq_right_inv Matrix.inv_eq_right_invₓ'. -/
 /-- If matrix A is right invertible, then its inverse equals its right inverse. -/
 theorem inv_eq_right_inv (h : A ⬝ B = 1) : A⁻¹ = B :=
   inv_eq_left_inv (mul_eq_one_comm.2 h)
@@ -845,45 +467,21 @@ section InvEqInv
 
 variable {C : Matrix n n α}
 
-/- warning: matrix.left_inv_eq_left_inv -> Matrix.left_inv_eq_left_inv is a dubious translation:
-lean 3 declaration is
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] {A : Matrix.{u1, u1, u2} n n α} {B : Matrix.{u1, u1, u2} n n α} {C : Matrix.{u1, u1, u2} n n α}, (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) B A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (OfNat.mk.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.one.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))))))) -> (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) C A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (OfNat.mk.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.one.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))))))) -> (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) B C)
-but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] {A : Matrix.{u1, u1, u2} n n α} {B : Matrix.{u1, u1, u2} n n α} {C : Matrix.{u1, u1, u2} n n α}, (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) B A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))))) -> (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) C A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))))) -> (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) B C)
-Case conversion may be inaccurate. Consider using '#align matrix.left_inv_eq_left_inv Matrix.left_inv_eq_left_invₓ'. -/
 /-- The left inverse of matrix A is unique when existing. -/
 theorem left_inv_eq_left_inv (h : B ⬝ A = 1) (g : C ⬝ A = 1) : B = C := by
   rw [← inv_eq_left_inv h, ← inv_eq_left_inv g]
 #align matrix.left_inv_eq_left_inv Matrix.left_inv_eq_left_inv
 
-/- warning: matrix.right_inv_eq_right_inv -> Matrix.right_inv_eq_right_inv is a dubious translation:
-lean 3 declaration is
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] {A : Matrix.{u1, u1, u2} n n α} {B : Matrix.{u1, u1, u2} n n α} {C : Matrix.{u1, u1, u2} n n α}, (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A B) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (OfNat.mk.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.one.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))))))) -> (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A C) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (OfNat.mk.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.one.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))))))) -> (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) B C)
-but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] {A : Matrix.{u1, u1, u2} n n α} {B : Matrix.{u1, u1, u2} n n α} {C : Matrix.{u1, u1, u2} n n α}, (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A B) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))))) -> (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A C) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))))) -> (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) B C)
-Case conversion may be inaccurate. Consider using '#align matrix.right_inv_eq_right_inv Matrix.right_inv_eq_right_invₓ'. -/
 /-- The right inverse of matrix A is unique when existing. -/
 theorem right_inv_eq_right_inv (h : A ⬝ B = 1) (g : A ⬝ C = 1) : B = C := by
   rw [← inv_eq_right_inv h, ← inv_eq_right_inv g]
 #align matrix.right_inv_eq_right_inv Matrix.right_inv_eq_right_inv
 
-/- warning: matrix.right_inv_eq_left_inv -> Matrix.right_inv_eq_left_inv is a dubious translation:
-lean 3 declaration is
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] {A : Matrix.{u1, u1, u2} n n α} {B : Matrix.{u1, u1, u2} n n α} {C : Matrix.{u1, u1, u2} n n α}, (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A B) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (OfNat.mk.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.one.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))))))) -> (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) C A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (OfNat.mk.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.one.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))))))) -> (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) B C)
-but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] {A : Matrix.{u1, u1, u2} n n α} {B : Matrix.{u1, u1, u2} n n α} {C : Matrix.{u1, u1, u2} n n α}, (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A B) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))))) -> (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) C A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))))) -> (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) B C)
-Case conversion may be inaccurate. Consider using '#align matrix.right_inv_eq_left_inv Matrix.right_inv_eq_left_invₓ'. -/
 /-- The right inverse of matrix A equals the left inverse of A when they exist. -/
 theorem right_inv_eq_left_inv (h : A ⬝ B = 1) (g : C ⬝ A = 1) : B = C := by
   rw [← inv_eq_right_inv h, ← inv_eq_left_inv g]
 #align matrix.right_inv_eq_left_inv Matrix.right_inv_eq_left_inv
 
-/- warning: matrix.inv_inj -> Matrix.inv_inj is a dubious translation:
-lean 3 declaration is
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] {A : Matrix.{u1, u1, u2} n n α} {B : Matrix.{u1, u1, u2} n n α}, (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) B)) -> (IsUnit.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) A B)
-but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] {A : Matrix.{u1, u1, u2} n n α} {B : Matrix.{u1, u1, u2} n n α}, (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) B)) -> (IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) A B)
-Case conversion may be inaccurate. Consider using '#align matrix.inv_inj Matrix.inv_injₓ'. -/
 theorem inv_inj (h : A⁻¹ = B⁻¹) (h' : IsUnit A.det) : A = B :=
   by
   refine' left_inv_eq_left_inv (mul_nonsing_inv _ h') _
@@ -896,12 +494,6 @@ end InvEqInv
 
 variable (A)
 
-/- warning: matrix.inv_zero -> Matrix.inv_zero is a dubious translation:
-lean 3 declaration is
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α], Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 0 (OfNat.mk.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 0 (Zero.zero.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasZero.{u2, u1, u1} n n α (MulZeroClass.toHasZero.{u2} α (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))))))))) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 0 (OfNat.mk.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 0 (Zero.zero.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasZero.{u2, u1, u1} n n α (MulZeroClass.toHasZero.{u2} α (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))))))))
-but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α], Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 0 (Zero.toOfNat0.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.zero.{u2, u1, u1} n n α (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))))) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 0 (Zero.toOfNat0.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.zero.{u2, u1, u1} n n α (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))))
-Case conversion may be inaccurate. Consider using '#align matrix.inv_zero Matrix.inv_zeroₓ'. -/
 @[simp]
 theorem inv_zero : (0 : Matrix n n α)⁻¹ = 0 :=
   by
@@ -920,32 +512,14 @@ theorem inv_zero : (0 : Matrix n n α)⁻¹ = 0 :=
 noncomputable instance : InvOneClass (Matrix n n α) :=
   { Matrix.hasOne, Matrix.hasInv with inv_one := inv_eq_left_inv (by simp) }
 
-/- warning: matrix.inv_smul -> Matrix.inv_smul is a dubious translation:
-lean 3 declaration is
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (k : α) [_inst_4 : Invertible.{u2} α (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3))))) k], (IsUnit.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) (SMul.smul.{u2, max u1 u2} α (Matrix.{u1, u1, u2} n n α) (Matrix.hasSmul.{u2, u1, u1, u2} n n α α (Mul.toSMul.{u2} α (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))))) k A)) (SMul.smul.{u2, max u1 u2} α (Matrix.{u1, u1, u2} n n α) (Matrix.hasSmul.{u2, u1, u1, u2} n n α α (Mul.toSMul.{u2} α (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Invertible.invOf.{u2} α (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3))))) k _inst_4) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)))
-but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (k : α) [_inst_4 : Invertible.{u2} α (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) k], (IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) (HSMul.hSMul.{u2, max u1 u2, max u1 u2} α (Matrix.{u1, u1, u2} n n α) (Matrix.{u1, u1, u2} n n α) (instHSMul.{u2, max u1 u2} α (Matrix.{u1, u1, u2} n n α) (Matrix.smul.{u2, u1, u1, u2} n n α α (Algebra.toSMul.{u2, u2} α α (CommRing.toCommSemiring.{u2} α _inst_3) (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (Algebra.id.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) k A)) (HSMul.hSMul.{u2, max u1 u2, max u1 u2} α (Matrix.{u1, u1, u2} n n α) (Matrix.{u1, u1, u2} n n α) (instHSMul.{u2, max u1 u2} α (Matrix.{u1, u1, u2} n n α) (Matrix.smul.{u2, u1, u1, u2} n n α α (Algebra.toSMul.{u2, u2} α α (CommRing.toCommSemiring.{u2} α _inst_3) (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (Algebra.id.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) (Invertible.invOf.{u2} α (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) k _inst_4) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)))
-Case conversion may be inaccurate. Consider using '#align matrix.inv_smul Matrix.inv_smulₓ'. -/
 theorem inv_smul (k : α) [Invertible k] (h : IsUnit A.det) : (k • A)⁻¹ = ⅟ k • A⁻¹ :=
   inv_eq_left_inv (by simp [h, smul_smul])
 #align matrix.inv_smul Matrix.inv_smul
 
-/- warning: matrix.inv_smul' -> Matrix.inv_smul' is a dubious translation:
-lean 3 declaration is
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (k : Units.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3))), (IsUnit.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) (SMul.smul.{u2, max u1 u2} (Units.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3))) (Matrix.{u1, u1, u2} n n α) (Matrix.hasSmul.{u2, u1, u1, u2} n n (Units.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3))) α (Units.hasSmul.{u2, u2} α α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Mul.toSMul.{u2} α (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) k A)) (SMul.smul.{u2, max u1 u2} (Units.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3))) (Matrix.{u1, u1, u2} n n α) (Matrix.hasSmul.{u2, u1, u1, u2} n n (Units.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3))) α (Units.hasSmul.{u2, u2} α α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Mul.toSMul.{u2} α (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Inv.inv.{u2} (Units.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3))) (Units.hasInv.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3))) k) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)))
-but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (k : Units.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))), (IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) (HSMul.hSMul.{u2, max u1 u2, max u1 u2} (Units.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) (Matrix.{u1, u1, u2} n n α) (Matrix.{u1, u1, u2} n n α) (instHSMul.{u2, max u1 u2} (Units.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) (Matrix.{u1, u1, u2} n n α) (Units.instSMulUnits.{u2, max u1 u2} α (Matrix.{u1, u1, u2} n n α) (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Matrix.smul.{u2, u1, u1, u2} n n α α (Algebra.toSMul.{u2, u2} α α (CommRing.toCommSemiring.{u2} α _inst_3) (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (Algebra.id.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))))) k A)) (HSMul.hSMul.{u2, max u1 u2, max u1 u2} (Units.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) (Matrix.{u1, u1, u2} n n α) (Matrix.{u1, u1, u2} n n α) (instHSMul.{u2, max u1 u2} (Units.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) (Matrix.{u1, u1, u2} n n α) (Units.instSMulUnits.{u2, max u1 u2} α (Matrix.{u1, u1, u2} n n α) (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Matrix.smul.{u2, u1, u1, u2} n n α α (Algebra.toSMul.{u2, u2} α α (CommRing.toCommSemiring.{u2} α _inst_3) (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (Algebra.id.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))))) (Inv.inv.{u2} (Units.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) (Units.instInv.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) k) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)))
-Case conversion may be inaccurate. Consider using '#align matrix.inv_smul' Matrix.inv_smul'ₓ'. -/
 theorem inv_smul' (k : αˣ) (h : IsUnit A.det) : (k • A)⁻¹ = k⁻¹ • A⁻¹ :=
   inv_eq_left_inv (by simp [h, smul_smul])
 #align matrix.inv_smul' Matrix.inv_smul'
 
-/- warning: matrix.inv_adjugate -> Matrix.inv_adjugate is a dubious translation:
-lean 3 declaration is
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (h : IsUnit.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)), Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) (Matrix.adjugate.{u1, u2} n α (fun (a : n) (b : n) => _inst_2 a b) _inst_1 _inst_3 A)) (SMul.smul.{u2, max u1 u2} (Units.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3))) (Matrix.{u1, u1, u2} n n α) (Matrix.hasSmul.{u2, u1, u1, u2} n n (Units.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3))) α (Units.hasSmul.{u2, u2} α α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Mul.toSMul.{u2} α (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Inv.inv.{u2} (Units.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3))) (Units.hasInv.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3))) (IsUnit.unit.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A) h)) A)
-but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (h : IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)), Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u2 u1} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) (Matrix.adjugate.{u1, u2} n α (fun (a : n) (b : n) => _inst_2 a b) _inst_1 _inst_3 A)) (HSMul.hSMul.{u2, max u1 u2, max u1 u2} (Units.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) (Matrix.{u1, u1, u2} n n α) (Matrix.{u1, u1, u2} n n α) (instHSMul.{u2, max u1 u2} (Units.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) (Matrix.{u1, u1, u2} n n α) (Units.instSMulUnits.{u2, max u1 u2} α (Matrix.{u1, u1, u2} n n α) (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Matrix.smul.{u2, u1, u1, u2} n n α α (Algebra.toSMul.{u2, u2} α α (CommRing.toCommSemiring.{u2} α _inst_3) (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (Algebra.id.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))))) (Inv.inv.{u2} (Units.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) (Units.instInv.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) (IsUnit.unit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A) h)) A)
-Case conversion may be inaccurate. Consider using '#align matrix.inv_adjugate Matrix.inv_adjugateₓ'. -/
 theorem inv_adjugate (A : Matrix n n α) (h : IsUnit A.det) : (adjugate A)⁻¹ = h.Unit⁻¹ • A :=
   by
   refine' inv_eq_left_inv _
@@ -954,24 +528,12 @@ theorem inv_adjugate (A : Matrix n n α) (h : IsUnit A.det) : (adjugate A)⁻¹
 
 section Diagonal
 
-/- warning: matrix.diagonal_invertible -> Matrix.diagonalInvertible is a dubious translation:
-lean 3 declaration is
-  forall {n : Type.{u1}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] {α : Type.{u2}} [_inst_4 : NonAssocSemiring.{u2} α] (v : n -> α) [_inst_5 : Invertible.{max u1 u2} (n -> α) (Pi.instMul.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => Distrib.toHasMul.{u2} α (NonUnitalNonAssocSemiring.toDistrib.{u2} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} α _inst_4)))) (Pi.instOne.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddMonoidWithOne.toOne.{u2} α (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} α (NonAssocSemiring.toAddCommMonoidWithOne.{u2} α _inst_4)))) v], Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (MulOneClass.toHasMul.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (MulZeroOneClass.toMulOneClass.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (NonAssocSemiring.toMulZeroOneClass.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.nonAssocSemiring.{u2, u1} n α _inst_4 _inst_1 (fun (a : n) (b : n) => _inst_2 a b))))) (MulOneClass.toHasOne.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (MulZeroOneClass.toMulOneClass.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (NonAssocSemiring.toMulZeroOneClass.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.nonAssocSemiring.{u2, u1} n α _inst_4 _inst_1 (fun (a : n) (b : n) => _inst_2 a b))))) (Matrix.diagonal.{u2, u1} n α (fun (i : n) (j : n) => (fun (a : n) (b : n) => (fun (a : n) (b : n) => _inst_2 a b) a b) i j) (MulZeroClass.toHasZero.{u2} α (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} α _inst_4))) v)
-but is expected to have type
-  forall {n : Type.{u1}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] {α : Type.{u2}} [_inst_4 : NonAssocSemiring.{u2} α] (v : n -> α) [_inst_5 : Invertible.{max u1 u2} (n -> α) (Pi.instMul.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toMul.{u2} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} α _inst_4))) (Pi.instOne.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => NonAssocSemiring.toOne.{u2} α _inst_4)) v], Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocSemiring.toMul.{u2} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} α _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} α _inst_4))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (MulZeroOneClass.toZero.{u2} α (NonAssocSemiring.toMulZeroOneClass.{u2} α _inst_4)) (NonAssocSemiring.toOne.{u2} α _inst_4)) (Matrix.diagonal.{u2, u1} n α (fun (i : n) (j : n) => _inst_2 i j) (MulZeroOneClass.toZero.{u2} α (NonAssocSemiring.toMulZeroOneClass.{u2} α _inst_4)) v)
-Case conversion may be inaccurate. Consider using '#align matrix.diagonal_invertible Matrix.diagonalInvertibleₓ'. -/
 /-- `diagonal v` is invertible if `v` is -/
 def diagonalInvertible {α} [NonAssocSemiring α] (v : n → α) [Invertible v] :
     Invertible (diagonal v) :=
   Invertible.map (diagonalRingHom n α) v
 #align matrix.diagonal_invertible Matrix.diagonalInvertible
 
-/- warning: matrix.inv_of_diagonal_eq -> Matrix.invOf_diagonal_eq is a dubious translation:
-lean 3 declaration is
-  forall {n : Type.{u1}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] {α : Type.{u2}} [_inst_4 : Semiring.{u2} α] (v : n -> α) [_inst_5 : Invertible.{max u1 u2} (n -> α) (Pi.instMul.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => Distrib.toHasMul.{u2} α (NonUnitalNonAssocSemiring.toDistrib.{u2} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} α (Semiring.toNonAssocSemiring.{u2} α _inst_4))))) (Pi.instOne.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddMonoidWithOne.toOne.{u2} α (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} α (NonAssocSemiring.toAddCommMonoidWithOne.{u2} α (Semiring.toNonAssocSemiring.{u2} α _inst_4))))) v] [_inst_6 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasMul.{u2, u1} n α _inst_1 (Distrib.toHasMul.{u2} α (NonUnitalNonAssocSemiring.toDistrib.{u2} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} α (Semiring.toNonAssocSemiring.{u2} α _inst_4)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} α (Semiring.toNonAssocSemiring.{u2} α _inst_4)))) (Matrix.hasOne.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (MulZeroClass.toHasZero.{u2} α (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} α (Semiring.toNonAssocSemiring.{u2} α _inst_4)))) (AddMonoidWithOne.toOne.{u2} α (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} α (NonAssocSemiring.toAddCommMonoidWithOne.{u2} α (Semiring.toNonAssocSemiring.{u2} α _inst_4))))) (Matrix.diagonal.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (MulZeroClass.toHasZero.{u2} α (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} α (Semiring.toNonAssocSemiring.{u2} α _inst_4)))) v)], Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Invertible.invOf.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasMul.{u2, u1} n α _inst_1 (Distrib.toHasMul.{u2} α (NonUnitalNonAssocSemiring.toDistrib.{u2} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} α (Semiring.toNonAssocSemiring.{u2} α _inst_4)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} α (Semiring.toNonAssocSemiring.{u2} α _inst_4)))) (Matrix.hasOne.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (MulZeroClass.toHasZero.{u2} α (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} α (Semiring.toNonAssocSemiring.{u2} α _inst_4)))) (AddMonoidWithOne.toOne.{u2} α (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} α (NonAssocSemiring.toAddCommMonoidWithOne.{u2} α (Semiring.toNonAssocSemiring.{u2} α _inst_4))))) (Matrix.diagonal.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (MulZeroClass.toHasZero.{u2} α (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} α (Semiring.toNonAssocSemiring.{u2} α _inst_4)))) v) _inst_6) (Matrix.diagonal.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (MulZeroClass.toHasZero.{u2} α (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} α (Semiring.toNonAssocSemiring.{u2} α _inst_4)))) (Invertible.invOf.{max u1 u2} (n -> α) (Pi.instMul.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => Distrib.toHasMul.{u2} α (NonUnitalNonAssocSemiring.toDistrib.{u2} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} α (Semiring.toNonAssocSemiring.{u2} α _inst_4))))) (Pi.instOne.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddMonoidWithOne.toOne.{u2} α (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} α (NonAssocSemiring.toAddCommMonoidWithOne.{u2} α (Semiring.toNonAssocSemiring.{u2} α _inst_4))))) v _inst_5))
-but is expected to have type
-  forall {n : Type.{u2}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] {α : Type.{u1}} [_inst_4 : Semiring.{u1} α] (v : n -> α) [_inst_5 : Invertible.{max u2 u1} (n -> α) (Pi.instMul.{u2, u1} n (fun (ᾰ : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toMul.{u1} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} α (Semiring.toNonAssocSemiring.{u1} α _inst_4)))) (Pi.instOne.{u2, u1} n (fun (ᾰ : n) => α) (fun (i : n) => Semiring.toOne.{u1} α _inst_4)) v] [_inst_6 : Invertible.{max u2 u1} (Matrix.{u2, u2, u1} n n α) (Matrix.instMulMatrix.{u1, u2} n α _inst_1 (NonUnitalNonAssocSemiring.toMul.{u1} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} α (Semiring.toNonAssocSemiring.{u1} α _inst_4))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} α (Semiring.toNonAssocSemiring.{u1} α _inst_4)))) (Matrix.one.{u1, u2} n α (fun (a : n) (b : n) => _inst_2 a b) (MonoidWithZero.toZero.{u1} α (Semiring.toMonoidWithZero.{u1} α _inst_4)) (Semiring.toOne.{u1} α _inst_4)) (Matrix.diagonal.{u1, u2} n α (fun (a : n) (b : n) => _inst_2 a b) (MonoidWithZero.toZero.{u1} α (Semiring.toMonoidWithZero.{u1} α _inst_4)) v)], Eq.{max (succ u2) (succ u1)} (Matrix.{u2, u2, u1} n n α) (Invertible.invOf.{max u2 u1} (Matrix.{u2, u2, u1} n n α) (Matrix.instMulMatrix.{u1, u2} n α _inst_1 (NonUnitalNonAssocSemiring.toMul.{u1} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} α (Semiring.toNonAssocSemiring.{u1} α _inst_4))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} α (Semiring.toNonAssocSemiring.{u1} α _inst_4)))) (Matrix.one.{u1, u2} n α (fun (a : n) (b : n) => _inst_2 a b) (MonoidWithZero.toZero.{u1} α (Semiring.toMonoidWithZero.{u1} α _inst_4)) (Semiring.toOne.{u1} α _inst_4)) (Matrix.diagonal.{u1, u2} n α (fun (a : n) (b : n) => _inst_2 a b) (MonoidWithZero.toZero.{u1} α (Semiring.toMonoidWithZero.{u1} α _inst_4)) v) _inst_6) (Matrix.diagonal.{u1, u2} n α (fun (a : n) (b : n) => _inst_2 a b) (MonoidWithZero.toZero.{u1} α (Semiring.toMonoidWithZero.{u1} α _inst_4)) (Invertible.invOf.{max u2 u1} (n -> α) (Pi.instMul.{u2, u1} n (fun (ᾰ : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toMul.{u1} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} α (Semiring.toNonAssocSemiring.{u1} α _inst_4)))) (Pi.instOne.{u2, u1} n (fun (ᾰ : n) => α) (fun (i : n) => Semiring.toOne.{u1} α _inst_4)) v _inst_5))
-Case conversion may be inaccurate. Consider using '#align matrix.inv_of_diagonal_eq Matrix.invOf_diagonal_eqₓ'. -/
 theorem invOf_diagonal_eq {α} [Semiring α] (v : n → α) [Invertible v] [Invertible (diagonal v)] :
     ⅟ (diagonal v) = diagonal (⅟ v) :=
   by
@@ -980,12 +542,6 @@ theorem invOf_diagonal_eq {α} [Semiring α] (v : n → α) [Invertible v] [Inve
   convert(rfl : ⅟ (diagonal v) = _)
 #align matrix.inv_of_diagonal_eq Matrix.invOf_diagonal_eq
 
-/- warning: matrix.invertible_of_diagonal_invertible -> Matrix.invertibleOfDiagonalInvertible is a dubious translation:
-lean 3 declaration is
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (v : n -> α) [_inst_4 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasMul.{u2, u1} n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (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} α (CommRing.toRing.{u2} α _inst_3)))))) v)], Invertible.{max u1 u2} (n -> α) (Pi.instMul.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Pi.instOne.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) v
-but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (v : n -> α) [_inst_4 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Matrix.diagonal.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) v)], Invertible.{max u1 u2} (n -> α) (Pi.instMul.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Pi.instOne.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) v
-Case conversion may be inaccurate. Consider using '#align matrix.invertible_of_diagonal_invertible Matrix.invertibleOfDiagonalInvertibleₓ'. -/
 /-- `v` is invertible if `diagonal v` is -/
 def invertibleOfDiagonalInvertible (v : n → α) [Invertible (diagonal v)] : Invertible v
     where
@@ -1008,12 +564,6 @@ def invertibleOfDiagonalInvertible (v : n → α) [Invertible (diagonal v)] : In
       exact mul_invOf_self _
 #align matrix.invertible_of_diagonal_invertible Matrix.invertibleOfDiagonalInvertible
 
-/- warning: matrix.diagonal_invertible_equiv_invertible -> Matrix.diagonalInvertibleEquivInvertible is a dubious translation:
-lean 3 declaration is
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (v : n -> α), Equiv.{succ (max u1 u2), succ (max u1 u2)} (Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasMul.{u2, u1} n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (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} α (CommRing.toRing.{u2} α _inst_3)))))) v)) (Invertible.{max u1 u2} (n -> α) (Pi.instMul.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Pi.instOne.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) v)
-but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (v : n -> α), Equiv.{succ (max u1 u2), succ (max u1 u2)} (Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Matrix.diagonal.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) v)) (Invertible.{max u1 u2} (n -> α) (Pi.instMul.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Pi.instOne.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) v)
-Case conversion may be inaccurate. Consider using '#align matrix.diagonal_invertible_equiv_invertible Matrix.diagonalInvertibleEquivInvertibleₓ'. -/
 /-- Together `matrix.diagonal_invertible` and `matrix.invertible_of_diagonal_invertible` form an
 equivalence, although both sides of the equiv are subsingleton anyway. -/
 @[simps]
@@ -1025,12 +575,6 @@ def diagonalInvertibleEquivInvertible (v : n → α) : Invertible (diagonal v) 
   right_inv _ := Subsingleton.elim _ _
 #align matrix.diagonal_invertible_equiv_invertible Matrix.diagonalInvertibleEquivInvertible
 
-/- warning: matrix.is_unit_diagonal -> Matrix.isUnit_diagonal is a dubious translation:
-lean 3 declaration is
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] {v : n -> α}, Iff (IsUnit.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Ring.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.ring.{u2, u1} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toRing.{u2} α _inst_3))) (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} α (CommRing.toRing.{u2} α _inst_3)))))) v)) (IsUnit.{max u1 u2} (n -> α) (Pi.monoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3))) v)
-but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] {v : n -> α}, Iff (IsUnit.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (MonoidWithZero.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Semiring.toMonoidWithZero.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.semiring.{u2, u1} n α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) _inst_1 (fun (a : n) (b : n) => _inst_2 a b)))) (Matrix.diagonal.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) v)) (IsUnit.{max u1 u2} (n -> α) (Pi.monoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) v)
-Case conversion may be inaccurate. Consider using '#align matrix.is_unit_diagonal Matrix.isUnit_diagonalₓ'. -/
 /-- When lowered to a prop, `matrix.diagonal_invertible_equiv_invertible` forms an `iff`. -/
 @[simp]
 theorem isUnit_diagonal {v : n → α} : IsUnit (diagonal v) ↔ IsUnit v := by
@@ -1038,12 +582,6 @@ theorem isUnit_diagonal {v : n → α} : IsUnit (diagonal v) ↔ IsUnit v := by
     (diagonal_invertible_equiv_invertible v).nonempty_congr]
 #align matrix.is_unit_diagonal Matrix.isUnit_diagonal
 
-/- warning: matrix.inv_diagonal -> Matrix.inv_diagonal is a dubious translation:
-lean 3 declaration is
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (v : n -> α), Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) (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} α (CommRing.toRing.{u2} α _inst_3)))))) v)) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (Ring.inverse.{max u1 u2} (n -> α) (Pi.monoidWithZero.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) v))
-but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (v : n -> α), Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) (Matrix.diagonal.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) v)) (Matrix.diagonal.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Ring.inverse.{max u1 u2} (n -> α) (Pi.monoidWithZero.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) v))
-Case conversion may be inaccurate. Consider using '#align matrix.inv_diagonal Matrix.inv_diagonalₓ'. -/
 theorem inv_diagonal (v : n → α) : (diagonal v)⁻¹ = diagonal (Ring.inverse v) :=
   by
   rw [nonsing_inv_eq_ring_inverse]
@@ -1058,12 +596,6 @@ theorem inv_diagonal (v : n → α) : (diagonal v)⁻¹ = diagonal (Ring.inverse
 
 end Diagonal
 
-/- warning: matrix.inv_inv_inv -> Matrix.inv_inv_inv is a dubious translation:
-lean 3 declaration is
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A))) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)
-but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A))) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)
-Case conversion may be inaccurate. Consider using '#align matrix.inv_inv_inv Matrix.inv_inv_invₓ'. -/
 @[simp]
 theorem inv_inv_inv (A : Matrix n n α) : A⁻¹⁻¹⁻¹ = A⁻¹ :=
   by
@@ -1072,12 +604,6 @@ theorem inv_inv_inv (A : Matrix n n α) : A⁻¹⁻¹⁻¹ = A⁻¹ :=
   · simp [nonsing_inv_apply_not_is_unit _ h]
 #align matrix.inv_inv_inv Matrix.inv_inv_inv
 
-/- warning: matrix.mul_inv_rev -> Matrix.mul_inv_rev is a dubious translation:
-lean 3 declaration is
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (B : Matrix.{u1, u1, u2} n n α), Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A B)) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) B) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A))
-but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (B : Matrix.{u1, u1, u2} n n α), Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A B)) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) B) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A))
-Case conversion may be inaccurate. Consider using '#align matrix.mul_inv_rev Matrix.mul_inv_revₓ'. -/
 theorem mul_inv_rev (A B : Matrix n n α) : (A ⬝ B)⁻¹ = B⁻¹ ⬝ A⁻¹ :=
   by
   simp only [inv_def]
@@ -1085,12 +611,6 @@ theorem mul_inv_rev (A B : Matrix n n α) : (A ⬝ B)⁻¹ = B⁻¹ ⬝ A⁻¹ :
     Ring.mul_inverse_rev]
 #align matrix.mul_inv_rev Matrix.mul_inv_rev
 
-/- warning: matrix.list_prod_inv_reverse -> Matrix.list_prod_inv_reverse is a dubious translation:
-lean 3 declaration is
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (l : List.{max u1 u2} (Matrix.{u1, u1, u2} n n α)), Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) (List.prod.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasMul.{u2, u1} n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) l)) (List.prod.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasMul.{u2, u1} n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (List.map.{max u1 u2, max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3)) (List.reverse.{max u1 u2} (Matrix.{u1, u1, u2} n n α) l)))
-but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (l : List.{max u2 u1} (Matrix.{u1, u1, u2} n n α)), Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) (List.prod.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) l)) (List.prod.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (List.map.{max u1 u2, max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3)) (List.reverse.{max u1 u2} (Matrix.{u1, u1, u2} n n α) l)))
-Case conversion may be inaccurate. Consider using '#align matrix.list_prod_inv_reverse Matrix.list_prod_inv_reverseₓ'. -/
 /- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
 /-- A version of `list.prod_inv_reverse` for `matrix.has_inv`. -/
 theorem list_prod_inv_reverse : ∀ l : List (Matrix n n α), l.Prod⁻¹ = (l.reverse.map Inv.inv).Prod
@@ -1100,9 +620,6 @@ theorem list_prod_inv_reverse : ∀ l : List (Matrix n n α), l.Prod⁻¹ = (l.r
       Matrix.mul_eq_mul, mul_inv_rev, list_prod_inv_reverse]
 #align matrix.list_prod_inv_reverse Matrix.list_prod_inv_reverse
 
-/- warning: matrix.det_smul_inv_mul_vec_eq_cramer -> Matrix.det_smul_inv_mulVec_eq_cramer is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align matrix.det_smul_inv_mul_vec_eq_cramer Matrix.det_smul_inv_mulVec_eq_cramerₓ'. -/
 /-- One form of **Cramer's rule**. See `matrix.mul_vec_cramer` for a stronger form. -/
 @[simp]
 theorem det_smul_inv_mulVec_eq_cramer (A : Matrix n n α) (b : n → α) (h : IsUnit A.det) :
@@ -1111,9 +628,6 @@ theorem det_smul_inv_mulVec_eq_cramer (A : Matrix n n α) (b : n → α) (h : Is
     h.mul_coe_inv, one_smul]
 #align matrix.det_smul_inv_mul_vec_eq_cramer Matrix.det_smul_inv_mulVec_eq_cramer
 
-/- warning: matrix.det_smul_inv_vec_mul_eq_cramer_transpose -> Matrix.det_smul_inv_vecMul_eq_cramer_transpose is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align matrix.det_smul_inv_vec_mul_eq_cramer_transpose Matrix.det_smul_inv_vecMul_eq_cramer_transposeₓ'. -/
 /-- One form of **Cramer's rule**. See `matrix.mul_vec_cramer` for a stronger form. -/
 @[simp]
 theorem det_smul_inv_vecMul_eq_cramer_transpose (A : Matrix n n α) (b : n → α) (h : IsUnit A.det) :
@@ -1135,12 +649,6 @@ variable [Fintype m]
 
 variable [DecidableEq m]
 
-/- warning: matrix.submatrix_equiv_invertible -> Matrix.submatrixEquivInvertible is a dubious translation:
-lean 3 declaration is
-  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] [_inst_4 : Fintype.{u1} m] [_inst_5 : DecidableEq.{succ u1} m] (A : Matrix.{u1, u1, u3} m m α) (e₁ : Equiv.{succ u2, succ u1} n m) (e₂ : Equiv.{succ u2, succ u1} n m) [_inst_6 : Invertible.{max u1 u3} (Matrix.{u1, u1, u3} m m α) (Matrix.hasMul.{u3, u1} m α _inst_4 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.hasOne.{u3, u1} m α (fun (a : m) (b : m) => _inst_5 a b) (MulZeroClass.toHasZero.{u3} α (NonUnitalNonAssocSemiring.toMulZeroClass.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (AddMonoidWithOne.toOne.{u3} α (AddGroupWithOne.toAddMonoidWithOne.{u3} α (AddCommGroupWithOne.toAddGroupWithOne.{u3} α (Ring.toAddCommGroupWithOne.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) A], Invertible.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.hasMul.{u3, u2} n α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.hasOne.{u3, u2} 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} α (CommRing.toRing.{u3} α _inst_3)))))) (AddMonoidWithOne.toOne.{u3} α (AddGroupWithOne.toAddMonoidWithOne.{u3} α (AddCommGroupWithOne.toAddGroupWithOne.{u3} α (Ring.toAddCommGroupWithOne.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.submatrix.{u3, u2, u1, u1, u2} n m m n α A (coeFn.{max 1 (max (succ u2) (succ u1)) (succ u1) (succ u2), max (succ u2) (succ u1)} (Equiv.{succ u2, succ u1} n m) (fun (_x : Equiv.{succ u2, succ u1} n m) => n -> m) (Equiv.hasCoeToFun.{succ u2, succ u1} n m) e₁) (coeFn.{max 1 (max (succ u2) (succ u1)) (succ u1) (succ u2), max (succ u2) (succ u1)} (Equiv.{succ u2, succ u1} n m) (fun (_x : Equiv.{succ u2, succ u1} n m) => n -> m) (Equiv.hasCoeToFun.{succ u2, succ u1} n m) e₂))
-but is expected to have type
-  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] [_inst_4 : Fintype.{u1} m] [_inst_5 : DecidableEq.{succ u1} m] (A : Matrix.{u1, u1, u3} m m α) (e₁ : Equiv.{succ u2, succ u1} n m) (e₂ : Equiv.{succ u2, succ u1} n m) [_inst_6 : Invertible.{max u1 u3} (Matrix.{u1, u1, u3} m m α) (Matrix.instMulMatrix.{u3, u1} m α _inst_4 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u1} m α (fun (a : m) (b : m) => _inst_5 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (Semiring.toOne.{u3} α (CommSemiring.toSemiring.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3)))) A], Invertible.{max u3 u2} (Matrix.{u2, u2, u3} n n α) (Matrix.instMulMatrix.{u3, u2} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u2} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (Semiring.toOne.{u3} α (CommSemiring.toSemiring.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3)))) (Matrix.submatrix.{u3, u2, u1, u1, u2} n m m n α A (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (Equiv.{succ u2, succ u1} n m) n (fun (_x : n) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : n) => m) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} n m) e₁) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (Equiv.{succ u2, succ u1} n m) n (fun (_x : n) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : n) => m) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} n m) e₂))
-Case conversion may be inaccurate. Consider using '#align matrix.submatrix_equiv_invertible Matrix.submatrixEquivInvertibleₓ'. -/
 /-- `A.submatrix e₁ e₂` is invertible if `A` is -/
 def submatrixEquivInvertible (A : Matrix m m α) (e₁ e₂ : n ≃ m) [Invertible A] :
     Invertible (A.submatrix e₁ e₂) :=
@@ -1148,12 +656,6 @@ def submatrixEquivInvertible (A : Matrix m m α) (e₁ e₂ : n ≃ m) [Invertib
     rw [Matrix.submatrix_mul_equiv, Matrix.mul_invOf_self, submatrix_one_equiv]
 #align matrix.submatrix_equiv_invertible Matrix.submatrixEquivInvertible
 
-/- warning: matrix.invertible_of_submatrix_equiv_invertible -> Matrix.invertibleOfSubmatrixEquivInvertible is a dubious translation:
-lean 3 declaration is
-  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] [_inst_4 : Fintype.{u1} m] [_inst_5 : DecidableEq.{succ u1} m] (A : Matrix.{u1, u1, u3} m m α) (e₁ : Equiv.{succ u2, succ u1} n m) (e₂ : Equiv.{succ u2, succ u1} n m) [_inst_6 : Invertible.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.hasMul.{u3, u2} n α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.hasOne.{u3, u2} 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} α (CommRing.toRing.{u3} α _inst_3)))))) (AddMonoidWithOne.toOne.{u3} α (AddGroupWithOne.toAddMonoidWithOne.{u3} α (AddCommGroupWithOne.toAddGroupWithOne.{u3} α (Ring.toAddCommGroupWithOne.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.submatrix.{u3, u2, u1, u1, u2} n m m n α A (coeFn.{max 1 (max (succ u2) (succ u1)) (succ u1) (succ u2), max (succ u2) (succ u1)} (Equiv.{succ u2, succ u1} n m) (fun (_x : Equiv.{succ u2, succ u1} n m) => n -> m) (Equiv.hasCoeToFun.{succ u2, succ u1} n m) e₁) (coeFn.{max 1 (max (succ u2) (succ u1)) (succ u1) (succ u2), max (succ u2) (succ u1)} (Equiv.{succ u2, succ u1} n m) (fun (_x : Equiv.{succ u2, succ u1} n m) => n -> m) (Equiv.hasCoeToFun.{succ u2, succ u1} n m) e₂))], Invertible.{max u1 u3} (Matrix.{u1, u1, u3} m m α) (Matrix.hasMul.{u3, u1} m α _inst_4 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.hasOne.{u3, u1} m α (fun (a : m) (b : m) => _inst_5 a b) (MulZeroClass.toHasZero.{u3} α (NonUnitalNonAssocSemiring.toMulZeroClass.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (AddMonoidWithOne.toOne.{u3} α (AddGroupWithOne.toAddMonoidWithOne.{u3} α (AddCommGroupWithOne.toAddGroupWithOne.{u3} α (Ring.toAddCommGroupWithOne.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) A
-but is expected to have type
-  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] [_inst_4 : Fintype.{u1} m] [_inst_5 : DecidableEq.{succ u1} m] (A : Matrix.{u1, u1, u3} m m α) (e₁ : Equiv.{succ u2, succ u1} n m) (e₂ : Equiv.{succ u2, succ u1} n m) [_inst_6 : Invertible.{max u3 u2} (Matrix.{u2, u2, u3} n n α) (Matrix.instMulMatrix.{u3, u2} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u2} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (Semiring.toOne.{u3} α (CommSemiring.toSemiring.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3)))) (Matrix.submatrix.{u3, u2, u1, u1, u2} n m m n α A (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (Equiv.{succ u2, succ u1} n m) n (fun (_x : n) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : n) => m) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} n m) e₁) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (Equiv.{succ u2, succ u1} n m) n (fun (_x : n) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : n) => m) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} n m) e₂))], Invertible.{max u1 u3} (Matrix.{u1, u1, u3} m m α) (Matrix.instMulMatrix.{u3, u1} m α _inst_4 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u1} m α (fun (a : m) (b : m) => _inst_5 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (Semiring.toOne.{u3} α (CommSemiring.toSemiring.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3)))) A
-Case conversion may be inaccurate. Consider using '#align matrix.invertible_of_submatrix_equiv_invertible Matrix.invertibleOfSubmatrixEquivInvertibleₓ'. -/
 /-- `A` is invertible if `A.submatrix e₁ e₂` is -/
 def invertibleOfSubmatrixEquivInvertible (A : Matrix m m α) (e₁ e₂ : n ≃ m)
     [Invertible (A.submatrix e₁ e₂)] : Invertible A :=
@@ -1166,9 +668,6 @@ def invertibleOfSubmatrixEquivInvertible (A : Matrix m m α) (e₁ e₂ : n ≃
     rw [Matrix.submatrix_mul_equiv, Matrix.mul_invOf_self, submatrix_one_equiv]
 #align matrix.invertible_of_submatrix_equiv_invertible Matrix.invertibleOfSubmatrixEquivInvertible
 
-/- warning: matrix.inv_of_submatrix_equiv_eq -> Matrix.invOf_submatrix_equiv_eq is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align matrix.inv_of_submatrix_equiv_eq Matrix.invOf_submatrix_equiv_eqₓ'. -/
 theorem invOf_submatrix_equiv_eq (A : Matrix m m α) (e₁ e₂ : n ≃ m) [Invertible A]
     [Invertible (A.submatrix e₁ e₂)] : ⅟ (A.submatrix e₁ e₂) = (⅟ A).submatrix e₂ e₁ :=
   by
@@ -1177,12 +676,6 @@ theorem invOf_submatrix_equiv_eq (A : Matrix m m α) (e₁ e₂ : n ≃ m) [Inve
   convert(rfl : ⅟ (A.submatrix e₁ e₂) = _)
 #align matrix.inv_of_submatrix_equiv_eq Matrix.invOf_submatrix_equiv_eq
 
-/- warning: matrix.submatrix_equiv_invertible_equiv_invertible -> Matrix.submatrixEquivInvertibleEquivInvertible is a dubious translation:
-lean 3 declaration is
-  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] [_inst_4 : Fintype.{u1} m] [_inst_5 : DecidableEq.{succ u1} m] (A : Matrix.{u1, u1, u3} m m α) (e₁ : Equiv.{succ u2, succ u1} n m) (e₂ : Equiv.{succ u2, succ u1} n m), Equiv.{succ (max u2 u3), succ (max u1 u3)} (Invertible.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.hasMul.{u3, u2} n α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.hasOne.{u3, u2} 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} α (CommRing.toRing.{u3} α _inst_3)))))) (AddMonoidWithOne.toOne.{u3} α (AddGroupWithOne.toAddMonoidWithOne.{u3} α (AddCommGroupWithOne.toAddGroupWithOne.{u3} α (Ring.toAddCommGroupWithOne.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.submatrix.{u3, u2, u1, u1, u2} n m m n α A (coeFn.{max 1 (max (succ u2) (succ u1)) (succ u1) (succ u2), max (succ u2) (succ u1)} (Equiv.{succ u2, succ u1} n m) (fun (_x : Equiv.{succ u2, succ u1} n m) => n -> m) (Equiv.hasCoeToFun.{succ u2, succ u1} n m) e₁) (coeFn.{max 1 (max (succ u2) (succ u1)) (succ u1) (succ u2), max (succ u2) (succ u1)} (Equiv.{succ u2, succ u1} n m) (fun (_x : Equiv.{succ u2, succ u1} n m) => n -> m) (Equiv.hasCoeToFun.{succ u2, succ u1} n m) e₂))) (Invertible.{max u1 u3} (Matrix.{u1, u1, u3} m m α) (Matrix.hasMul.{u3, u1} m α _inst_4 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.hasOne.{u3, u1} m α (fun (a : m) (b : m) => _inst_5 a b) (MulZeroClass.toHasZero.{u3} α (NonUnitalNonAssocSemiring.toMulZeroClass.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (AddMonoidWithOne.toOne.{u3} α (AddGroupWithOne.toAddMonoidWithOne.{u3} α (AddCommGroupWithOne.toAddGroupWithOne.{u3} α (Ring.toAddCommGroupWithOne.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) A)
-but is expected to have type
-  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] [_inst_4 : Fintype.{u1} m] [_inst_5 : DecidableEq.{succ u1} m] (A : Matrix.{u1, u1, u3} m m α) (e₁ : Equiv.{succ u2, succ u1} n m) (e₂ : Equiv.{succ u2, succ u1} n m), Equiv.{succ (max u3 u2), succ (max u1 u3)} (Invertible.{max u3 u2} (Matrix.{u2, u2, u3} n n α) (Matrix.instMulMatrix.{u3, u2} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u2} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (Semiring.toOne.{u3} α (CommSemiring.toSemiring.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3)))) (Matrix.submatrix.{u3, u2, u1, u1, u2} n m m n α A (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (Equiv.{succ u2, succ u1} n m) n (fun (_x : n) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : n) => m) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} n m) e₁) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (Equiv.{succ u2, succ u1} n m) n (fun (_x : n) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : n) => m) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} n m) e₂))) (Invertible.{max u1 u3} (Matrix.{u1, u1, u3} m m α) (Matrix.instMulMatrix.{u3, u1} m α _inst_4 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u1} m α (fun (a : m) (b : m) => _inst_5 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (Semiring.toOne.{u3} α (CommSemiring.toSemiring.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3)))) A)
-Case conversion may be inaccurate. Consider using '#align matrix.submatrix_equiv_invertible_equiv_invertible Matrix.submatrixEquivInvertibleEquivInvertibleₓ'. -/
 /-- Together `matrix.submatrix_equiv_invertible` and
 `matrix.invertible_of_submatrix_equiv_invertible` form an equivalence, although both sides of the
 equiv are subsingleton anyway. -/
@@ -1206,12 +699,6 @@ theorem isUnit_submatrix_equiv {A : Matrix m m α} (e₁ e₂ : n ≃ m) :
 #align matrix.is_unit_submatrix_equiv Matrix.isUnit_submatrix_equiv
 -/
 
-/- warning: matrix.inv_submatrix_equiv -> Matrix.inv_submatrix_equiv is a dubious translation:
-lean 3 declaration is
-  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] [_inst_4 : Fintype.{u1} m] [_inst_5 : DecidableEq.{succ u1} m] (A : Matrix.{u1, u1, u3} m m α) (e₁ : Equiv.{succ u2, succ u1} n m) (e₂ : Equiv.{succ u2, succ u1} n m), Eq.{succ (max u2 u3)} (Matrix.{u2, u2, u3} n n α) (Inv.inv.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.hasInv.{u2, u3} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) (Matrix.submatrix.{u3, u2, u1, u1, u2} n m m n α A (coeFn.{max 1 (max (succ u2) (succ u1)) (succ u1) (succ u2), max (succ u2) (succ u1)} (Equiv.{succ u2, succ u1} n m) (fun (_x : Equiv.{succ u2, succ u1} n m) => n -> m) (Equiv.hasCoeToFun.{succ u2, succ u1} n m) e₁) (coeFn.{max 1 (max (succ u2) (succ u1)) (succ u1) (succ u2), max (succ u2) (succ u1)} (Equiv.{succ u2, succ u1} n m) (fun (_x : Equiv.{succ u2, succ u1} n m) => n -> m) (Equiv.hasCoeToFun.{succ u2, succ u1} n m) e₂))) (Matrix.submatrix.{u3, u2, u1, u1, u2} n m m n α (Inv.inv.{max u1 u3} (Matrix.{u1, u1, u3} m m α) (Matrix.hasInv.{u1, u3} m α _inst_4 (fun (a : m) (b : m) => _inst_5 a b) _inst_3) A) (coeFn.{max 1 (max (succ u2) (succ u1)) (succ u1) (succ u2), max (succ u2) (succ u1)} (Equiv.{succ u2, succ u1} n m) (fun (_x : Equiv.{succ u2, succ u1} n m) => n -> m) (Equiv.hasCoeToFun.{succ u2, succ u1} n m) e₂) (coeFn.{max 1 (max (succ u2) (succ u1)) (succ u1) (succ u2), max (succ u2) (succ u1)} (Equiv.{succ u2, succ u1} n m) (fun (_x : Equiv.{succ u2, succ u1} n m) => n -> m) (Equiv.hasCoeToFun.{succ u2, succ u1} n m) e₁))
-but is expected to have type
-  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] [_inst_4 : Fintype.{u1} m] [_inst_5 : DecidableEq.{succ u1} m] (A : Matrix.{u1, u1, u3} m m α) (e₁ : Equiv.{succ u2, succ u1} n m) (e₂ : Equiv.{succ u2, succ u1} n m), Eq.{max (succ u2) (succ u3)} (Matrix.{u2, u2, u3} n n α) (Inv.inv.{max u3 u2} (Matrix.{u2, u2, u3} n n α) (Matrix.inv.{u2, u3} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) (Matrix.submatrix.{u3, u2, u1, u1, u2} n m m n α A (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (Equiv.{succ u2, succ u1} n m) n (fun (_x : n) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : n) => m) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} n m) e₁) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (Equiv.{succ u2, succ u1} n m) n (fun (_x : n) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : n) => m) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} n m) e₂))) (Matrix.submatrix.{u3, u2, u1, u1, u2} n m m n α (Inv.inv.{max u1 u3} (Matrix.{u1, u1, u3} m m α) (Matrix.inv.{u1, u3} m α _inst_4 (fun (a : m) (b : m) => _inst_5 a b) _inst_3) A) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (Equiv.{succ u2, succ u1} n m) n (fun (_x : n) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : n) => m) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} n m) e₂) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (Equiv.{succ u2, succ u1} n m) n (fun (_x : n) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : n) => m) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} n m) e₁))
-Case conversion may be inaccurate. Consider using '#align matrix.inv_submatrix_equiv Matrix.inv_submatrix_equivₓ'. -/
 @[simp]
 theorem inv_submatrix_equiv (A : Matrix m m α) (e₁ e₂ : n ≃ m) :
     (A.submatrix e₁ e₂)⁻¹ = A⁻¹.submatrix e₂ e₁ :=
@@ -1225,12 +712,6 @@ theorem inv_submatrix_equiv (A : Matrix m m α) (e₁ e₂ : n ≃ m) :
       submatrix_zero, Pi.zero_apply]
 #align matrix.inv_submatrix_equiv Matrix.inv_submatrix_equiv
 
-/- warning: matrix.inv_reindex -> Matrix.inv_reindex is a dubious translation:
-lean 3 declaration is
-  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] [_inst_4 : Fintype.{u1} m] [_inst_5 : DecidableEq.{succ u1} m] (e₁ : Equiv.{succ u2, succ u1} n m) (e₂ : Equiv.{succ u2, succ u1} n m) (A : Matrix.{u2, u2, u3} n n α), Eq.{succ (max u1 u3)} (Matrix.{u1, u1, u3} m m α) (Inv.inv.{max u1 u3} (Matrix.{u1, u1, u3} m m α) (Matrix.hasInv.{u1, u3} m α _inst_4 (fun (a : m) (b : m) => _inst_5 a b) _inst_3) (coeFn.{max 1 (max (succ (max u2 u3)) (succ (max u1 u3))) (succ (max u1 u3)) (succ (max u2 u3)), max (succ (max u2 u3)) (succ (max u1 u3))} (Equiv.{succ (max u2 u3), succ (max u1 u3)} (Matrix.{u2, u2, u3} n n α) (Matrix.{u1, u1, u3} m m α)) (fun (_x : Equiv.{succ (max u2 u3), succ (max u1 u3)} (Matrix.{u2, u2, u3} n n α) (Matrix.{u1, u1, u3} m m α)) => (Matrix.{u2, u2, u3} n n α) -> (Matrix.{u1, u1, u3} m m α)) (Equiv.hasCoeToFun.{succ (max u2 u3), succ (max u1 u3)} (Matrix.{u2, u2, u3} n n α) (Matrix.{u1, u1, u3} m m α)) (Matrix.reindex.{u3, u1, u2, u2, u1} m n n m α e₁ e₂) A)) (coeFn.{max 1 (max (succ (max u2 u3)) (succ (max u1 u3))) (succ (max u1 u3)) (succ (max u2 u3)), max (succ (max u2 u3)) (succ (max u1 u3))} (Equiv.{succ (max u2 u3), succ (max u1 u3)} (Matrix.{u2, u2, u3} n n α) (Matrix.{u1, u1, u3} m m α)) (fun (_x : Equiv.{succ (max u2 u3), succ (max u1 u3)} (Matrix.{u2, u2, u3} n n α) (Matrix.{u1, u1, u3} m m α)) => (Matrix.{u2, u2, u3} n n α) -> (Matrix.{u1, u1, u3} m m α)) (Equiv.hasCoeToFun.{succ (max u2 u3), succ (max u1 u3)} (Matrix.{u2, u2, u3} n n α) (Matrix.{u1, u1, u3} m m α)) (Matrix.reindex.{u3, u1, u2, u2, u1} m n n m α e₂ e₁) (Inv.inv.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.hasInv.{u2, u3} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A))
-but is expected to have type
-  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] [_inst_4 : Fintype.{u1} m] [_inst_5 : DecidableEq.{succ u1} m] (e₁ : Equiv.{succ u2, succ u1} n m) (e₂ : Equiv.{succ u2, succ u1} n m) (A : Matrix.{u2, u2, u3} n n α), Eq.{max (succ u1) (succ u3)} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : Matrix.{u2, u2, u3} n n α) => Matrix.{u1, u1, u3} m m α) A) (Inv.inv.{max u1 u3} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : Matrix.{u2, u2, u3} n n α) => Matrix.{u1, u1, u3} m m α) A) (Matrix.inv.{u1, u3} m α _inst_4 (fun (a : m) (b : m) => _inst_5 a b) _inst_3) (FunLike.coe.{max (max (succ u1) (succ u2)) (succ u3), max (succ u2) (succ u3), max (succ u1) (succ u3)} (Equiv.{max (succ u3) (succ u2), max (succ u3) (succ u1)} (Matrix.{u2, u2, u3} n n α) (Matrix.{u1, u1, u3} m m α)) (Matrix.{u2, u2, u3} n n α) (fun (_x : Matrix.{u2, u2, u3} n n α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : Matrix.{u2, u2, u3} n n α) => Matrix.{u1, u1, u3} m m α) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u3), max (succ u1) (succ u3)} (Matrix.{u2, u2, u3} n n α) (Matrix.{u1, u1, u3} m m α)) (Matrix.reindex.{u3, u1, u2, u2, u1} m n n m α e₁ e₂) A)) (FunLike.coe.{max (max (succ u1) (succ u2)) (succ u3), max (succ u2) (succ u3), max (succ u1) (succ u3)} (Equiv.{max (succ u3) (succ u2), max (succ u3) (succ u1)} (Matrix.{u2, u2, u3} n n α) (Matrix.{u1, u1, u3} m m α)) (Matrix.{u2, u2, u3} n n α) (fun (_x : Matrix.{u2, u2, u3} n n α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : Matrix.{u2, u2, u3} n n α) => Matrix.{u1, u1, u3} m m α) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u3), max (succ u1) (succ u3)} (Matrix.{u2, u2, u3} n n α) (Matrix.{u1, u1, u3} m m α)) (Matrix.reindex.{u3, u1, u2, u2, u1} m n n m α e₂ e₁) (Inv.inv.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.inv.{u2, u3} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A))
-Case conversion may be inaccurate. Consider using '#align matrix.inv_reindex Matrix.inv_reindexₓ'. -/
 theorem inv_reindex (e₁ e₂ : n ≃ m) (A : Matrix n n α) : (reindex e₁ e₂ A)⁻¹ = reindex e₂ e₁ A⁻¹ :=
   inv_submatrix_equiv A e₁.symm e₂.symm
 #align matrix.inv_reindex Matrix.inv_reindex
@@ -1244,23 +725,11 @@ section Det
 
 variable [Fintype m] [DecidableEq m]
 
-/- warning: matrix.det_conj -> Matrix.det_conj is a dubious translation:
-lean 3 declaration is
-  forall {m : Type.{u1}} {α : Type.{u2}} [_inst_3 : CommRing.{u2} α] [_inst_4 : Fintype.{u1} m] [_inst_5 : DecidableEq.{succ u1} m] {M : Matrix.{u1, u1, u2} m m α}, (IsUnit.{max u1 u2} (Matrix.{u1, u1, u2} m m α) (Ring.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} m m α) (Matrix.ring.{u2, u1} m α _inst_4 (fun (a : m) (b : m) => _inst_5 a b) (CommRing.toRing.{u2} α _inst_3))) M) -> (forall (N : Matrix.{u1, u1, u2} m m α), Eq.{succ u2} α (Matrix.det.{u2, u1} m (fun (a : m) (b : m) => _inst_5 a b) _inst_4 α _inst_3 (Matrix.mul.{u2, u1, u1, u1} m m m α _inst_4 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Matrix.mul.{u2, u1, u1, u1} m m m α _inst_4 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) M N) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} m m α) (Matrix.hasInv.{u1, u2} m α _inst_4 (fun (a : m) (b : m) => _inst_5 a b) _inst_3) M))) (Matrix.det.{u2, u1} m (fun (a : m) (b : m) => _inst_5 a b) _inst_4 α _inst_3 N))
-but is expected to have type
-  forall {m : Type.{u1}} {α : Type.{u2}} [_inst_3 : CommRing.{u2} α] [_inst_4 : Fintype.{u1} m] [_inst_5 : DecidableEq.{succ u1} m] {M : Matrix.{u1, u1, u2} m m α}, (IsUnit.{max u1 u2} (Matrix.{u1, u1, u2} m m α) (MonoidWithZero.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} m m α) (Semiring.toMonoidWithZero.{max u1 u2} (Matrix.{u1, u1, u2} m m α) (Matrix.semiring.{u2, u1} m α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) _inst_4 (fun (a : m) (b : m) => _inst_5 a b)))) M) -> (forall (N : Matrix.{u1, u1, u2} m m α), Eq.{succ u2} α (Matrix.det.{u2, u1} m (fun (a : m) (b : m) => _inst_5 a b) _inst_4 α _inst_3 (Matrix.mul.{u2, u1, u1, u1} m m m α _inst_4 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Matrix.mul.{u2, u1, u1, u1} m m m α _inst_4 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) M N) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} m m α) (Matrix.inv.{u1, u2} m α _inst_4 (fun (a : m) (b : m) => _inst_5 a b) _inst_3) M))) (Matrix.det.{u2, u1} m (fun (a : m) (b : m) => _inst_5 a b) _inst_4 α _inst_3 N))
-Case conversion may be inaccurate. Consider using '#align matrix.det_conj Matrix.det_conjₓ'. -/
 /-- A variant of `matrix.det_units_conj`. -/
 theorem det_conj {M : Matrix m m α} (h : IsUnit M) (N : Matrix m m α) : det (M ⬝ N ⬝ M⁻¹) = det N :=
   by rw [← h.unit_spec, ← coe_units_inv, det_units_conj]
 #align matrix.det_conj Matrix.det_conj
 
-/- warning: matrix.det_conj' -> Matrix.det_conj' is a dubious translation:
-lean 3 declaration is
-  forall {m : Type.{u1}} {α : Type.{u2}} [_inst_3 : CommRing.{u2} α] [_inst_4 : Fintype.{u1} m] [_inst_5 : DecidableEq.{succ u1} m] {M : Matrix.{u1, u1, u2} m m α}, (IsUnit.{max u1 u2} (Matrix.{u1, u1, u2} m m α) (Ring.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} m m α) (Matrix.ring.{u2, u1} m α _inst_4 (fun (a : m) (b : m) => _inst_5 a b) (CommRing.toRing.{u2} α _inst_3))) M) -> (forall (N : Matrix.{u1, u1, u2} m m α), Eq.{succ u2} α (Matrix.det.{u2, u1} m (fun (a : m) (b : m) => _inst_5 a b) _inst_4 α _inst_3 (Matrix.mul.{u2, u1, u1, u1} m m m α _inst_4 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Matrix.mul.{u2, u1, u1, u1} m m m α _inst_4 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} m m α) (Matrix.hasInv.{u1, u2} m α _inst_4 (fun (a : m) (b : m) => _inst_5 a b) _inst_3) M) N) M)) (Matrix.det.{u2, u1} m (fun (a : m) (b : m) => _inst_5 a b) _inst_4 α _inst_3 N))
-but is expected to have type
-  forall {m : Type.{u1}} {α : Type.{u2}} [_inst_3 : CommRing.{u2} α] [_inst_4 : Fintype.{u1} m] [_inst_5 : DecidableEq.{succ u1} m] {M : Matrix.{u1, u1, u2} m m α}, (IsUnit.{max u1 u2} (Matrix.{u1, u1, u2} m m α) (MonoidWithZero.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} m m α) (Semiring.toMonoidWithZero.{max u1 u2} (Matrix.{u1, u1, u2} m m α) (Matrix.semiring.{u2, u1} m α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) _inst_4 (fun (a : m) (b : m) => _inst_5 a b)))) M) -> (forall (N : Matrix.{u1, u1, u2} m m α), Eq.{succ u2} α (Matrix.det.{u2, u1} m (fun (a : m) (b : m) => _inst_5 a b) _inst_4 α _inst_3 (Matrix.mul.{u2, u1, u1, u1} m m m α _inst_4 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Matrix.mul.{u2, u1, u1, u1} m m m α _inst_4 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} m m α) (Matrix.inv.{u1, u2} m α _inst_4 (fun (a : m) (b : m) => _inst_5 a b) _inst_3) M) N) M)) (Matrix.det.{u2, u1} m (fun (a : m) (b : m) => _inst_5 a b) _inst_4 α _inst_3 N))
-Case conversion may be inaccurate. Consider using '#align matrix.det_conj' Matrix.det_conj'ₓ'. -/
 /-- A variant of `matrix.det_units_conj'`. -/
 theorem det_conj' {M : Matrix m m α} (h : IsUnit M) (N : Matrix m m α) :
     det (M⁻¹ ⬝ N ⬝ M) = det N := by rw [← h.unit_spec, ← coe_units_inv, det_units_conj']
Diff
@@ -162,10 +162,8 @@ lean 3 declaration is
 but is expected to have type
   forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{u2} α (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)] [_inst_5 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) A], Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Invertible.invOf.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) A _inst_5) (HSMul.hSMul.{u2, max u1 u2, max u1 u2} α (Matrix.{u1, u1, u2} n n α) (Matrix.{u1, u1, u2} n n α) (instHSMul.{u2, max u1 u2} α (Matrix.{u1, u1, u2} n n α) (Matrix.smul.{u2, u1, u1, u2} n n α α (Algebra.toSMul.{u2, u2} α α (CommRing.toCommSemiring.{u2} α _inst_3) (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (Algebra.id.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) (Invertible.invOf.{u2} α (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A) _inst_4) (Matrix.adjugate.{u1, u2} n α (fun (a : n) (b : n) => _inst_2 a b) _inst_1 _inst_3 A))
 Case conversion may be inaccurate. Consider using '#align matrix.inv_of_eq Matrix.invOf_eqₓ'. -/
-theorem invOf_eq [Invertible A.det] [Invertible A] : ⅟ A = ⅟ A.det • A.adjugate :=
-  by
-  letI := invertible_of_det_invertible A
-  convert(rfl : ⅟ A = _)
+theorem invOf_eq [Invertible A.det] [Invertible A] : ⅟ A = ⅟ A.det • A.adjugate := by
+  letI := invertible_of_det_invertible A; convert(rfl : ⅟ A = _)
 #align matrix.inv_of_eq Matrix.invOf_eq
 
 /- warning: matrix.det_invertible_of_left_inverse -> Matrix.detInvertibleOfLeftInverse is a dubious translation:
@@ -213,10 +211,8 @@ lean 3 declaration is
 but is expected to have type
   forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) A] [_inst_5 : Invertible.{u2} α (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)], Eq.{succ u2} α (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 (Invertible.invOf.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) A _inst_4)) (Invertible.invOf.{u2} α (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A) _inst_5)
 Case conversion may be inaccurate. Consider using '#align matrix.det_inv_of Matrix.det_invOfₓ'. -/
-theorem det_invOf [Invertible A] [Invertible A.det] : (⅟ A).det = ⅟ A.det :=
-  by
-  letI := det_invertible_of_invertible A
-  convert(rfl : _ = ⅟ A.det)
+theorem det_invOf [Invertible A] [Invertible A.det] : (⅟ A).det = ⅟ A.det := by
+  letI := det_invertible_of_invertible A; convert(rfl : _ = ⅟ A.det)
 #align matrix.det_inv_of Matrix.det_invOf
 
 /- warning: matrix.invertible_equiv_det_invertible -> Matrix.invertibleEquivDetInvertible is a dubious translation:
@@ -428,10 +424,7 @@ lean 3 declaration is
 but is expected to have type
   forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), (IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 (Matrix.transpose.{u2, u1, u1} n n α A)))
 Case conversion may be inaccurate. Consider using '#align matrix.is_unit_det_transpose Matrix.isUnit_det_transposeₓ'. -/
-theorem isUnit_det_transpose (h : IsUnit A.det) : IsUnit Aᵀ.det :=
-  by
-  rw [det_transpose]
-  exact h
+theorem isUnit_det_transpose (h : IsUnit A.det) : IsUnit Aᵀ.det := by rw [det_transpose]; exact h
 #align matrix.is_unit_det_transpose Matrix.isUnit_det_transpose
 
 /-! ### A noncomputable `has_inv` instance  -/
@@ -565,10 +558,7 @@ theorem nonsing_inv_mul (h : IsUnit A.det) : A⁻¹ ⬝ A = 1 :=
   rw [← inv_of_eq_nonsing_inv, Matrix.invOf_mul_self]
 #align matrix.nonsing_inv_mul Matrix.nonsing_inv_mul
 
-instance [Invertible A] : Invertible A⁻¹ :=
-  by
-  rw [← inv_of_eq_nonsing_inv]
-  infer_instance
+instance [Invertible A] : Invertible A⁻¹ := by rw [← inv_of_eq_nonsing_inv]; infer_instance
 
 /- warning: matrix.inv_inv_of_invertible -> Matrix.inv_inv_of_invertible is a dubious translation:
 lean 3 declaration is
@@ -748,8 +738,7 @@ Case conversion may be inaccurate. Consider using '#align matrix.det_nonsing_inv
 theorem det_nonsing_inv : A⁻¹.det = Ring.inverse A.det :=
   by
   by_cases h : IsUnit A.det
-  · cases h.nonempty_invertible
-    letI := invertible_of_det_invertible A
+  · cases h.nonempty_invertible; letI := invertible_of_det_invertible A
     rw [Ring.inverse_invertible, ← inv_of_eq_nonsing_inv, det_inv_of]
   cases isEmpty_or_nonempty n
   · rw [det_is_empty, det_is_empty, Ring.inverse_one]
@@ -824,10 +813,7 @@ but is expected to have type
   forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{u2} α (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)], Eq.{max (succ u1) (succ u2)} (Units.{max u2 u1} (Matrix.{u1, u1, u2} n n α) (MonoidWithZero.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Semiring.toMonoidWithZero.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.semiring.{u2, u1} n α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) _inst_1 (fun (a : n) (b : n) => _inst_2 a b))))) (Matrix.unitOfDetInvertible.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3 A _inst_4) (Matrix.nonsingInvUnit.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3 A (isUnit_of_invertible.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A) _inst_4))
 Case conversion may be inaccurate. Consider using '#align matrix.unit_of_det_invertible_eq_nonsing_inv_unit Matrix.unitOfDetInvertible_eq_nonsingInvUnitₓ'. -/
 theorem unitOfDetInvertible_eq_nonsingInvUnit [Invertible A.det] :
-    unitOfDetInvertible A = nonsingInvUnit A (isUnit_of_invertible _) :=
-  by
-  ext
-  rfl
+    unitOfDetInvertible A = nonsingInvUnit A (isUnit_of_invertible _) := by ext; rfl
 #align matrix.unit_of_det_invertible_eq_nonsing_inv_unit Matrix.unitOfDetInvertible_eq_nonsingInvUnit
 
 variable {A} {B}
Diff
@@ -1115,10 +1115,7 @@ theorem list_prod_inv_reverse : ∀ l : List (Matrix n n α), l.Prod⁻¹ = (l.r
 #align matrix.list_prod_inv_reverse Matrix.list_prod_inv_reverse
 
 /- warning: matrix.det_smul_inv_mul_vec_eq_cramer -> Matrix.det_smul_inv_mulVec_eq_cramer is a dubious translation:
-lean 3 declaration is
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (b : n -> α), (IsUnit.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{succ (max u1 u2)} (n -> α) (SMul.smul.{u2, max u1 u2} α (n -> α) (Function.hasSMul.{u1, u2, u2} n α α (Mul.toSMul.{u2} α (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A) (Matrix.mulVec.{u2, u1, u1} n n α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) _inst_1 (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) b)) (coeFn.{succ (max u1 u2), succ (max u1 u2)} (LinearMap.{u2, u2, max u1 u2, max u1 u2} α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (RingHom.id.{u2} α (Semiring.toNonAssocSemiring.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (n -> α) (n -> α) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.Function.module.{u1, u2, u2} n α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Pi.Function.module.{u1, u2, u2} n α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (_x : LinearMap.{u2, u2, max u1 u2, max u1 u2} α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (RingHom.id.{u2} α (Semiring.toNonAssocSemiring.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (n -> α) (n -> α) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.Function.module.{u1, u2, u2} n α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Pi.Function.module.{u1, u2, u2} n α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3))))) => (n -> α) -> n -> α) (LinearMap.hasCoeToFun.{u2, u2, max u1 u2, max u1 u2} α α (n -> α) (n -> α) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.Function.module.{u1, u2, u2} n α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Pi.Function.module.{u1, u2, u2} n α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (RingHom.id.{u2} α (Semiring.toNonAssocSemiring.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Matrix.cramer.{u1, u2} n α (fun (a : n) (b : n) => _inst_2 a b) _inst_1 _inst_3 A) b))
-but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (b : n -> α), (IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{max (succ u1) (succ u2)} (n -> α) (HSMul.hSMul.{u2, max u1 u2, max u1 u2} α (n -> α) (n -> α) (instHSMul.{u2, max u1 u2} α (n -> α) (Pi.instSMul.{u1, u2, u2} n α (fun (a._@.Mathlib.Data.Matrix.Basic._hyg.18074 : n) => α) (fun (i : n) => Algebra.toSMul.{u2, u2} α α (CommRing.toCommSemiring.{u2} α _inst_3) (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (Algebra.id.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A) (Matrix.mulVec.{u2, u1, u1} n n α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) _inst_1 (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) b)) (FunLike.coe.{max (succ u1) (succ u2), max (succ u1) (succ u2), max (succ u1) (succ u2)} (LinearMap.{u2, u2, max u1 u2, max u1 u2} α α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (RingHom.id.{u2} α (Semiring.toNonAssocSemiring.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (n -> α) (n -> α) (Pi.addCommMonoid.{u1, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.273 : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.addCommMonoid.{u1, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.273 : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.273 : n) => α) α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => Semiring.toModule.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.273 : n) => α) α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => Semiring.toModule.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) (n -> α) (fun (_x : n -> α) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6193 : n -> α) => n -> α) _x) (LinearMap.instFunLikeLinearMap.{u2, u2, max u1 u2, max u1 u2} α α (n -> α) (n -> α) (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.273 : n) => α) α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => Semiring.toModule.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.273 : n) => α) α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => Semiring.toModule.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (RingHom.id.{u2} α (Semiring.toNonAssocSemiring.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) (Matrix.cramer.{u1, u2} n α (fun (a : n) (b : n) => _inst_2 a b) _inst_1 _inst_3 A) b))
+<too large>
 Case conversion may be inaccurate. Consider using '#align matrix.det_smul_inv_mul_vec_eq_cramer Matrix.det_smul_inv_mulVec_eq_cramerₓ'. -/
 /-- One form of **Cramer's rule**. See `matrix.mul_vec_cramer` for a stronger form. -/
 @[simp]
@@ -1129,10 +1126,7 @@ theorem det_smul_inv_mulVec_eq_cramer (A : Matrix n n α) (b : n → α) (h : Is
 #align matrix.det_smul_inv_mul_vec_eq_cramer Matrix.det_smul_inv_mulVec_eq_cramer
 
 /- warning: matrix.det_smul_inv_vec_mul_eq_cramer_transpose -> Matrix.det_smul_inv_vecMul_eq_cramer_transpose is a dubious translation:
-lean 3 declaration is
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (b : n -> α), (IsUnit.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{succ (max u1 u2)} (n -> α) (SMul.smul.{u2, max u1 u2} α (n -> α) (Function.hasSMul.{u1, u2, u2} n α α (Mul.toSMul.{u2} α (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A) (Matrix.vecMul.{u2, u1, u1} n n α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) _inst_1 b (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A))) (coeFn.{succ (max u1 u2), succ (max u1 u2)} (LinearMap.{u2, u2, max u1 u2, max u1 u2} α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (RingHom.id.{u2} α (Semiring.toNonAssocSemiring.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (n -> α) (n -> α) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.Function.module.{u1, u2, u2} n α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Pi.Function.module.{u1, u2, u2} n α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (_x : LinearMap.{u2, u2, max u1 u2, max u1 u2} α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (RingHom.id.{u2} α (Semiring.toNonAssocSemiring.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (n -> α) (n -> α) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.Function.module.{u1, u2, u2} n α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Pi.Function.module.{u1, u2, u2} n α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3))))) => (n -> α) -> n -> α) (LinearMap.hasCoeToFun.{u2, u2, max u1 u2, max u1 u2} α α (n -> α) (n -> α) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.Function.module.{u1, u2, u2} n α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Pi.Function.module.{u1, u2, u2} n α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (RingHom.id.{u2} α (Semiring.toNonAssocSemiring.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Matrix.cramer.{u1, u2} n α (fun (a : n) (b : n) => _inst_2 a b) _inst_1 _inst_3 (Matrix.transpose.{u2, u1, u1} n n α A)) b))
-but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (b : n -> α), (IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{max (succ u1) (succ u2)} (n -> α) (HSMul.hSMul.{u2, max u1 u2, max u1 u2} α (n -> α) (n -> α) (instHSMul.{u2, max u1 u2} α (n -> α) (Pi.instSMul.{u1, u2, u2} n α (fun (a._@.Mathlib.Data.Matrix.Basic._hyg.18132 : n) => α) (fun (i : n) => Algebra.toSMul.{u2, u2} α α (CommRing.toCommSemiring.{u2} α _inst_3) (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (Algebra.id.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A) (Matrix.vecMul.{u2, u1, u1} n n α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) _inst_1 b (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A))) (FunLike.coe.{max (succ u1) (succ u2), max (succ u1) (succ u2), max (succ u1) (succ u2)} (LinearMap.{u2, u2, max u1 u2, max u1 u2} α α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (RingHom.id.{u2} α (Semiring.toNonAssocSemiring.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (n -> α) (n -> α) (Pi.addCommMonoid.{u1, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.273 : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.addCommMonoid.{u1, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.273 : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.273 : n) => α) α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => Semiring.toModule.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.273 : n) => α) α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => Semiring.toModule.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) (n -> α) (fun (_x : n -> α) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6193 : n -> α) => n -> α) _x) (LinearMap.instFunLikeLinearMap.{u2, u2, max u1 u2, max u1 u2} α α (n -> α) (n -> α) (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.273 : n) => α) α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => Semiring.toModule.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.273 : n) => α) α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => Semiring.toModule.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (RingHom.id.{u2} α (Semiring.toNonAssocSemiring.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) (Matrix.cramer.{u1, u2} n α (fun (a : n) (b : n) => _inst_2 a b) _inst_1 _inst_3 (Matrix.transpose.{u2, u1, u1} n n α A)) b))
+<too large>
 Case conversion may be inaccurate. Consider using '#align matrix.det_smul_inv_vec_mul_eq_cramer_transpose Matrix.det_smul_inv_vecMul_eq_cramer_transposeₓ'. -/
 /-- One form of **Cramer's rule**. See `matrix.mul_vec_cramer` for a stronger form. -/
 @[simp]
@@ -1187,10 +1181,7 @@ def invertibleOfSubmatrixEquivInvertible (A : Matrix m m α) (e₁ e₂ : n ≃
 #align matrix.invertible_of_submatrix_equiv_invertible Matrix.invertibleOfSubmatrixEquivInvertible
 
 /- warning: matrix.inv_of_submatrix_equiv_eq -> Matrix.invOf_submatrix_equiv_eq is a dubious translation:
-lean 3 declaration is
-  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] [_inst_4 : Fintype.{u1} m] [_inst_5 : DecidableEq.{succ u1} m] (A : Matrix.{u1, u1, u3} m m α) (e₁ : Equiv.{succ u2, succ u1} n m) (e₂ : Equiv.{succ u2, succ u1} n m) [_inst_6 : Invertible.{max u1 u3} (Matrix.{u1, u1, u3} m m α) (Matrix.hasMul.{u3, u1} m α _inst_4 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.hasOne.{u3, u1} m α (fun (a : m) (b : m) => _inst_5 a b) (MulZeroClass.toHasZero.{u3} α (NonUnitalNonAssocSemiring.toMulZeroClass.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (AddMonoidWithOne.toOne.{u3} α (AddGroupWithOne.toAddMonoidWithOne.{u3} α (AddCommGroupWithOne.toAddGroupWithOne.{u3} α (Ring.toAddCommGroupWithOne.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) A] [_inst_7 : Invertible.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.hasMul.{u3, u2} n α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.hasOne.{u3, u2} 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} α (CommRing.toRing.{u3} α _inst_3)))))) (AddMonoidWithOne.toOne.{u3} α (AddGroupWithOne.toAddMonoidWithOne.{u3} α (AddCommGroupWithOne.toAddGroupWithOne.{u3} α (Ring.toAddCommGroupWithOne.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.submatrix.{u3, u2, u1, u1, u2} n m m n α A (coeFn.{max 1 (max (succ u2) (succ u1)) (succ u1) (succ u2), max (succ u2) (succ u1)} (Equiv.{succ u2, succ u1} n m) (fun (_x : Equiv.{succ u2, succ u1} n m) => n -> m) (Equiv.hasCoeToFun.{succ u2, succ u1} n m) e₁) (coeFn.{max 1 (max (succ u2) (succ u1)) (succ u1) (succ u2), max (succ u2) (succ u1)} (Equiv.{succ u2, succ u1} n m) (fun (_x : Equiv.{succ u2, succ u1} n m) => n -> m) (Equiv.hasCoeToFun.{succ u2, succ u1} n m) e₂))], Eq.{succ (max u2 u3)} (Matrix.{u2, u2, u3} n n α) (Invertible.invOf.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.hasMul.{u3, u2} n α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.hasOne.{u3, u2} 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} α (CommRing.toRing.{u3} α _inst_3)))))) (AddMonoidWithOne.toOne.{u3} α (AddGroupWithOne.toAddMonoidWithOne.{u3} α (AddCommGroupWithOne.toAddGroupWithOne.{u3} α (Ring.toAddCommGroupWithOne.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.submatrix.{u3, u2, u1, u1, u2} n m m n α A (coeFn.{max 1 (max (succ u2) (succ u1)) (succ u1) (succ u2), max (succ u2) (succ u1)} (Equiv.{succ u2, succ u1} n m) (fun (_x : Equiv.{succ u2, succ u1} n m) => n -> m) (Equiv.hasCoeToFun.{succ u2, succ u1} n m) e₁) (coeFn.{max 1 (max (succ u2) (succ u1)) (succ u1) (succ u2), max (succ u2) (succ u1)} (Equiv.{succ u2, succ u1} n m) (fun (_x : Equiv.{succ u2, succ u1} n m) => n -> m) (Equiv.hasCoeToFun.{succ u2, succ u1} n m) e₂)) _inst_7) (Matrix.submatrix.{u3, u2, u1, u1, u2} n m m n α (Invertible.invOf.{max u1 u3} (Matrix.{u1, u1, u3} m m α) (Matrix.hasMul.{u3, u1} m α _inst_4 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.hasOne.{u3, u1} m α (fun (a : m) (b : m) => _inst_5 a b) (MulZeroClass.toHasZero.{u3} α (NonUnitalNonAssocSemiring.toMulZeroClass.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (AddMonoidWithOne.toOne.{u3} α (AddGroupWithOne.toAddMonoidWithOne.{u3} α (AddCommGroupWithOne.toAddGroupWithOne.{u3} α (Ring.toAddCommGroupWithOne.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) A _inst_6) (coeFn.{max 1 (max (succ u2) (succ u1)) (succ u1) (succ u2), max (succ u2) (succ u1)} (Equiv.{succ u2, succ u1} n m) (fun (_x : Equiv.{succ u2, succ u1} n m) => n -> m) (Equiv.hasCoeToFun.{succ u2, succ u1} n m) e₂) (coeFn.{max 1 (max (succ u2) (succ u1)) (succ u1) (succ u2), max (succ u2) (succ u1)} (Equiv.{succ u2, succ u1} n m) (fun (_x : Equiv.{succ u2, succ u1} n m) => n -> m) (Equiv.hasCoeToFun.{succ u2, succ u1} n m) e₁))
-but is expected to have type
-  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] [_inst_4 : Fintype.{u1} m] [_inst_5 : DecidableEq.{succ u1} m] (A : Matrix.{u1, u1, u3} m m α) (e₁ : Equiv.{succ u2, succ u1} n m) (e₂ : Equiv.{succ u2, succ u1} n m) [_inst_6 : Invertible.{max u1 u3} (Matrix.{u1, u1, u3} m m α) (Matrix.instMulMatrix.{u3, u1} m α _inst_4 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u1} m α (fun (a : m) (b : m) => _inst_5 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (Semiring.toOne.{u3} α (CommSemiring.toSemiring.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3)))) A] [_inst_7 : Invertible.{max u3 u2} (Matrix.{u2, u2, u3} n n α) (Matrix.instMulMatrix.{u3, u2} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u2} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (Semiring.toOne.{u3} α (CommSemiring.toSemiring.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3)))) (Matrix.submatrix.{u3, u2, u1, u1, u2} n m m n α A (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (Equiv.{succ u2, succ u1} n m) n (fun (_x : n) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : n) => m) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} n m) e₁) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (Equiv.{succ u2, succ u1} n m) n (fun (_x : n) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : n) => m) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} n m) e₂))], Eq.{max (succ u2) (succ u3)} (Matrix.{u2, u2, u3} n n α) (Invertible.invOf.{max u3 u2} (Matrix.{u2, u2, u3} n n α) (Matrix.instMulMatrix.{u3, u2} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u2} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (Semiring.toOne.{u3} α (CommSemiring.toSemiring.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3)))) (Matrix.submatrix.{u3, u2, u1, u1, u2} n m m n α A (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (Equiv.{succ u2, succ u1} n m) n (fun (_x : n) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : n) => m) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} n m) e₁) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (Equiv.{succ u2, succ u1} n m) n (fun (_x : n) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : n) => m) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} n m) e₂)) _inst_7) (Matrix.submatrix.{u3, u2, u1, u1, u2} n m m n α (Invertible.invOf.{max u1 u3} (Matrix.{u1, u1, u3} m m α) (Matrix.instMulMatrix.{u3, u1} m α _inst_4 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u1} m α (fun (a : m) (b : m) => _inst_5 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (Semiring.toOne.{u3} α (CommSemiring.toSemiring.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3)))) A _inst_6) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (Equiv.{succ u2, succ u1} n m) n (fun (_x : n) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : n) => m) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} n m) e₂) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (Equiv.{succ u2, succ u1} n m) n (fun (_x : n) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : n) => m) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} n m) e₁))
+<too large>
 Case conversion may be inaccurate. Consider using '#align matrix.inv_of_submatrix_equiv_eq Matrix.invOf_submatrix_equiv_eqₓ'. -/
 theorem invOf_submatrix_equiv_eq (A : Matrix m m α) (e₁ e₂ : n ≃ m) [Invertible A]
     [Invertible (A.submatrix e₁ e₂)] : ⅟ (A.submatrix e₁ e₂) = (⅟ A).submatrix e₂ e₁ :=
Diff
@@ -1118,7 +1118,7 @@ theorem list_prod_inv_reverse : ∀ l : List (Matrix n n α), l.Prod⁻¹ = (l.r
 lean 3 declaration is
   forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (b : n -> α), (IsUnit.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{succ (max u1 u2)} (n -> α) (SMul.smul.{u2, max u1 u2} α (n -> α) (Function.hasSMul.{u1, u2, u2} n α α (Mul.toSMul.{u2} α (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A) (Matrix.mulVec.{u2, u1, u1} n n α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) _inst_1 (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) b)) (coeFn.{succ (max u1 u2), succ (max u1 u2)} (LinearMap.{u2, u2, max u1 u2, max u1 u2} α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (RingHom.id.{u2} α (Semiring.toNonAssocSemiring.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (n -> α) (n -> α) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.Function.module.{u1, u2, u2} n α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Pi.Function.module.{u1, u2, u2} n α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (_x : LinearMap.{u2, u2, max u1 u2, max u1 u2} α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (RingHom.id.{u2} α (Semiring.toNonAssocSemiring.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (n -> α) (n -> α) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.Function.module.{u1, u2, u2} n α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Pi.Function.module.{u1, u2, u2} n α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3))))) => (n -> α) -> n -> α) (LinearMap.hasCoeToFun.{u2, u2, max u1 u2, max u1 u2} α α (n -> α) (n -> α) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.Function.module.{u1, u2, u2} n α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Pi.Function.module.{u1, u2, u2} n α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (RingHom.id.{u2} α (Semiring.toNonAssocSemiring.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Matrix.cramer.{u1, u2} n α (fun (a : n) (b : n) => _inst_2 a b) _inst_1 _inst_3 A) b))
 but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (b : n -> α), (IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{max (succ u1) (succ u2)} (n -> α) (HSMul.hSMul.{u2, max u1 u2, max u1 u2} α (n -> α) (n -> α) (instHSMul.{u2, max u1 u2} α (n -> α) (Pi.instSMul.{u1, u2, u2} n α (fun (a._@.Mathlib.Data.Matrix.Basic._hyg.18074 : n) => α) (fun (i : n) => Algebra.toSMul.{u2, u2} α α (CommRing.toCommSemiring.{u2} α _inst_3) (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (Algebra.id.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A) (Matrix.mulVec.{u2, u1, u1} n n α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) _inst_1 (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) b)) (FunLike.coe.{max (succ u1) (succ u2), max (succ u1) (succ u2), max (succ u1) (succ u2)} (LinearMap.{u2, u2, max u1 u2, max u1 u2} α α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (RingHom.id.{u2} α (Semiring.toNonAssocSemiring.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (n -> α) (n -> α) (Pi.addCommMonoid.{u1, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.273 : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.addCommMonoid.{u1, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.273 : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.273 : n) => α) α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => Semiring.toModule.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.273 : n) => α) α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => Semiring.toModule.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) (n -> α) (fun (_x : n -> α) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6191 : n -> α) => n -> α) _x) (LinearMap.instFunLikeLinearMap.{u2, u2, max u1 u2, max u1 u2} α α (n -> α) (n -> α) (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.273 : n) => α) α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => Semiring.toModule.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.273 : n) => α) α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => Semiring.toModule.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (RingHom.id.{u2} α (Semiring.toNonAssocSemiring.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) (Matrix.cramer.{u1, u2} n α (fun (a : n) (b : n) => _inst_2 a b) _inst_1 _inst_3 A) b))
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (b : n -> α), (IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{max (succ u1) (succ u2)} (n -> α) (HSMul.hSMul.{u2, max u1 u2, max u1 u2} α (n -> α) (n -> α) (instHSMul.{u2, max u1 u2} α (n -> α) (Pi.instSMul.{u1, u2, u2} n α (fun (a._@.Mathlib.Data.Matrix.Basic._hyg.18074 : n) => α) (fun (i : n) => Algebra.toSMul.{u2, u2} α α (CommRing.toCommSemiring.{u2} α _inst_3) (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (Algebra.id.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A) (Matrix.mulVec.{u2, u1, u1} n n α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) _inst_1 (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) b)) (FunLike.coe.{max (succ u1) (succ u2), max (succ u1) (succ u2), max (succ u1) (succ u2)} (LinearMap.{u2, u2, max u1 u2, max u1 u2} α α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (RingHom.id.{u2} α (Semiring.toNonAssocSemiring.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (n -> α) (n -> α) (Pi.addCommMonoid.{u1, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.273 : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.addCommMonoid.{u1, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.273 : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.273 : n) => α) α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => Semiring.toModule.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.273 : n) => α) α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => Semiring.toModule.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) (n -> α) (fun (_x : n -> α) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6193 : n -> α) => n -> α) _x) (LinearMap.instFunLikeLinearMap.{u2, u2, max u1 u2, max u1 u2} α α (n -> α) (n -> α) (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.273 : n) => α) α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => Semiring.toModule.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.273 : n) => α) α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => Semiring.toModule.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (RingHom.id.{u2} α (Semiring.toNonAssocSemiring.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) (Matrix.cramer.{u1, u2} n α (fun (a : n) (b : n) => _inst_2 a b) _inst_1 _inst_3 A) b))
 Case conversion may be inaccurate. Consider using '#align matrix.det_smul_inv_mul_vec_eq_cramer Matrix.det_smul_inv_mulVec_eq_cramerₓ'. -/
 /-- One form of **Cramer's rule**. See `matrix.mul_vec_cramer` for a stronger form. -/
 @[simp]
@@ -1132,7 +1132,7 @@ theorem det_smul_inv_mulVec_eq_cramer (A : Matrix n n α) (b : n → α) (h : Is
 lean 3 declaration is
   forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (b : n -> α), (IsUnit.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{succ (max u1 u2)} (n -> α) (SMul.smul.{u2, max u1 u2} α (n -> α) (Function.hasSMul.{u1, u2, u2} n α α (Mul.toSMul.{u2} α (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A) (Matrix.vecMul.{u2, u1, u1} n n α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) _inst_1 b (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A))) (coeFn.{succ (max u1 u2), succ (max u1 u2)} (LinearMap.{u2, u2, max u1 u2, max u1 u2} α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (RingHom.id.{u2} α (Semiring.toNonAssocSemiring.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (n -> α) (n -> α) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.Function.module.{u1, u2, u2} n α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Pi.Function.module.{u1, u2, u2} n α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (_x : LinearMap.{u2, u2, max u1 u2, max u1 u2} α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (RingHom.id.{u2} α (Semiring.toNonAssocSemiring.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (n -> α) (n -> α) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.Function.module.{u1, u2, u2} n α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Pi.Function.module.{u1, u2, u2} n α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3))))) => (n -> α) -> n -> α) (LinearMap.hasCoeToFun.{u2, u2, max u1 u2, max u1 u2} α α (n -> α) (n -> α) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.Function.module.{u1, u2, u2} n α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Pi.Function.module.{u1, u2, u2} n α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (RingHom.id.{u2} α (Semiring.toNonAssocSemiring.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Matrix.cramer.{u1, u2} n α (fun (a : n) (b : n) => _inst_2 a b) _inst_1 _inst_3 (Matrix.transpose.{u2, u1, u1} n n α A)) b))
 but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (b : n -> α), (IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{max (succ u1) (succ u2)} (n -> α) (HSMul.hSMul.{u2, max u1 u2, max u1 u2} α (n -> α) (n -> α) (instHSMul.{u2, max u1 u2} α (n -> α) (Pi.instSMul.{u1, u2, u2} n α (fun (a._@.Mathlib.Data.Matrix.Basic._hyg.18132 : n) => α) (fun (i : n) => Algebra.toSMul.{u2, u2} α α (CommRing.toCommSemiring.{u2} α _inst_3) (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (Algebra.id.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A) (Matrix.vecMul.{u2, u1, u1} n n α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) _inst_1 b (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A))) (FunLike.coe.{max (succ u1) (succ u2), max (succ u1) (succ u2), max (succ u1) (succ u2)} (LinearMap.{u2, u2, max u1 u2, max u1 u2} α α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (RingHom.id.{u2} α (Semiring.toNonAssocSemiring.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (n -> α) (n -> α) (Pi.addCommMonoid.{u1, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.273 : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.addCommMonoid.{u1, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.273 : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.273 : n) => α) α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => Semiring.toModule.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.273 : n) => α) α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => Semiring.toModule.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) (n -> α) (fun (_x : n -> α) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6191 : n -> α) => n -> α) _x) (LinearMap.instFunLikeLinearMap.{u2, u2, max u1 u2, max u1 u2} α α (n -> α) (n -> α) (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.273 : n) => α) α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => Semiring.toModule.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.273 : n) => α) α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => Semiring.toModule.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (RingHom.id.{u2} α (Semiring.toNonAssocSemiring.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) (Matrix.cramer.{u1, u2} n α (fun (a : n) (b : n) => _inst_2 a b) _inst_1 _inst_3 (Matrix.transpose.{u2, u1, u1} n n α A)) b))
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (b : n -> α), (IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{max (succ u1) (succ u2)} (n -> α) (HSMul.hSMul.{u2, max u1 u2, max u1 u2} α (n -> α) (n -> α) (instHSMul.{u2, max u1 u2} α (n -> α) (Pi.instSMul.{u1, u2, u2} n α (fun (a._@.Mathlib.Data.Matrix.Basic._hyg.18132 : n) => α) (fun (i : n) => Algebra.toSMul.{u2, u2} α α (CommRing.toCommSemiring.{u2} α _inst_3) (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (Algebra.id.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A) (Matrix.vecMul.{u2, u1, u1} n n α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) _inst_1 b (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A))) (FunLike.coe.{max (succ u1) (succ u2), max (succ u1) (succ u2), max (succ u1) (succ u2)} (LinearMap.{u2, u2, max u1 u2, max u1 u2} α α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (RingHom.id.{u2} α (Semiring.toNonAssocSemiring.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (n -> α) (n -> α) (Pi.addCommMonoid.{u1, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.273 : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.addCommMonoid.{u1, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.273 : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.273 : n) => α) α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => Semiring.toModule.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.273 : n) => α) α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => Semiring.toModule.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) (n -> α) (fun (_x : n -> α) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6193 : n -> α) => n -> α) _x) (LinearMap.instFunLikeLinearMap.{u2, u2, max u1 u2, max u1 u2} α α (n -> α) (n -> α) (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.273 : n) => α) α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => Semiring.toModule.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.273 : n) => α) α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => Semiring.toModule.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (RingHom.id.{u2} α (Semiring.toNonAssocSemiring.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) (Matrix.cramer.{u1, u2} n α (fun (a : n) (b : n) => _inst_2 a b) _inst_1 _inst_3 (Matrix.transpose.{u2, u1, u1} n n α A)) b))
 Case conversion may be inaccurate. Consider using '#align matrix.det_smul_inv_vec_mul_eq_cramer_transpose Matrix.det_smul_inv_vecMul_eq_cramer_transposeₓ'. -/
 /-- One form of **Cramer's rule**. See `matrix.mul_vec_cramer` for a stronger form. -/
 @[simp]
Diff
@@ -1159,7 +1159,7 @@ variable [DecidableEq m]
 lean 3 declaration is
   forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] [_inst_4 : Fintype.{u1} m] [_inst_5 : DecidableEq.{succ u1} m] (A : Matrix.{u1, u1, u3} m m α) (e₁ : Equiv.{succ u2, succ u1} n m) (e₂ : Equiv.{succ u2, succ u1} n m) [_inst_6 : Invertible.{max u1 u3} (Matrix.{u1, u1, u3} m m α) (Matrix.hasMul.{u3, u1} m α _inst_4 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.hasOne.{u3, u1} m α (fun (a : m) (b : m) => _inst_5 a b) (MulZeroClass.toHasZero.{u3} α (NonUnitalNonAssocSemiring.toMulZeroClass.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (AddMonoidWithOne.toOne.{u3} α (AddGroupWithOne.toAddMonoidWithOne.{u3} α (AddCommGroupWithOne.toAddGroupWithOne.{u3} α (Ring.toAddCommGroupWithOne.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) A], Invertible.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.hasMul.{u3, u2} n α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.hasOne.{u3, u2} 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} α (CommRing.toRing.{u3} α _inst_3)))))) (AddMonoidWithOne.toOne.{u3} α (AddGroupWithOne.toAddMonoidWithOne.{u3} α (AddCommGroupWithOne.toAddGroupWithOne.{u3} α (Ring.toAddCommGroupWithOne.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.submatrix.{u3, u2, u1, u1, u2} n m m n α A (coeFn.{max 1 (max (succ u2) (succ u1)) (succ u1) (succ u2), max (succ u2) (succ u1)} (Equiv.{succ u2, succ u1} n m) (fun (_x : Equiv.{succ u2, succ u1} n m) => n -> m) (Equiv.hasCoeToFun.{succ u2, succ u1} n m) e₁) (coeFn.{max 1 (max (succ u2) (succ u1)) (succ u1) (succ u2), max (succ u2) (succ u1)} (Equiv.{succ u2, succ u1} n m) (fun (_x : Equiv.{succ u2, succ u1} n m) => n -> m) (Equiv.hasCoeToFun.{succ u2, succ u1} n m) e₂))
 but is expected to have type
-  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] [_inst_4 : Fintype.{u1} m] [_inst_5 : DecidableEq.{succ u1} m] (A : Matrix.{u1, u1, u3} m m α) (e₁ : Equiv.{succ u2, succ u1} n m) (e₂ : Equiv.{succ u2, succ u1} n m) [_inst_6 : Invertible.{max u1 u3} (Matrix.{u1, u1, u3} m m α) (Matrix.instMulMatrix.{u3, u1} m α _inst_4 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u1} m α (fun (a : m) (b : m) => _inst_5 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (Semiring.toOne.{u3} α (CommSemiring.toSemiring.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3)))) A], Invertible.{max u3 u2} (Matrix.{u2, u2, u3} n n α) (Matrix.instMulMatrix.{u3, u2} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u2} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (Semiring.toOne.{u3} α (CommSemiring.toSemiring.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3)))) (Matrix.submatrix.{u3, u2, u1, u1, u2} n m m n α A (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (Equiv.{succ u2, succ u1} n m) n (fun (_x : n) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : n) => m) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} n m) e₁) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (Equiv.{succ u2, succ u1} n m) n (fun (_x : n) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : n) => m) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} n m) e₂))
+  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] [_inst_4 : Fintype.{u1} m] [_inst_5 : DecidableEq.{succ u1} m] (A : Matrix.{u1, u1, u3} m m α) (e₁ : Equiv.{succ u2, succ u1} n m) (e₂ : Equiv.{succ u2, succ u1} n m) [_inst_6 : Invertible.{max u1 u3} (Matrix.{u1, u1, u3} m m α) (Matrix.instMulMatrix.{u3, u1} m α _inst_4 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u1} m α (fun (a : m) (b : m) => _inst_5 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (Semiring.toOne.{u3} α (CommSemiring.toSemiring.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3)))) A], Invertible.{max u3 u2} (Matrix.{u2, u2, u3} n n α) (Matrix.instMulMatrix.{u3, u2} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u2} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (Semiring.toOne.{u3} α (CommSemiring.toSemiring.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3)))) (Matrix.submatrix.{u3, u2, u1, u1, u2} n m m n α A (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (Equiv.{succ u2, succ u1} n m) n (fun (_x : n) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : n) => m) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} n m) e₁) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (Equiv.{succ u2, succ u1} n m) n (fun (_x : n) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : n) => m) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} n m) e₂))
 Case conversion may be inaccurate. Consider using '#align matrix.submatrix_equiv_invertible Matrix.submatrixEquivInvertibleₓ'. -/
 /-- `A.submatrix e₁ e₂` is invertible if `A` is -/
 def submatrixEquivInvertible (A : Matrix m m α) (e₁ e₂ : n ≃ m) [Invertible A] :
@@ -1172,7 +1172,7 @@ def submatrixEquivInvertible (A : Matrix m m α) (e₁ e₂ : n ≃ m) [Invertib
 lean 3 declaration is
   forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] [_inst_4 : Fintype.{u1} m] [_inst_5 : DecidableEq.{succ u1} m] (A : Matrix.{u1, u1, u3} m m α) (e₁ : Equiv.{succ u2, succ u1} n m) (e₂ : Equiv.{succ u2, succ u1} n m) [_inst_6 : Invertible.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.hasMul.{u3, u2} n α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.hasOne.{u3, u2} 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} α (CommRing.toRing.{u3} α _inst_3)))))) (AddMonoidWithOne.toOne.{u3} α (AddGroupWithOne.toAddMonoidWithOne.{u3} α (AddCommGroupWithOne.toAddGroupWithOne.{u3} α (Ring.toAddCommGroupWithOne.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.submatrix.{u3, u2, u1, u1, u2} n m m n α A (coeFn.{max 1 (max (succ u2) (succ u1)) (succ u1) (succ u2), max (succ u2) (succ u1)} (Equiv.{succ u2, succ u1} n m) (fun (_x : Equiv.{succ u2, succ u1} n m) => n -> m) (Equiv.hasCoeToFun.{succ u2, succ u1} n m) e₁) (coeFn.{max 1 (max (succ u2) (succ u1)) (succ u1) (succ u2), max (succ u2) (succ u1)} (Equiv.{succ u2, succ u1} n m) (fun (_x : Equiv.{succ u2, succ u1} n m) => n -> m) (Equiv.hasCoeToFun.{succ u2, succ u1} n m) e₂))], Invertible.{max u1 u3} (Matrix.{u1, u1, u3} m m α) (Matrix.hasMul.{u3, u1} m α _inst_4 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.hasOne.{u3, u1} m α (fun (a : m) (b : m) => _inst_5 a b) (MulZeroClass.toHasZero.{u3} α (NonUnitalNonAssocSemiring.toMulZeroClass.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (AddMonoidWithOne.toOne.{u3} α (AddGroupWithOne.toAddMonoidWithOne.{u3} α (AddCommGroupWithOne.toAddGroupWithOne.{u3} α (Ring.toAddCommGroupWithOne.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) A
 but is expected to have type
-  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] [_inst_4 : Fintype.{u1} m] [_inst_5 : DecidableEq.{succ u1} m] (A : Matrix.{u1, u1, u3} m m α) (e₁ : Equiv.{succ u2, succ u1} n m) (e₂ : Equiv.{succ u2, succ u1} n m) [_inst_6 : Invertible.{max u3 u2} (Matrix.{u2, u2, u3} n n α) (Matrix.instMulMatrix.{u3, u2} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u2} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (Semiring.toOne.{u3} α (CommSemiring.toSemiring.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3)))) (Matrix.submatrix.{u3, u2, u1, u1, u2} n m m n α A (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (Equiv.{succ u2, succ u1} n m) n (fun (_x : n) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : n) => m) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} n m) e₁) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (Equiv.{succ u2, succ u1} n m) n (fun (_x : n) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : n) => m) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} n m) e₂))], Invertible.{max u1 u3} (Matrix.{u1, u1, u3} m m α) (Matrix.instMulMatrix.{u3, u1} m α _inst_4 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u1} m α (fun (a : m) (b : m) => _inst_5 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (Semiring.toOne.{u3} α (CommSemiring.toSemiring.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3)))) A
+  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] [_inst_4 : Fintype.{u1} m] [_inst_5 : DecidableEq.{succ u1} m] (A : Matrix.{u1, u1, u3} m m α) (e₁ : Equiv.{succ u2, succ u1} n m) (e₂ : Equiv.{succ u2, succ u1} n m) [_inst_6 : Invertible.{max u3 u2} (Matrix.{u2, u2, u3} n n α) (Matrix.instMulMatrix.{u3, u2} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u2} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (Semiring.toOne.{u3} α (CommSemiring.toSemiring.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3)))) (Matrix.submatrix.{u3, u2, u1, u1, u2} n m m n α A (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (Equiv.{succ u2, succ u1} n m) n (fun (_x : n) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : n) => m) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} n m) e₁) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (Equiv.{succ u2, succ u1} n m) n (fun (_x : n) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : n) => m) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} n m) e₂))], Invertible.{max u1 u3} (Matrix.{u1, u1, u3} m m α) (Matrix.instMulMatrix.{u3, u1} m α _inst_4 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u1} m α (fun (a : m) (b : m) => _inst_5 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (Semiring.toOne.{u3} α (CommSemiring.toSemiring.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3)))) A
 Case conversion may be inaccurate. Consider using '#align matrix.invertible_of_submatrix_equiv_invertible Matrix.invertibleOfSubmatrixEquivInvertibleₓ'. -/
 /-- `A` is invertible if `A.submatrix e₁ e₂` is -/
 def invertibleOfSubmatrixEquivInvertible (A : Matrix m m α) (e₁ e₂ : n ≃ m)
@@ -1190,7 +1190,7 @@ def invertibleOfSubmatrixEquivInvertible (A : Matrix m m α) (e₁ e₂ : n ≃
 lean 3 declaration is
   forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] [_inst_4 : Fintype.{u1} m] [_inst_5 : DecidableEq.{succ u1} m] (A : Matrix.{u1, u1, u3} m m α) (e₁ : Equiv.{succ u2, succ u1} n m) (e₂ : Equiv.{succ u2, succ u1} n m) [_inst_6 : Invertible.{max u1 u3} (Matrix.{u1, u1, u3} m m α) (Matrix.hasMul.{u3, u1} m α _inst_4 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.hasOne.{u3, u1} m α (fun (a : m) (b : m) => _inst_5 a b) (MulZeroClass.toHasZero.{u3} α (NonUnitalNonAssocSemiring.toMulZeroClass.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (AddMonoidWithOne.toOne.{u3} α (AddGroupWithOne.toAddMonoidWithOne.{u3} α (AddCommGroupWithOne.toAddGroupWithOne.{u3} α (Ring.toAddCommGroupWithOne.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) A] [_inst_7 : Invertible.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.hasMul.{u3, u2} n α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.hasOne.{u3, u2} 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} α (CommRing.toRing.{u3} α _inst_3)))))) (AddMonoidWithOne.toOne.{u3} α (AddGroupWithOne.toAddMonoidWithOne.{u3} α (AddCommGroupWithOne.toAddGroupWithOne.{u3} α (Ring.toAddCommGroupWithOne.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.submatrix.{u3, u2, u1, u1, u2} n m m n α A (coeFn.{max 1 (max (succ u2) (succ u1)) (succ u1) (succ u2), max (succ u2) (succ u1)} (Equiv.{succ u2, succ u1} n m) (fun (_x : Equiv.{succ u2, succ u1} n m) => n -> m) (Equiv.hasCoeToFun.{succ u2, succ u1} n m) e₁) (coeFn.{max 1 (max (succ u2) (succ u1)) (succ u1) (succ u2), max (succ u2) (succ u1)} (Equiv.{succ u2, succ u1} n m) (fun (_x : Equiv.{succ u2, succ u1} n m) => n -> m) (Equiv.hasCoeToFun.{succ u2, succ u1} n m) e₂))], Eq.{succ (max u2 u3)} (Matrix.{u2, u2, u3} n n α) (Invertible.invOf.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.hasMul.{u3, u2} n α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.hasOne.{u3, u2} 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} α (CommRing.toRing.{u3} α _inst_3)))))) (AddMonoidWithOne.toOne.{u3} α (AddGroupWithOne.toAddMonoidWithOne.{u3} α (AddCommGroupWithOne.toAddGroupWithOne.{u3} α (Ring.toAddCommGroupWithOne.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.submatrix.{u3, u2, u1, u1, u2} n m m n α A (coeFn.{max 1 (max (succ u2) (succ u1)) (succ u1) (succ u2), max (succ u2) (succ u1)} (Equiv.{succ u2, succ u1} n m) (fun (_x : Equiv.{succ u2, succ u1} n m) => n -> m) (Equiv.hasCoeToFun.{succ u2, succ u1} n m) e₁) (coeFn.{max 1 (max (succ u2) (succ u1)) (succ u1) (succ u2), max (succ u2) (succ u1)} (Equiv.{succ u2, succ u1} n m) (fun (_x : Equiv.{succ u2, succ u1} n m) => n -> m) (Equiv.hasCoeToFun.{succ u2, succ u1} n m) e₂)) _inst_7) (Matrix.submatrix.{u3, u2, u1, u1, u2} n m m n α (Invertible.invOf.{max u1 u3} (Matrix.{u1, u1, u3} m m α) (Matrix.hasMul.{u3, u1} m α _inst_4 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.hasOne.{u3, u1} m α (fun (a : m) (b : m) => _inst_5 a b) (MulZeroClass.toHasZero.{u3} α (NonUnitalNonAssocSemiring.toMulZeroClass.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (AddMonoidWithOne.toOne.{u3} α (AddGroupWithOne.toAddMonoidWithOne.{u3} α (AddCommGroupWithOne.toAddGroupWithOne.{u3} α (Ring.toAddCommGroupWithOne.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) A _inst_6) (coeFn.{max 1 (max (succ u2) (succ u1)) (succ u1) (succ u2), max (succ u2) (succ u1)} (Equiv.{succ u2, succ u1} n m) (fun (_x : Equiv.{succ u2, succ u1} n m) => n -> m) (Equiv.hasCoeToFun.{succ u2, succ u1} n m) e₂) (coeFn.{max 1 (max (succ u2) (succ u1)) (succ u1) (succ u2), max (succ u2) (succ u1)} (Equiv.{succ u2, succ u1} n m) (fun (_x : Equiv.{succ u2, succ u1} n m) => n -> m) (Equiv.hasCoeToFun.{succ u2, succ u1} n m) e₁))
 but is expected to have type
-  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] [_inst_4 : Fintype.{u1} m] [_inst_5 : DecidableEq.{succ u1} m] (A : Matrix.{u1, u1, u3} m m α) (e₁ : Equiv.{succ u2, succ u1} n m) (e₂ : Equiv.{succ u2, succ u1} n m) [_inst_6 : Invertible.{max u1 u3} (Matrix.{u1, u1, u3} m m α) (Matrix.instMulMatrix.{u3, u1} m α _inst_4 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u1} m α (fun (a : m) (b : m) => _inst_5 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (Semiring.toOne.{u3} α (CommSemiring.toSemiring.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3)))) A] [_inst_7 : Invertible.{max u3 u2} (Matrix.{u2, u2, u3} n n α) (Matrix.instMulMatrix.{u3, u2} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u2} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (Semiring.toOne.{u3} α (CommSemiring.toSemiring.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3)))) (Matrix.submatrix.{u3, u2, u1, u1, u2} n m m n α A (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (Equiv.{succ u2, succ u1} n m) n (fun (_x : n) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : n) => m) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} n m) e₁) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (Equiv.{succ u2, succ u1} n m) n (fun (_x : n) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : n) => m) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} n m) e₂))], Eq.{max (succ u2) (succ u3)} (Matrix.{u2, u2, u3} n n α) (Invertible.invOf.{max u3 u2} (Matrix.{u2, u2, u3} n n α) (Matrix.instMulMatrix.{u3, u2} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u2} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (Semiring.toOne.{u3} α (CommSemiring.toSemiring.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3)))) (Matrix.submatrix.{u3, u2, u1, u1, u2} n m m n α A (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (Equiv.{succ u2, succ u1} n m) n (fun (_x : n) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : n) => m) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} n m) e₁) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (Equiv.{succ u2, succ u1} n m) n (fun (_x : n) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : n) => m) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} n m) e₂)) _inst_7) (Matrix.submatrix.{u3, u2, u1, u1, u2} n m m n α (Invertible.invOf.{max u1 u3} (Matrix.{u1, u1, u3} m m α) (Matrix.instMulMatrix.{u3, u1} m α _inst_4 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u1} m α (fun (a : m) (b : m) => _inst_5 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (Semiring.toOne.{u3} α (CommSemiring.toSemiring.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3)))) A _inst_6) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (Equiv.{succ u2, succ u1} n m) n (fun (_x : n) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : n) => m) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} n m) e₂) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (Equiv.{succ u2, succ u1} n m) n (fun (_x : n) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : n) => m) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} n m) e₁))
+  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] [_inst_4 : Fintype.{u1} m] [_inst_5 : DecidableEq.{succ u1} m] (A : Matrix.{u1, u1, u3} m m α) (e₁ : Equiv.{succ u2, succ u1} n m) (e₂ : Equiv.{succ u2, succ u1} n m) [_inst_6 : Invertible.{max u1 u3} (Matrix.{u1, u1, u3} m m α) (Matrix.instMulMatrix.{u3, u1} m α _inst_4 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u1} m α (fun (a : m) (b : m) => _inst_5 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (Semiring.toOne.{u3} α (CommSemiring.toSemiring.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3)))) A] [_inst_7 : Invertible.{max u3 u2} (Matrix.{u2, u2, u3} n n α) (Matrix.instMulMatrix.{u3, u2} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u2} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (Semiring.toOne.{u3} α (CommSemiring.toSemiring.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3)))) (Matrix.submatrix.{u3, u2, u1, u1, u2} n m m n α A (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (Equiv.{succ u2, succ u1} n m) n (fun (_x : n) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : n) => m) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} n m) e₁) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (Equiv.{succ u2, succ u1} n m) n (fun (_x : n) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : n) => m) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} n m) e₂))], Eq.{max (succ u2) (succ u3)} (Matrix.{u2, u2, u3} n n α) (Invertible.invOf.{max u3 u2} (Matrix.{u2, u2, u3} n n α) (Matrix.instMulMatrix.{u3, u2} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u2} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (Semiring.toOne.{u3} α (CommSemiring.toSemiring.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3)))) (Matrix.submatrix.{u3, u2, u1, u1, u2} n m m n α A (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (Equiv.{succ u2, succ u1} n m) n (fun (_x : n) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : n) => m) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} n m) e₁) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (Equiv.{succ u2, succ u1} n m) n (fun (_x : n) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : n) => m) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} n m) e₂)) _inst_7) (Matrix.submatrix.{u3, u2, u1, u1, u2} n m m n α (Invertible.invOf.{max u1 u3} (Matrix.{u1, u1, u3} m m α) (Matrix.instMulMatrix.{u3, u1} m α _inst_4 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u1} m α (fun (a : m) (b : m) => _inst_5 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (Semiring.toOne.{u3} α (CommSemiring.toSemiring.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3)))) A _inst_6) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (Equiv.{succ u2, succ u1} n m) n (fun (_x : n) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : n) => m) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} n m) e₂) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (Equiv.{succ u2, succ u1} n m) n (fun (_x : n) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : n) => m) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} n m) e₁))
 Case conversion may be inaccurate. Consider using '#align matrix.inv_of_submatrix_equiv_eq Matrix.invOf_submatrix_equiv_eqₓ'. -/
 theorem invOf_submatrix_equiv_eq (A : Matrix m m α) (e₁ e₂ : n ≃ m) [Invertible A]
     [Invertible (A.submatrix e₁ e₂)] : ⅟ (A.submatrix e₁ e₂) = (⅟ A).submatrix e₂ e₁ :=
@@ -1204,7 +1204,7 @@ theorem invOf_submatrix_equiv_eq (A : Matrix m m α) (e₁ e₂ : n ≃ m) [Inve
 lean 3 declaration is
   forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] [_inst_4 : Fintype.{u1} m] [_inst_5 : DecidableEq.{succ u1} m] (A : Matrix.{u1, u1, u3} m m α) (e₁ : Equiv.{succ u2, succ u1} n m) (e₂ : Equiv.{succ u2, succ u1} n m), Equiv.{succ (max u2 u3), succ (max u1 u3)} (Invertible.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.hasMul.{u3, u2} n α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.hasOne.{u3, u2} 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} α (CommRing.toRing.{u3} α _inst_3)))))) (AddMonoidWithOne.toOne.{u3} α (AddGroupWithOne.toAddMonoidWithOne.{u3} α (AddCommGroupWithOne.toAddGroupWithOne.{u3} α (Ring.toAddCommGroupWithOne.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.submatrix.{u3, u2, u1, u1, u2} n m m n α A (coeFn.{max 1 (max (succ u2) (succ u1)) (succ u1) (succ u2), max (succ u2) (succ u1)} (Equiv.{succ u2, succ u1} n m) (fun (_x : Equiv.{succ u2, succ u1} n m) => n -> m) (Equiv.hasCoeToFun.{succ u2, succ u1} n m) e₁) (coeFn.{max 1 (max (succ u2) (succ u1)) (succ u1) (succ u2), max (succ u2) (succ u1)} (Equiv.{succ u2, succ u1} n m) (fun (_x : Equiv.{succ u2, succ u1} n m) => n -> m) (Equiv.hasCoeToFun.{succ u2, succ u1} n m) e₂))) (Invertible.{max u1 u3} (Matrix.{u1, u1, u3} m m α) (Matrix.hasMul.{u3, u1} m α _inst_4 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.hasOne.{u3, u1} m α (fun (a : m) (b : m) => _inst_5 a b) (MulZeroClass.toHasZero.{u3} α (NonUnitalNonAssocSemiring.toMulZeroClass.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (AddMonoidWithOne.toOne.{u3} α (AddGroupWithOne.toAddMonoidWithOne.{u3} α (AddCommGroupWithOne.toAddGroupWithOne.{u3} α (Ring.toAddCommGroupWithOne.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) A)
 but is expected to have type
-  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] [_inst_4 : Fintype.{u1} m] [_inst_5 : DecidableEq.{succ u1} m] (A : Matrix.{u1, u1, u3} m m α) (e₁ : Equiv.{succ u2, succ u1} n m) (e₂ : Equiv.{succ u2, succ u1} n m), Equiv.{succ (max u3 u2), succ (max u1 u3)} (Invertible.{max u3 u2} (Matrix.{u2, u2, u3} n n α) (Matrix.instMulMatrix.{u3, u2} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u2} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (Semiring.toOne.{u3} α (CommSemiring.toSemiring.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3)))) (Matrix.submatrix.{u3, u2, u1, u1, u2} n m m n α A (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (Equiv.{succ u2, succ u1} n m) n (fun (_x : n) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : n) => m) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} n m) e₁) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (Equiv.{succ u2, succ u1} n m) n (fun (_x : n) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : n) => m) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} n m) e₂))) (Invertible.{max u1 u3} (Matrix.{u1, u1, u3} m m α) (Matrix.instMulMatrix.{u3, u1} m α _inst_4 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u1} m α (fun (a : m) (b : m) => _inst_5 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (Semiring.toOne.{u3} α (CommSemiring.toSemiring.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3)))) A)
+  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] [_inst_4 : Fintype.{u1} m] [_inst_5 : DecidableEq.{succ u1} m] (A : Matrix.{u1, u1, u3} m m α) (e₁ : Equiv.{succ u2, succ u1} n m) (e₂ : Equiv.{succ u2, succ u1} n m), Equiv.{succ (max u3 u2), succ (max u1 u3)} (Invertible.{max u3 u2} (Matrix.{u2, u2, u3} n n α) (Matrix.instMulMatrix.{u3, u2} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u2} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (Semiring.toOne.{u3} α (CommSemiring.toSemiring.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3)))) (Matrix.submatrix.{u3, u2, u1, u1, u2} n m m n α A (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (Equiv.{succ u2, succ u1} n m) n (fun (_x : n) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : n) => m) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} n m) e₁) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (Equiv.{succ u2, succ u1} n m) n (fun (_x : n) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : n) => m) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} n m) e₂))) (Invertible.{max u1 u3} (Matrix.{u1, u1, u3} m m α) (Matrix.instMulMatrix.{u3, u1} m α _inst_4 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u1} m α (fun (a : m) (b : m) => _inst_5 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (Semiring.toOne.{u3} α (CommSemiring.toSemiring.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3)))) A)
 Case conversion may be inaccurate. Consider using '#align matrix.submatrix_equiv_invertible_equiv_invertible Matrix.submatrixEquivInvertibleEquivInvertibleₓ'. -/
 /-- Together `matrix.submatrix_equiv_invertible` and
 `matrix.invertible_of_submatrix_equiv_invertible` form an equivalence, although both sides of the
@@ -1233,7 +1233,7 @@ theorem isUnit_submatrix_equiv {A : Matrix m m α} (e₁ e₂ : n ≃ m) :
 lean 3 declaration is
   forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] [_inst_4 : Fintype.{u1} m] [_inst_5 : DecidableEq.{succ u1} m] (A : Matrix.{u1, u1, u3} m m α) (e₁ : Equiv.{succ u2, succ u1} n m) (e₂ : Equiv.{succ u2, succ u1} n m), Eq.{succ (max u2 u3)} (Matrix.{u2, u2, u3} n n α) (Inv.inv.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.hasInv.{u2, u3} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) (Matrix.submatrix.{u3, u2, u1, u1, u2} n m m n α A (coeFn.{max 1 (max (succ u2) (succ u1)) (succ u1) (succ u2), max (succ u2) (succ u1)} (Equiv.{succ u2, succ u1} n m) (fun (_x : Equiv.{succ u2, succ u1} n m) => n -> m) (Equiv.hasCoeToFun.{succ u2, succ u1} n m) e₁) (coeFn.{max 1 (max (succ u2) (succ u1)) (succ u1) (succ u2), max (succ u2) (succ u1)} (Equiv.{succ u2, succ u1} n m) (fun (_x : Equiv.{succ u2, succ u1} n m) => n -> m) (Equiv.hasCoeToFun.{succ u2, succ u1} n m) e₂))) (Matrix.submatrix.{u3, u2, u1, u1, u2} n m m n α (Inv.inv.{max u1 u3} (Matrix.{u1, u1, u3} m m α) (Matrix.hasInv.{u1, u3} m α _inst_4 (fun (a : m) (b : m) => _inst_5 a b) _inst_3) A) (coeFn.{max 1 (max (succ u2) (succ u1)) (succ u1) (succ u2), max (succ u2) (succ u1)} (Equiv.{succ u2, succ u1} n m) (fun (_x : Equiv.{succ u2, succ u1} n m) => n -> m) (Equiv.hasCoeToFun.{succ u2, succ u1} n m) e₂) (coeFn.{max 1 (max (succ u2) (succ u1)) (succ u1) (succ u2), max (succ u2) (succ u1)} (Equiv.{succ u2, succ u1} n m) (fun (_x : Equiv.{succ u2, succ u1} n m) => n -> m) (Equiv.hasCoeToFun.{succ u2, succ u1} n m) e₁))
 but is expected to have type
-  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] [_inst_4 : Fintype.{u1} m] [_inst_5 : DecidableEq.{succ u1} m] (A : Matrix.{u1, u1, u3} m m α) (e₁ : Equiv.{succ u2, succ u1} n m) (e₂ : Equiv.{succ u2, succ u1} n m), Eq.{max (succ u2) (succ u3)} (Matrix.{u2, u2, u3} n n α) (Inv.inv.{max u3 u2} (Matrix.{u2, u2, u3} n n α) (Matrix.inv.{u2, u3} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) (Matrix.submatrix.{u3, u2, u1, u1, u2} n m m n α A (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (Equiv.{succ u2, succ u1} n m) n (fun (_x : n) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : n) => m) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} n m) e₁) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (Equiv.{succ u2, succ u1} n m) n (fun (_x : n) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : n) => m) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} n m) e₂))) (Matrix.submatrix.{u3, u2, u1, u1, u2} n m m n α (Inv.inv.{max u1 u3} (Matrix.{u1, u1, u3} m m α) (Matrix.inv.{u1, u3} m α _inst_4 (fun (a : m) (b : m) => _inst_5 a b) _inst_3) A) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (Equiv.{succ u2, succ u1} n m) n (fun (_x : n) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : n) => m) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} n m) e₂) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (Equiv.{succ u2, succ u1} n m) n (fun (_x : n) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : n) => m) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} n m) e₁))
+  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] [_inst_4 : Fintype.{u1} m] [_inst_5 : DecidableEq.{succ u1} m] (A : Matrix.{u1, u1, u3} m m α) (e₁ : Equiv.{succ u2, succ u1} n m) (e₂ : Equiv.{succ u2, succ u1} n m), Eq.{max (succ u2) (succ u3)} (Matrix.{u2, u2, u3} n n α) (Inv.inv.{max u3 u2} (Matrix.{u2, u2, u3} n n α) (Matrix.inv.{u2, u3} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) (Matrix.submatrix.{u3, u2, u1, u1, u2} n m m n α A (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (Equiv.{succ u2, succ u1} n m) n (fun (_x : n) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : n) => m) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} n m) e₁) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (Equiv.{succ u2, succ u1} n m) n (fun (_x : n) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : n) => m) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} n m) e₂))) (Matrix.submatrix.{u3, u2, u1, u1, u2} n m m n α (Inv.inv.{max u1 u3} (Matrix.{u1, u1, u3} m m α) (Matrix.inv.{u1, u3} m α _inst_4 (fun (a : m) (b : m) => _inst_5 a b) _inst_3) A) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (Equiv.{succ u2, succ u1} n m) n (fun (_x : n) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : n) => m) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} n m) e₂) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (Equiv.{succ u2, succ u1} n m) n (fun (_x : n) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : n) => m) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} n m) e₁))
 Case conversion may be inaccurate. Consider using '#align matrix.inv_submatrix_equiv Matrix.inv_submatrix_equivₓ'. -/
 @[simp]
 theorem inv_submatrix_equiv (A : Matrix m m α) (e₁ e₂ : n ≃ m) :
@@ -1252,7 +1252,7 @@ theorem inv_submatrix_equiv (A : Matrix m m α) (e₁ e₂ : n ≃ m) :
 lean 3 declaration is
   forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] [_inst_4 : Fintype.{u1} m] [_inst_5 : DecidableEq.{succ u1} m] (e₁ : Equiv.{succ u2, succ u1} n m) (e₂ : Equiv.{succ u2, succ u1} n m) (A : Matrix.{u2, u2, u3} n n α), Eq.{succ (max u1 u3)} (Matrix.{u1, u1, u3} m m α) (Inv.inv.{max u1 u3} (Matrix.{u1, u1, u3} m m α) (Matrix.hasInv.{u1, u3} m α _inst_4 (fun (a : m) (b : m) => _inst_5 a b) _inst_3) (coeFn.{max 1 (max (succ (max u2 u3)) (succ (max u1 u3))) (succ (max u1 u3)) (succ (max u2 u3)), max (succ (max u2 u3)) (succ (max u1 u3))} (Equiv.{succ (max u2 u3), succ (max u1 u3)} (Matrix.{u2, u2, u3} n n α) (Matrix.{u1, u1, u3} m m α)) (fun (_x : Equiv.{succ (max u2 u3), succ (max u1 u3)} (Matrix.{u2, u2, u3} n n α) (Matrix.{u1, u1, u3} m m α)) => (Matrix.{u2, u2, u3} n n α) -> (Matrix.{u1, u1, u3} m m α)) (Equiv.hasCoeToFun.{succ (max u2 u3), succ (max u1 u3)} (Matrix.{u2, u2, u3} n n α) (Matrix.{u1, u1, u3} m m α)) (Matrix.reindex.{u3, u1, u2, u2, u1} m n n m α e₁ e₂) A)) (coeFn.{max 1 (max (succ (max u2 u3)) (succ (max u1 u3))) (succ (max u1 u3)) (succ (max u2 u3)), max (succ (max u2 u3)) (succ (max u1 u3))} (Equiv.{succ (max u2 u3), succ (max u1 u3)} (Matrix.{u2, u2, u3} n n α) (Matrix.{u1, u1, u3} m m α)) (fun (_x : Equiv.{succ (max u2 u3), succ (max u1 u3)} (Matrix.{u2, u2, u3} n n α) (Matrix.{u1, u1, u3} m m α)) => (Matrix.{u2, u2, u3} n n α) -> (Matrix.{u1, u1, u3} m m α)) (Equiv.hasCoeToFun.{succ (max u2 u3), succ (max u1 u3)} (Matrix.{u2, u2, u3} n n α) (Matrix.{u1, u1, u3} m m α)) (Matrix.reindex.{u3, u1, u2, u2, u1} m n n m α e₂ e₁) (Inv.inv.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.hasInv.{u2, u3} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A))
 but is expected to have type
-  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] [_inst_4 : Fintype.{u1} m] [_inst_5 : DecidableEq.{succ u1} m] (e₁ : Equiv.{succ u2, succ u1} n m) (e₂ : Equiv.{succ u2, succ u1} n m) (A : Matrix.{u2, u2, u3} n n α), Eq.{max (succ u1) (succ u3)} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : Matrix.{u2, u2, u3} n n α) => Matrix.{u1, u1, u3} m m α) A) (Inv.inv.{max u1 u3} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : Matrix.{u2, u2, u3} n n α) => Matrix.{u1, u1, u3} m m α) A) (Matrix.inv.{u1, u3} m α _inst_4 (fun (a : m) (b : m) => _inst_5 a b) _inst_3) (FunLike.coe.{max (max (succ u1) (succ u2)) (succ u3), max (succ u2) (succ u3), max (succ u1) (succ u3)} (Equiv.{max (succ u3) (succ u2), max (succ u3) (succ u1)} (Matrix.{u2, u2, u3} n n α) (Matrix.{u1, u1, u3} m m α)) (Matrix.{u2, u2, u3} n n α) (fun (_x : Matrix.{u2, u2, u3} n n α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : Matrix.{u2, u2, u3} n n α) => Matrix.{u1, u1, u3} m m α) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u3), max (succ u1) (succ u3)} (Matrix.{u2, u2, u3} n n α) (Matrix.{u1, u1, u3} m m α)) (Matrix.reindex.{u3, u1, u2, u2, u1} m n n m α e₁ e₂) A)) (FunLike.coe.{max (max (succ u1) (succ u2)) (succ u3), max (succ u2) (succ u3), max (succ u1) (succ u3)} (Equiv.{max (succ u3) (succ u2), max (succ u3) (succ u1)} (Matrix.{u2, u2, u3} n n α) (Matrix.{u1, u1, u3} m m α)) (Matrix.{u2, u2, u3} n n α) (fun (_x : Matrix.{u2, u2, u3} n n α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : Matrix.{u2, u2, u3} n n α) => Matrix.{u1, u1, u3} m m α) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u3), max (succ u1) (succ u3)} (Matrix.{u2, u2, u3} n n α) (Matrix.{u1, u1, u3} m m α)) (Matrix.reindex.{u3, u1, u2, u2, u1} m n n m α e₂ e₁) (Inv.inv.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.inv.{u2, u3} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A))
+  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] [_inst_4 : Fintype.{u1} m] [_inst_5 : DecidableEq.{succ u1} m] (e₁ : Equiv.{succ u2, succ u1} n m) (e₂ : Equiv.{succ u2, succ u1} n m) (A : Matrix.{u2, u2, u3} n n α), Eq.{max (succ u1) (succ u3)} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : Matrix.{u2, u2, u3} n n α) => Matrix.{u1, u1, u3} m m α) A) (Inv.inv.{max u1 u3} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : Matrix.{u2, u2, u3} n n α) => Matrix.{u1, u1, u3} m m α) A) (Matrix.inv.{u1, u3} m α _inst_4 (fun (a : m) (b : m) => _inst_5 a b) _inst_3) (FunLike.coe.{max (max (succ u1) (succ u2)) (succ u3), max (succ u2) (succ u3), max (succ u1) (succ u3)} (Equiv.{max (succ u3) (succ u2), max (succ u3) (succ u1)} (Matrix.{u2, u2, u3} n n α) (Matrix.{u1, u1, u3} m m α)) (Matrix.{u2, u2, u3} n n α) (fun (_x : Matrix.{u2, u2, u3} n n α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : Matrix.{u2, u2, u3} n n α) => Matrix.{u1, u1, u3} m m α) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u3), max (succ u1) (succ u3)} (Matrix.{u2, u2, u3} n n α) (Matrix.{u1, u1, u3} m m α)) (Matrix.reindex.{u3, u1, u2, u2, u1} m n n m α e₁ e₂) A)) (FunLike.coe.{max (max (succ u1) (succ u2)) (succ u3), max (succ u2) (succ u3), max (succ u1) (succ u3)} (Equiv.{max (succ u3) (succ u2), max (succ u3) (succ u1)} (Matrix.{u2, u2, u3} n n α) (Matrix.{u1, u1, u3} m m α)) (Matrix.{u2, u2, u3} n n α) (fun (_x : Matrix.{u2, u2, u3} n n α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : Matrix.{u2, u2, u3} n n α) => Matrix.{u1, u1, u3} m m α) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u3), max (succ u1) (succ u3)} (Matrix.{u2, u2, u3} n n α) (Matrix.{u1, u1, u3} m m α)) (Matrix.reindex.{u3, u1, u2, u2, u1} m n n m α e₂ e₁) (Inv.inv.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.inv.{u2, u3} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A))
 Case conversion may be inaccurate. Consider using '#align matrix.inv_reindex Matrix.inv_reindexₓ'. -/
 theorem inv_reindex (e₁ e₂ : n ≃ m) (A : Matrix n n α) : (reindex e₁ e₂ A)⁻¹ = reindex e₂ e₁ A⁻¹ :=
   inv_submatrix_equiv A e₁.symm e₂.symm
Diff
@@ -1118,7 +1118,7 @@ theorem list_prod_inv_reverse : ∀ l : List (Matrix n n α), l.Prod⁻¹ = (l.r
 lean 3 declaration is
   forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (b : n -> α), (IsUnit.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{succ (max u1 u2)} (n -> α) (SMul.smul.{u2, max u1 u2} α (n -> α) (Function.hasSMul.{u1, u2, u2} n α α (Mul.toSMul.{u2} α (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A) (Matrix.mulVec.{u2, u1, u1} n n α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) _inst_1 (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) b)) (coeFn.{succ (max u1 u2), succ (max u1 u2)} (LinearMap.{u2, u2, max u1 u2, max u1 u2} α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (RingHom.id.{u2} α (Semiring.toNonAssocSemiring.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (n -> α) (n -> α) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.Function.module.{u1, u2, u2} n α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Pi.Function.module.{u1, u2, u2} n α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (_x : LinearMap.{u2, u2, max u1 u2, max u1 u2} α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (RingHom.id.{u2} α (Semiring.toNonAssocSemiring.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (n -> α) (n -> α) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.Function.module.{u1, u2, u2} n α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Pi.Function.module.{u1, u2, u2} n α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3))))) => (n -> α) -> n -> α) (LinearMap.hasCoeToFun.{u2, u2, max u1 u2, max u1 u2} α α (n -> α) (n -> α) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.Function.module.{u1, u2, u2} n α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Pi.Function.module.{u1, u2, u2} n α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (RingHom.id.{u2} α (Semiring.toNonAssocSemiring.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Matrix.cramer.{u1, u2} n α (fun (a : n) (b : n) => _inst_2 a b) _inst_1 _inst_3 A) b))
 but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (b : n -> α), (IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{max (succ u1) (succ u2)} (n -> α) (HSMul.hSMul.{u2, max u1 u2, max u1 u2} α (n -> α) (n -> α) (instHSMul.{u2, max u1 u2} α (n -> α) (Pi.instSMul.{u1, u2, u2} n α (fun (a._@.Mathlib.Data.Matrix.Basic._hyg.18074 : n) => α) (fun (i : n) => Algebra.toSMul.{u2, u2} α α (CommRing.toCommSemiring.{u2} α _inst_3) (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (Algebra.id.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A) (Matrix.mulVec.{u2, u1, u1} n n α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) _inst_1 (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) b)) (FunLike.coe.{max (succ u1) (succ u2), max (succ u1) (succ u2), max (succ u1) (succ u2)} (LinearMap.{u2, u2, max u1 u2, max u1 u2} α α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (RingHom.id.{u2} α (Semiring.toNonAssocSemiring.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (n -> α) (n -> α) (Pi.addCommMonoid.{u1, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.273 : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.addCommMonoid.{u1, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.273 : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.273 : n) => α) α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => Semiring.toModule.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.273 : n) => α) α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => Semiring.toModule.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) (n -> α) (fun (_x : n -> α) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6190 : n -> α) => n -> α) _x) (LinearMap.instFunLikeLinearMap.{u2, u2, max u1 u2, max u1 u2} α α (n -> α) (n -> α) (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.273 : n) => α) α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => Semiring.toModule.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.273 : n) => α) α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => Semiring.toModule.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (RingHom.id.{u2} α (Semiring.toNonAssocSemiring.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) (Matrix.cramer.{u1, u2} n α (fun (a : n) (b : n) => _inst_2 a b) _inst_1 _inst_3 A) b))
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (b : n -> α), (IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{max (succ u1) (succ u2)} (n -> α) (HSMul.hSMul.{u2, max u1 u2, max u1 u2} α (n -> α) (n -> α) (instHSMul.{u2, max u1 u2} α (n -> α) (Pi.instSMul.{u1, u2, u2} n α (fun (a._@.Mathlib.Data.Matrix.Basic._hyg.18074 : n) => α) (fun (i : n) => Algebra.toSMul.{u2, u2} α α (CommRing.toCommSemiring.{u2} α _inst_3) (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (Algebra.id.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A) (Matrix.mulVec.{u2, u1, u1} n n α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) _inst_1 (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) b)) (FunLike.coe.{max (succ u1) (succ u2), max (succ u1) (succ u2), max (succ u1) (succ u2)} (LinearMap.{u2, u2, max u1 u2, max u1 u2} α α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (RingHom.id.{u2} α (Semiring.toNonAssocSemiring.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (n -> α) (n -> α) (Pi.addCommMonoid.{u1, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.273 : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.addCommMonoid.{u1, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.273 : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.273 : n) => α) α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => Semiring.toModule.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.273 : n) => α) α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => Semiring.toModule.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) (n -> α) (fun (_x : n -> α) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6191 : n -> α) => n -> α) _x) (LinearMap.instFunLikeLinearMap.{u2, u2, max u1 u2, max u1 u2} α α (n -> α) (n -> α) (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.273 : n) => α) α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => Semiring.toModule.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.273 : n) => α) α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => Semiring.toModule.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (RingHom.id.{u2} α (Semiring.toNonAssocSemiring.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) (Matrix.cramer.{u1, u2} n α (fun (a : n) (b : n) => _inst_2 a b) _inst_1 _inst_3 A) b))
 Case conversion may be inaccurate. Consider using '#align matrix.det_smul_inv_mul_vec_eq_cramer Matrix.det_smul_inv_mulVec_eq_cramerₓ'. -/
 /-- One form of **Cramer's rule**. See `matrix.mul_vec_cramer` for a stronger form. -/
 @[simp]
@@ -1132,7 +1132,7 @@ theorem det_smul_inv_mulVec_eq_cramer (A : Matrix n n α) (b : n → α) (h : Is
 lean 3 declaration is
   forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (b : n -> α), (IsUnit.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{succ (max u1 u2)} (n -> α) (SMul.smul.{u2, max u1 u2} α (n -> α) (Function.hasSMul.{u1, u2, u2} n α α (Mul.toSMul.{u2} α (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A) (Matrix.vecMul.{u2, u1, u1} n n α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) _inst_1 b (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A))) (coeFn.{succ (max u1 u2), succ (max u1 u2)} (LinearMap.{u2, u2, max u1 u2, max u1 u2} α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (RingHom.id.{u2} α (Semiring.toNonAssocSemiring.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (n -> α) (n -> α) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.Function.module.{u1, u2, u2} n α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Pi.Function.module.{u1, u2, u2} n α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (_x : LinearMap.{u2, u2, max u1 u2, max u1 u2} α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (RingHom.id.{u2} α (Semiring.toNonAssocSemiring.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (n -> α) (n -> α) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.Function.module.{u1, u2, u2} n α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Pi.Function.module.{u1, u2, u2} n α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3))))) => (n -> α) -> n -> α) (LinearMap.hasCoeToFun.{u2, u2, max u1 u2, max u1 u2} α α (n -> α) (n -> α) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.Function.module.{u1, u2, u2} n α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Pi.Function.module.{u1, u2, u2} n α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (RingHom.id.{u2} α (Semiring.toNonAssocSemiring.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Matrix.cramer.{u1, u2} n α (fun (a : n) (b : n) => _inst_2 a b) _inst_1 _inst_3 (Matrix.transpose.{u2, u1, u1} n n α A)) b))
 but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (b : n -> α), (IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{max (succ u1) (succ u2)} (n -> α) (HSMul.hSMul.{u2, max u1 u2, max u1 u2} α (n -> α) (n -> α) (instHSMul.{u2, max u1 u2} α (n -> α) (Pi.instSMul.{u1, u2, u2} n α (fun (a._@.Mathlib.Data.Matrix.Basic._hyg.18132 : n) => α) (fun (i : n) => Algebra.toSMul.{u2, u2} α α (CommRing.toCommSemiring.{u2} α _inst_3) (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (Algebra.id.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A) (Matrix.vecMul.{u2, u1, u1} n n α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) _inst_1 b (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A))) (FunLike.coe.{max (succ u1) (succ u2), max (succ u1) (succ u2), max (succ u1) (succ u2)} (LinearMap.{u2, u2, max u1 u2, max u1 u2} α α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (RingHom.id.{u2} α (Semiring.toNonAssocSemiring.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (n -> α) (n -> α) (Pi.addCommMonoid.{u1, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.273 : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.addCommMonoid.{u1, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.273 : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.273 : n) => α) α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => Semiring.toModule.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.273 : n) => α) α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => Semiring.toModule.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) (n -> α) (fun (_x : n -> α) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6190 : n -> α) => n -> α) _x) (LinearMap.instFunLikeLinearMap.{u2, u2, max u1 u2, max u1 u2} α α (n -> α) (n -> α) (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.273 : n) => α) α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => Semiring.toModule.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.273 : n) => α) α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => Semiring.toModule.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (RingHom.id.{u2} α (Semiring.toNonAssocSemiring.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) (Matrix.cramer.{u1, u2} n α (fun (a : n) (b : n) => _inst_2 a b) _inst_1 _inst_3 (Matrix.transpose.{u2, u1, u1} n n α A)) b))
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (b : n -> α), (IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{max (succ u1) (succ u2)} (n -> α) (HSMul.hSMul.{u2, max u1 u2, max u1 u2} α (n -> α) (n -> α) (instHSMul.{u2, max u1 u2} α (n -> α) (Pi.instSMul.{u1, u2, u2} n α (fun (a._@.Mathlib.Data.Matrix.Basic._hyg.18132 : n) => α) (fun (i : n) => Algebra.toSMul.{u2, u2} α α (CommRing.toCommSemiring.{u2} α _inst_3) (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (Algebra.id.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A) (Matrix.vecMul.{u2, u1, u1} n n α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) _inst_1 b (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A))) (FunLike.coe.{max (succ u1) (succ u2), max (succ u1) (succ u2), max (succ u1) (succ u2)} (LinearMap.{u2, u2, max u1 u2, max u1 u2} α α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (RingHom.id.{u2} α (Semiring.toNonAssocSemiring.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (n -> α) (n -> α) (Pi.addCommMonoid.{u1, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.273 : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.addCommMonoid.{u1, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.273 : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.273 : n) => α) α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => Semiring.toModule.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.273 : n) => α) α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => Semiring.toModule.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) (n -> α) (fun (_x : n -> α) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6191 : n -> α) => n -> α) _x) (LinearMap.instFunLikeLinearMap.{u2, u2, max u1 u2, max u1 u2} α α (n -> α) (n -> α) (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.273 : n) => α) α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => Semiring.toModule.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.273 : n) => α) α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => Semiring.toModule.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (RingHom.id.{u2} α (Semiring.toNonAssocSemiring.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) (Matrix.cramer.{u1, u2} n α (fun (a : n) (b : n) => _inst_2 a b) _inst_1 _inst_3 (Matrix.transpose.{u2, u1, u1} n n α A)) b))
 Case conversion may be inaccurate. Consider using '#align matrix.det_smul_inv_vec_mul_eq_cramer_transpose Matrix.det_smul_inv_vecMul_eq_cramer_transposeₓ'. -/
 /-- One form of **Cramer's rule**. See `matrix.mul_vec_cramer` for a stronger form. -/
 @[simp]
Diff
@@ -1118,7 +1118,7 @@ theorem list_prod_inv_reverse : ∀ l : List (Matrix n n α), l.Prod⁻¹ = (l.r
 lean 3 declaration is
   forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (b : n -> α), (IsUnit.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{succ (max u1 u2)} (n -> α) (SMul.smul.{u2, max u1 u2} α (n -> α) (Function.hasSMul.{u1, u2, u2} n α α (Mul.toSMul.{u2} α (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A) (Matrix.mulVec.{u2, u1, u1} n n α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) _inst_1 (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) b)) (coeFn.{succ (max u1 u2), succ (max u1 u2)} (LinearMap.{u2, u2, max u1 u2, max u1 u2} α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (RingHom.id.{u2} α (Semiring.toNonAssocSemiring.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (n -> α) (n -> α) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.Function.module.{u1, u2, u2} n α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Pi.Function.module.{u1, u2, u2} n α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (_x : LinearMap.{u2, u2, max u1 u2, max u1 u2} α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (RingHom.id.{u2} α (Semiring.toNonAssocSemiring.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (n -> α) (n -> α) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.Function.module.{u1, u2, u2} n α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Pi.Function.module.{u1, u2, u2} n α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3))))) => (n -> α) -> n -> α) (LinearMap.hasCoeToFun.{u2, u2, max u1 u2, max u1 u2} α α (n -> α) (n -> α) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.Function.module.{u1, u2, u2} n α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Pi.Function.module.{u1, u2, u2} n α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (RingHom.id.{u2} α (Semiring.toNonAssocSemiring.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Matrix.cramer.{u1, u2} n α (fun (a : n) (b : n) => _inst_2 a b) _inst_1 _inst_3 A) b))
 but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (b : n -> α), (IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{max (succ u1) (succ u2)} (n -> α) (HSMul.hSMul.{u2, max u1 u2, max u1 u2} α (n -> α) (n -> α) (instHSMul.{u2, max u1 u2} α (n -> α) (Pi.instSMul.{u1, u2, u2} n α (fun (a._@.Mathlib.Data.Matrix.Basic._hyg.18074 : n) => α) (fun (i : n) => Algebra.toSMul.{u2, u2} α α (CommRing.toCommSemiring.{u2} α _inst_3) (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (Algebra.id.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A) (Matrix.mulVec.{u2, u1, u1} n n α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) _inst_1 (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) b)) (FunLike.coe.{max (succ u1) (succ u2), max (succ u1) (succ u2), max (succ u1) (succ u2)} (LinearMap.{u2, u2, max u1 u2, max u1 u2} α α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (RingHom.id.{u2} α (Semiring.toNonAssocSemiring.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (n -> α) (n -> α) (Pi.addCommMonoid.{u1, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.274 : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.addCommMonoid.{u1, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.274 : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.274 : n) => α) α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => Semiring.toModule.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.274 : n) => α) α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => Semiring.toModule.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) (n -> α) (fun (_x : n -> α) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6190 : n -> α) => n -> α) _x) (LinearMap.instFunLikeLinearMap.{u2, u2, max u1 u2, max u1 u2} α α (n -> α) (n -> α) (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.274 : n) => α) α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => Semiring.toModule.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.274 : n) => α) α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => Semiring.toModule.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (RingHom.id.{u2} α (Semiring.toNonAssocSemiring.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) (Matrix.cramer.{u1, u2} n α (fun (a : n) (b : n) => _inst_2 a b) _inst_1 _inst_3 A) b))
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (b : n -> α), (IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{max (succ u1) (succ u2)} (n -> α) (HSMul.hSMul.{u2, max u1 u2, max u1 u2} α (n -> α) (n -> α) (instHSMul.{u2, max u1 u2} α (n -> α) (Pi.instSMul.{u1, u2, u2} n α (fun (a._@.Mathlib.Data.Matrix.Basic._hyg.18074 : n) => α) (fun (i : n) => Algebra.toSMul.{u2, u2} α α (CommRing.toCommSemiring.{u2} α _inst_3) (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (Algebra.id.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A) (Matrix.mulVec.{u2, u1, u1} n n α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) _inst_1 (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) b)) (FunLike.coe.{max (succ u1) (succ u2), max (succ u1) (succ u2), max (succ u1) (succ u2)} (LinearMap.{u2, u2, max u1 u2, max u1 u2} α α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (RingHom.id.{u2} α (Semiring.toNonAssocSemiring.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (n -> α) (n -> α) (Pi.addCommMonoid.{u1, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.273 : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.addCommMonoid.{u1, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.273 : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.273 : n) => α) α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => Semiring.toModule.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.273 : n) => α) α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => Semiring.toModule.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) (n -> α) (fun (_x : n -> α) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6190 : n -> α) => n -> α) _x) (LinearMap.instFunLikeLinearMap.{u2, u2, max u1 u2, max u1 u2} α α (n -> α) (n -> α) (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.273 : n) => α) α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => Semiring.toModule.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.273 : n) => α) α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => Semiring.toModule.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (RingHom.id.{u2} α (Semiring.toNonAssocSemiring.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) (Matrix.cramer.{u1, u2} n α (fun (a : n) (b : n) => _inst_2 a b) _inst_1 _inst_3 A) b))
 Case conversion may be inaccurate. Consider using '#align matrix.det_smul_inv_mul_vec_eq_cramer Matrix.det_smul_inv_mulVec_eq_cramerₓ'. -/
 /-- One form of **Cramer's rule**. See `matrix.mul_vec_cramer` for a stronger form. -/
 @[simp]
@@ -1132,7 +1132,7 @@ theorem det_smul_inv_mulVec_eq_cramer (A : Matrix n n α) (b : n → α) (h : Is
 lean 3 declaration is
   forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (b : n -> α), (IsUnit.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{succ (max u1 u2)} (n -> α) (SMul.smul.{u2, max u1 u2} α (n -> α) (Function.hasSMul.{u1, u2, u2} n α α (Mul.toSMul.{u2} α (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A) (Matrix.vecMul.{u2, u1, u1} n n α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) _inst_1 b (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A))) (coeFn.{succ (max u1 u2), succ (max u1 u2)} (LinearMap.{u2, u2, max u1 u2, max u1 u2} α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (RingHom.id.{u2} α (Semiring.toNonAssocSemiring.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (n -> α) (n -> α) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.Function.module.{u1, u2, u2} n α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Pi.Function.module.{u1, u2, u2} n α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (_x : LinearMap.{u2, u2, max u1 u2, max u1 u2} α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (RingHom.id.{u2} α (Semiring.toNonAssocSemiring.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (n -> α) (n -> α) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.Function.module.{u1, u2, u2} n α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Pi.Function.module.{u1, u2, u2} n α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3))))) => (n -> α) -> n -> α) (LinearMap.hasCoeToFun.{u2, u2, max u1 u2, max u1 u2} α α (n -> α) (n -> α) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.Function.module.{u1, u2, u2} n α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Pi.Function.module.{u1, u2, u2} n α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (RingHom.id.{u2} α (Semiring.toNonAssocSemiring.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Matrix.cramer.{u1, u2} n α (fun (a : n) (b : n) => _inst_2 a b) _inst_1 _inst_3 (Matrix.transpose.{u2, u1, u1} n n α A)) b))
 but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (b : n -> α), (IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{max (succ u1) (succ u2)} (n -> α) (HSMul.hSMul.{u2, max u1 u2, max u1 u2} α (n -> α) (n -> α) (instHSMul.{u2, max u1 u2} α (n -> α) (Pi.instSMul.{u1, u2, u2} n α (fun (a._@.Mathlib.Data.Matrix.Basic._hyg.18132 : n) => α) (fun (i : n) => Algebra.toSMul.{u2, u2} α α (CommRing.toCommSemiring.{u2} α _inst_3) (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (Algebra.id.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A) (Matrix.vecMul.{u2, u1, u1} n n α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) _inst_1 b (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A))) (FunLike.coe.{max (succ u1) (succ u2), max (succ u1) (succ u2), max (succ u1) (succ u2)} (LinearMap.{u2, u2, max u1 u2, max u1 u2} α α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (RingHom.id.{u2} α (Semiring.toNonAssocSemiring.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (n -> α) (n -> α) (Pi.addCommMonoid.{u1, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.274 : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.addCommMonoid.{u1, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.274 : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.274 : n) => α) α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => Semiring.toModule.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.274 : n) => α) α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => Semiring.toModule.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) (n -> α) (fun (_x : n -> α) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6190 : n -> α) => n -> α) _x) (LinearMap.instFunLikeLinearMap.{u2, u2, max u1 u2, max u1 u2} α α (n -> α) (n -> α) (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.274 : n) => α) α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => Semiring.toModule.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.274 : n) => α) α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => Semiring.toModule.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (RingHom.id.{u2} α (Semiring.toNonAssocSemiring.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) (Matrix.cramer.{u1, u2} n α (fun (a : n) (b : n) => _inst_2 a b) _inst_1 _inst_3 (Matrix.transpose.{u2, u1, u1} n n α A)) b))
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (b : n -> α), (IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{max (succ u1) (succ u2)} (n -> α) (HSMul.hSMul.{u2, max u1 u2, max u1 u2} α (n -> α) (n -> α) (instHSMul.{u2, max u1 u2} α (n -> α) (Pi.instSMul.{u1, u2, u2} n α (fun (a._@.Mathlib.Data.Matrix.Basic._hyg.18132 : n) => α) (fun (i : n) => Algebra.toSMul.{u2, u2} α α (CommRing.toCommSemiring.{u2} α _inst_3) (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (Algebra.id.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A) (Matrix.vecMul.{u2, u1, u1} n n α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) _inst_1 b (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A))) (FunLike.coe.{max (succ u1) (succ u2), max (succ u1) (succ u2), max (succ u1) (succ u2)} (LinearMap.{u2, u2, max u1 u2, max u1 u2} α α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (RingHom.id.{u2} α (Semiring.toNonAssocSemiring.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (n -> α) (n -> α) (Pi.addCommMonoid.{u1, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.273 : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.addCommMonoid.{u1, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.273 : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.273 : n) => α) α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => Semiring.toModule.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.273 : n) => α) α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => Semiring.toModule.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) (n -> α) (fun (_x : n -> α) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6190 : n -> α) => n -> α) _x) (LinearMap.instFunLikeLinearMap.{u2, u2, max u1 u2, max u1 u2} α α (n -> α) (n -> α) (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.273 : n) => α) α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => Semiring.toModule.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.273 : n) => α) α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => Semiring.toModule.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (RingHom.id.{u2} α (Semiring.toNonAssocSemiring.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) (Matrix.cramer.{u1, u2} n α (fun (a : n) (b : n) => _inst_2 a b) _inst_1 _inst_3 (Matrix.transpose.{u2, u1, u1} n n α A)) b))
 Case conversion may be inaccurate. Consider using '#align matrix.det_smul_inv_vec_mul_eq_cramer_transpose Matrix.det_smul_inv_vecMul_eq_cramer_transposeₓ'. -/
 /-- One form of **Cramer's rule**. See `matrix.mul_vec_cramer` for a stronger form. -/
 @[simp]
Diff
@@ -76,7 +76,7 @@ variable [Fintype n] [DecidableEq n] [CommRing α]
 lean 3 declaration is
   forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasMul.{u2, u1} n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) A], Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Invertible.invOf.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasMul.{u2, u1} n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) A _inst_4) A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (OfNat.mk.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.one.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))))))
 but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) A], Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Invertible.invOf.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) A _inst_4) A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))))
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) A], Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Invertible.invOf.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) A _inst_4) A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))))
 Case conversion may be inaccurate. Consider using '#align matrix.inv_of_mul_self Matrix.invOf_mul_selfₓ'. -/
 /-- A copy of `inv_of_mul_self` using `⬝` not `*`. -/
 protected theorem invOf_mul_self (A : Matrix n n α) [Invertible A] : ⅟ A ⬝ A = 1 :=
@@ -87,7 +87,7 @@ protected theorem invOf_mul_self (A : Matrix n n α) [Invertible A] : ⅟ A ⬝
 lean 3 declaration is
   forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasMul.{u2, u1} n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) A], Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A (Invertible.invOf.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasMul.{u2, u1} n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) A _inst_4)) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (OfNat.mk.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.one.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))))))
 but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) A], Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A (Invertible.invOf.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) A _inst_4)) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))))
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) A], Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A (Invertible.invOf.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) A _inst_4)) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))))
 Case conversion may be inaccurate. Consider using '#align matrix.mul_inv_of_self Matrix.mul_invOf_selfₓ'. -/
 /-- A copy of `mul_inv_of_self` using `⬝` not `*`. -/
 protected theorem mul_invOf_self (A : Matrix n n α) [Invertible A] : A ⬝ ⅟ A = 1 :=
@@ -98,7 +98,7 @@ protected theorem mul_invOf_self (A : Matrix n n α) [Invertible A] : A ⬝ ⅟
 lean 3 declaration is
   forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] (A : Matrix.{u2, u2, u3} n n α) (B : Matrix.{u2, u1, u3} n m α) [_inst_4 : Invertible.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.hasMul.{u3, u2} n α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.hasOne.{u3, u2} 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} α (CommRing.toRing.{u3} α _inst_3)))))) (AddMonoidWithOne.toOne.{u3} α (AddGroupWithOne.toAddMonoidWithOne.{u3} α (AddCommGroupWithOne.toAddGroupWithOne.{u3} α (Ring.toAddCommGroupWithOne.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) A], Eq.{succ (max u2 u1 u3)} (Matrix.{u2, u1, u3} n m α) (Matrix.mul.{u3, u2, u2, u1} n n m α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) (Invertible.invOf.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.hasMul.{u3, u2} n α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.hasOne.{u3, u2} 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} α (CommRing.toRing.{u3} α _inst_3)))))) (AddMonoidWithOne.toOne.{u3} α (AddGroupWithOne.toAddMonoidWithOne.{u3} α (AddCommGroupWithOne.toAddGroupWithOne.{u3} α (Ring.toAddCommGroupWithOne.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) A _inst_4) (Matrix.mul.{u3, u2, u2, u1} n n m α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) A B)) B
 but is expected to have type
-  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] (A : Matrix.{u2, u2, u3} n n α) (B : Matrix.{u2, u1, u3} n m α) [_inst_4 : Invertible.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.instMulMatrix.{u3, u2} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u2} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (NonAssocRing.toOne.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) A], Eq.{max (max (succ u1) (succ u2)) (succ u3)} (Matrix.{u2, u1, u3} n m α) (Matrix.mul.{u3, u2, u2, u1} n n m α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) (Invertible.invOf.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.instMulMatrix.{u3, u2} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u2} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (NonAssocRing.toOne.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) A _inst_4) (Matrix.mul.{u3, u2, u2, u1} n n m α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) A B)) B
+  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] (A : Matrix.{u2, u2, u3} n n α) (B : Matrix.{u2, u1, u3} n m α) [_inst_4 : Invertible.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.instMulMatrix.{u3, u2} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u2} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (Semiring.toOne.{u3} α (CommSemiring.toSemiring.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3)))) A], Eq.{max (max (succ u1) (succ u2)) (succ u3)} (Matrix.{u2, u1, u3} n m α) (Matrix.mul.{u3, u2, u2, u1} n n m α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) (Invertible.invOf.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.instMulMatrix.{u3, u2} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u2} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (Semiring.toOne.{u3} α (CommSemiring.toSemiring.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3)))) A _inst_4) (Matrix.mul.{u3, u2, u2, u1} n n m α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) A B)) B
 Case conversion may be inaccurate. Consider using '#align matrix.inv_of_mul_self_assoc Matrix.invOf_mul_self_assocₓ'. -/
 /-- A copy of `inv_of_mul_self_assoc` using `⬝` not `*`. -/
 protected theorem invOf_mul_self_assoc (A : Matrix n n α) (B : Matrix n m α) [Invertible A] :
@@ -109,7 +109,7 @@ protected theorem invOf_mul_self_assoc (A : Matrix n n α) (B : Matrix n m α) [
 lean 3 declaration is
   forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] (A : Matrix.{u2, u2, u3} n n α) (B : Matrix.{u2, u1, u3} n m α) [_inst_4 : Invertible.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.hasMul.{u3, u2} n α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.hasOne.{u3, u2} 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} α (CommRing.toRing.{u3} α _inst_3)))))) (AddMonoidWithOne.toOne.{u3} α (AddGroupWithOne.toAddMonoidWithOne.{u3} α (AddCommGroupWithOne.toAddGroupWithOne.{u3} α (Ring.toAddCommGroupWithOne.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) A], Eq.{succ (max u2 u1 u3)} (Matrix.{u2, u1, u3} n m α) (Matrix.mul.{u3, u2, u2, u1} n n m α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) A (Matrix.mul.{u3, u2, u2, u1} n n m α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) (Invertible.invOf.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.hasMul.{u3, u2} n α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.hasOne.{u3, u2} 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} α (CommRing.toRing.{u3} α _inst_3)))))) (AddMonoidWithOne.toOne.{u3} α (AddGroupWithOne.toAddMonoidWithOne.{u3} α (AddCommGroupWithOne.toAddGroupWithOne.{u3} α (Ring.toAddCommGroupWithOne.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) A _inst_4) B)) B
 but is expected to have type
-  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] (A : Matrix.{u2, u2, u3} n n α) (B : Matrix.{u2, u1, u3} n m α) [_inst_4 : Invertible.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.instMulMatrix.{u3, u2} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u2} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (NonAssocRing.toOne.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) A], Eq.{max (max (succ u1) (succ u2)) (succ u3)} (Matrix.{u2, u1, u3} n m α) (Matrix.mul.{u3, u2, u2, u1} n n m α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) A (Matrix.mul.{u3, u2, u2, u1} n n m α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) (Invertible.invOf.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.instMulMatrix.{u3, u2} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u2} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (NonAssocRing.toOne.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) A _inst_4) B)) B
+  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] (A : Matrix.{u2, u2, u3} n n α) (B : Matrix.{u2, u1, u3} n m α) [_inst_4 : Invertible.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.instMulMatrix.{u3, u2} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u2} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (Semiring.toOne.{u3} α (CommSemiring.toSemiring.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3)))) A], Eq.{max (max (succ u1) (succ u2)) (succ u3)} (Matrix.{u2, u1, u3} n m α) (Matrix.mul.{u3, u2, u2, u1} n n m α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) A (Matrix.mul.{u3, u2, u2, u1} n n m α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) (Invertible.invOf.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.instMulMatrix.{u3, u2} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u2} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (Semiring.toOne.{u3} α (CommSemiring.toSemiring.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3)))) A _inst_4) B)) B
 Case conversion may be inaccurate. Consider using '#align matrix.mul_inv_of_self_assoc Matrix.mul_invOf_self_assocₓ'. -/
 /-- A copy of `mul_inv_of_self_assoc` using `⬝` not `*`. -/
 protected theorem mul_invOf_self_assoc (A : Matrix n n α) (B : Matrix n m α) [Invertible A] :
@@ -120,7 +120,7 @@ protected theorem mul_invOf_self_assoc (A : Matrix n n α) (B : Matrix n m α) [
 lean 3 declaration is
   forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] (A : Matrix.{u1, u2, u3} m n α) (B : Matrix.{u2, u2, u3} n n α) [_inst_4 : Invertible.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.hasMul.{u3, u2} n α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.hasOne.{u3, u2} 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} α (CommRing.toRing.{u3} α _inst_3)))))) (AddMonoidWithOne.toOne.{u3} α (AddGroupWithOne.toAddMonoidWithOne.{u3} α (AddCommGroupWithOne.toAddGroupWithOne.{u3} α (Ring.toAddCommGroupWithOne.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) B], Eq.{succ (max u1 u2 u3)} (Matrix.{u1, u2, u3} m n α) (Matrix.mul.{u3, u1, u2, u2} m n n α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) (Matrix.mul.{u3, u1, u2, u2} m n n α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) A (Invertible.invOf.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.hasMul.{u3, u2} n α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.hasOne.{u3, u2} 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} α (CommRing.toRing.{u3} α _inst_3)))))) (AddMonoidWithOne.toOne.{u3} α (AddGroupWithOne.toAddMonoidWithOne.{u3} α (AddCommGroupWithOne.toAddGroupWithOne.{u3} α (Ring.toAddCommGroupWithOne.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) B _inst_4)) B) A
 but is expected to have type
-  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] (A : Matrix.{u1, u2, u3} m n α) (B : Matrix.{u2, u2, u3} n n α) [_inst_4 : Invertible.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.instMulMatrix.{u3, u2} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u2} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (NonAssocRing.toOne.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) B], Eq.{max (max (succ u1) (succ u2)) (succ u3)} (Matrix.{u1, u2, u3} m n α) (Matrix.mul.{u3, u1, u2, u2} m n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) (Matrix.mul.{u3, u1, u2, u2} m n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) A (Invertible.invOf.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.instMulMatrix.{u3, u2} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u2} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (NonAssocRing.toOne.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) B _inst_4)) B) A
+  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] (A : Matrix.{u1, u2, u3} m n α) (B : Matrix.{u2, u2, u3} n n α) [_inst_4 : Invertible.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.instMulMatrix.{u3, u2} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u2} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (Semiring.toOne.{u3} α (CommSemiring.toSemiring.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3)))) B], Eq.{max (max (succ u1) (succ u2)) (succ u3)} (Matrix.{u1, u2, u3} m n α) (Matrix.mul.{u3, u1, u2, u2} m n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) (Matrix.mul.{u3, u1, u2, u2} m n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) A (Invertible.invOf.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.instMulMatrix.{u3, u2} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u2} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (Semiring.toOne.{u3} α (CommSemiring.toSemiring.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3)))) B _inst_4)) B) A
 Case conversion may be inaccurate. Consider using '#align matrix.mul_inv_of_mul_self_cancel Matrix.mul_invOf_mul_self_cancelₓ'. -/
 /-- A copy of `mul_inv_of_mul_self_cancel` using `⬝` not `*`. -/
 protected theorem mul_invOf_mul_self_cancel (A : Matrix m n α) (B : Matrix n n α) [Invertible B] :
@@ -131,7 +131,7 @@ protected theorem mul_invOf_mul_self_cancel (A : Matrix m n α) (B : Matrix n n
 lean 3 declaration is
   forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] (A : Matrix.{u1, u2, u3} m n α) (B : Matrix.{u2, u2, u3} n n α) [_inst_4 : Invertible.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.hasMul.{u3, u2} n α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.hasOne.{u3, u2} 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} α (CommRing.toRing.{u3} α _inst_3)))))) (AddMonoidWithOne.toOne.{u3} α (AddGroupWithOne.toAddMonoidWithOne.{u3} α (AddCommGroupWithOne.toAddGroupWithOne.{u3} α (Ring.toAddCommGroupWithOne.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) B], Eq.{succ (max u1 u2 u3)} (Matrix.{u1, u2, u3} m n α) (Matrix.mul.{u3, u1, u2, u2} m n n α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) (Matrix.mul.{u3, u1, u2, u2} m n n α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) A B) (Invertible.invOf.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.hasMul.{u3, u2} n α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.hasOne.{u3, u2} 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} α (CommRing.toRing.{u3} α _inst_3)))))) (AddMonoidWithOne.toOne.{u3} α (AddGroupWithOne.toAddMonoidWithOne.{u3} α (AddCommGroupWithOne.toAddGroupWithOne.{u3} α (Ring.toAddCommGroupWithOne.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) B _inst_4)) A
 but is expected to have type
-  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] (A : Matrix.{u1, u2, u3} m n α) (B : Matrix.{u2, u2, u3} n n α) [_inst_4 : Invertible.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.instMulMatrix.{u3, u2} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u2} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (NonAssocRing.toOne.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) B], Eq.{max (max (succ u1) (succ u2)) (succ u3)} (Matrix.{u1, u2, u3} m n α) (Matrix.mul.{u3, u1, u2, u2} m n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) (Matrix.mul.{u3, u1, u2, u2} m n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) A B) (Invertible.invOf.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.instMulMatrix.{u3, u2} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u2} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (NonAssocRing.toOne.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) B _inst_4)) A
+  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] (A : Matrix.{u1, u2, u3} m n α) (B : Matrix.{u2, u2, u3} n n α) [_inst_4 : Invertible.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.instMulMatrix.{u3, u2} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u2} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (Semiring.toOne.{u3} α (CommSemiring.toSemiring.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3)))) B], Eq.{max (max (succ u1) (succ u2)) (succ u3)} (Matrix.{u1, u2, u3} m n α) (Matrix.mul.{u3, u1, u2, u2} m n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) (Matrix.mul.{u3, u1, u2, u2} m n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) A B) (Invertible.invOf.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.instMulMatrix.{u3, u2} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u2} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (Semiring.toOne.{u3} α (CommSemiring.toSemiring.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3)))) B _inst_4)) A
 Case conversion may be inaccurate. Consider using '#align matrix.mul_mul_inv_of_self_cancel Matrix.mul_mul_invOf_self_cancelₓ'. -/
 /-- A copy of `mul_mul_inv_of_self_cancel` using `⬝` not `*`. -/
 protected theorem mul_mul_invOf_self_cancel (A : Matrix m n α) (B : Matrix n n α) [Invertible B] :
@@ -144,7 +144,7 @@ variable (A : Matrix n n α) (B : Matrix n n α)
 lean 3 declaration is
   forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{u2} α (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)], Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasMul.{u2, u1} n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) A
 but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{u2} α (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)], Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) A
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{u2} α (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)], Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) A
 Case conversion may be inaccurate. Consider using '#align matrix.invertible_of_det_invertible Matrix.invertibleOfDetInvertibleₓ'. -/
 /-- If `A.det` has a constructive inverse, produce one for `A`. -/
 def invertibleOfDetInvertible [Invertible A.det] : Invertible A
@@ -160,7 +160,7 @@ def invertibleOfDetInvertible [Invertible A.det] : Invertible A
 lean 3 declaration is
   forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{u2} α (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)] [_inst_5 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasMul.{u2, u1} n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) A], Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Invertible.invOf.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasMul.{u2, u1} n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) A _inst_5) (SMul.smul.{u2, max u1 u2} α (Matrix.{u1, u1, u2} n n α) (Matrix.hasSmul.{u2, u1, u1, u2} n n α α (Mul.toSMul.{u2} α (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Invertible.invOf.{u2} α (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A) _inst_4) (Matrix.adjugate.{u1, u2} n α (fun (a : n) (b : n) => _inst_2 a b) _inst_1 _inst_3 A))
 but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{u2} α (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)] [_inst_5 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) A], Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Invertible.invOf.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) A _inst_5) (HSMul.hSMul.{u2, max u1 u2, max u1 u2} α (Matrix.{u1, u1, u2} n n α) (Matrix.{u1, u1, u2} n n α) (instHSMul.{u2, max u1 u2} α (Matrix.{u1, u1, u2} n n α) (Matrix.smul.{u2, u1, u1, u2} n n α α (Algebra.toSMul.{u2, u2} α α (CommRing.toCommSemiring.{u2} α _inst_3) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Algebra.id.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) (Invertible.invOf.{u2} α (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A) _inst_4) (Matrix.adjugate.{u1, u2} n α (fun (a : n) (b : n) => _inst_2 a b) _inst_1 _inst_3 A))
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{u2} α (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)] [_inst_5 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) A], Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Invertible.invOf.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) A _inst_5) (HSMul.hSMul.{u2, max u1 u2, max u1 u2} α (Matrix.{u1, u1, u2} n n α) (Matrix.{u1, u1, u2} n n α) (instHSMul.{u2, max u1 u2} α (Matrix.{u1, u1, u2} n n α) (Matrix.smul.{u2, u1, u1, u2} n n α α (Algebra.toSMul.{u2, u2} α α (CommRing.toCommSemiring.{u2} α _inst_3) (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (Algebra.id.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) (Invertible.invOf.{u2} α (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A) _inst_4) (Matrix.adjugate.{u1, u2} n α (fun (a : n) (b : n) => _inst_2 a b) _inst_1 _inst_3 A))
 Case conversion may be inaccurate. Consider using '#align matrix.inv_of_eq Matrix.invOf_eqₓ'. -/
 theorem invOf_eq [Invertible A.det] [Invertible A] : ⅟ A = ⅟ A.det • A.adjugate :=
   by
@@ -172,7 +172,7 @@ theorem invOf_eq [Invertible A.det] [Invertible A] : ⅟ A = ⅟ A.det • A.adj
 lean 3 declaration is
   forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (B : Matrix.{u1, u1, u2} n n α), (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) B A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (OfNat.mk.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.one.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))))))) -> (Invertible.{u2} α (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A))
 but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (B : Matrix.{u1, u1, u2} n n α), (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) B A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))))) -> (Invertible.{u2} α (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A))
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (B : Matrix.{u1, u1, u2} n n α), (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) B A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))))) -> (Invertible.{u2} α (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A))
 Case conversion may be inaccurate. Consider using '#align matrix.det_invertible_of_left_inverse Matrix.detInvertibleOfLeftInverseₓ'. -/
 /-- `A.det` is invertible if `A` has a left inverse. -/
 def detInvertibleOfLeftInverse (h : B ⬝ A = 1) : Invertible A.det
@@ -186,7 +186,7 @@ def detInvertibleOfLeftInverse (h : B ⬝ A = 1) : Invertible A.det
 lean 3 declaration is
   forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (B : Matrix.{u1, u1, u2} n n α), (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A B) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (OfNat.mk.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.one.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))))))) -> (Invertible.{u2} α (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A))
 but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (B : Matrix.{u1, u1, u2} n n α), (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A B) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))))) -> (Invertible.{u2} α (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A))
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (B : Matrix.{u1, u1, u2} n n α), (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A B) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))))) -> (Invertible.{u2} α (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A))
 Case conversion may be inaccurate. Consider using '#align matrix.det_invertible_of_right_inverse Matrix.detInvertibleOfRightInverseₓ'. -/
 /-- `A.det` is invertible if `A` has a right inverse. -/
 def detInvertibleOfRightInverse (h : A ⬝ B = 1) : Invertible A.det
@@ -200,7 +200,7 @@ def detInvertibleOfRightInverse (h : A ⬝ B = 1) : Invertible A.det
 lean 3 declaration is
   forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasMul.{u2, u1} n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) A], Invertible.{u2} α (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)
 but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) A], Invertible.{u2} α (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) A], Invertible.{u2} α (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)
 Case conversion may be inaccurate. Consider using '#align matrix.det_invertible_of_invertible Matrix.detInvertibleOfInvertibleₓ'. -/
 /-- If `A` has a constructive inverse, produce one for `A.det`. -/
 def detInvertibleOfInvertible [Invertible A] : Invertible A.det :=
@@ -211,7 +211,7 @@ def detInvertibleOfInvertible [Invertible A] : Invertible A.det :=
 lean 3 declaration is
   forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasMul.{u2, u1} n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) A] [_inst_5 : Invertible.{u2} α (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)], Eq.{succ u2} α (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 (Invertible.invOf.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasMul.{u2, u1} n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) A _inst_4)) (Invertible.invOf.{u2} α (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A) _inst_5)
 but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) A] [_inst_5 : Invertible.{u2} α (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)], Eq.{succ u2} α (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 (Invertible.invOf.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) A _inst_4)) (Invertible.invOf.{u2} α (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A) _inst_5)
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) A] [_inst_5 : Invertible.{u2} α (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)], Eq.{succ u2} α (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 (Invertible.invOf.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) A _inst_4)) (Invertible.invOf.{u2} α (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A) _inst_5)
 Case conversion may be inaccurate. Consider using '#align matrix.det_inv_of Matrix.det_invOfₓ'. -/
 theorem det_invOf [Invertible A] [Invertible A.det] : (⅟ A).det = ⅟ A.det :=
   by
@@ -223,7 +223,7 @@ theorem det_invOf [Invertible A] [Invertible A.det] : (⅟ A).det = ⅟ A.det :=
 lean 3 declaration is
   forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), Equiv.{succ (max u1 u2), succ u2} (Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasMul.{u2, u1} n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) A) (Invertible.{u2} α (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A))
 but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), Equiv.{succ (max u1 u2), succ u2} (Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) A) (Invertible.{u2} α (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A))
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), Equiv.{succ (max u1 u2), succ u2} (Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) A) (Invertible.{u2} α (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A))
 Case conversion may be inaccurate. Consider using '#align matrix.invertible_equiv_det_invertible Matrix.invertibleEquivDetInvertibleₓ'. -/
 /-- Together `matrix.det_invertible_of_invertible` and `matrix.invertible_of_det_invertible` form an
 equivalence, although both sides of the equiv are subsingleton anyway. -/
@@ -242,7 +242,7 @@ variable {A B}
 lean 3 declaration is
   forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] {A : Matrix.{u1, u1, u2} n n α} {B : Matrix.{u1, u1, u2} n n α}, Iff (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A B) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (OfNat.mk.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.one.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))))))) (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) B A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (OfNat.mk.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.one.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3))))))))))
 but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] {A : Matrix.{u1, u1, u2} n n α} {B : Matrix.{u1, u1, u2} n n α}, Iff (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A B) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))))) (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) B A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))))
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] {A : Matrix.{u1, u1, u2} n n α} {B : Matrix.{u1, u1, u2} n n α}, Iff (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A B) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))))) (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) B A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))))))
 Case conversion may be inaccurate. Consider using '#align matrix.mul_eq_one_comm Matrix.mul_eq_one_commₓ'. -/
 theorem mul_eq_one_comm : A ⬝ B = 1 ↔ B ⬝ A = 1 :=
   suffices ∀ A B, A ⬝ B = 1 → B ⬝ A = 1 from ⟨this A B, this B A⟩
@@ -263,7 +263,7 @@ variable (A B)
 lean 3 declaration is
   forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (B : Matrix.{u1, u1, u2} n n α), (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) B A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (OfNat.mk.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.one.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))))))) -> (Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasMul.{u2, u1} n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) A)
 but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (B : Matrix.{u1, u1, u2} n n α), (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) B A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))))) -> (Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) A)
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (B : Matrix.{u1, u1, u2} n n α), (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) B A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))))) -> (Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) A)
 Case conversion may be inaccurate. Consider using '#align matrix.invertible_of_left_inverse Matrix.invertibleOfLeftInverseₓ'. -/
 /-- We can construct an instance of invertible A if A has a left inverse. -/
 def invertibleOfLeftInverse (h : B ⬝ A = 1) : Invertible A :=
@@ -274,7 +274,7 @@ def invertibleOfLeftInverse (h : B ⬝ A = 1) : Invertible A :=
 lean 3 declaration is
   forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (B : Matrix.{u1, u1, u2} n n α), (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A B) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (OfNat.mk.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.one.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))))))) -> (Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasMul.{u2, u1} n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) A)
 but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (B : Matrix.{u1, u1, u2} n n α), (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A B) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))))) -> (Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) A)
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (B : Matrix.{u1, u1, u2} n n α), (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A B) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))))) -> (Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) A)
 Case conversion may be inaccurate. Consider using '#align matrix.invertible_of_right_inverse Matrix.invertibleOfRightInverseₓ'. -/
 /-- We can construct an instance of invertible A if A has a right inverse. -/
 def invertibleOfRightInverse (h : A ⬝ B = 1) : Invertible A :=
@@ -285,7 +285,7 @@ def invertibleOfRightInverse (h : A ⬝ B = 1) : Invertible A :=
 lean 3 declaration is
   forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasMul.{u2, u1} n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) A], Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasMul.{u2, u1} n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.transpose.{u2, u1, u1} n n α A)
 but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) A], Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Matrix.transpose.{u2, u1, u1} n n α A)
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) A], Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Matrix.transpose.{u2, u1, u1} n n α A)
 Case conversion may be inaccurate. Consider using '#align matrix.invertible_transpose Matrix.invertibleTransposeₓ'. -/
 /-- The transpose of an invertible matrix is invertible. -/
 instance invertibleTranspose [Invertible A] : Invertible Aᵀ :=
@@ -297,7 +297,7 @@ instance invertibleTranspose [Invertible A] : Invertible Aᵀ :=
 lean 3 declaration is
   forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasMul.{u2, u1} n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.transpose.{u2, u1, u1} n n α A)], Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasMul.{u2, u1} n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) A
 but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Matrix.transpose.{u2, u1, u1} n n α A)], Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) A
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Matrix.transpose.{u2, u1, u1} n n α A)], Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) A
 Case conversion may be inaccurate. Consider using '#align matrix.invertible__of_invertible_transpose Matrix.invertibleOfInvertibleTransposeₓ'. -/
 /-- A matrix is invertible if the transpose is invertible. -/
 def invertibleOfInvertibleTranspose [Invertible Aᵀ] : Invertible A :=
@@ -310,7 +310,7 @@ def invertibleOfInvertibleTranspose [Invertible Aᵀ] : Invertible A :=
 lean 3 declaration is
   forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : StarRing.{u2} α (NonUnitalRing.toNonUnitalSemiring.{u2} α (NonUnitalCommRing.toNonUnitalRing.{u2} α (CommRing.toNonUnitalCommRing.{u2} α _inst_3)))] [_inst_5 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasMul.{u2, u1} n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.conjTranspose.{u2, u1, u1} n n α (InvolutiveStar.toHasStar.{u2} α (StarAddMonoid.toHasInvolutiveStar.{u2} α (AddCommMonoid.toAddMonoid.{u2} α (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalSemiring.toNonUnitalNonAssocSemiring.{u2} α (NonUnitalRing.toNonUnitalSemiring.{u2} α (NonUnitalCommRing.toNonUnitalRing.{u2} α (CommRing.toNonUnitalCommRing.{u2} α _inst_3)))))) (StarRing.toStarAddMonoid.{u2} α (NonUnitalRing.toNonUnitalSemiring.{u2} α (NonUnitalCommRing.toNonUnitalRing.{u2} α (CommRing.toNonUnitalCommRing.{u2} α _inst_3))) _inst_4))) A)], Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasMul.{u2, u1} n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) A
 but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : StarRing.{u2} α (NonUnitalRing.toNonUnitalSemiring.{u2} α (NonUnitalCommRing.toNonUnitalRing.{u2} α (CommRing.toNonUnitalCommRing.{u2} α _inst_3)))] [_inst_5 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Matrix.conjTranspose.{u2, u1, u1} n n α (InvolutiveStar.toStar.{u2} α (StarAddMonoid.toInvolutiveStar.{u2} α (AddMonoidWithOne.toAddMonoid.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (Ring.toAddGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (StarRing.toStarAddMonoid.{u2} α (NonUnitalRing.toNonUnitalSemiring.{u2} α (NonUnitalCommRing.toNonUnitalRing.{u2} α (CommRing.toNonUnitalCommRing.{u2} α _inst_3))) _inst_4))) A)], Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) A
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : StarRing.{u2} α (NonUnitalCommSemiring.toNonUnitalSemiring.{u2} α (NonUnitalCommRing.toNonUnitalCommSemiring.{u2} α (CommRing.toNonUnitalCommRing.{u2} α _inst_3)))] [_inst_5 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Matrix.conjTranspose.{u2, u1, u1} n n α (InvolutiveStar.toStar.{u2} α (StarAddMonoid.toInvolutiveStar.{u2} α (AddMonoidWithOne.toAddMonoid.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (Ring.toAddGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (StarRing.toStarAddMonoid.{u2} α (NonUnitalCommSemiring.toNonUnitalSemiring.{u2} α (NonUnitalCommRing.toNonUnitalCommSemiring.{u2} α (CommRing.toNonUnitalCommRing.{u2} α _inst_3))) _inst_4))) A)], Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) A
 Case conversion may be inaccurate. Consider using '#align matrix.invertible_of_invertible_conj_transpose Matrix.invertibleOfInvertibleConjTransposeₓ'. -/
 /-- A matrix is invertible if the conjugate transpose is invertible. -/
 def invertibleOfInvertibleConjTranspose [StarRing α] [Invertible Aᴴ] : Invertible A :=
@@ -323,7 +323,7 @@ def invertibleOfInvertibleConjTranspose [StarRing α] [Invertible Aᴴ] : Invert
 lean 3 declaration is
   forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{u2} α (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)], Units.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Ring.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.ring.{u2, u1} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toRing.{u2} α _inst_3)))
 but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{u2} α (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)], Units.{max u2 u1} (Matrix.{u1, u1, u2} n n α) (MonoidWithZero.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Semiring.toMonoidWithZero.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.semiring.{u2, u1} n α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) _inst_1 (fun (a : n) (b : n) => _inst_2 a b))))
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{u2} α (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)], Units.{max u2 u1} (Matrix.{u1, u1, u2} n n α) (MonoidWithZero.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Semiring.toMonoidWithZero.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.semiring.{u2, u1} n α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) _inst_1 (fun (a : n) (b : n) => _inst_2 a b))))
 Case conversion may be inaccurate. Consider using '#align matrix.unit_of_det_invertible Matrix.unitOfDetInvertibleₓ'. -/
 /-- Given a proof that `A.det` has a constructive inverse, lift `A` to `(matrix n n α)ˣ`-/
 def unitOfDetInvertible [Invertible A.det] : (Matrix n n α)ˣ :=
@@ -334,7 +334,7 @@ def unitOfDetInvertible [Invertible A.det] : (Matrix n n α)ˣ :=
 lean 3 declaration is
   forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), Iff (IsUnit.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Ring.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.ring.{u2, u1} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toRing.{u2} α _inst_3))) A) (IsUnit.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A))
 but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), Iff (IsUnit.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (MonoidWithZero.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Semiring.toMonoidWithZero.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.semiring.{u2, u1} n α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) _inst_1 (fun (a : n) (b : n) => _inst_2 a b)))) A) (IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A))
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), Iff (IsUnit.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (MonoidWithZero.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Semiring.toMonoidWithZero.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.semiring.{u2, u1} n α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) _inst_1 (fun (a : n) (b : n) => _inst_2 a b)))) A) (IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A))
 Case conversion may be inaccurate. Consider using '#align matrix.is_unit_iff_is_unit_det Matrix.isUnit_iff_isUnit_detₓ'. -/
 /-- When lowered to a prop, `matrix.invertible_equiv_det_invertible` forms an `iff`. -/
 theorem isUnit_iff_isUnit_det : IsUnit A ↔ IsUnit A.det := by
@@ -348,7 +348,7 @@ theorem isUnit_iff_isUnit_det : IsUnit A ↔ IsUnit A.det := by
 lean 3 declaration is
   forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasMul.{u2, u1} n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) A], IsUnit.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)
 but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) A], IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) A], IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)
 Case conversion may be inaccurate. Consider using '#align matrix.is_unit_det_of_invertible Matrix.isUnit_det_of_invertibleₓ'. -/
 theorem isUnit_det_of_invertible [Invertible A] : IsUnit A.det :=
   @isUnit_of_invertible _ _ _ (detInvertibleOfInvertible A)
@@ -360,7 +360,7 @@ variable {A B}
 lean 3 declaration is
   forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] {A : Matrix.{u1, u1, u2} n n α} {B : Matrix.{u1, u1, u2} n n α}, (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) B A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (OfNat.mk.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.one.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))))))) -> (IsUnit.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Ring.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.ring.{u2, u1} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toRing.{u2} α _inst_3))) A)
 but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] {A : Matrix.{u1, u1, u2} n n α} {B : Matrix.{u1, u1, u2} n n α}, (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) B A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))))) -> (IsUnit.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (MonoidWithZero.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Semiring.toMonoidWithZero.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.semiring.{u2, u1} n α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) _inst_1 (fun (a : n) (b : n) => _inst_2 a b)))) A)
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] {A : Matrix.{u1, u1, u2} n n α} {B : Matrix.{u1, u1, u2} n n α}, (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) B A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))))) -> (IsUnit.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (MonoidWithZero.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Semiring.toMonoidWithZero.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.semiring.{u2, u1} n α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) _inst_1 (fun (a : n) (b : n) => _inst_2 a b)))) A)
 Case conversion may be inaccurate. Consider using '#align matrix.is_unit_of_left_inverse Matrix.isUnit_of_left_inverseₓ'. -/
 theorem isUnit_of_left_inverse (h : B ⬝ A = 1) : IsUnit A :=
   ⟨⟨A, B, mul_eq_one_comm.mp h, h⟩, rfl⟩
@@ -370,7 +370,7 @@ theorem isUnit_of_left_inverse (h : B ⬝ A = 1) : IsUnit A :=
 lean 3 declaration is
   forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] {A : Matrix.{u1, u1, u2} n n α} {B : Matrix.{u1, u1, u2} n n α}, (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A B) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (OfNat.mk.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.one.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))))))) -> (IsUnit.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Ring.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.ring.{u2, u1} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toRing.{u2} α _inst_3))) A)
 but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] {A : Matrix.{u1, u1, u2} n n α} {B : Matrix.{u1, u1, u2} n n α}, (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A B) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))))) -> (IsUnit.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (MonoidWithZero.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Semiring.toMonoidWithZero.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.semiring.{u2, u1} n α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) _inst_1 (fun (a : n) (b : n) => _inst_2 a b)))) A)
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] {A : Matrix.{u1, u1, u2} n n α} {B : Matrix.{u1, u1, u2} n n α}, (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A B) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))))) -> (IsUnit.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (MonoidWithZero.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Semiring.toMonoidWithZero.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.semiring.{u2, u1} n α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) _inst_1 (fun (a : n) (b : n) => _inst_2 a b)))) A)
 Case conversion may be inaccurate. Consider using '#align matrix.is_unit_of_right_inverse Matrix.isUnit_of_right_inverseₓ'. -/
 theorem isUnit_of_right_inverse (h : A ⬝ B = 1) : IsUnit A :=
   ⟨⟨A, B, h, mul_eq_one_comm.mp h⟩, rfl⟩
@@ -380,7 +380,7 @@ theorem isUnit_of_right_inverse (h : A ⬝ B = 1) : IsUnit A :=
 lean 3 declaration is
   forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] {A : Matrix.{u1, u1, u2} n n α} {B : Matrix.{u1, u1, u2} n n α}, (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) B A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (OfNat.mk.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.one.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))))))) -> (IsUnit.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A))
 but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] {A : Matrix.{u1, u1, u2} n n α} {B : Matrix.{u1, u1, u2} n n α}, (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) B A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))))) -> (IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A))
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] {A : Matrix.{u1, u1, u2} n n α} {B : Matrix.{u1, u1, u2} n n α}, (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) B A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))))) -> (IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A))
 Case conversion may be inaccurate. Consider using '#align matrix.is_unit_det_of_left_inverse Matrix.isUnit_det_of_left_inverseₓ'. -/
 theorem isUnit_det_of_left_inverse (h : B ⬝ A = 1) : IsUnit A.det :=
   @isUnit_of_invertible _ _ _ (detInvertibleOfLeftInverse _ _ h)
@@ -390,7 +390,7 @@ theorem isUnit_det_of_left_inverse (h : B ⬝ A = 1) : IsUnit A.det :=
 lean 3 declaration is
   forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] {A : Matrix.{u1, u1, u2} n n α} {B : Matrix.{u1, u1, u2} n n α}, (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A B) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (OfNat.mk.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.one.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))))))) -> (IsUnit.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A))
 but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] {A : Matrix.{u1, u1, u2} n n α} {B : Matrix.{u1, u1, u2} n n α}, (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A B) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))))) -> (IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A))
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] {A : Matrix.{u1, u1, u2} n n α} {B : Matrix.{u1, u1, u2} n n α}, (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A B) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))))) -> (IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A))
 Case conversion may be inaccurate. Consider using '#align matrix.is_unit_det_of_right_inverse Matrix.isUnit_det_of_right_inverseₓ'. -/
 theorem isUnit_det_of_right_inverse (h : A ⬝ B = 1) : IsUnit A.det :=
   @isUnit_of_invertible _ _ _ (detInvertibleOfRightInverse _ _ h)
@@ -400,7 +400,7 @@ theorem isUnit_det_of_right_inverse (h : A ⬝ B = 1) : IsUnit A.det :=
 lean 3 declaration is
   forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] {A : Matrix.{u1, u1, u2} n n α} {B : Matrix.{u1, u1, u2} n n α} [_inst_4 : Nontrivial.{u2} α], (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) B A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (OfNat.mk.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.one.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))))))) -> (Ne.{succ u2} α (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 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} α (CommRing.toRing.{u2} α _inst_3))))))))))
 but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] {A : Matrix.{u1, u1, u2} n n α} {B : Matrix.{u1, u1, u2} n n α} [_inst_4 : Nontrivial.{u2} α], (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) B A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))))) -> (Ne.{succ u2} α (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A) (OfNat.ofNat.{u2} α 0 (Zero.toOfNat0.{u2} α (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))))
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] {A : Matrix.{u1, u1, u2} n n α} {B : Matrix.{u1, u1, u2} n n α} [_inst_4 : Nontrivial.{u2} α], (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) B A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))))) -> (Ne.{succ u2} α (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A) (OfNat.ofNat.{u2} α 0 (Zero.toOfNat0.{u2} α (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))))
 Case conversion may be inaccurate. Consider using '#align matrix.det_ne_zero_of_left_inverse Matrix.det_ne_zero_of_left_inverseₓ'. -/
 theorem det_ne_zero_of_left_inverse [Nontrivial α] (h : B ⬝ A = 1) : A.det ≠ 0 :=
   (isUnit_det_of_left_inverse h).NeZero
@@ -410,7 +410,7 @@ theorem det_ne_zero_of_left_inverse [Nontrivial α] (h : B ⬝ A = 1) : A.det 
 lean 3 declaration is
   forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] {A : Matrix.{u1, u1, u2} n n α} {B : Matrix.{u1, u1, u2} n n α} [_inst_4 : Nontrivial.{u2} α], (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A B) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (OfNat.mk.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.one.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))))))) -> (Ne.{succ u2} α (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 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} α (CommRing.toRing.{u2} α _inst_3))))))))))
 but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] {A : Matrix.{u1, u1, u2} n n α} {B : Matrix.{u1, u1, u2} n n α} [_inst_4 : Nontrivial.{u2} α], (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A B) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))))) -> (Ne.{succ u2} α (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A) (OfNat.ofNat.{u2} α 0 (Zero.toOfNat0.{u2} α (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))))
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] {A : Matrix.{u1, u1, u2} n n α} {B : Matrix.{u1, u1, u2} n n α} [_inst_4 : Nontrivial.{u2} α], (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A B) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))))) -> (Ne.{succ u2} α (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A) (OfNat.ofNat.{u2} α 0 (Zero.toOfNat0.{u2} α (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))))
 Case conversion may be inaccurate. Consider using '#align matrix.det_ne_zero_of_right_inverse Matrix.det_ne_zero_of_right_inverseₓ'. -/
 theorem det_ne_zero_of_right_inverse [Nontrivial α] (h : A ⬝ B = 1) : A.det ≠ 0 :=
   (isUnit_det_of_right_inverse h).NeZero
@@ -426,7 +426,7 @@ variable (A : Matrix n n α) (B : Matrix n n α)
 lean 3 declaration is
   forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), (IsUnit.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (IsUnit.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 (Matrix.transpose.{u2, u1, u1} n n α A)))
 but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), (IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 (Matrix.transpose.{u2, u1, u1} n n α A)))
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), (IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 (Matrix.transpose.{u2, u1, u1} n n α A)))
 Case conversion may be inaccurate. Consider using '#align matrix.is_unit_det_transpose Matrix.isUnit_det_transposeₓ'. -/
 theorem isUnit_det_transpose (h : IsUnit A.det) : IsUnit Aᵀ.det :=
   by
@@ -445,7 +445,7 @@ noncomputable instance : Inv (Matrix n n α) :=
 lean 3 declaration is
   forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) (SMul.smul.{u2, max u1 u2} α (Matrix.{u1, u1, u2} n n α) (Matrix.hasSmul.{u2, u1, u1, u2} n n α α (Mul.toSMul.{u2} α (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Ring.inverse.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) (Matrix.adjugate.{u1, u2} n α (fun (a : n) (b : n) => _inst_2 a b) _inst_1 _inst_3 A))
 but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) (HSMul.hSMul.{u2, max u1 u2, max u1 u2} α (Matrix.{u1, u1, u2} n n α) (Matrix.{u1, u1, u2} n n α) (instHSMul.{u2, max u1 u2} α (Matrix.{u1, u1, u2} n n α) (Matrix.smul.{u2, u1, u1, u2} n n α α (Algebra.toSMul.{u2, u2} α α (CommRing.toCommSemiring.{u2} α _inst_3) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Algebra.id.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) (Ring.inverse.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) (Matrix.adjugate.{u1, u2} n α (fun (a : n) (b : n) => _inst_2 a b) _inst_1 _inst_3 A))
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) (HSMul.hSMul.{u2, max u1 u2, max u1 u2} α (Matrix.{u1, u1, u2} n n α) (Matrix.{u1, u1, u2} n n α) (instHSMul.{u2, max u1 u2} α (Matrix.{u1, u1, u2} n n α) (Matrix.smul.{u2, u1, u1, u2} n n α α (Algebra.toSMul.{u2, u2} α α (CommRing.toCommSemiring.{u2} α _inst_3) (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (Algebra.id.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) (Ring.inverse.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) (Matrix.adjugate.{u1, u2} n α (fun (a : n) (b : n) => _inst_2 a b) _inst_1 _inst_3 A))
 Case conversion may be inaccurate. Consider using '#align matrix.inv_def Matrix.inv_defₓ'. -/
 theorem inv_def (A : Matrix n n α) : A⁻¹ = Ring.inverse A.det • A.adjugate :=
   rfl
@@ -455,7 +455,7 @@ theorem inv_def (A : Matrix n n α) : A⁻¹ = Ring.inverse A.det • A.adjugate
 lean 3 declaration is
   forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), (Not (IsUnit.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A))) -> (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 0 (OfNat.mk.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 0 (Zero.zero.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasZero.{u2, u1, u1} n n α (MulZeroClass.toHasZero.{u2} α (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))))))))
 but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), (Not (IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A))) -> (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 0 (Zero.toOfNat0.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.zero.{u2, u1, u1} n n α (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))))))
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), (Not (IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A))) -> (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 0 (Zero.toOfNat0.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.zero.{u2, u1, u1} n n α (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))))))
 Case conversion may be inaccurate. Consider using '#align matrix.nonsing_inv_apply_not_is_unit Matrix.nonsing_inv_apply_not_isUnitₓ'. -/
 theorem nonsing_inv_apply_not_isUnit (h : ¬IsUnit A.det) : A⁻¹ = 0 := by
   rw [inv_def, Ring.inverse_non_unit _ h, zero_smul]
@@ -465,7 +465,7 @@ theorem nonsing_inv_apply_not_isUnit (h : ¬IsUnit A.det) : A⁻¹ = 0 := by
 lean 3 declaration is
   forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (h : IsUnit.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)), Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) (SMul.smul.{u2, max u1 u2} α (Matrix.{u1, u1, u2} n n α) (Matrix.hasSmul.{u2, u1, u1, u2} n n α α (Mul.toSMul.{u2} α (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))))) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (Units.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3))) α (HasLiftT.mk.{succ u2, succ u2} (Units.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3))) α (CoeTCₓ.coe.{succ u2, succ u2} (Units.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3))) α (coeBase.{succ u2, succ u2} (Units.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3))) α (Units.hasCoe.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Inv.inv.{u2} (Units.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3))) (Units.hasInv.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3))) (IsUnit.unit.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A) h))) (Matrix.adjugate.{u1, u2} n α (fun (a : n) (b : n) => _inst_2 a b) _inst_1 _inst_3 A))
 but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (h : IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)), Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) (HSMul.hSMul.{u2, max u1 u2, max u1 u2} α (Matrix.{u1, u1, u2} n n α) (Matrix.{u1, u1, u2} n n α) (instHSMul.{u2, max u1 u2} α (Matrix.{u1, u1, u2} n n α) (Matrix.smul.{u2, u1, u1, u2} n n α α (Algebra.toSMul.{u2, u2} α α (CommRing.toCommSemiring.{u2} α _inst_3) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Algebra.id.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) (Units.val.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Inv.inv.{u2} (Units.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Units.instInv.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (IsUnit.unit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A) h))) (Matrix.adjugate.{u1, u2} n α (fun (a : n) (b : n) => _inst_2 a b) _inst_1 _inst_3 A))
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (h : IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)), Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) (HSMul.hSMul.{u2, max u1 u2, max u1 u2} α (Matrix.{u1, u1, u2} n n α) (Matrix.{u1, u1, u2} n n α) (instHSMul.{u2, max u1 u2} α (Matrix.{u1, u1, u2} n n α) (Matrix.smul.{u2, u1, u1, u2} n n α α (Algebra.toSMul.{u2, u2} α α (CommRing.toCommSemiring.{u2} α _inst_3) (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (Algebra.id.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) (Units.val.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Inv.inv.{u2} (Units.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) (Units.instInv.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) (IsUnit.unit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A) h))) (Matrix.adjugate.{u1, u2} n α (fun (a : n) (b : n) => _inst_2 a b) _inst_1 _inst_3 A))
 Case conversion may be inaccurate. Consider using '#align matrix.nonsing_inv_apply Matrix.nonsing_inv_applyₓ'. -/
 theorem nonsing_inv_apply (h : IsUnit A.det) : A⁻¹ = (↑h.Unit⁻¹ : α) • A.adjugate := by
   rw [inv_def, ← Ring.inverse_unit h.unit, IsUnit.unit_spec]
@@ -475,7 +475,7 @@ theorem nonsing_inv_apply (h : IsUnit A.det) : A⁻¹ = (↑h.Unit⁻¹ : α) 
 lean 3 declaration is
   forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasMul.{u2, u1} n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) A], Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Invertible.invOf.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasMul.{u2, u1} n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) A _inst_4) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)
 but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) A], Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Invertible.invOf.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) A _inst_4) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) A], Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Invertible.invOf.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) A _inst_4) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)
 Case conversion may be inaccurate. Consider using '#align matrix.inv_of_eq_nonsing_inv Matrix.invOf_eq_nonsing_invₓ'. -/
 /-- The nonsingular inverse is the same as `inv_of` when `A` is invertible. -/
 @[simp]
@@ -489,7 +489,7 @@ theorem invOf_eq_nonsing_inv [Invertible A] : ⅟ A = A⁻¹ :=
 lean 3 declaration is
   forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Units.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Ring.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.ring.{u2, u1} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toRing.{u2} α _inst_3)))), Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) ((fun (a : Type.{max u1 u2}) (b : Type.{max u1 u2}) [self : HasLiftT.{succ (max u1 u2), succ (max u1 u2)} a b] => self.0) (Units.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Ring.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.ring.{u2, u1} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toRing.{u2} α _inst_3)))) (Matrix.{u1, u1, u2} n n α) (HasLiftT.mk.{succ (max u1 u2), succ (max u1 u2)} (Units.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Ring.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.ring.{u2, u1} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toRing.{u2} α _inst_3)))) (Matrix.{u1, u1, u2} n n α) (CoeTCₓ.coe.{succ (max u1 u2), succ (max u1 u2)} (Units.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Ring.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.ring.{u2, u1} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toRing.{u2} α _inst_3)))) (Matrix.{u1, u1, u2} n n α) (coeBase.{succ (max u1 u2), succ (max u1 u2)} (Units.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Ring.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.ring.{u2, u1} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toRing.{u2} α _inst_3)))) (Matrix.{u1, u1, u2} n n α) (Units.hasCoe.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Ring.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.ring.{u2, u1} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toRing.{u2} α _inst_3))))))) (Inv.inv.{max u1 u2} (Units.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Ring.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.ring.{u2, u1} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toRing.{u2} α _inst_3)))) (Units.hasInv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Ring.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.ring.{u2, u1} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toRing.{u2} α _inst_3)))) A)) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) ((fun (a : Type.{max u1 u2}) (b : Type.{max u1 u2}) [self : HasLiftT.{succ (max u1 u2), succ (max u1 u2)} a b] => self.0) (Units.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Ring.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.ring.{u2, u1} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toRing.{u2} α _inst_3)))) (Matrix.{u1, u1, u2} n n α) (HasLiftT.mk.{succ (max u1 u2), succ (max u1 u2)} (Units.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Ring.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.ring.{u2, u1} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toRing.{u2} α _inst_3)))) (Matrix.{u1, u1, u2} n n α) (CoeTCₓ.coe.{succ (max u1 u2), succ (max u1 u2)} (Units.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Ring.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.ring.{u2, u1} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toRing.{u2} α _inst_3)))) (Matrix.{u1, u1, u2} n n α) (coeBase.{succ (max u1 u2), succ (max u1 u2)} (Units.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Ring.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.ring.{u2, u1} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toRing.{u2} α _inst_3)))) (Matrix.{u1, u1, u2} n n α) (Units.hasCoe.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Ring.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.ring.{u2, u1} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toRing.{u2} α _inst_3))))))) A))
 but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Units.{max u2 u1} (Matrix.{u1, u1, u2} n n α) (MonoidWithZero.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Semiring.toMonoidWithZero.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.semiring.{u2, u1} n α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) _inst_1 (fun (a : n) (b : n) => _inst_2 a b))))), Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Units.val.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (MonoidWithZero.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Semiring.toMonoidWithZero.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.semiring.{u2, u1} n α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) _inst_1 (fun (a : n) (b : n) => _inst_2 a b)))) (Inv.inv.{max u1 u2} (Units.{max u2 u1} (Matrix.{u1, u1, u2} n n α) (MonoidWithZero.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Semiring.toMonoidWithZero.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.semiring.{u2, u1} n α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) _inst_1 (fun (a : n) (b : n) => _inst_2 a b))))) (Units.instInv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (MonoidWithZero.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Semiring.toMonoidWithZero.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.semiring.{u2, u1} n α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) _inst_1 (fun (a : n) (b : n) => _inst_2 a b))))) A)) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) (Units.val.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (MonoidWithZero.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Semiring.toMonoidWithZero.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.semiring.{u2, u1} n α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) _inst_1 (fun (a : n) (b : n) => _inst_2 a b)))) A))
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Units.{max u2 u1} (Matrix.{u1, u1, u2} n n α) (MonoidWithZero.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Semiring.toMonoidWithZero.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.semiring.{u2, u1} n α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) _inst_1 (fun (a : n) (b : n) => _inst_2 a b))))), Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Units.val.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (MonoidWithZero.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Semiring.toMonoidWithZero.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.semiring.{u2, u1} n α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) _inst_1 (fun (a : n) (b : n) => _inst_2 a b)))) (Inv.inv.{max u1 u2} (Units.{max u2 u1} (Matrix.{u1, u1, u2} n n α) (MonoidWithZero.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Semiring.toMonoidWithZero.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.semiring.{u2, u1} n α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) _inst_1 (fun (a : n) (b : n) => _inst_2 a b))))) (Units.instInv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (MonoidWithZero.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Semiring.toMonoidWithZero.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.semiring.{u2, u1} n α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) _inst_1 (fun (a : n) (b : n) => _inst_2 a b))))) A)) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) (Units.val.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (MonoidWithZero.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Semiring.toMonoidWithZero.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.semiring.{u2, u1} n α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) _inst_1 (fun (a : n) (b : n) => _inst_2 a b)))) A))
 Case conversion may be inaccurate. Consider using '#align matrix.coe_units_inv Matrix.coe_units_invₓ'. -/
 /-- Coercing the result of `units.has_inv` is the same as coercing first and applying the
 nonsingular inverse. -/
@@ -504,7 +504,7 @@ theorem coe_units_inv (A : (Matrix n n α)ˣ) : ↑A⁻¹ = (A⁻¹ : Matrix n n
 lean 3 declaration is
   forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) (Ring.inverse.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Semiring.toMonoidWithZero.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.semiring.{u2, u1} n α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) _inst_1 (fun (a : n) (b : n) => _inst_2 a b))) A)
 but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) (Ring.inverse.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Semiring.toMonoidWithZero.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.semiring.{u2, u1} n α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) _inst_1 (fun (a : n) (b : n) => _inst_2 a b))) A)
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) (Ring.inverse.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Semiring.toMonoidWithZero.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.semiring.{u2, u1} n α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) _inst_1 (fun (a : n) (b : n) => _inst_2 a b))) A)
 Case conversion may be inaccurate. Consider using '#align matrix.nonsing_inv_eq_ring_inverse Matrix.nonsing_inv_eq_ring_inverseₓ'. -/
 /-- The nonsingular inverse is the same as the general `ring.inverse`. -/
 theorem nonsing_inv_eq_ring_inverse : A⁻¹ = Ring.inverse A :=
@@ -530,7 +530,7 @@ theorem transpose_nonsing_inv : A⁻¹ᵀ = Aᵀ⁻¹ := by
 lean 3 declaration is
   forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : StarRing.{u2} α (NonUnitalRing.toNonUnitalSemiring.{u2} α (NonUnitalCommRing.toNonUnitalRing.{u2} α (CommRing.toNonUnitalCommRing.{u2} α _inst_3)))], Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.conjTranspose.{u2, u1, u1} n n α (InvolutiveStar.toHasStar.{u2} α (StarAddMonoid.toHasInvolutiveStar.{u2} α (AddCommMonoid.toAddMonoid.{u2} α (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalSemiring.toNonUnitalNonAssocSemiring.{u2} α (NonUnitalRing.toNonUnitalSemiring.{u2} α (NonUnitalCommRing.toNonUnitalRing.{u2} α (CommRing.toNonUnitalCommRing.{u2} α _inst_3)))))) (StarRing.toStarAddMonoid.{u2} α (NonUnitalRing.toNonUnitalSemiring.{u2} α (NonUnitalCommRing.toNonUnitalRing.{u2} α (CommRing.toNonUnitalCommRing.{u2} α _inst_3))) _inst_4))) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) (Matrix.conjTranspose.{u2, u1, u1} n n α (InvolutiveStar.toHasStar.{u2} α (StarAddMonoid.toHasInvolutiveStar.{u2} α (AddCommMonoid.toAddMonoid.{u2} α (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalSemiring.toNonUnitalNonAssocSemiring.{u2} α (NonUnitalRing.toNonUnitalSemiring.{u2} α (NonUnitalCommRing.toNonUnitalRing.{u2} α (CommRing.toNonUnitalCommRing.{u2} α _inst_3)))))) (StarRing.toStarAddMonoid.{u2} α (NonUnitalRing.toNonUnitalSemiring.{u2} α (NonUnitalCommRing.toNonUnitalRing.{u2} α (CommRing.toNonUnitalCommRing.{u2} α _inst_3))) _inst_4))) A))
 but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : StarRing.{u2} α (NonUnitalRing.toNonUnitalSemiring.{u2} α (NonUnitalCommRing.toNonUnitalRing.{u2} α (CommRing.toNonUnitalCommRing.{u2} α _inst_3)))], Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.conjTranspose.{u2, u1, u1} n n α (InvolutiveStar.toStar.{u2} α (StarAddMonoid.toInvolutiveStar.{u2} α (AddMonoidWithOne.toAddMonoid.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (Ring.toAddGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (StarRing.toStarAddMonoid.{u2} α (NonUnitalRing.toNonUnitalSemiring.{u2} α (NonUnitalCommRing.toNonUnitalRing.{u2} α (CommRing.toNonUnitalCommRing.{u2} α _inst_3))) _inst_4))) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) (Matrix.conjTranspose.{u2, u1, u1} n n α (InvolutiveStar.toStar.{u2} α (StarAddMonoid.toInvolutiveStar.{u2} α (AddMonoidWithOne.toAddMonoid.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (Ring.toAddGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (StarRing.toStarAddMonoid.{u2} α (NonUnitalRing.toNonUnitalSemiring.{u2} α (NonUnitalCommRing.toNonUnitalRing.{u2} α (CommRing.toNonUnitalCommRing.{u2} α _inst_3))) _inst_4))) A))
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : StarRing.{u2} α (NonUnitalCommSemiring.toNonUnitalSemiring.{u2} α (NonUnitalCommRing.toNonUnitalCommSemiring.{u2} α (CommRing.toNonUnitalCommRing.{u2} α _inst_3)))], Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.conjTranspose.{u2, u1, u1} n n α (InvolutiveStar.toStar.{u2} α (StarAddMonoid.toInvolutiveStar.{u2} α (AddMonoidWithOne.toAddMonoid.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (Ring.toAddGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (StarRing.toStarAddMonoid.{u2} α (NonUnitalCommSemiring.toNonUnitalSemiring.{u2} α (NonUnitalCommRing.toNonUnitalCommSemiring.{u2} α (CommRing.toNonUnitalCommRing.{u2} α _inst_3))) _inst_4))) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) (Matrix.conjTranspose.{u2, u1, u1} n n α (InvolutiveStar.toStar.{u2} α (StarAddMonoid.toInvolutiveStar.{u2} α (AddMonoidWithOne.toAddMonoid.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (Ring.toAddGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (StarRing.toStarAddMonoid.{u2} α (NonUnitalCommSemiring.toNonUnitalSemiring.{u2} α (NonUnitalCommRing.toNonUnitalCommSemiring.{u2} α (CommRing.toNonUnitalCommRing.{u2} α _inst_3))) _inst_4))) A))
 Case conversion may be inaccurate. Consider using '#align matrix.conj_transpose_nonsing_inv Matrix.conjTranspose_nonsing_invₓ'. -/
 theorem conjTranspose_nonsing_inv [StarRing α] : A⁻¹ᴴ = Aᴴ⁻¹ := by
   rw [inv_def, inv_def, conj_transpose_smul, det_conj_transpose, adjugate_conj_transpose,
@@ -541,7 +541,7 @@ theorem conjTranspose_nonsing_inv [StarRing α] : A⁻¹ᴴ = Aᴴ⁻¹ := by
 lean 3 declaration is
   forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), (IsUnit.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (OfNat.mk.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.one.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3))))))))))
 but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), (IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))))
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), (IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))))))
 Case conversion may be inaccurate. Consider using '#align matrix.mul_nonsing_inv Matrix.mul_nonsing_invₓ'. -/
 /-- The `nonsing_inv` of `A` is a right inverse. -/
 @[simp]
@@ -555,7 +555,7 @@ theorem mul_nonsing_inv (h : IsUnit A.det) : A ⬝ A⁻¹ = 1 :=
 lean 3 declaration is
   forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), (IsUnit.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (OfNat.mk.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.one.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3))))))))))
 but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), (IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))))
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), (IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))))))
 Case conversion may be inaccurate. Consider using '#align matrix.nonsing_inv_mul Matrix.nonsing_inv_mulₓ'. -/
 /-- The `nonsing_inv` of `A` is a left inverse. -/
 @[simp]
@@ -574,7 +574,7 @@ instance [Invertible A] : Invertible A⁻¹ :=
 lean 3 declaration is
   forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasMul.{u2, u1} n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) A], Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)) A
 but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) A], Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)) A
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) A], Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)) A
 Case conversion may be inaccurate. Consider using '#align matrix.inv_inv_of_invertible Matrix.inv_inv_of_invertibleₓ'. -/
 @[simp]
 theorem inv_inv_of_invertible [Invertible A] : A⁻¹⁻¹ = A := by
@@ -585,7 +585,7 @@ theorem inv_inv_of_invertible [Invertible A] : A⁻¹⁻¹ = A := by
 lean 3 declaration is
   forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] (A : Matrix.{u2, u2, u3} n n α) (B : Matrix.{u1, u2, u3} m n α), (IsUnit.{u3} α (Ring.toMonoid.{u3} α (CommRing.toRing.{u3} α _inst_3)) (Matrix.det.{u3, u2} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{succ (max u1 u2 u3)} (Matrix.{u1, u2, u3} m n α) (Matrix.mul.{u3, u1, u2, u2} m n n α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) (Matrix.mul.{u3, u1, u2, u2} m n n α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) B A) (Inv.inv.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.hasInv.{u2, u3} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)) B)
 but is expected to have type
-  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] (A : Matrix.{u2, u2, u3} n n α) (B : Matrix.{u1, u2, u3} m n α), (IsUnit.{u3} α (MonoidWithZero.toMonoid.{u3} α (Semiring.toMonoidWithZero.{u3} α (Ring.toSemiring.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (Matrix.det.{u3, u2} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{max (max (succ u1) (succ u2)) (succ u3)} (Matrix.{u1, u2, u3} m n α) (Matrix.mul.{u3, u1, u2, u2} m n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) (Matrix.mul.{u3, u1, u2, u2} m n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) B A) (Inv.inv.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.inv.{u2, u3} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)) B)
+  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] (A : Matrix.{u2, u2, u3} n n α) (B : Matrix.{u1, u2, u3} m n α), (IsUnit.{u3} α (MonoidWithZero.toMonoid.{u3} α (Semiring.toMonoidWithZero.{u3} α (CommSemiring.toSemiring.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3)))) (Matrix.det.{u3, u2} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{max (max (succ u1) (succ u2)) (succ u3)} (Matrix.{u1, u2, u3} m n α) (Matrix.mul.{u3, u1, u2, u2} m n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) (Matrix.mul.{u3, u1, u2, u2} m n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) B A) (Inv.inv.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.inv.{u2, u3} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)) B)
 Case conversion may be inaccurate. Consider using '#align matrix.mul_nonsing_inv_cancel_right Matrix.mul_nonsing_inv_cancel_rightₓ'. -/
 @[simp]
 theorem mul_nonsing_inv_cancel_right (B : Matrix m n α) (h : IsUnit A.det) : B ⬝ A ⬝ A⁻¹ = B := by
@@ -596,7 +596,7 @@ theorem mul_nonsing_inv_cancel_right (B : Matrix m n α) (h : IsUnit A.det) : B
 lean 3 declaration is
   forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] (A : Matrix.{u2, u2, u3} n n α) (B : Matrix.{u2, u1, u3} n m α), (IsUnit.{u3} α (Ring.toMonoid.{u3} α (CommRing.toRing.{u3} α _inst_3)) (Matrix.det.{u3, u2} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{succ (max u2 u1 u3)} (Matrix.{u2, u1, u3} n m α) (Matrix.mul.{u3, u2, u2, u1} n n m α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) A (Matrix.mul.{u3, u2, u2, u1} n n m α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) (Inv.inv.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.hasInv.{u2, u3} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) B)) B)
 but is expected to have type
-  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] (A : Matrix.{u2, u2, u3} n n α) (B : Matrix.{u2, u1, u3} n m α), (IsUnit.{u3} α (MonoidWithZero.toMonoid.{u3} α (Semiring.toMonoidWithZero.{u3} α (Ring.toSemiring.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (Matrix.det.{u3, u2} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{max (max (succ u1) (succ u2)) (succ u3)} (Matrix.{u2, u1, u3} n m α) (Matrix.mul.{u3, u2, u2, u1} n n m α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) A (Matrix.mul.{u3, u2, u2, u1} n n m α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) (Inv.inv.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.inv.{u2, u3} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) B)) B)
+  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] (A : Matrix.{u2, u2, u3} n n α) (B : Matrix.{u2, u1, u3} n m α), (IsUnit.{u3} α (MonoidWithZero.toMonoid.{u3} α (Semiring.toMonoidWithZero.{u3} α (CommSemiring.toSemiring.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3)))) (Matrix.det.{u3, u2} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{max (max (succ u1) (succ u2)) (succ u3)} (Matrix.{u2, u1, u3} n m α) (Matrix.mul.{u3, u2, u2, u1} n n m α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) A (Matrix.mul.{u3, u2, u2, u1} n n m α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) (Inv.inv.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.inv.{u2, u3} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) B)) B)
 Case conversion may be inaccurate. Consider using '#align matrix.mul_nonsing_inv_cancel_left Matrix.mul_nonsing_inv_cancel_leftₓ'. -/
 @[simp]
 theorem mul_nonsing_inv_cancel_left (B : Matrix n m α) (h : IsUnit A.det) : A ⬝ (A⁻¹ ⬝ B) = B := by
@@ -607,7 +607,7 @@ theorem mul_nonsing_inv_cancel_left (B : Matrix n m α) (h : IsUnit A.det) : A 
 lean 3 declaration is
   forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] (A : Matrix.{u2, u2, u3} n n α) (B : Matrix.{u1, u2, u3} m n α), (IsUnit.{u3} α (Ring.toMonoid.{u3} α (CommRing.toRing.{u3} α _inst_3)) (Matrix.det.{u3, u2} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{succ (max u1 u2 u3)} (Matrix.{u1, u2, u3} m n α) (Matrix.mul.{u3, u1, u2, u2} m n n α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) (Matrix.mul.{u3, u1, u2, u2} m n n α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) B (Inv.inv.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.hasInv.{u2, u3} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)) A) B)
 but is expected to have type
-  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] (A : Matrix.{u2, u2, u3} n n α) (B : Matrix.{u1, u2, u3} m n α), (IsUnit.{u3} α (MonoidWithZero.toMonoid.{u3} α (Semiring.toMonoidWithZero.{u3} α (Ring.toSemiring.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (Matrix.det.{u3, u2} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{max (max (succ u1) (succ u2)) (succ u3)} (Matrix.{u1, u2, u3} m n α) (Matrix.mul.{u3, u1, u2, u2} m n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) (Matrix.mul.{u3, u1, u2, u2} m n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) B (Inv.inv.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.inv.{u2, u3} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)) A) B)
+  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] (A : Matrix.{u2, u2, u3} n n α) (B : Matrix.{u1, u2, u3} m n α), (IsUnit.{u3} α (MonoidWithZero.toMonoid.{u3} α (Semiring.toMonoidWithZero.{u3} α (CommSemiring.toSemiring.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3)))) (Matrix.det.{u3, u2} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{max (max (succ u1) (succ u2)) (succ u3)} (Matrix.{u1, u2, u3} m n α) (Matrix.mul.{u3, u1, u2, u2} m n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) (Matrix.mul.{u3, u1, u2, u2} m n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) B (Inv.inv.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.inv.{u2, u3} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)) A) B)
 Case conversion may be inaccurate. Consider using '#align matrix.nonsing_inv_mul_cancel_right Matrix.nonsing_inv_mul_cancel_rightₓ'. -/
 @[simp]
 theorem nonsing_inv_mul_cancel_right (B : Matrix m n α) (h : IsUnit A.det) : B ⬝ A⁻¹ ⬝ A = B := by
@@ -618,7 +618,7 @@ theorem nonsing_inv_mul_cancel_right (B : Matrix m n α) (h : IsUnit A.det) : B
 lean 3 declaration is
   forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] (A : Matrix.{u2, u2, u3} n n α) (B : Matrix.{u2, u1, u3} n m α), (IsUnit.{u3} α (Ring.toMonoid.{u3} α (CommRing.toRing.{u3} α _inst_3)) (Matrix.det.{u3, u2} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{succ (max u2 u1 u3)} (Matrix.{u2, u1, u3} n m α) (Matrix.mul.{u3, u2, u2, u1} n n m α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) (Inv.inv.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.hasInv.{u2, u3} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) (Matrix.mul.{u3, u2, u2, u1} n n m α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) A B)) B)
 but is expected to have type
-  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] (A : Matrix.{u2, u2, u3} n n α) (B : Matrix.{u2, u1, u3} n m α), (IsUnit.{u3} α (MonoidWithZero.toMonoid.{u3} α (Semiring.toMonoidWithZero.{u3} α (Ring.toSemiring.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (Matrix.det.{u3, u2} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{max (max (succ u1) (succ u2)) (succ u3)} (Matrix.{u2, u1, u3} n m α) (Matrix.mul.{u3, u2, u2, u1} n n m α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) (Inv.inv.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.inv.{u2, u3} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) (Matrix.mul.{u3, u2, u2, u1} n n m α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) A B)) B)
+  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] (A : Matrix.{u2, u2, u3} n n α) (B : Matrix.{u2, u1, u3} n m α), (IsUnit.{u3} α (MonoidWithZero.toMonoid.{u3} α (Semiring.toMonoidWithZero.{u3} α (CommSemiring.toSemiring.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3)))) (Matrix.det.{u3, u2} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{max (max (succ u1) (succ u2)) (succ u3)} (Matrix.{u2, u1, u3} n m α) (Matrix.mul.{u3, u2, u2, u1} n n m α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) (Inv.inv.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.inv.{u2, u3} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) (Matrix.mul.{u3, u2, u2, u1} n n m α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) A B)) B)
 Case conversion may be inaccurate. Consider using '#align matrix.nonsing_inv_mul_cancel_left Matrix.nonsing_inv_mul_cancel_leftₓ'. -/
 @[simp]
 theorem nonsing_inv_mul_cancel_left (B : Matrix n m α) (h : IsUnit A.det) : A⁻¹ ⬝ (A ⬝ B) = B := by
@@ -629,7 +629,7 @@ theorem nonsing_inv_mul_cancel_left (B : Matrix n m α) (h : IsUnit A.det) : A
 lean 3 declaration is
   forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasMul.{u2, u1} n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) A], Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (OfNat.mk.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.one.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))))))
 but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) A], Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))))
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) A], Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))))
 Case conversion may be inaccurate. Consider using '#align matrix.mul_inv_of_invertible Matrix.mul_inv_of_invertibleₓ'. -/
 @[simp]
 theorem mul_inv_of_invertible [Invertible A] : A ⬝ A⁻¹ = 1 :=
@@ -640,7 +640,7 @@ theorem mul_inv_of_invertible [Invertible A] : A ⬝ A⁻¹ = 1 :=
 lean 3 declaration is
   forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasMul.{u2, u1} n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) A], Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (OfNat.mk.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.one.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))))))
 but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) A], Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))))
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) A], Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))))
 Case conversion may be inaccurate. Consider using '#align matrix.inv_mul_of_invertible Matrix.inv_mul_of_invertibleₓ'. -/
 @[simp]
 theorem inv_mul_of_invertible [Invertible A] : A⁻¹ ⬝ A = 1 :=
@@ -651,7 +651,7 @@ theorem inv_mul_of_invertible [Invertible A] : A⁻¹ ⬝ A = 1 :=
 lean 3 declaration is
   forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] (A : Matrix.{u2, u2, u3} n n α) (B : Matrix.{u1, u2, u3} m n α) [_inst_4 : Invertible.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.hasMul.{u3, u2} n α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.hasOne.{u3, u2} 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} α (CommRing.toRing.{u3} α _inst_3)))))) (AddMonoidWithOne.toOne.{u3} α (AddGroupWithOne.toAddMonoidWithOne.{u3} α (AddCommGroupWithOne.toAddGroupWithOne.{u3} α (Ring.toAddCommGroupWithOne.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) A], Eq.{succ (max u1 u2 u3)} (Matrix.{u1, u2, u3} m n α) (Matrix.mul.{u3, u1, u2, u2} m n n α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) (Matrix.mul.{u3, u1, u2, u2} m n n α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) B A) (Inv.inv.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.hasInv.{u2, u3} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)) B
 but is expected to have type
-  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] (A : Matrix.{u2, u2, u3} n n α) (B : Matrix.{u1, u2, u3} m n α) [_inst_4 : Invertible.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.instMulMatrix.{u3, u2} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u2} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (NonAssocRing.toOne.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) A], Eq.{max (max (succ u1) (succ u2)) (succ u3)} (Matrix.{u1, u2, u3} m n α) (Matrix.mul.{u3, u1, u2, u2} m n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) (Matrix.mul.{u3, u1, u2, u2} m n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) B A) (Inv.inv.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.inv.{u2, u3} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)) B
+  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] (A : Matrix.{u2, u2, u3} n n α) (B : Matrix.{u1, u2, u3} m n α) [_inst_4 : Invertible.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.instMulMatrix.{u3, u2} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u2} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (Semiring.toOne.{u3} α (CommSemiring.toSemiring.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3)))) A], Eq.{max (max (succ u1) (succ u2)) (succ u3)} (Matrix.{u1, u2, u3} m n α) (Matrix.mul.{u3, u1, u2, u2} m n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) (Matrix.mul.{u3, u1, u2, u2} m n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) B A) (Inv.inv.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.inv.{u2, u3} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)) B
 Case conversion may be inaccurate. Consider using '#align matrix.mul_inv_cancel_right_of_invertible Matrix.mul_inv_cancel_right_of_invertibleₓ'. -/
 @[simp]
 theorem mul_inv_cancel_right_of_invertible (B : Matrix m n α) [Invertible A] : B ⬝ A ⬝ A⁻¹ = B :=
@@ -662,7 +662,7 @@ theorem mul_inv_cancel_right_of_invertible (B : Matrix m n α) [Invertible A] :
 lean 3 declaration is
   forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] (A : Matrix.{u2, u2, u3} n n α) (B : Matrix.{u2, u1, u3} n m α) [_inst_4 : Invertible.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.hasMul.{u3, u2} n α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.hasOne.{u3, u2} 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} α (CommRing.toRing.{u3} α _inst_3)))))) (AddMonoidWithOne.toOne.{u3} α (AddGroupWithOne.toAddMonoidWithOne.{u3} α (AddCommGroupWithOne.toAddGroupWithOne.{u3} α (Ring.toAddCommGroupWithOne.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) A], Eq.{succ (max u2 u1 u3)} (Matrix.{u2, u1, u3} n m α) (Matrix.mul.{u3, u2, u2, u1} n n m α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) A (Matrix.mul.{u3, u2, u2, u1} n n m α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) (Inv.inv.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.hasInv.{u2, u3} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) B)) B
 but is expected to have type
-  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] (A : Matrix.{u2, u2, u3} n n α) (B : Matrix.{u2, u1, u3} n m α) [_inst_4 : Invertible.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.instMulMatrix.{u3, u2} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u2} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (NonAssocRing.toOne.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) A], Eq.{max (max (succ u1) (succ u2)) (succ u3)} (Matrix.{u2, u1, u3} n m α) (Matrix.mul.{u3, u2, u2, u1} n n m α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) A (Matrix.mul.{u3, u2, u2, u1} n n m α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) (Inv.inv.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.inv.{u2, u3} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) B)) B
+  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] (A : Matrix.{u2, u2, u3} n n α) (B : Matrix.{u2, u1, u3} n m α) [_inst_4 : Invertible.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.instMulMatrix.{u3, u2} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u2} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (Semiring.toOne.{u3} α (CommSemiring.toSemiring.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3)))) A], Eq.{max (max (succ u1) (succ u2)) (succ u3)} (Matrix.{u2, u1, u3} n m α) (Matrix.mul.{u3, u2, u2, u1} n n m α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) A (Matrix.mul.{u3, u2, u2, u1} n n m α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) (Inv.inv.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.inv.{u2, u3} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) B)) B
 Case conversion may be inaccurate. Consider using '#align matrix.mul_inv_cancel_left_of_invertible Matrix.mul_inv_cancel_left_of_invertibleₓ'. -/
 @[simp]
 theorem mul_inv_cancel_left_of_invertible (B : Matrix n m α) [Invertible A] : A ⬝ (A⁻¹ ⬝ B) = B :=
@@ -673,7 +673,7 @@ theorem mul_inv_cancel_left_of_invertible (B : Matrix n m α) [Invertible A] : A
 lean 3 declaration is
   forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] (A : Matrix.{u2, u2, u3} n n α) (B : Matrix.{u1, u2, u3} m n α) [_inst_4 : Invertible.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.hasMul.{u3, u2} n α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.hasOne.{u3, u2} 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} α (CommRing.toRing.{u3} α _inst_3)))))) (AddMonoidWithOne.toOne.{u3} α (AddGroupWithOne.toAddMonoidWithOne.{u3} α (AddCommGroupWithOne.toAddGroupWithOne.{u3} α (Ring.toAddCommGroupWithOne.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) A], Eq.{succ (max u1 u2 u3)} (Matrix.{u1, u2, u3} m n α) (Matrix.mul.{u3, u1, u2, u2} m n n α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) (Matrix.mul.{u3, u1, u2, u2} m n n α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) B (Inv.inv.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.hasInv.{u2, u3} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)) A) B
 but is expected to have type
-  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] (A : Matrix.{u2, u2, u3} n n α) (B : Matrix.{u1, u2, u3} m n α) [_inst_4 : Invertible.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.instMulMatrix.{u3, u2} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u2} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (NonAssocRing.toOne.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) A], Eq.{max (max (succ u1) (succ u2)) (succ u3)} (Matrix.{u1, u2, u3} m n α) (Matrix.mul.{u3, u1, u2, u2} m n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) (Matrix.mul.{u3, u1, u2, u2} m n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) B (Inv.inv.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.inv.{u2, u3} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)) A) B
+  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] (A : Matrix.{u2, u2, u3} n n α) (B : Matrix.{u1, u2, u3} m n α) [_inst_4 : Invertible.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.instMulMatrix.{u3, u2} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u2} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (Semiring.toOne.{u3} α (CommSemiring.toSemiring.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3)))) A], Eq.{max (max (succ u1) (succ u2)) (succ u3)} (Matrix.{u1, u2, u3} m n α) (Matrix.mul.{u3, u1, u2, u2} m n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) (Matrix.mul.{u3, u1, u2, u2} m n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) B (Inv.inv.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.inv.{u2, u3} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)) A) B
 Case conversion may be inaccurate. Consider using '#align matrix.inv_mul_cancel_right_of_invertible Matrix.inv_mul_cancel_right_of_invertibleₓ'. -/
 @[simp]
 theorem inv_mul_cancel_right_of_invertible (B : Matrix m n α) [Invertible A] : B ⬝ A⁻¹ ⬝ A = B :=
@@ -684,7 +684,7 @@ theorem inv_mul_cancel_right_of_invertible (B : Matrix m n α) [Invertible A] :
 lean 3 declaration is
   forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] (A : Matrix.{u2, u2, u3} n n α) (B : Matrix.{u2, u1, u3} n m α) [_inst_4 : Invertible.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.hasMul.{u3, u2} n α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.hasOne.{u3, u2} 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} α (CommRing.toRing.{u3} α _inst_3)))))) (AddMonoidWithOne.toOne.{u3} α (AddGroupWithOne.toAddMonoidWithOne.{u3} α (AddCommGroupWithOne.toAddGroupWithOne.{u3} α (Ring.toAddCommGroupWithOne.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) A], Eq.{succ (max u2 u1 u3)} (Matrix.{u2, u1, u3} n m α) (Matrix.mul.{u3, u2, u2, u1} n n m α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) (Inv.inv.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.hasInv.{u2, u3} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) (Matrix.mul.{u3, u2, u2, u1} n n m α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) A B)) B
 but is expected to have type
-  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] (A : Matrix.{u2, u2, u3} n n α) (B : Matrix.{u2, u1, u3} n m α) [_inst_4 : Invertible.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.instMulMatrix.{u3, u2} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u2} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (NonAssocRing.toOne.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) A], Eq.{max (max (succ u1) (succ u2)) (succ u3)} (Matrix.{u2, u1, u3} n m α) (Matrix.mul.{u3, u2, u2, u1} n n m α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) (Inv.inv.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.inv.{u2, u3} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) (Matrix.mul.{u3, u2, u2, u1} n n m α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) A B)) B
+  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] (A : Matrix.{u2, u2, u3} n n α) (B : Matrix.{u2, u1, u3} n m α) [_inst_4 : Invertible.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.instMulMatrix.{u3, u2} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u2} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (Semiring.toOne.{u3} α (CommSemiring.toSemiring.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3)))) A], Eq.{max (max (succ u1) (succ u2)) (succ u3)} (Matrix.{u2, u1, u3} n m α) (Matrix.mul.{u3, u2, u2, u1} n n m α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) (Inv.inv.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.inv.{u2, u3} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) (Matrix.mul.{u3, u2, u2, u1} n n m α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) A B)) B
 Case conversion may be inaccurate. Consider using '#align matrix.inv_mul_cancel_left_of_invertible Matrix.inv_mul_cancel_left_of_invertibleₓ'. -/
 @[simp]
 theorem inv_mul_cancel_left_of_invertible (B : Matrix n m α) [Invertible A] : A⁻¹ ⬝ (A ⬝ B) = B :=
@@ -695,7 +695,7 @@ theorem inv_mul_cancel_left_of_invertible (B : Matrix n m α) [Invertible A] : A
 lean 3 declaration is
   forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (B : Matrix.{u1, u1, u2} n n α) (C : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasMul.{u2, u1} n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) A], Iff (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) B) C) (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) B (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A C))
 but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (B : Matrix.{u1, u1, u2} n n α) (C : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) A], Iff (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) B) C) (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) B (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A C))
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (B : Matrix.{u1, u1, u2} n n α) (C : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) A], Iff (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) B) C) (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) B (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A C))
 Case conversion may be inaccurate. Consider using '#align matrix.inv_mul_eq_iff_eq_mul_of_invertible Matrix.inv_mul_eq_iff_eq_mul_of_invertibleₓ'. -/
 theorem inv_mul_eq_iff_eq_mul_of_invertible (A B C : Matrix n n α) [Invertible A] :
     A⁻¹ ⬝ B = C ↔ B = A ⬝ C :=
@@ -707,7 +707,7 @@ theorem inv_mul_eq_iff_eq_mul_of_invertible (A B C : Matrix n n α) [Invertible
 lean 3 declaration is
   forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (B : Matrix.{u1, u1, u2} n n α) (C : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasMul.{u2, u1} n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) A], Iff (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) B (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)) C) (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) B (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) C A))
 but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (B : Matrix.{u1, u1, u2} n n α) (C : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) A], Iff (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) B (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)) C) (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) B (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) C A))
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (B : Matrix.{u1, u1, u2} n n α) (C : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) A], Iff (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) B (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)) C) (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) B (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) C A))
 Case conversion may be inaccurate. Consider using '#align matrix.mul_inv_eq_iff_eq_mul_of_invertible Matrix.mul_inv_eq_iff_eq_mul_of_invertibleₓ'. -/
 theorem mul_inv_eq_iff_eq_mul_of_invertible (A B C : Matrix n n α) [Invertible A] :
     B ⬝ A⁻¹ = C ↔ B = C ⬝ A :=
@@ -719,7 +719,7 @@ theorem mul_inv_eq_iff_eq_mul_of_invertible (A B C : Matrix n n α) [Invertible
 lean 3 declaration is
   forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), Or (And (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (OfNat.mk.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.one.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))))))) (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (OfNat.mk.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.one.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3))))))))))) (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 0 (OfNat.mk.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 0 (Zero.zero.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasZero.{u2, u1, u1} n n α (MulZeroClass.toHasZero.{u2} α (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))))))))
 but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), Or (And (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))))) (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))))) (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 0 (Zero.toOfNat0.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.zero.{u2, u1, u1} n n α (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))))))
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), Or (And (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))))) (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))))))) (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 0 (Zero.toOfNat0.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.zero.{u2, u1, u1} n n α (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))))))
 Case conversion may be inaccurate. Consider using '#align matrix.nonsing_inv_cancel_or_zero Matrix.nonsing_inv_cancel_or_zeroₓ'. -/
 theorem nonsing_inv_cancel_or_zero : A⁻¹ ⬝ A = 1 ∧ A ⬝ A⁻¹ = 1 ∨ A⁻¹ = 0 :=
   by
@@ -732,7 +732,7 @@ theorem nonsing_inv_cancel_or_zero : A⁻¹ ⬝ A = 1 ∧ A ⬝ A⁻¹ = 1 ∨ A
 lean 3 declaration is
   forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), (IsUnit.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{succ u2} α (HMul.hMul.{u2, u2, u2} α α α (instHMul.{u2} α (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) (OfNat.ofNat.{u2} α 1 (OfNat.mk.{u2} α 1 (One.one.{u2} α (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))))))
 but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), (IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{succ u2} α (HMul.hMul.{u2, u2, u2} α α α (instHMul.{u2} α (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) (OfNat.ofNat.{u2} α 1 (One.toOfNat1.{u2} α (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))))
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), (IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{succ u2} α (HMul.hMul.{u2, u2, u2} α α α (instHMul.{u2} α (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) (OfNat.ofNat.{u2} α 1 (One.toOfNat1.{u2} α (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))))
 Case conversion may be inaccurate. Consider using '#align matrix.det_nonsing_inv_mul_det Matrix.det_nonsing_inv_mul_detₓ'. -/
 theorem det_nonsing_inv_mul_det (h : IsUnit A.det) : A⁻¹.det * A.det = 1 := by
   rw [← det_mul, A.nonsing_inv_mul h, det_one]
@@ -742,7 +742,7 @@ theorem det_nonsing_inv_mul_det (h : IsUnit A.det) : A⁻¹.det * A.det = 1 := b
 lean 3 declaration is
   forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), Eq.{succ u2} α (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)) (Ring.inverse.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A))
 but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), Eq.{succ u2} α (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)) (Ring.inverse.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A))
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), Eq.{succ u2} α (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)) (Ring.inverse.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A))
 Case conversion may be inaccurate. Consider using '#align matrix.det_nonsing_inv Matrix.det_nonsing_invₓ'. -/
 @[simp]
 theorem det_nonsing_inv : A⁻¹.det = Ring.inverse A.det :=
@@ -760,7 +760,7 @@ theorem det_nonsing_inv : A⁻¹.det = Ring.inverse A.det :=
 lean 3 declaration is
   forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), (IsUnit.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (IsUnit.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)))
 but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), (IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)))
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), (IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)))
 Case conversion may be inaccurate. Consider using '#align matrix.is_unit_nonsing_inv_det Matrix.isUnit_nonsing_inv_detₓ'. -/
 theorem isUnit_nonsing_inv_det (h : IsUnit A.det) : IsUnit A⁻¹.det :=
   isUnit_of_mul_eq_one _ _ (A.det_nonsing_inv_mul_det h)
@@ -770,7 +770,7 @@ theorem isUnit_nonsing_inv_det (h : IsUnit A.det) : IsUnit A⁻¹.det :=
 lean 3 declaration is
   forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), (IsUnit.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)) A)
 but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), (IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)) A)
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), (IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)) A)
 Case conversion may be inaccurate. Consider using '#align matrix.nonsing_inv_nonsing_inv Matrix.nonsing_inv_nonsing_invₓ'. -/
 @[simp]
 theorem nonsing_inv_nonsing_inv (h : IsUnit A.det) : A⁻¹⁻¹ = A :=
@@ -786,7 +786,7 @@ theorem nonsing_inv_nonsing_inv (h : IsUnit A.det) : A⁻¹⁻¹ = A :=
 lean 3 declaration is
   forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] {A : Matrix.{u1, u1, u2} n n α}, Iff (IsUnit.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A))) (IsUnit.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A))
 but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] {A : Matrix.{u1, u1, u2} n n α}, Iff (IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A))) (IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A))
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] {A : Matrix.{u1, u1, u2} n n α}, Iff (IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A))) (IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A))
 Case conversion may be inaccurate. Consider using '#align matrix.is_unit_nonsing_inv_det_iff Matrix.isUnit_nonsing_inv_det_iffₓ'. -/
 theorem isUnit_nonsing_inv_det_iff {A : Matrix n n α} : IsUnit A⁻¹.det ↔ IsUnit A.det := by
   rw [Matrix.det_nonsing_inv, isUnit_ring_inverse]
@@ -796,7 +796,7 @@ theorem isUnit_nonsing_inv_det_iff {A : Matrix n n α} : IsUnit A⁻¹.det ↔ I
 lean 3 declaration is
   forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), (IsUnit.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasMul.{u2, u1} n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) A)
 but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), (IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) A)
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), (IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) A)
 Case conversion may be inaccurate. Consider using '#align matrix.invertible_of_is_unit_det Matrix.invertibleOfIsUnitDetₓ'. -/
 -- `is_unit.invertible` lifts the proposition `is_unit A` to a constructive inverse of `A`.
 /-- A version of `matrix.invertible_of_det_invertible` with the inverse defeq to `A⁻¹` that is
@@ -809,7 +809,7 @@ noncomputable def invertibleOfIsUnitDet (h : IsUnit A.det) : Invertible A :=
 lean 3 declaration is
   forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), (IsUnit.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Units.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Ring.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.ring.{u2, u1} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toRing.{u2} α _inst_3))))
 but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), (IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Units.{max u2 u1} (Matrix.{u1, u1, u2} n n α) (MonoidWithZero.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Semiring.toMonoidWithZero.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.semiring.{u2, u1} n α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) _inst_1 (fun (a : n) (b : n) => _inst_2 a b)))))
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), (IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Units.{max u2 u1} (Matrix.{u1, u1, u2} n n α) (MonoidWithZero.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Semiring.toMonoidWithZero.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.semiring.{u2, u1} n α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) _inst_1 (fun (a : n) (b : n) => _inst_2 a b)))))
 Case conversion may be inaccurate. Consider using '#align matrix.nonsing_inv_unit Matrix.nonsingInvUnitₓ'. -/
 /-- A version of `matrix.units_of_det_invertible` with the inverse defeq to `A⁻¹` that is therefore
 noncomputable. -/
@@ -821,7 +821,7 @@ noncomputable def nonsingInvUnit (h : IsUnit A.det) : (Matrix n n α)ˣ :=
 lean 3 declaration is
   forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{u2} α (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)], Eq.{succ (max u1 u2)} (Units.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Ring.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.ring.{u2, u1} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toRing.{u2} α _inst_3)))) (Matrix.unitOfDetInvertible.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3 A _inst_4) (Matrix.nonsingInvUnit.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3 A (isUnit_of_invertible.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A) _inst_4))
 but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{u2} α (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)], Eq.{max (succ u1) (succ u2)} (Units.{max u2 u1} (Matrix.{u1, u1, u2} n n α) (MonoidWithZero.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Semiring.toMonoidWithZero.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.semiring.{u2, u1} n α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) _inst_1 (fun (a : n) (b : n) => _inst_2 a b))))) (Matrix.unitOfDetInvertible.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3 A _inst_4) (Matrix.nonsingInvUnit.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3 A (isUnit_of_invertible.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A) _inst_4))
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{u2} α (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)], Eq.{max (succ u1) (succ u2)} (Units.{max u2 u1} (Matrix.{u1, u1, u2} n n α) (MonoidWithZero.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Semiring.toMonoidWithZero.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.semiring.{u2, u1} n α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) _inst_1 (fun (a : n) (b : n) => _inst_2 a b))))) (Matrix.unitOfDetInvertible.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3 A _inst_4) (Matrix.nonsingInvUnit.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3 A (isUnit_of_invertible.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A) _inst_4))
 Case conversion may be inaccurate. Consider using '#align matrix.unit_of_det_invertible_eq_nonsing_inv_unit Matrix.unitOfDetInvertible_eq_nonsingInvUnitₓ'. -/
 theorem unitOfDetInvertible_eq_nonsingInvUnit [Invertible A.det] :
     unitOfDetInvertible A = nonsingInvUnit A (isUnit_of_invertible _) :=
@@ -836,7 +836,7 @@ variable {A} {B}
 lean 3 declaration is
   forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] {A : Matrix.{u1, u1, u2} n n α} {B : Matrix.{u1, u1, u2} n n α}, (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) B A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (OfNat.mk.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.one.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))))))) -> (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) B)
 but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] {A : Matrix.{u1, u1, u2} n n α} {B : Matrix.{u1, u1, u2} n n α}, (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) B A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))))) -> (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) B)
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] {A : Matrix.{u1, u1, u2} n n α} {B : Matrix.{u1, u1, u2} n n α}, (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) B A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))))) -> (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) B)
 Case conversion may be inaccurate. Consider using '#align matrix.inv_eq_left_inv Matrix.inv_eq_left_invₓ'. -/
 /-- If matrix A is left invertible, then its inverse equals its left inverse. -/
 theorem inv_eq_left_inv (h : B ⬝ A = 1) : A⁻¹ = B :=
@@ -848,7 +848,7 @@ theorem inv_eq_left_inv (h : B ⬝ A = 1) : A⁻¹ = B :=
 lean 3 declaration is
   forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] {A : Matrix.{u1, u1, u2} n n α} {B : Matrix.{u1, u1, u2} n n α}, (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A B) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (OfNat.mk.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.one.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))))))) -> (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) B)
 but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] {A : Matrix.{u1, u1, u2} n n α} {B : Matrix.{u1, u1, u2} n n α}, (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A B) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))))) -> (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) B)
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] {A : Matrix.{u1, u1, u2} n n α} {B : Matrix.{u1, u1, u2} n n α}, (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A B) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))))) -> (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) B)
 Case conversion may be inaccurate. Consider using '#align matrix.inv_eq_right_inv Matrix.inv_eq_right_invₓ'. -/
 /-- If matrix A is right invertible, then its inverse equals its right inverse. -/
 theorem inv_eq_right_inv (h : A ⬝ B = 1) : A⁻¹ = B :=
@@ -863,7 +863,7 @@ variable {C : Matrix n n α}
 lean 3 declaration is
   forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] {A : Matrix.{u1, u1, u2} n n α} {B : Matrix.{u1, u1, u2} n n α} {C : Matrix.{u1, u1, u2} n n α}, (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) B A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (OfNat.mk.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.one.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))))))) -> (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) C A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (OfNat.mk.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.one.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))))))) -> (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) B C)
 but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] {A : Matrix.{u1, u1, u2} n n α} {B : Matrix.{u1, u1, u2} n n α} {C : Matrix.{u1, u1, u2} n n α}, (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) B A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))))) -> (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) C A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))))) -> (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) B C)
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] {A : Matrix.{u1, u1, u2} n n α} {B : Matrix.{u1, u1, u2} n n α} {C : Matrix.{u1, u1, u2} n n α}, (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) B A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))))) -> (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) C A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))))) -> (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) B C)
 Case conversion may be inaccurate. Consider using '#align matrix.left_inv_eq_left_inv Matrix.left_inv_eq_left_invₓ'. -/
 /-- The left inverse of matrix A is unique when existing. -/
 theorem left_inv_eq_left_inv (h : B ⬝ A = 1) (g : C ⬝ A = 1) : B = C := by
@@ -874,7 +874,7 @@ theorem left_inv_eq_left_inv (h : B ⬝ A = 1) (g : C ⬝ A = 1) : B = C := by
 lean 3 declaration is
   forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] {A : Matrix.{u1, u1, u2} n n α} {B : Matrix.{u1, u1, u2} n n α} {C : Matrix.{u1, u1, u2} n n α}, (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A B) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (OfNat.mk.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.one.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))))))) -> (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A C) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (OfNat.mk.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.one.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))))))) -> (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) B C)
 but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] {A : Matrix.{u1, u1, u2} n n α} {B : Matrix.{u1, u1, u2} n n α} {C : Matrix.{u1, u1, u2} n n α}, (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A B) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))))) -> (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A C) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))))) -> (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) B C)
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] {A : Matrix.{u1, u1, u2} n n α} {B : Matrix.{u1, u1, u2} n n α} {C : Matrix.{u1, u1, u2} n n α}, (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A B) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))))) -> (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A C) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))))) -> (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) B C)
 Case conversion may be inaccurate. Consider using '#align matrix.right_inv_eq_right_inv Matrix.right_inv_eq_right_invₓ'. -/
 /-- The right inverse of matrix A is unique when existing. -/
 theorem right_inv_eq_right_inv (h : A ⬝ B = 1) (g : A ⬝ C = 1) : B = C := by
@@ -885,7 +885,7 @@ theorem right_inv_eq_right_inv (h : A ⬝ B = 1) (g : A ⬝ C = 1) : B = C := by
 lean 3 declaration is
   forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] {A : Matrix.{u1, u1, u2} n n α} {B : Matrix.{u1, u1, u2} n n α} {C : Matrix.{u1, u1, u2} n n α}, (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A B) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (OfNat.mk.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.one.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))))))) -> (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) C A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (OfNat.mk.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.one.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))))))) -> (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) B C)
 but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] {A : Matrix.{u1, u1, u2} n n α} {B : Matrix.{u1, u1, u2} n n α} {C : Matrix.{u1, u1, u2} n n α}, (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A B) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))))) -> (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) C A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))))) -> (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) B C)
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] {A : Matrix.{u1, u1, u2} n n α} {B : Matrix.{u1, u1, u2} n n α} {C : Matrix.{u1, u1, u2} n n α}, (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A B) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))))) -> (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) C A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))))) -> (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) B C)
 Case conversion may be inaccurate. Consider using '#align matrix.right_inv_eq_left_inv Matrix.right_inv_eq_left_invₓ'. -/
 /-- The right inverse of matrix A equals the left inverse of A when they exist. -/
 theorem right_inv_eq_left_inv (h : A ⬝ B = 1) (g : C ⬝ A = 1) : B = C := by
@@ -896,7 +896,7 @@ theorem right_inv_eq_left_inv (h : A ⬝ B = 1) (g : C ⬝ A = 1) : B = C := by
 lean 3 declaration is
   forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] {A : Matrix.{u1, u1, u2} n n α} {B : Matrix.{u1, u1, u2} n n α}, (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) B)) -> (IsUnit.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) A B)
 but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] {A : Matrix.{u1, u1, u2} n n α} {B : Matrix.{u1, u1, u2} n n α}, (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) B)) -> (IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) A B)
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] {A : Matrix.{u1, u1, u2} n n α} {B : Matrix.{u1, u1, u2} n n α}, (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) B)) -> (IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) A B)
 Case conversion may be inaccurate. Consider using '#align matrix.inv_inj Matrix.inv_injₓ'. -/
 theorem inv_inj (h : A⁻¹ = B⁻¹) (h' : IsUnit A.det) : A = B :=
   by
@@ -938,7 +938,7 @@ noncomputable instance : InvOneClass (Matrix n n α) :=
 lean 3 declaration is
   forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (k : α) [_inst_4 : Invertible.{u2} α (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3))))) k], (IsUnit.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) (SMul.smul.{u2, max u1 u2} α (Matrix.{u1, u1, u2} n n α) (Matrix.hasSmul.{u2, u1, u1, u2} n n α α (Mul.toSMul.{u2} α (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))))) k A)) (SMul.smul.{u2, max u1 u2} α (Matrix.{u1, u1, u2} n n α) (Matrix.hasSmul.{u2, u1, u1, u2} n n α α (Mul.toSMul.{u2} α (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Invertible.invOf.{u2} α (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3))))) k _inst_4) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)))
 but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (k : α) [_inst_4 : Invertible.{u2} α (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))) k], (IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) (HSMul.hSMul.{u2, max u1 u2, max u1 u2} α (Matrix.{u1, u1, u2} n n α) (Matrix.{u1, u1, u2} n n α) (instHSMul.{u2, max u1 u2} α (Matrix.{u1, u1, u2} n n α) (Matrix.smul.{u2, u1, u1, u2} n n α α (Algebra.toSMul.{u2, u2} α α (CommRing.toCommSemiring.{u2} α _inst_3) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Algebra.id.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) k A)) (HSMul.hSMul.{u2, max u1 u2, max u1 u2} α (Matrix.{u1, u1, u2} n n α) (Matrix.{u1, u1, u2} n n α) (instHSMul.{u2, max u1 u2} α (Matrix.{u1, u1, u2} n n α) (Matrix.smul.{u2, u1, u1, u2} n n α α (Algebra.toSMul.{u2, u2} α α (CommRing.toCommSemiring.{u2} α _inst_3) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Algebra.id.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) (Invertible.invOf.{u2} α (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))) k _inst_4) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)))
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (k : α) [_inst_4 : Invertible.{u2} α (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) k], (IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) (HSMul.hSMul.{u2, max u1 u2, max u1 u2} α (Matrix.{u1, u1, u2} n n α) (Matrix.{u1, u1, u2} n n α) (instHSMul.{u2, max u1 u2} α (Matrix.{u1, u1, u2} n n α) (Matrix.smul.{u2, u1, u1, u2} n n α α (Algebra.toSMul.{u2, u2} α α (CommRing.toCommSemiring.{u2} α _inst_3) (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (Algebra.id.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) k A)) (HSMul.hSMul.{u2, max u1 u2, max u1 u2} α (Matrix.{u1, u1, u2} n n α) (Matrix.{u1, u1, u2} n n α) (instHSMul.{u2, max u1 u2} α (Matrix.{u1, u1, u2} n n α) (Matrix.smul.{u2, u1, u1, u2} n n α α (Algebra.toSMul.{u2, u2} α α (CommRing.toCommSemiring.{u2} α _inst_3) (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (Algebra.id.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) (Invertible.invOf.{u2} α (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) k _inst_4) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)))
 Case conversion may be inaccurate. Consider using '#align matrix.inv_smul Matrix.inv_smulₓ'. -/
 theorem inv_smul (k : α) [Invertible k] (h : IsUnit A.det) : (k • A)⁻¹ = ⅟ k • A⁻¹ :=
   inv_eq_left_inv (by simp [h, smul_smul])
@@ -948,7 +948,7 @@ theorem inv_smul (k : α) [Invertible k] (h : IsUnit A.det) : (k • A)⁻¹ = 
 lean 3 declaration is
   forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (k : Units.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3))), (IsUnit.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) (SMul.smul.{u2, max u1 u2} (Units.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3))) (Matrix.{u1, u1, u2} n n α) (Matrix.hasSmul.{u2, u1, u1, u2} n n (Units.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3))) α (Units.hasSmul.{u2, u2} α α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Mul.toSMul.{u2} α (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) k A)) (SMul.smul.{u2, max u1 u2} (Units.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3))) (Matrix.{u1, u1, u2} n n α) (Matrix.hasSmul.{u2, u1, u1, u2} n n (Units.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3))) α (Units.hasSmul.{u2, u2} α α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Mul.toSMul.{u2} α (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Inv.inv.{u2} (Units.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3))) (Units.hasInv.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3))) k) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)))
 but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (k : Units.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3))))), (IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) (HSMul.hSMul.{u2, max u1 u2, max u1 u2} (Units.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Matrix.{u1, u1, u2} n n α) (Matrix.{u1, u1, u2} n n α) (instHSMul.{u2, max u1 u2} (Units.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Matrix.{u1, u1, u2} n n α) (Units.instSMulUnits.{u2, max u1 u2} α (Matrix.{u1, u1, u2} n n α) (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Matrix.smul.{u2, u1, u1, u2} n n α α (Algebra.toSMul.{u2, u2} α α (CommRing.toCommSemiring.{u2} α _inst_3) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Algebra.id.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))))) k A)) (HSMul.hSMul.{u2, max u1 u2, max u1 u2} (Units.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Matrix.{u1, u1, u2} n n α) (Matrix.{u1, u1, u2} n n α) (instHSMul.{u2, max u1 u2} (Units.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Matrix.{u1, u1, u2} n n α) (Units.instSMulUnits.{u2, max u1 u2} α (Matrix.{u1, u1, u2} n n α) (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Matrix.smul.{u2, u1, u1, u2} n n α α (Algebra.toSMul.{u2, u2} α α (CommRing.toCommSemiring.{u2} α _inst_3) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Algebra.id.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))))) (Inv.inv.{u2} (Units.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Units.instInv.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3))))) k) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)))
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (k : Units.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))), (IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) (HSMul.hSMul.{u2, max u1 u2, max u1 u2} (Units.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) (Matrix.{u1, u1, u2} n n α) (Matrix.{u1, u1, u2} n n α) (instHSMul.{u2, max u1 u2} (Units.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) (Matrix.{u1, u1, u2} n n α) (Units.instSMulUnits.{u2, max u1 u2} α (Matrix.{u1, u1, u2} n n α) (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Matrix.smul.{u2, u1, u1, u2} n n α α (Algebra.toSMul.{u2, u2} α α (CommRing.toCommSemiring.{u2} α _inst_3) (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (Algebra.id.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))))) k A)) (HSMul.hSMul.{u2, max u1 u2, max u1 u2} (Units.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) (Matrix.{u1, u1, u2} n n α) (Matrix.{u1, u1, u2} n n α) (instHSMul.{u2, max u1 u2} (Units.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) (Matrix.{u1, u1, u2} n n α) (Units.instSMulUnits.{u2, max u1 u2} α (Matrix.{u1, u1, u2} n n α) (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Matrix.smul.{u2, u1, u1, u2} n n α α (Algebra.toSMul.{u2, u2} α α (CommRing.toCommSemiring.{u2} α _inst_3) (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (Algebra.id.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))))) (Inv.inv.{u2} (Units.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) (Units.instInv.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) k) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)))
 Case conversion may be inaccurate. Consider using '#align matrix.inv_smul' Matrix.inv_smul'ₓ'. -/
 theorem inv_smul' (k : αˣ) (h : IsUnit A.det) : (k • A)⁻¹ = k⁻¹ • A⁻¹ :=
   inv_eq_left_inv (by simp [h, smul_smul])
@@ -958,7 +958,7 @@ theorem inv_smul' (k : αˣ) (h : IsUnit A.det) : (k • A)⁻¹ = k⁻¹ • A
 lean 3 declaration is
   forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (h : IsUnit.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)), Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) (Matrix.adjugate.{u1, u2} n α (fun (a : n) (b : n) => _inst_2 a b) _inst_1 _inst_3 A)) (SMul.smul.{u2, max u1 u2} (Units.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3))) (Matrix.{u1, u1, u2} n n α) (Matrix.hasSmul.{u2, u1, u1, u2} n n (Units.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3))) α (Units.hasSmul.{u2, u2} α α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Mul.toSMul.{u2} α (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Inv.inv.{u2} (Units.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3))) (Units.hasInv.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3))) (IsUnit.unit.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A) h)) A)
 but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (h : IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)), Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u2 u1} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) (Matrix.adjugate.{u1, u2} n α (fun (a : n) (b : n) => _inst_2 a b) _inst_1 _inst_3 A)) (HSMul.hSMul.{u2, max u1 u2, max u1 u2} (Units.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Matrix.{u1, u1, u2} n n α) (Matrix.{u1, u1, u2} n n α) (instHSMul.{u2, max u1 u2} (Units.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Matrix.{u1, u1, u2} n n α) (Units.instSMulUnits.{u2, max u1 u2} α (Matrix.{u1, u1, u2} n n α) (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Matrix.smul.{u2, u1, u1, u2} n n α α (Algebra.toSMul.{u2, u2} α α (CommRing.toCommSemiring.{u2} α _inst_3) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Algebra.id.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))))) (Inv.inv.{u2} (Units.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Units.instInv.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (IsUnit.unit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A) h)) A)
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (h : IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)), Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u2 u1} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) (Matrix.adjugate.{u1, u2} n α (fun (a : n) (b : n) => _inst_2 a b) _inst_1 _inst_3 A)) (HSMul.hSMul.{u2, max u1 u2, max u1 u2} (Units.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) (Matrix.{u1, u1, u2} n n α) (Matrix.{u1, u1, u2} n n α) (instHSMul.{u2, max u1 u2} (Units.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) (Matrix.{u1, u1, u2} n n α) (Units.instSMulUnits.{u2, max u1 u2} α (Matrix.{u1, u1, u2} n n α) (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Matrix.smul.{u2, u1, u1, u2} n n α α (Algebra.toSMul.{u2, u2} α α (CommRing.toCommSemiring.{u2} α _inst_3) (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (Algebra.id.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))))) (Inv.inv.{u2} (Units.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) (Units.instInv.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) (IsUnit.unit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A) h)) A)
 Case conversion may be inaccurate. Consider using '#align matrix.inv_adjugate Matrix.inv_adjugateₓ'. -/
 theorem inv_adjugate (A : Matrix n n α) (h : IsUnit A.det) : (adjugate A)⁻¹ = h.Unit⁻¹ • A :=
   by
@@ -998,7 +998,7 @@ theorem invOf_diagonal_eq {α} [Semiring α] (v : n → α) [Invertible v] [Inve
 lean 3 declaration is
   forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (v : n -> α) [_inst_4 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasMul.{u2, u1} n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (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} α (CommRing.toRing.{u2} α _inst_3)))))) v)], Invertible.{max u1 u2} (n -> α) (Pi.instMul.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Pi.instOne.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) v
 but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (v : n -> α) [_inst_4 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Matrix.diagonal.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) v)], Invertible.{max u1 u2} (n -> α) (Pi.instMul.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Pi.instOne.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) v
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (v : n -> α) [_inst_4 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Matrix.diagonal.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) v)], Invertible.{max u1 u2} (n -> α) (Pi.instMul.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Pi.instOne.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) v
 Case conversion may be inaccurate. Consider using '#align matrix.invertible_of_diagonal_invertible Matrix.invertibleOfDiagonalInvertibleₓ'. -/
 /-- `v` is invertible if `diagonal v` is -/
 def invertibleOfDiagonalInvertible (v : n → α) [Invertible (diagonal v)] : Invertible v
@@ -1026,7 +1026,7 @@ def invertibleOfDiagonalInvertible (v : n → α) [Invertible (diagonal v)] : In
 lean 3 declaration is
   forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (v : n -> α), Equiv.{succ (max u1 u2), succ (max u1 u2)} (Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasMul.{u2, u1} n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (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} α (CommRing.toRing.{u2} α _inst_3)))))) v)) (Invertible.{max u1 u2} (n -> α) (Pi.instMul.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Pi.instOne.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) v)
 but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (v : n -> α), Equiv.{succ (max u1 u2), succ (max u1 u2)} (Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Matrix.diagonal.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) v)) (Invertible.{max u1 u2} (n -> α) (Pi.instMul.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Pi.instOne.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) v)
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (v : n -> α), Equiv.{succ (max u1 u2), succ (max u1 u2)} (Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Matrix.diagonal.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) v)) (Invertible.{max u1 u2} (n -> α) (Pi.instMul.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Pi.instOne.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) v)
 Case conversion may be inaccurate. Consider using '#align matrix.diagonal_invertible_equiv_invertible Matrix.diagonalInvertibleEquivInvertibleₓ'. -/
 /-- Together `matrix.diagonal_invertible` and `matrix.invertible_of_diagonal_invertible` form an
 equivalence, although both sides of the equiv are subsingleton anyway. -/
@@ -1043,7 +1043,7 @@ def diagonalInvertibleEquivInvertible (v : n → α) : Invertible (diagonal v) 
 lean 3 declaration is
   forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] {v : n -> α}, Iff (IsUnit.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Ring.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.ring.{u2, u1} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toRing.{u2} α _inst_3))) (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} α (CommRing.toRing.{u2} α _inst_3)))))) v)) (IsUnit.{max u1 u2} (n -> α) (Pi.monoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3))) v)
 but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] {v : n -> α}, Iff (IsUnit.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (MonoidWithZero.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Semiring.toMonoidWithZero.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.semiring.{u2, u1} n α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) _inst_1 (fun (a : n) (b : n) => _inst_2 a b)))) (Matrix.diagonal.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) v)) (IsUnit.{max u1 u2} (n -> α) (Pi.monoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3))))) v)
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] {v : n -> α}, Iff (IsUnit.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (MonoidWithZero.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Semiring.toMonoidWithZero.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.semiring.{u2, u1} n α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) _inst_1 (fun (a : n) (b : n) => _inst_2 a b)))) (Matrix.diagonal.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) v)) (IsUnit.{max u1 u2} (n -> α) (Pi.monoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) v)
 Case conversion may be inaccurate. Consider using '#align matrix.is_unit_diagonal Matrix.isUnit_diagonalₓ'. -/
 /-- When lowered to a prop, `matrix.diagonal_invertible_equiv_invertible` forms an `iff`. -/
 @[simp]
@@ -1056,7 +1056,7 @@ theorem isUnit_diagonal {v : n → α} : IsUnit (diagonal v) ↔ IsUnit v := by
 lean 3 declaration is
   forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (v : n -> α), Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) (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} α (CommRing.toRing.{u2} α _inst_3)))))) v)) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (Ring.inverse.{max u1 u2} (n -> α) (Pi.monoidWithZero.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) v))
 but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (v : n -> α), Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) (Matrix.diagonal.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) v)) (Matrix.diagonal.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Ring.inverse.{max u1 u2} (n -> α) (Pi.monoidWithZero.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) v))
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (v : n -> α), Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) (Matrix.diagonal.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) v)) (Matrix.diagonal.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Ring.inverse.{max u1 u2} (n -> α) (Pi.monoidWithZero.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) v))
 Case conversion may be inaccurate. Consider using '#align matrix.inv_diagonal Matrix.inv_diagonalₓ'. -/
 theorem inv_diagonal (v : n → α) : (diagonal v)⁻¹ = diagonal (Ring.inverse v) :=
   by
@@ -1103,7 +1103,7 @@ theorem mul_inv_rev (A B : Matrix n n α) : (A ⬝ B)⁻¹ = B⁻¹ ⬝ A⁻¹ :
 lean 3 declaration is
   forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (l : List.{max u1 u2} (Matrix.{u1, u1, u2} n n α)), Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) (List.prod.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasMul.{u2, u1} n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) l)) (List.prod.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasMul.{u2, u1} n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (List.map.{max u1 u2, max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3)) (List.reverse.{max u1 u2} (Matrix.{u1, u1, u2} n n α) l)))
 but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (l : List.{max u2 u1} (Matrix.{u1, u1, u2} n n α)), Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) (List.prod.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) l)) (List.prod.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (List.map.{max u1 u2, max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3)) (List.reverse.{max u1 u2} (Matrix.{u1, u1, u2} n n α) l)))
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (l : List.{max u2 u1} (Matrix.{u1, u1, u2} n n α)), Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) (List.prod.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) l)) (List.prod.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Semiring.toOne.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (List.map.{max u1 u2, max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3)) (List.reverse.{max u1 u2} (Matrix.{u1, u1, u2} n n α) l)))
 Case conversion may be inaccurate. Consider using '#align matrix.list_prod_inv_reverse Matrix.list_prod_inv_reverseₓ'. -/
 /- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
 /-- A version of `list.prod_inv_reverse` for `matrix.has_inv`. -/
@@ -1118,7 +1118,7 @@ theorem list_prod_inv_reverse : ∀ l : List (Matrix n n α), l.Prod⁻¹ = (l.r
 lean 3 declaration is
   forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (b : n -> α), (IsUnit.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{succ (max u1 u2)} (n -> α) (SMul.smul.{u2, max u1 u2} α (n -> α) (Function.hasSMul.{u1, u2, u2} n α α (Mul.toSMul.{u2} α (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A) (Matrix.mulVec.{u2, u1, u1} n n α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) _inst_1 (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) b)) (coeFn.{succ (max u1 u2), succ (max u1 u2)} (LinearMap.{u2, u2, max u1 u2, max u1 u2} α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (RingHom.id.{u2} α (Semiring.toNonAssocSemiring.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (n -> α) (n -> α) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.Function.module.{u1, u2, u2} n α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Pi.Function.module.{u1, u2, u2} n α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (_x : LinearMap.{u2, u2, max u1 u2, max u1 u2} α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (RingHom.id.{u2} α (Semiring.toNonAssocSemiring.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (n -> α) (n -> α) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.Function.module.{u1, u2, u2} n α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Pi.Function.module.{u1, u2, u2} n α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3))))) => (n -> α) -> n -> α) (LinearMap.hasCoeToFun.{u2, u2, max u1 u2, max u1 u2} α α (n -> α) (n -> α) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.Function.module.{u1, u2, u2} n α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Pi.Function.module.{u1, u2, u2} n α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (RingHom.id.{u2} α (Semiring.toNonAssocSemiring.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Matrix.cramer.{u1, u2} n α (fun (a : n) (b : n) => _inst_2 a b) _inst_1 _inst_3 A) b))
 but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (b : n -> α), (IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{max (succ u1) (succ u2)} (n -> α) (HSMul.hSMul.{u2, max u1 u2, max u1 u2} α (n -> α) (n -> α) (instHSMul.{u2, max u1 u2} α (n -> α) (Pi.instSMul.{u1, u2, u2} n α (fun (a._@.Mathlib.Data.Matrix.Basic._hyg.18074 : n) => α) (fun (i : n) => Algebra.toSMul.{u2, u2} α α (CommRing.toCommSemiring.{u2} α _inst_3) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Algebra.id.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A) (Matrix.mulVec.{u2, u1, u1} n n α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) _inst_1 (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) b)) (FunLike.coe.{max (succ u1) (succ u2), max (succ u1) (succ u2), max (succ u1) (succ u2)} (LinearMap.{u2, u2, max u1 u2, max u1 u2} α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (RingHom.id.{u2} α (NonAssocRing.toNonAssocSemiring.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (n -> α) (n -> α) (Pi.addCommMonoid.{u1, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.274 : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.addCommMonoid.{u1, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.274 : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.274 : n) => α) α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.274 : n) => α) α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (n -> α) (fun (_x : n -> α) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6190 : n -> α) => n -> α) _x) (LinearMap.instFunLikeLinearMap.{u2, u2, max u1 u2, max u1 u2} α α (n -> α) (n -> α) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.274 : n) => α) α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.274 : n) => α) α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (RingHom.id.{u2} α (NonAssocRing.toNonAssocSemiring.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Matrix.cramer.{u1, u2} n α (fun (a : n) (b : n) => _inst_2 a b) _inst_1 _inst_3 A) b))
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (b : n -> α), (IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{max (succ u1) (succ u2)} (n -> α) (HSMul.hSMul.{u2, max u1 u2, max u1 u2} α (n -> α) (n -> α) (instHSMul.{u2, max u1 u2} α (n -> α) (Pi.instSMul.{u1, u2, u2} n α (fun (a._@.Mathlib.Data.Matrix.Basic._hyg.18074 : n) => α) (fun (i : n) => Algebra.toSMul.{u2, u2} α α (CommRing.toCommSemiring.{u2} α _inst_3) (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (Algebra.id.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A) (Matrix.mulVec.{u2, u1, u1} n n α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) _inst_1 (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) b)) (FunLike.coe.{max (succ u1) (succ u2), max (succ u1) (succ u2), max (succ u1) (succ u2)} (LinearMap.{u2, u2, max u1 u2, max u1 u2} α α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (RingHom.id.{u2} α (Semiring.toNonAssocSemiring.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (n -> α) (n -> α) (Pi.addCommMonoid.{u1, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.274 : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.addCommMonoid.{u1, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.274 : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.274 : n) => α) α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => Semiring.toModule.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.274 : n) => α) α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => Semiring.toModule.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) (n -> α) (fun (_x : n -> α) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6190 : n -> α) => n -> α) _x) (LinearMap.instFunLikeLinearMap.{u2, u2, max u1 u2, max u1 u2} α α (n -> α) (n -> α) (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.274 : n) => α) α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => Semiring.toModule.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.274 : n) => α) α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => Semiring.toModule.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (RingHom.id.{u2} α (Semiring.toNonAssocSemiring.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) (Matrix.cramer.{u1, u2} n α (fun (a : n) (b : n) => _inst_2 a b) _inst_1 _inst_3 A) b))
 Case conversion may be inaccurate. Consider using '#align matrix.det_smul_inv_mul_vec_eq_cramer Matrix.det_smul_inv_mulVec_eq_cramerₓ'. -/
 /-- One form of **Cramer's rule**. See `matrix.mul_vec_cramer` for a stronger form. -/
 @[simp]
@@ -1132,7 +1132,7 @@ theorem det_smul_inv_mulVec_eq_cramer (A : Matrix n n α) (b : n → α) (h : Is
 lean 3 declaration is
   forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (b : n -> α), (IsUnit.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{succ (max u1 u2)} (n -> α) (SMul.smul.{u2, max u1 u2} α (n -> α) (Function.hasSMul.{u1, u2, u2} n α α (Mul.toSMul.{u2} α (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A) (Matrix.vecMul.{u2, u1, u1} n n α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) _inst_1 b (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A))) (coeFn.{succ (max u1 u2), succ (max u1 u2)} (LinearMap.{u2, u2, max u1 u2, max u1 u2} α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (RingHom.id.{u2} α (Semiring.toNonAssocSemiring.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (n -> α) (n -> α) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.Function.module.{u1, u2, u2} n α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Pi.Function.module.{u1, u2, u2} n α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (_x : LinearMap.{u2, u2, max u1 u2, max u1 u2} α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (RingHom.id.{u2} α (Semiring.toNonAssocSemiring.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (n -> α) (n -> α) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.Function.module.{u1, u2, u2} n α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Pi.Function.module.{u1, u2, u2} n α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3))))) => (n -> α) -> n -> α) (LinearMap.hasCoeToFun.{u2, u2, max u1 u2, max u1 u2} α α (n -> α) (n -> α) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.Function.module.{u1, u2, u2} n α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Pi.Function.module.{u1, u2, u2} n α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (RingHom.id.{u2} α (Semiring.toNonAssocSemiring.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Matrix.cramer.{u1, u2} n α (fun (a : n) (b : n) => _inst_2 a b) _inst_1 _inst_3 (Matrix.transpose.{u2, u1, u1} n n α A)) b))
 but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (b : n -> α), (IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{max (succ u1) (succ u2)} (n -> α) (HSMul.hSMul.{u2, max u1 u2, max u1 u2} α (n -> α) (n -> α) (instHSMul.{u2, max u1 u2} α (n -> α) (Pi.instSMul.{u1, u2, u2} n α (fun (a._@.Mathlib.Data.Matrix.Basic._hyg.18132 : n) => α) (fun (i : n) => Algebra.toSMul.{u2, u2} α α (CommRing.toCommSemiring.{u2} α _inst_3) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Algebra.id.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A) (Matrix.vecMul.{u2, u1, u1} n n α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) _inst_1 b (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A))) (FunLike.coe.{max (succ u1) (succ u2), max (succ u1) (succ u2), max (succ u1) (succ u2)} (LinearMap.{u2, u2, max u1 u2, max u1 u2} α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (RingHom.id.{u2} α (NonAssocRing.toNonAssocSemiring.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (n -> α) (n -> α) (Pi.addCommMonoid.{u1, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.274 : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.addCommMonoid.{u1, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.274 : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.274 : n) => α) α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.274 : n) => α) α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (n -> α) (fun (_x : n -> α) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6190 : n -> α) => n -> α) _x) (LinearMap.instFunLikeLinearMap.{u2, u2, max u1 u2, max u1 u2} α α (n -> α) (n -> α) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.274 : n) => α) α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.274 : n) => α) α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (RingHom.id.{u2} α (NonAssocRing.toNonAssocSemiring.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Matrix.cramer.{u1, u2} n α (fun (a : n) (b : n) => _inst_2 a b) _inst_1 _inst_3 (Matrix.transpose.{u2, u1, u1} n n α A)) b))
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (b : n -> α), (IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{max (succ u1) (succ u2)} (n -> α) (HSMul.hSMul.{u2, max u1 u2, max u1 u2} α (n -> α) (n -> α) (instHSMul.{u2, max u1 u2} α (n -> α) (Pi.instSMul.{u1, u2, u2} n α (fun (a._@.Mathlib.Data.Matrix.Basic._hyg.18132 : n) => α) (fun (i : n) => Algebra.toSMul.{u2, u2} α α (CommRing.toCommSemiring.{u2} α _inst_3) (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (Algebra.id.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A) (Matrix.vecMul.{u2, u1, u1} n n α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) _inst_1 b (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A))) (FunLike.coe.{max (succ u1) (succ u2), max (succ u1) (succ u2), max (succ u1) (succ u2)} (LinearMap.{u2, u2, max u1 u2, max u1 u2} α α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (RingHom.id.{u2} α (Semiring.toNonAssocSemiring.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (n -> α) (n -> α) (Pi.addCommMonoid.{u1, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.274 : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.addCommMonoid.{u1, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.274 : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.274 : n) => α) α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => Semiring.toModule.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.274 : n) => α) α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => Semiring.toModule.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) (n -> α) (fun (_x : n -> α) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6190 : n -> α) => n -> α) _x) (LinearMap.instFunLikeLinearMap.{u2, u2, max u1 u2, max u1 u2} α α (n -> α) (n -> α) (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.274 : n) => α) α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => Semiring.toModule.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.274 : n) => α) α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => Semiring.toModule.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (RingHom.id.{u2} α (Semiring.toNonAssocSemiring.{u2} α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) (Matrix.cramer.{u1, u2} n α (fun (a : n) (b : n) => _inst_2 a b) _inst_1 _inst_3 (Matrix.transpose.{u2, u1, u1} n n α A)) b))
 Case conversion may be inaccurate. Consider using '#align matrix.det_smul_inv_vec_mul_eq_cramer_transpose Matrix.det_smul_inv_vecMul_eq_cramer_transposeₓ'. -/
 /-- One form of **Cramer's rule**. See `matrix.mul_vec_cramer` for a stronger form. -/
 @[simp]
@@ -1159,7 +1159,7 @@ variable [DecidableEq m]
 lean 3 declaration is
   forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] [_inst_4 : Fintype.{u1} m] [_inst_5 : DecidableEq.{succ u1} m] (A : Matrix.{u1, u1, u3} m m α) (e₁ : Equiv.{succ u2, succ u1} n m) (e₂ : Equiv.{succ u2, succ u1} n m) [_inst_6 : Invertible.{max u1 u3} (Matrix.{u1, u1, u3} m m α) (Matrix.hasMul.{u3, u1} m α _inst_4 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.hasOne.{u3, u1} m α (fun (a : m) (b : m) => _inst_5 a b) (MulZeroClass.toHasZero.{u3} α (NonUnitalNonAssocSemiring.toMulZeroClass.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (AddMonoidWithOne.toOne.{u3} α (AddGroupWithOne.toAddMonoidWithOne.{u3} α (AddCommGroupWithOne.toAddGroupWithOne.{u3} α (Ring.toAddCommGroupWithOne.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) A], Invertible.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.hasMul.{u3, u2} n α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.hasOne.{u3, u2} 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} α (CommRing.toRing.{u3} α _inst_3)))))) (AddMonoidWithOne.toOne.{u3} α (AddGroupWithOne.toAddMonoidWithOne.{u3} α (AddCommGroupWithOne.toAddGroupWithOne.{u3} α (Ring.toAddCommGroupWithOne.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.submatrix.{u3, u2, u1, u1, u2} n m m n α A (coeFn.{max 1 (max (succ u2) (succ u1)) (succ u1) (succ u2), max (succ u2) (succ u1)} (Equiv.{succ u2, succ u1} n m) (fun (_x : Equiv.{succ u2, succ u1} n m) => n -> m) (Equiv.hasCoeToFun.{succ u2, succ u1} n m) e₁) (coeFn.{max 1 (max (succ u2) (succ u1)) (succ u1) (succ u2), max (succ u2) (succ u1)} (Equiv.{succ u2, succ u1} n m) (fun (_x : Equiv.{succ u2, succ u1} n m) => n -> m) (Equiv.hasCoeToFun.{succ u2, succ u1} n m) e₂))
 but is expected to have type
-  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] [_inst_4 : Fintype.{u1} m] [_inst_5 : DecidableEq.{succ u1} m] (A : Matrix.{u1, u1, u3} m m α) (e₁ : Equiv.{succ u2, succ u1} n m) (e₂ : Equiv.{succ u2, succ u1} n m) [_inst_6 : Invertible.{max u1 u3} (Matrix.{u1, u1, u3} m m α) (Matrix.instMulMatrix.{u3, u1} m α _inst_4 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u1} m α (fun (a : m) (b : m) => _inst_5 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (NonAssocRing.toOne.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) A], Invertible.{max u3 u2} (Matrix.{u2, u2, u3} n n α) (Matrix.instMulMatrix.{u3, u2} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u2} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (NonAssocRing.toOne.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (Matrix.submatrix.{u3, u2, u1, u1, u2} n m m n α A (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (Equiv.{succ u2, succ u1} n m) n (fun (_x : n) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : n) => m) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} n m) e₁) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (Equiv.{succ u2, succ u1} n m) n (fun (_x : n) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : n) => m) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} n m) e₂))
+  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] [_inst_4 : Fintype.{u1} m] [_inst_5 : DecidableEq.{succ u1} m] (A : Matrix.{u1, u1, u3} m m α) (e₁ : Equiv.{succ u2, succ u1} n m) (e₂ : Equiv.{succ u2, succ u1} n m) [_inst_6 : Invertible.{max u1 u3} (Matrix.{u1, u1, u3} m m α) (Matrix.instMulMatrix.{u3, u1} m α _inst_4 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u1} m α (fun (a : m) (b : m) => _inst_5 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (Semiring.toOne.{u3} α (CommSemiring.toSemiring.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3)))) A], Invertible.{max u3 u2} (Matrix.{u2, u2, u3} n n α) (Matrix.instMulMatrix.{u3, u2} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u2} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (Semiring.toOne.{u3} α (CommSemiring.toSemiring.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3)))) (Matrix.submatrix.{u3, u2, u1, u1, u2} n m m n α A (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (Equiv.{succ u2, succ u1} n m) n (fun (_x : n) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : n) => m) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} n m) e₁) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (Equiv.{succ u2, succ u1} n m) n (fun (_x : n) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : n) => m) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} n m) e₂))
 Case conversion may be inaccurate. Consider using '#align matrix.submatrix_equiv_invertible Matrix.submatrixEquivInvertibleₓ'. -/
 /-- `A.submatrix e₁ e₂` is invertible if `A` is -/
 def submatrixEquivInvertible (A : Matrix m m α) (e₁ e₂ : n ≃ m) [Invertible A] :
@@ -1172,7 +1172,7 @@ def submatrixEquivInvertible (A : Matrix m m α) (e₁ e₂ : n ≃ m) [Invertib
 lean 3 declaration is
   forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] [_inst_4 : Fintype.{u1} m] [_inst_5 : DecidableEq.{succ u1} m] (A : Matrix.{u1, u1, u3} m m α) (e₁ : Equiv.{succ u2, succ u1} n m) (e₂ : Equiv.{succ u2, succ u1} n m) [_inst_6 : Invertible.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.hasMul.{u3, u2} n α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.hasOne.{u3, u2} 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} α (CommRing.toRing.{u3} α _inst_3)))))) (AddMonoidWithOne.toOne.{u3} α (AddGroupWithOne.toAddMonoidWithOne.{u3} α (AddCommGroupWithOne.toAddGroupWithOne.{u3} α (Ring.toAddCommGroupWithOne.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.submatrix.{u3, u2, u1, u1, u2} n m m n α A (coeFn.{max 1 (max (succ u2) (succ u1)) (succ u1) (succ u2), max (succ u2) (succ u1)} (Equiv.{succ u2, succ u1} n m) (fun (_x : Equiv.{succ u2, succ u1} n m) => n -> m) (Equiv.hasCoeToFun.{succ u2, succ u1} n m) e₁) (coeFn.{max 1 (max (succ u2) (succ u1)) (succ u1) (succ u2), max (succ u2) (succ u1)} (Equiv.{succ u2, succ u1} n m) (fun (_x : Equiv.{succ u2, succ u1} n m) => n -> m) (Equiv.hasCoeToFun.{succ u2, succ u1} n m) e₂))], Invertible.{max u1 u3} (Matrix.{u1, u1, u3} m m α) (Matrix.hasMul.{u3, u1} m α _inst_4 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.hasOne.{u3, u1} m α (fun (a : m) (b : m) => _inst_5 a b) (MulZeroClass.toHasZero.{u3} α (NonUnitalNonAssocSemiring.toMulZeroClass.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (AddMonoidWithOne.toOne.{u3} α (AddGroupWithOne.toAddMonoidWithOne.{u3} α (AddCommGroupWithOne.toAddGroupWithOne.{u3} α (Ring.toAddCommGroupWithOne.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) A
 but is expected to have type
-  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] [_inst_4 : Fintype.{u1} m] [_inst_5 : DecidableEq.{succ u1} m] (A : Matrix.{u1, u1, u3} m m α) (e₁ : Equiv.{succ u2, succ u1} n m) (e₂ : Equiv.{succ u2, succ u1} n m) [_inst_6 : Invertible.{max u3 u2} (Matrix.{u2, u2, u3} n n α) (Matrix.instMulMatrix.{u3, u2} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u2} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (NonAssocRing.toOne.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (Matrix.submatrix.{u3, u2, u1, u1, u2} n m m n α A (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (Equiv.{succ u2, succ u1} n m) n (fun (_x : n) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : n) => m) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} n m) e₁) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (Equiv.{succ u2, succ u1} n m) n (fun (_x : n) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : n) => m) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} n m) e₂))], Invertible.{max u1 u3} (Matrix.{u1, u1, u3} m m α) (Matrix.instMulMatrix.{u3, u1} m α _inst_4 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u1} m α (fun (a : m) (b : m) => _inst_5 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (NonAssocRing.toOne.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) A
+  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] [_inst_4 : Fintype.{u1} m] [_inst_5 : DecidableEq.{succ u1} m] (A : Matrix.{u1, u1, u3} m m α) (e₁ : Equiv.{succ u2, succ u1} n m) (e₂ : Equiv.{succ u2, succ u1} n m) [_inst_6 : Invertible.{max u3 u2} (Matrix.{u2, u2, u3} n n α) (Matrix.instMulMatrix.{u3, u2} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u2} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (Semiring.toOne.{u3} α (CommSemiring.toSemiring.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3)))) (Matrix.submatrix.{u3, u2, u1, u1, u2} n m m n α A (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (Equiv.{succ u2, succ u1} n m) n (fun (_x : n) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : n) => m) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} n m) e₁) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (Equiv.{succ u2, succ u1} n m) n (fun (_x : n) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : n) => m) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} n m) e₂))], Invertible.{max u1 u3} (Matrix.{u1, u1, u3} m m α) (Matrix.instMulMatrix.{u3, u1} m α _inst_4 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u1} m α (fun (a : m) (b : m) => _inst_5 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (Semiring.toOne.{u3} α (CommSemiring.toSemiring.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3)))) A
 Case conversion may be inaccurate. Consider using '#align matrix.invertible_of_submatrix_equiv_invertible Matrix.invertibleOfSubmatrixEquivInvertibleₓ'. -/
 /-- `A` is invertible if `A.submatrix e₁ e₂` is -/
 def invertibleOfSubmatrixEquivInvertible (A : Matrix m m α) (e₁ e₂ : n ≃ m)
@@ -1190,7 +1190,7 @@ def invertibleOfSubmatrixEquivInvertible (A : Matrix m m α) (e₁ e₂ : n ≃
 lean 3 declaration is
   forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] [_inst_4 : Fintype.{u1} m] [_inst_5 : DecidableEq.{succ u1} m] (A : Matrix.{u1, u1, u3} m m α) (e₁ : Equiv.{succ u2, succ u1} n m) (e₂ : Equiv.{succ u2, succ u1} n m) [_inst_6 : Invertible.{max u1 u3} (Matrix.{u1, u1, u3} m m α) (Matrix.hasMul.{u3, u1} m α _inst_4 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.hasOne.{u3, u1} m α (fun (a : m) (b : m) => _inst_5 a b) (MulZeroClass.toHasZero.{u3} α (NonUnitalNonAssocSemiring.toMulZeroClass.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (AddMonoidWithOne.toOne.{u3} α (AddGroupWithOne.toAddMonoidWithOne.{u3} α (AddCommGroupWithOne.toAddGroupWithOne.{u3} α (Ring.toAddCommGroupWithOne.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) A] [_inst_7 : Invertible.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.hasMul.{u3, u2} n α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.hasOne.{u3, u2} 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} α (CommRing.toRing.{u3} α _inst_3)))))) (AddMonoidWithOne.toOne.{u3} α (AddGroupWithOne.toAddMonoidWithOne.{u3} α (AddCommGroupWithOne.toAddGroupWithOne.{u3} α (Ring.toAddCommGroupWithOne.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.submatrix.{u3, u2, u1, u1, u2} n m m n α A (coeFn.{max 1 (max (succ u2) (succ u1)) (succ u1) (succ u2), max (succ u2) (succ u1)} (Equiv.{succ u2, succ u1} n m) (fun (_x : Equiv.{succ u2, succ u1} n m) => n -> m) (Equiv.hasCoeToFun.{succ u2, succ u1} n m) e₁) (coeFn.{max 1 (max (succ u2) (succ u1)) (succ u1) (succ u2), max (succ u2) (succ u1)} (Equiv.{succ u2, succ u1} n m) (fun (_x : Equiv.{succ u2, succ u1} n m) => n -> m) (Equiv.hasCoeToFun.{succ u2, succ u1} n m) e₂))], Eq.{succ (max u2 u3)} (Matrix.{u2, u2, u3} n n α) (Invertible.invOf.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.hasMul.{u3, u2} n α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.hasOne.{u3, u2} 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} α (CommRing.toRing.{u3} α _inst_3)))))) (AddMonoidWithOne.toOne.{u3} α (AddGroupWithOne.toAddMonoidWithOne.{u3} α (AddCommGroupWithOne.toAddGroupWithOne.{u3} α (Ring.toAddCommGroupWithOne.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.submatrix.{u3, u2, u1, u1, u2} n m m n α A (coeFn.{max 1 (max (succ u2) (succ u1)) (succ u1) (succ u2), max (succ u2) (succ u1)} (Equiv.{succ u2, succ u1} n m) (fun (_x : Equiv.{succ u2, succ u1} n m) => n -> m) (Equiv.hasCoeToFun.{succ u2, succ u1} n m) e₁) (coeFn.{max 1 (max (succ u2) (succ u1)) (succ u1) (succ u2), max (succ u2) (succ u1)} (Equiv.{succ u2, succ u1} n m) (fun (_x : Equiv.{succ u2, succ u1} n m) => n -> m) (Equiv.hasCoeToFun.{succ u2, succ u1} n m) e₂)) _inst_7) (Matrix.submatrix.{u3, u2, u1, u1, u2} n m m n α (Invertible.invOf.{max u1 u3} (Matrix.{u1, u1, u3} m m α) (Matrix.hasMul.{u3, u1} m α _inst_4 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.hasOne.{u3, u1} m α (fun (a : m) (b : m) => _inst_5 a b) (MulZeroClass.toHasZero.{u3} α (NonUnitalNonAssocSemiring.toMulZeroClass.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (AddMonoidWithOne.toOne.{u3} α (AddGroupWithOne.toAddMonoidWithOne.{u3} α (AddCommGroupWithOne.toAddGroupWithOne.{u3} α (Ring.toAddCommGroupWithOne.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) A _inst_6) (coeFn.{max 1 (max (succ u2) (succ u1)) (succ u1) (succ u2), max (succ u2) (succ u1)} (Equiv.{succ u2, succ u1} n m) (fun (_x : Equiv.{succ u2, succ u1} n m) => n -> m) (Equiv.hasCoeToFun.{succ u2, succ u1} n m) e₂) (coeFn.{max 1 (max (succ u2) (succ u1)) (succ u1) (succ u2), max (succ u2) (succ u1)} (Equiv.{succ u2, succ u1} n m) (fun (_x : Equiv.{succ u2, succ u1} n m) => n -> m) (Equiv.hasCoeToFun.{succ u2, succ u1} n m) e₁))
 but is expected to have type
-  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] [_inst_4 : Fintype.{u1} m] [_inst_5 : DecidableEq.{succ u1} m] (A : Matrix.{u1, u1, u3} m m α) (e₁ : Equiv.{succ u2, succ u1} n m) (e₂ : Equiv.{succ u2, succ u1} n m) [_inst_6 : Invertible.{max u1 u3} (Matrix.{u1, u1, u3} m m α) (Matrix.instMulMatrix.{u3, u1} m α _inst_4 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u1} m α (fun (a : m) (b : m) => _inst_5 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (NonAssocRing.toOne.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) A] [_inst_7 : Invertible.{max u3 u2} (Matrix.{u2, u2, u3} n n α) (Matrix.instMulMatrix.{u3, u2} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u2} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (NonAssocRing.toOne.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (Matrix.submatrix.{u3, u2, u1, u1, u2} n m m n α A (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (Equiv.{succ u2, succ u1} n m) n (fun (_x : n) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : n) => m) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} n m) e₁) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (Equiv.{succ u2, succ u1} n m) n (fun (_x : n) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : n) => m) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} n m) e₂))], Eq.{max (succ u2) (succ u3)} (Matrix.{u2, u2, u3} n n α) (Invertible.invOf.{max u3 u2} (Matrix.{u2, u2, u3} n n α) (Matrix.instMulMatrix.{u3, u2} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u2} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (NonAssocRing.toOne.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (Matrix.submatrix.{u3, u2, u1, u1, u2} n m m n α A (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (Equiv.{succ u2, succ u1} n m) n (fun (_x : n) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : n) => m) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} n m) e₁) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (Equiv.{succ u2, succ u1} n m) n (fun (_x : n) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : n) => m) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} n m) e₂)) _inst_7) (Matrix.submatrix.{u3, u2, u1, u1, u2} n m m n α (Invertible.invOf.{max u1 u3} (Matrix.{u1, u1, u3} m m α) (Matrix.instMulMatrix.{u3, u1} m α _inst_4 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u1} m α (fun (a : m) (b : m) => _inst_5 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (NonAssocRing.toOne.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) A _inst_6) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (Equiv.{succ u2, succ u1} n m) n (fun (_x : n) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : n) => m) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} n m) e₂) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (Equiv.{succ u2, succ u1} n m) n (fun (_x : n) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : n) => m) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} n m) e₁))
+  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] [_inst_4 : Fintype.{u1} m] [_inst_5 : DecidableEq.{succ u1} m] (A : Matrix.{u1, u1, u3} m m α) (e₁ : Equiv.{succ u2, succ u1} n m) (e₂ : Equiv.{succ u2, succ u1} n m) [_inst_6 : Invertible.{max u1 u3} (Matrix.{u1, u1, u3} m m α) (Matrix.instMulMatrix.{u3, u1} m α _inst_4 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u1} m α (fun (a : m) (b : m) => _inst_5 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (Semiring.toOne.{u3} α (CommSemiring.toSemiring.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3)))) A] [_inst_7 : Invertible.{max u3 u2} (Matrix.{u2, u2, u3} n n α) (Matrix.instMulMatrix.{u3, u2} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u2} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (Semiring.toOne.{u3} α (CommSemiring.toSemiring.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3)))) (Matrix.submatrix.{u3, u2, u1, u1, u2} n m m n α A (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (Equiv.{succ u2, succ u1} n m) n (fun (_x : n) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : n) => m) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} n m) e₁) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (Equiv.{succ u2, succ u1} n m) n (fun (_x : n) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : n) => m) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} n m) e₂))], Eq.{max (succ u2) (succ u3)} (Matrix.{u2, u2, u3} n n α) (Invertible.invOf.{max u3 u2} (Matrix.{u2, u2, u3} n n α) (Matrix.instMulMatrix.{u3, u2} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u2} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (Semiring.toOne.{u3} α (CommSemiring.toSemiring.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3)))) (Matrix.submatrix.{u3, u2, u1, u1, u2} n m m n α A (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (Equiv.{succ u2, succ u1} n m) n (fun (_x : n) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : n) => m) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} n m) e₁) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (Equiv.{succ u2, succ u1} n m) n (fun (_x : n) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : n) => m) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} n m) e₂)) _inst_7) (Matrix.submatrix.{u3, u2, u1, u1, u2} n m m n α (Invertible.invOf.{max u1 u3} (Matrix.{u1, u1, u3} m m α) (Matrix.instMulMatrix.{u3, u1} m α _inst_4 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u1} m α (fun (a : m) (b : m) => _inst_5 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (Semiring.toOne.{u3} α (CommSemiring.toSemiring.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3)))) A _inst_6) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (Equiv.{succ u2, succ u1} n m) n (fun (_x : n) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : n) => m) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} n m) e₂) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (Equiv.{succ u2, succ u1} n m) n (fun (_x : n) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : n) => m) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} n m) e₁))
 Case conversion may be inaccurate. Consider using '#align matrix.inv_of_submatrix_equiv_eq Matrix.invOf_submatrix_equiv_eqₓ'. -/
 theorem invOf_submatrix_equiv_eq (A : Matrix m m α) (e₁ e₂ : n ≃ m) [Invertible A]
     [Invertible (A.submatrix e₁ e₂)] : ⅟ (A.submatrix e₁ e₂) = (⅟ A).submatrix e₂ e₁ :=
@@ -1204,7 +1204,7 @@ theorem invOf_submatrix_equiv_eq (A : Matrix m m α) (e₁ e₂ : n ≃ m) [Inve
 lean 3 declaration is
   forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] [_inst_4 : Fintype.{u1} m] [_inst_5 : DecidableEq.{succ u1} m] (A : Matrix.{u1, u1, u3} m m α) (e₁ : Equiv.{succ u2, succ u1} n m) (e₂ : Equiv.{succ u2, succ u1} n m), Equiv.{succ (max u2 u3), succ (max u1 u3)} (Invertible.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.hasMul.{u3, u2} n α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.hasOne.{u3, u2} 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} α (CommRing.toRing.{u3} α _inst_3)))))) (AddMonoidWithOne.toOne.{u3} α (AddGroupWithOne.toAddMonoidWithOne.{u3} α (AddCommGroupWithOne.toAddGroupWithOne.{u3} α (Ring.toAddCommGroupWithOne.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.submatrix.{u3, u2, u1, u1, u2} n m m n α A (coeFn.{max 1 (max (succ u2) (succ u1)) (succ u1) (succ u2), max (succ u2) (succ u1)} (Equiv.{succ u2, succ u1} n m) (fun (_x : Equiv.{succ u2, succ u1} n m) => n -> m) (Equiv.hasCoeToFun.{succ u2, succ u1} n m) e₁) (coeFn.{max 1 (max (succ u2) (succ u1)) (succ u1) (succ u2), max (succ u2) (succ u1)} (Equiv.{succ u2, succ u1} n m) (fun (_x : Equiv.{succ u2, succ u1} n m) => n -> m) (Equiv.hasCoeToFun.{succ u2, succ u1} n m) e₂))) (Invertible.{max u1 u3} (Matrix.{u1, u1, u3} m m α) (Matrix.hasMul.{u3, u1} m α _inst_4 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.hasOne.{u3, u1} m α (fun (a : m) (b : m) => _inst_5 a b) (MulZeroClass.toHasZero.{u3} α (NonUnitalNonAssocSemiring.toMulZeroClass.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (AddMonoidWithOne.toOne.{u3} α (AddGroupWithOne.toAddMonoidWithOne.{u3} α (AddCommGroupWithOne.toAddGroupWithOne.{u3} α (Ring.toAddCommGroupWithOne.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) A)
 but is expected to have type
-  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] [_inst_4 : Fintype.{u1} m] [_inst_5 : DecidableEq.{succ u1} m] (A : Matrix.{u1, u1, u3} m m α) (e₁ : Equiv.{succ u2, succ u1} n m) (e₂ : Equiv.{succ u2, succ u1} n m), Equiv.{succ (max u3 u2), succ (max u1 u3)} (Invertible.{max u3 u2} (Matrix.{u2, u2, u3} n n α) (Matrix.instMulMatrix.{u3, u2} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u2} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (NonAssocRing.toOne.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (Matrix.submatrix.{u3, u2, u1, u1, u2} n m m n α A (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (Equiv.{succ u2, succ u1} n m) n (fun (_x : n) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : n) => m) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} n m) e₁) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (Equiv.{succ u2, succ u1} n m) n (fun (_x : n) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : n) => m) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} n m) e₂))) (Invertible.{max u1 u3} (Matrix.{u1, u1, u3} m m α) (Matrix.instMulMatrix.{u3, u1} m α _inst_4 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u1} m α (fun (a : m) (b : m) => _inst_5 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (NonAssocRing.toOne.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) A)
+  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] [_inst_4 : Fintype.{u1} m] [_inst_5 : DecidableEq.{succ u1} m] (A : Matrix.{u1, u1, u3} m m α) (e₁ : Equiv.{succ u2, succ u1} n m) (e₂ : Equiv.{succ u2, succ u1} n m), Equiv.{succ (max u3 u2), succ (max u1 u3)} (Invertible.{max u3 u2} (Matrix.{u2, u2, u3} n n α) (Matrix.instMulMatrix.{u3, u2} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u2} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (Semiring.toOne.{u3} α (CommSemiring.toSemiring.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3)))) (Matrix.submatrix.{u3, u2, u1, u1, u2} n m m n α A (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (Equiv.{succ u2, succ u1} n m) n (fun (_x : n) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : n) => m) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} n m) e₁) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (Equiv.{succ u2, succ u1} n m) n (fun (_x : n) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : n) => m) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} n m) e₂))) (Invertible.{max u1 u3} (Matrix.{u1, u1, u3} m m α) (Matrix.instMulMatrix.{u3, u1} m α _inst_4 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u1} m α (fun (a : m) (b : m) => _inst_5 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (Semiring.toOne.{u3} α (CommSemiring.toSemiring.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3)))) A)
 Case conversion may be inaccurate. Consider using '#align matrix.submatrix_equiv_invertible_equiv_invertible Matrix.submatrixEquivInvertibleEquivInvertibleₓ'. -/
 /-- Together `matrix.submatrix_equiv_invertible` and
 `matrix.invertible_of_submatrix_equiv_invertible` form an equivalence, although both sides of the
@@ -1271,7 +1271,7 @@ variable [Fintype m] [DecidableEq m]
 lean 3 declaration is
   forall {m : Type.{u1}} {α : Type.{u2}} [_inst_3 : CommRing.{u2} α] [_inst_4 : Fintype.{u1} m] [_inst_5 : DecidableEq.{succ u1} m] {M : Matrix.{u1, u1, u2} m m α}, (IsUnit.{max u1 u2} (Matrix.{u1, u1, u2} m m α) (Ring.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} m m α) (Matrix.ring.{u2, u1} m α _inst_4 (fun (a : m) (b : m) => _inst_5 a b) (CommRing.toRing.{u2} α _inst_3))) M) -> (forall (N : Matrix.{u1, u1, u2} m m α), Eq.{succ u2} α (Matrix.det.{u2, u1} m (fun (a : m) (b : m) => _inst_5 a b) _inst_4 α _inst_3 (Matrix.mul.{u2, u1, u1, u1} m m m α _inst_4 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Matrix.mul.{u2, u1, u1, u1} m m m α _inst_4 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) M N) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} m m α) (Matrix.hasInv.{u1, u2} m α _inst_4 (fun (a : m) (b : m) => _inst_5 a b) _inst_3) M))) (Matrix.det.{u2, u1} m (fun (a : m) (b : m) => _inst_5 a b) _inst_4 α _inst_3 N))
 but is expected to have type
-  forall {m : Type.{u1}} {α : Type.{u2}} [_inst_3 : CommRing.{u2} α] [_inst_4 : Fintype.{u1} m] [_inst_5 : DecidableEq.{succ u1} m] {M : Matrix.{u1, u1, u2} m m α}, (IsUnit.{max u1 u2} (Matrix.{u1, u1, u2} m m α) (MonoidWithZero.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} m m α) (Semiring.toMonoidWithZero.{max u1 u2} (Matrix.{u1, u1, u2} m m α) (Matrix.semiring.{u2, u1} m α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) _inst_4 (fun (a : m) (b : m) => _inst_5 a b)))) M) -> (forall (N : Matrix.{u1, u1, u2} m m α), Eq.{succ u2} α (Matrix.det.{u2, u1} m (fun (a : m) (b : m) => _inst_5 a b) _inst_4 α _inst_3 (Matrix.mul.{u2, u1, u1, u1} m m m α _inst_4 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Matrix.mul.{u2, u1, u1, u1} m m m α _inst_4 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) M N) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} m m α) (Matrix.inv.{u1, u2} m α _inst_4 (fun (a : m) (b : m) => _inst_5 a b) _inst_3) M))) (Matrix.det.{u2, u1} m (fun (a : m) (b : m) => _inst_5 a b) _inst_4 α _inst_3 N))
+  forall {m : Type.{u1}} {α : Type.{u2}} [_inst_3 : CommRing.{u2} α] [_inst_4 : Fintype.{u1} m] [_inst_5 : DecidableEq.{succ u1} m] {M : Matrix.{u1, u1, u2} m m α}, (IsUnit.{max u1 u2} (Matrix.{u1, u1, u2} m m α) (MonoidWithZero.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} m m α) (Semiring.toMonoidWithZero.{max u1 u2} (Matrix.{u1, u1, u2} m m α) (Matrix.semiring.{u2, u1} m α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) _inst_4 (fun (a : m) (b : m) => _inst_5 a b)))) M) -> (forall (N : Matrix.{u1, u1, u2} m m α), Eq.{succ u2} α (Matrix.det.{u2, u1} m (fun (a : m) (b : m) => _inst_5 a b) _inst_4 α _inst_3 (Matrix.mul.{u2, u1, u1, u1} m m m α _inst_4 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Matrix.mul.{u2, u1, u1, u1} m m m α _inst_4 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) M N) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} m m α) (Matrix.inv.{u1, u2} m α _inst_4 (fun (a : m) (b : m) => _inst_5 a b) _inst_3) M))) (Matrix.det.{u2, u1} m (fun (a : m) (b : m) => _inst_5 a b) _inst_4 α _inst_3 N))
 Case conversion may be inaccurate. Consider using '#align matrix.det_conj Matrix.det_conjₓ'. -/
 /-- A variant of `matrix.det_units_conj`. -/
 theorem det_conj {M : Matrix m m α} (h : IsUnit M) (N : Matrix m m α) : det (M ⬝ N ⬝ M⁻¹) = det N :=
@@ -1282,7 +1282,7 @@ theorem det_conj {M : Matrix m m α} (h : IsUnit M) (N : Matrix m m α) : det (M
 lean 3 declaration is
   forall {m : Type.{u1}} {α : Type.{u2}} [_inst_3 : CommRing.{u2} α] [_inst_4 : Fintype.{u1} m] [_inst_5 : DecidableEq.{succ u1} m] {M : Matrix.{u1, u1, u2} m m α}, (IsUnit.{max u1 u2} (Matrix.{u1, u1, u2} m m α) (Ring.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} m m α) (Matrix.ring.{u2, u1} m α _inst_4 (fun (a : m) (b : m) => _inst_5 a b) (CommRing.toRing.{u2} α _inst_3))) M) -> (forall (N : Matrix.{u1, u1, u2} m m α), Eq.{succ u2} α (Matrix.det.{u2, u1} m (fun (a : m) (b : m) => _inst_5 a b) _inst_4 α _inst_3 (Matrix.mul.{u2, u1, u1, u1} m m m α _inst_4 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Matrix.mul.{u2, u1, u1, u1} m m m α _inst_4 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} m m α) (Matrix.hasInv.{u1, u2} m α _inst_4 (fun (a : m) (b : m) => _inst_5 a b) _inst_3) M) N) M)) (Matrix.det.{u2, u1} m (fun (a : m) (b : m) => _inst_5 a b) _inst_4 α _inst_3 N))
 but is expected to have type
-  forall {m : Type.{u1}} {α : Type.{u2}} [_inst_3 : CommRing.{u2} α] [_inst_4 : Fintype.{u1} m] [_inst_5 : DecidableEq.{succ u1} m] {M : Matrix.{u1, u1, u2} m m α}, (IsUnit.{max u1 u2} (Matrix.{u1, u1, u2} m m α) (MonoidWithZero.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} m m α) (Semiring.toMonoidWithZero.{max u1 u2} (Matrix.{u1, u1, u2} m m α) (Matrix.semiring.{u2, u1} m α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) _inst_4 (fun (a : m) (b : m) => _inst_5 a b)))) M) -> (forall (N : Matrix.{u1, u1, u2} m m α), Eq.{succ u2} α (Matrix.det.{u2, u1} m (fun (a : m) (b : m) => _inst_5 a b) _inst_4 α _inst_3 (Matrix.mul.{u2, u1, u1, u1} m m m α _inst_4 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Matrix.mul.{u2, u1, u1, u1} m m m α _inst_4 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} m m α) (Matrix.inv.{u1, u2} m α _inst_4 (fun (a : m) (b : m) => _inst_5 a b) _inst_3) M) N) M)) (Matrix.det.{u2, u1} m (fun (a : m) (b : m) => _inst_5 a b) _inst_4 α _inst_3 N))
+  forall {m : Type.{u1}} {α : Type.{u2}} [_inst_3 : CommRing.{u2} α] [_inst_4 : Fintype.{u1} m] [_inst_5 : DecidableEq.{succ u1} m] {M : Matrix.{u1, u1, u2} m m α}, (IsUnit.{max u1 u2} (Matrix.{u1, u1, u2} m m α) (MonoidWithZero.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} m m α) (Semiring.toMonoidWithZero.{max u1 u2} (Matrix.{u1, u1, u2} m m α) (Matrix.semiring.{u2, u1} m α (CommSemiring.toSemiring.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)) _inst_4 (fun (a : m) (b : m) => _inst_5 a b)))) M) -> (forall (N : Matrix.{u1, u1, u2} m m α), Eq.{succ u2} α (Matrix.det.{u2, u1} m (fun (a : m) (b : m) => _inst_5 a b) _inst_4 α _inst_3 (Matrix.mul.{u2, u1, u1, u1} m m m α _inst_4 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Matrix.mul.{u2, u1, u1, u1} m m m α _inst_4 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} m m α) (Matrix.inv.{u1, u2} m α _inst_4 (fun (a : m) (b : m) => _inst_5 a b) _inst_3) M) N) M)) (Matrix.det.{u2, u1} m (fun (a : m) (b : m) => _inst_5 a b) _inst_4 α _inst_3 N))
 Case conversion may be inaccurate. Consider using '#align matrix.det_conj' Matrix.det_conj'ₓ'. -/
 /-- A variant of `matrix.det_units_conj'`. -/
 theorem det_conj' {M : Matrix m m α} (h : IsUnit M) (N : Matrix m m α) :
Diff
@@ -1118,7 +1118,7 @@ theorem list_prod_inv_reverse : ∀ l : List (Matrix n n α), l.Prod⁻¹ = (l.r
 lean 3 declaration is
   forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (b : n -> α), (IsUnit.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{succ (max u1 u2)} (n -> α) (SMul.smul.{u2, max u1 u2} α (n -> α) (Function.hasSMul.{u1, u2, u2} n α α (Mul.toSMul.{u2} α (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A) (Matrix.mulVec.{u2, u1, u1} n n α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) _inst_1 (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) b)) (coeFn.{succ (max u1 u2), succ (max u1 u2)} (LinearMap.{u2, u2, max u1 u2, max u1 u2} α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (RingHom.id.{u2} α (Semiring.toNonAssocSemiring.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (n -> α) (n -> α) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.Function.module.{u1, u2, u2} n α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Pi.Function.module.{u1, u2, u2} n α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (_x : LinearMap.{u2, u2, max u1 u2, max u1 u2} α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (RingHom.id.{u2} α (Semiring.toNonAssocSemiring.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (n -> α) (n -> α) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.Function.module.{u1, u2, u2} n α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Pi.Function.module.{u1, u2, u2} n α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3))))) => (n -> α) -> n -> α) (LinearMap.hasCoeToFun.{u2, u2, max u1 u2, max u1 u2} α α (n -> α) (n -> α) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.Function.module.{u1, u2, u2} n α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Pi.Function.module.{u1, u2, u2} n α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (RingHom.id.{u2} α (Semiring.toNonAssocSemiring.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Matrix.cramer.{u1, u2} n α (fun (a : n) (b : n) => _inst_2 a b) _inst_1 _inst_3 A) b))
 but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (b : n -> α), (IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{max (succ u1) (succ u2)} (n -> α) (HSMul.hSMul.{u2, max u1 u2, max u1 u2} α (n -> α) (n -> α) (instHSMul.{u2, max u1 u2} α (n -> α) (Pi.instSMul.{u1, u2, u2} n α (fun (a._@.Mathlib.Data.Matrix.Basic._hyg.18076 : n) => α) (fun (i : n) => Algebra.toSMul.{u2, u2} α α (CommRing.toCommSemiring.{u2} α _inst_3) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Algebra.id.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A) (Matrix.mulVec.{u2, u1, u1} n n α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) _inst_1 (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) b)) (FunLike.coe.{max (succ u1) (succ u2), max (succ u1) (succ u2), max (succ u1) (succ u2)} (LinearMap.{u2, u2, max u1 u2, max u1 u2} α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (RingHom.id.{u2} α (NonAssocRing.toNonAssocSemiring.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (n -> α) (n -> α) (Pi.addCommMonoid.{u1, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.274 : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.addCommMonoid.{u1, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.274 : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.274 : n) => α) α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.274 : n) => α) α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (n -> α) (fun (_x : n -> α) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6190 : n -> α) => n -> α) _x) (LinearMap.instFunLikeLinearMap.{u2, u2, max u1 u2, max u1 u2} α α (n -> α) (n -> α) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.274 : n) => α) α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.274 : n) => α) α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (RingHom.id.{u2} α (NonAssocRing.toNonAssocSemiring.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Matrix.cramer.{u1, u2} n α (fun (a : n) (b : n) => _inst_2 a b) _inst_1 _inst_3 A) b))
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (b : n -> α), (IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{max (succ u1) (succ u2)} (n -> α) (HSMul.hSMul.{u2, max u1 u2, max u1 u2} α (n -> α) (n -> α) (instHSMul.{u2, max u1 u2} α (n -> α) (Pi.instSMul.{u1, u2, u2} n α (fun (a._@.Mathlib.Data.Matrix.Basic._hyg.18074 : n) => α) (fun (i : n) => Algebra.toSMul.{u2, u2} α α (CommRing.toCommSemiring.{u2} α _inst_3) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Algebra.id.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A) (Matrix.mulVec.{u2, u1, u1} n n α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) _inst_1 (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) b)) (FunLike.coe.{max (succ u1) (succ u2), max (succ u1) (succ u2), max (succ u1) (succ u2)} (LinearMap.{u2, u2, max u1 u2, max u1 u2} α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (RingHom.id.{u2} α (NonAssocRing.toNonAssocSemiring.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (n -> α) (n -> α) (Pi.addCommMonoid.{u1, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.274 : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.addCommMonoid.{u1, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.274 : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.274 : n) => α) α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.274 : n) => α) α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (n -> α) (fun (_x : n -> α) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6190 : n -> α) => n -> α) _x) (LinearMap.instFunLikeLinearMap.{u2, u2, max u1 u2, max u1 u2} α α (n -> α) (n -> α) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.274 : n) => α) α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.274 : n) => α) α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (RingHom.id.{u2} α (NonAssocRing.toNonAssocSemiring.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Matrix.cramer.{u1, u2} n α (fun (a : n) (b : n) => _inst_2 a b) _inst_1 _inst_3 A) b))
 Case conversion may be inaccurate. Consider using '#align matrix.det_smul_inv_mul_vec_eq_cramer Matrix.det_smul_inv_mulVec_eq_cramerₓ'. -/
 /-- One form of **Cramer's rule**. See `matrix.mul_vec_cramer` for a stronger form. -/
 @[simp]
@@ -1132,7 +1132,7 @@ theorem det_smul_inv_mulVec_eq_cramer (A : Matrix n n α) (b : n → α) (h : Is
 lean 3 declaration is
   forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (b : n -> α), (IsUnit.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{succ (max u1 u2)} (n -> α) (SMul.smul.{u2, max u1 u2} α (n -> α) (Function.hasSMul.{u1, u2, u2} n α α (Mul.toSMul.{u2} α (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A) (Matrix.vecMul.{u2, u1, u1} n n α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) _inst_1 b (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A))) (coeFn.{succ (max u1 u2), succ (max u1 u2)} (LinearMap.{u2, u2, max u1 u2, max u1 u2} α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (RingHom.id.{u2} α (Semiring.toNonAssocSemiring.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (n -> α) (n -> α) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.Function.module.{u1, u2, u2} n α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Pi.Function.module.{u1, u2, u2} n α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (_x : LinearMap.{u2, u2, max u1 u2, max u1 u2} α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (RingHom.id.{u2} α (Semiring.toNonAssocSemiring.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (n -> α) (n -> α) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.Function.module.{u1, u2, u2} n α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Pi.Function.module.{u1, u2, u2} n α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3))))) => (n -> α) -> n -> α) (LinearMap.hasCoeToFun.{u2, u2, max u1 u2, max u1 u2} α α (n -> α) (n -> α) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.Function.module.{u1, u2, u2} n α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Pi.Function.module.{u1, u2, u2} n α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (RingHom.id.{u2} α (Semiring.toNonAssocSemiring.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Matrix.cramer.{u1, u2} n α (fun (a : n) (b : n) => _inst_2 a b) _inst_1 _inst_3 (Matrix.transpose.{u2, u1, u1} n n α A)) b))
 but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (b : n -> α), (IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{max (succ u1) (succ u2)} (n -> α) (HSMul.hSMul.{u2, max u1 u2, max u1 u2} α (n -> α) (n -> α) (instHSMul.{u2, max u1 u2} α (n -> α) (Pi.instSMul.{u1, u2, u2} n α (fun (a._@.Mathlib.Data.Matrix.Basic._hyg.18134 : n) => α) (fun (i : n) => Algebra.toSMul.{u2, u2} α α (CommRing.toCommSemiring.{u2} α _inst_3) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Algebra.id.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A) (Matrix.vecMul.{u2, u1, u1} n n α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) _inst_1 b (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A))) (FunLike.coe.{max (succ u1) (succ u2), max (succ u1) (succ u2), max (succ u1) (succ u2)} (LinearMap.{u2, u2, max u1 u2, max u1 u2} α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (RingHom.id.{u2} α (NonAssocRing.toNonAssocSemiring.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (n -> α) (n -> α) (Pi.addCommMonoid.{u1, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.274 : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.addCommMonoid.{u1, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.274 : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.274 : n) => α) α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.274 : n) => α) α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (n -> α) (fun (_x : n -> α) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6190 : n -> α) => n -> α) _x) (LinearMap.instFunLikeLinearMap.{u2, u2, max u1 u2, max u1 u2} α α (n -> α) (n -> α) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.274 : n) => α) α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.274 : n) => α) α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (RingHom.id.{u2} α (NonAssocRing.toNonAssocSemiring.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Matrix.cramer.{u1, u2} n α (fun (a : n) (b : n) => _inst_2 a b) _inst_1 _inst_3 (Matrix.transpose.{u2, u1, u1} n n α A)) b))
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (b : n -> α), (IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{max (succ u1) (succ u2)} (n -> α) (HSMul.hSMul.{u2, max u1 u2, max u1 u2} α (n -> α) (n -> α) (instHSMul.{u2, max u1 u2} α (n -> α) (Pi.instSMul.{u1, u2, u2} n α (fun (a._@.Mathlib.Data.Matrix.Basic._hyg.18132 : n) => α) (fun (i : n) => Algebra.toSMul.{u2, u2} α α (CommRing.toCommSemiring.{u2} α _inst_3) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Algebra.id.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A) (Matrix.vecMul.{u2, u1, u1} n n α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) _inst_1 b (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A))) (FunLike.coe.{max (succ u1) (succ u2), max (succ u1) (succ u2), max (succ u1) (succ u2)} (LinearMap.{u2, u2, max u1 u2, max u1 u2} α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (RingHom.id.{u2} α (NonAssocRing.toNonAssocSemiring.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (n -> α) (n -> α) (Pi.addCommMonoid.{u1, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.274 : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.addCommMonoid.{u1, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.274 : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.274 : n) => α) α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.274 : n) => α) α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (n -> α) (fun (_x : n -> α) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6190 : n -> α) => n -> α) _x) (LinearMap.instFunLikeLinearMap.{u2, u2, max u1 u2, max u1 u2} α α (n -> α) (n -> α) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.274 : n) => α) α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.274 : n) => α) α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (RingHom.id.{u2} α (NonAssocRing.toNonAssocSemiring.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Matrix.cramer.{u1, u2} n α (fun (a : n) (b : n) => _inst_2 a b) _inst_1 _inst_3 (Matrix.transpose.{u2, u1, u1} n n α A)) b))
 Case conversion may be inaccurate. Consider using '#align matrix.det_smul_inv_vec_mul_eq_cramer_transpose Matrix.det_smul_inv_vecMul_eq_cramer_transposeₓ'. -/
 /-- One form of **Cramer's rule**. See `matrix.mul_vec_cramer` for a stronger form. -/
 @[simp]
Diff
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Tim Baanen, Lu-Ming Zhang
 
 ! This file was ported from Lean 3 source module linear_algebra.matrix.nonsingular_inverse
-! leanprover-community/mathlib commit a07a7ae98384cd6485d7825e161e528ba78ef3bc
+! leanprover-community/mathlib commit 9d2f0748e6c50d7a2657c564b1ff2c695b39148d
 ! Please do not edit these lines, except to modify the commit id
 ! if you have ported upstream changes.
 -/
@@ -13,6 +13,9 @@ import Mathbin.LinearAlgebra.Matrix.Adjugate
 /-!
 # Nonsingular inverses
 
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
 In this file, we define an inverse for square matrices of invertible determinant.
 
 For matrices that are not square or not of full rank, there is a more general notion of
Diff
@@ -1115,7 +1115,7 @@ theorem list_prod_inv_reverse : ∀ l : List (Matrix n n α), l.Prod⁻¹ = (l.r
 lean 3 declaration is
   forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (b : n -> α), (IsUnit.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{succ (max u1 u2)} (n -> α) (SMul.smul.{u2, max u1 u2} α (n -> α) (Function.hasSMul.{u1, u2, u2} n α α (Mul.toSMul.{u2} α (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A) (Matrix.mulVec.{u2, u1, u1} n n α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) _inst_1 (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) b)) (coeFn.{succ (max u1 u2), succ (max u1 u2)} (LinearMap.{u2, u2, max u1 u2, max u1 u2} α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (RingHom.id.{u2} α (Semiring.toNonAssocSemiring.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (n -> α) (n -> α) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.Function.module.{u1, u2, u2} n α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Pi.Function.module.{u1, u2, u2} n α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (_x : LinearMap.{u2, u2, max u1 u2, max u1 u2} α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (RingHom.id.{u2} α (Semiring.toNonAssocSemiring.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (n -> α) (n -> α) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.Function.module.{u1, u2, u2} n α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Pi.Function.module.{u1, u2, u2} n α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3))))) => (n -> α) -> n -> α) (LinearMap.hasCoeToFun.{u2, u2, max u1 u2, max u1 u2} α α (n -> α) (n -> α) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.Function.module.{u1, u2, u2} n α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Pi.Function.module.{u1, u2, u2} n α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (RingHom.id.{u2} α (Semiring.toNonAssocSemiring.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Matrix.cramer.{u1, u2} n α (fun (a : n) (b : n) => _inst_2 a b) _inst_1 _inst_3 A) b))
 but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (b : n -> α), (IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{max (succ u1) (succ u2)} (n -> α) (HSMul.hSMul.{u2, max u1 u2, max u1 u2} α (n -> α) (n -> α) (instHSMul.{u2, max u1 u2} α (n -> α) (Pi.instSMul.{u1, u2, u2} n α (fun (a._@.Mathlib.Data.Matrix.Basic._hyg.18076 : n) => α) (fun (i : n) => Algebra.toSMul.{u2, u2} α α (CommRing.toCommSemiring.{u2} α _inst_3) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Algebra.id.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A) (Matrix.mulVec.{u2, u1, u1} n n α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) _inst_1 (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) b)) (FunLike.coe.{max (succ u1) (succ u2), max (succ u1) (succ u2), max (succ u1) (succ u2)} (LinearMap.{u2, u2, max u1 u2, max u1 u2} α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (RingHom.id.{u2} α (NonAssocRing.toNonAssocSemiring.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (n -> α) (n -> α) (Pi.addCommMonoid.{u1, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.274 : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.addCommMonoid.{u1, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.274 : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.274 : n) => α) α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => _private.Mathlib.RingTheory.Ideal.Operations.0.Ideal.instModuleToSemiringToAddCommMonoidToNonUnitalNonAssocSemiringToNonUnitalNonAssocRingToNonUnitalRingToNonUnitalCommRing.{u2, u2} α α (CommRing.toCommSemiring.{u2} α _inst_3) _inst_3 (Algebra.id.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.274 : n) => α) α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => _private.Mathlib.RingTheory.Ideal.Operations.0.Ideal.instModuleToSemiringToAddCommMonoidToNonUnitalNonAssocSemiringToNonUnitalNonAssocRingToNonUnitalRingToNonUnitalCommRing.{u2, u2} α α (CommRing.toCommSemiring.{u2} α _inst_3) _inst_3 (Algebra.id.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) (n -> α) (fun (_x : n -> α) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6190 : n -> α) => n -> α) _x) (LinearMap.instFunLikeLinearMap.{u2, u2, max u1 u2, max u1 u2} α α (n -> α) (n -> α) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.274 : n) => α) α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => _private.Mathlib.RingTheory.Ideal.Operations.0.Ideal.instModuleToSemiringToAddCommMonoidToNonUnitalNonAssocSemiringToNonUnitalNonAssocRingToNonUnitalRingToNonUnitalCommRing.{u2, u2} α α (CommRing.toCommSemiring.{u2} α _inst_3) _inst_3 (Algebra.id.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.274 : n) => α) α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => _private.Mathlib.RingTheory.Ideal.Operations.0.Ideal.instModuleToSemiringToAddCommMonoidToNonUnitalNonAssocSemiringToNonUnitalNonAssocRingToNonUnitalRingToNonUnitalCommRing.{u2, u2} α α (CommRing.toCommSemiring.{u2} α _inst_3) _inst_3 (Algebra.id.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (RingHom.id.{u2} α (NonAssocRing.toNonAssocSemiring.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Matrix.cramer.{u1, u2} n α (fun (a : n) (b : n) => _inst_2 a b) _inst_1 _inst_3 A) b))
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (b : n -> α), (IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{max (succ u1) (succ u2)} (n -> α) (HSMul.hSMul.{u2, max u1 u2, max u1 u2} α (n -> α) (n -> α) (instHSMul.{u2, max u1 u2} α (n -> α) (Pi.instSMul.{u1, u2, u2} n α (fun (a._@.Mathlib.Data.Matrix.Basic._hyg.18076 : n) => α) (fun (i : n) => Algebra.toSMul.{u2, u2} α α (CommRing.toCommSemiring.{u2} α _inst_3) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Algebra.id.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A) (Matrix.mulVec.{u2, u1, u1} n n α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) _inst_1 (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) b)) (FunLike.coe.{max (succ u1) (succ u2), max (succ u1) (succ u2), max (succ u1) (succ u2)} (LinearMap.{u2, u2, max u1 u2, max u1 u2} α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (RingHom.id.{u2} α (NonAssocRing.toNonAssocSemiring.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (n -> α) (n -> α) (Pi.addCommMonoid.{u1, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.274 : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.addCommMonoid.{u1, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.274 : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.274 : n) => α) α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.274 : n) => α) α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (n -> α) (fun (_x : n -> α) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6190 : n -> α) => n -> α) _x) (LinearMap.instFunLikeLinearMap.{u2, u2, max u1 u2, max u1 u2} α α (n -> α) (n -> α) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.274 : n) => α) α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.274 : n) => α) α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (RingHom.id.{u2} α (NonAssocRing.toNonAssocSemiring.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Matrix.cramer.{u1, u2} n α (fun (a : n) (b : n) => _inst_2 a b) _inst_1 _inst_3 A) b))
 Case conversion may be inaccurate. Consider using '#align matrix.det_smul_inv_mul_vec_eq_cramer Matrix.det_smul_inv_mulVec_eq_cramerₓ'. -/
 /-- One form of **Cramer's rule**. See `matrix.mul_vec_cramer` for a stronger form. -/
 @[simp]
@@ -1129,7 +1129,7 @@ theorem det_smul_inv_mulVec_eq_cramer (A : Matrix n n α) (b : n → α) (h : Is
 lean 3 declaration is
   forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (b : n -> α), (IsUnit.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{succ (max u1 u2)} (n -> α) (SMul.smul.{u2, max u1 u2} α (n -> α) (Function.hasSMul.{u1, u2, u2} n α α (Mul.toSMul.{u2} α (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A) (Matrix.vecMul.{u2, u1, u1} n n α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) _inst_1 b (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A))) (coeFn.{succ (max u1 u2), succ (max u1 u2)} (LinearMap.{u2, u2, max u1 u2, max u1 u2} α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (RingHom.id.{u2} α (Semiring.toNonAssocSemiring.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (n -> α) (n -> α) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.Function.module.{u1, u2, u2} n α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Pi.Function.module.{u1, u2, u2} n α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (_x : LinearMap.{u2, u2, max u1 u2, max u1 u2} α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (RingHom.id.{u2} α (Semiring.toNonAssocSemiring.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (n -> α) (n -> α) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.Function.module.{u1, u2, u2} n α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Pi.Function.module.{u1, u2, u2} n α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3))))) => (n -> α) -> n -> α) (LinearMap.hasCoeToFun.{u2, u2, max u1 u2, max u1 u2} α α (n -> α) (n -> α) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.Function.module.{u1, u2, u2} n α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Pi.Function.module.{u1, u2, u2} n α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (RingHom.id.{u2} α (Semiring.toNonAssocSemiring.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Matrix.cramer.{u1, u2} n α (fun (a : n) (b : n) => _inst_2 a b) _inst_1 _inst_3 (Matrix.transpose.{u2, u1, u1} n n α A)) b))
 but is expected to have type
-  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (b : n -> α), (IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{max (succ u1) (succ u2)} (n -> α) (HSMul.hSMul.{u2, max u1 u2, max u1 u2} α (n -> α) (n -> α) (instHSMul.{u2, max u1 u2} α (n -> α) (Pi.instSMul.{u1, u2, u2} n α (fun (a._@.Mathlib.Data.Matrix.Basic._hyg.18134 : n) => α) (fun (i : n) => Algebra.toSMul.{u2, u2} α α (CommRing.toCommSemiring.{u2} α _inst_3) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Algebra.id.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A) (Matrix.vecMul.{u2, u1, u1} n n α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) _inst_1 b (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A))) (FunLike.coe.{max (succ u1) (succ u2), max (succ u1) (succ u2), max (succ u1) (succ u2)} (LinearMap.{u2, u2, max u1 u2, max u1 u2} α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (RingHom.id.{u2} α (NonAssocRing.toNonAssocSemiring.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (n -> α) (n -> α) (Pi.addCommMonoid.{u1, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.274 : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.addCommMonoid.{u1, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.274 : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.274 : n) => α) α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => _private.Mathlib.RingTheory.Ideal.Operations.0.Ideal.instModuleToSemiringToAddCommMonoidToNonUnitalNonAssocSemiringToNonUnitalNonAssocRingToNonUnitalRingToNonUnitalCommRing.{u2, u2} α α (CommRing.toCommSemiring.{u2} α _inst_3) _inst_3 (Algebra.id.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.274 : n) => α) α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => _private.Mathlib.RingTheory.Ideal.Operations.0.Ideal.instModuleToSemiringToAddCommMonoidToNonUnitalNonAssocSemiringToNonUnitalNonAssocRingToNonUnitalRingToNonUnitalCommRing.{u2, u2} α α (CommRing.toCommSemiring.{u2} α _inst_3) _inst_3 (Algebra.id.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) (n -> α) (fun (_x : n -> α) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6190 : n -> α) => n -> α) _x) (LinearMap.instFunLikeLinearMap.{u2, u2, max u1 u2, max u1 u2} α α (n -> α) (n -> α) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.274 : n) => α) α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => _private.Mathlib.RingTheory.Ideal.Operations.0.Ideal.instModuleToSemiringToAddCommMonoidToNonUnitalNonAssocSemiringToNonUnitalNonAssocRingToNonUnitalRingToNonUnitalCommRing.{u2, u2} α α (CommRing.toCommSemiring.{u2} α _inst_3) _inst_3 (Algebra.id.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.274 : n) => α) α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => _private.Mathlib.RingTheory.Ideal.Operations.0.Ideal.instModuleToSemiringToAddCommMonoidToNonUnitalNonAssocSemiringToNonUnitalNonAssocRingToNonUnitalRingToNonUnitalCommRing.{u2, u2} α α (CommRing.toCommSemiring.{u2} α _inst_3) _inst_3 (Algebra.id.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (RingHom.id.{u2} α (NonAssocRing.toNonAssocSemiring.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Matrix.cramer.{u1, u2} n α (fun (a : n) (b : n) => _inst_2 a b) _inst_1 _inst_3 (Matrix.transpose.{u2, u1, u1} n n α A)) b))
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (b : n -> α), (IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{max (succ u1) (succ u2)} (n -> α) (HSMul.hSMul.{u2, max u1 u2, max u1 u2} α (n -> α) (n -> α) (instHSMul.{u2, max u1 u2} α (n -> α) (Pi.instSMul.{u1, u2, u2} n α (fun (a._@.Mathlib.Data.Matrix.Basic._hyg.18134 : n) => α) (fun (i : n) => Algebra.toSMul.{u2, u2} α α (CommRing.toCommSemiring.{u2} α _inst_3) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Algebra.id.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A) (Matrix.vecMul.{u2, u1, u1} n n α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) _inst_1 b (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A))) (FunLike.coe.{max (succ u1) (succ u2), max (succ u1) (succ u2), max (succ u1) (succ u2)} (LinearMap.{u2, u2, max u1 u2, max u1 u2} α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (RingHom.id.{u2} α (NonAssocRing.toNonAssocSemiring.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (n -> α) (n -> α) (Pi.addCommMonoid.{u1, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.274 : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.addCommMonoid.{u1, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.274 : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.274 : n) => α) α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.274 : n) => α) α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (n -> α) (fun (_x : n -> α) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6190 : n -> α) => n -> α) _x) (LinearMap.instFunLikeLinearMap.{u2, u2, max u1 u2, max u1 u2} α α (n -> α) (n -> α) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.274 : n) => α) α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.274 : n) => α) α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (RingHom.id.{u2} α (NonAssocRing.toNonAssocSemiring.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Matrix.cramer.{u1, u2} n α (fun (a : n) (b : n) => _inst_2 a b) _inst_1 _inst_3 (Matrix.transpose.{u2, u1, u1} n n α A)) b))
 Case conversion may be inaccurate. Consider using '#align matrix.det_smul_inv_vec_mul_eq_cramer_transpose Matrix.det_smul_inv_vecMul_eq_cramer_transposeₓ'. -/
 /-- One form of **Cramer's rule**. See `matrix.mul_vec_cramer` for a stronger form. -/
 @[simp]
Diff
@@ -69,31 +69,67 @@ section Invertible
 
 variable [Fintype n] [DecidableEq n] [CommRing α]
 
+/- warning: matrix.inv_of_mul_self -> Matrix.invOf_mul_self is a dubious translation:
+lean 3 declaration is
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasMul.{u2, u1} n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) A], Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Invertible.invOf.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasMul.{u2, u1} n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) A _inst_4) A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (OfNat.mk.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.one.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))))))
+but is expected to have type
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) A], Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Invertible.invOf.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) A _inst_4) A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))))
+Case conversion may be inaccurate. Consider using '#align matrix.inv_of_mul_self Matrix.invOf_mul_selfₓ'. -/
 /-- A copy of `inv_of_mul_self` using `⬝` not `*`. -/
 protected theorem invOf_mul_self (A : Matrix n n α) [Invertible A] : ⅟ A ⬝ A = 1 :=
   invOf_mul_self A
 #align matrix.inv_of_mul_self Matrix.invOf_mul_self
 
+/- warning: matrix.mul_inv_of_self -> Matrix.mul_invOf_self is a dubious translation:
+lean 3 declaration is
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasMul.{u2, u1} n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) A], Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A (Invertible.invOf.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasMul.{u2, u1} n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) A _inst_4)) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (OfNat.mk.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.one.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))))))
+but is expected to have type
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) A], Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A (Invertible.invOf.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) A _inst_4)) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))))
+Case conversion may be inaccurate. Consider using '#align matrix.mul_inv_of_self Matrix.mul_invOf_selfₓ'. -/
 /-- A copy of `mul_inv_of_self` using `⬝` not `*`. -/
 protected theorem mul_invOf_self (A : Matrix n n α) [Invertible A] : A ⬝ ⅟ A = 1 :=
   mul_invOf_self A
 #align matrix.mul_inv_of_self Matrix.mul_invOf_self
 
+/- warning: matrix.inv_of_mul_self_assoc -> Matrix.invOf_mul_self_assoc is a dubious translation:
+lean 3 declaration is
+  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] (A : Matrix.{u2, u2, u3} n n α) (B : Matrix.{u2, u1, u3} n m α) [_inst_4 : Invertible.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.hasMul.{u3, u2} n α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.hasOne.{u3, u2} 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} α (CommRing.toRing.{u3} α _inst_3)))))) (AddMonoidWithOne.toOne.{u3} α (AddGroupWithOne.toAddMonoidWithOne.{u3} α (AddCommGroupWithOne.toAddGroupWithOne.{u3} α (Ring.toAddCommGroupWithOne.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) A], Eq.{succ (max u2 u1 u3)} (Matrix.{u2, u1, u3} n m α) (Matrix.mul.{u3, u2, u2, u1} n n m α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) (Invertible.invOf.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.hasMul.{u3, u2} n α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.hasOne.{u3, u2} 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} α (CommRing.toRing.{u3} α _inst_3)))))) (AddMonoidWithOne.toOne.{u3} α (AddGroupWithOne.toAddMonoidWithOne.{u3} α (AddCommGroupWithOne.toAddGroupWithOne.{u3} α (Ring.toAddCommGroupWithOne.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) A _inst_4) (Matrix.mul.{u3, u2, u2, u1} n n m α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) A B)) B
+but is expected to have type
+  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] (A : Matrix.{u2, u2, u3} n n α) (B : Matrix.{u2, u1, u3} n m α) [_inst_4 : Invertible.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.instMulMatrix.{u3, u2} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u2} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (NonAssocRing.toOne.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) A], Eq.{max (max (succ u1) (succ u2)) (succ u3)} (Matrix.{u2, u1, u3} n m α) (Matrix.mul.{u3, u2, u2, u1} n n m α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) (Invertible.invOf.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.instMulMatrix.{u3, u2} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u2} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (NonAssocRing.toOne.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) A _inst_4) (Matrix.mul.{u3, u2, u2, u1} n n m α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) A B)) B
+Case conversion may be inaccurate. Consider using '#align matrix.inv_of_mul_self_assoc Matrix.invOf_mul_self_assocₓ'. -/
 /-- A copy of `inv_of_mul_self_assoc` using `⬝` not `*`. -/
 protected theorem invOf_mul_self_assoc (A : Matrix n n α) (B : Matrix n m α) [Invertible A] :
     ⅟ A ⬝ (A ⬝ B) = B := by rw [← Matrix.mul_assoc, Matrix.invOf_mul_self, Matrix.one_mul]
 #align matrix.inv_of_mul_self_assoc Matrix.invOf_mul_self_assoc
 
+/- warning: matrix.mul_inv_of_self_assoc -> Matrix.mul_invOf_self_assoc is a dubious translation:
+lean 3 declaration is
+  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] (A : Matrix.{u2, u2, u3} n n α) (B : Matrix.{u2, u1, u3} n m α) [_inst_4 : Invertible.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.hasMul.{u3, u2} n α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.hasOne.{u3, u2} 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} α (CommRing.toRing.{u3} α _inst_3)))))) (AddMonoidWithOne.toOne.{u3} α (AddGroupWithOne.toAddMonoidWithOne.{u3} α (AddCommGroupWithOne.toAddGroupWithOne.{u3} α (Ring.toAddCommGroupWithOne.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) A], Eq.{succ (max u2 u1 u3)} (Matrix.{u2, u1, u3} n m α) (Matrix.mul.{u3, u2, u2, u1} n n m α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) A (Matrix.mul.{u3, u2, u2, u1} n n m α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) (Invertible.invOf.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.hasMul.{u3, u2} n α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.hasOne.{u3, u2} 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} α (CommRing.toRing.{u3} α _inst_3)))))) (AddMonoidWithOne.toOne.{u3} α (AddGroupWithOne.toAddMonoidWithOne.{u3} α (AddCommGroupWithOne.toAddGroupWithOne.{u3} α (Ring.toAddCommGroupWithOne.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) A _inst_4) B)) B
+but is expected to have type
+  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] (A : Matrix.{u2, u2, u3} n n α) (B : Matrix.{u2, u1, u3} n m α) [_inst_4 : Invertible.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.instMulMatrix.{u3, u2} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u2} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (NonAssocRing.toOne.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) A], Eq.{max (max (succ u1) (succ u2)) (succ u3)} (Matrix.{u2, u1, u3} n m α) (Matrix.mul.{u3, u2, u2, u1} n n m α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) A (Matrix.mul.{u3, u2, u2, u1} n n m α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) (Invertible.invOf.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.instMulMatrix.{u3, u2} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u2} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (NonAssocRing.toOne.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) A _inst_4) B)) B
+Case conversion may be inaccurate. Consider using '#align matrix.mul_inv_of_self_assoc Matrix.mul_invOf_self_assocₓ'. -/
 /-- A copy of `mul_inv_of_self_assoc` using `⬝` not `*`. -/
 protected theorem mul_invOf_self_assoc (A : Matrix n n α) (B : Matrix n m α) [Invertible A] :
     A ⬝ (⅟ A ⬝ B) = B := by rw [← Matrix.mul_assoc, Matrix.mul_invOf_self, Matrix.one_mul]
 #align matrix.mul_inv_of_self_assoc Matrix.mul_invOf_self_assoc
 
+/- warning: matrix.mul_inv_of_mul_self_cancel -> Matrix.mul_invOf_mul_self_cancel is a dubious translation:
+lean 3 declaration is
+  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] (A : Matrix.{u1, u2, u3} m n α) (B : Matrix.{u2, u2, u3} n n α) [_inst_4 : Invertible.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.hasMul.{u3, u2} n α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.hasOne.{u3, u2} 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} α (CommRing.toRing.{u3} α _inst_3)))))) (AddMonoidWithOne.toOne.{u3} α (AddGroupWithOne.toAddMonoidWithOne.{u3} α (AddCommGroupWithOne.toAddGroupWithOne.{u3} α (Ring.toAddCommGroupWithOne.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) B], Eq.{succ (max u1 u2 u3)} (Matrix.{u1, u2, u3} m n α) (Matrix.mul.{u3, u1, u2, u2} m n n α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) (Matrix.mul.{u3, u1, u2, u2} m n n α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) A (Invertible.invOf.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.hasMul.{u3, u2} n α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.hasOne.{u3, u2} 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} α (CommRing.toRing.{u3} α _inst_3)))))) (AddMonoidWithOne.toOne.{u3} α (AddGroupWithOne.toAddMonoidWithOne.{u3} α (AddCommGroupWithOne.toAddGroupWithOne.{u3} α (Ring.toAddCommGroupWithOne.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) B _inst_4)) B) A
+but is expected to have type
+  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] (A : Matrix.{u1, u2, u3} m n α) (B : Matrix.{u2, u2, u3} n n α) [_inst_4 : Invertible.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.instMulMatrix.{u3, u2} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u2} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (NonAssocRing.toOne.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) B], Eq.{max (max (succ u1) (succ u2)) (succ u3)} (Matrix.{u1, u2, u3} m n α) (Matrix.mul.{u3, u1, u2, u2} m n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) (Matrix.mul.{u3, u1, u2, u2} m n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) A (Invertible.invOf.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.instMulMatrix.{u3, u2} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u2} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (NonAssocRing.toOne.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) B _inst_4)) B) A
+Case conversion may be inaccurate. Consider using '#align matrix.mul_inv_of_mul_self_cancel Matrix.mul_invOf_mul_self_cancelₓ'. -/
 /-- A copy of `mul_inv_of_mul_self_cancel` using `⬝` not `*`. -/
 protected theorem mul_invOf_mul_self_cancel (A : Matrix m n α) (B : Matrix n n α) [Invertible B] :
     A ⬝ ⅟ B ⬝ B = A := by rw [Matrix.mul_assoc, Matrix.invOf_mul_self, Matrix.mul_one]
 #align matrix.mul_inv_of_mul_self_cancel Matrix.mul_invOf_mul_self_cancel
 
+/- warning: matrix.mul_mul_inv_of_self_cancel -> Matrix.mul_mul_invOf_self_cancel is a dubious translation:
+lean 3 declaration is
+  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] (A : Matrix.{u1, u2, u3} m n α) (B : Matrix.{u2, u2, u3} n n α) [_inst_4 : Invertible.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.hasMul.{u3, u2} n α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.hasOne.{u3, u2} 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} α (CommRing.toRing.{u3} α _inst_3)))))) (AddMonoidWithOne.toOne.{u3} α (AddGroupWithOne.toAddMonoidWithOne.{u3} α (AddCommGroupWithOne.toAddGroupWithOne.{u3} α (Ring.toAddCommGroupWithOne.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) B], Eq.{succ (max u1 u2 u3)} (Matrix.{u1, u2, u3} m n α) (Matrix.mul.{u3, u1, u2, u2} m n n α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) (Matrix.mul.{u3, u1, u2, u2} m n n α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) A B) (Invertible.invOf.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.hasMul.{u3, u2} n α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.hasOne.{u3, u2} 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} α (CommRing.toRing.{u3} α _inst_3)))))) (AddMonoidWithOne.toOne.{u3} α (AddGroupWithOne.toAddMonoidWithOne.{u3} α (AddCommGroupWithOne.toAddGroupWithOne.{u3} α (Ring.toAddCommGroupWithOne.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) B _inst_4)) A
+but is expected to have type
+  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] (A : Matrix.{u1, u2, u3} m n α) (B : Matrix.{u2, u2, u3} n n α) [_inst_4 : Invertible.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.instMulMatrix.{u3, u2} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u2} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (NonAssocRing.toOne.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) B], Eq.{max (max (succ u1) (succ u2)) (succ u3)} (Matrix.{u1, u2, u3} m n α) (Matrix.mul.{u3, u1, u2, u2} m n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) (Matrix.mul.{u3, u1, u2, u2} m n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) A B) (Invertible.invOf.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.instMulMatrix.{u3, u2} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u2} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (NonAssocRing.toOne.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) B _inst_4)) A
+Case conversion may be inaccurate. Consider using '#align matrix.mul_mul_inv_of_self_cancel Matrix.mul_mul_invOf_self_cancelₓ'. -/
 /-- A copy of `mul_mul_inv_of_self_cancel` using `⬝` not `*`. -/
 protected theorem mul_mul_invOf_self_cancel (A : Matrix m n α) (B : Matrix n n α) [Invertible B] :
     A ⬝ B ⬝ ⅟ B = A := by rw [Matrix.mul_assoc, Matrix.mul_invOf_self, Matrix.mul_one]
@@ -101,6 +137,12 @@ protected theorem mul_mul_invOf_self_cancel (A : Matrix m n α) (B : Matrix n n
 
 variable (A : Matrix n n α) (B : Matrix n n α)
 
+/- warning: matrix.invertible_of_det_invertible -> Matrix.invertibleOfDetInvertible is a dubious translation:
+lean 3 declaration is
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{u2} α (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)], Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasMul.{u2, u1} n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) A
+but is expected to have type
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{u2} α (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)], Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) A
+Case conversion may be inaccurate. Consider using '#align matrix.invertible_of_det_invertible Matrix.invertibleOfDetInvertibleₓ'. -/
 /-- If `A.det` has a constructive inverse, produce one for `A`. -/
 def invertibleOfDetInvertible [Invertible A.det] : Invertible A
     where
@@ -111,12 +153,24 @@ def invertibleOfDetInvertible [Invertible A.det] : Invertible A
     rw [smul_mul_assoc, Matrix.mul_eq_mul, adjugate_mul, smul_smul, invOf_mul_self, one_smul]
 #align matrix.invertible_of_det_invertible Matrix.invertibleOfDetInvertible
 
+/- warning: matrix.inv_of_eq -> Matrix.invOf_eq is a dubious translation:
+lean 3 declaration is
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{u2} α (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)] [_inst_5 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasMul.{u2, u1} n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) A], Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Invertible.invOf.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasMul.{u2, u1} n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) A _inst_5) (SMul.smul.{u2, max u1 u2} α (Matrix.{u1, u1, u2} n n α) (Matrix.hasSmul.{u2, u1, u1, u2} n n α α (Mul.toSMul.{u2} α (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Invertible.invOf.{u2} α (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A) _inst_4) (Matrix.adjugate.{u1, u2} n α (fun (a : n) (b : n) => _inst_2 a b) _inst_1 _inst_3 A))
+but is expected to have type
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{u2} α (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)] [_inst_5 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) A], Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Invertible.invOf.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) A _inst_5) (HSMul.hSMul.{u2, max u1 u2, max u1 u2} α (Matrix.{u1, u1, u2} n n α) (Matrix.{u1, u1, u2} n n α) (instHSMul.{u2, max u1 u2} α (Matrix.{u1, u1, u2} n n α) (Matrix.smul.{u2, u1, u1, u2} n n α α (Algebra.toSMul.{u2, u2} α α (CommRing.toCommSemiring.{u2} α _inst_3) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Algebra.id.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) (Invertible.invOf.{u2} α (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A) _inst_4) (Matrix.adjugate.{u1, u2} n α (fun (a : n) (b : n) => _inst_2 a b) _inst_1 _inst_3 A))
+Case conversion may be inaccurate. Consider using '#align matrix.inv_of_eq Matrix.invOf_eqₓ'. -/
 theorem invOf_eq [Invertible A.det] [Invertible A] : ⅟ A = ⅟ A.det • A.adjugate :=
   by
   letI := invertible_of_det_invertible A
   convert(rfl : ⅟ A = _)
 #align matrix.inv_of_eq Matrix.invOf_eq
 
+/- warning: matrix.det_invertible_of_left_inverse -> Matrix.detInvertibleOfLeftInverse is a dubious translation:
+lean 3 declaration is
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (B : Matrix.{u1, u1, u2} n n α), (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) B A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (OfNat.mk.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.one.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))))))) -> (Invertible.{u2} α (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A))
+but is expected to have type
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (B : Matrix.{u1, u1, u2} n n α), (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) B A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))))) -> (Invertible.{u2} α (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A))
+Case conversion may be inaccurate. Consider using '#align matrix.det_invertible_of_left_inverse Matrix.detInvertibleOfLeftInverseₓ'. -/
 /-- `A.det` is invertible if `A` has a left inverse. -/
 def detInvertibleOfLeftInverse (h : B ⬝ A = 1) : Invertible A.det
     where
@@ -125,6 +179,12 @@ def detInvertibleOfLeftInverse (h : B ⬝ A = 1) : Invertible A.det
   invOf_mul_self := by rw [← det_mul, h, det_one]
 #align matrix.det_invertible_of_left_inverse Matrix.detInvertibleOfLeftInverse
 
+/- warning: matrix.det_invertible_of_right_inverse -> Matrix.detInvertibleOfRightInverse is a dubious translation:
+lean 3 declaration is
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (B : Matrix.{u1, u1, u2} n n α), (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A B) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (OfNat.mk.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.one.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))))))) -> (Invertible.{u2} α (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A))
+but is expected to have type
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (B : Matrix.{u1, u1, u2} n n α), (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A B) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))))) -> (Invertible.{u2} α (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A))
+Case conversion may be inaccurate. Consider using '#align matrix.det_invertible_of_right_inverse Matrix.detInvertibleOfRightInverseₓ'. -/
 /-- `A.det` is invertible if `A` has a right inverse. -/
 def detInvertibleOfRightInverse (h : A ⬝ B = 1) : Invertible A.det
     where
@@ -133,17 +193,35 @@ def detInvertibleOfRightInverse (h : A ⬝ B = 1) : Invertible A.det
   invOf_mul_self := by rw [mul_comm, ← det_mul, h, det_one]
 #align matrix.det_invertible_of_right_inverse Matrix.detInvertibleOfRightInverse
 
+/- warning: matrix.det_invertible_of_invertible -> Matrix.detInvertibleOfInvertible is a dubious translation:
+lean 3 declaration is
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasMul.{u2, u1} n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) A], Invertible.{u2} α (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)
+but is expected to have type
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) A], Invertible.{u2} α (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)
+Case conversion may be inaccurate. Consider using '#align matrix.det_invertible_of_invertible Matrix.detInvertibleOfInvertibleₓ'. -/
 /-- If `A` has a constructive inverse, produce one for `A.det`. -/
 def detInvertibleOfInvertible [Invertible A] : Invertible A.det :=
   detInvertibleOfLeftInverse A (⅟ A) (invOf_mul_self _)
 #align matrix.det_invertible_of_invertible Matrix.detInvertibleOfInvertible
 
+/- warning: matrix.det_inv_of -> Matrix.det_invOf is a dubious translation:
+lean 3 declaration is
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasMul.{u2, u1} n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) A] [_inst_5 : Invertible.{u2} α (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)], Eq.{succ u2} α (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 (Invertible.invOf.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasMul.{u2, u1} n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) A _inst_4)) (Invertible.invOf.{u2} α (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A) _inst_5)
+but is expected to have type
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) A] [_inst_5 : Invertible.{u2} α (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)], Eq.{succ u2} α (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 (Invertible.invOf.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) A _inst_4)) (Invertible.invOf.{u2} α (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A) _inst_5)
+Case conversion may be inaccurate. Consider using '#align matrix.det_inv_of Matrix.det_invOfₓ'. -/
 theorem det_invOf [Invertible A] [Invertible A.det] : (⅟ A).det = ⅟ A.det :=
   by
   letI := det_invertible_of_invertible A
   convert(rfl : _ = ⅟ A.det)
 #align matrix.det_inv_of Matrix.det_invOf
 
+/- warning: matrix.invertible_equiv_det_invertible -> Matrix.invertibleEquivDetInvertible is a dubious translation:
+lean 3 declaration is
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), Equiv.{succ (max u1 u2), succ u2} (Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasMul.{u2, u1} n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) A) (Invertible.{u2} α (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A))
+but is expected to have type
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), Equiv.{succ (max u1 u2), succ u2} (Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) A) (Invertible.{u2} α (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A))
+Case conversion may be inaccurate. Consider using '#align matrix.invertible_equiv_det_invertible Matrix.invertibleEquivDetInvertibleₓ'. -/
 /-- Together `matrix.det_invertible_of_invertible` and `matrix.invertible_of_det_invertible` form an
 equivalence, although both sides of the equiv are subsingleton anyway. -/
 @[simps]
@@ -157,6 +235,12 @@ def invertibleEquivDetInvertible : Invertible A ≃ Invertible A.det
 
 variable {A B}
 
+/- warning: matrix.mul_eq_one_comm -> Matrix.mul_eq_one_comm is a dubious translation:
+lean 3 declaration is
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] {A : Matrix.{u1, u1, u2} n n α} {B : Matrix.{u1, u1, u2} n n α}, Iff (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A B) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (OfNat.mk.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.one.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))))))) (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) B A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (OfNat.mk.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.one.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3))))))))))
+but is expected to have type
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] {A : Matrix.{u1, u1, u2} n n α} {B : Matrix.{u1, u1, u2} n n α}, Iff (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A B) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))))) (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) B A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))))
+Case conversion may be inaccurate. Consider using '#align matrix.mul_eq_one_comm Matrix.mul_eq_one_commₓ'. -/
 theorem mul_eq_one_comm : A ⬝ B = 1 ↔ B ⬝ A = 1 :=
   suffices ∀ A B, A ⬝ B = 1 → B ⬝ A = 1 from ⟨this A B, this B A⟩
   fun A B h => by
@@ -172,22 +256,46 @@ theorem mul_eq_one_comm : A ⬝ B = 1 ↔ B ⬝ A = 1 :=
 
 variable (A B)
 
+/- warning: matrix.invertible_of_left_inverse -> Matrix.invertibleOfLeftInverse is a dubious translation:
+lean 3 declaration is
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (B : Matrix.{u1, u1, u2} n n α), (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) B A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (OfNat.mk.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.one.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))))))) -> (Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasMul.{u2, u1} n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) A)
+but is expected to have type
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (B : Matrix.{u1, u1, u2} n n α), (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) B A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))))) -> (Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) A)
+Case conversion may be inaccurate. Consider using '#align matrix.invertible_of_left_inverse Matrix.invertibleOfLeftInverseₓ'. -/
 /-- We can construct an instance of invertible A if A has a left inverse. -/
 def invertibleOfLeftInverse (h : B ⬝ A = 1) : Invertible A :=
   ⟨B, h, mul_eq_one_comm.mp h⟩
 #align matrix.invertible_of_left_inverse Matrix.invertibleOfLeftInverse
 
+/- warning: matrix.invertible_of_right_inverse -> Matrix.invertibleOfRightInverse is a dubious translation:
+lean 3 declaration is
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (B : Matrix.{u1, u1, u2} n n α), (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A B) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (OfNat.mk.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.one.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))))))) -> (Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasMul.{u2, u1} n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) A)
+but is expected to have type
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (B : Matrix.{u1, u1, u2} n n α), (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A B) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))))) -> (Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) A)
+Case conversion may be inaccurate. Consider using '#align matrix.invertible_of_right_inverse Matrix.invertibleOfRightInverseₓ'. -/
 /-- We can construct an instance of invertible A if A has a right inverse. -/
 def invertibleOfRightInverse (h : A ⬝ B = 1) : Invertible A :=
   ⟨B, mul_eq_one_comm.mp h, h⟩
 #align matrix.invertible_of_right_inverse Matrix.invertibleOfRightInverse
 
+/- warning: matrix.invertible_transpose -> Matrix.invertibleTranspose is a dubious translation:
+lean 3 declaration is
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasMul.{u2, u1} n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) A], Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasMul.{u2, u1} n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.transpose.{u2, u1, u1} n n α A)
+but is expected to have type
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) A], Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Matrix.transpose.{u2, u1, u1} n n α A)
+Case conversion may be inaccurate. Consider using '#align matrix.invertible_transpose Matrix.invertibleTransposeₓ'. -/
 /-- The transpose of an invertible matrix is invertible. -/
 instance invertibleTranspose [Invertible A] : Invertible Aᵀ :=
   haveI : Invertible Aᵀ.det := by simpa using det_invertible_of_invertible A
   invertible_of_det_invertible Aᵀ
 #align matrix.invertible_transpose Matrix.invertibleTranspose
 
+/- warning: matrix.invertible__of_invertible_transpose -> Matrix.invertibleOfInvertibleTranspose is a dubious translation:
+lean 3 declaration is
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasMul.{u2, u1} n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.transpose.{u2, u1, u1} n n α A)], Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasMul.{u2, u1} n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) A
+but is expected to have type
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Matrix.transpose.{u2, u1, u1} n n α A)], Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) A
+Case conversion may be inaccurate. Consider using '#align matrix.invertible__of_invertible_transpose Matrix.invertibleOfInvertibleTransposeₓ'. -/
 /-- A matrix is invertible if the transpose is invertible. -/
 def invertibleOfInvertibleTranspose [Invertible Aᵀ] : Invertible A :=
   by
@@ -195,6 +303,12 @@ def invertibleOfInvertibleTranspose [Invertible Aᵀ] : Invertible A :=
   infer_instance
 #align matrix.invertible__of_invertible_transpose Matrix.invertibleOfInvertibleTranspose
 
+/- warning: matrix.invertible_of_invertible_conj_transpose -> Matrix.invertibleOfInvertibleConjTranspose is a dubious translation:
+lean 3 declaration is
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : StarRing.{u2} α (NonUnitalRing.toNonUnitalSemiring.{u2} α (NonUnitalCommRing.toNonUnitalRing.{u2} α (CommRing.toNonUnitalCommRing.{u2} α _inst_3)))] [_inst_5 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasMul.{u2, u1} n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.conjTranspose.{u2, u1, u1} n n α (InvolutiveStar.toHasStar.{u2} α (StarAddMonoid.toHasInvolutiveStar.{u2} α (AddCommMonoid.toAddMonoid.{u2} α (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalSemiring.toNonUnitalNonAssocSemiring.{u2} α (NonUnitalRing.toNonUnitalSemiring.{u2} α (NonUnitalCommRing.toNonUnitalRing.{u2} α (CommRing.toNonUnitalCommRing.{u2} α _inst_3)))))) (StarRing.toStarAddMonoid.{u2} α (NonUnitalRing.toNonUnitalSemiring.{u2} α (NonUnitalCommRing.toNonUnitalRing.{u2} α (CommRing.toNonUnitalCommRing.{u2} α _inst_3))) _inst_4))) A)], Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasMul.{u2, u1} n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) A
+but is expected to have type
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : StarRing.{u2} α (NonUnitalRing.toNonUnitalSemiring.{u2} α (NonUnitalCommRing.toNonUnitalRing.{u2} α (CommRing.toNonUnitalCommRing.{u2} α _inst_3)))] [_inst_5 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Matrix.conjTranspose.{u2, u1, u1} n n α (InvolutiveStar.toStar.{u2} α (StarAddMonoid.toInvolutiveStar.{u2} α (AddMonoidWithOne.toAddMonoid.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (Ring.toAddGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (StarRing.toStarAddMonoid.{u2} α (NonUnitalRing.toNonUnitalSemiring.{u2} α (NonUnitalCommRing.toNonUnitalRing.{u2} α (CommRing.toNonUnitalCommRing.{u2} α _inst_3))) _inst_4))) A)], Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) A
+Case conversion may be inaccurate. Consider using '#align matrix.invertible_of_invertible_conj_transpose Matrix.invertibleOfInvertibleConjTransposeₓ'. -/
 /-- A matrix is invertible if the conjugate transpose is invertible. -/
 def invertibleOfInvertibleConjTranspose [StarRing α] [Invertible Aᴴ] : Invertible A :=
   by
@@ -202,11 +316,23 @@ def invertibleOfInvertibleConjTranspose [StarRing α] [Invertible Aᴴ] : Invert
   infer_instance
 #align matrix.invertible_of_invertible_conj_transpose Matrix.invertibleOfInvertibleConjTranspose
 
+/- warning: matrix.unit_of_det_invertible -> Matrix.unitOfDetInvertible is a dubious translation:
+lean 3 declaration is
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{u2} α (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)], Units.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Ring.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.ring.{u2, u1} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toRing.{u2} α _inst_3)))
+but is expected to have type
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{u2} α (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)], Units.{max u2 u1} (Matrix.{u1, u1, u2} n n α) (MonoidWithZero.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Semiring.toMonoidWithZero.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.semiring.{u2, u1} n α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) _inst_1 (fun (a : n) (b : n) => _inst_2 a b))))
+Case conversion may be inaccurate. Consider using '#align matrix.unit_of_det_invertible Matrix.unitOfDetInvertibleₓ'. -/
 /-- Given a proof that `A.det` has a constructive inverse, lift `A` to `(matrix n n α)ˣ`-/
 def unitOfDetInvertible [Invertible A.det] : (Matrix n n α)ˣ :=
   @unitOfInvertible _ _ A (invertibleOfDetInvertible A)
 #align matrix.unit_of_det_invertible Matrix.unitOfDetInvertible
 
+/- warning: matrix.is_unit_iff_is_unit_det -> Matrix.isUnit_iff_isUnit_det is a dubious translation:
+lean 3 declaration is
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), Iff (IsUnit.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Ring.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.ring.{u2, u1} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toRing.{u2} α _inst_3))) A) (IsUnit.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A))
+but is expected to have type
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), Iff (IsUnit.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (MonoidWithZero.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Semiring.toMonoidWithZero.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.semiring.{u2, u1} n α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) _inst_1 (fun (a : n) (b : n) => _inst_2 a b)))) A) (IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A))
+Case conversion may be inaccurate. Consider using '#align matrix.is_unit_iff_is_unit_det Matrix.isUnit_iff_isUnit_detₓ'. -/
 /-- When lowered to a prop, `matrix.invertible_equiv_det_invertible` forms an `iff`. -/
 theorem isUnit_iff_isUnit_det : IsUnit A ↔ IsUnit A.det := by
   simp only [← nonempty_invertible_iff_isUnit, (invertible_equiv_det_invertible A).nonempty_congr]
@@ -215,32 +341,74 @@ theorem isUnit_iff_isUnit_det : IsUnit A ↔ IsUnit A.det := by
 /-! #### Variants of the statements above with `is_unit`-/
 
 
+/- warning: matrix.is_unit_det_of_invertible -> Matrix.isUnit_det_of_invertible is a dubious translation:
+lean 3 declaration is
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasMul.{u2, u1} n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) A], IsUnit.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)
+but is expected to have type
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) A], IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)
+Case conversion may be inaccurate. Consider using '#align matrix.is_unit_det_of_invertible Matrix.isUnit_det_of_invertibleₓ'. -/
 theorem isUnit_det_of_invertible [Invertible A] : IsUnit A.det :=
   @isUnit_of_invertible _ _ _ (detInvertibleOfInvertible A)
 #align matrix.is_unit_det_of_invertible Matrix.isUnit_det_of_invertible
 
 variable {A B}
 
+/- warning: matrix.is_unit_of_left_inverse -> Matrix.isUnit_of_left_inverse is a dubious translation:
+lean 3 declaration is
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] {A : Matrix.{u1, u1, u2} n n α} {B : Matrix.{u1, u1, u2} n n α}, (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) B A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (OfNat.mk.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.one.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))))))) -> (IsUnit.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Ring.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.ring.{u2, u1} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toRing.{u2} α _inst_3))) A)
+but is expected to have type
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] {A : Matrix.{u1, u1, u2} n n α} {B : Matrix.{u1, u1, u2} n n α}, (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) B A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))))) -> (IsUnit.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (MonoidWithZero.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Semiring.toMonoidWithZero.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.semiring.{u2, u1} n α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) _inst_1 (fun (a : n) (b : n) => _inst_2 a b)))) A)
+Case conversion may be inaccurate. Consider using '#align matrix.is_unit_of_left_inverse Matrix.isUnit_of_left_inverseₓ'. -/
 theorem isUnit_of_left_inverse (h : B ⬝ A = 1) : IsUnit A :=
   ⟨⟨A, B, mul_eq_one_comm.mp h, h⟩, rfl⟩
 #align matrix.is_unit_of_left_inverse Matrix.isUnit_of_left_inverse
 
+/- warning: matrix.is_unit_of_right_inverse -> Matrix.isUnit_of_right_inverse is a dubious translation:
+lean 3 declaration is
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] {A : Matrix.{u1, u1, u2} n n α} {B : Matrix.{u1, u1, u2} n n α}, (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A B) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (OfNat.mk.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.one.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))))))) -> (IsUnit.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Ring.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.ring.{u2, u1} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toRing.{u2} α _inst_3))) A)
+but is expected to have type
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] {A : Matrix.{u1, u1, u2} n n α} {B : Matrix.{u1, u1, u2} n n α}, (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A B) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))))) -> (IsUnit.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (MonoidWithZero.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Semiring.toMonoidWithZero.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.semiring.{u2, u1} n α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) _inst_1 (fun (a : n) (b : n) => _inst_2 a b)))) A)
+Case conversion may be inaccurate. Consider using '#align matrix.is_unit_of_right_inverse Matrix.isUnit_of_right_inverseₓ'. -/
 theorem isUnit_of_right_inverse (h : A ⬝ B = 1) : IsUnit A :=
   ⟨⟨A, B, h, mul_eq_one_comm.mp h⟩, rfl⟩
 #align matrix.is_unit_of_right_inverse Matrix.isUnit_of_right_inverse
 
+/- warning: matrix.is_unit_det_of_left_inverse -> Matrix.isUnit_det_of_left_inverse is a dubious translation:
+lean 3 declaration is
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] {A : Matrix.{u1, u1, u2} n n α} {B : Matrix.{u1, u1, u2} n n α}, (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) B A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (OfNat.mk.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.one.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))))))) -> (IsUnit.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A))
+but is expected to have type
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] {A : Matrix.{u1, u1, u2} n n α} {B : Matrix.{u1, u1, u2} n n α}, (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) B A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))))) -> (IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A))
+Case conversion may be inaccurate. Consider using '#align matrix.is_unit_det_of_left_inverse Matrix.isUnit_det_of_left_inverseₓ'. -/
 theorem isUnit_det_of_left_inverse (h : B ⬝ A = 1) : IsUnit A.det :=
   @isUnit_of_invertible _ _ _ (detInvertibleOfLeftInverse _ _ h)
 #align matrix.is_unit_det_of_left_inverse Matrix.isUnit_det_of_left_inverse
 
+/- warning: matrix.is_unit_det_of_right_inverse -> Matrix.isUnit_det_of_right_inverse is a dubious translation:
+lean 3 declaration is
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] {A : Matrix.{u1, u1, u2} n n α} {B : Matrix.{u1, u1, u2} n n α}, (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A B) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (OfNat.mk.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.one.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))))))) -> (IsUnit.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A))
+but is expected to have type
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] {A : Matrix.{u1, u1, u2} n n α} {B : Matrix.{u1, u1, u2} n n α}, (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A B) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))))) -> (IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A))
+Case conversion may be inaccurate. Consider using '#align matrix.is_unit_det_of_right_inverse Matrix.isUnit_det_of_right_inverseₓ'. -/
 theorem isUnit_det_of_right_inverse (h : A ⬝ B = 1) : IsUnit A.det :=
   @isUnit_of_invertible _ _ _ (detInvertibleOfRightInverse _ _ h)
 #align matrix.is_unit_det_of_right_inverse Matrix.isUnit_det_of_right_inverse
 
+/- warning: matrix.det_ne_zero_of_left_inverse -> Matrix.det_ne_zero_of_left_inverse is a dubious translation:
+lean 3 declaration is
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] {A : Matrix.{u1, u1, u2} n n α} {B : Matrix.{u1, u1, u2} n n α} [_inst_4 : Nontrivial.{u2} α], (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) B A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (OfNat.mk.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.one.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))))))) -> (Ne.{succ u2} α (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 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} α (CommRing.toRing.{u2} α _inst_3))))))))))
+but is expected to have type
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] {A : Matrix.{u1, u1, u2} n n α} {B : Matrix.{u1, u1, u2} n n α} [_inst_4 : Nontrivial.{u2} α], (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) B A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))))) -> (Ne.{succ u2} α (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A) (OfNat.ofNat.{u2} α 0 (Zero.toOfNat0.{u2} α (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))))
+Case conversion may be inaccurate. Consider using '#align matrix.det_ne_zero_of_left_inverse Matrix.det_ne_zero_of_left_inverseₓ'. -/
 theorem det_ne_zero_of_left_inverse [Nontrivial α] (h : B ⬝ A = 1) : A.det ≠ 0 :=
   (isUnit_det_of_left_inverse h).NeZero
 #align matrix.det_ne_zero_of_left_inverse Matrix.det_ne_zero_of_left_inverse
 
+/- warning: matrix.det_ne_zero_of_right_inverse -> Matrix.det_ne_zero_of_right_inverse is a dubious translation:
+lean 3 declaration is
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] {A : Matrix.{u1, u1, u2} n n α} {B : Matrix.{u1, u1, u2} n n α} [_inst_4 : Nontrivial.{u2} α], (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A B) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (OfNat.mk.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.one.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))))))) -> (Ne.{succ u2} α (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 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} α (CommRing.toRing.{u2} α _inst_3))))))))))
+but is expected to have type
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] {A : Matrix.{u1, u1, u2} n n α} {B : Matrix.{u1, u1, u2} n n α} [_inst_4 : Nontrivial.{u2} α], (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A B) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))))) -> (Ne.{succ u2} α (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A) (OfNat.ofNat.{u2} α 0 (Zero.toOfNat0.{u2} α (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))))
+Case conversion may be inaccurate. Consider using '#align matrix.det_ne_zero_of_right_inverse Matrix.det_ne_zero_of_right_inverseₓ'. -/
 theorem det_ne_zero_of_right_inverse [Nontrivial α] (h : A ⬝ B = 1) : A.det ≠ 0 :=
   (isUnit_det_of_right_inverse h).NeZero
 #align matrix.det_ne_zero_of_right_inverse Matrix.det_ne_zero_of_right_inverse
@@ -251,6 +419,12 @@ variable [Fintype n] [DecidableEq n] [CommRing α]
 
 variable (A : Matrix n n α) (B : Matrix n n α)
 
+/- warning: matrix.is_unit_det_transpose -> Matrix.isUnit_det_transpose is a dubious translation:
+lean 3 declaration is
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), (IsUnit.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (IsUnit.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 (Matrix.transpose.{u2, u1, u1} n n α A)))
+but is expected to have type
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), (IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 (Matrix.transpose.{u2, u1, u1} n n α A)))
+Case conversion may be inaccurate. Consider using '#align matrix.is_unit_det_transpose Matrix.isUnit_det_transposeₓ'. -/
 theorem isUnit_det_transpose (h : IsUnit A.det) : IsUnit Aᵀ.det :=
   by
   rw [det_transpose]
@@ -264,18 +438,42 @@ theorem isUnit_det_transpose (h : IsUnit A.det) : IsUnit Aᵀ.det :=
 noncomputable instance : Inv (Matrix n n α) :=
   ⟨fun A => Ring.inverse A.det • A.adjugate⟩
 
+/- warning: matrix.inv_def -> Matrix.inv_def is a dubious translation:
+lean 3 declaration is
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) (SMul.smul.{u2, max u1 u2} α (Matrix.{u1, u1, u2} n n α) (Matrix.hasSmul.{u2, u1, u1, u2} n n α α (Mul.toSMul.{u2} α (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Ring.inverse.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) (Matrix.adjugate.{u1, u2} n α (fun (a : n) (b : n) => _inst_2 a b) _inst_1 _inst_3 A))
+but is expected to have type
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) (HSMul.hSMul.{u2, max u1 u2, max u1 u2} α (Matrix.{u1, u1, u2} n n α) (Matrix.{u1, u1, u2} n n α) (instHSMul.{u2, max u1 u2} α (Matrix.{u1, u1, u2} n n α) (Matrix.smul.{u2, u1, u1, u2} n n α α (Algebra.toSMul.{u2, u2} α α (CommRing.toCommSemiring.{u2} α _inst_3) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Algebra.id.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) (Ring.inverse.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) (Matrix.adjugate.{u1, u2} n α (fun (a : n) (b : n) => _inst_2 a b) _inst_1 _inst_3 A))
+Case conversion may be inaccurate. Consider using '#align matrix.inv_def Matrix.inv_defₓ'. -/
 theorem inv_def (A : Matrix n n α) : A⁻¹ = Ring.inverse A.det • A.adjugate :=
   rfl
 #align matrix.inv_def Matrix.inv_def
 
+/- warning: matrix.nonsing_inv_apply_not_is_unit -> Matrix.nonsing_inv_apply_not_isUnit is a dubious translation:
+lean 3 declaration is
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), (Not (IsUnit.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A))) -> (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 0 (OfNat.mk.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 0 (Zero.zero.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasZero.{u2, u1, u1} n n α (MulZeroClass.toHasZero.{u2} α (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))))))))
+but is expected to have type
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), (Not (IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A))) -> (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 0 (Zero.toOfNat0.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.zero.{u2, u1, u1} n n α (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))))))
+Case conversion may be inaccurate. Consider using '#align matrix.nonsing_inv_apply_not_is_unit Matrix.nonsing_inv_apply_not_isUnitₓ'. -/
 theorem nonsing_inv_apply_not_isUnit (h : ¬IsUnit A.det) : A⁻¹ = 0 := by
   rw [inv_def, Ring.inverse_non_unit _ h, zero_smul]
 #align matrix.nonsing_inv_apply_not_is_unit Matrix.nonsing_inv_apply_not_isUnit
 
+/- warning: matrix.nonsing_inv_apply -> Matrix.nonsing_inv_apply is a dubious translation:
+lean 3 declaration is
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (h : IsUnit.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)), Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) (SMul.smul.{u2, max u1 u2} α (Matrix.{u1, u1, u2} n n α) (Matrix.hasSmul.{u2, u1, u1, u2} n n α α (Mul.toSMul.{u2} α (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))))) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (Units.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3))) α (HasLiftT.mk.{succ u2, succ u2} (Units.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3))) α (CoeTCₓ.coe.{succ u2, succ u2} (Units.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3))) α (coeBase.{succ u2, succ u2} (Units.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3))) α (Units.hasCoe.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Inv.inv.{u2} (Units.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3))) (Units.hasInv.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3))) (IsUnit.unit.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A) h))) (Matrix.adjugate.{u1, u2} n α (fun (a : n) (b : n) => _inst_2 a b) _inst_1 _inst_3 A))
+but is expected to have type
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (h : IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)), Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) (HSMul.hSMul.{u2, max u1 u2, max u1 u2} α (Matrix.{u1, u1, u2} n n α) (Matrix.{u1, u1, u2} n n α) (instHSMul.{u2, max u1 u2} α (Matrix.{u1, u1, u2} n n α) (Matrix.smul.{u2, u1, u1, u2} n n α α (Algebra.toSMul.{u2, u2} α α (CommRing.toCommSemiring.{u2} α _inst_3) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Algebra.id.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) (Units.val.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Inv.inv.{u2} (Units.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Units.instInv.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (IsUnit.unit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A) h))) (Matrix.adjugate.{u1, u2} n α (fun (a : n) (b : n) => _inst_2 a b) _inst_1 _inst_3 A))
+Case conversion may be inaccurate. Consider using '#align matrix.nonsing_inv_apply Matrix.nonsing_inv_applyₓ'. -/
 theorem nonsing_inv_apply (h : IsUnit A.det) : A⁻¹ = (↑h.Unit⁻¹ : α) • A.adjugate := by
   rw [inv_def, ← Ring.inverse_unit h.unit, IsUnit.unit_spec]
 #align matrix.nonsing_inv_apply Matrix.nonsing_inv_apply
 
+/- warning: matrix.inv_of_eq_nonsing_inv -> Matrix.invOf_eq_nonsing_inv is a dubious translation:
+lean 3 declaration is
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasMul.{u2, u1} n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) A], Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Invertible.invOf.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasMul.{u2, u1} n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) A _inst_4) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)
+but is expected to have type
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) A], Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Invertible.invOf.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) A _inst_4) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)
+Case conversion may be inaccurate. Consider using '#align matrix.inv_of_eq_nonsing_inv Matrix.invOf_eq_nonsing_invₓ'. -/
 /-- The nonsingular inverse is the same as `inv_of` when `A` is invertible. -/
 @[simp]
 theorem invOf_eq_nonsing_inv [Invertible A] : ⅟ A = A⁻¹ :=
@@ -284,6 +482,12 @@ theorem invOf_eq_nonsing_inv [Invertible A] : ⅟ A = A⁻¹ :=
   rw [inv_def, Ring.inverse_invertible, inv_of_eq]
 #align matrix.inv_of_eq_nonsing_inv Matrix.invOf_eq_nonsing_inv
 
+/- warning: matrix.coe_units_inv -> Matrix.coe_units_inv is a dubious translation:
+lean 3 declaration is
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Units.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Ring.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.ring.{u2, u1} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toRing.{u2} α _inst_3)))), Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) ((fun (a : Type.{max u1 u2}) (b : Type.{max u1 u2}) [self : HasLiftT.{succ (max u1 u2), succ (max u1 u2)} a b] => self.0) (Units.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Ring.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.ring.{u2, u1} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toRing.{u2} α _inst_3)))) (Matrix.{u1, u1, u2} n n α) (HasLiftT.mk.{succ (max u1 u2), succ (max u1 u2)} (Units.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Ring.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.ring.{u2, u1} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toRing.{u2} α _inst_3)))) (Matrix.{u1, u1, u2} n n α) (CoeTCₓ.coe.{succ (max u1 u2), succ (max u1 u2)} (Units.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Ring.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.ring.{u2, u1} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toRing.{u2} α _inst_3)))) (Matrix.{u1, u1, u2} n n α) (coeBase.{succ (max u1 u2), succ (max u1 u2)} (Units.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Ring.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.ring.{u2, u1} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toRing.{u2} α _inst_3)))) (Matrix.{u1, u1, u2} n n α) (Units.hasCoe.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Ring.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.ring.{u2, u1} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toRing.{u2} α _inst_3))))))) (Inv.inv.{max u1 u2} (Units.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Ring.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.ring.{u2, u1} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toRing.{u2} α _inst_3)))) (Units.hasInv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Ring.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.ring.{u2, u1} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toRing.{u2} α _inst_3)))) A)) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) ((fun (a : Type.{max u1 u2}) (b : Type.{max u1 u2}) [self : HasLiftT.{succ (max u1 u2), succ (max u1 u2)} a b] => self.0) (Units.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Ring.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.ring.{u2, u1} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toRing.{u2} α _inst_3)))) (Matrix.{u1, u1, u2} n n α) (HasLiftT.mk.{succ (max u1 u2), succ (max u1 u2)} (Units.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Ring.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.ring.{u2, u1} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toRing.{u2} α _inst_3)))) (Matrix.{u1, u1, u2} n n α) (CoeTCₓ.coe.{succ (max u1 u2), succ (max u1 u2)} (Units.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Ring.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.ring.{u2, u1} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toRing.{u2} α _inst_3)))) (Matrix.{u1, u1, u2} n n α) (coeBase.{succ (max u1 u2), succ (max u1 u2)} (Units.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Ring.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.ring.{u2, u1} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toRing.{u2} α _inst_3)))) (Matrix.{u1, u1, u2} n n α) (Units.hasCoe.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Ring.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.ring.{u2, u1} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toRing.{u2} α _inst_3))))))) A))
+but is expected to have type
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Units.{max u2 u1} (Matrix.{u1, u1, u2} n n α) (MonoidWithZero.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Semiring.toMonoidWithZero.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.semiring.{u2, u1} n α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) _inst_1 (fun (a : n) (b : n) => _inst_2 a b))))), Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Units.val.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (MonoidWithZero.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Semiring.toMonoidWithZero.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.semiring.{u2, u1} n α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) _inst_1 (fun (a : n) (b : n) => _inst_2 a b)))) (Inv.inv.{max u1 u2} (Units.{max u2 u1} (Matrix.{u1, u1, u2} n n α) (MonoidWithZero.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Semiring.toMonoidWithZero.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.semiring.{u2, u1} n α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) _inst_1 (fun (a : n) (b : n) => _inst_2 a b))))) (Units.instInv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (MonoidWithZero.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Semiring.toMonoidWithZero.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.semiring.{u2, u1} n α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) _inst_1 (fun (a : n) (b : n) => _inst_2 a b))))) A)) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) (Units.val.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (MonoidWithZero.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Semiring.toMonoidWithZero.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.semiring.{u2, u1} n α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) _inst_1 (fun (a : n) (b : n) => _inst_2 a b)))) A))
+Case conversion may be inaccurate. Consider using '#align matrix.coe_units_inv Matrix.coe_units_invₓ'. -/
 /-- Coercing the result of `units.has_inv` is the same as coercing first and applying the
 nonsingular inverse. -/
 @[simp, norm_cast]
@@ -293,6 +497,12 @@ theorem coe_units_inv (A : (Matrix n n α)ˣ) : ↑A⁻¹ = (A⁻¹ : Matrix n n
   rw [← inv_of_eq_nonsing_inv, invOf_units]
 #align matrix.coe_units_inv Matrix.coe_units_inv
 
+/- warning: matrix.nonsing_inv_eq_ring_inverse -> Matrix.nonsing_inv_eq_ring_inverse is a dubious translation:
+lean 3 declaration is
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) (Ring.inverse.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Semiring.toMonoidWithZero.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.semiring.{u2, u1} n α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) _inst_1 (fun (a : n) (b : n) => _inst_2 a b))) A)
+but is expected to have type
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) (Ring.inverse.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Semiring.toMonoidWithZero.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.semiring.{u2, u1} n α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) _inst_1 (fun (a : n) (b : n) => _inst_2 a b))) A)
+Case conversion may be inaccurate. Consider using '#align matrix.nonsing_inv_eq_ring_inverse Matrix.nonsing_inv_eq_ring_inverseₓ'. -/
 /-- The nonsingular inverse is the same as the general `ring.inverse`. -/
 theorem nonsing_inv_eq_ring_inverse : A⁻¹ = Ring.inverse A :=
   by
@@ -303,15 +513,33 @@ theorem nonsing_inv_eq_ring_inverse : A⁻¹ = Ring.inverse A :=
     rw [Ring.inverse_non_unit _ h, nonsing_inv_apply_not_is_unit A h_det]
 #align matrix.nonsing_inv_eq_ring_inverse Matrix.nonsing_inv_eq_ring_inverse
 
+/- warning: matrix.transpose_nonsing_inv -> Matrix.transpose_nonsing_inv is a dubious translation:
+lean 3 declaration is
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.transpose.{u2, u1, u1} n n α (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) (Matrix.transpose.{u2, u1, u1} n n α A))
+but is expected to have type
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.transpose.{u2, u1, u1} n n α (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) (Matrix.transpose.{u2, u1, u1} n n α A))
+Case conversion may be inaccurate. Consider using '#align matrix.transpose_nonsing_inv Matrix.transpose_nonsing_invₓ'. -/
 theorem transpose_nonsing_inv : A⁻¹ᵀ = Aᵀ⁻¹ := by
   rw [inv_def, inv_def, transpose_smul, det_transpose, adjugate_transpose]
 #align matrix.transpose_nonsing_inv Matrix.transpose_nonsing_inv
 
+/- warning: matrix.conj_transpose_nonsing_inv -> Matrix.conjTranspose_nonsing_inv is a dubious translation:
+lean 3 declaration is
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : StarRing.{u2} α (NonUnitalRing.toNonUnitalSemiring.{u2} α (NonUnitalCommRing.toNonUnitalRing.{u2} α (CommRing.toNonUnitalCommRing.{u2} α _inst_3)))], Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.conjTranspose.{u2, u1, u1} n n α (InvolutiveStar.toHasStar.{u2} α (StarAddMonoid.toHasInvolutiveStar.{u2} α (AddCommMonoid.toAddMonoid.{u2} α (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalSemiring.toNonUnitalNonAssocSemiring.{u2} α (NonUnitalRing.toNonUnitalSemiring.{u2} α (NonUnitalCommRing.toNonUnitalRing.{u2} α (CommRing.toNonUnitalCommRing.{u2} α _inst_3)))))) (StarRing.toStarAddMonoid.{u2} α (NonUnitalRing.toNonUnitalSemiring.{u2} α (NonUnitalCommRing.toNonUnitalRing.{u2} α (CommRing.toNonUnitalCommRing.{u2} α _inst_3))) _inst_4))) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) (Matrix.conjTranspose.{u2, u1, u1} n n α (InvolutiveStar.toHasStar.{u2} α (StarAddMonoid.toHasInvolutiveStar.{u2} α (AddCommMonoid.toAddMonoid.{u2} α (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalSemiring.toNonUnitalNonAssocSemiring.{u2} α (NonUnitalRing.toNonUnitalSemiring.{u2} α (NonUnitalCommRing.toNonUnitalRing.{u2} α (CommRing.toNonUnitalCommRing.{u2} α _inst_3)))))) (StarRing.toStarAddMonoid.{u2} α (NonUnitalRing.toNonUnitalSemiring.{u2} α (NonUnitalCommRing.toNonUnitalRing.{u2} α (CommRing.toNonUnitalCommRing.{u2} α _inst_3))) _inst_4))) A))
+but is expected to have type
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : StarRing.{u2} α (NonUnitalRing.toNonUnitalSemiring.{u2} α (NonUnitalCommRing.toNonUnitalRing.{u2} α (CommRing.toNonUnitalCommRing.{u2} α _inst_3)))], Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.conjTranspose.{u2, u1, u1} n n α (InvolutiveStar.toStar.{u2} α (StarAddMonoid.toInvolutiveStar.{u2} α (AddMonoidWithOne.toAddMonoid.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (Ring.toAddGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (StarRing.toStarAddMonoid.{u2} α (NonUnitalRing.toNonUnitalSemiring.{u2} α (NonUnitalCommRing.toNonUnitalRing.{u2} α (CommRing.toNonUnitalCommRing.{u2} α _inst_3))) _inst_4))) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) (Matrix.conjTranspose.{u2, u1, u1} n n α (InvolutiveStar.toStar.{u2} α (StarAddMonoid.toInvolutiveStar.{u2} α (AddMonoidWithOne.toAddMonoid.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (Ring.toAddGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (StarRing.toStarAddMonoid.{u2} α (NonUnitalRing.toNonUnitalSemiring.{u2} α (NonUnitalCommRing.toNonUnitalRing.{u2} α (CommRing.toNonUnitalCommRing.{u2} α _inst_3))) _inst_4))) A))
+Case conversion may be inaccurate. Consider using '#align matrix.conj_transpose_nonsing_inv Matrix.conjTranspose_nonsing_invₓ'. -/
 theorem conjTranspose_nonsing_inv [StarRing α] : A⁻¹ᴴ = Aᴴ⁻¹ := by
   rw [inv_def, inv_def, conj_transpose_smul, det_conj_transpose, adjugate_conj_transpose,
     Ring.inverse_star]
 #align matrix.conj_transpose_nonsing_inv Matrix.conjTranspose_nonsing_inv
 
+/- warning: matrix.mul_nonsing_inv -> Matrix.mul_nonsing_inv is a dubious translation:
+lean 3 declaration is
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), (IsUnit.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (OfNat.mk.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.one.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3))))))))))
+but is expected to have type
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), (IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))))
+Case conversion may be inaccurate. Consider using '#align matrix.mul_nonsing_inv Matrix.mul_nonsing_invₓ'. -/
 /-- The `nonsing_inv` of `A` is a right inverse. -/
 @[simp]
 theorem mul_nonsing_inv (h : IsUnit A.det) : A ⬝ A⁻¹ = 1 :=
@@ -320,6 +548,12 @@ theorem mul_nonsing_inv (h : IsUnit A.det) : A ⬝ A⁻¹ = 1 :=
   rw [← inv_of_eq_nonsing_inv, Matrix.mul_invOf_self]
 #align matrix.mul_nonsing_inv Matrix.mul_nonsing_inv
 
+/- warning: matrix.nonsing_inv_mul -> Matrix.nonsing_inv_mul is a dubious translation:
+lean 3 declaration is
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), (IsUnit.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (OfNat.mk.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.one.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3))))))))))
+but is expected to have type
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), (IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))))
+Case conversion may be inaccurate. Consider using '#align matrix.nonsing_inv_mul Matrix.nonsing_inv_mulₓ'. -/
 /-- The `nonsing_inv` of `A` is a left inverse. -/
 @[simp]
 theorem nonsing_inv_mul (h : IsUnit A.det) : A⁻¹ ⬝ A = 1 :=
@@ -333,73 +567,157 @@ instance [Invertible A] : Invertible A⁻¹ :=
   rw [← inv_of_eq_nonsing_inv]
   infer_instance
 
+/- warning: matrix.inv_inv_of_invertible -> Matrix.inv_inv_of_invertible is a dubious translation:
+lean 3 declaration is
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasMul.{u2, u1} n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) A], Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)) A
+but is expected to have type
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) A], Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)) A
+Case conversion may be inaccurate. Consider using '#align matrix.inv_inv_of_invertible Matrix.inv_inv_of_invertibleₓ'. -/
 @[simp]
 theorem inv_inv_of_invertible [Invertible A] : A⁻¹⁻¹ = A := by
   simp only [← inv_of_eq_nonsing_inv, invOf_invOf]
 #align matrix.inv_inv_of_invertible Matrix.inv_inv_of_invertible
 
+/- warning: matrix.mul_nonsing_inv_cancel_right -> Matrix.mul_nonsing_inv_cancel_right is a dubious translation:
+lean 3 declaration is
+  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] (A : Matrix.{u2, u2, u3} n n α) (B : Matrix.{u1, u2, u3} m n α), (IsUnit.{u3} α (Ring.toMonoid.{u3} α (CommRing.toRing.{u3} α _inst_3)) (Matrix.det.{u3, u2} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{succ (max u1 u2 u3)} (Matrix.{u1, u2, u3} m n α) (Matrix.mul.{u3, u1, u2, u2} m n n α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) (Matrix.mul.{u3, u1, u2, u2} m n n α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) B A) (Inv.inv.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.hasInv.{u2, u3} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)) B)
+but is expected to have type
+  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] (A : Matrix.{u2, u2, u3} n n α) (B : Matrix.{u1, u2, u3} m n α), (IsUnit.{u3} α (MonoidWithZero.toMonoid.{u3} α (Semiring.toMonoidWithZero.{u3} α (Ring.toSemiring.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (Matrix.det.{u3, u2} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{max (max (succ u1) (succ u2)) (succ u3)} (Matrix.{u1, u2, u3} m n α) (Matrix.mul.{u3, u1, u2, u2} m n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) (Matrix.mul.{u3, u1, u2, u2} m n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) B A) (Inv.inv.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.inv.{u2, u3} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)) B)
+Case conversion may be inaccurate. Consider using '#align matrix.mul_nonsing_inv_cancel_right Matrix.mul_nonsing_inv_cancel_rightₓ'. -/
 @[simp]
 theorem mul_nonsing_inv_cancel_right (B : Matrix m n α) (h : IsUnit A.det) : B ⬝ A ⬝ A⁻¹ = B := by
   simp [Matrix.mul_assoc, mul_nonsing_inv A h]
 #align matrix.mul_nonsing_inv_cancel_right Matrix.mul_nonsing_inv_cancel_right
 
+/- warning: matrix.mul_nonsing_inv_cancel_left -> Matrix.mul_nonsing_inv_cancel_left is a dubious translation:
+lean 3 declaration is
+  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] (A : Matrix.{u2, u2, u3} n n α) (B : Matrix.{u2, u1, u3} n m α), (IsUnit.{u3} α (Ring.toMonoid.{u3} α (CommRing.toRing.{u3} α _inst_3)) (Matrix.det.{u3, u2} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{succ (max u2 u1 u3)} (Matrix.{u2, u1, u3} n m α) (Matrix.mul.{u3, u2, u2, u1} n n m α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) A (Matrix.mul.{u3, u2, u2, u1} n n m α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) (Inv.inv.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.hasInv.{u2, u3} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) B)) B)
+but is expected to have type
+  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] (A : Matrix.{u2, u2, u3} n n α) (B : Matrix.{u2, u1, u3} n m α), (IsUnit.{u3} α (MonoidWithZero.toMonoid.{u3} α (Semiring.toMonoidWithZero.{u3} α (Ring.toSemiring.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (Matrix.det.{u3, u2} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{max (max (succ u1) (succ u2)) (succ u3)} (Matrix.{u2, u1, u3} n m α) (Matrix.mul.{u3, u2, u2, u1} n n m α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) A (Matrix.mul.{u3, u2, u2, u1} n n m α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) (Inv.inv.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.inv.{u2, u3} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) B)) B)
+Case conversion may be inaccurate. Consider using '#align matrix.mul_nonsing_inv_cancel_left Matrix.mul_nonsing_inv_cancel_leftₓ'. -/
 @[simp]
 theorem mul_nonsing_inv_cancel_left (B : Matrix n m α) (h : IsUnit A.det) : A ⬝ (A⁻¹ ⬝ B) = B := by
   simp [← Matrix.mul_assoc, mul_nonsing_inv A h]
 #align matrix.mul_nonsing_inv_cancel_left Matrix.mul_nonsing_inv_cancel_left
 
+/- warning: matrix.nonsing_inv_mul_cancel_right -> Matrix.nonsing_inv_mul_cancel_right is a dubious translation:
+lean 3 declaration is
+  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] (A : Matrix.{u2, u2, u3} n n α) (B : Matrix.{u1, u2, u3} m n α), (IsUnit.{u3} α (Ring.toMonoid.{u3} α (CommRing.toRing.{u3} α _inst_3)) (Matrix.det.{u3, u2} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{succ (max u1 u2 u3)} (Matrix.{u1, u2, u3} m n α) (Matrix.mul.{u3, u1, u2, u2} m n n α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) (Matrix.mul.{u3, u1, u2, u2} m n n α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) B (Inv.inv.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.hasInv.{u2, u3} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)) A) B)
+but is expected to have type
+  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] (A : Matrix.{u2, u2, u3} n n α) (B : Matrix.{u1, u2, u3} m n α), (IsUnit.{u3} α (MonoidWithZero.toMonoid.{u3} α (Semiring.toMonoidWithZero.{u3} α (Ring.toSemiring.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (Matrix.det.{u3, u2} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{max (max (succ u1) (succ u2)) (succ u3)} (Matrix.{u1, u2, u3} m n α) (Matrix.mul.{u3, u1, u2, u2} m n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) (Matrix.mul.{u3, u1, u2, u2} m n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) B (Inv.inv.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.inv.{u2, u3} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)) A) B)
+Case conversion may be inaccurate. Consider using '#align matrix.nonsing_inv_mul_cancel_right Matrix.nonsing_inv_mul_cancel_rightₓ'. -/
 @[simp]
 theorem nonsing_inv_mul_cancel_right (B : Matrix m n α) (h : IsUnit A.det) : B ⬝ A⁻¹ ⬝ A = B := by
   simp [Matrix.mul_assoc, nonsing_inv_mul A h]
 #align matrix.nonsing_inv_mul_cancel_right Matrix.nonsing_inv_mul_cancel_right
 
+/- warning: matrix.nonsing_inv_mul_cancel_left -> Matrix.nonsing_inv_mul_cancel_left is a dubious translation:
+lean 3 declaration is
+  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] (A : Matrix.{u2, u2, u3} n n α) (B : Matrix.{u2, u1, u3} n m α), (IsUnit.{u3} α (Ring.toMonoid.{u3} α (CommRing.toRing.{u3} α _inst_3)) (Matrix.det.{u3, u2} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{succ (max u2 u1 u3)} (Matrix.{u2, u1, u3} n m α) (Matrix.mul.{u3, u2, u2, u1} n n m α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) (Inv.inv.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.hasInv.{u2, u3} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) (Matrix.mul.{u3, u2, u2, u1} n n m α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) A B)) B)
+but is expected to have type
+  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] (A : Matrix.{u2, u2, u3} n n α) (B : Matrix.{u2, u1, u3} n m α), (IsUnit.{u3} α (MonoidWithZero.toMonoid.{u3} α (Semiring.toMonoidWithZero.{u3} α (Ring.toSemiring.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (Matrix.det.{u3, u2} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{max (max (succ u1) (succ u2)) (succ u3)} (Matrix.{u2, u1, u3} n m α) (Matrix.mul.{u3, u2, u2, u1} n n m α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) (Inv.inv.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.inv.{u2, u3} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) (Matrix.mul.{u3, u2, u2, u1} n n m α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) A B)) B)
+Case conversion may be inaccurate. Consider using '#align matrix.nonsing_inv_mul_cancel_left Matrix.nonsing_inv_mul_cancel_leftₓ'. -/
 @[simp]
 theorem nonsing_inv_mul_cancel_left (B : Matrix n m α) (h : IsUnit A.det) : A⁻¹ ⬝ (A ⬝ B) = B := by
   simp [← Matrix.mul_assoc, nonsing_inv_mul A h]
 #align matrix.nonsing_inv_mul_cancel_left Matrix.nonsing_inv_mul_cancel_left
 
+/- warning: matrix.mul_inv_of_invertible -> Matrix.mul_inv_of_invertible is a dubious translation:
+lean 3 declaration is
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasMul.{u2, u1} n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) A], Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (OfNat.mk.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.one.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))))))
+but is expected to have type
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) A], Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))))
+Case conversion may be inaccurate. Consider using '#align matrix.mul_inv_of_invertible Matrix.mul_inv_of_invertibleₓ'. -/
 @[simp]
 theorem mul_inv_of_invertible [Invertible A] : A ⬝ A⁻¹ = 1 :=
   mul_nonsing_inv A (isUnit_det_of_invertible A)
 #align matrix.mul_inv_of_invertible Matrix.mul_inv_of_invertible
 
+/- warning: matrix.inv_mul_of_invertible -> Matrix.inv_mul_of_invertible is a dubious translation:
+lean 3 declaration is
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasMul.{u2, u1} n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) A], Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (OfNat.mk.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.one.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))))))
+but is expected to have type
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) A], Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))))
+Case conversion may be inaccurate. Consider using '#align matrix.inv_mul_of_invertible Matrix.inv_mul_of_invertibleₓ'. -/
 @[simp]
 theorem inv_mul_of_invertible [Invertible A] : A⁻¹ ⬝ A = 1 :=
   nonsing_inv_mul A (isUnit_det_of_invertible A)
 #align matrix.inv_mul_of_invertible Matrix.inv_mul_of_invertible
 
+/- warning: matrix.mul_inv_cancel_right_of_invertible -> Matrix.mul_inv_cancel_right_of_invertible is a dubious translation:
+lean 3 declaration is
+  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] (A : Matrix.{u2, u2, u3} n n α) (B : Matrix.{u1, u2, u3} m n α) [_inst_4 : Invertible.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.hasMul.{u3, u2} n α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.hasOne.{u3, u2} 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} α (CommRing.toRing.{u3} α _inst_3)))))) (AddMonoidWithOne.toOne.{u3} α (AddGroupWithOne.toAddMonoidWithOne.{u3} α (AddCommGroupWithOne.toAddGroupWithOne.{u3} α (Ring.toAddCommGroupWithOne.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) A], Eq.{succ (max u1 u2 u3)} (Matrix.{u1, u2, u3} m n α) (Matrix.mul.{u3, u1, u2, u2} m n n α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) (Matrix.mul.{u3, u1, u2, u2} m n n α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) B A) (Inv.inv.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.hasInv.{u2, u3} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)) B
+but is expected to have type
+  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] (A : Matrix.{u2, u2, u3} n n α) (B : Matrix.{u1, u2, u3} m n α) [_inst_4 : Invertible.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.instMulMatrix.{u3, u2} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u2} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (NonAssocRing.toOne.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) A], Eq.{max (max (succ u1) (succ u2)) (succ u3)} (Matrix.{u1, u2, u3} m n α) (Matrix.mul.{u3, u1, u2, u2} m n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) (Matrix.mul.{u3, u1, u2, u2} m n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) B A) (Inv.inv.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.inv.{u2, u3} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)) B
+Case conversion may be inaccurate. Consider using '#align matrix.mul_inv_cancel_right_of_invertible Matrix.mul_inv_cancel_right_of_invertibleₓ'. -/
 @[simp]
 theorem mul_inv_cancel_right_of_invertible (B : Matrix m n α) [Invertible A] : B ⬝ A ⬝ A⁻¹ = B :=
   mul_nonsing_inv_cancel_right A B (isUnit_det_of_invertible A)
 #align matrix.mul_inv_cancel_right_of_invertible Matrix.mul_inv_cancel_right_of_invertible
 
+/- warning: matrix.mul_inv_cancel_left_of_invertible -> Matrix.mul_inv_cancel_left_of_invertible is a dubious translation:
+lean 3 declaration is
+  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] (A : Matrix.{u2, u2, u3} n n α) (B : Matrix.{u2, u1, u3} n m α) [_inst_4 : Invertible.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.hasMul.{u3, u2} n α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.hasOne.{u3, u2} 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} α (CommRing.toRing.{u3} α _inst_3)))))) (AddMonoidWithOne.toOne.{u3} α (AddGroupWithOne.toAddMonoidWithOne.{u3} α (AddCommGroupWithOne.toAddGroupWithOne.{u3} α (Ring.toAddCommGroupWithOne.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) A], Eq.{succ (max u2 u1 u3)} (Matrix.{u2, u1, u3} n m α) (Matrix.mul.{u3, u2, u2, u1} n n m α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) A (Matrix.mul.{u3, u2, u2, u1} n n m α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) (Inv.inv.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.hasInv.{u2, u3} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) B)) B
+but is expected to have type
+  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] (A : Matrix.{u2, u2, u3} n n α) (B : Matrix.{u2, u1, u3} n m α) [_inst_4 : Invertible.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.instMulMatrix.{u3, u2} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u2} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (NonAssocRing.toOne.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) A], Eq.{max (max (succ u1) (succ u2)) (succ u3)} (Matrix.{u2, u1, u3} n m α) (Matrix.mul.{u3, u2, u2, u1} n n m α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) A (Matrix.mul.{u3, u2, u2, u1} n n m α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) (Inv.inv.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.inv.{u2, u3} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) B)) B
+Case conversion may be inaccurate. Consider using '#align matrix.mul_inv_cancel_left_of_invertible Matrix.mul_inv_cancel_left_of_invertibleₓ'. -/
 @[simp]
 theorem mul_inv_cancel_left_of_invertible (B : Matrix n m α) [Invertible A] : A ⬝ (A⁻¹ ⬝ B) = B :=
   mul_nonsing_inv_cancel_left A B (isUnit_det_of_invertible A)
 #align matrix.mul_inv_cancel_left_of_invertible Matrix.mul_inv_cancel_left_of_invertible
 
+/- warning: matrix.inv_mul_cancel_right_of_invertible -> Matrix.inv_mul_cancel_right_of_invertible is a dubious translation:
+lean 3 declaration is
+  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] (A : Matrix.{u2, u2, u3} n n α) (B : Matrix.{u1, u2, u3} m n α) [_inst_4 : Invertible.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.hasMul.{u3, u2} n α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.hasOne.{u3, u2} 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} α (CommRing.toRing.{u3} α _inst_3)))))) (AddMonoidWithOne.toOne.{u3} α (AddGroupWithOne.toAddMonoidWithOne.{u3} α (AddCommGroupWithOne.toAddGroupWithOne.{u3} α (Ring.toAddCommGroupWithOne.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) A], Eq.{succ (max u1 u2 u3)} (Matrix.{u1, u2, u3} m n α) (Matrix.mul.{u3, u1, u2, u2} m n n α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) (Matrix.mul.{u3, u1, u2, u2} m n n α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) B (Inv.inv.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.hasInv.{u2, u3} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)) A) B
+but is expected to have type
+  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] (A : Matrix.{u2, u2, u3} n n α) (B : Matrix.{u1, u2, u3} m n α) [_inst_4 : Invertible.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.instMulMatrix.{u3, u2} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u2} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (NonAssocRing.toOne.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) A], Eq.{max (max (succ u1) (succ u2)) (succ u3)} (Matrix.{u1, u2, u3} m n α) (Matrix.mul.{u3, u1, u2, u2} m n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) (Matrix.mul.{u3, u1, u2, u2} m n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) B (Inv.inv.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.inv.{u2, u3} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)) A) B
+Case conversion may be inaccurate. Consider using '#align matrix.inv_mul_cancel_right_of_invertible Matrix.inv_mul_cancel_right_of_invertibleₓ'. -/
 @[simp]
 theorem inv_mul_cancel_right_of_invertible (B : Matrix m n α) [Invertible A] : B ⬝ A⁻¹ ⬝ A = B :=
   nonsing_inv_mul_cancel_right A B (isUnit_det_of_invertible A)
 #align matrix.inv_mul_cancel_right_of_invertible Matrix.inv_mul_cancel_right_of_invertible
 
+/- warning: matrix.inv_mul_cancel_left_of_invertible -> Matrix.inv_mul_cancel_left_of_invertible is a dubious translation:
+lean 3 declaration is
+  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] (A : Matrix.{u2, u2, u3} n n α) (B : Matrix.{u2, u1, u3} n m α) [_inst_4 : Invertible.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.hasMul.{u3, u2} n α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.hasOne.{u3, u2} 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} α (CommRing.toRing.{u3} α _inst_3)))))) (AddMonoidWithOne.toOne.{u3} α (AddGroupWithOne.toAddMonoidWithOne.{u3} α (AddCommGroupWithOne.toAddGroupWithOne.{u3} α (Ring.toAddCommGroupWithOne.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) A], Eq.{succ (max u2 u1 u3)} (Matrix.{u2, u1, u3} n m α) (Matrix.mul.{u3, u2, u2, u1} n n m α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) (Inv.inv.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.hasInv.{u2, u3} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) (Matrix.mul.{u3, u2, u2, u1} n n m α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) A B)) B
+but is expected to have type
+  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] (A : Matrix.{u2, u2, u3} n n α) (B : Matrix.{u2, u1, u3} n m α) [_inst_4 : Invertible.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.instMulMatrix.{u3, u2} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u2} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (NonAssocRing.toOne.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) A], Eq.{max (max (succ u1) (succ u2)) (succ u3)} (Matrix.{u2, u1, u3} n m α) (Matrix.mul.{u3, u2, u2, u1} n n m α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) (Inv.inv.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.inv.{u2, u3} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) (Matrix.mul.{u3, u2, u2, u1} n n m α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3))))) A B)) B
+Case conversion may be inaccurate. Consider using '#align matrix.inv_mul_cancel_left_of_invertible Matrix.inv_mul_cancel_left_of_invertibleₓ'. -/
 @[simp]
 theorem inv_mul_cancel_left_of_invertible (B : Matrix n m α) [Invertible A] : A⁻¹ ⬝ (A ⬝ B) = B :=
   nonsing_inv_mul_cancel_left A B (isUnit_det_of_invertible A)
 #align matrix.inv_mul_cancel_left_of_invertible Matrix.inv_mul_cancel_left_of_invertible
 
+/- warning: matrix.inv_mul_eq_iff_eq_mul_of_invertible -> Matrix.inv_mul_eq_iff_eq_mul_of_invertible is a dubious translation:
+lean 3 declaration is
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (B : Matrix.{u1, u1, u2} n n α) (C : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasMul.{u2, u1} n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) A], Iff (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) B) C) (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) B (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A C))
+but is expected to have type
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (B : Matrix.{u1, u1, u2} n n α) (C : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) A], Iff (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) B) C) (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) B (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A C))
+Case conversion may be inaccurate. Consider using '#align matrix.inv_mul_eq_iff_eq_mul_of_invertible Matrix.inv_mul_eq_iff_eq_mul_of_invertibleₓ'. -/
 theorem inv_mul_eq_iff_eq_mul_of_invertible (A B C : Matrix n n α) [Invertible A] :
     A⁻¹ ⬝ B = C ↔ B = A ⬝ C :=
   ⟨fun h => by rw [← h, mul_inv_cancel_left_of_invertible], fun h => by
     rw [h, inv_mul_cancel_left_of_invertible]⟩
 #align matrix.inv_mul_eq_iff_eq_mul_of_invertible Matrix.inv_mul_eq_iff_eq_mul_of_invertible
 
+/- warning: matrix.mul_inv_eq_iff_eq_mul_of_invertible -> Matrix.mul_inv_eq_iff_eq_mul_of_invertible is a dubious translation:
+lean 3 declaration is
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (B : Matrix.{u1, u1, u2} n n α) (C : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasMul.{u2, u1} n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) A], Iff (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) B (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)) C) (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) B (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) C A))
+but is expected to have type
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (B : Matrix.{u1, u1, u2} n n α) (C : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) A], Iff (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) B (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)) C) (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) B (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) C A))
+Case conversion may be inaccurate. Consider using '#align matrix.mul_inv_eq_iff_eq_mul_of_invertible Matrix.mul_inv_eq_iff_eq_mul_of_invertibleₓ'. -/
 theorem mul_inv_eq_iff_eq_mul_of_invertible (A B C : Matrix n n α) [Invertible A] :
     B ⬝ A⁻¹ = C ↔ B = C ⬝ A :=
   ⟨fun h => by rw [← h, inv_mul_cancel_right_of_invertible], fun h => by
     rw [h, mul_inv_cancel_right_of_invertible]⟩
 #align matrix.mul_inv_eq_iff_eq_mul_of_invertible Matrix.mul_inv_eq_iff_eq_mul_of_invertible
 
+/- warning: matrix.nonsing_inv_cancel_or_zero -> Matrix.nonsing_inv_cancel_or_zero is a dubious translation:
+lean 3 declaration is
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), Or (And (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (OfNat.mk.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.one.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))))))) (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (OfNat.mk.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.one.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3))))))))))) (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 0 (OfNat.mk.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 0 (Zero.zero.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasZero.{u2, u1, u1} n n α (MulZeroClass.toHasZero.{u2} α (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))))))))
+but is expected to have type
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), Or (And (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))))) (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))))) (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 0 (Zero.toOfNat0.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.zero.{u2, u1, u1} n n α (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))))))
+Case conversion may be inaccurate. Consider using '#align matrix.nonsing_inv_cancel_or_zero Matrix.nonsing_inv_cancel_or_zeroₓ'. -/
 theorem nonsing_inv_cancel_or_zero : A⁻¹ ⬝ A = 1 ∧ A ⬝ A⁻¹ = 1 ∨ A⁻¹ = 0 :=
   by
   by_cases h : IsUnit A.det
@@ -407,10 +725,22 @@ theorem nonsing_inv_cancel_or_zero : A⁻¹ ⬝ A = 1 ∧ A ⬝ A⁻¹ = 1 ∨ A
   · exact Or.inr (nonsing_inv_apply_not_is_unit _ h)
 #align matrix.nonsing_inv_cancel_or_zero Matrix.nonsing_inv_cancel_or_zero
 
+/- warning: matrix.det_nonsing_inv_mul_det -> Matrix.det_nonsing_inv_mul_det is a dubious translation:
+lean 3 declaration is
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), (IsUnit.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{succ u2} α (HMul.hMul.{u2, u2, u2} α α α (instHMul.{u2} α (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) (OfNat.ofNat.{u2} α 1 (OfNat.mk.{u2} α 1 (One.one.{u2} α (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))))))
+but is expected to have type
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), (IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{succ u2} α (HMul.hMul.{u2, u2, u2} α α α (instHMul.{u2} α (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) (OfNat.ofNat.{u2} α 1 (One.toOfNat1.{u2} α (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))))
+Case conversion may be inaccurate. Consider using '#align matrix.det_nonsing_inv_mul_det Matrix.det_nonsing_inv_mul_detₓ'. -/
 theorem det_nonsing_inv_mul_det (h : IsUnit A.det) : A⁻¹.det * A.det = 1 := by
   rw [← det_mul, A.nonsing_inv_mul h, det_one]
 #align matrix.det_nonsing_inv_mul_det Matrix.det_nonsing_inv_mul_det
 
+/- warning: matrix.det_nonsing_inv -> Matrix.det_nonsing_inv is a dubious translation:
+lean 3 declaration is
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), Eq.{succ u2} α (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)) (Ring.inverse.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A))
+but is expected to have type
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), Eq.{succ u2} α (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)) (Ring.inverse.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A))
+Case conversion may be inaccurate. Consider using '#align matrix.det_nonsing_inv Matrix.det_nonsing_invₓ'. -/
 @[simp]
 theorem det_nonsing_inv : A⁻¹.det = Ring.inverse A.det :=
   by
@@ -423,10 +753,22 @@ theorem det_nonsing_inv : A⁻¹.det = Ring.inverse A.det :=
   · rw [Ring.inverse_non_unit _ h, nonsing_inv_apply_not_is_unit _ h, det_zero ‹_›]
 #align matrix.det_nonsing_inv Matrix.det_nonsing_inv
 
+/- warning: matrix.is_unit_nonsing_inv_det -> Matrix.isUnit_nonsing_inv_det is a dubious translation:
+lean 3 declaration is
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), (IsUnit.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (IsUnit.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)))
+but is expected to have type
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), (IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)))
+Case conversion may be inaccurate. Consider using '#align matrix.is_unit_nonsing_inv_det Matrix.isUnit_nonsing_inv_detₓ'. -/
 theorem isUnit_nonsing_inv_det (h : IsUnit A.det) : IsUnit A⁻¹.det :=
   isUnit_of_mul_eq_one _ _ (A.det_nonsing_inv_mul_det h)
 #align matrix.is_unit_nonsing_inv_det Matrix.isUnit_nonsing_inv_det
 
+/- warning: matrix.nonsing_inv_nonsing_inv -> Matrix.nonsing_inv_nonsing_inv is a dubious translation:
+lean 3 declaration is
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), (IsUnit.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)) A)
+but is expected to have type
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), (IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)) A)
+Case conversion may be inaccurate. Consider using '#align matrix.nonsing_inv_nonsing_inv Matrix.nonsing_inv_nonsing_invₓ'. -/
 @[simp]
 theorem nonsing_inv_nonsing_inv (h : IsUnit A.det) : A⁻¹⁻¹ = A :=
   calc
@@ -437,10 +779,22 @@ theorem nonsing_inv_nonsing_inv (h : IsUnit A.det) : A⁻¹⁻¹ = A :=
     
 #align matrix.nonsing_inv_nonsing_inv Matrix.nonsing_inv_nonsing_inv
 
+/- warning: matrix.is_unit_nonsing_inv_det_iff -> Matrix.isUnit_nonsing_inv_det_iff is a dubious translation:
+lean 3 declaration is
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] {A : Matrix.{u1, u1, u2} n n α}, Iff (IsUnit.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A))) (IsUnit.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A))
+but is expected to have type
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] {A : Matrix.{u1, u1, u2} n n α}, Iff (IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A))) (IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A))
+Case conversion may be inaccurate. Consider using '#align matrix.is_unit_nonsing_inv_det_iff Matrix.isUnit_nonsing_inv_det_iffₓ'. -/
 theorem isUnit_nonsing_inv_det_iff {A : Matrix n n α} : IsUnit A⁻¹.det ↔ IsUnit A.det := by
   rw [Matrix.det_nonsing_inv, isUnit_ring_inverse]
 #align matrix.is_unit_nonsing_inv_det_iff Matrix.isUnit_nonsing_inv_det_iff
 
+/- warning: matrix.invertible_of_is_unit_det -> Matrix.invertibleOfIsUnitDet is a dubious translation:
+lean 3 declaration is
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), (IsUnit.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasMul.{u2, u1} n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) A)
+but is expected to have type
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), (IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) A)
+Case conversion may be inaccurate. Consider using '#align matrix.invertible_of_is_unit_det Matrix.invertibleOfIsUnitDetₓ'. -/
 -- `is_unit.invertible` lifts the proposition `is_unit A` to a constructive inverse of `A`.
 /-- A version of `matrix.invertible_of_det_invertible` with the inverse defeq to `A⁻¹` that is
 therefore noncomputable. -/
@@ -448,12 +802,24 @@ noncomputable def invertibleOfIsUnitDet (h : IsUnit A.det) : Invertible A :=
   ⟨A⁻¹, nonsing_inv_mul A h, mul_nonsing_inv A h⟩
 #align matrix.invertible_of_is_unit_det Matrix.invertibleOfIsUnitDet
 
+/- warning: matrix.nonsing_inv_unit -> Matrix.nonsingInvUnit is a dubious translation:
+lean 3 declaration is
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), (IsUnit.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Units.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Ring.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.ring.{u2, u1} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toRing.{u2} α _inst_3))))
+but is expected to have type
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), (IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Units.{max u2 u1} (Matrix.{u1, u1, u2} n n α) (MonoidWithZero.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Semiring.toMonoidWithZero.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.semiring.{u2, u1} n α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) _inst_1 (fun (a : n) (b : n) => _inst_2 a b)))))
+Case conversion may be inaccurate. Consider using '#align matrix.nonsing_inv_unit Matrix.nonsingInvUnitₓ'. -/
 /-- A version of `matrix.units_of_det_invertible` with the inverse defeq to `A⁻¹` that is therefore
 noncomputable. -/
 noncomputable def nonsingInvUnit (h : IsUnit A.det) : (Matrix n n α)ˣ :=
   @unitOfInvertible _ _ _ (invertibleOfIsUnitDet A h)
 #align matrix.nonsing_inv_unit Matrix.nonsingInvUnit
 
+/- warning: matrix.unit_of_det_invertible_eq_nonsing_inv_unit -> Matrix.unitOfDetInvertible_eq_nonsingInvUnit is a dubious translation:
+lean 3 declaration is
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{u2} α (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)], Eq.{succ (max u1 u2)} (Units.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Ring.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.ring.{u2, u1} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toRing.{u2} α _inst_3)))) (Matrix.unitOfDetInvertible.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3 A _inst_4) (Matrix.nonsingInvUnit.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3 A (isUnit_of_invertible.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A) _inst_4))
+but is expected to have type
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) [_inst_4 : Invertible.{u2} α (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)], Eq.{max (succ u1) (succ u2)} (Units.{max u2 u1} (Matrix.{u1, u1, u2} n n α) (MonoidWithZero.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Semiring.toMonoidWithZero.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.semiring.{u2, u1} n α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) _inst_1 (fun (a : n) (b : n) => _inst_2 a b))))) (Matrix.unitOfDetInvertible.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3 A _inst_4) (Matrix.nonsingInvUnit.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3 A (isUnit_of_invertible.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A) _inst_4))
+Case conversion may be inaccurate. Consider using '#align matrix.unit_of_det_invertible_eq_nonsing_inv_unit Matrix.unitOfDetInvertible_eq_nonsingInvUnitₓ'. -/
 theorem unitOfDetInvertible_eq_nonsingInvUnit [Invertible A.det] :
     unitOfDetInvertible A = nonsingInvUnit A (isUnit_of_invertible _) :=
   by
@@ -463,12 +829,24 @@ theorem unitOfDetInvertible_eq_nonsingInvUnit [Invertible A.det] :
 
 variable {A} {B}
 
+/- warning: matrix.inv_eq_left_inv -> Matrix.inv_eq_left_inv is a dubious translation:
+lean 3 declaration is
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] {A : Matrix.{u1, u1, u2} n n α} {B : Matrix.{u1, u1, u2} n n α}, (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) B A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (OfNat.mk.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.one.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))))))) -> (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) B)
+but is expected to have type
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] {A : Matrix.{u1, u1, u2} n n α} {B : Matrix.{u1, u1, u2} n n α}, (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) B A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))))) -> (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) B)
+Case conversion may be inaccurate. Consider using '#align matrix.inv_eq_left_inv Matrix.inv_eq_left_invₓ'. -/
 /-- If matrix A is left invertible, then its inverse equals its left inverse. -/
 theorem inv_eq_left_inv (h : B ⬝ A = 1) : A⁻¹ = B :=
   letI := invertible_of_left_inverse _ _ h
   inv_of_eq_nonsing_inv A ▸ invOf_eq_left_inv h
 #align matrix.inv_eq_left_inv Matrix.inv_eq_left_inv
 
+/- warning: matrix.inv_eq_right_inv -> Matrix.inv_eq_right_inv is a dubious translation:
+lean 3 declaration is
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] {A : Matrix.{u1, u1, u2} n n α} {B : Matrix.{u1, u1, u2} n n α}, (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A B) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (OfNat.mk.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.one.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))))))) -> (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) B)
+but is expected to have type
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] {A : Matrix.{u1, u1, u2} n n α} {B : Matrix.{u1, u1, u2} n n α}, (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A B) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))))) -> (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) B)
+Case conversion may be inaccurate. Consider using '#align matrix.inv_eq_right_inv Matrix.inv_eq_right_invₓ'. -/
 /-- If matrix A is right invertible, then its inverse equals its right inverse. -/
 theorem inv_eq_right_inv (h : A ⬝ B = 1) : A⁻¹ = B :=
   inv_eq_left_inv (mul_eq_one_comm.2 h)
@@ -478,21 +856,45 @@ section InvEqInv
 
 variable {C : Matrix n n α}
 
+/- warning: matrix.left_inv_eq_left_inv -> Matrix.left_inv_eq_left_inv is a dubious translation:
+lean 3 declaration is
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] {A : Matrix.{u1, u1, u2} n n α} {B : Matrix.{u1, u1, u2} n n α} {C : Matrix.{u1, u1, u2} n n α}, (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) B A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (OfNat.mk.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.one.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))))))) -> (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) C A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (OfNat.mk.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.one.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))))))) -> (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) B C)
+but is expected to have type
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] {A : Matrix.{u1, u1, u2} n n α} {B : Matrix.{u1, u1, u2} n n α} {C : Matrix.{u1, u1, u2} n n α}, (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) B A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))))) -> (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) C A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))))) -> (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) B C)
+Case conversion may be inaccurate. Consider using '#align matrix.left_inv_eq_left_inv Matrix.left_inv_eq_left_invₓ'. -/
 /-- The left inverse of matrix A is unique when existing. -/
 theorem left_inv_eq_left_inv (h : B ⬝ A = 1) (g : C ⬝ A = 1) : B = C := by
   rw [← inv_eq_left_inv h, ← inv_eq_left_inv g]
 #align matrix.left_inv_eq_left_inv Matrix.left_inv_eq_left_inv
 
+/- warning: matrix.right_inv_eq_right_inv -> Matrix.right_inv_eq_right_inv is a dubious translation:
+lean 3 declaration is
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] {A : Matrix.{u1, u1, u2} n n α} {B : Matrix.{u1, u1, u2} n n α} {C : Matrix.{u1, u1, u2} n n α}, (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A B) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (OfNat.mk.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.one.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))))))) -> (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A C) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (OfNat.mk.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.one.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))))))) -> (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) B C)
+but is expected to have type
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] {A : Matrix.{u1, u1, u2} n n α} {B : Matrix.{u1, u1, u2} n n α} {C : Matrix.{u1, u1, u2} n n α}, (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A B) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))))) -> (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A C) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))))) -> (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) B C)
+Case conversion may be inaccurate. Consider using '#align matrix.right_inv_eq_right_inv Matrix.right_inv_eq_right_invₓ'. -/
 /-- The right inverse of matrix A is unique when existing. -/
 theorem right_inv_eq_right_inv (h : A ⬝ B = 1) (g : A ⬝ C = 1) : B = C := by
   rw [← inv_eq_right_inv h, ← inv_eq_right_inv g]
 #align matrix.right_inv_eq_right_inv Matrix.right_inv_eq_right_inv
 
+/- warning: matrix.right_inv_eq_left_inv -> Matrix.right_inv_eq_left_inv is a dubious translation:
+lean 3 declaration is
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] {A : Matrix.{u1, u1, u2} n n α} {B : Matrix.{u1, u1, u2} n n α} {C : Matrix.{u1, u1, u2} n n α}, (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A B) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (OfNat.mk.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.one.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))))))) -> (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) C A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (OfNat.mk.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.one.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))))))) -> (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) B C)
+but is expected to have type
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] {A : Matrix.{u1, u1, u2} n n α} {B : Matrix.{u1, u1, u2} n n α} {C : Matrix.{u1, u1, u2} n n α}, (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A B) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))))) -> (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) C A) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 1 (One.toOfNat1.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))))) -> (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) B C)
+Case conversion may be inaccurate. Consider using '#align matrix.right_inv_eq_left_inv Matrix.right_inv_eq_left_invₓ'. -/
 /-- The right inverse of matrix A equals the left inverse of A when they exist. -/
 theorem right_inv_eq_left_inv (h : A ⬝ B = 1) (g : C ⬝ A = 1) : B = C := by
   rw [← inv_eq_right_inv h, ← inv_eq_left_inv g]
 #align matrix.right_inv_eq_left_inv Matrix.right_inv_eq_left_inv
 
+/- warning: matrix.inv_inj -> Matrix.inv_inj is a dubious translation:
+lean 3 declaration is
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] {A : Matrix.{u1, u1, u2} n n α} {B : Matrix.{u1, u1, u2} n n α}, (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) B)) -> (IsUnit.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) A B)
+but is expected to have type
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] {A : Matrix.{u1, u1, u2} n n α} {B : Matrix.{u1, u1, u2} n n α}, (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) B)) -> (IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) A B)
+Case conversion may be inaccurate. Consider using '#align matrix.inv_inj Matrix.inv_injₓ'. -/
 theorem inv_inj (h : A⁻¹ = B⁻¹) (h' : IsUnit A.det) : A = B :=
   by
   refine' left_inv_eq_left_inv (mul_nonsing_inv _ h') _
@@ -505,6 +907,12 @@ end InvEqInv
 
 variable (A)
 
+/- warning: matrix.inv_zero -> Matrix.inv_zero is a dubious translation:
+lean 3 declaration is
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α], Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 0 (OfNat.mk.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 0 (Zero.zero.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasZero.{u2, u1, u1} n n α (MulZeroClass.toHasZero.{u2} α (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))))))))) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 0 (OfNat.mk.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 0 (Zero.zero.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasZero.{u2, u1, u1} n n α (MulZeroClass.toHasZero.{u2} α (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))))))))
+but is expected to have type
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α], Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 0 (Zero.toOfNat0.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.zero.{u2, u1, u1} n n α (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))))) (OfNat.ofNat.{max u1 u2} (Matrix.{u1, u1, u2} n n α) 0 (Zero.toOfNat0.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.zero.{u2, u1, u1} n n α (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))))
+Case conversion may be inaccurate. Consider using '#align matrix.inv_zero Matrix.inv_zeroₓ'. -/
 @[simp]
 theorem inv_zero : (0 : Matrix n n α)⁻¹ = 0 :=
   by
@@ -523,14 +931,32 @@ theorem inv_zero : (0 : Matrix n n α)⁻¹ = 0 :=
 noncomputable instance : InvOneClass (Matrix n n α) :=
   { Matrix.hasOne, Matrix.hasInv with inv_one := inv_eq_left_inv (by simp) }
 
+/- warning: matrix.inv_smul -> Matrix.inv_smul is a dubious translation:
+lean 3 declaration is
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (k : α) [_inst_4 : Invertible.{u2} α (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3))))) k], (IsUnit.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) (SMul.smul.{u2, max u1 u2} α (Matrix.{u1, u1, u2} n n α) (Matrix.hasSmul.{u2, u1, u1, u2} n n α α (Mul.toSMul.{u2} α (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))))) k A)) (SMul.smul.{u2, max u1 u2} α (Matrix.{u1, u1, u2} n n α) (Matrix.hasSmul.{u2, u1, u1, u2} n n α α (Mul.toSMul.{u2} α (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Invertible.invOf.{u2} α (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3))))) k _inst_4) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)))
+but is expected to have type
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (k : α) [_inst_4 : Invertible.{u2} α (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))) k], (IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) (HSMul.hSMul.{u2, max u1 u2, max u1 u2} α (Matrix.{u1, u1, u2} n n α) (Matrix.{u1, u1, u2} n n α) (instHSMul.{u2, max u1 u2} α (Matrix.{u1, u1, u2} n n α) (Matrix.smul.{u2, u1, u1, u2} n n α α (Algebra.toSMul.{u2, u2} α α (CommRing.toCommSemiring.{u2} α _inst_3) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Algebra.id.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) k A)) (HSMul.hSMul.{u2, max u1 u2, max u1 u2} α (Matrix.{u1, u1, u2} n n α) (Matrix.{u1, u1, u2} n n α) (instHSMul.{u2, max u1 u2} α (Matrix.{u1, u1, u2} n n α) (Matrix.smul.{u2, u1, u1, u2} n n α α (Algebra.toSMul.{u2, u2} α α (CommRing.toCommSemiring.{u2} α _inst_3) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Algebra.id.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) (Invertible.invOf.{u2} α (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))) k _inst_4) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)))
+Case conversion may be inaccurate. Consider using '#align matrix.inv_smul Matrix.inv_smulₓ'. -/
 theorem inv_smul (k : α) [Invertible k] (h : IsUnit A.det) : (k • A)⁻¹ = ⅟ k • A⁻¹ :=
   inv_eq_left_inv (by simp [h, smul_smul])
 #align matrix.inv_smul Matrix.inv_smul
 
+/- warning: matrix.inv_smul' -> Matrix.inv_smul' is a dubious translation:
+lean 3 declaration is
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (k : Units.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3))), (IsUnit.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) (SMul.smul.{u2, max u1 u2} (Units.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3))) (Matrix.{u1, u1, u2} n n α) (Matrix.hasSmul.{u2, u1, u1, u2} n n (Units.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3))) α (Units.hasSmul.{u2, u2} α α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Mul.toSMul.{u2} α (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) k A)) (SMul.smul.{u2, max u1 u2} (Units.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3))) (Matrix.{u1, u1, u2} n n α) (Matrix.hasSmul.{u2, u1, u1, u2} n n (Units.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3))) α (Units.hasSmul.{u2, u2} α α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Mul.toSMul.{u2} α (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Inv.inv.{u2} (Units.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3))) (Units.hasInv.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3))) k) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)))
+but is expected to have type
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (k : Units.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3))))), (IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) (HSMul.hSMul.{u2, max u1 u2, max u1 u2} (Units.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Matrix.{u1, u1, u2} n n α) (Matrix.{u1, u1, u2} n n α) (instHSMul.{u2, max u1 u2} (Units.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Matrix.{u1, u1, u2} n n α) (Units.instSMulUnits.{u2, max u1 u2} α (Matrix.{u1, u1, u2} n n α) (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Matrix.smul.{u2, u1, u1, u2} n n α α (Algebra.toSMul.{u2, u2} α α (CommRing.toCommSemiring.{u2} α _inst_3) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Algebra.id.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))))) k A)) (HSMul.hSMul.{u2, max u1 u2, max u1 u2} (Units.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Matrix.{u1, u1, u2} n n α) (Matrix.{u1, u1, u2} n n α) (instHSMul.{u2, max u1 u2} (Units.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Matrix.{u1, u1, u2} n n α) (Units.instSMulUnits.{u2, max u1 u2} α (Matrix.{u1, u1, u2} n n α) (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Matrix.smul.{u2, u1, u1, u2} n n α α (Algebra.toSMul.{u2, u2} α α (CommRing.toCommSemiring.{u2} α _inst_3) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Algebra.id.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))))) (Inv.inv.{u2} (Units.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Units.instInv.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3))))) k) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)))
+Case conversion may be inaccurate. Consider using '#align matrix.inv_smul' Matrix.inv_smul'ₓ'. -/
 theorem inv_smul' (k : αˣ) (h : IsUnit A.det) : (k • A)⁻¹ = k⁻¹ • A⁻¹ :=
   inv_eq_left_inv (by simp [h, smul_smul])
 #align matrix.inv_smul' Matrix.inv_smul'
 
+/- warning: matrix.inv_adjugate -> Matrix.inv_adjugate is a dubious translation:
+lean 3 declaration is
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (h : IsUnit.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)), Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) (Matrix.adjugate.{u1, u2} n α (fun (a : n) (b : n) => _inst_2 a b) _inst_1 _inst_3 A)) (SMul.smul.{u2, max u1 u2} (Units.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3))) (Matrix.{u1, u1, u2} n n α) (Matrix.hasSmul.{u2, u1, u1, u2} n n (Units.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3))) α (Units.hasSmul.{u2, u2} α α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Mul.toSMul.{u2} α (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Inv.inv.{u2} (Units.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3))) (Units.hasInv.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3))) (IsUnit.unit.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A) h)) A)
+but is expected to have type
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (h : IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)), Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u2 u1} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) (Matrix.adjugate.{u1, u2} n α (fun (a : n) (b : n) => _inst_2 a b) _inst_1 _inst_3 A)) (HSMul.hSMul.{u2, max u1 u2, max u1 u2} (Units.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Matrix.{u1, u1, u2} n n α) (Matrix.{u1, u1, u2} n n α) (instHSMul.{u2, max u1 u2} (Units.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Matrix.{u1, u1, u2} n n α) (Units.instSMulUnits.{u2, max u1 u2} α (Matrix.{u1, u1, u2} n n α) (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Matrix.smul.{u2, u1, u1, u2} n n α α (Algebra.toSMul.{u2, u2} α α (CommRing.toCommSemiring.{u2} α _inst_3) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Algebra.id.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))))) (Inv.inv.{u2} (Units.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Units.instInv.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (IsUnit.unit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A) h)) A)
+Case conversion may be inaccurate. Consider using '#align matrix.inv_adjugate Matrix.inv_adjugateₓ'. -/
 theorem inv_adjugate (A : Matrix n n α) (h : IsUnit A.det) : (adjugate A)⁻¹ = h.Unit⁻¹ • A :=
   by
   refine' inv_eq_left_inv _
@@ -539,12 +965,24 @@ theorem inv_adjugate (A : Matrix n n α) (h : IsUnit A.det) : (adjugate A)⁻¹
 
 section Diagonal
 
+/- warning: matrix.diagonal_invertible -> Matrix.diagonalInvertible is a dubious translation:
+lean 3 declaration is
+  forall {n : Type.{u1}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] {α : Type.{u2}} [_inst_4 : NonAssocSemiring.{u2} α] (v : n -> α) [_inst_5 : Invertible.{max u1 u2} (n -> α) (Pi.instMul.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => Distrib.toHasMul.{u2} α (NonUnitalNonAssocSemiring.toDistrib.{u2} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} α _inst_4)))) (Pi.instOne.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddMonoidWithOne.toOne.{u2} α (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} α (NonAssocSemiring.toAddCommMonoidWithOne.{u2} α _inst_4)))) v], Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (MulOneClass.toHasMul.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (MulZeroOneClass.toMulOneClass.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (NonAssocSemiring.toMulZeroOneClass.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.nonAssocSemiring.{u2, u1} n α _inst_4 _inst_1 (fun (a : n) (b : n) => _inst_2 a b))))) (MulOneClass.toHasOne.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (MulZeroOneClass.toMulOneClass.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (NonAssocSemiring.toMulZeroOneClass.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.nonAssocSemiring.{u2, u1} n α _inst_4 _inst_1 (fun (a : n) (b : n) => _inst_2 a b))))) (Matrix.diagonal.{u2, u1} n α (fun (i : n) (j : n) => (fun (a : n) (b : n) => (fun (a : n) (b : n) => _inst_2 a b) a b) i j) (MulZeroClass.toHasZero.{u2} α (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} α _inst_4))) v)
+but is expected to have type
+  forall {n : Type.{u1}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] {α : Type.{u2}} [_inst_4 : NonAssocSemiring.{u2} α] (v : n -> α) [_inst_5 : Invertible.{max u1 u2} (n -> α) (Pi.instMul.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toMul.{u2} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} α _inst_4))) (Pi.instOne.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => NonAssocSemiring.toOne.{u2} α _inst_4)) v], Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocSemiring.toMul.{u2} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} α _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} α _inst_4))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (MulZeroOneClass.toZero.{u2} α (NonAssocSemiring.toMulZeroOneClass.{u2} α _inst_4)) (NonAssocSemiring.toOne.{u2} α _inst_4)) (Matrix.diagonal.{u2, u1} n α (fun (i : n) (j : n) => _inst_2 i j) (MulZeroOneClass.toZero.{u2} α (NonAssocSemiring.toMulZeroOneClass.{u2} α _inst_4)) v)
+Case conversion may be inaccurate. Consider using '#align matrix.diagonal_invertible Matrix.diagonalInvertibleₓ'. -/
 /-- `diagonal v` is invertible if `v` is -/
 def diagonalInvertible {α} [NonAssocSemiring α] (v : n → α) [Invertible v] :
     Invertible (diagonal v) :=
   Invertible.map (diagonalRingHom n α) v
 #align matrix.diagonal_invertible Matrix.diagonalInvertible
 
+/- warning: matrix.inv_of_diagonal_eq -> Matrix.invOf_diagonal_eq is a dubious translation:
+lean 3 declaration is
+  forall {n : Type.{u1}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] {α : Type.{u2}} [_inst_4 : Semiring.{u2} α] (v : n -> α) [_inst_5 : Invertible.{max u1 u2} (n -> α) (Pi.instMul.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => Distrib.toHasMul.{u2} α (NonUnitalNonAssocSemiring.toDistrib.{u2} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} α (Semiring.toNonAssocSemiring.{u2} α _inst_4))))) (Pi.instOne.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddMonoidWithOne.toOne.{u2} α (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} α (NonAssocSemiring.toAddCommMonoidWithOne.{u2} α (Semiring.toNonAssocSemiring.{u2} α _inst_4))))) v] [_inst_6 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasMul.{u2, u1} n α _inst_1 (Distrib.toHasMul.{u2} α (NonUnitalNonAssocSemiring.toDistrib.{u2} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} α (Semiring.toNonAssocSemiring.{u2} α _inst_4)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} α (Semiring.toNonAssocSemiring.{u2} α _inst_4)))) (Matrix.hasOne.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (MulZeroClass.toHasZero.{u2} α (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} α (Semiring.toNonAssocSemiring.{u2} α _inst_4)))) (AddMonoidWithOne.toOne.{u2} α (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} α (NonAssocSemiring.toAddCommMonoidWithOne.{u2} α (Semiring.toNonAssocSemiring.{u2} α _inst_4))))) (Matrix.diagonal.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (MulZeroClass.toHasZero.{u2} α (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} α (Semiring.toNonAssocSemiring.{u2} α _inst_4)))) v)], Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Invertible.invOf.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasMul.{u2, u1} n α _inst_1 (Distrib.toHasMul.{u2} α (NonUnitalNonAssocSemiring.toDistrib.{u2} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} α (Semiring.toNonAssocSemiring.{u2} α _inst_4)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} α (Semiring.toNonAssocSemiring.{u2} α _inst_4)))) (Matrix.hasOne.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (MulZeroClass.toHasZero.{u2} α (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} α (Semiring.toNonAssocSemiring.{u2} α _inst_4)))) (AddMonoidWithOne.toOne.{u2} α (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} α (NonAssocSemiring.toAddCommMonoidWithOne.{u2} α (Semiring.toNonAssocSemiring.{u2} α _inst_4))))) (Matrix.diagonal.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (MulZeroClass.toHasZero.{u2} α (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} α (Semiring.toNonAssocSemiring.{u2} α _inst_4)))) v) _inst_6) (Matrix.diagonal.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (MulZeroClass.toHasZero.{u2} α (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} α (Semiring.toNonAssocSemiring.{u2} α _inst_4)))) (Invertible.invOf.{max u1 u2} (n -> α) (Pi.instMul.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => Distrib.toHasMul.{u2} α (NonUnitalNonAssocSemiring.toDistrib.{u2} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} α (Semiring.toNonAssocSemiring.{u2} α _inst_4))))) (Pi.instOne.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddMonoidWithOne.toOne.{u2} α (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} α (NonAssocSemiring.toAddCommMonoidWithOne.{u2} α (Semiring.toNonAssocSemiring.{u2} α _inst_4))))) v _inst_5))
+but is expected to have type
+  forall {n : Type.{u2}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] {α : Type.{u1}} [_inst_4 : Semiring.{u1} α] (v : n -> α) [_inst_5 : Invertible.{max u2 u1} (n -> α) (Pi.instMul.{u2, u1} n (fun (ᾰ : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toMul.{u1} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} α (Semiring.toNonAssocSemiring.{u1} α _inst_4)))) (Pi.instOne.{u2, u1} n (fun (ᾰ : n) => α) (fun (i : n) => Semiring.toOne.{u1} α _inst_4)) v] [_inst_6 : Invertible.{max u2 u1} (Matrix.{u2, u2, u1} n n α) (Matrix.instMulMatrix.{u1, u2} n α _inst_1 (NonUnitalNonAssocSemiring.toMul.{u1} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} α (Semiring.toNonAssocSemiring.{u1} α _inst_4))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} α (Semiring.toNonAssocSemiring.{u1} α _inst_4)))) (Matrix.one.{u1, u2} n α (fun (a : n) (b : n) => _inst_2 a b) (MonoidWithZero.toZero.{u1} α (Semiring.toMonoidWithZero.{u1} α _inst_4)) (Semiring.toOne.{u1} α _inst_4)) (Matrix.diagonal.{u1, u2} n α (fun (a : n) (b : n) => _inst_2 a b) (MonoidWithZero.toZero.{u1} α (Semiring.toMonoidWithZero.{u1} α _inst_4)) v)], Eq.{max (succ u2) (succ u1)} (Matrix.{u2, u2, u1} n n α) (Invertible.invOf.{max u2 u1} (Matrix.{u2, u2, u1} n n α) (Matrix.instMulMatrix.{u1, u2} n α _inst_1 (NonUnitalNonAssocSemiring.toMul.{u1} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} α (Semiring.toNonAssocSemiring.{u1} α _inst_4))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} α (Semiring.toNonAssocSemiring.{u1} α _inst_4)))) (Matrix.one.{u1, u2} n α (fun (a : n) (b : n) => _inst_2 a b) (MonoidWithZero.toZero.{u1} α (Semiring.toMonoidWithZero.{u1} α _inst_4)) (Semiring.toOne.{u1} α _inst_4)) (Matrix.diagonal.{u1, u2} n α (fun (a : n) (b : n) => _inst_2 a b) (MonoidWithZero.toZero.{u1} α (Semiring.toMonoidWithZero.{u1} α _inst_4)) v) _inst_6) (Matrix.diagonal.{u1, u2} n α (fun (a : n) (b : n) => _inst_2 a b) (MonoidWithZero.toZero.{u1} α (Semiring.toMonoidWithZero.{u1} α _inst_4)) (Invertible.invOf.{max u2 u1} (n -> α) (Pi.instMul.{u2, u1} n (fun (ᾰ : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toMul.{u1} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} α (Semiring.toNonAssocSemiring.{u1} α _inst_4)))) (Pi.instOne.{u2, u1} n (fun (ᾰ : n) => α) (fun (i : n) => Semiring.toOne.{u1} α _inst_4)) v _inst_5))
+Case conversion may be inaccurate. Consider using '#align matrix.inv_of_diagonal_eq Matrix.invOf_diagonal_eqₓ'. -/
 theorem invOf_diagonal_eq {α} [Semiring α] (v : n → α) [Invertible v] [Invertible (diagonal v)] :
     ⅟ (diagonal v) = diagonal (⅟ v) :=
   by
@@ -553,6 +991,12 @@ theorem invOf_diagonal_eq {α} [Semiring α] (v : n → α) [Invertible v] [Inve
   convert(rfl : ⅟ (diagonal v) = _)
 #align matrix.inv_of_diagonal_eq Matrix.invOf_diagonal_eq
 
+/- warning: matrix.invertible_of_diagonal_invertible -> Matrix.invertibleOfDiagonalInvertible is a dubious translation:
+lean 3 declaration is
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (v : n -> α) [_inst_4 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasMul.{u2, u1} n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (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} α (CommRing.toRing.{u2} α _inst_3)))))) v)], Invertible.{max u1 u2} (n -> α) (Pi.instMul.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Pi.instOne.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) v
+but is expected to have type
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (v : n -> α) [_inst_4 : Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Matrix.diagonal.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) v)], Invertible.{max u1 u2} (n -> α) (Pi.instMul.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Pi.instOne.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) v
+Case conversion may be inaccurate. Consider using '#align matrix.invertible_of_diagonal_invertible Matrix.invertibleOfDiagonalInvertibleₓ'. -/
 /-- `v` is invertible if `diagonal v` is -/
 def invertibleOfDiagonalInvertible (v : n → α) [Invertible (diagonal v)] : Invertible v
     where
@@ -575,6 +1019,12 @@ def invertibleOfDiagonalInvertible (v : n → α) [Invertible (diagonal v)] : In
       exact mul_invOf_self _
 #align matrix.invertible_of_diagonal_invertible Matrix.invertibleOfDiagonalInvertible
 
+/- warning: matrix.diagonal_invertible_equiv_invertible -> Matrix.diagonalInvertibleEquivInvertible is a dubious translation:
+lean 3 declaration is
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (v : n -> α), Equiv.{succ (max u1 u2), succ (max u1 u2)} (Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasMul.{u2, u1} n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (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} α (CommRing.toRing.{u2} α _inst_3)))))) v)) (Invertible.{max u1 u2} (n -> α) (Pi.instMul.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Pi.instOne.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) v)
+but is expected to have type
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (v : n -> α), Equiv.{succ (max u1 u2), succ (max u1 u2)} (Invertible.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Matrix.diagonal.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) v)) (Invertible.{max u1 u2} (n -> α) (Pi.instMul.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Pi.instOne.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) v)
+Case conversion may be inaccurate. Consider using '#align matrix.diagonal_invertible_equiv_invertible Matrix.diagonalInvertibleEquivInvertibleₓ'. -/
 /-- Together `matrix.diagonal_invertible` and `matrix.invertible_of_diagonal_invertible` form an
 equivalence, although both sides of the equiv are subsingleton anyway. -/
 @[simps]
@@ -586,6 +1036,12 @@ def diagonalInvertibleEquivInvertible (v : n → α) : Invertible (diagonal v) 
   right_inv _ := Subsingleton.elim _ _
 #align matrix.diagonal_invertible_equiv_invertible Matrix.diagonalInvertibleEquivInvertible
 
+/- warning: matrix.is_unit_diagonal -> Matrix.isUnit_diagonal is a dubious translation:
+lean 3 declaration is
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] {v : n -> α}, Iff (IsUnit.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Ring.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.ring.{u2, u1} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) (CommRing.toRing.{u2} α _inst_3))) (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} α (CommRing.toRing.{u2} α _inst_3)))))) v)) (IsUnit.{max u1 u2} (n -> α) (Pi.monoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3))) v)
+but is expected to have type
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] {v : n -> α}, Iff (IsUnit.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (MonoidWithZero.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Semiring.toMonoidWithZero.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.semiring.{u2, u1} n α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) _inst_1 (fun (a : n) (b : n) => _inst_2 a b)))) (Matrix.diagonal.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) v)) (IsUnit.{max u1 u2} (n -> α) (Pi.monoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3))))) v)
+Case conversion may be inaccurate. Consider using '#align matrix.is_unit_diagonal Matrix.isUnit_diagonalₓ'. -/
 /-- When lowered to a prop, `matrix.diagonal_invertible_equiv_invertible` forms an `iff`. -/
 @[simp]
 theorem isUnit_diagonal {v : n → α} : IsUnit (diagonal v) ↔ IsUnit v := by
@@ -593,6 +1049,12 @@ theorem isUnit_diagonal {v : n → α} : IsUnit (diagonal v) ↔ IsUnit v := by
     (diagonal_invertible_equiv_invertible v).nonempty_congr]
 #align matrix.is_unit_diagonal Matrix.isUnit_diagonal
 
+/- warning: matrix.inv_diagonal -> Matrix.inv_diagonal is a dubious translation:
+lean 3 declaration is
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (v : n -> α), Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) (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} α (CommRing.toRing.{u2} α _inst_3)))))) v)) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (Ring.inverse.{max u1 u2} (n -> α) (Pi.monoidWithZero.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) v))
+but is expected to have type
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (v : n -> α), Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) (Matrix.diagonal.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) v)) (Matrix.diagonal.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (Ring.inverse.{max u1 u2} (n -> α) (Pi.monoidWithZero.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) v))
+Case conversion may be inaccurate. Consider using '#align matrix.inv_diagonal Matrix.inv_diagonalₓ'. -/
 theorem inv_diagonal (v : n → α) : (diagonal v)⁻¹ = diagonal (Ring.inverse v) :=
   by
   rw [nonsing_inv_eq_ring_inverse]
@@ -607,6 +1069,12 @@ theorem inv_diagonal (v : n → α) : (diagonal v)⁻¹ = diagonal (Ring.inverse
 
 end Diagonal
 
+/- warning: matrix.inv_inv_inv -> Matrix.inv_inv_inv is a dubious translation:
+lean 3 declaration is
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A))) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)
+but is expected to have type
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α), Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A))) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A)
+Case conversion may be inaccurate. Consider using '#align matrix.inv_inv_inv Matrix.inv_inv_invₓ'. -/
 @[simp]
 theorem inv_inv_inv (A : Matrix n n α) : A⁻¹⁻¹⁻¹ = A⁻¹ :=
   by
@@ -615,6 +1083,12 @@ theorem inv_inv_inv (A : Matrix n n α) : A⁻¹⁻¹⁻¹ = A⁻¹ :=
   · simp [nonsing_inv_apply_not_is_unit _ h]
 #align matrix.inv_inv_inv Matrix.inv_inv_inv
 
+/- warning: matrix.mul_inv_rev -> Matrix.mul_inv_rev is a dubious translation:
+lean 3 declaration is
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (B : Matrix.{u1, u1, u2} n n α), Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A B)) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) B) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A))
+but is expected to have type
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (B : Matrix.{u1, u1, u2} n n α), Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) A B)) (Matrix.mul.{u2, u1, u1, u1} n n n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) B) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A))
+Case conversion may be inaccurate. Consider using '#align matrix.mul_inv_rev Matrix.mul_inv_revₓ'. -/
 theorem mul_inv_rev (A B : Matrix n n α) : (A ⬝ B)⁻¹ = B⁻¹ ⬝ A⁻¹ :=
   by
   simp only [inv_def]
@@ -622,6 +1096,12 @@ theorem mul_inv_rev (A B : Matrix n n α) : (A ⬝ B)⁻¹ = B⁻¹ ⬝ A⁻¹ :
     Ring.mul_inverse_rev]
 #align matrix.mul_inv_rev Matrix.mul_inv_rev
 
+/- warning: matrix.list_prod_inv_reverse -> Matrix.list_prod_inv_reverse is a dubious translation:
+lean 3 declaration is
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (l : List.{max u1 u2} (Matrix.{u1, u1, u2} n n α)), Eq.{succ (max u1 u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) (List.prod.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasMul.{u2, u1} n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) l)) (List.prod.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasMul.{u2, u1} n α _inst_1 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (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} α (CommRing.toRing.{u2} α _inst_3)))))) (AddMonoidWithOne.toOne.{u2} α (AddGroupWithOne.toAddMonoidWithOne.{u2} α (AddCommGroupWithOne.toAddGroupWithOne.{u2} α (Ring.toAddCommGroupWithOne.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (List.map.{max u1 u2, max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3)) (List.reverse.{max u1 u2} (Matrix.{u1, u1, u2} n n α) l)))
+but is expected to have type
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (l : List.{max u2 u1} (Matrix.{u1, u1, u2} n n α)), Eq.{max (succ u1) (succ u2)} (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) (List.prod.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) l)) (List.prod.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.instMulMatrix.{u2, u1} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Matrix.one.{u2, u1} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u2} α (CommSemiring.toCommMonoidWithZero.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))) (NonAssocRing.toOne.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (List.map.{max u1 u2, max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.{u1, u1, u2} n n α) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3)) (List.reverse.{max u1 u2} (Matrix.{u1, u1, u2} n n α) l)))
+Case conversion may be inaccurate. Consider using '#align matrix.list_prod_inv_reverse Matrix.list_prod_inv_reverseₓ'. -/
 /- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
 /-- A version of `list.prod_inv_reverse` for `matrix.has_inv`. -/
 theorem list_prod_inv_reverse : ∀ l : List (Matrix n n α), l.Prod⁻¹ = (l.reverse.map Inv.inv).Prod
@@ -631,6 +1111,12 @@ theorem list_prod_inv_reverse : ∀ l : List (Matrix n n α), l.Prod⁻¹ = (l.r
       Matrix.mul_eq_mul, mul_inv_rev, list_prod_inv_reverse]
 #align matrix.list_prod_inv_reverse Matrix.list_prod_inv_reverse
 
+/- warning: matrix.det_smul_inv_mul_vec_eq_cramer -> Matrix.det_smul_inv_mulVec_eq_cramer is a dubious translation:
+lean 3 declaration is
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (b : n -> α), (IsUnit.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{succ (max u1 u2)} (n -> α) (SMul.smul.{u2, max u1 u2} α (n -> α) (Function.hasSMul.{u1, u2, u2} n α α (Mul.toSMul.{u2} α (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A) (Matrix.mulVec.{u2, u1, u1} n n α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) _inst_1 (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) b)) (coeFn.{succ (max u1 u2), succ (max u1 u2)} (LinearMap.{u2, u2, max u1 u2, max u1 u2} α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (RingHom.id.{u2} α (Semiring.toNonAssocSemiring.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (n -> α) (n -> α) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.Function.module.{u1, u2, u2} n α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Pi.Function.module.{u1, u2, u2} n α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (_x : LinearMap.{u2, u2, max u1 u2, max u1 u2} α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (RingHom.id.{u2} α (Semiring.toNonAssocSemiring.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (n -> α) (n -> α) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.Function.module.{u1, u2, u2} n α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Pi.Function.module.{u1, u2, u2} n α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3))))) => (n -> α) -> n -> α) (LinearMap.hasCoeToFun.{u2, u2, max u1 u2, max u1 u2} α α (n -> α) (n -> α) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.Function.module.{u1, u2, u2} n α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Pi.Function.module.{u1, u2, u2} n α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (RingHom.id.{u2} α (Semiring.toNonAssocSemiring.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Matrix.cramer.{u1, u2} n α (fun (a : n) (b : n) => _inst_2 a b) _inst_1 _inst_3 A) b))
+but is expected to have type
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (b : n -> α), (IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{max (succ u1) (succ u2)} (n -> α) (HSMul.hSMul.{u2, max u1 u2, max u1 u2} α (n -> α) (n -> α) (instHSMul.{u2, max u1 u2} α (n -> α) (Pi.instSMul.{u1, u2, u2} n α (fun (a._@.Mathlib.Data.Matrix.Basic._hyg.18076 : n) => α) (fun (i : n) => Algebra.toSMul.{u2, u2} α α (CommRing.toCommSemiring.{u2} α _inst_3) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Algebra.id.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A) (Matrix.mulVec.{u2, u1, u1} n n α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) _inst_1 (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A) b)) (FunLike.coe.{max (succ u1) (succ u2), max (succ u1) (succ u2), max (succ u1) (succ u2)} (LinearMap.{u2, u2, max u1 u2, max u1 u2} α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (RingHom.id.{u2} α (NonAssocRing.toNonAssocSemiring.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (n -> α) (n -> α) (Pi.addCommMonoid.{u1, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.274 : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.addCommMonoid.{u1, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.274 : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.274 : n) => α) α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => _private.Mathlib.RingTheory.Ideal.Operations.0.Ideal.instModuleToSemiringToAddCommMonoidToNonUnitalNonAssocSemiringToNonUnitalNonAssocRingToNonUnitalRingToNonUnitalCommRing.{u2, u2} α α (CommRing.toCommSemiring.{u2} α _inst_3) _inst_3 (Algebra.id.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.274 : n) => α) α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => _private.Mathlib.RingTheory.Ideal.Operations.0.Ideal.instModuleToSemiringToAddCommMonoidToNonUnitalNonAssocSemiringToNonUnitalNonAssocRingToNonUnitalRingToNonUnitalCommRing.{u2, u2} α α (CommRing.toCommSemiring.{u2} α _inst_3) _inst_3 (Algebra.id.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) (n -> α) (fun (_x : n -> α) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6190 : n -> α) => n -> α) _x) (LinearMap.instFunLikeLinearMap.{u2, u2, max u1 u2, max u1 u2} α α (n -> α) (n -> α) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.274 : n) => α) α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => _private.Mathlib.RingTheory.Ideal.Operations.0.Ideal.instModuleToSemiringToAddCommMonoidToNonUnitalNonAssocSemiringToNonUnitalNonAssocRingToNonUnitalRingToNonUnitalCommRing.{u2, u2} α α (CommRing.toCommSemiring.{u2} α _inst_3) _inst_3 (Algebra.id.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.274 : n) => α) α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => _private.Mathlib.RingTheory.Ideal.Operations.0.Ideal.instModuleToSemiringToAddCommMonoidToNonUnitalNonAssocSemiringToNonUnitalNonAssocRingToNonUnitalRingToNonUnitalCommRing.{u2, u2} α α (CommRing.toCommSemiring.{u2} α _inst_3) _inst_3 (Algebra.id.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (RingHom.id.{u2} α (NonAssocRing.toNonAssocSemiring.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Matrix.cramer.{u1, u2} n α (fun (a : n) (b : n) => _inst_2 a b) _inst_1 _inst_3 A) b))
+Case conversion may be inaccurate. Consider using '#align matrix.det_smul_inv_mul_vec_eq_cramer Matrix.det_smul_inv_mulVec_eq_cramerₓ'. -/
 /-- One form of **Cramer's rule**. See `matrix.mul_vec_cramer` for a stronger form. -/
 @[simp]
 theorem det_smul_inv_mulVec_eq_cramer (A : Matrix n n α) (b : n → α) (h : IsUnit A.det) :
@@ -639,6 +1125,12 @@ theorem det_smul_inv_mulVec_eq_cramer (A : Matrix n n α) (b : n → α) (h : Is
     h.mul_coe_inv, one_smul]
 #align matrix.det_smul_inv_mul_vec_eq_cramer Matrix.det_smul_inv_mulVec_eq_cramer
 
+/- warning: matrix.det_smul_inv_vec_mul_eq_cramer_transpose -> Matrix.det_smul_inv_vecMul_eq_cramer_transpose is a dubious translation:
+lean 3 declaration is
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (b : n -> α), (IsUnit.{u2} α (Ring.toMonoid.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{succ (max u1 u2)} (n -> α) (SMul.smul.{u2, max u1 u2} α (n -> α) (Function.hasSMul.{u1, u2, u2} n α α (Mul.toSMul.{u2} α (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A) (Matrix.vecMul.{u2, u1, u1} n n α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) _inst_1 b (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.hasInv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A))) (coeFn.{succ (max u1 u2), succ (max u1 u2)} (LinearMap.{u2, u2, max u1 u2, max u1 u2} α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (RingHom.id.{u2} α (Semiring.toNonAssocSemiring.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (n -> α) (n -> α) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.Function.module.{u1, u2, u2} n α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Pi.Function.module.{u1, u2, u2} n α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (_x : LinearMap.{u2, u2, max u1 u2, max u1 u2} α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (RingHom.id.{u2} α (Semiring.toNonAssocSemiring.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (n -> α) (n -> α) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.Function.module.{u1, u2, u2} n α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Pi.Function.module.{u1, u2, u2} n α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3))))) => (n -> α) -> n -> α) (LinearMap.hasCoeToFun.{u2, u2, max u1 u2, max u1 u2} α α (n -> α) (n -> α) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.Function.module.{u1, u2, u2} n α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Pi.Function.module.{u1, u2, u2} n α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Semiring.toModule.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (RingHom.id.{u2} α (Semiring.toNonAssocSemiring.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Matrix.cramer.{u1, u2} n α (fun (a : n) (b : n) => _inst_2 a b) _inst_1 _inst_3 (Matrix.transpose.{u2, u1, u1} n n α A)) b))
+but is expected to have type
+  forall {n : Type.{u1}} {α : Type.{u2}} [_inst_1 : Fintype.{u1} n] [_inst_2 : DecidableEq.{succ u1} n] [_inst_3 : CommRing.{u2} α] (A : Matrix.{u1, u1, u2} n n α) (b : n -> α), (IsUnit.{u2} α (MonoidWithZero.toMonoid.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A)) -> (Eq.{max (succ u1) (succ u2)} (n -> α) (HSMul.hSMul.{u2, max u1 u2, max u1 u2} α (n -> α) (n -> α) (instHSMul.{u2, max u1 u2} α (n -> α) (Pi.instSMul.{u1, u2, u2} n α (fun (a._@.Mathlib.Data.Matrix.Basic._hyg.18134 : n) => α) (fun (i : n) => Algebra.toSMul.{u2, u2} α α (CommRing.toCommSemiring.{u2} α _inst_3) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Algebra.id.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) (Matrix.det.{u2, u1} n (fun (a : n) (b : n) => _inst_2 a b) _inst_1 α _inst_3 A) (Matrix.vecMul.{u2, u1, u1} n n α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) _inst_1 b (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} n n α) (Matrix.inv.{u1, u2} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A))) (FunLike.coe.{max (succ u1) (succ u2), max (succ u1) (succ u2), max (succ u1) (succ u2)} (LinearMap.{u2, u2, max u1 u2, max u1 u2} α α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (RingHom.id.{u2} α (NonAssocRing.toNonAssocSemiring.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (n -> α) (n -> α) (Pi.addCommMonoid.{u1, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.274 : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.addCommMonoid.{u1, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.274 : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.274 : n) => α) α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => _private.Mathlib.RingTheory.Ideal.Operations.0.Ideal.instModuleToSemiringToAddCommMonoidToNonUnitalNonAssocSemiringToNonUnitalNonAssocRingToNonUnitalRingToNonUnitalCommRing.{u2, u2} α α (CommRing.toCommSemiring.{u2} α _inst_3) _inst_3 (Algebra.id.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.274 : n) => α) α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => _private.Mathlib.RingTheory.Ideal.Operations.0.Ideal.instModuleToSemiringToAddCommMonoidToNonUnitalNonAssocSemiringToNonUnitalNonAssocRingToNonUnitalRingToNonUnitalCommRing.{u2, u2} α α (CommRing.toCommSemiring.{u2} α _inst_3) _inst_3 (Algebra.id.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3))))) (n -> α) (fun (_x : n -> α) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6190 : n -> α) => n -> α) _x) (LinearMap.instFunLikeLinearMap.{u2, u2, max u1 u2, max u1 u2} α α (n -> α) (n -> α) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.addCommMonoid.{u1, u2} n (fun (ᾰ : n) => α) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.274 : n) => α) α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => _private.Mathlib.RingTheory.Ideal.Operations.0.Ideal.instModuleToSemiringToAddCommMonoidToNonUnitalNonAssocSemiringToNonUnitalNonAssocRingToNonUnitalRingToNonUnitalCommRing.{u2, u2} α α (CommRing.toCommSemiring.{u2} α _inst_3) _inst_3 (Algebra.id.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (Pi.module.{u1, u2, u2} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.Adjugate._hyg.274 : n) => α) α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (fun (i : n) => _private.Mathlib.RingTheory.Ideal.Operations.0.Ideal.instModuleToSemiringToAddCommMonoidToNonUnitalNonAssocSemiringToNonUnitalNonAssocRingToNonUnitalRingToNonUnitalCommRing.{u2, u2} α α (CommRing.toCommSemiring.{u2} α _inst_3) _inst_3 (Algebra.id.{u2} α (CommRing.toCommSemiring.{u2} α _inst_3)))) (RingHom.id.{u2} α (NonAssocRing.toNonAssocSemiring.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Matrix.cramer.{u1, u2} n α (fun (a : n) (b : n) => _inst_2 a b) _inst_1 _inst_3 (Matrix.transpose.{u2, u1, u1} n n α A)) b))
+Case conversion may be inaccurate. Consider using '#align matrix.det_smul_inv_vec_mul_eq_cramer_transpose Matrix.det_smul_inv_vecMul_eq_cramer_transposeₓ'. -/
 /-- One form of **Cramer's rule**. See `matrix.mul_vec_cramer` for a stronger form. -/
 @[simp]
 theorem det_smul_inv_vecMul_eq_cramer_transpose (A : Matrix n n α) (b : n → α) (h : IsUnit A.det) :
@@ -660,6 +1152,12 @@ variable [Fintype m]
 
 variable [DecidableEq m]
 
+/- warning: matrix.submatrix_equiv_invertible -> Matrix.submatrixEquivInvertible is a dubious translation:
+lean 3 declaration is
+  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] [_inst_4 : Fintype.{u1} m] [_inst_5 : DecidableEq.{succ u1} m] (A : Matrix.{u1, u1, u3} m m α) (e₁ : Equiv.{succ u2, succ u1} n m) (e₂ : Equiv.{succ u2, succ u1} n m) [_inst_6 : Invertible.{max u1 u3} (Matrix.{u1, u1, u3} m m α) (Matrix.hasMul.{u3, u1} m α _inst_4 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.hasOne.{u3, u1} m α (fun (a : m) (b : m) => _inst_5 a b) (MulZeroClass.toHasZero.{u3} α (NonUnitalNonAssocSemiring.toMulZeroClass.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (AddMonoidWithOne.toOne.{u3} α (AddGroupWithOne.toAddMonoidWithOne.{u3} α (AddCommGroupWithOne.toAddGroupWithOne.{u3} α (Ring.toAddCommGroupWithOne.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) A], Invertible.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.hasMul.{u3, u2} n α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.hasOne.{u3, u2} 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} α (CommRing.toRing.{u3} α _inst_3)))))) (AddMonoidWithOne.toOne.{u3} α (AddGroupWithOne.toAddMonoidWithOne.{u3} α (AddCommGroupWithOne.toAddGroupWithOne.{u3} α (Ring.toAddCommGroupWithOne.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.submatrix.{u3, u2, u1, u1, u2} n m m n α A (coeFn.{max 1 (max (succ u2) (succ u1)) (succ u1) (succ u2), max (succ u2) (succ u1)} (Equiv.{succ u2, succ u1} n m) (fun (_x : Equiv.{succ u2, succ u1} n m) => n -> m) (Equiv.hasCoeToFun.{succ u2, succ u1} n m) e₁) (coeFn.{max 1 (max (succ u2) (succ u1)) (succ u1) (succ u2), max (succ u2) (succ u1)} (Equiv.{succ u2, succ u1} n m) (fun (_x : Equiv.{succ u2, succ u1} n m) => n -> m) (Equiv.hasCoeToFun.{succ u2, succ u1} n m) e₂))
+but is expected to have type
+  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] [_inst_4 : Fintype.{u1} m] [_inst_5 : DecidableEq.{succ u1} m] (A : Matrix.{u1, u1, u3} m m α) (e₁ : Equiv.{succ u2, succ u1} n m) (e₂ : Equiv.{succ u2, succ u1} n m) [_inst_6 : Invertible.{max u1 u3} (Matrix.{u1, u1, u3} m m α) (Matrix.instMulMatrix.{u3, u1} m α _inst_4 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u1} m α (fun (a : m) (b : m) => _inst_5 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (NonAssocRing.toOne.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) A], Invertible.{max u3 u2} (Matrix.{u2, u2, u3} n n α) (Matrix.instMulMatrix.{u3, u2} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u2} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (NonAssocRing.toOne.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (Matrix.submatrix.{u3, u2, u1, u1, u2} n m m n α A (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (Equiv.{succ u2, succ u1} n m) n (fun (_x : n) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : n) => m) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} n m) e₁) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (Equiv.{succ u2, succ u1} n m) n (fun (_x : n) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : n) => m) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} n m) e₂))
+Case conversion may be inaccurate. Consider using '#align matrix.submatrix_equiv_invertible Matrix.submatrixEquivInvertibleₓ'. -/
 /-- `A.submatrix e₁ e₂` is invertible if `A` is -/
 def submatrixEquivInvertible (A : Matrix m m α) (e₁ e₂ : n ≃ m) [Invertible A] :
     Invertible (A.submatrix e₁ e₂) :=
@@ -667,6 +1165,12 @@ def submatrixEquivInvertible (A : Matrix m m α) (e₁ e₂ : n ≃ m) [Invertib
     rw [Matrix.submatrix_mul_equiv, Matrix.mul_invOf_self, submatrix_one_equiv]
 #align matrix.submatrix_equiv_invertible Matrix.submatrixEquivInvertible
 
+/- warning: matrix.invertible_of_submatrix_equiv_invertible -> Matrix.invertibleOfSubmatrixEquivInvertible is a dubious translation:
+lean 3 declaration is
+  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] [_inst_4 : Fintype.{u1} m] [_inst_5 : DecidableEq.{succ u1} m] (A : Matrix.{u1, u1, u3} m m α) (e₁ : Equiv.{succ u2, succ u1} n m) (e₂ : Equiv.{succ u2, succ u1} n m) [_inst_6 : Invertible.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.hasMul.{u3, u2} n α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.hasOne.{u3, u2} 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} α (CommRing.toRing.{u3} α _inst_3)))))) (AddMonoidWithOne.toOne.{u3} α (AddGroupWithOne.toAddMonoidWithOne.{u3} α (AddCommGroupWithOne.toAddGroupWithOne.{u3} α (Ring.toAddCommGroupWithOne.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.submatrix.{u3, u2, u1, u1, u2} n m m n α A (coeFn.{max 1 (max (succ u2) (succ u1)) (succ u1) (succ u2), max (succ u2) (succ u1)} (Equiv.{succ u2, succ u1} n m) (fun (_x : Equiv.{succ u2, succ u1} n m) => n -> m) (Equiv.hasCoeToFun.{succ u2, succ u1} n m) e₁) (coeFn.{max 1 (max (succ u2) (succ u1)) (succ u1) (succ u2), max (succ u2) (succ u1)} (Equiv.{succ u2, succ u1} n m) (fun (_x : Equiv.{succ u2, succ u1} n m) => n -> m) (Equiv.hasCoeToFun.{succ u2, succ u1} n m) e₂))], Invertible.{max u1 u3} (Matrix.{u1, u1, u3} m m α) (Matrix.hasMul.{u3, u1} m α _inst_4 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.hasOne.{u3, u1} m α (fun (a : m) (b : m) => _inst_5 a b) (MulZeroClass.toHasZero.{u3} α (NonUnitalNonAssocSemiring.toMulZeroClass.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (AddMonoidWithOne.toOne.{u3} α (AddGroupWithOne.toAddMonoidWithOne.{u3} α (AddCommGroupWithOne.toAddGroupWithOne.{u3} α (Ring.toAddCommGroupWithOne.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) A
+but is expected to have type
+  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] [_inst_4 : Fintype.{u1} m] [_inst_5 : DecidableEq.{succ u1} m] (A : Matrix.{u1, u1, u3} m m α) (e₁ : Equiv.{succ u2, succ u1} n m) (e₂ : Equiv.{succ u2, succ u1} n m) [_inst_6 : Invertible.{max u3 u2} (Matrix.{u2, u2, u3} n n α) (Matrix.instMulMatrix.{u3, u2} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u2} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (NonAssocRing.toOne.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (Matrix.submatrix.{u3, u2, u1, u1, u2} n m m n α A (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (Equiv.{succ u2, succ u1} n m) n (fun (_x : n) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : n) => m) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} n m) e₁) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (Equiv.{succ u2, succ u1} n m) n (fun (_x : n) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : n) => m) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} n m) e₂))], Invertible.{max u1 u3} (Matrix.{u1, u1, u3} m m α) (Matrix.instMulMatrix.{u3, u1} m α _inst_4 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u1} m α (fun (a : m) (b : m) => _inst_5 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (NonAssocRing.toOne.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) A
+Case conversion may be inaccurate. Consider using '#align matrix.invertible_of_submatrix_equiv_invertible Matrix.invertibleOfSubmatrixEquivInvertibleₓ'. -/
 /-- `A` is invertible if `A.submatrix e₁ e₂` is -/
 def invertibleOfSubmatrixEquivInvertible (A : Matrix m m α) (e₁ e₂ : n ≃ m)
     [Invertible (A.submatrix e₁ e₂)] : Invertible A :=
@@ -679,6 +1183,12 @@ def invertibleOfSubmatrixEquivInvertible (A : Matrix m m α) (e₁ e₂ : n ≃
     rw [Matrix.submatrix_mul_equiv, Matrix.mul_invOf_self, submatrix_one_equiv]
 #align matrix.invertible_of_submatrix_equiv_invertible Matrix.invertibleOfSubmatrixEquivInvertible
 
+/- warning: matrix.inv_of_submatrix_equiv_eq -> Matrix.invOf_submatrix_equiv_eq is a dubious translation:
+lean 3 declaration is
+  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] [_inst_4 : Fintype.{u1} m] [_inst_5 : DecidableEq.{succ u1} m] (A : Matrix.{u1, u1, u3} m m α) (e₁ : Equiv.{succ u2, succ u1} n m) (e₂ : Equiv.{succ u2, succ u1} n m) [_inst_6 : Invertible.{max u1 u3} (Matrix.{u1, u1, u3} m m α) (Matrix.hasMul.{u3, u1} m α _inst_4 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.hasOne.{u3, u1} m α (fun (a : m) (b : m) => _inst_5 a b) (MulZeroClass.toHasZero.{u3} α (NonUnitalNonAssocSemiring.toMulZeroClass.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (AddMonoidWithOne.toOne.{u3} α (AddGroupWithOne.toAddMonoidWithOne.{u3} α (AddCommGroupWithOne.toAddGroupWithOne.{u3} α (Ring.toAddCommGroupWithOne.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) A] [_inst_7 : Invertible.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.hasMul.{u3, u2} n α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.hasOne.{u3, u2} 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} α (CommRing.toRing.{u3} α _inst_3)))))) (AddMonoidWithOne.toOne.{u3} α (AddGroupWithOne.toAddMonoidWithOne.{u3} α (AddCommGroupWithOne.toAddGroupWithOne.{u3} α (Ring.toAddCommGroupWithOne.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.submatrix.{u3, u2, u1, u1, u2} n m m n α A (coeFn.{max 1 (max (succ u2) (succ u1)) (succ u1) (succ u2), max (succ u2) (succ u1)} (Equiv.{succ u2, succ u1} n m) (fun (_x : Equiv.{succ u2, succ u1} n m) => n -> m) (Equiv.hasCoeToFun.{succ u2, succ u1} n m) e₁) (coeFn.{max 1 (max (succ u2) (succ u1)) (succ u1) (succ u2), max (succ u2) (succ u1)} (Equiv.{succ u2, succ u1} n m) (fun (_x : Equiv.{succ u2, succ u1} n m) => n -> m) (Equiv.hasCoeToFun.{succ u2, succ u1} n m) e₂))], Eq.{succ (max u2 u3)} (Matrix.{u2, u2, u3} n n α) (Invertible.invOf.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.hasMul.{u3, u2} n α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.hasOne.{u3, u2} 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} α (CommRing.toRing.{u3} α _inst_3)))))) (AddMonoidWithOne.toOne.{u3} α (AddGroupWithOne.toAddMonoidWithOne.{u3} α (AddCommGroupWithOne.toAddGroupWithOne.{u3} α (Ring.toAddCommGroupWithOne.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.submatrix.{u3, u2, u1, u1, u2} n m m n α A (coeFn.{max 1 (max (succ u2) (succ u1)) (succ u1) (succ u2), max (succ u2) (succ u1)} (Equiv.{succ u2, succ u1} n m) (fun (_x : Equiv.{succ u2, succ u1} n m) => n -> m) (Equiv.hasCoeToFun.{succ u2, succ u1} n m) e₁) (coeFn.{max 1 (max (succ u2) (succ u1)) (succ u1) (succ u2), max (succ u2) (succ u1)} (Equiv.{succ u2, succ u1} n m) (fun (_x : Equiv.{succ u2, succ u1} n m) => n -> m) (Equiv.hasCoeToFun.{succ u2, succ u1} n m) e₂)) _inst_7) (Matrix.submatrix.{u3, u2, u1, u1, u2} n m m n α (Invertible.invOf.{max u1 u3} (Matrix.{u1, u1, u3} m m α) (Matrix.hasMul.{u3, u1} m α _inst_4 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.hasOne.{u3, u1} m α (fun (a : m) (b : m) => _inst_5 a b) (MulZeroClass.toHasZero.{u3} α (NonUnitalNonAssocSemiring.toMulZeroClass.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (AddMonoidWithOne.toOne.{u3} α (AddGroupWithOne.toAddMonoidWithOne.{u3} α (AddCommGroupWithOne.toAddGroupWithOne.{u3} α (Ring.toAddCommGroupWithOne.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) A _inst_6) (coeFn.{max 1 (max (succ u2) (succ u1)) (succ u1) (succ u2), max (succ u2) (succ u1)} (Equiv.{succ u2, succ u1} n m) (fun (_x : Equiv.{succ u2, succ u1} n m) => n -> m) (Equiv.hasCoeToFun.{succ u2, succ u1} n m) e₂) (coeFn.{max 1 (max (succ u2) (succ u1)) (succ u1) (succ u2), max (succ u2) (succ u1)} (Equiv.{succ u2, succ u1} n m) (fun (_x : Equiv.{succ u2, succ u1} n m) => n -> m) (Equiv.hasCoeToFun.{succ u2, succ u1} n m) e₁))
+but is expected to have type
+  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] [_inst_4 : Fintype.{u1} m] [_inst_5 : DecidableEq.{succ u1} m] (A : Matrix.{u1, u1, u3} m m α) (e₁ : Equiv.{succ u2, succ u1} n m) (e₂ : Equiv.{succ u2, succ u1} n m) [_inst_6 : Invertible.{max u1 u3} (Matrix.{u1, u1, u3} m m α) (Matrix.instMulMatrix.{u3, u1} m α _inst_4 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u1} m α (fun (a : m) (b : m) => _inst_5 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (NonAssocRing.toOne.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) A] [_inst_7 : Invertible.{max u3 u2} (Matrix.{u2, u2, u3} n n α) (Matrix.instMulMatrix.{u3, u2} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u2} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (NonAssocRing.toOne.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (Matrix.submatrix.{u3, u2, u1, u1, u2} n m m n α A (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (Equiv.{succ u2, succ u1} n m) n (fun (_x : n) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : n) => m) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} n m) e₁) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (Equiv.{succ u2, succ u1} n m) n (fun (_x : n) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : n) => m) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} n m) e₂))], Eq.{max (succ u2) (succ u3)} (Matrix.{u2, u2, u3} n n α) (Invertible.invOf.{max u3 u2} (Matrix.{u2, u2, u3} n n α) (Matrix.instMulMatrix.{u3, u2} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u2} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (NonAssocRing.toOne.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (Matrix.submatrix.{u3, u2, u1, u1, u2} n m m n α A (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (Equiv.{succ u2, succ u1} n m) n (fun (_x : n) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : n) => m) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} n m) e₁) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (Equiv.{succ u2, succ u1} n m) n (fun (_x : n) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : n) => m) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} n m) e₂)) _inst_7) (Matrix.submatrix.{u3, u2, u1, u1, u2} n m m n α (Invertible.invOf.{max u1 u3} (Matrix.{u1, u1, u3} m m α) (Matrix.instMulMatrix.{u3, u1} m α _inst_4 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u1} m α (fun (a : m) (b : m) => _inst_5 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (NonAssocRing.toOne.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) A _inst_6) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (Equiv.{succ u2, succ u1} n m) n (fun (_x : n) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : n) => m) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} n m) e₂) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (Equiv.{succ u2, succ u1} n m) n (fun (_x : n) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : n) => m) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} n m) e₁))
+Case conversion may be inaccurate. Consider using '#align matrix.inv_of_submatrix_equiv_eq Matrix.invOf_submatrix_equiv_eqₓ'. -/
 theorem invOf_submatrix_equiv_eq (A : Matrix m m α) (e₁ e₂ : n ≃ m) [Invertible A]
     [Invertible (A.submatrix e₁ e₂)] : ⅟ (A.submatrix e₁ e₂) = (⅟ A).submatrix e₂ e₁ :=
   by
@@ -687,6 +1197,12 @@ theorem invOf_submatrix_equiv_eq (A : Matrix m m α) (e₁ e₂ : n ≃ m) [Inve
   convert(rfl : ⅟ (A.submatrix e₁ e₂) = _)
 #align matrix.inv_of_submatrix_equiv_eq Matrix.invOf_submatrix_equiv_eq
 
+/- warning: matrix.submatrix_equiv_invertible_equiv_invertible -> Matrix.submatrixEquivInvertibleEquivInvertible is a dubious translation:
+lean 3 declaration is
+  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] [_inst_4 : Fintype.{u1} m] [_inst_5 : DecidableEq.{succ u1} m] (A : Matrix.{u1, u1, u3} m m α) (e₁ : Equiv.{succ u2, succ u1} n m) (e₂ : Equiv.{succ u2, succ u1} n m), Equiv.{succ (max u2 u3), succ (max u1 u3)} (Invertible.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.hasMul.{u3, u2} n α _inst_1 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.hasOne.{u3, u2} 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} α (CommRing.toRing.{u3} α _inst_3)))))) (AddMonoidWithOne.toOne.{u3} α (AddGroupWithOne.toAddMonoidWithOne.{u3} α (AddCommGroupWithOne.toAddGroupWithOne.{u3} α (Ring.toAddCommGroupWithOne.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.submatrix.{u3, u2, u1, u1, u2} n m m n α A (coeFn.{max 1 (max (succ u2) (succ u1)) (succ u1) (succ u2), max (succ u2) (succ u1)} (Equiv.{succ u2, succ u1} n m) (fun (_x : Equiv.{succ u2, succ u1} n m) => n -> m) (Equiv.hasCoeToFun.{succ u2, succ u1} n m) e₁) (coeFn.{max 1 (max (succ u2) (succ u1)) (succ u1) (succ u2), max (succ u2) (succ u1)} (Equiv.{succ u2, succ u1} n m) (fun (_x : Equiv.{succ u2, succ u1} n m) => n -> m) (Equiv.hasCoeToFun.{succ u2, succ u1} n m) e₂))) (Invertible.{max u1 u3} (Matrix.{u1, u1, u3} m m α) (Matrix.hasMul.{u3, u1} m α _inst_4 (Distrib.toHasMul.{u3} α (Ring.toDistrib.{u3} α (CommRing.toRing.{u3} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toAddCommGroup.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.hasOne.{u3, u1} m α (fun (a : m) (b : m) => _inst_5 a b) (MulZeroClass.toHasZero.{u3} α (NonUnitalNonAssocSemiring.toMulZeroClass.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (AddMonoidWithOne.toOne.{u3} α (AddGroupWithOne.toAddMonoidWithOne.{u3} α (AddCommGroupWithOne.toAddGroupWithOne.{u3} α (Ring.toAddCommGroupWithOne.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) A)
+but is expected to have type
+  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] [_inst_4 : Fintype.{u1} m] [_inst_5 : DecidableEq.{succ u1} m] (A : Matrix.{u1, u1, u3} m m α) (e₁ : Equiv.{succ u2, succ u1} n m) (e₂ : Equiv.{succ u2, succ u1} n m), Equiv.{succ (max u3 u2), succ (max u1 u3)} (Invertible.{max u3 u2} (Matrix.{u2, u2, u3} n n α) (Matrix.instMulMatrix.{u3, u2} n α _inst_1 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u2} n α (fun (a : n) (b : n) => _inst_2 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (NonAssocRing.toOne.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (Matrix.submatrix.{u3, u2, u1, u1, u2} n m m n α A (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (Equiv.{succ u2, succ u1} n m) n (fun (_x : n) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : n) => m) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} n m) e₁) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (Equiv.{succ u2, succ u1} n m) n (fun (_x : n) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : n) => m) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} n m) e₂))) (Invertible.{max u1 u3} (Matrix.{u1, u1, u3} m m α) (Matrix.instMulMatrix.{u3, u1} m α _inst_4 (NonUnitalNonAssocRing.toMul.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} α (NonAssocRing.toNonUnitalNonAssocRing.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))))) (Matrix.one.{u3, u1} m α (fun (a : m) (b : m) => _inst_5 a b) (CommMonoidWithZero.toZero.{u3} α (CommSemiring.toCommMonoidWithZero.{u3} α (CommRing.toCommSemiring.{u3} α _inst_3))) (NonAssocRing.toOne.{u3} α (Ring.toNonAssocRing.{u3} α (CommRing.toRing.{u3} α _inst_3)))) A)
+Case conversion may be inaccurate. Consider using '#align matrix.submatrix_equiv_invertible_equiv_invertible Matrix.submatrixEquivInvertibleEquivInvertibleₓ'. -/
 /-- Together `matrix.submatrix_equiv_invertible` and
 `matrix.invertible_of_submatrix_equiv_invertible` form an equivalence, although both sides of the
 equiv are subsingleton anyway. -/
@@ -700,6 +1216,7 @@ def submatrixEquivInvertibleEquivInvertible (A : Matrix m m α) (e₁ e₂ : n 
   right_inv _ := Subsingleton.elim _ _
 #align matrix.submatrix_equiv_invertible_equiv_invertible Matrix.submatrixEquivInvertibleEquivInvertible
 
+#print Matrix.isUnit_submatrix_equiv /-
 /-- When lowered to a prop, `matrix.invertible_of_submatrix_equiv_invertible` forms an `iff`. -/
 @[simp]
 theorem isUnit_submatrix_equiv {A : Matrix m m α} (e₁ e₂ : n ≃ m) :
@@ -707,7 +1224,14 @@ theorem isUnit_submatrix_equiv {A : Matrix m m α} (e₁ e₂ : n ≃ m) :
   simp only [← nonempty_invertible_iff_isUnit,
     (submatrix_equiv_invertible_equiv_invertible A _ _).nonempty_congr]
 #align matrix.is_unit_submatrix_equiv Matrix.isUnit_submatrix_equiv
+-/
 
+/- warning: matrix.inv_submatrix_equiv -> Matrix.inv_submatrix_equiv is a dubious translation:
+lean 3 declaration is
+  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] [_inst_4 : Fintype.{u1} m] [_inst_5 : DecidableEq.{succ u1} m] (A : Matrix.{u1, u1, u3} m m α) (e₁ : Equiv.{succ u2, succ u1} n m) (e₂ : Equiv.{succ u2, succ u1} n m), Eq.{succ (max u2 u3)} (Matrix.{u2, u2, u3} n n α) (Inv.inv.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.hasInv.{u2, u3} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) (Matrix.submatrix.{u3, u2, u1, u1, u2} n m m n α A (coeFn.{max 1 (max (succ u2) (succ u1)) (succ u1) (succ u2), max (succ u2) (succ u1)} (Equiv.{succ u2, succ u1} n m) (fun (_x : Equiv.{succ u2, succ u1} n m) => n -> m) (Equiv.hasCoeToFun.{succ u2, succ u1} n m) e₁) (coeFn.{max 1 (max (succ u2) (succ u1)) (succ u1) (succ u2), max (succ u2) (succ u1)} (Equiv.{succ u2, succ u1} n m) (fun (_x : Equiv.{succ u2, succ u1} n m) => n -> m) (Equiv.hasCoeToFun.{succ u2, succ u1} n m) e₂))) (Matrix.submatrix.{u3, u2, u1, u1, u2} n m m n α (Inv.inv.{max u1 u3} (Matrix.{u1, u1, u3} m m α) (Matrix.hasInv.{u1, u3} m α _inst_4 (fun (a : m) (b : m) => _inst_5 a b) _inst_3) A) (coeFn.{max 1 (max (succ u2) (succ u1)) (succ u1) (succ u2), max (succ u2) (succ u1)} (Equiv.{succ u2, succ u1} n m) (fun (_x : Equiv.{succ u2, succ u1} n m) => n -> m) (Equiv.hasCoeToFun.{succ u2, succ u1} n m) e₂) (coeFn.{max 1 (max (succ u2) (succ u1)) (succ u1) (succ u2), max (succ u2) (succ u1)} (Equiv.{succ u2, succ u1} n m) (fun (_x : Equiv.{succ u2, succ u1} n m) => n -> m) (Equiv.hasCoeToFun.{succ u2, succ u1} n m) e₁))
+but is expected to have type
+  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] [_inst_4 : Fintype.{u1} m] [_inst_5 : DecidableEq.{succ u1} m] (A : Matrix.{u1, u1, u3} m m α) (e₁ : Equiv.{succ u2, succ u1} n m) (e₂ : Equiv.{succ u2, succ u1} n m), Eq.{max (succ u2) (succ u3)} (Matrix.{u2, u2, u3} n n α) (Inv.inv.{max u3 u2} (Matrix.{u2, u2, u3} n n α) (Matrix.inv.{u2, u3} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) (Matrix.submatrix.{u3, u2, u1, u1, u2} n m m n α A (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (Equiv.{succ u2, succ u1} n m) n (fun (_x : n) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : n) => m) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} n m) e₁) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (Equiv.{succ u2, succ u1} n m) n (fun (_x : n) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : n) => m) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} n m) e₂))) (Matrix.submatrix.{u3, u2, u1, u1, u2} n m m n α (Inv.inv.{max u1 u3} (Matrix.{u1, u1, u3} m m α) (Matrix.inv.{u1, u3} m α _inst_4 (fun (a : m) (b : m) => _inst_5 a b) _inst_3) A) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (Equiv.{succ u2, succ u1} n m) n (fun (_x : n) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : n) => m) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} n m) e₂) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (Equiv.{succ u2, succ u1} n m) n (fun (_x : n) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : n) => m) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} n m) e₁))
+Case conversion may be inaccurate. Consider using '#align matrix.inv_submatrix_equiv Matrix.inv_submatrix_equivₓ'. -/
 @[simp]
 theorem inv_submatrix_equiv (A : Matrix m m α) (e₁ e₂ : n ≃ m) :
     (A.submatrix e₁ e₂)⁻¹ = A⁻¹.submatrix e₂ e₁ :=
@@ -721,6 +1245,12 @@ theorem inv_submatrix_equiv (A : Matrix m m α) (e₁ e₂ : n ≃ m) :
       submatrix_zero, Pi.zero_apply]
 #align matrix.inv_submatrix_equiv Matrix.inv_submatrix_equiv
 
+/- warning: matrix.inv_reindex -> Matrix.inv_reindex is a dubious translation:
+lean 3 declaration is
+  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] [_inst_4 : Fintype.{u1} m] [_inst_5 : DecidableEq.{succ u1} m] (e₁ : Equiv.{succ u2, succ u1} n m) (e₂ : Equiv.{succ u2, succ u1} n m) (A : Matrix.{u2, u2, u3} n n α), Eq.{succ (max u1 u3)} (Matrix.{u1, u1, u3} m m α) (Inv.inv.{max u1 u3} (Matrix.{u1, u1, u3} m m α) (Matrix.hasInv.{u1, u3} m α _inst_4 (fun (a : m) (b : m) => _inst_5 a b) _inst_3) (coeFn.{max 1 (max (succ (max u2 u3)) (succ (max u1 u3))) (succ (max u1 u3)) (succ (max u2 u3)), max (succ (max u2 u3)) (succ (max u1 u3))} (Equiv.{succ (max u2 u3), succ (max u1 u3)} (Matrix.{u2, u2, u3} n n α) (Matrix.{u1, u1, u3} m m α)) (fun (_x : Equiv.{succ (max u2 u3), succ (max u1 u3)} (Matrix.{u2, u2, u3} n n α) (Matrix.{u1, u1, u3} m m α)) => (Matrix.{u2, u2, u3} n n α) -> (Matrix.{u1, u1, u3} m m α)) (Equiv.hasCoeToFun.{succ (max u2 u3), succ (max u1 u3)} (Matrix.{u2, u2, u3} n n α) (Matrix.{u1, u1, u3} m m α)) (Matrix.reindex.{u3, u1, u2, u2, u1} m n n m α e₁ e₂) A)) (coeFn.{max 1 (max (succ (max u2 u3)) (succ (max u1 u3))) (succ (max u1 u3)) (succ (max u2 u3)), max (succ (max u2 u3)) (succ (max u1 u3))} (Equiv.{succ (max u2 u3), succ (max u1 u3)} (Matrix.{u2, u2, u3} n n α) (Matrix.{u1, u1, u3} m m α)) (fun (_x : Equiv.{succ (max u2 u3), succ (max u1 u3)} (Matrix.{u2, u2, u3} n n α) (Matrix.{u1, u1, u3} m m α)) => (Matrix.{u2, u2, u3} n n α) -> (Matrix.{u1, u1, u3} m m α)) (Equiv.hasCoeToFun.{succ (max u2 u3), succ (max u1 u3)} (Matrix.{u2, u2, u3} n n α) (Matrix.{u1, u1, u3} m m α)) (Matrix.reindex.{u3, u1, u2, u2, u1} m n n m α e₂ e₁) (Inv.inv.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.hasInv.{u2, u3} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A))
+but is expected to have type
+  forall {m : Type.{u1}} {n : Type.{u2}} {α : Type.{u3}} [_inst_1 : Fintype.{u2} n] [_inst_2 : DecidableEq.{succ u2} n] [_inst_3 : CommRing.{u3} α] [_inst_4 : Fintype.{u1} m] [_inst_5 : DecidableEq.{succ u1} m] (e₁ : Equiv.{succ u2, succ u1} n m) (e₂ : Equiv.{succ u2, succ u1} n m) (A : Matrix.{u2, u2, u3} n n α), Eq.{max (succ u1) (succ u3)} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : Matrix.{u2, u2, u3} n n α) => Matrix.{u1, u1, u3} m m α) A) (Inv.inv.{max u1 u3} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : Matrix.{u2, u2, u3} n n α) => Matrix.{u1, u1, u3} m m α) A) (Matrix.inv.{u1, u3} m α _inst_4 (fun (a : m) (b : m) => _inst_5 a b) _inst_3) (FunLike.coe.{max (max (succ u1) (succ u2)) (succ u3), max (succ u2) (succ u3), max (succ u1) (succ u3)} (Equiv.{max (succ u3) (succ u2), max (succ u3) (succ u1)} (Matrix.{u2, u2, u3} n n α) (Matrix.{u1, u1, u3} m m α)) (Matrix.{u2, u2, u3} n n α) (fun (_x : Matrix.{u2, u2, u3} n n α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : Matrix.{u2, u2, u3} n n α) => Matrix.{u1, u1, u3} m m α) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u3), max (succ u1) (succ u3)} (Matrix.{u2, u2, u3} n n α) (Matrix.{u1, u1, u3} m m α)) (Matrix.reindex.{u3, u1, u2, u2, u1} m n n m α e₁ e₂) A)) (FunLike.coe.{max (max (succ u1) (succ u2)) (succ u3), max (succ u2) (succ u3), max (succ u1) (succ u3)} (Equiv.{max (succ u3) (succ u2), max (succ u3) (succ u1)} (Matrix.{u2, u2, u3} n n α) (Matrix.{u1, u1, u3} m m α)) (Matrix.{u2, u2, u3} n n α) (fun (_x : Matrix.{u2, u2, u3} n n α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : Matrix.{u2, u2, u3} n n α) => Matrix.{u1, u1, u3} m m α) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u3), max (succ u1) (succ u3)} (Matrix.{u2, u2, u3} n n α) (Matrix.{u1, u1, u3} m m α)) (Matrix.reindex.{u3, u1, u2, u2, u1} m n n m α e₂ e₁) (Inv.inv.{max u2 u3} (Matrix.{u2, u2, u3} n n α) (Matrix.inv.{u2, u3} n α _inst_1 (fun (a : n) (b : n) => _inst_2 a b) _inst_3) A))
+Case conversion may be inaccurate. Consider using '#align matrix.inv_reindex Matrix.inv_reindexₓ'. -/
 theorem inv_reindex (e₁ e₂ : n ≃ m) (A : Matrix n n α) : (reindex e₁ e₂ A)⁻¹ = reindex e₂ e₁ A⁻¹ :=
   inv_submatrix_equiv A e₁.symm e₂.symm
 #align matrix.inv_reindex Matrix.inv_reindex
@@ -734,11 +1264,23 @@ section Det
 
 variable [Fintype m] [DecidableEq m]
 
+/- warning: matrix.det_conj -> Matrix.det_conj is a dubious translation:
+lean 3 declaration is
+  forall {m : Type.{u1}} {α : Type.{u2}} [_inst_3 : CommRing.{u2} α] [_inst_4 : Fintype.{u1} m] [_inst_5 : DecidableEq.{succ u1} m] {M : Matrix.{u1, u1, u2} m m α}, (IsUnit.{max u1 u2} (Matrix.{u1, u1, u2} m m α) (Ring.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} m m α) (Matrix.ring.{u2, u1} m α _inst_4 (fun (a : m) (b : m) => _inst_5 a b) (CommRing.toRing.{u2} α _inst_3))) M) -> (forall (N : Matrix.{u1, u1, u2} m m α), Eq.{succ u2} α (Matrix.det.{u2, u1} m (fun (a : m) (b : m) => _inst_5 a b) _inst_4 α _inst_3 (Matrix.mul.{u2, u1, u1, u1} m m m α _inst_4 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Matrix.mul.{u2, u1, u1, u1} m m m α _inst_4 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) M N) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} m m α) (Matrix.hasInv.{u1, u2} m α _inst_4 (fun (a : m) (b : m) => _inst_5 a b) _inst_3) M))) (Matrix.det.{u2, u1} m (fun (a : m) (b : m) => _inst_5 a b) _inst_4 α _inst_3 N))
+but is expected to have type
+  forall {m : Type.{u1}} {α : Type.{u2}} [_inst_3 : CommRing.{u2} α] [_inst_4 : Fintype.{u1} m] [_inst_5 : DecidableEq.{succ u1} m] {M : Matrix.{u1, u1, u2} m m α}, (IsUnit.{max u1 u2} (Matrix.{u1, u1, u2} m m α) (MonoidWithZero.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} m m α) (Semiring.toMonoidWithZero.{max u1 u2} (Matrix.{u1, u1, u2} m m α) (Matrix.semiring.{u2, u1} m α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) _inst_4 (fun (a : m) (b : m) => _inst_5 a b)))) M) -> (forall (N : Matrix.{u1, u1, u2} m m α), Eq.{succ u2} α (Matrix.det.{u2, u1} m (fun (a : m) (b : m) => _inst_5 a b) _inst_4 α _inst_3 (Matrix.mul.{u2, u1, u1, u1} m m m α _inst_4 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Matrix.mul.{u2, u1, u1, u1} m m m α _inst_4 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) M N) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} m m α) (Matrix.inv.{u1, u2} m α _inst_4 (fun (a : m) (b : m) => _inst_5 a b) _inst_3) M))) (Matrix.det.{u2, u1} m (fun (a : m) (b : m) => _inst_5 a b) _inst_4 α _inst_3 N))
+Case conversion may be inaccurate. Consider using '#align matrix.det_conj Matrix.det_conjₓ'. -/
 /-- A variant of `matrix.det_units_conj`. -/
 theorem det_conj {M : Matrix m m α} (h : IsUnit M) (N : Matrix m m α) : det (M ⬝ N ⬝ M⁻¹) = det N :=
   by rw [← h.unit_spec, ← coe_units_inv, det_units_conj]
 #align matrix.det_conj Matrix.det_conj
 
+/- warning: matrix.det_conj' -> Matrix.det_conj' is a dubious translation:
+lean 3 declaration is
+  forall {m : Type.{u1}} {α : Type.{u2}} [_inst_3 : CommRing.{u2} α] [_inst_4 : Fintype.{u1} m] [_inst_5 : DecidableEq.{succ u1} m] {M : Matrix.{u1, u1, u2} m m α}, (IsUnit.{max u1 u2} (Matrix.{u1, u1, u2} m m α) (Ring.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} m m α) (Matrix.ring.{u2, u1} m α _inst_4 (fun (a : m) (b : m) => _inst_5 a b) (CommRing.toRing.{u2} α _inst_3))) M) -> (forall (N : Matrix.{u1, u1, u2} m m α), Eq.{succ u2} α (Matrix.det.{u2, u1} m (fun (a : m) (b : m) => _inst_5 a b) _inst_4 α _inst_3 (Matrix.mul.{u2, u1, u1, u1} m m m α _inst_4 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Matrix.mul.{u2, u1, u1, u1} m m m α _inst_4 (Distrib.toHasMul.{u2} α (Ring.toDistrib.{u2} α (CommRing.toRing.{u2} α _inst_3))) (AddCommGroup.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toAddCommGroup.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} m m α) (Matrix.hasInv.{u1, u2} m α _inst_4 (fun (a : m) (b : m) => _inst_5 a b) _inst_3) M) N) M)) (Matrix.det.{u2, u1} m (fun (a : m) (b : m) => _inst_5 a b) _inst_4 α _inst_3 N))
+but is expected to have type
+  forall {m : Type.{u1}} {α : Type.{u2}} [_inst_3 : CommRing.{u2} α] [_inst_4 : Fintype.{u1} m] [_inst_5 : DecidableEq.{succ u1} m] {M : Matrix.{u1, u1, u2} m m α}, (IsUnit.{max u1 u2} (Matrix.{u1, u1, u2} m m α) (MonoidWithZero.toMonoid.{max u1 u2} (Matrix.{u1, u1, u2} m m α) (Semiring.toMonoidWithZero.{max u1 u2} (Matrix.{u1, u1, u2} m m α) (Matrix.semiring.{u2, u1} m α (Ring.toSemiring.{u2} α (CommRing.toRing.{u2} α _inst_3)) _inst_4 (fun (a : m) (b : m) => _inst_5 a b)))) M) -> (forall (N : Matrix.{u1, u1, u2} m m α), Eq.{succ u2} α (Matrix.det.{u2, u1} m (fun (a : m) (b : m) => _inst_5 a b) _inst_4 α _inst_3 (Matrix.mul.{u2, u1, u1, u1} m m m α _inst_4 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Matrix.mul.{u2, u1, u1, u1} m m m α _inst_4 (NonUnitalNonAssocRing.toMul.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} α (NonAssocRing.toNonUnitalNonAssocRing.{u2} α (Ring.toNonAssocRing.{u2} α (CommRing.toRing.{u2} α _inst_3))))) (Inv.inv.{max u1 u2} (Matrix.{u1, u1, u2} m m α) (Matrix.inv.{u1, u2} m α _inst_4 (fun (a : m) (b : m) => _inst_5 a b) _inst_3) M) N) M)) (Matrix.det.{u2, u1} m (fun (a : m) (b : m) => _inst_5 a b) _inst_4 α _inst_3 N))
+Case conversion may be inaccurate. Consider using '#align matrix.det_conj' Matrix.det_conj'ₓ'. -/
 /-- A variant of `matrix.det_units_conj'`. -/
 theorem det_conj' {M : Matrix m m α} (h : IsUnit M) (N : Matrix m m α) :
     det (M⁻¹ ⬝ N ⬝ M) = det N := by rw [← h.unit_spec, ← coe_units_inv, det_units_conj']
Diff
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Tim Baanen, Lu-Ming Zhang
 
 ! This file was ported from Lean 3 source module linear_algebra.matrix.nonsingular_inverse
-! leanprover-community/mathlib commit e49764de5f8377071189dc4fa347ef5d6bb352b1
+! leanprover-community/mathlib commit a07a7ae98384cd6485d7825e161e528ba78ef3bc
 ! Please do not edit these lines, except to modify the commit id
 ! if you have ported upstream changes.
 -/
@@ -727,47 +727,6 @@ theorem inv_reindex (e₁ e₂ : n ≃ m) (A : Matrix n n α) : (reindex e₁ e
 
 end Submatrix
 
-/-! ### Block matrices -/
-
-
-section Block
-
-variable [Fintype l]
-
-variable [DecidableEq l]
-
-variable [Fintype m]
-
-variable [DecidableEq m]
-
-/-- LDU decomposition of a block matrix with an invertible top-left corner, using the
-Schur complement. -/
-theorem fromBlocks_eq_of_invertible₁₁ (A : Matrix m m α) (B : Matrix m n α) (C : Matrix l m α)
-    (D : Matrix l n α) [Invertible A] :
-    fromBlocks A B C D =
-      fromBlocks 1 0 (C ⬝ ⅟ A) 1 ⬝ fromBlocks A 0 0 (D - C ⬝ ⅟ A ⬝ B) ⬝
-        fromBlocks 1 (⅟ A ⬝ B) 0 1 :=
-  by
-  simp only [from_blocks_multiply, Matrix.mul_zero, Matrix.zero_mul, add_zero, zero_add,
-    Matrix.one_mul, Matrix.mul_one, Matrix.invOf_mul_self, Matrix.mul_invOf_self_assoc,
-    Matrix.mul_invOf_mul_self_cancel, Matrix.mul_assoc, add_sub_cancel'_right]
-#align matrix.from_blocks_eq_of_invertible₁₁ Matrix.fromBlocks_eq_of_invertible₁₁
-
-/-- LDU decomposition of a block matrix with an invertible bottom-right corner, using the
-Schur complement. -/
-theorem fromBlocks_eq_of_invertible₂₂ (A : Matrix l m α) (B : Matrix l n α) (C : Matrix n m α)
-    (D : Matrix n n α) [Invertible D] :
-    fromBlocks A B C D =
-      fromBlocks 1 (B ⬝ ⅟ D) 0 1 ⬝ fromBlocks (A - B ⬝ ⅟ D ⬝ C) 0 0 D ⬝
-        fromBlocks 1 0 (⅟ D ⬝ C) 1 :=
-  (Matrix.reindex (Equiv.sumComm _ _) (Equiv.sumComm _ _)).Injective <| by
-    simpa [reindex_apply, sum_comm_symm, ← submatrix_mul_equiv _ _ _ (Equiv.sumComm n m), ←
-      submatrix_mul_equiv _ _ _ (Equiv.sumComm n l), sum_comm_apply,
-      from_blocks_submatrix_sum_swap_sum_swap] using from_blocks_eq_of_invertible₁₁ D C B A
-#align matrix.from_blocks_eq_of_invertible₂₂ Matrix.fromBlocks_eq_of_invertible₂₂
-
-end Block
-
 /-! ### More results about determinants -/
 
 
@@ -785,73 +744,6 @@ theorem det_conj' {M : Matrix m m α} (h : IsUnit M) (N : Matrix m m α) :
     det (M⁻¹ ⬝ N ⬝ M) = det N := by rw [← h.unit_spec, ← coe_units_inv, det_units_conj']
 #align matrix.det_conj' Matrix.det_conj'
 
-/-- Determinant of a 2×2 block matrix, expanded around an invertible top left element in terms of
-the Schur complement. -/
-theorem det_from_blocks₁₁ (A : Matrix m m α) (B : Matrix m n α) (C : Matrix n m α)
-    (D : Matrix n n α) [Invertible A] :
-    (Matrix.fromBlocks A B C D).det = det A * det (D - C ⬝ ⅟ A ⬝ B) := by
-  rw [from_blocks_eq_of_invertible₁₁, det_mul, det_mul, det_from_blocks_zero₂₁,
-    det_from_blocks_zero₂₁, det_from_blocks_zero₁₂, det_one, det_one, one_mul, one_mul, mul_one]
-#align matrix.det_from_blocks₁₁ Matrix.det_from_blocks₁₁
-
-@[simp]
-theorem det_fromBlocks_one₁₁ (B : Matrix m n α) (C : Matrix n m α) (D : Matrix n n α) :
-    (Matrix.fromBlocks 1 B C D).det = det (D - C ⬝ B) :=
-  by
-  haveI : Invertible (1 : Matrix m m α) := invertibleOne
-  rw [det_from_blocks₁₁, invOf_one, Matrix.mul_one, det_one, one_mul]
-#align matrix.det_from_blocks_one₁₁ Matrix.det_fromBlocks_one₁₁
-
-/-- Determinant of a 2×2 block matrix, expanded around an invertible bottom right element in terms
-of the Schur complement. -/
-theorem det_from_blocks₂₂ (A : Matrix m m α) (B : Matrix m n α) (C : Matrix n m α)
-    (D : Matrix n n α) [Invertible D] :
-    (Matrix.fromBlocks A B C D).det = det D * det (A - B ⬝ ⅟ D ⬝ C) :=
-  by
-  have : from_blocks A B C D = (from_blocks D C B A).submatrix (sum_comm _ _) (sum_comm _ _) :=
-    by
-    ext (i j)
-    cases i <;> cases j <;> rfl
-  rw [this, det_submatrix_equiv_self, det_from_blocks₁₁]
-#align matrix.det_from_blocks₂₂ Matrix.det_from_blocks₂₂
-
-@[simp]
-theorem det_fromBlocks_one₂₂ (A : Matrix m m α) (B : Matrix m n α) (C : Matrix n m α) :
-    (Matrix.fromBlocks A B C 1).det = det (A - B ⬝ C) :=
-  by
-  haveI : Invertible (1 : Matrix n n α) := invertibleOne
-  rw [det_from_blocks₂₂, invOf_one, Matrix.mul_one, det_one, one_mul]
-#align matrix.det_from_blocks_one₂₂ Matrix.det_fromBlocks_one₂₂
-
-/-- The **Weinstein–Aronszajn identity**. Note the `1` on the LHS is of shape m×m, while the `1` on
-the RHS is of shape n×n. -/
-theorem det_one_add_mul_comm (A : Matrix m n α) (B : Matrix n m α) :
-    det (1 + A ⬝ B) = det (1 + B ⬝ A) :=
-  calc
-    det (1 + A ⬝ B) = det (fromBlocks 1 (-A) B 1) := by
-      rw [det_from_blocks_one₂₂, Matrix.neg_mul, sub_neg_eq_add]
-    _ = det (1 + B ⬝ A) := by rw [det_from_blocks_one₁₁, Matrix.mul_neg, sub_neg_eq_add]
-    
-#align matrix.det_one_add_mul_comm Matrix.det_one_add_mul_comm
-
-/-- Alternate statement of the **Weinstein–Aronszajn identity** -/
-theorem det_mul_add_one_comm (A : Matrix m n α) (B : Matrix n m α) :
-    det (A ⬝ B + 1) = det (B ⬝ A + 1) := by rw [add_comm, det_one_add_mul_comm, add_comm]
-#align matrix.det_mul_add_one_comm Matrix.det_mul_add_one_comm
-
-theorem det_one_sub_mul_comm (A : Matrix m n α) (B : Matrix n m α) :
-    det (1 - A ⬝ B) = det (1 - B ⬝ A) := by
-  rw [sub_eq_add_neg, ← Matrix.neg_mul, det_one_add_mul_comm, Matrix.mul_neg, ← sub_eq_add_neg]
-#align matrix.det_one_sub_mul_comm Matrix.det_one_sub_mul_comm
-
-/-- A special case of the **Matrix determinant lemma** for when `A = I`.
-
-TODO: show this more generally. -/
-theorem det_one_add_col_mul_row (u v : m → α) : det (1 + col u ⬝ row v) = 1 + v ⬝ᵥ u := by
-  rw [det_one_add_mul_comm, det_unique, Pi.add_apply, Pi.add_apply, Matrix.one_apply_eq,
-    Matrix.row_mul_col_apply]
-#align matrix.det_one_add_col_mul_row Matrix.det_one_add_col_mul_row
-
 end Det
 
 end Matrix
Diff
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Tim Baanen, Lu-Ming Zhang
 
 ! This file was ported from Lean 3 source module linear_algebra.matrix.nonsingular_inverse
-! leanprover-community/mathlib commit 996a85302b992a170cf7336beb4af2d8c3df688c
+! leanprover-community/mathlib commit e49764de5f8377071189dc4fa347ef5d6bb352b1
 ! Please do not edit these lines, except to modify the commit id
 ! if you have ported upstream changes.
 -/
@@ -56,7 +56,7 @@ namespace Matrix
 
 universe u u' v
 
-variable {m : Type u} {n : Type u'} {α : Type v}
+variable {l : Type _} {m : Type u} {n : Type u'} {α : Type v}
 
 open Matrix BigOperators
 
@@ -727,6 +727,47 @@ theorem inv_reindex (e₁ e₂ : n ≃ m) (A : Matrix n n α) : (reindex e₁ e
 
 end Submatrix
 
+/-! ### Block matrices -/
+
+
+section Block
+
+variable [Fintype l]
+
+variable [DecidableEq l]
+
+variable [Fintype m]
+
+variable [DecidableEq m]
+
+/-- LDU decomposition of a block matrix with an invertible top-left corner, using the
+Schur complement. -/
+theorem fromBlocks_eq_of_invertible₁₁ (A : Matrix m m α) (B : Matrix m n α) (C : Matrix l m α)
+    (D : Matrix l n α) [Invertible A] :
+    fromBlocks A B C D =
+      fromBlocks 1 0 (C ⬝ ⅟ A) 1 ⬝ fromBlocks A 0 0 (D - C ⬝ ⅟ A ⬝ B) ⬝
+        fromBlocks 1 (⅟ A ⬝ B) 0 1 :=
+  by
+  simp only [from_blocks_multiply, Matrix.mul_zero, Matrix.zero_mul, add_zero, zero_add,
+    Matrix.one_mul, Matrix.mul_one, Matrix.invOf_mul_self, Matrix.mul_invOf_self_assoc,
+    Matrix.mul_invOf_mul_self_cancel, Matrix.mul_assoc, add_sub_cancel'_right]
+#align matrix.from_blocks_eq_of_invertible₁₁ Matrix.fromBlocks_eq_of_invertible₁₁
+
+/-- LDU decomposition of a block matrix with an invertible bottom-right corner, using the
+Schur complement. -/
+theorem fromBlocks_eq_of_invertible₂₂ (A : Matrix l m α) (B : Matrix l n α) (C : Matrix n m α)
+    (D : Matrix n n α) [Invertible D] :
+    fromBlocks A B C D =
+      fromBlocks 1 (B ⬝ ⅟ D) 0 1 ⬝ fromBlocks (A - B ⬝ ⅟ D ⬝ C) 0 0 D ⬝
+        fromBlocks 1 0 (⅟ D ⬝ C) 1 :=
+  (Matrix.reindex (Equiv.sumComm _ _) (Equiv.sumComm _ _)).Injective <| by
+    simpa [reindex_apply, sum_comm_symm, ← submatrix_mul_equiv _ _ _ (Equiv.sumComm n m), ←
+      submatrix_mul_equiv _ _ _ (Equiv.sumComm n l), sum_comm_apply,
+      from_blocks_submatrix_sum_swap_sum_swap] using from_blocks_eq_of_invertible₁₁ D C B A
+#align matrix.from_blocks_eq_of_invertible₂₂ Matrix.fromBlocks_eq_of_invertible₂₂
+
+end Block
+
 /-! ### More results about determinants -/
 
 
@@ -748,18 +789,9 @@ theorem det_conj' {M : Matrix m m α} (h : IsUnit M) (N : Matrix m m α) :
 the Schur complement. -/
 theorem det_from_blocks₁₁ (A : Matrix m m α) (B : Matrix m n α) (C : Matrix n m α)
     (D : Matrix n n α) [Invertible A] :
-    (Matrix.fromBlocks A B C D).det = det A * det (D - C ⬝ ⅟ A ⬝ B) :=
-  by
-  have :
-    from_blocks A B C D =
-      from_blocks 1 0 (C ⬝ ⅟ A) 1 ⬝ from_blocks A 0 0 (D - C ⬝ ⅟ A ⬝ B) ⬝
-        from_blocks 1 (⅟ A ⬝ B) 0 1 :=
-    by
-    simp only [from_blocks_multiply, Matrix.mul_zero, Matrix.zero_mul, add_zero, zero_add,
-      Matrix.one_mul, Matrix.mul_one, Matrix.invOf_mul_self, Matrix.mul_invOf_self_assoc,
-      Matrix.mul_invOf_mul_self_cancel, Matrix.mul_assoc, add_sub_cancel'_right]
-  rw [this, det_mul, det_mul, det_from_blocks_zero₂₁, det_from_blocks_zero₂₁,
-    det_from_blocks_zero₁₂, det_one, det_one, one_mul, one_mul, mul_one]
+    (Matrix.fromBlocks A B C D).det = det A * det (D - C ⬝ ⅟ A ⬝ B) := by
+  rw [from_blocks_eq_of_invertible₁₁, det_mul, det_mul, det_from_blocks_zero₂₁,
+    det_from_blocks_zero₂₁, det_from_blocks_zero₁₂, det_one, det_one, one_mul, one_mul, mul_one]
 #align matrix.det_from_blocks₁₁ Matrix.det_from_blocks₁₁
 
 @[simp]
Diff
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Tim Baanen, Lu-Ming Zhang
 
 ! This file was ported from Lean 3 source module linear_algebra.matrix.nonsingular_inverse
-! leanprover-community/mathlib commit da420a8c6dd5bdfb85c4ced85c34388f633bc6ff
+! leanprover-community/mathlib commit 996a85302b992a170cf7336beb4af2d8c3df688c
 ! Please do not edit these lines, except to modify the commit id
 ! if you have ported upstream changes.
 -/
@@ -537,6 +537,8 @@ theorem inv_adjugate (A : Matrix n n α) (h : IsUnit A.det) : (adjugate A)⁻¹
   rw [smul_mul, mul_adjugate, Units.smul_def, smul_smul, h.coe_inv_mul, one_smul]
 #align matrix.inv_adjugate Matrix.inv_adjugate
 
+section Diagonal
+
 /-- `diagonal v` is invertible if `v` is -/
 def diagonalInvertible {α} [NonAssocSemiring α] (v : n → α) [Invertible v] :
     Invertible (diagonal v) :=
@@ -603,6 +605,8 @@ theorem inv_diagonal (v : n → α) : (diagonal v)⁻¹ = diagonal (Ring.inverse
     rw [Ring.inverse_non_unit _ h, Pi.zero_def, diagonal_zero, Ring.inverse_non_unit _ this]
 #align matrix.inv_diagonal Matrix.inv_diagonal
 
+end Diagonal
+
 @[simp]
 theorem inv_inv_inv (A : Matrix n n α) : A⁻¹⁻¹⁻¹ = A⁻¹ :=
   by
@@ -643,6 +647,86 @@ theorem det_smul_inv_vecMul_eq_cramer_transpose (A : Matrix n n α) (b : n → 
     Aᵀ.det_smul_inv_mulVec_eq_cramer _ (is_unit_det_transpose A h)]
 #align matrix.det_smul_inv_vec_mul_eq_cramer_transpose Matrix.det_smul_inv_vecMul_eq_cramer_transpose
 
+/-! ### Inverses of permutated matrices
+
+Note that the simp-normal form of `matrix.reindex` is `matrix.submatrix`, so we prove most of these
+results about only the latter.
+-/
+
+
+section Submatrix
+
+variable [Fintype m]
+
+variable [DecidableEq m]
+
+/-- `A.submatrix e₁ e₂` is invertible if `A` is -/
+def submatrixEquivInvertible (A : Matrix m m α) (e₁ e₂ : n ≃ m) [Invertible A] :
+    Invertible (A.submatrix e₁ e₂) :=
+  invertibleOfRightInverse _ ((⅟ A).submatrix e₂ e₁) <| by
+    rw [Matrix.submatrix_mul_equiv, Matrix.mul_invOf_self, submatrix_one_equiv]
+#align matrix.submatrix_equiv_invertible Matrix.submatrixEquivInvertible
+
+/-- `A` is invertible if `A.submatrix e₁ e₂` is -/
+def invertibleOfSubmatrixEquivInvertible (A : Matrix m m α) (e₁ e₂ : n ≃ m)
+    [Invertible (A.submatrix e₁ e₂)] : Invertible A :=
+  invertibleOfRightInverse _ ((⅟ (A.submatrix e₁ e₂)).submatrix e₂.symm e₁.symm) <|
+    by
+    have : A = (A.submatrix e₁ e₂).submatrix e₁.symm e₂.symm := by simp
+    conv in _ ⬝ _ =>
+      congr
+      rw [this]
+    rw [Matrix.submatrix_mul_equiv, Matrix.mul_invOf_self, submatrix_one_equiv]
+#align matrix.invertible_of_submatrix_equiv_invertible Matrix.invertibleOfSubmatrixEquivInvertible
+
+theorem invOf_submatrix_equiv_eq (A : Matrix m m α) (e₁ e₂ : n ≃ m) [Invertible A]
+    [Invertible (A.submatrix e₁ e₂)] : ⅟ (A.submatrix e₁ e₂) = (⅟ A).submatrix e₂ e₁ :=
+  by
+  letI := submatrix_equiv_invertible A e₁ e₂
+  haveI := Invertible.subsingleton (A.submatrix e₁ e₂)
+  convert(rfl : ⅟ (A.submatrix e₁ e₂) = _)
+#align matrix.inv_of_submatrix_equiv_eq Matrix.invOf_submatrix_equiv_eq
+
+/-- Together `matrix.submatrix_equiv_invertible` and
+`matrix.invertible_of_submatrix_equiv_invertible` form an equivalence, although both sides of the
+equiv are subsingleton anyway. -/
+@[simps]
+def submatrixEquivInvertibleEquivInvertible (A : Matrix m m α) (e₁ e₂ : n ≃ m) :
+    Invertible (A.submatrix e₁ e₂) ≃ Invertible A
+    where
+  toFun _ := invertible_of_submatrix_equiv_invertible A e₁ e₂
+  invFun _ := submatrix_equiv_invertible A e₁ e₂
+  left_inv _ := Subsingleton.elim _ _
+  right_inv _ := Subsingleton.elim _ _
+#align matrix.submatrix_equiv_invertible_equiv_invertible Matrix.submatrixEquivInvertibleEquivInvertible
+
+/-- When lowered to a prop, `matrix.invertible_of_submatrix_equiv_invertible` forms an `iff`. -/
+@[simp]
+theorem isUnit_submatrix_equiv {A : Matrix m m α} (e₁ e₂ : n ≃ m) :
+    IsUnit (A.submatrix e₁ e₂) ↔ IsUnit A := by
+  simp only [← nonempty_invertible_iff_isUnit,
+    (submatrix_equiv_invertible_equiv_invertible A _ _).nonempty_congr]
+#align matrix.is_unit_submatrix_equiv Matrix.isUnit_submatrix_equiv
+
+@[simp]
+theorem inv_submatrix_equiv (A : Matrix m m α) (e₁ e₂ : n ≃ m) :
+    (A.submatrix e₁ e₂)⁻¹ = A⁻¹.submatrix e₂ e₁ :=
+  by
+  by_cases h : IsUnit A
+  · cases h.nonempty_invertible
+    letI := submatrix_equiv_invertible A e₁ e₂
+    rw [← inv_of_eq_nonsing_inv, ← inv_of_eq_nonsing_inv, inv_of_submatrix_equiv_eq]
+  · have := (is_unit_submatrix_equiv e₁ e₂).Not.mpr h
+    simp_rw [nonsing_inv_eq_ring_inverse, Ring.inverse_non_unit _ h, Ring.inverse_non_unit _ this,
+      submatrix_zero, Pi.zero_apply]
+#align matrix.inv_submatrix_equiv Matrix.inv_submatrix_equiv
+
+theorem inv_reindex (e₁ e₂ : n ≃ m) (A : Matrix n n α) : (reindex e₁ e₂ A)⁻¹ = reindex e₂ e₁ A⁻¹ :=
+  inv_submatrix_equiv A e₁.symm e₂.symm
+#align matrix.inv_reindex Matrix.inv_reindex
+
+end Submatrix
+
 /-! ### More results about determinants -/
 
 
Diff
@@ -114,7 +114,7 @@ def invertibleOfDetInvertible [Invertible A.det] : Invertible A
 theorem invOf_eq [Invertible A.det] [Invertible A] : ⅟ A = ⅟ A.det • A.adjugate :=
   by
   letI := invertible_of_det_invertible A
-  convert (rfl : ⅟ A = _)
+  convert(rfl : ⅟ A = _)
 #align matrix.inv_of_eq Matrix.invOf_eq
 
 /-- `A.det` is invertible if `A` has a left inverse. -/
@@ -141,7 +141,7 @@ def detInvertibleOfInvertible [Invertible A] : Invertible A.det :=
 theorem det_invOf [Invertible A] [Invertible A.det] : (⅟ A).det = ⅟ A.det :=
   by
   letI := det_invertible_of_invertible A
-  convert (rfl : _ = ⅟ A.det)
+  convert(rfl : _ = ⅟ A.det)
 #align matrix.det_inv_of Matrix.det_invOf
 
 /-- Together `matrix.det_invertible_of_invertible` and `matrix.invertible_of_det_invertible` form an
@@ -548,7 +548,7 @@ theorem invOf_diagonal_eq {α} [Semiring α] (v : n → α) [Invertible v] [Inve
   by
   letI := diagonal_invertible v
   haveI := Invertible.subsingleton (diagonal v)
-  convert (rfl : ⅟ (diagonal v) = _)
+  convert(rfl : ⅟ (diagonal v) = _)
 #align matrix.inv_of_diagonal_eq Matrix.invOf_diagonal_eq
 
 /-- `v` is invertible if `diagonal v` is -/
Diff
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Tim Baanen, Lu-Ming Zhang
 
 ! This file was ported from Lean 3 source module linear_algebra.matrix.nonsingular_inverse
-! leanprover-community/mathlib commit 25cf7631da8ddc2d5f957c388bf5e4b25a77d8dc
+! leanprover-community/mathlib commit da420a8c6dd5bdfb85c4ced85c34388f633bc6ff
 ! Please do not edit these lines, except to modify the commit id
 ! if you have ported upstream changes.
 -/
@@ -547,6 +547,7 @@ theorem invOf_diagonal_eq {α} [Semiring α] (v : n → α) [Invertible v] [Inve
     ⅟ (diagonal v) = diagonal (⅟ v) :=
   by
   letI := diagonal_invertible v
+  haveI := Invertible.subsingleton (diagonal v)
   convert (rfl : ⅟ (diagonal v) = _)
 #align matrix.inv_of_diagonal_eq Matrix.invOf_diagonal_eq
 

Changes in mathlib4

mathlib3
mathlib4
style: replace '.-/' by '. -/' (#11938)

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

Diff
@@ -206,7 +206,7 @@ theorem isUnit_det_transpose (h : IsUnit A.det) : IsUnit Aᵀ.det := by
 /-! ### A noncomputable `Inv` instance  -/
 
 
-/-- The inverse of a square matrix, when it is invertible (and zero otherwise).-/
+/-- The inverse of a square matrix, when it is invertible (and zero otherwise). -/
 noncomputable instance inv : Inv (Matrix n n α) :=
   ⟨fun A => Ring.inverse A.det • A.adjugate⟩
 
chore(LinearAlgebra): fix Fintype/Finite assumptions (#11565)

.. in equivOfPiLEquivPi, coePiBasisFun.toMatrix_eq_transpose, vecMul_surjective_iff_exists_left_inverse, and mulVec_surjective_iff_exists_right_inverse

Diff
@@ -193,6 +193,8 @@ theorem det_ne_zero_of_right_inverse [Nontrivial α] (h : A * B = 1) : A.det ≠
 
 end Invertible
 
+section Inv
+
 variable [Fintype n] [DecidableEq n] [CommRing α]
 variable (A : Matrix n n α) (B : Matrix n n α)
 
@@ -352,13 +354,15 @@ lemma mul_right_inj_of_invertible [Invertible A] {x y : Matrix n m α} : A * x =
 lemma mul_left_inj_of_invertible [Invertible A] {x y : Matrix m n α} : x * A = y * A ↔ x = y :=
   (mul_left_injective_of_invertible A).eq_iff
 
+end Inv
+
 section InjectiveMul
-variable [Fintype m] [DecidableEq m]
+variable [Fintype n] [Fintype m] [DecidableEq m] [CommRing α]
 variable [Fintype l] [DecidableEq l]
 
 lemma mul_left_injective_of_inv (A : Matrix m n α) (B : Matrix n m α) (h : A * B = 1) :
-    Function.Injective (fun x : Matrix l m α => x * A) :=
-  fun _ _ g => by simpa only [Matrix.mul_assoc, Matrix.mul_one, h] using congr_arg (· * B) g
+    Function.Injective (fun x : Matrix l m α => x * A) := fun _ _ g => by
+  simpa only [Matrix.mul_assoc, Matrix.mul_one, h] using congr_arg (· * B) g
 
 lemma mul_right_injective_of_inv (A : Matrix m n α) (B : Matrix n m α) (h : A * B = 1) :
     Function.Injective (fun x : Matrix m l α => B * x) :=
@@ -368,29 +372,39 @@ end InjectiveMul
 
 section vecMul
 
-variable [Fintype m] [DecidableEq m] {K R : Type*} [Field K]
+variable [DecidableEq m] [DecidableEq n]
+
+section Semiring
 
-theorem vecMul_surjective_iff_exists_left_inverse [Semiring R] {A : Matrix m n R} :
+variable {R : Type*} [Semiring R]
+
+theorem vecMul_surjective_iff_exists_left_inverse [Fintype m] [Finite n] {A : Matrix m n R} :
     Function.Surjective A.vecMul ↔ ∃ B : Matrix n m R, B * A = 1 := by
+  cases nonempty_fintype n
   refine ⟨fun h ↦ ?_, fun ⟨B, hBA⟩ y ↦ ⟨y ᵥ* B, by simp [hBA]⟩⟩
   choose rows hrows using (h <| Pi.single · 1)
   refine ⟨Matrix.of rows, Matrix.ext fun i j => ?_⟩
   rw [mul_apply_eq_vecMul, one_eq_pi_single, ← hrows]
   rfl
 
-theorem mulVec_surjective_iff_exists_right_inverse [Semiring R] {A : Matrix m n R} :
+theorem mulVec_surjective_iff_exists_right_inverse [Finite m] [Fintype n] {A : Matrix m n R} :
     Function.Surjective A.mulVec ↔ ∃ B : Matrix n m R, A * B = 1 := by
+  cases nonempty_fintype m
   refine ⟨fun h ↦ ?_, fun ⟨B, hBA⟩ y ↦ ⟨B *ᵥ y, by simp [hBA]⟩⟩
   choose cols hcols using (h <| Pi.single · 1)
   refine ⟨(Matrix.of cols)ᵀ, Matrix.ext fun i j ↦ ?_⟩
   rw [one_eq_pi_single, Pi.single_comm, ← hcols j]
   rfl
 
-theorem vecMul_surjective_iff_isUnit {A : Matrix m m α} :
+end Semiring
+
+variable {R K : Type*} [CommRing R] [Field K] [Fintype m]
+
+theorem vecMul_surjective_iff_isUnit {A : Matrix m m R} :
     Function.Surjective A.vecMul ↔ IsUnit A := by
   rw [vecMul_surjective_iff_exists_left_inverse, exists_left_inverse_iff_isUnit]
 
-theorem mulVec_surjective_iff_isUnit {A : Matrix m m α} :
+theorem mulVec_surjective_iff_isUnit {A : Matrix m m R} :
     Function.Surjective A.mulVec ↔ IsUnit A := by
   rw [mulVec_surjective_iff_exists_right_inverse, exists_right_inverse_iff_isUnit]
 
@@ -420,11 +434,11 @@ theorem linearIndependent_cols_iff_isUnit {A : Matrix m m K} :
   rw [← transpose_transpose A, isUnit_transpose, linearIndependent_rows_iff_isUnit,
     transpose_transpose]
 
-theorem vecMul_surjective_of_invertible (A : Matrix m m α) [Invertible A] :
+theorem vecMul_surjective_of_invertible (A : Matrix m m R) [Invertible A] :
     Function.Surjective A.vecMul :=
   vecMul_surjective_iff_isUnit.2 <| isUnit_of_invertible A
 
-theorem mulVec_surjective_of_invertible (A : Matrix m m α) [Invertible A] :
+theorem mulVec_surjective_of_invertible (A : Matrix m m R) [Invertible A] :
     Function.Surjective A.mulVec :=
   mulVec_surjective_iff_isUnit.2 <| isUnit_of_invertible A
 
@@ -446,6 +460,9 @@ theorem linearIndependent_cols_of_invertible (A : Matrix m m K) [Invertible A] :
 
 end vecMul
 
+variable [Fintype n] [DecidableEq n] [CommRing α]
+variable (A : Matrix n n α) (B : Matrix n n α)
+
 theorem nonsing_inv_cancel_or_zero : A⁻¹ * A = 1 ∧ A * A⁻¹ = 1 ∨ A⁻¹ = 0 := by
   by_cases h : IsUnit A.det
   · exact Or.inl ⟨nonsing_inv_mul _ h, mul_nonsing_inv _ h⟩
@@ -760,7 +777,7 @@ end Submatrix
 
 section Det
 
-variable [Fintype m] [DecidableEq m]
+variable [Fintype m] [DecidableEq m] [CommRing α]
 
 /-- A variant of `Matrix.det_units_conj`. -/
 theorem det_conj {M : Matrix m m α} (h : IsUnit M) (N : Matrix m m α) : det (M * N * M⁻¹) = det N :=
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
@@ -65,7 +65,6 @@ open Matrix BigOperators Equiv Equiv.Perm Finset
 section Invertible
 
 variable [Fintype n] [DecidableEq n] [CommRing α]
-
 variable (A : Matrix n n α) (B : Matrix n n α)
 
 /-- If `A.det` has a constructive inverse, produce one for `A`. -/
@@ -195,7 +194,6 @@ theorem det_ne_zero_of_right_inverse [Nontrivial α] (h : A * B = 1) : A.det ≠
 end Invertible
 
 variable [Fintype n] [DecidableEq n] [CommRing α]
-
 variable (A : Matrix n n α) (B : Matrix n n α)
 
 theorem isUnit_det_transpose (h : IsUnit A.det) : IsUnit Aᵀ.det := by
@@ -690,7 +688,6 @@ results about only the latter.
 section Submatrix
 
 variable [Fintype m]
-
 variable [DecidableEq m]
 
 /-- `A.submatrix e₁ e₂` is invertible if `A` is -/
chore: Matrix.mulVec and Matrix.vecMul get infix notation (#10297)

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

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

Diff
@@ -374,7 +374,7 @@ variable [Fintype m] [DecidableEq m] {K R : Type*} [Field K]
 
 theorem vecMul_surjective_iff_exists_left_inverse [Semiring R] {A : Matrix m n R} :
     Function.Surjective A.vecMul ↔ ∃ B : Matrix n m R, B * A = 1 := by
-  refine ⟨fun h ↦ ?_, fun ⟨B, hBA⟩ y ↦ ⟨B.vecMul y, by simp [hBA]⟩⟩
+  refine ⟨fun h ↦ ?_, fun ⟨B, hBA⟩ y ↦ ⟨y ᵥ* B, by simp [hBA]⟩⟩
   choose rows hrows using (h <| Pi.single · 1)
   refine ⟨Matrix.of rows, Matrix.ext fun i j => ?_⟩
   rw [mul_apply_eq_vecMul, one_eq_pi_single, ← hrows]
@@ -382,7 +382,7 @@ theorem vecMul_surjective_iff_exists_left_inverse [Semiring R] {A : Matrix m n R
 
 theorem mulVec_surjective_iff_exists_right_inverse [Semiring R] {A : Matrix m n R} :
     Function.Surjective A.mulVec ↔ ∃ B : Matrix n m R, A * B = 1 := by
-  refine ⟨fun h ↦ ?_, fun ⟨B, hBA⟩ y ↦ ⟨B.mulVec y, by simp [hBA]⟩⟩
+  refine ⟨fun h ↦ ?_, fun ⟨B, hBA⟩ y ↦ ⟨B *ᵥ y, by simp [hBA]⟩⟩
   choose cols hcols using (h <| Pi.single · 1)
   refine ⟨(Matrix.of cols)ᵀ, Matrix.ext fun i j ↦ ?_⟩
   rw [one_eq_pi_single, Pi.single_comm, ← hcols j]
@@ -667,7 +667,7 @@ theorem list_prod_inv_reverse : ∀ l : List (Matrix n n α), l.prod⁻¹ = (l.r
 /-- One form of **Cramer's rule**. See `Matrix.mulVec_cramer` for a stronger form. -/
 @[simp]
 theorem det_smul_inv_mulVec_eq_cramer (A : Matrix n n α) (b : n → α) (h : IsUnit A.det) :
-    A.det • A⁻¹.mulVec b = cramer A b := by
+    A.det • A⁻¹ *ᵥ b = cramer A b := by
   rw [cramer_eq_adjugate_mulVec, A.nonsing_inv_apply h, ← smul_mulVec_assoc, smul_smul,
     h.mul_val_inv, one_smul]
 #align matrix.det_smul_inv_mul_vec_eq_cramer Matrix.det_smul_inv_mulVec_eq_cramer
@@ -675,7 +675,7 @@ theorem det_smul_inv_mulVec_eq_cramer (A : Matrix n n α) (b : n → α) (h : Is
 /-- One form of **Cramer's rule**. See `Matrix.mulVec_cramer` for a stronger form. -/
 @[simp]
 theorem det_smul_inv_vecMul_eq_cramer_transpose (A : Matrix n n α) (b : n → α) (h : IsUnit A.det) :
-    A.det • A⁻¹.vecMul b = cramer Aᵀ b := by
+    A.det • b ᵥ* A⁻¹ = cramer Aᵀ b := by
   rw [← A⁻¹.transpose_transpose, vecMul_transpose, transpose_nonsing_inv, ← det_transpose,
     Aᵀ.det_smul_inv_mulVec_eq_cramer _ (isUnit_det_transpose A h)]
 #align matrix.det_smul_inv_vec_mul_eq_cramer_transpose Matrix.det_smul_inv_vecMul_eq_cramer_transpose
chore: remove uses of cases' (#9171)

I literally went through and regex'd some uses of cases', replacing them with rcases; this is meant to be a low effort PR as I hope that tools can do this in the future.

rcases is an easier replacement than cases, though with better tools we could in future do a second pass converting simple rcases added here (and existing ones) to cases.

Diff
@@ -553,7 +553,7 @@ variable (A)
 theorem inv_zero : (0 : Matrix n n α)⁻¹ = 0 := by
   cases' subsingleton_or_nontrivial α with ht ht
   · simp [eq_iff_true_of_subsingleton]
-  cases' (Fintype.card n).zero_le.eq_or_lt with hc hc
+  rcases (Fintype.card n).zero_le.eq_or_lt with hc | hc
   · rw [eq_comm, Fintype.card_eq_zero_iff] at hc
     haveI := hc
     ext i
feat: Invertible matrices (#8219)

We add some results on invertible matrices, showing that for a finite square matrix A, IsUnit A is equivalent to the surjectivity/injectivity of left/right multiplication, and to the linear independence of the set of rows/columns.

We also add a couple of lemmas about the existence of left/right inverses for nonsquare matrices, and a bit of API for mulVecLin and vecMulLinear.

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

Diff
@@ -5,6 +5,7 @@ Authors: Anne Baanen, Lu-Ming Zhang
 -/
 import Mathlib.Data.Matrix.Invertible
 import Mathlib.LinearAlgebra.Matrix.Adjugate
+import Mathlib.LinearAlgebra.FiniteDimensional
 
 #align_import linear_algebra.matrix.nonsingular_inverse from "leanprover-community/mathlib"@"722b3b152ddd5e0cf21c0a29787c76596cb6b422"
 
@@ -165,10 +166,16 @@ theorem isUnit_of_left_inverse (h : B * A = 1) : IsUnit A :=
   ⟨⟨A, B, mul_eq_one_comm.mp h, h⟩, rfl⟩
 #align matrix.is_unit_of_left_inverse Matrix.isUnit_of_left_inverse
 
+theorem exists_left_inverse_iff_isUnit : (∃ B, B * A = 1) ↔ IsUnit A :=
+  ⟨fun ⟨_, h⟩ ↦ isUnit_of_left_inverse h, fun h ↦ have := h.invertible; ⟨⅟A, invOf_mul_self' A⟩⟩
+
 theorem isUnit_of_right_inverse (h : A * B = 1) : IsUnit A :=
   ⟨⟨A, B, h, mul_eq_one_comm.mp h⟩, rfl⟩
 #align matrix.is_unit_of_right_inverse Matrix.isUnit_of_right_inverse
 
+theorem exists_right_inverse_iff_isUnit : (∃ B, A * B = 1) ↔ IsUnit A :=
+  ⟨fun ⟨_, h⟩ ↦ isUnit_of_right_inverse h, fun h ↦ have := h.invertible; ⟨⅟A, mul_invOf_self' A⟩⟩
+
 theorem isUnit_det_of_left_inverse (h : B * A = 1) : IsUnit A.det :=
   @isUnit_of_invertible _ _ _ (detInvertibleOfLeftInverse _ _ h)
 #align matrix.is_unit_det_of_left_inverse Matrix.isUnit_det_of_left_inverse
@@ -361,6 +368,86 @@ lemma mul_right_injective_of_inv (A : Matrix m n α) (B : Matrix n m α) (h : A
 
 end InjectiveMul
 
+section vecMul
+
+variable [Fintype m] [DecidableEq m] {K R : Type*} [Field K]
+
+theorem vecMul_surjective_iff_exists_left_inverse [Semiring R] {A : Matrix m n R} :
+    Function.Surjective A.vecMul ↔ ∃ B : Matrix n m R, B * A = 1 := by
+  refine ⟨fun h ↦ ?_, fun ⟨B, hBA⟩ y ↦ ⟨B.vecMul y, by simp [hBA]⟩⟩
+  choose rows hrows using (h <| Pi.single · 1)
+  refine ⟨Matrix.of rows, Matrix.ext fun i j => ?_⟩
+  rw [mul_apply_eq_vecMul, one_eq_pi_single, ← hrows]
+  rfl
+
+theorem mulVec_surjective_iff_exists_right_inverse [Semiring R] {A : Matrix m n R} :
+    Function.Surjective A.mulVec ↔ ∃ B : Matrix n m R, A * B = 1 := by
+  refine ⟨fun h ↦ ?_, fun ⟨B, hBA⟩ y ↦ ⟨B.mulVec y, by simp [hBA]⟩⟩
+  choose cols hcols using (h <| Pi.single · 1)
+  refine ⟨(Matrix.of cols)ᵀ, Matrix.ext fun i j ↦ ?_⟩
+  rw [one_eq_pi_single, Pi.single_comm, ← hcols j]
+  rfl
+
+theorem vecMul_surjective_iff_isUnit {A : Matrix m m α} :
+    Function.Surjective A.vecMul ↔ IsUnit A := by
+  rw [vecMul_surjective_iff_exists_left_inverse, exists_left_inverse_iff_isUnit]
+
+theorem mulVec_surjective_iff_isUnit {A : Matrix m m α} :
+    Function.Surjective A.mulVec ↔ IsUnit A := by
+  rw [mulVec_surjective_iff_exists_right_inverse, exists_right_inverse_iff_isUnit]
+
+theorem vecMul_injective_iff_isUnit {A : Matrix m m K} :
+    Function.Injective A.vecMul ↔ IsUnit A := by
+  refine ⟨fun h ↦ ?_, fun h ↦ ?_⟩
+  · rw [← vecMul_surjective_iff_isUnit]
+    exact LinearMap.surjective_of_injective (f := A.vecMulLinear) h
+  change Function.Injective A.vecMulLinear
+  rw [← LinearMap.ker_eq_bot, LinearMap.ker_eq_bot']
+  intro c hc
+  replace h := h.invertible
+  simpa using congr_arg A⁻¹.vecMulLinear hc
+
+theorem mulVec_injective_iff_isUnit {A : Matrix m m K} :
+    Function.Injective A.mulVec ↔ IsUnit A := by
+  rw [← isUnit_transpose, ← vecMul_injective_iff_isUnit]
+  simp_rw [vecMul_transpose]
+
+theorem linearIndependent_rows_iff_isUnit {A : Matrix m m K} :
+    LinearIndependent K (fun i ↦ A i) ↔ IsUnit A := by
+  rw [← transpose_transpose A, ← mulVec_injective_iff, ← coe_mulVecLin, mulVecLin_transpose,
+    transpose_transpose, ← vecMul_injective_iff_isUnit, coe_vecMulLinear]
+
+theorem linearIndependent_cols_iff_isUnit {A : Matrix m m K} :
+    LinearIndependent K (fun i ↦ Aᵀ i) ↔ IsUnit A := by
+  rw [← transpose_transpose A, isUnit_transpose, linearIndependent_rows_iff_isUnit,
+    transpose_transpose]
+
+theorem vecMul_surjective_of_invertible (A : Matrix m m α) [Invertible A] :
+    Function.Surjective A.vecMul :=
+  vecMul_surjective_iff_isUnit.2 <| isUnit_of_invertible A
+
+theorem mulVec_surjective_of_invertible (A : Matrix m m α) [Invertible A] :
+    Function.Surjective A.mulVec :=
+  mulVec_surjective_iff_isUnit.2 <| isUnit_of_invertible A
+
+theorem vecMul_injective_of_invertible (A : Matrix m m K) [Invertible A] :
+    Function.Injective A.vecMul :=
+  vecMul_injective_iff_isUnit.2 <| isUnit_of_invertible A
+
+theorem mulVec_injective_of_invertible (A : Matrix m m K) [Invertible A] :
+    Function.Injective A.mulVec :=
+  mulVec_injective_iff_isUnit.2 <| isUnit_of_invertible A
+
+theorem linearIndependent_rows_of_invertible (A : Matrix m m K) [Invertible A] :
+    LinearIndependent K (fun i ↦ A i) :=
+  linearIndependent_rows_iff_isUnit.2 <| isUnit_of_invertible A
+
+theorem linearIndependent_cols_of_invertible (A : Matrix m m K) [Invertible A] :
+    LinearIndependent K (fun i ↦ Aᵀ i) :=
+  linearIndependent_cols_iff_isUnit.2 <| isUnit_of_invertible A
+
+end vecMul
+
 theorem nonsing_inv_cancel_or_zero : A⁻¹ * A = 1 ∧ A * A⁻¹ = 1 ∨ A⁻¹ = 0 := by
   by_cases h : IsUnit A.det
   · exact Or.inl ⟨nonsing_inv_mul _ h, mul_nonsing_inv _ h⟩
fix: attribute [simp] ... in -> attribute [local simp] ... in (#7678)

Mathlib.Logic.Unique contains the line attribute [simp] eq_iff_true_of_subsingleton in ...:

https://github.com/leanprover-community/mathlib4/blob/96a11c7aac574c00370c2b3dab483cb676405c5d/Mathlib/Logic/Unique.lean#L255-L256

Despite what the in part may imply, this adds the lemma to the simp set "globally", including for downstream files; it is likely that attribute [local simp] eq_iff_true_of_subsingleton in ... was meant instead (or maybe scoped simp, but I think "scoped" refers to the current namespace). Indeed, the relevant lemma is not marked with @[simp] for possible slowness: https://github.com/leanprover/std4/blob/846e9e1d6bb534774d1acd2dc430e70987da3c18/Std/Logic.lean#L749. Adding it to the simp set causes the example at https://leanprover.zulipchat.com/#narrow/stream/287929-mathlib4/topic/Regression.20in.20simp to slow down.

This PR changes this and fixes the relevant downstream simps. There was also one ocurrence of attribute [simp] FullSubcategory.comp_def FullSubcategory.id_def in in Mathlib.CategoryTheory.Monoidal.Subcategory but that was much easier to fix.

https://github.com/leanprover-community/mathlib4/blob/bc49eb9ba756a233370b4b68bcdedd60402f71ed/Mathlib/CategoryTheory/Monoidal/Subcategory.lean#L118-L119

Diff
@@ -465,7 +465,7 @@ variable (A)
 @[simp]
 theorem inv_zero : (0 : Matrix n n α)⁻¹ = 0 := by
   cases' subsingleton_or_nontrivial α with ht ht
-  · simp
+  · simp [eq_iff_true_of_subsingleton]
   cases' (Fintype.card n).zero_le.eq_or_lt with hc hc
   · rw [eq_comm, Fintype.card_eq_zero_iff] at hc
     haveI := hc
chore: missing spaces after rcases, convert and congrm (#7725)

Replace rcases( with rcases (. Same thing for convert( and congrm(. No other change.

Diff
@@ -78,7 +78,7 @@ def invertibleOfDetInvertible [Invertible A.det] : Invertible A where
 
 theorem invOf_eq [Invertible A.det] [Invertible A] : ⅟ A = ⅟ A.det • A.adjugate := by
   letI := invertibleOfDetInvertible A
-  convert(rfl : ⅟ A = _)
+  convert (rfl : ⅟ A = _)
 #align matrix.inv_of_eq Matrix.invOf_eq
 
 /-- `A.det` is invertible if `A` has a left inverse. -/
@@ -102,7 +102,7 @@ def detInvertibleOfInvertible [Invertible A] : Invertible A.det :=
 
 theorem det_invOf [Invertible A] [Invertible A.det] : (⅟ A).det = ⅟ A.det := by
   letI := detInvertibleOfInvertible A
-  convert(rfl : _ = ⅟ A.det)
+  convert (rfl : _ = ⅟ A.det)
 #align matrix.det_inv_of Matrix.det_invOf
 
 /-- Together `Matrix.detInvertibleOfInvertible` and `Matrix.invertibleOfDetInvertible` form an
@@ -504,7 +504,7 @@ theorem invOf_diagonal_eq {α} [Semiring α] (v : n → α) [Invertible v] [Inve
     ⅟ (diagonal v) = diagonal (⅟ v) := by
   letI := diagonalInvertible v
   -- Porting note: no longer need `haveI := Invertible.subsingleton (diagonal v)`
-  convert(rfl : ⅟ (diagonal v) = _)
+  convert (rfl : ⅟ (diagonal v) = _)
 #align matrix.inv_of_diagonal_eq Matrix.invOf_diagonal_eq
 
 /-- `v` is invertible if `diagonal v` is -/
@@ -630,7 +630,7 @@ theorem invOf_submatrix_equiv_eq (A : Matrix m m α) (e₁ e₂ : n ≃ m) [Inve
     [Invertible (A.submatrix e₁ e₂)] : ⅟ (A.submatrix e₁ e₂) = (⅟ A).submatrix e₂ e₁ := by
   letI := submatrixEquivInvertible A e₁ e₂
   -- Porting note: no longer need `haveI := Invertible.subsingleton (A.submatrix e₁ e₂)`
-  convert(rfl : ⅟ (A.submatrix e₁ e₂) = _)
+  convert (rfl : ⅟ (A.submatrix e₁ e₂) = _)
 #align matrix.inv_of_submatrix_equiv_eq Matrix.invOf_submatrix_equiv_eq
 
 /-- Together `Matrix.submatrixEquivInvertible` and
chore: fix deprecated identifier (#7502)

I came across a few places in Mathlib that still used this name that has been deprecated for a few years now. Now we're consistent again and I don't have to suffer when encountering the wrong version :)

Diff
@@ -1,7 +1,7 @@
 /-
-Copyright (c) 2019 Tim Baanen. All rights reserved.
+Copyright (c) 2019 Anne Baanen. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
-Authors: Tim Baanen, Lu-Ming Zhang
+Authors: Anne Baanen, Lu-Ming Zhang
 -/
 import Mathlib.Data.Matrix.Invertible
 import Mathlib.LinearAlgebra.Matrix.Adjugate
feat: injectivity of multiplication with matrices whose product is 1 (#7266)

Given two matrices $A$ and $B$ whose product is 1 $AB = 1$, then left multiplication/right multiplication with these matrices from the appropriate side is an injection.

Suggested by @Vierkantor in PR #6042

Diff
@@ -347,6 +347,20 @@ lemma mul_right_inj_of_invertible [Invertible A] {x y : Matrix n m α} : A * x =
 lemma mul_left_inj_of_invertible [Invertible A] {x y : Matrix m n α} : x * A = y * A ↔ x = y :=
   (mul_left_injective_of_invertible A).eq_iff
 
+section InjectiveMul
+variable [Fintype m] [DecidableEq m]
+variable [Fintype l] [DecidableEq l]
+
+lemma mul_left_injective_of_inv (A : Matrix m n α) (B : Matrix n m α) (h : A * B = 1) :
+    Function.Injective (fun x : Matrix l m α => x * A) :=
+  fun _ _ g => by simpa only [Matrix.mul_assoc, Matrix.mul_one, h] using congr_arg (· * B) g
+
+lemma mul_right_injective_of_inv (A : Matrix m n α) (B : Matrix n m α) (h : A * B = 1) :
+    Function.Injective (fun x : Matrix m l α => B * x) :=
+  fun _ _ g => by simpa only [← Matrix.mul_assoc, Matrix.one_mul, h] using congr_arg (A * ·) g
+
+end InjectiveMul
+
 theorem nonsing_inv_cancel_or_zero : A⁻¹ * A = 1 ∧ A * A⁻¹ = 1 ∨ A⁻¹ = 0 := by
   by_cases h : IsUnit A.det
   · exact Or.inl ⟨nonsing_inv_mul _ h, mul_nonsing_inv _ h⟩
chore(Data/Matrix/Invertible): generalize conjugate and transpose lemmas (#6618)

The conjTranspose lemmas now work for non-commutative rings.

Diff
@@ -142,29 +142,6 @@ def invertibleOfRightInverse (h : A * B = 1) : Invertible A :=
   ⟨B, mul_eq_one_comm.mp h, h⟩
 #align matrix.invertible_of_right_inverse Matrix.invertibleOfRightInverse
 
-/-- The transpose of an invertible matrix is invertible. -/
-instance invertibleTranspose [Invertible A] : Invertible Aᵀ :=
-  haveI : Invertible Aᵀ.det := by simpa using detInvertibleOfInvertible A
-  invertibleOfDetInvertible Aᵀ
-#align matrix.invertible_transpose Matrix.invertibleTranspose
-
--- porting note: added because Lean can no longer find this instance automatically
-/-- The conjugate transpose of an invertible matrix is invertible. -/
-instance invertibleConjTranspose [StarRing α] [Invertible A] : Invertible Aᴴ :=
-  Invertible.star A
-
-/-- A matrix is invertible if the transpose is invertible. -/
-def invertibleOfInvertibleTranspose [Invertible Aᵀ] : Invertible A := by
-  rw [← transpose_transpose A]
-  infer_instance
-#align matrix.invertible__of_invertible_transpose Matrix.invertibleOfInvertibleTranspose
-
-/-- A matrix is invertible if the conjugate transpose is invertible. -/
-def invertibleOfInvertibleConjTranspose [StarRing α] [Invertible Aᴴ] : Invertible A := by
-  rw [← conjTranspose_conjTranspose A, ← star_eq_conjTranspose]
-  infer_instance
-#align matrix.invertible_of_invertible_conj_transpose Matrix.invertibleOfInvertibleConjTranspose
-
 /-- Given a proof that `A.det` has a constructive inverse, lift `A` to `(Matrix n n α)ˣ`-/
 def unitOfDetInvertible [Invertible A.det] : (Matrix n n α)ˣ :=
   @unitOfInvertible _ _ A (invertibleOfDetInvertible A)
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
@@ -71,9 +71,9 @@ variable (A : Matrix n n α) (B : Matrix n n α)
 def invertibleOfDetInvertible [Invertible A.det] : Invertible A where
   invOf := ⅟ A.det • A.adjugate
   mul_invOf_self := by
-    rw [mul_smul_comm, Matrix.mul_eq_mul, mul_adjugate, smul_smul, invOf_mul_self, one_smul]
+    rw [mul_smul_comm, mul_adjugate, smul_smul, invOf_mul_self, one_smul]
   invOf_mul_self := by
-    rw [smul_mul_assoc, Matrix.mul_eq_mul, adjugate_mul, smul_smul, invOf_mul_self, one_smul]
+    rw [smul_mul_assoc, adjugate_mul, smul_smul, invOf_mul_self, one_smul]
 #align matrix.invertible_of_det_invertible Matrix.invertibleOfDetInvertible
 
 theorem invOf_eq [Invertible A.det] [Invertible A] : ⅟ A = ⅟ A.det • A.adjugate := by
@@ -82,14 +82,14 @@ theorem invOf_eq [Invertible A.det] [Invertible A] : ⅟ A = ⅟ A.det • A.adj
 #align matrix.inv_of_eq Matrix.invOf_eq
 
 /-- `A.det` is invertible if `A` has a left inverse. -/
-def detInvertibleOfLeftInverse (h : B ⬝ A = 1) : Invertible A.det where
+def detInvertibleOfLeftInverse (h : B * A = 1) : Invertible A.det where
   invOf := B.det
   mul_invOf_self := by rw [mul_comm, ← det_mul, h, det_one]
   invOf_mul_self := by rw [← det_mul, h, det_one]
 #align matrix.det_invertible_of_left_inverse Matrix.detInvertibleOfLeftInverse
 
 /-- `A.det` is invertible if `A` has a right inverse. -/
-def detInvertibleOfRightInverse (h : A ⬝ B = 1) : Invertible A.det where
+def detInvertibleOfRightInverse (h : A * B = 1) : Invertible A.det where
   invOf := B.det
   mul_invOf_self := by rw [← det_mul, h, det_one]
   invOf_mul_self := by rw [mul_comm, ← det_mul, h, det_one]
@@ -117,28 +117,28 @@ def invertibleEquivDetInvertible : Invertible A ≃ Invertible A.det where
 
 variable {A B}
 
-theorem mul_eq_one_comm : A ⬝ B = 1 ↔ B ⬝ A = 1 :=
-  suffices ∀ A B, A ⬝ B = 1 → B ⬝ A = 1 from ⟨this A B, this B A⟩
+theorem mul_eq_one_comm : A * B = 1 ↔ B * A = 1 :=
+  suffices ∀ A B, A * B = 1 → B * A = 1 from ⟨this A B, this B A⟩
   fun A B h => by
   letI : Invertible B.det := detInvertibleOfLeftInverse _ _ h
   letI : Invertible B := invertibleOfDetInvertible B
   calc
-    B ⬝ A = B ⬝ A ⬝ (B ⬝ ⅟ B) := by rw [Matrix.mul_invOf_self, Matrix.mul_one]
-    _ = B ⬝ (A ⬝ B ⬝ ⅟ B) := by simp only [Matrix.mul_assoc]
-    _ = B ⬝ ⅟ B := by rw [h, Matrix.one_mul]
-    _ = 1 := Matrix.mul_invOf_self B
+    B * A = B * A * (B * ⅟ B) := by rw [mul_invOf_self, Matrix.mul_one]
+    _ = B * (A * B * ⅟ B) := by simp only [Matrix.mul_assoc]
+    _ = B * ⅟ B := by rw [h, Matrix.one_mul]
+    _ = 1 := mul_invOf_self B
 
 #align matrix.mul_eq_one_comm Matrix.mul_eq_one_comm
 
 variable (A B)
 
 /-- We can construct an instance of invertible A if A has a left inverse. -/
-def invertibleOfLeftInverse (h : B ⬝ A = 1) : Invertible A :=
+def invertibleOfLeftInverse (h : B * A = 1) : Invertible A :=
   ⟨B, h, mul_eq_one_comm.mp h⟩
 #align matrix.invertible_of_left_inverse Matrix.invertibleOfLeftInverse
 
 /-- We can construct an instance of invertible A if A has a right inverse. -/
-def invertibleOfRightInverse (h : A ⬝ B = 1) : Invertible A :=
+def invertibleOfRightInverse (h : A * B = 1) : Invertible A :=
   ⟨B, mul_eq_one_comm.mp h, h⟩
 #align matrix.invertible_of_right_inverse Matrix.invertibleOfRightInverse
 
@@ -184,27 +184,27 @@ theorem isUnit_det_of_invertible [Invertible A] : IsUnit A.det :=
 
 variable {A B}
 
-theorem isUnit_of_left_inverse (h : B ⬝ A = 1) : IsUnit A :=
+theorem isUnit_of_left_inverse (h : B * A = 1) : IsUnit A :=
   ⟨⟨A, B, mul_eq_one_comm.mp h, h⟩, rfl⟩
 #align matrix.is_unit_of_left_inverse Matrix.isUnit_of_left_inverse
 
-theorem isUnit_of_right_inverse (h : A ⬝ B = 1) : IsUnit A :=
+theorem isUnit_of_right_inverse (h : A * B = 1) : IsUnit A :=
   ⟨⟨A, B, h, mul_eq_one_comm.mp h⟩, rfl⟩
 #align matrix.is_unit_of_right_inverse Matrix.isUnit_of_right_inverse
 
-theorem isUnit_det_of_left_inverse (h : B ⬝ A = 1) : IsUnit A.det :=
+theorem isUnit_det_of_left_inverse (h : B * A = 1) : IsUnit A.det :=
   @isUnit_of_invertible _ _ _ (detInvertibleOfLeftInverse _ _ h)
 #align matrix.is_unit_det_of_left_inverse Matrix.isUnit_det_of_left_inverse
 
-theorem isUnit_det_of_right_inverse (h : A ⬝ B = 1) : IsUnit A.det :=
+theorem isUnit_det_of_right_inverse (h : A * B = 1) : IsUnit A.det :=
   @isUnit_of_invertible _ _ _ (detInvertibleOfRightInverse _ _ h)
 #align matrix.is_unit_det_of_right_inverse Matrix.isUnit_det_of_right_inverse
 
-theorem det_ne_zero_of_left_inverse [Nontrivial α] (h : B ⬝ A = 1) : A.det ≠ 0 :=
+theorem det_ne_zero_of_left_inverse [Nontrivial α] (h : B * A = 1) : A.det ≠ 0 :=
   (isUnit_det_of_left_inverse h).ne_zero
 #align matrix.det_ne_zero_of_left_inverse Matrix.det_ne_zero_of_left_inverse
 
-theorem det_ne_zero_of_right_inverse [Nontrivial α] (h : A ⬝ B = 1) : A.det ≠ 0 :=
+theorem det_ne_zero_of_right_inverse [Nontrivial α] (h : A * B = 1) : A.det ≠ 0 :=
   (isUnit_det_of_right_inverse h).ne_zero
 #align matrix.det_ne_zero_of_right_inverse Matrix.det_ne_zero_of_right_inverse
 
@@ -273,16 +273,16 @@ theorem conjTranspose_nonsing_inv [StarRing α] : A⁻¹ᴴ = Aᴴ⁻¹ := by
 
 /-- The `nonsing_inv` of `A` is a right inverse. -/
 @[simp]
-theorem mul_nonsing_inv (h : IsUnit A.det) : A ⬝ A⁻¹ = 1 := by
+theorem mul_nonsing_inv (h : IsUnit A.det) : A * A⁻¹ = 1 := by
   cases (A.isUnit_iff_isUnit_det.mpr h).nonempty_invertible
-  rw [← invOf_eq_nonsing_inv, Matrix.mul_invOf_self]
+  rw [← invOf_eq_nonsing_inv, mul_invOf_self]
 #align matrix.mul_nonsing_inv Matrix.mul_nonsing_inv
 
 /-- The `nonsing_inv` of `A` is a left inverse. -/
 @[simp]
-theorem nonsing_inv_mul (h : IsUnit A.det) : A⁻¹ ⬝ A = 1 := by
+theorem nonsing_inv_mul (h : IsUnit A.det) : A⁻¹ * A = 1 := by
   cases (A.isUnit_iff_isUnit_det.mpr h).nonempty_invertible
-  rw [← invOf_eq_nonsing_inv, Matrix.invOf_mul_self]
+  rw [← invOf_eq_nonsing_inv, invOf_mul_self]
 #align matrix.nonsing_inv_mul Matrix.nonsing_inv_mul
 
 instance [Invertible A] : Invertible A⁻¹ := by
@@ -295,82 +295,82 @@ theorem inv_inv_of_invertible [Invertible A] : A⁻¹⁻¹ = A := by
 #align matrix.inv_inv_of_invertible Matrix.inv_inv_of_invertible
 
 @[simp]
-theorem mul_nonsing_inv_cancel_right (B : Matrix m n α) (h : IsUnit A.det) : B ⬝ A ⬝ A⁻¹ = B := by
+theorem mul_nonsing_inv_cancel_right (B : Matrix m n α) (h : IsUnit A.det) : B * A * A⁻¹ = B := by
   simp [Matrix.mul_assoc, mul_nonsing_inv A h]
 #align matrix.mul_nonsing_inv_cancel_right Matrix.mul_nonsing_inv_cancel_right
 
 @[simp]
-theorem mul_nonsing_inv_cancel_left (B : Matrix n m α) (h : IsUnit A.det) : A ⬝ (A⁻¹ ⬝ B) = B := by
+theorem mul_nonsing_inv_cancel_left (B : Matrix n m α) (h : IsUnit A.det) : A * (A⁻¹ * B) = B := by
   simp [← Matrix.mul_assoc, mul_nonsing_inv A h]
 #align matrix.mul_nonsing_inv_cancel_left Matrix.mul_nonsing_inv_cancel_left
 
 @[simp]
-theorem nonsing_inv_mul_cancel_right (B : Matrix m n α) (h : IsUnit A.det) : B ⬝ A⁻¹ ⬝ A = B := by
+theorem nonsing_inv_mul_cancel_right (B : Matrix m n α) (h : IsUnit A.det) : B * A⁻¹ * A = B := by
   simp [Matrix.mul_assoc, nonsing_inv_mul A h]
 #align matrix.nonsing_inv_mul_cancel_right Matrix.nonsing_inv_mul_cancel_right
 
 @[simp]
-theorem nonsing_inv_mul_cancel_left (B : Matrix n m α) (h : IsUnit A.det) : A⁻¹ ⬝ (A ⬝ B) = B := by
+theorem nonsing_inv_mul_cancel_left (B : Matrix n m α) (h : IsUnit A.det) : A⁻¹ * (A * B) = B := by
   simp [← Matrix.mul_assoc, nonsing_inv_mul A h]
 #align matrix.nonsing_inv_mul_cancel_left Matrix.nonsing_inv_mul_cancel_left
 
 @[simp]
-theorem mul_inv_of_invertible [Invertible A] : A ⬝ A⁻¹ = 1 :=
+theorem mul_inv_of_invertible [Invertible A] : A * A⁻¹ = 1 :=
   mul_nonsing_inv A (isUnit_det_of_invertible A)
 #align matrix.mul_inv_of_invertible Matrix.mul_inv_of_invertible
 
 @[simp]
-theorem inv_mul_of_invertible [Invertible A] : A⁻¹ ⬝ A = 1 :=
+theorem inv_mul_of_invertible [Invertible A] : A⁻¹ * A = 1 :=
   nonsing_inv_mul A (isUnit_det_of_invertible A)
 #align matrix.inv_mul_of_invertible Matrix.inv_mul_of_invertible
 
 @[simp]
-theorem mul_inv_cancel_right_of_invertible (B : Matrix m n α) [Invertible A] : B ⬝ A ⬝ A⁻¹ = B :=
+theorem mul_inv_cancel_right_of_invertible (B : Matrix m n α) [Invertible A] : B * A * A⁻¹ = B :=
   mul_nonsing_inv_cancel_right A B (isUnit_det_of_invertible A)
 #align matrix.mul_inv_cancel_right_of_invertible Matrix.mul_inv_cancel_right_of_invertible
 
 @[simp]
-theorem mul_inv_cancel_left_of_invertible (B : Matrix n m α) [Invertible A] : A ⬝ (A⁻¹ ⬝ B) = B :=
+theorem mul_inv_cancel_left_of_invertible (B : Matrix n m α) [Invertible A] : A * (A⁻¹ * B) = B :=
   mul_nonsing_inv_cancel_left A B (isUnit_det_of_invertible A)
 #align matrix.mul_inv_cancel_left_of_invertible Matrix.mul_inv_cancel_left_of_invertible
 
 @[simp]
-theorem inv_mul_cancel_right_of_invertible (B : Matrix m n α) [Invertible A] : B ⬝ A⁻¹ ⬝ A = B :=
+theorem inv_mul_cancel_right_of_invertible (B : Matrix m n α) [Invertible A] : B * A⁻¹ * A = B :=
   nonsing_inv_mul_cancel_right A B (isUnit_det_of_invertible A)
 #align matrix.inv_mul_cancel_right_of_invertible Matrix.inv_mul_cancel_right_of_invertible
 
 @[simp]
-theorem inv_mul_cancel_left_of_invertible (B : Matrix n m α) [Invertible A] : A⁻¹ ⬝ (A ⬝ B) = B :=
+theorem inv_mul_cancel_left_of_invertible (B : Matrix n m α) [Invertible A] : A⁻¹ * (A * B) = B :=
   nonsing_inv_mul_cancel_left A B (isUnit_det_of_invertible A)
 #align matrix.inv_mul_cancel_left_of_invertible Matrix.inv_mul_cancel_left_of_invertible
 
 theorem inv_mul_eq_iff_eq_mul_of_invertible (A B C : Matrix n n α) [Invertible A] :
-    A⁻¹ ⬝ B = C ↔ B = A ⬝ C :=
+    A⁻¹ * B = C ↔ B = A * C :=
   ⟨fun h => by rw [← h, mul_inv_cancel_left_of_invertible],
    fun h => by rw [h, inv_mul_cancel_left_of_invertible]⟩
 #align matrix.inv_mul_eq_iff_eq_mul_of_invertible Matrix.inv_mul_eq_iff_eq_mul_of_invertible
 
 theorem mul_inv_eq_iff_eq_mul_of_invertible (A B C : Matrix n n α) [Invertible A] :
-    B ⬝ A⁻¹ = C ↔ B = C ⬝ A :=
+    B * A⁻¹ = C ↔ B = C * A :=
   ⟨fun h => by rw [← h, inv_mul_cancel_right_of_invertible],
    fun h => by rw [h, mul_inv_cancel_right_of_invertible]⟩
 #align matrix.mul_inv_eq_iff_eq_mul_of_invertible Matrix.mul_inv_eq_iff_eq_mul_of_invertible
 
 lemma mul_right_injective_of_invertible [Invertible A] :
-    Function.Injective (fun (x : Matrix n m α) => A ⬝ x) :=
-  fun _ _ h => by simpa only [inv_mul_cancel_left_of_invertible] using congr_arg (A⁻¹ ⬝ ·) h
+    Function.Injective (fun (x : Matrix n m α) => A * x) :=
+  fun _ _ h => by simpa only [inv_mul_cancel_left_of_invertible] using congr_arg (A⁻¹ * ·) h
 
 lemma mul_left_injective_of_invertible [Invertible A] :
-    Function.Injective (fun (x : Matrix m n α) => x ⬝ A) :=
-  fun a x hax => by simpa only [mul_inv_cancel_right_of_invertible] using congr_arg (· ⬝ A⁻¹) hax
+    Function.Injective (fun (x : Matrix m n α) => x * A) :=
+  fun a x hax => by simpa only [mul_inv_cancel_right_of_invertible] using congr_arg (· * A⁻¹) hax
 
-lemma mul_right_inj_of_invertible [Invertible A] {x y : Matrix n m α} : A ⬝ x = A ⬝ y ↔ x = y :=
+lemma mul_right_inj_of_invertible [Invertible A] {x y : Matrix n m α} : A * x = A * y ↔ x = y :=
   (mul_right_injective_of_invertible A).eq_iff
 
-lemma mul_left_inj_of_invertible [Invertible A] {x y : Matrix m n α} : x ⬝ A = y ⬝ A ↔ x = y :=
+lemma mul_left_inj_of_invertible [Invertible A] {x y : Matrix m n α} : x * A = y * A ↔ x = y :=
   (mul_left_injective_of_invertible A).eq_iff
 
-theorem nonsing_inv_cancel_or_zero : A⁻¹ ⬝ A = 1 ∧ A ⬝ A⁻¹ = 1 ∨ A⁻¹ = 0 := by
+theorem nonsing_inv_cancel_or_zero : A⁻¹ * A = 1 ∧ A * A⁻¹ = 1 ∨ A⁻¹ = 0 := by
   by_cases h : IsUnit A.det
   · exact Or.inl ⟨nonsing_inv_mul _ h, mul_nonsing_inv _ h⟩
   · exact Or.inr (nonsing_inv_apply_not_isUnit _ h)
@@ -398,8 +398,8 @@ theorem isUnit_nonsing_inv_det (h : IsUnit A.det) : IsUnit A⁻¹.det :=
 @[simp]
 theorem nonsing_inv_nonsing_inv (h : IsUnit A.det) : A⁻¹⁻¹ = A :=
   calc
-    A⁻¹⁻¹ = 1 ⬝ A⁻¹⁻¹ := by rw [Matrix.one_mul]
-    _ = A ⬝ A⁻¹ ⬝ A⁻¹⁻¹ := by rw [A.mul_nonsing_inv h]
+    A⁻¹⁻¹ = 1 * A⁻¹⁻¹ := by rw [Matrix.one_mul]
+    _ = A * A⁻¹ * A⁻¹⁻¹ := by rw [A.mul_nonsing_inv h]
     _ = A := by
       rw [Matrix.mul_assoc, A⁻¹.mul_nonsing_inv (A.isUnit_nonsing_inv_det h), Matrix.mul_one]
 
@@ -431,13 +431,13 @@ theorem unitOfDetInvertible_eq_nonsingInvUnit [Invertible A.det] :
 variable {A} {B}
 
 /-- If matrix A is left invertible, then its inverse equals its left inverse. -/
-theorem inv_eq_left_inv (h : B ⬝ A = 1) : A⁻¹ = B :=
+theorem inv_eq_left_inv (h : B * A = 1) : A⁻¹ = B :=
   letI := invertibleOfLeftInverse _ _ h
   invOf_eq_nonsing_inv A ▸ invOf_eq_left_inv h
 #align matrix.inv_eq_left_inv Matrix.inv_eq_left_inv
 
 /-- If matrix A is right invertible, then its inverse equals its right inverse. -/
-theorem inv_eq_right_inv (h : A ⬝ B = 1) : A⁻¹ = B :=
+theorem inv_eq_right_inv (h : A * B = 1) : A⁻¹ = B :=
   inv_eq_left_inv (mul_eq_one_comm.2 h)
 #align matrix.inv_eq_right_inv Matrix.inv_eq_right_inv
 
@@ -446,17 +446,17 @@ section InvEqInv
 variable {C : Matrix n n α}
 
 /-- The left inverse of matrix A is unique when existing. -/
-theorem left_inv_eq_left_inv (h : B ⬝ A = 1) (g : C ⬝ A = 1) : B = C := by
+theorem left_inv_eq_left_inv (h : B * A = 1) (g : C * A = 1) : B = C := by
   rw [← inv_eq_left_inv h, ← inv_eq_left_inv g]
 #align matrix.left_inv_eq_left_inv Matrix.left_inv_eq_left_inv
 
 /-- The right inverse of matrix A is unique when existing. -/
-theorem right_inv_eq_right_inv (h : A ⬝ B = 1) (g : A ⬝ C = 1) : B = C := by
+theorem right_inv_eq_right_inv (h : A * B = 1) (g : A * C = 1) : B = C := by
   rw [← inv_eq_right_inv h, ← inv_eq_right_inv g]
 #align matrix.right_inv_eq_right_inv Matrix.right_inv_eq_right_inv
 
 /-- The right inverse of matrix A equals the left inverse of A when they exist. -/
-theorem right_inv_eq_left_inv (h : A ⬝ B = 1) (g : C ⬝ A = 1) : B = C := by
+theorem right_inv_eq_left_inv (h : A * B = 1) (g : C * A = 1) : B = C := by
   rw [← inv_eq_right_inv h, ← inv_eq_left_inv g]
 #align matrix.right_inv_eq_left_inv Matrix.right_inv_eq_left_inv
 
@@ -572,7 +572,7 @@ theorem inv_inv_inv (A : Matrix n n α) : A⁻¹⁻¹⁻¹ = A⁻¹ := by
   · simp [nonsing_inv_apply_not_isUnit _ h]
 #align matrix.inv_inv_inv Matrix.inv_inv_inv
 
-theorem mul_inv_rev (A B : Matrix n n α) : (A ⬝ B)⁻¹ = B⁻¹ ⬝ A⁻¹ := by
+theorem mul_inv_rev (A B : Matrix n n α) : (A * B)⁻¹ = B⁻¹ * A⁻¹ := by
   simp only [inv_def]
   rw [Matrix.smul_mul, Matrix.mul_smul, smul_smul, det_mul, adjugate_mul_distrib,
     Ring.mul_inverse_rev]
@@ -582,8 +582,8 @@ theorem mul_inv_rev (A B : Matrix n n α) : (A ⬝ B)⁻¹ = B⁻¹ ⬝ A⁻¹ :
 theorem list_prod_inv_reverse : ∀ l : List (Matrix n n α), l.prod⁻¹ = (l.reverse.map Inv.inv).prod
   | [] => by rw [List.reverse_nil, List.map_nil, List.prod_nil, inv_one]
   | A::Xs => by
-    rw [List.reverse_cons', List.map_concat, List.prod_concat, List.prod_cons, Matrix.mul_eq_mul,
-      Matrix.mul_eq_mul, mul_inv_rev, list_prod_inv_reverse Xs]
+    rw [List.reverse_cons', List.map_concat, List.prod_concat, List.prod_cons,
+      mul_inv_rev, list_prod_inv_reverse Xs]
 #align matrix.list_prod_inv_reverse Matrix.list_prod_inv_reverse
 
 /-- One form of **Cramer's rule**. See `Matrix.mulVec_cramer` for a stronger form. -/
@@ -619,7 +619,7 @@ variable [DecidableEq m]
 def submatrixEquivInvertible (A : Matrix m m α) (e₁ e₂ : n ≃ m) [Invertible A] :
     Invertible (A.submatrix e₁ e₂) :=
   invertibleOfRightInverse _ ((⅟ A).submatrix e₂ e₁) <| by
-    rw [Matrix.submatrix_mul_equiv, Matrix.mul_invOf_self, submatrix_one_equiv]
+    rw [Matrix.submatrix_mul_equiv, mul_invOf_self, submatrix_one_equiv]
 #align matrix.submatrix_equiv_invertible Matrix.submatrixEquivInvertible
 
 /-- `A` is invertible if `A.submatrix e₁ e₂` is -/
@@ -628,11 +628,11 @@ def invertibleOfSubmatrixEquivInvertible (A : Matrix m m α) (e₁ e₂ : n ≃
   invertibleOfRightInverse _ ((⅟ (A.submatrix e₁ e₂)).submatrix e₂.symm e₁.symm) <| by
     have : A = (A.submatrix e₁ e₂).submatrix e₁.symm e₂.symm := by simp
     -- Porting note: was
-    -- conv in _ ⬝ _ =>
+    -- conv in _ * _ =>
     --   congr
     --   rw [this]
-    rw [congr_arg₂ (· ⬝ ·) this rfl]
-    rw [Matrix.submatrix_mul_equiv, Matrix.mul_invOf_self, submatrix_one_equiv]
+    rw [congr_arg₂ (· * ·) this rfl]
+    rw [Matrix.submatrix_mul_equiv, mul_invOf_self, submatrix_one_equiv]
 #align matrix.invertible_of_submatrix_equiv_invertible Matrix.invertibleOfSubmatrixEquivInvertible
 
 theorem invOf_submatrix_equiv_eq (A : Matrix m m α) (e₁ e₂ : n ≃ m) [Invertible A]
@@ -688,13 +688,13 @@ section Det
 variable [Fintype m] [DecidableEq m]
 
 /-- A variant of `Matrix.det_units_conj`. -/
-theorem det_conj {M : Matrix m m α} (h : IsUnit M) (N : Matrix m m α) : det (M ⬝ N ⬝ M⁻¹) = det N :=
+theorem det_conj {M : Matrix m m α} (h : IsUnit M) (N : Matrix m m α) : det (M * N * M⁻¹) = det N :=
   by rw [← h.unit_spec, ← coe_units_inv, det_units_conj]
 #align matrix.det_conj Matrix.det_conj
 
 /-- A variant of `Matrix.det_units_conj'`. -/
 theorem det_conj' {M : Matrix m m α} (h : IsUnit M) (N : Matrix m m α) :
-    det (M⁻¹ ⬝ N ⬝ M) = det N := by rw [← h.unit_spec, ← coe_units_inv, det_units_conj']
+    det (M⁻¹ * N * M) = det N := by rw [← h.unit_spec, ← coe_units_inv, det_units_conj']
 #align matrix.det_conj' Matrix.det_conj'
 
 end Det
feat: Mul by invertible matrices is injective even for rectangular matrices (#6486)

Multiplication by invertible matrices from the left or right is injective. Note that mul_left_injective₀ and friends don't apply because they would require similar (square) matrices.

Diff
@@ -356,6 +356,20 @@ theorem mul_inv_eq_iff_eq_mul_of_invertible (A B C : Matrix n n α) [Invertible
    fun h => by rw [h, mul_inv_cancel_right_of_invertible]⟩
 #align matrix.mul_inv_eq_iff_eq_mul_of_invertible Matrix.mul_inv_eq_iff_eq_mul_of_invertible
 
+lemma mul_right_injective_of_invertible [Invertible A] :
+    Function.Injective (fun (x : Matrix n m α) => A ⬝ x) :=
+  fun _ _ h => by simpa only [inv_mul_cancel_left_of_invertible] using congr_arg (A⁻¹ ⬝ ·) h
+
+lemma mul_left_injective_of_invertible [Invertible A] :
+    Function.Injective (fun (x : Matrix m n α) => x ⬝ A) :=
+  fun a x hax => by simpa only [mul_inv_cancel_right_of_invertible] using congr_arg (· ⬝ A⁻¹) hax
+
+lemma mul_right_inj_of_invertible [Invertible A] {x y : Matrix n m α} : A ⬝ x = A ⬝ y ↔ x = y :=
+  (mul_right_injective_of_invertible A).eq_iff
+
+lemma mul_left_inj_of_invertible [Invertible A] {x y : Matrix m n α} : x ⬝ A = y ⬝ A ↔ x = y :=
+  (mul_left_injective_of_invertible A).eq_iff
+
 theorem nonsing_inv_cancel_or_zero : A⁻¹ ⬝ A = 1 ∧ A ⬝ A⁻¹ = 1 ∨ A⁻¹ = 0 := by
   by_cases h : IsUnit A.det
   · exact Or.inl ⟨nonsing_inv_mul _ h, mul_nonsing_inv _ h⟩
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
@@ -54,7 +54,7 @@ namespace Matrix
 
 universe u u' v
 
-variable {l : Type _} {m : Type u} {n : Type u'} {α : Type v}
+variable {l : Type*} {m : Type u} {n : Type u'} {α : Type v}
 
 open Matrix BigOperators Equiv Equiv.Perm Finset
 
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,15 +2,12 @@
 Copyright (c) 2019 Tim Baanen. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Tim Baanen, Lu-Ming Zhang
-
-! This file was ported from Lean 3 source module linear_algebra.matrix.nonsingular_inverse
-! leanprover-community/mathlib commit 722b3b152ddd5e0cf21c0a29787c76596cb6b422
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
 -/
 import Mathlib.Data.Matrix.Invertible
 import Mathlib.LinearAlgebra.Matrix.Adjugate
 
+#align_import linear_algebra.matrix.nonsingular_inverse from "leanprover-community/mathlib"@"722b3b152ddd5e0cf21c0a29787c76596cb6b422"
+
 /-!
 # Nonsingular inverses
 
feat: port Data.Matrix.Invertible (#5366)

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

Diff
@@ -4,10 +4,11 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Tim Baanen, Lu-Ming Zhang
 
 ! This file was ported from Lean 3 source module linear_algebra.matrix.nonsingular_inverse
-! leanprover-community/mathlib commit a07a7ae98384cd6485d7825e161e528ba78ef3bc
+! leanprover-community/mathlib commit 722b3b152ddd5e0cf21c0a29787c76596cb6b422
 ! Please do not edit these lines, except to modify the commit id
 ! if you have ported upstream changes.
 -/
+import Mathlib.Data.Matrix.Invertible
 import Mathlib.LinearAlgebra.Matrix.Adjugate
 
 /-!
@@ -67,36 +68,6 @@ section Invertible
 
 variable [Fintype n] [DecidableEq n] [CommRing α]
 
-/-- A copy of `invOf_mul_self` using `⬝` not `*`. -/
-protected theorem invOf_mul_self (A : Matrix n n α) [Invertible A] : ⅟ A ⬝ A = 1 :=
-  invOf_mul_self A
-#align matrix.inv_of_mul_self Matrix.invOf_mul_self
-
-/-- A copy of `mul_invOf_self` using `⬝` not `*`. -/
-protected theorem mul_invOf_self (A : Matrix n n α) [Invertible A] : A ⬝ ⅟ A = 1 :=
-  mul_invOf_self A
-#align matrix.mul_inv_of_self Matrix.mul_invOf_self
-
-/-- A copy of `invOf_mul_self_assoc` using `⬝` not `*`. -/
-protected theorem invOf_mul_self_assoc (A : Matrix n n α) (B : Matrix n m α) [Invertible A] :
-    ⅟ A ⬝ (A ⬝ B) = B := by rw [← Matrix.mul_assoc, Matrix.invOf_mul_self, Matrix.one_mul]
-#align matrix.inv_of_mul_self_assoc Matrix.invOf_mul_self_assoc
-
-/-- A copy of `mul_invOf_self_assoc` using `⬝` not `*`. -/
-protected theorem mul_invOf_self_assoc (A : Matrix n n α) (B : Matrix n m α) [Invertible A] :
-    A ⬝ (⅟ A ⬝ B) = B := by rw [← Matrix.mul_assoc, Matrix.mul_invOf_self, Matrix.one_mul]
-#align matrix.mul_inv_of_self_assoc Matrix.mul_invOf_self_assoc
-
-/-- A copy of `mul_invOf_mul_self_cancel` using `⬝` not `*`. -/
-protected theorem mul_invOf_mul_self_cancel (A : Matrix m n α) (B : Matrix n n α) [Invertible B] :
-    A ⬝ ⅟ B ⬝ B = A := by rw [Matrix.mul_assoc, Matrix.invOf_mul_self, Matrix.mul_one]
-#align matrix.mul_inv_of_mul_self_cancel Matrix.mul_invOf_mul_self_cancel
-
-/-- A copy of `mul_mul_invOf_self_cancel` using `⬝` not `*`. -/
-protected theorem mul_mul_invOf_self_cancel (A : Matrix m n α) (B : Matrix n n α) [Invertible B] :
-    A ⬝ B ⬝ ⅟ B = A := by rw [Matrix.mul_assoc, Matrix.mul_invOf_self, Matrix.mul_one]
-#align matrix.mul_mul_inv_of_self_cancel Matrix.mul_mul_invOf_self_cancel
-
 variable (A : Matrix n n α) (B : Matrix n n α)
 
 /-- If `A.det` has a constructive inverse, produce one for `A`. -/
feat: port LinearAlgebra.Matrix.LDL (#5061)
Diff
@@ -180,6 +180,11 @@ instance invertibleTranspose [Invertible A] : Invertible Aᵀ :=
   invertibleOfDetInvertible Aᵀ
 #align matrix.invertible_transpose Matrix.invertibleTranspose
 
+-- porting note: added because Lean can no longer find this instance automatically
+/-- The conjugate transpose of an invertible matrix is invertible. -/
+instance invertibleConjTranspose [StarRing α] [Invertible A] : Invertible Aᴴ :=
+  Invertible.star A
+
 /-- A matrix is invertible if the transpose is invertible. -/
 def invertibleOfInvertibleTranspose [Invertible Aᵀ] : Invertible A := by
   rw [← transpose_transpose A]
chore: reenable eta, bump to nightly 2023-05-16 (#3414)

Now that leanprover/lean4#2210 has been merged, this PR:

  • removes all the set_option synthInstance.etaExperiment true commands (and some etaExperiment% term elaborators)
  • removes many but not quite all set_option maxHeartbeats commands
  • makes various other changes required to cope with leanprover/lean4#2210.

Co-authored-by: Scott Morrison <scott.morrison@anu.edu.au> Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: Matthew Ballard <matt@mrb.email>

Diff
@@ -293,7 +293,6 @@ theorem transpose_nonsing_inv : A⁻¹ᵀ = Aᵀ⁻¹ := by
   rw [inv_def, inv_def, transpose_smul, det_transpose, adjugate_transpose]
 #align matrix.transpose_nonsing_inv Matrix.transpose_nonsing_inv
 
-set_option synthInstance.etaExperiment true in
 theorem conjTranspose_nonsing_inv [StarRing α] : A⁻¹ᴴ = Aᴴ⁻¹ := by
   rw [inv_def, inv_def, conjTranspose_smul, det_conjTranspose, adjugate_conjTranspose,
     Ring.inverse_star]
@@ -502,17 +501,14 @@ theorem inv_zero : (0 : Matrix n n α)⁻¹ = 0 := by
 noncomputable instance : InvOneClass (Matrix n n α) :=
   { Matrix.one, Matrix.inv with inv_one := inv_eq_left_inv (by simp) }
 
-set_option synthInstance.etaExperiment true in
 theorem inv_smul (k : α) [Invertible k] (h : IsUnit A.det) : (k • A)⁻¹ = ⅟ k • A⁻¹ :=
   inv_eq_left_inv (by simp [h, smul_smul])
 #align matrix.inv_smul Matrix.inv_smul
 
-set_option synthInstance.etaExperiment true in
 theorem inv_smul' (k : αˣ) (h : IsUnit A.det) : (k • A)⁻¹ = k⁻¹ • A⁻¹ :=
   inv_eq_left_inv (by simp [h, smul_smul])
 #align matrix.inv_smul' Matrix.inv_smul'
 
-set_option synthInstance.etaExperiment true in
 theorem inv_adjugate (A : Matrix n n α) (h : IsUnit A.det) : (adjugate A)⁻¹ = h.unit⁻¹ • A := by
   refine' inv_eq_left_inv _
   rw [smul_mul, mul_adjugate, Units.smul_def, smul_smul, h.val_inv_mul, one_smul]
@@ -589,7 +585,6 @@ theorem inv_inv_inv (A : Matrix n n α) : A⁻¹⁻¹⁻¹ = A⁻¹ := by
   · simp [nonsing_inv_apply_not_isUnit _ h]
 #align matrix.inv_inv_inv Matrix.inv_inv_inv
 
-set_option synthInstance.etaExperiment true in
 theorem mul_inv_rev (A B : Matrix n n α) : (A ⬝ B)⁻¹ = B⁻¹ ⬝ A⁻¹ := by
   simp only [inv_def]
   rw [Matrix.smul_mul, Matrix.mul_smul, smul_smul, det_mul, adjugate_mul_distrib,
@@ -604,7 +599,6 @@ theorem list_prod_inv_reverse : ∀ l : List (Matrix n n α), l.prod⁻¹ = (l.r
       Matrix.mul_eq_mul, mul_inv_rev, list_prod_inv_reverse Xs]
 #align matrix.list_prod_inv_reverse Matrix.list_prod_inv_reverse
 
-set_option synthInstance.etaExperiment true in
 /-- One form of **Cramer's rule**. See `Matrix.mulVec_cramer` for a stronger form. -/
 @[simp]
 theorem det_smul_inv_mulVec_eq_cramer (A : Matrix n n α) (b : n → α) (h : IsUnit A.det) :
@@ -613,7 +607,6 @@ theorem det_smul_inv_mulVec_eq_cramer (A : Matrix n n α) (b : n → α) (h : Is
     h.mul_val_inv, one_smul]
 #align matrix.det_smul_inv_mul_vec_eq_cramer Matrix.det_smul_inv_mulVec_eq_cramer
 
-set_option synthInstance.etaExperiment true in
 /-- One form of **Cramer's rule**. See `Matrix.mulVec_cramer` for a stronger form. -/
 @[simp]
 theorem det_smul_inv_vecMul_eq_cramer_transpose (A : Matrix n n α) (b : n → α) (h : IsUnit A.det) :
chore: use etaExperiment rather than hacking with instances (#3668)

This is to fix timeouts in https://github.com/leanprover-community/mathlib4/pull/3552.

See discussion at https://leanprover.zulipchat.com/#narrow/stream/287929-mathlib4/topic/!4.233552.20.28LinearAlgebra.2EMatrix.2EToLin.29.

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

Diff
@@ -502,14 +502,17 @@ theorem inv_zero : (0 : Matrix n n α)⁻¹ = 0 := by
 noncomputable instance : InvOneClass (Matrix n n α) :=
   { Matrix.one, Matrix.inv with inv_one := inv_eq_left_inv (by simp) }
 
+set_option synthInstance.etaExperiment true in
 theorem inv_smul (k : α) [Invertible k] (h : IsUnit A.det) : (k • A)⁻¹ = ⅟ k • A⁻¹ :=
   inv_eq_left_inv (by simp [h, smul_smul])
 #align matrix.inv_smul Matrix.inv_smul
 
+set_option synthInstance.etaExperiment true in
 theorem inv_smul' (k : αˣ) (h : IsUnit A.det) : (k • A)⁻¹ = k⁻¹ • A⁻¹ :=
   inv_eq_left_inv (by simp [h, smul_smul])
 #align matrix.inv_smul' Matrix.inv_smul'
 
+set_option synthInstance.etaExperiment true in
 theorem inv_adjugate (A : Matrix n n α) (h : IsUnit A.det) : (adjugate A)⁻¹ = h.unit⁻¹ • A := by
   refine' inv_eq_left_inv _
   rw [smul_mul, mul_adjugate, Units.smul_def, smul_smul, h.val_inv_mul, one_smul]
@@ -586,6 +589,7 @@ theorem inv_inv_inv (A : Matrix n n α) : A⁻¹⁻¹⁻¹ = A⁻¹ := by
   · simp [nonsing_inv_apply_not_isUnit _ h]
 #align matrix.inv_inv_inv Matrix.inv_inv_inv
 
+set_option synthInstance.etaExperiment true in
 theorem mul_inv_rev (A B : Matrix n n α) : (A ⬝ B)⁻¹ = B⁻¹ ⬝ A⁻¹ := by
   simp only [inv_def]
   rw [Matrix.smul_mul, Matrix.mul_smul, smul_smul, det_mul, adjugate_mul_distrib,
feat: port LinearAlgebra.Matrix.NonsingularInverse (#3647)

Dependencies 8 + 572

573 files ported (98.6%)
240637 lines ported (98.7%)
Show graph

The unported dependencies are