Documentation

Mathlib.LinearAlgebra.Matrix.BilinearForm

Bilinear form #

This file defines the conversion between bilinear forms and matrices.

Main definitions #

Notations #

In this file we use the following type variables:

Tags #

bilinear form, bilin form, BilinearForm, matrix, basis

def Matrix.toBilin'Aux {R₁ : Type u_1} [CommSemiring R₁] {n : Type u_5} [Fintype n] (M : Matrix n n R₁) :
LinearMap.BilinForm R₁ (nR₁)

The map from Matrix n n R to bilinear forms on n → R.

This is an auxiliary definition for the equivalence Matrix.toBilin'.

Equations
Instances For
    theorem Matrix.toBilin'Aux_single {R₁ : Type u_1} [CommSemiring R₁] {n : Type u_5} [Fintype n] [DecidableEq n] (M : Matrix n n R₁) (i : n) (j : n) :
    (M.toBilin'Aux (Pi.single i 1)) (Pi.single j 1) = M i j
    def BilinForm.toMatrixAux {R₁ : Type u_1} {M₁ : Type u_2} [CommSemiring R₁] [AddCommMonoid M₁] [Module R₁ M₁] {n : Type u_5} (b : nM₁) :
    LinearMap.BilinForm R₁ M₁ →ₗ[R₁] Matrix n n R₁

    The linear map from bilinear forms to Matrix n n R given an n-indexed basis.

    This is an auxiliary definition for the equivalence Matrix.toBilin'.

    Equations
    Instances For
      @[simp]
      theorem LinearMap.BilinForm.toMatrixAux_apply {R₁ : Type u_1} {M₁ : Type u_2} [CommSemiring R₁] [AddCommMonoid M₁] [Module R₁ M₁] {n : Type u_5} (B : LinearMap.BilinForm R₁ M₁) (b : nM₁) (i : n) (j : n) :
      (BilinForm.toMatrixAux b) B i j = (B (b i)) (b j)
      theorem toBilin'Aux_toMatrixAux {R₁ : Type u_1} [CommSemiring R₁] {n : Type u_5} [Fintype n] [DecidableEq n] (B₂ : LinearMap.BilinForm R₁ (nR₁)) :
      ((BilinForm.toMatrixAux fun (j : n) => Pi.single j 1) B₂).toBilin'Aux = B₂

      ToMatrix' section #

      This section deals with the conversion between matrices and bilinear forms on n → R₂.

      def LinearMap.BilinForm.toMatrix' {R₁ : Type u_1} [CommSemiring R₁] {n : Type u_5} [Fintype n] [DecidableEq n] :
      LinearMap.BilinForm R₁ (nR₁) ≃ₗ[R₁] Matrix n n R₁

      The linear equivalence between bilinear forms on n → R and n × n matrices

      Equations
      Instances For
        def Matrix.toBilin' {R₁ : Type u_1} [CommSemiring R₁] {n : Type u_5} [Fintype n] [DecidableEq n] :
        Matrix n n R₁ ≃ₗ[R₁] LinearMap.BilinForm R₁ (nR₁)

        The linear equivalence between n × n matrices and bilinear forms on n → R

        Equations
        • Matrix.toBilin' = LinearMap.BilinForm.toMatrix'.symm
        Instances For
          @[simp]
          theorem Matrix.toBilin'Aux_eq {R₁ : Type u_1} [CommSemiring R₁] {n : Type u_5} [Fintype n] [DecidableEq n] (M : Matrix n n R₁) :
          M.toBilin'Aux = Matrix.toBilin' M
          theorem Matrix.toBilin'_apply {R₁ : Type u_1} [CommSemiring R₁] {n : Type u_5} [Fintype n] [DecidableEq n] (M : Matrix n n R₁) (x : nR₁) (y : nR₁) :
          ((Matrix.toBilin' M) x) y = i : n, j : n, x i * M i j * y j
          theorem Matrix.toBilin'_apply' {R₁ : Type u_1} [CommSemiring R₁] {n : Type u_5} [Fintype n] [DecidableEq n] (M : Matrix n n R₁) (v : nR₁) (w : nR₁) :
          ((Matrix.toBilin' M) v) w = Matrix.dotProduct v (M.mulVec w)
          @[simp]
          theorem Matrix.toBilin'_single {R₁ : Type u_1} [CommSemiring R₁] {n : Type u_5} [Fintype n] [DecidableEq n] (M : Matrix n n R₁) (i : n) (j : n) :
          ((Matrix.toBilin' M) (Pi.single i 1)) (Pi.single j 1) = M i j
          @[simp, deprecated Matrix.toBilin'_single]
          theorem Matrix.toBilin'_stdBasis {R₁ : Type u_1} [CommSemiring R₁] {n : Type u_5} [Fintype n] [DecidableEq n] (M : Matrix n n R₁) (i : n) (j : n) :
          ((Matrix.toBilin' M) ((LinearMap.stdBasis R₁ (fun (x : n) => R₁) i) 1)) ((LinearMap.stdBasis R₁ (fun (x : n) => R₁) j) 1) = M i j
          @[simp]
          theorem LinearMap.BilinForm.toMatrix'_symm {R₁ : Type u_1} [CommSemiring R₁] {n : Type u_5} [Fintype n] [DecidableEq n] :
          LinearMap.BilinForm.toMatrix'.symm = Matrix.toBilin'
          @[simp]
          theorem Matrix.toBilin'_symm {R₁ : Type u_1} [CommSemiring R₁] {n : Type u_5} [Fintype n] [DecidableEq n] :
          Matrix.toBilin'.symm = LinearMap.BilinForm.toMatrix'
          @[simp]
          theorem Matrix.toBilin'_toMatrix' {R₁ : Type u_1} [CommSemiring R₁] {n : Type u_5} [Fintype n] [DecidableEq n] (B : LinearMap.BilinForm R₁ (nR₁)) :
          Matrix.toBilin' (LinearMap.BilinForm.toMatrix' B) = B
          @[simp]
          theorem LinearMap.BilinForm.toMatrix'_toBilin' {R₁ : Type u_1} [CommSemiring R₁] {n : Type u_5} [Fintype n] [DecidableEq n] (M : Matrix n n R₁) :
          LinearMap.BilinForm.toMatrix' (Matrix.toBilin' M) = M
          @[simp]
          theorem LinearMap.BilinForm.toMatrix'_apply {R₁ : Type u_1} [CommSemiring R₁] {n : Type u_5} [Fintype n] [DecidableEq n] (B : LinearMap.BilinForm R₁ (nR₁)) (i : n) (j : n) :
          LinearMap.BilinForm.toMatrix' B i j = (B (Pi.single i 1)) (Pi.single j 1)
          @[simp]
          theorem LinearMap.BilinForm.toMatrix'_comp {R₁ : Type u_1} [CommSemiring R₁] {n : Type u_5} {o : Type u_6} [Fintype n] [Fintype o] [DecidableEq n] [DecidableEq o] (B : LinearMap.BilinForm R₁ (nR₁)) (l : (oR₁) →ₗ[R₁] nR₁) (r : (oR₁) →ₗ[R₁] nR₁) :
          LinearMap.BilinForm.toMatrix' (B.comp l r) = (LinearMap.toMatrix' l).transpose * LinearMap.BilinForm.toMatrix' B * LinearMap.toMatrix' r
          theorem LinearMap.BilinForm.toMatrix'_compLeft {R₁ : Type u_1} [CommSemiring R₁] {n : Type u_5} [Fintype n] [DecidableEq n] (B : LinearMap.BilinForm R₁ (nR₁)) (f : (nR₁) →ₗ[R₁] nR₁) :
          LinearMap.BilinForm.toMatrix' (B.compLeft f) = (LinearMap.toMatrix' f).transpose * LinearMap.BilinForm.toMatrix' B
          theorem LinearMap.BilinForm.toMatrix'_compRight {R₁ : Type u_1} [CommSemiring R₁] {n : Type u_5} [Fintype n] [DecidableEq n] (B : LinearMap.BilinForm R₁ (nR₁)) (f : (nR₁) →ₗ[R₁] nR₁) :
          LinearMap.BilinForm.toMatrix' (B.compRight f) = LinearMap.BilinForm.toMatrix' B * LinearMap.toMatrix' f
          theorem LinearMap.BilinForm.mul_toMatrix'_mul {R₁ : Type u_1} [CommSemiring R₁] {n : Type u_5} {o : Type u_6} [Fintype n] [Fintype o] [DecidableEq n] [DecidableEq o] (B : LinearMap.BilinForm R₁ (nR₁)) (M : Matrix o n R₁) (N : Matrix n o R₁) :
          M * LinearMap.BilinForm.toMatrix' B * N = LinearMap.BilinForm.toMatrix' (B.comp (Matrix.toLin' M.transpose) (Matrix.toLin' N))
          theorem LinearMap.BilinForm.mul_toMatrix' {R₁ : Type u_1} [CommSemiring R₁] {n : Type u_5} [Fintype n] [DecidableEq n] (B : LinearMap.BilinForm R₁ (nR₁)) (M : Matrix n n R₁) :
          M * LinearMap.BilinForm.toMatrix' B = LinearMap.BilinForm.toMatrix' (B.compLeft (Matrix.toLin' M.transpose))
          theorem LinearMap.BilinForm.toMatrix'_mul {R₁ : Type u_1} [CommSemiring R₁] {n : Type u_5} [Fintype n] [DecidableEq n] (B : LinearMap.BilinForm R₁ (nR₁)) (M : Matrix n n R₁) :
          LinearMap.BilinForm.toMatrix' B * M = LinearMap.BilinForm.toMatrix' (B.compRight (Matrix.toLin' M))
          theorem Matrix.toBilin'_comp {R₁ : Type u_1} [CommSemiring R₁] {n : Type u_5} {o : Type u_6} [Fintype n] [Fintype o] [DecidableEq n] [DecidableEq o] (M : Matrix n n R₁) (P : Matrix n o R₁) (Q : Matrix n o R₁) :
          (Matrix.toBilin' M).comp (Matrix.toLin' P) (Matrix.toLin' Q) = Matrix.toBilin' (P.transpose * M * Q)

          ToMatrix section #

          This section deals with the conversion between matrices and bilinear forms on a module with a fixed basis.

          noncomputable def BilinForm.toMatrix {R₁ : Type u_1} {M₁ : Type u_2} [CommSemiring R₁] [AddCommMonoid M₁] [Module R₁ M₁] {n : Type u_5} [Fintype n] [DecidableEq n] (b : Basis n R₁ M₁) :
          LinearMap.BilinForm R₁ M₁ ≃ₗ[R₁] Matrix n n R₁

          BilinForm.toMatrix b is the equivalence between R-bilinear forms on M and n-by-n matrices with entries in R, if b is an R-basis for M.

          Equations
          Instances For
            noncomputable def Matrix.toBilin {R₁ : Type u_1} {M₁ : Type u_2} [CommSemiring R₁] [AddCommMonoid M₁] [Module R₁ M₁] {n : Type u_5} [Fintype n] [DecidableEq n] (b : Basis n R₁ M₁) :
            Matrix n n R₁ ≃ₗ[R₁] LinearMap.BilinForm R₁ M₁

            BilinForm.toMatrix b is the equivalence between R-bilinear forms on M and n-by-n matrices with entries in R, if b is an R-basis for M.

            Equations
            Instances For
              @[simp]
              theorem BilinForm.toMatrix_apply {R₁ : Type u_1} {M₁ : Type u_2} [CommSemiring R₁] [AddCommMonoid M₁] [Module R₁ M₁] {n : Type u_5} [Fintype n] [DecidableEq n] (b : Basis n R₁ M₁) (B : LinearMap.BilinForm R₁ M₁) (i : n) (j : n) :
              (BilinForm.toMatrix b) B i j = (B (b i)) (b j)
              @[simp]
              theorem Matrix.toBilin_apply {R₁ : Type u_1} {M₁ : Type u_2} [CommSemiring R₁] [AddCommMonoid M₁] [Module R₁ M₁] {n : Type u_5} [Fintype n] [DecidableEq n] (b : Basis n R₁ M₁) (M : Matrix n n R₁) (x : M₁) (y : M₁) :
              (((Matrix.toBilin b) M) x) y = i : n, j : n, (b.repr x) i * M i j * (b.repr y) j
              theorem BilinearForm.toMatrixAux_eq {R₁ : Type u_1} {M₁ : Type u_2} [CommSemiring R₁] [AddCommMonoid M₁] [Module R₁ M₁] {n : Type u_5} [Fintype n] [DecidableEq n] (b : Basis n R₁ M₁) (B : LinearMap.BilinForm R₁ M₁) :
              @[simp]
              theorem BilinForm.toMatrix_symm {R₁ : Type u_1} {M₁ : Type u_2} [CommSemiring R₁] [AddCommMonoid M₁] [Module R₁ M₁] {n : Type u_5} [Fintype n] [DecidableEq n] (b : Basis n R₁ M₁) :
              @[simp]
              theorem Matrix.toBilin_symm {R₁ : Type u_1} {M₁ : Type u_2} [CommSemiring R₁] [AddCommMonoid M₁] [Module R₁ M₁] {n : Type u_5} [Fintype n] [DecidableEq n] (b : Basis n R₁ M₁) :
              theorem Matrix.toBilin_basisFun {R₁ : Type u_1} [CommSemiring R₁] {n : Type u_5} [Fintype n] [DecidableEq n] :
              Matrix.toBilin (Pi.basisFun R₁ n) = Matrix.toBilin'
              theorem BilinForm.toMatrix_basisFun {R₁ : Type u_1} [CommSemiring R₁] {n : Type u_5} [Fintype n] [DecidableEq n] :
              BilinForm.toMatrix (Pi.basisFun R₁ n) = LinearMap.BilinForm.toMatrix'
              @[simp]
              theorem Matrix.toBilin_toMatrix {R₁ : Type u_1} {M₁ : Type u_2} [CommSemiring R₁] [AddCommMonoid M₁] [Module R₁ M₁] {n : Type u_5} [Fintype n] [DecidableEq n] (b : Basis n R₁ M₁) (B : LinearMap.BilinForm R₁ M₁) :
              @[simp]
              theorem BilinForm.toMatrix_toBilin {R₁ : Type u_1} {M₁ : Type u_2} [CommSemiring R₁] [AddCommMonoid M₁] [Module R₁ M₁] {n : Type u_5} [Fintype n] [DecidableEq n] (b : Basis n R₁ M₁) (M : Matrix n n R₁) :
              theorem BilinForm.toMatrix_comp {R₁ : Type u_1} {M₁ : Type u_2} [CommSemiring R₁] [AddCommMonoid M₁] [Module R₁ M₁] {n : Type u_5} {o : Type u_6} [Fintype n] [Fintype o] [DecidableEq n] (b : Basis n R₁ M₁) {M₂' : Type u_7} [AddCommMonoid M₂'] [Module R₁ M₂'] (c : Basis o R₁ M₂') [DecidableEq o] (B : LinearMap.BilinForm R₁ M₁) (l : M₂' →ₗ[R₁] M₁) (r : M₂' →ₗ[R₁] M₁) :
              (BilinForm.toMatrix c) (B.comp l r) = ((LinearMap.toMatrix c b) l).transpose * (BilinForm.toMatrix b) B * (LinearMap.toMatrix c b) r
              theorem BilinForm.toMatrix_compLeft {R₁ : Type u_1} {M₁ : Type u_2} [CommSemiring R₁] [AddCommMonoid M₁] [Module R₁ M₁] {n : Type u_5} [Fintype n] [DecidableEq n] (b : Basis n R₁ M₁) (B : LinearMap.BilinForm R₁ M₁) (f : M₁ →ₗ[R₁] M₁) :
              (BilinForm.toMatrix b) (B.compLeft f) = ((LinearMap.toMatrix b b) f).transpose * (BilinForm.toMatrix b) B
              theorem BilinForm.toMatrix_compRight {R₁ : Type u_1} {M₁ : Type u_2} [CommSemiring R₁] [AddCommMonoid M₁] [Module R₁ M₁] {n : Type u_5} [Fintype n] [DecidableEq n] (b : Basis n R₁ M₁) (B : LinearMap.BilinForm R₁ M₁) (f : M₁ →ₗ[R₁] M₁) :
              (BilinForm.toMatrix b) (B.compRight f) = (BilinForm.toMatrix b) B * (LinearMap.toMatrix b b) f
              @[simp]
              theorem BilinForm.toMatrix_mul_basis_toMatrix {R₁ : Type u_1} {M₁ : Type u_2} [CommSemiring R₁] [AddCommMonoid M₁] [Module R₁ M₁] {n : Type u_5} {o : Type u_6} [Fintype n] [Fintype o] [DecidableEq n] (b : Basis n R₁ M₁) [DecidableEq o] (c : Basis o R₁ M₁) (B : LinearMap.BilinForm R₁ M₁) :
              (b.toMatrix c).transpose * (BilinForm.toMatrix b) B * b.toMatrix c = (BilinForm.toMatrix c) B
              theorem BilinForm.mul_toMatrix_mul {R₁ : Type u_1} {M₁ : Type u_2} [CommSemiring R₁] [AddCommMonoid M₁] [Module R₁ M₁] {n : Type u_5} {o : Type u_6} [Fintype n] [Fintype o] [DecidableEq n] (b : Basis n R₁ M₁) {M₂' : Type u_7} [AddCommMonoid M₂'] [Module R₁ M₂'] (c : Basis o R₁ M₂') [DecidableEq o] (B : LinearMap.BilinForm R₁ M₁) (M : Matrix o n R₁) (N : Matrix n o R₁) :
              M * (BilinForm.toMatrix b) B * N = (BilinForm.toMatrix c) (B.comp ((Matrix.toLin c b) M.transpose) ((Matrix.toLin c b) N))
              theorem BilinForm.mul_toMatrix {R₁ : Type u_1} {M₁ : Type u_2} [CommSemiring R₁] [AddCommMonoid M₁] [Module R₁ M₁] {n : Type u_5} [Fintype n] [DecidableEq n] (b : Basis n R₁ M₁) (B : LinearMap.BilinForm R₁ M₁) (M : Matrix n n R₁) :
              M * (BilinForm.toMatrix b) B = (BilinForm.toMatrix b) (B.compLeft ((Matrix.toLin b b) M.transpose))
              theorem BilinForm.toMatrix_mul {R₁ : Type u_1} {M₁ : Type u_2} [CommSemiring R₁] [AddCommMonoid M₁] [Module R₁ M₁] {n : Type u_5} [Fintype n] [DecidableEq n] (b : Basis n R₁ M₁) (B : LinearMap.BilinForm R₁ M₁) (M : Matrix n n R₁) :
              (BilinForm.toMatrix b) B * M = (BilinForm.toMatrix b) (B.compRight ((Matrix.toLin b b) M))
              theorem Matrix.toBilin_comp {R₁ : Type u_1} {M₁ : Type u_2} [CommSemiring R₁] [AddCommMonoid M₁] [Module R₁ M₁] {n : Type u_5} {o : Type u_6} [Fintype n] [Fintype o] [DecidableEq n] (b : Basis n R₁ M₁) {M₂' : Type u_7} [AddCommMonoid M₂'] [Module R₁ M₂'] (c : Basis o R₁ M₂') [DecidableEq o] (M : Matrix n n R₁) (P : Matrix n o R₁) (Q : Matrix n o R₁) :
              ((Matrix.toBilin b) M).comp ((Matrix.toLin c b) P) ((Matrix.toLin c b) Q) = (Matrix.toBilin c) (P.transpose * M * Q)
              @[simp]
              theorem isAdjointPair_toBilin' {R₂ : Type u_3} [CommRing R₂] {n : Type u_5} [Fintype n] (J : Matrix n n R₂) (J₃ : Matrix n n R₂) (A : Matrix n n R₂) (A' : Matrix n n R₂) [DecidableEq n] :
              (Matrix.toBilin' J).IsAdjointPair (Matrix.toBilin' J₃) (Matrix.toLin' A) (Matrix.toLin' A') J.IsAdjointPair J₃ A A'
              @[simp]
              theorem isAdjointPair_toBilin {R₂ : Type u_3} {M₂ : Type u_4} [CommRing R₂] [AddCommGroup M₂] [Module R₂ M₂] {n : Type u_5} [Fintype n] (b : Basis n R₂ M₂) (J : Matrix n n R₂) (J₃ : Matrix n n R₂) (A : Matrix n n R₂) (A' : Matrix n n R₂) [DecidableEq n] :
              ((Matrix.toBilin b) J).IsAdjointPair ((Matrix.toBilin b) J₃) ((Matrix.toLin b b) A) ((Matrix.toLin b b) A') J.IsAdjointPair J₃ A A'
              theorem Matrix.isAdjointPair_equiv' {R₂ : Type u_3} [CommRing R₂] {n : Type u_5} [Fintype n] (J : Matrix n n R₂) (A : Matrix n n R₂) (A' : Matrix n n R₂) [DecidableEq n] (P : Matrix n n R₂) (h : IsUnit P) :
              (P.transpose * J * P).IsAdjointPair (P.transpose * J * P) A A' J.IsAdjointPair J (P * A * P⁻¹) (P * A' * P⁻¹)
              def pairSelfAdjointMatricesSubmodule' {R₂ : Type u_3} [CommRing R₂] {n : Type u_5} [Fintype n] (J : Matrix n n R₂) (J₃ : Matrix n n R₂) [DecidableEq n] :
              Submodule R₂ (Matrix n n R₂)

              The submodule of pair-self-adjoint matrices with respect to bilinear forms corresponding to given matrices J, J₂.

              Equations
              Instances For
                theorem mem_pairSelfAdjointMatricesSubmodule' {R₂ : Type u_3} [CommRing R₂] {n : Type u_5} [Fintype n] (J : Matrix n n R₂) (J₃ : Matrix n n R₂) (A : Matrix n n R₂) [DecidableEq n] :
                A pairSelfAdjointMatricesSubmodule J J₃ J.IsAdjointPair J₃ A A
                def selfAdjointMatricesSubmodule' {R₂ : Type u_3} [CommRing R₂] {n : Type u_5} [Fintype n] (J : Matrix n n R₂) [DecidableEq n] :
                Submodule R₂ (Matrix n n R₂)

                The submodule of self-adjoint matrices with respect to the bilinear form corresponding to the matrix J.

                Equations
                Instances For
                  theorem mem_selfAdjointMatricesSubmodule' {R₂ : Type u_3} [CommRing R₂] {n : Type u_5} [Fintype n] (J : Matrix n n R₂) (A : Matrix n n R₂) [DecidableEq n] :
                  A selfAdjointMatricesSubmodule J J.IsSelfAdjoint A
                  def skewAdjointMatricesSubmodule' {R₂ : Type u_3} [CommRing R₂] {n : Type u_5} [Fintype n] (J : Matrix n n R₂) [DecidableEq n] :
                  Submodule R₂ (Matrix n n R₂)

                  The submodule of skew-adjoint matrices with respect to the bilinear form corresponding to the matrix J.

                  Equations
                  Instances For
                    theorem mem_skewAdjointMatricesSubmodule' {R₂ : Type u_3} [CommRing R₂] {n : Type u_5} [Fintype n] (J : Matrix n n R₂) (A : Matrix n n R₂) [DecidableEq n] :
                    A skewAdjointMatricesSubmodule J J.IsSkewAdjoint A
                    theorem Matrix.nondegenerate_toBilin'_iff_nondegenerate_toBilin {R₁ : Type u_1} {M₁ : Type u_2} [CommSemiring R₁] [AddCommMonoid M₁] [Module R₁ M₁] {ι : Type u_6} [DecidableEq ι] [Fintype ι] {M : Matrix ι ι R₁} (b : Basis ι R₁ M₁) :
                    (Matrix.toBilin' M).Nondegenerate ((Matrix.toBilin b) M).Nondegenerate
                    theorem Matrix.Nondegenerate.toBilin' {R₂ : Type u_3} [CommRing R₂] {ι : Type u_6} [DecidableEq ι] [Fintype ι] {M : Matrix ι ι R₂} (h : M.Nondegenerate) :
                    (Matrix.toBilin' M).Nondegenerate
                    @[simp]
                    theorem Matrix.nondegenerate_toBilin'_iff {R₂ : Type u_3} [CommRing R₂] {ι : Type u_6} [DecidableEq ι] [Fintype ι] {M : Matrix ι ι R₂} :
                    (Matrix.toBilin' M).Nondegenerate M.Nondegenerate
                    theorem Matrix.Nondegenerate.toBilin {R₂ : Type u_3} {M₂ : Type u_4} [CommRing R₂] [AddCommGroup M₂] [Module R₂ M₂] {ι : Type u_6} [DecidableEq ι] [Fintype ι] {M : Matrix ι ι R₂} (h : M.Nondegenerate) (b : Basis ι R₂ M₂) :
                    ((Matrix.toBilin b) M).Nondegenerate
                    @[simp]
                    theorem Matrix.nondegenerate_toBilin_iff {R₂ : Type u_3} {M₂ : Type u_4} [CommRing R₂] [AddCommGroup M₂] [Module R₂ M₂] {ι : Type u_6} [DecidableEq ι] [Fintype ι] {M : Matrix ι ι R₂} (b : Basis ι R₂ M₂) :
                    ((Matrix.toBilin b) M).Nondegenerate M.Nondegenerate

                    Lemmas transferring nondegeneracy between a bilinear form and its associated matrix

                    @[simp]
                    theorem LinearMap.BilinForm.nondegenerate_toMatrix'_iff {R₂ : Type u_3} [CommRing R₂] {ι : Type u_6} [DecidableEq ι] [Fintype ι] {B : LinearMap.BilinForm R₂ (ιR₂)} :
                    (LinearMap.BilinForm.toMatrix' B).Nondegenerate B.Nondegenerate
                    theorem LinearMap.BilinForm.Nondegenerate.toMatrix' {R₂ : Type u_3} [CommRing R₂] {ι : Type u_6} [DecidableEq ι] [Fintype ι] {B : LinearMap.BilinForm R₂ (ιR₂)} (h : B.Nondegenerate) :
                    (LinearMap.BilinForm.toMatrix' B).Nondegenerate
                    @[simp]
                    theorem LinearMap.BilinForm.nondegenerate_toMatrix_iff {R₂ : Type u_3} {M₂ : Type u_4} [CommRing R₂] [AddCommGroup M₂] [Module R₂ M₂] {ι : Type u_6} [DecidableEq ι] [Fintype ι] {B : LinearMap.BilinForm R₂ M₂} (b : Basis ι R₂ M₂) :
                    ((BilinForm.toMatrix b) B).Nondegenerate B.Nondegenerate
                    theorem LinearMap.BilinForm.Nondegenerate.toMatrix {R₂ : Type u_3} {M₂ : Type u_4} [CommRing R₂] [AddCommGroup M₂] [Module R₂ M₂] {ι : Type u_6} [DecidableEq ι] [Fintype ι] {B : LinearMap.BilinForm R₂ M₂} (h : B.Nondegenerate) (b : Basis ι R₂ M₂) :
                    ((BilinForm.toMatrix b) B).Nondegenerate

                    Some shorthands for combining the above with Matrix.nondegenerate_of_det_ne_zero

                    theorem LinearMap.BilinForm.nondegenerate_toBilin'_iff_det_ne_zero {A : Type u_5} [CommRing A] [IsDomain A] {ι : Type u_6} [DecidableEq ι] [Fintype ι] {M : Matrix ι ι A} :
                    (Matrix.toBilin' M).Nondegenerate M.det 0
                    theorem LinearMap.BilinForm.nondegenerate_toBilin'_of_det_ne_zero' {A : Type u_5} [CommRing A] [IsDomain A] {ι : Type u_6} [DecidableEq ι] [Fintype ι] (M : Matrix ι ι A) (h : M.det 0) :
                    (Matrix.toBilin' M).Nondegenerate
                    theorem LinearMap.BilinForm.nondegenerate_iff_det_ne_zero {M₂ : Type u_4} [AddCommGroup M₂] {A : Type u_5} [CommRing A] [IsDomain A] [Module A M₂] {ι : Type u_6} [DecidableEq ι] [Fintype ι] {B : LinearMap.BilinForm A M₂} (b : Basis ι A M₂) :
                    B.Nondegenerate ((BilinForm.toMatrix b) B).det 0
                    theorem LinearMap.BilinForm.nondegenerate_of_det_ne_zero {M₂ : Type u_4} [AddCommGroup M₂] {A : Type u_5} [CommRing A] [IsDomain A] [Module A M₂] (B₃ : LinearMap.BilinForm A M₂) {ι : Type u_6} [DecidableEq ι] [Fintype ι] (b : Basis ι A M₂) (h : ((BilinForm.toMatrix b) B₃).det 0) :
                    B₃.Nondegenerate