Documentation

Mathlib.LinearAlgebra.BilinearForm.Properties

Bilinear form #

This file defines various properties of bilinear forms, including reflexivity, symmetry, alternativity, adjoint, and non-degeneracy. For orthogonality, see LinearAlgebra/BilinearForm/Orthogonal.lean.

Notations #

Given any term B of type BilinForm, due to a coercion, can use the notation B x y to refer to the function field, ie. B x y = B.bilin x y.

In this file we use the following type variables:

References #

Tags #

Bilinear form,

Reflexivity, symmetry, and alternativity #

def BilinForm.IsRefl {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] (B : BilinForm R M) :

The proposition that a bilinear form is reflexive

Equations
Instances For
    theorem BilinForm.IsRefl.eq_zero {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] {B : BilinForm R M} (H : BilinForm.IsRefl B) {x : M} {y : M} :
    BilinForm.bilin B x y = 0BilinForm.bilin B y x = 0
    theorem BilinForm.IsRefl.neg {R₁ : Type u_3} {M₁ : Type u_4} [Ring R₁] [AddCommGroup M₁] [Module R₁ M₁] {B : BilinForm R₁ M₁} (hB : BilinForm.IsRefl B) :
    theorem BilinForm.IsRefl.smul {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] {α : Type u_13} [Semiring α] [Module α R] [SMulCommClass α R R] [NoZeroSMulDivisors α R] (a : α) {B : BilinForm R M} (hB : BilinForm.IsRefl B) :
    theorem BilinForm.IsRefl.groupSMul {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] {α : Type u_13} [Group α] [DistribMulAction α R] [SMulCommClass α R R] (a : α) {B : BilinForm R M} (hB : BilinForm.IsRefl B) :
    @[simp]
    theorem BilinForm.isRefl_zero {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] :
    @[simp]
    theorem BilinForm.isRefl_neg {R₁ : Type u_3} {M₁ : Type u_4} [Ring R₁] [AddCommGroup M₁] [Module R₁ M₁] {B : BilinForm R₁ M₁} :
    def BilinForm.IsSymm {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] (B : BilinForm R M) :

    The proposition that a bilinear form is symmetric

    Equations
    Instances For
      theorem BilinForm.IsSymm.eq {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] {B : BilinForm R M} (H : BilinForm.IsSymm B) (x : M) (y : M) :
      theorem BilinForm.IsSymm.isRefl {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] {B : BilinForm R M} (H : BilinForm.IsSymm B) :
      theorem BilinForm.IsSymm.add {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] {B₁ : BilinForm R M} {B₂ : BilinForm R M} (hB₁ : BilinForm.IsSymm B₁) (hB₂ : BilinForm.IsSymm B₂) :
      BilinForm.IsSymm (B₁ + B₂)
      theorem BilinForm.IsSymm.sub {R₁ : Type u_3} {M₁ : Type u_4} [Ring R₁] [AddCommGroup M₁] [Module R₁ M₁] {B₁ : BilinForm R₁ M₁} {B₂ : BilinForm R₁ M₁} (hB₁ : BilinForm.IsSymm B₁) (hB₂ : BilinForm.IsSymm B₂) :
      BilinForm.IsSymm (B₁ - B₂)
      theorem BilinForm.IsSymm.neg {R₁ : Type u_3} {M₁ : Type u_4} [Ring R₁] [AddCommGroup M₁] [Module R₁ M₁] {B : BilinForm R₁ M₁} (hB : BilinForm.IsSymm B) :
      theorem BilinForm.IsSymm.smul {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] {α : Type u_13} [Monoid α] [DistribMulAction α R] [SMulCommClass α R R] (a : α) {B : BilinForm R M} (hB : BilinForm.IsSymm B) :
      theorem BilinForm.IsSymm.restrict {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] {B : BilinForm R M} (b : BilinForm.IsSymm B) (W : Submodule R M) :

      The restriction of a symmetric bilinear form on a submodule is also symmetric.

      @[simp]
      theorem BilinForm.isSymm_zero {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] :
      @[simp]
      theorem BilinForm.isSymm_neg {R₁ : Type u_3} {M₁ : Type u_4} [Ring R₁] [AddCommGroup M₁] [Module R₁ M₁] {B : BilinForm R₁ M₁} :
      theorem BilinForm.isSymm_iff_flip {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] (R₂ : Type u_5) [CommSemiring R₂] {B : BilinForm R M} [Algebra R₂ R] :
      def BilinForm.IsAlt {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] (B : BilinForm R M) :

      The proposition that a bilinear form is alternating

      Equations
      Instances For
        theorem BilinForm.IsAlt.self_eq_zero {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] {B : BilinForm R M} (H : BilinForm.IsAlt B) (x : M) :
        theorem BilinForm.IsAlt.neg_eq {R₁ : Type u_3} {M₁ : Type u_4} [Ring R₁] [AddCommGroup M₁] [Module R₁ M₁] {B₁ : BilinForm R₁ M₁} (H : BilinForm.IsAlt B₁) (x : M₁) (y : M₁) :
        theorem BilinForm.IsAlt.isRefl {R₁ : Type u_3} {M₁ : Type u_4} [Ring R₁] [AddCommGroup M₁] [Module R₁ M₁] {B₁ : BilinForm R₁ M₁} (H : BilinForm.IsAlt B₁) :
        theorem BilinForm.IsAlt.add {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] {B₁ : BilinForm R M} {B₂ : BilinForm R M} (hB₁ : BilinForm.IsAlt B₁) (hB₂ : BilinForm.IsAlt B₂) :
        BilinForm.IsAlt (B₁ + B₂)
        theorem BilinForm.IsAlt.sub {R₁ : Type u_3} {M₁ : Type u_4} [Ring R₁] [AddCommGroup M₁] [Module R₁ M₁] {B₁ : BilinForm R₁ M₁} {B₂ : BilinForm R₁ M₁} (hB₁ : BilinForm.IsAlt B₁) (hB₂ : BilinForm.IsAlt B₂) :
        BilinForm.IsAlt (B₁ - B₂)
        theorem BilinForm.IsAlt.neg {R₁ : Type u_3} {M₁ : Type u_4} [Ring R₁] [AddCommGroup M₁] [Module R₁ M₁] {B : BilinForm R₁ M₁} (hB : BilinForm.IsAlt B) :
        theorem BilinForm.IsAlt.smul {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] {α : Type u_13} [Monoid α] [DistribMulAction α R] [SMulCommClass α R R] (a : α) {B : BilinForm R M} (hB : BilinForm.IsAlt B) :
        @[simp]
        theorem BilinForm.isAlt_zero {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] :
        @[simp]
        theorem BilinForm.isAlt_neg {R₁ : Type u_3} {M₁ : Type u_4} [Ring R₁] [AddCommGroup M₁] [Module R₁ M₁] {B : BilinForm R₁ M₁} :

        Linear adjoints #

        def BilinForm.IsAdjointPair {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] (B : BilinForm R M) {M' : Type u_13} [AddCommMonoid M'] [Module R M'] (B' : BilinForm R M') (f : M →ₗ[R] M') (g : M' →ₗ[R] M) :

        Given a pair of modules equipped with bilinear forms, this is the condition for a pair of maps between them to be mutually adjoint.

        Equations
        Instances For
          theorem BilinForm.IsAdjointPair.eq {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] {B : BilinForm R M} {M' : Type u_13} [AddCommMonoid M'] [Module R M'] {B' : BilinForm R M'} {f : M →ₗ[R] M'} {g : M' →ₗ[R] M} (h : BilinForm.IsAdjointPair B B' f g) {x : M} {y : M'} :
          BilinForm.bilin B' (f x) y = BilinForm.bilin B x (g y)
          theorem BilinForm.isAdjointPair_zero {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] {B : BilinForm R M} {M' : Type u_13} [AddCommMonoid M'] [Module R M'] {B' : BilinForm R M'} :
          theorem BilinForm.isAdjointPair_id {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] {B : BilinForm R M} :
          theorem BilinForm.IsAdjointPair.add {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] {B : BilinForm R M} {M' : Type u_13} [AddCommMonoid M'] [Module R M'] {B' : BilinForm R M'} {f : M →ₗ[R] M'} {f' : M →ₗ[R] M'} {g : M' →ₗ[R] M} {g' : M' →ₗ[R] M} (h : BilinForm.IsAdjointPair B B' f g) (h' : BilinForm.IsAdjointPair B B' f' g') :
          BilinForm.IsAdjointPair B B' (f + f') (g + g')
          theorem BilinForm.IsAdjointPair.sub {R₁ : Type u_3} {M₁ : Type u_4} [Ring R₁] [AddCommGroup M₁] [Module R₁ M₁] {B₁ : BilinForm R₁ M₁} {M₁' : Type u_14} [AddCommGroup M₁'] [Module R₁ M₁'] {B₁' : BilinForm R₁ M₁'} {f₁ : M₁ →ₗ[R₁] M₁'} {f₁' : M₁ →ₗ[R₁] M₁'} {g₁ : M₁' →ₗ[R₁] M₁} {g₁' : M₁' →ₗ[R₁] M₁} (h : BilinForm.IsAdjointPair B₁ B₁' f₁ g₁) (h' : BilinForm.IsAdjointPair B₁ B₁' f₁' g₁') :
          BilinForm.IsAdjointPair B₁ B₁' (f₁ - f₁') (g₁ - g₁')
          theorem BilinForm.IsAdjointPair.smul {R₂ : Type u_5} {M₂ : Type u_6} [CommSemiring R₂] [AddCommMonoid M₂] [Module R₂ M₂] {M₂' : Type u_11} [AddCommMonoid M₂'] [Module R₂ M₂'] {B₂ : BilinForm R₂ M₂} {B₂' : BilinForm R₂ M₂'} {f₂ : M₂ →ₗ[R₂] M₂'} {g₂ : M₂' →ₗ[R₂] M₂} (c : R₂) (h : BilinForm.IsAdjointPair B₂ B₂' f₂ g₂) :
          BilinForm.IsAdjointPair B₂ B₂' (c f₂) (c g₂)
          theorem BilinForm.IsAdjointPair.comp {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] {B : BilinForm R M} {M' : Type u_13} [AddCommMonoid M'] [Module R M'] {B' : BilinForm R M'} {f : M →ₗ[R] M'} {g : M' →ₗ[R] M} {M'' : Type u_15} [AddCommMonoid M''] [Module R M''] (B'' : BilinForm R M'') {f' : M' →ₗ[R] M''} {g' : M'' →ₗ[R] M'} (h : BilinForm.IsAdjointPair B B' f g) (h' : BilinForm.IsAdjointPair B' B'' f' g') :
          BilinForm.IsAdjointPair B B'' (f' ∘ₗ f) (g ∘ₗ g')
          theorem BilinForm.IsAdjointPair.mul {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] {B : BilinForm R M} {f : Module.End R M} {g : Module.End R M} {f' : Module.End R M} {g' : Module.End R M} (h : BilinForm.IsAdjointPair B B f g) (h' : BilinForm.IsAdjointPair B B f' g') :
          BilinForm.IsAdjointPair B B (f * f') (g' * g)
          def BilinForm.IsPairSelfAdjoint {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] (B : BilinForm R M) (F : BilinForm R M) (f : Module.End R M) :

          The condition for an endomorphism to be "self-adjoint" with respect to a pair of bilinear forms on the underlying module. In the case that these two forms are identical, this is the usual concept of self adjointness. In the case that one of the forms is the negation of the other, this is the usual concept of skew adjointness.

          Equations
          Instances For
            def BilinForm.isPairSelfAdjointSubmodule {R₂ : Type u_5} {M₂ : Type u_6} [CommSemiring R₂] [AddCommMonoid M₂] [Module R₂ M₂] (B₂ : BilinForm R₂ M₂) (F₂ : BilinForm R₂ M₂) :
            Submodule R₂ (Module.End R₂ M₂)

            The set of pair-self-adjoint endomorphisms are a submodule of the type of all endomorphisms.

            Equations
            • One or more equations did not get rendered due to their size.
            Instances For
              @[simp]
              theorem BilinForm.mem_isPairSelfAdjointSubmodule {R₂ : Type u_5} {M₂ : Type u_6} [CommSemiring R₂] [AddCommMonoid M₂] [Module R₂ M₂] (B₂ : BilinForm R₂ M₂) (F₂ : BilinForm R₂ M₂) (f : Module.End R₂ M₂) :
              theorem BilinForm.isPairSelfAdjoint_equiv {R₂ : Type u_5} {M₂ : Type u_6} [CommSemiring R₂] [AddCommMonoid M₂] [Module R₂ M₂] {M₂' : Type u_11} [AddCommMonoid M₂'] [Module R₂ M₂'] (B₂ : BilinForm R₂ M₂) (F₂ : BilinForm R₂ M₂) (e : M₂' ≃ₗ[R₂] M₂) (f : Module.End R₂ M₂) :
              def BilinForm.IsSelfAdjoint {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] (B : BilinForm R M) (f : Module.End R M) :

              An endomorphism of a module is self-adjoint with respect to a bilinear form if it serves as an adjoint for itself.

              Equations
              Instances For
                def BilinForm.IsSkewAdjoint {R₁ : Type u_3} {M₁ : Type u_4} [Ring R₁] [AddCommGroup M₁] [Module R₁ M₁] (B₁ : BilinForm R₁ M₁) (f : Module.End R₁ M₁) :

                An endomorphism of a module is skew-adjoint with respect to a bilinear form if its negation serves as an adjoint.

                Equations
                Instances For
                  theorem BilinForm.isSkewAdjoint_iff_neg_self_adjoint {R₁ : Type u_3} {M₁ : Type u_4} [Ring R₁] [AddCommGroup M₁] [Module R₁ M₁] (B₁ : BilinForm R₁ M₁) (f : Module.End R₁ M₁) :
                  def BilinForm.selfAdjointSubmodule {R₂ : Type u_5} {M₂ : Type u_6} [CommSemiring R₂] [AddCommMonoid M₂] [Module R₂ M₂] (B₂ : BilinForm R₂ M₂) :
                  Submodule R₂ (Module.End R₂ M₂)

                  The set of self-adjoint endomorphisms of a module with bilinear form is a submodule. (In fact it is a Jordan subalgebra.)

                  Equations
                  Instances For
                    @[simp]
                    theorem BilinForm.mem_selfAdjointSubmodule {R₂ : Type u_5} {M₂ : Type u_6} [CommSemiring R₂] [AddCommMonoid M₂] [Module R₂ M₂] (B₂ : BilinForm R₂ M₂) (f : Module.End R₂ M₂) :
                    def BilinForm.skewAdjointSubmodule {R₃ : Type u_7} {M₃ : Type u_8} [CommRing R₃] [AddCommGroup M₃] [Module R₃ M₃] (B₃ : BilinForm R₃ M₃) :
                    Submodule R₃ (Module.End R₃ M₃)

                    The set of skew-adjoint endomorphisms of a module with bilinear form is a submodule. (In fact it is a Lie subalgebra.)

                    Equations
                    Instances For
                      @[simp]
                      theorem BilinForm.mem_skewAdjointSubmodule {R₃ : Type u_7} {M₃ : Type u_8} [CommRing R₃] [AddCommGroup M₃] [Module R₃ M₃] (B₃ : BilinForm R₃ M₃) (f : Module.End R₃ M₃) :
                      def BilinForm.Nondegenerate {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] (B : BilinForm R M) :

                      A nondegenerate bilinear form is a bilinear form such that the only element that is orthogonal to every other element is 0; i.e., for all nonzero m in M, there exists n in M with B m n ≠ 0.

                      Note that for general (neither symmetric nor antisymmetric) bilinear forms this definition has a chirality; in addition to this "left" nondegeneracy condition one could define a "right" nondegeneracy condition that in the situation described, B n m ≠ 0. This variant definition is not currently provided in mathlib. In finite dimension either definition implies the other.

                      Equations
                      Instances For

                        In a non-trivial module, zero is not non-degenerate.

                        theorem BilinForm.Nondegenerate.ne_zero {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] [Nontrivial M] {B : BilinForm R M} (h : BilinForm.Nondegenerate B) :
                        B 0
                        theorem BilinForm.Nondegenerate.congr {R₂ : Type u_5} {M₂ : Type u_6} [CommSemiring R₂] [AddCommMonoid M₂] [Module R₂ M₂] {M₂' : Type u_13} [AddCommMonoid M₂'] [Module R₂ M₂'] {B : BilinForm R₂ M₂} (e : M₂ ≃ₗ[R₂] M₂') (h : BilinForm.Nondegenerate B) :
                        @[simp]
                        theorem BilinForm.nondegenerate_congr_iff {R₂ : Type u_5} {M₂ : Type u_6} [CommSemiring R₂] [AddCommMonoid M₂] [Module R₂ M₂] {M₂' : Type u_13} [AddCommMonoid M₂'] [Module R₂ M₂'] {B : BilinForm R₂ M₂} (e : M₂ ≃ₗ[R₂] M₂') :
                        theorem BilinForm.nondegenerate_iff_ker_eq_bot {R₂ : Type u_5} {M₂ : Type u_6} [CommSemiring R₂] [AddCommMonoid M₂] [Module R₂ M₂] {B : BilinForm R₂ M₂} :

                        A bilinear form is nondegenerate if and only if it has a trivial kernel.

                        theorem BilinForm.Nondegenerate.ker_eq_bot {R₂ : Type u_5} {M₂ : Type u_6} [CommSemiring R₂] [AddCommMonoid M₂] [Module R₂ M₂] {B : BilinForm R₂ M₂} (h : BilinForm.Nondegenerate B) :
                        LinearMap.ker (BilinForm.toLin B) =
                        theorem BilinForm.compLeft_injective {R₁ : Type u_3} {M₁ : Type u_4} [Ring R₁] [AddCommGroup M₁] [Module R₁ M₁] (B : BilinForm R₁ M₁) (b : BilinForm.Nondegenerate B) :
                        theorem BilinForm.isAdjointPair_unique_of_nondegenerate {R₁ : Type u_3} {M₁ : Type u_4} [Ring R₁] [AddCommGroup M₁] [Module R₁ M₁] (B : BilinForm R₁ M₁) (b : BilinForm.Nondegenerate B) (φ : M₁ →ₗ[R₁] M₁) (ψ₁ : M₁ →ₗ[R₁] M₁) (ψ₂ : M₁ →ₗ[R₁] M₁) (hψ₁ : BilinForm.IsAdjointPair B B ψ₁ φ) (hψ₂ : BilinForm.IsAdjointPair B B ψ₂ φ) :
                        ψ₁ = ψ₂
                        noncomputable def BilinForm.toDual {V : Type u_9} {K : Type u_10} [Field K] [AddCommGroup V] [Module K V] [FiniteDimensional K V] (B : BilinForm K V) (b : BilinForm.Nondegenerate B) :

                        Given a nondegenerate bilinear form B on a finite-dimensional vector space, B.toDual is the linear equivalence between a vector space and its dual with the underlying linear map B.toLin.

                        Equations
                        • One or more equations did not get rendered due to their size.
                        Instances For
                          theorem BilinForm.toDual_def {V : Type u_9} {K : Type u_10} [Field K] [AddCommGroup V] [Module K V] [FiniteDimensional K V] {B : BilinForm K V} (b : BilinForm.Nondegenerate B) {m : V} {n : V} :
                          theorem BilinForm.Nondegenerate.flip {V : Type u_9} {K : Type u_10} [Field K] [AddCommGroup V] [Module K V] [FiniteDimensional K V] {B : BilinForm K V} (hB : BilinForm.Nondegenerate B) :
                          BilinForm.Nondegenerate (BilinForm.flip B)
                          noncomputable def BilinForm.dualBasis {V : Type u_9} {K : Type u_10} [Field K] [AddCommGroup V] [Module K V] {ι : Type u_14} [DecidableEq ι] [Fintype ι] (B : BilinForm K V) (hB : BilinForm.Nondegenerate B) (b : Basis ι K V) :
                          Basis ι K V

                          The B-dual basis B.dualBasis hB b to a finite basis b satisfies B (B.dualBasis hB b i) (b j) = B (b i) (B.dualBasis hB b j) = if i = j then 1 else 0, where B is a nondegenerate (symmetric) bilinear form and b is a finite basis.

                          Equations
                          Instances For
                            @[simp]
                            theorem BilinForm.dualBasis_repr_apply {V : Type u_9} {K : Type u_10} [Field K] [AddCommGroup V] [Module K V] {ι : Type u_14} [DecidableEq ι] [Fintype ι] (B : BilinForm K V) (hB : BilinForm.Nondegenerate B) (b : Basis ι K V) (x : V) (i : ι) :
                            ((BilinForm.dualBasis B hB b).repr x) i = BilinForm.bilin B x (b i)
                            theorem BilinForm.apply_dualBasis_left {V : Type u_9} {K : Type u_10} [Field K] [AddCommGroup V] [Module K V] {ι : Type u_14} [DecidableEq ι] [Fintype ι] (B : BilinForm K V) (hB : BilinForm.Nondegenerate B) (b : Basis ι K V) (i : ι) (j : ι) :
                            BilinForm.bilin B ((BilinForm.dualBasis B hB b) i) (b j) = if j = i then 1 else 0
                            theorem BilinForm.apply_dualBasis_right {V : Type u_9} {K : Type u_10} [Field K] [AddCommGroup V] [Module K V] {ι : Type u_14} [DecidableEq ι] [Fintype ι] (B : BilinForm K V) (hB : BilinForm.Nondegenerate B) (sym : BilinForm.IsSymm B) (b : Basis ι K V) (i : ι) (j : ι) :
                            BilinForm.bilin B (b i) ((BilinForm.dualBasis B hB b) j) = if i = j then 1 else 0
                            @[simp]
                            theorem BilinForm.dualBasis_dualBasis_flip {V : Type u_9} {K : Type u_10} [Field K] [AddCommGroup V] [Module K V] [FiniteDimensional K V] (B : BilinForm K V) (hB : BilinForm.Nondegenerate B) {ι : Type u_15} [Fintype ι] [DecidableEq ι] (b : Basis ι K V) :
                            BilinForm.dualBasis B hB (BilinForm.dualBasis (BilinForm.flip B) (_ : BilinForm.Nondegenerate (BilinForm.flip B)) b) = b
                            @[simp]
                            theorem BilinForm.dualBasis_flip_dualBasis {V : Type u_9} {K : Type u_10} [Field K] [AddCommGroup V] [Module K V] (B : BilinForm K V) (hB : BilinForm.Nondegenerate B) {ι : Type u_15} [Fintype ι] [DecidableEq ι] [FiniteDimensional K V] (b : Basis ι K V) :
                            BilinForm.dualBasis (BilinForm.flip B) (_ : BilinForm.Nondegenerate (BilinForm.flip B)) (BilinForm.dualBasis B hB b) = b
                            @[simp]
                            theorem BilinForm.dualBasis_dualBasis {V : Type u_9} {K : Type u_10} [Field K] [AddCommGroup V] [Module K V] (B : BilinForm K V) (hB : BilinForm.Nondegenerate B) (hB' : BilinForm.IsSymm B) {ι : Type u_15} [Fintype ι] [DecidableEq ι] [FiniteDimensional K V] (b : Basis ι K V) :
                            noncomputable def BilinForm.symmCompOfNondegenerate {V : Type u_9} {K : Type u_10} [Field K] [AddCommGroup V] [Module K V] [FiniteDimensional K V] (B₁ : BilinForm K V) (B₂ : BilinForm K V) (b₂ : BilinForm.Nondegenerate B₂) :

                            Given bilinear forms B₁, B₂ where B₂ is nondegenerate, symmCompOfNondegenerate is the linear map B₂.toLin⁻¹ ∘ B₁.toLin.

                            Equations
                            Instances For
                              theorem BilinForm.comp_symmCompOfNondegenerate_apply {V : Type u_9} {K : Type u_10} [Field K] [AddCommGroup V] [Module K V] [FiniteDimensional K V] (B₁ : BilinForm K V) {B₂ : BilinForm K V} (b₂ : BilinForm.Nondegenerate B₂) (v : V) :
                              (BilinForm.toLin B₂) ((BilinForm.symmCompOfNondegenerate B₁ B₂ b₂) v) = (BilinForm.toLin B₁) v
                              @[simp]
                              theorem BilinForm.symmCompOfNondegenerate_left_apply {V : Type u_9} {K : Type u_10} [Field K] [AddCommGroup V] [Module K V] [FiniteDimensional K V] (B₁ : BilinForm K V) {B₂ : BilinForm K V} (b₂ : BilinForm.Nondegenerate B₂) (v : V) (w : V) :
                              noncomputable def BilinForm.leftAdjointOfNondegenerate {V : Type u_9} {K : Type u_10} [Field K] [AddCommGroup V] [Module K V] [FiniteDimensional K V] (B : BilinForm K V) (b : BilinForm.Nondegenerate B) (φ : V →ₗ[K] V) :

                              Given the nondegenerate bilinear form B and the linear map φ, leftAdjointOfNondegenerate provides the left adjoint of φ with respect to B. The lemma proving this property is BilinForm.isAdjointPairLeftAdjointOfNondegenerate.

                              Equations
                              Instances For

                                Given the nondegenerate bilinear form B, the linear map φ has a unique left adjoint given by BilinForm.leftAdjointOfNondegenerate.