Documentation

Mathlib.LinearAlgebra.BilinearForm.Hom

Bilinear form and linear maps #

This file describes the relation between bilinear forms and linear maps.

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,

def BilinForm.toLinHomAux₁ {R : Type u_1} {M : Type u_2} [CommSemiring R] [AddCommMonoid M] [Module R M] (A : BilinForm R M) (x : M) :

Auxiliary definition to define toLinHom; see below.

Equations
Instances For
    def BilinForm.toLinHomAux₂ {R : Type u_1} {M : Type u_2} [CommSemiring R] [AddCommMonoid M] [Module R M] (A : BilinForm R M) :

    Auxiliary definition to define toLinHom; see below.

    Equations
    Instances For
      def BilinForm.toLinHom {R : Type u_1} {M : Type u_2} [CommSemiring R] [AddCommMonoid M] [Module R M] :

      The linear map obtained from a BilinForm by fixing the left co-ordinate and evaluating in the right.

      Equations
      • BilinForm.toLinHom = { toAddHom := { toFun := BilinForm.toLinHomAux₂, map_add' := }, map_smul' := }
      Instances For
        @[simp]
        theorem BilinForm.toLin'_apply {R : Type u_1} {M : Type u_2} [CommSemiring R] [AddCommMonoid M] [Module R M] (A : BilinForm R M) (x : M) :
        ((BilinForm.toLinHom A) x) = A.bilin x
        @[simp]
        theorem BilinForm.sum_left {R : Type u_1} {M : Type u_2} [CommSemiring R] [AddCommMonoid M] [Module R M] (B : BilinForm R M) {α : Type u_7} (t : Finset α) (g : αM) (w : M) :
        B.bilin (Finset.sum t fun (i : α) => g i) w = Finset.sum t fun (i : α) => B.bilin (g i) w
        @[simp]
        theorem BilinForm.sum_right {R : Type u_1} {M : Type u_2} [CommSemiring R] [AddCommMonoid M] [Module R M] (B : BilinForm R M) {α : Type u_7} (t : Finset α) (w : M) (g : αM) :
        B.bilin w (Finset.sum t fun (i : α) => g i) = Finset.sum t fun (i : α) => B.bilin w (g i)
        @[simp]
        theorem BilinForm.sum_apply {R : Type u_1} {M : Type u_2} [CommSemiring R] [AddCommMonoid M] [Module R M] {α : Type u_7} (t : Finset α) (B : αBilinForm R M) (v : M) (w : M) :
        (Finset.sum t fun (i : α) => B i).bilin v w = Finset.sum t fun (i : α) => (B i).bilin v w

        The linear map obtained from a BilinForm by fixing the right co-ordinate and evaluating in the left.

        Equations
        • BilinForm.toLinHomFlip = LinearMap.comp BilinForm.toLinHom BilinForm.flipHom
        Instances For
          @[simp]
          theorem BilinForm.toLin'Flip_apply {R : Type u_1} {M : Type u_2} [CommSemiring R] [AddCommMonoid M] [Module R M] (A : BilinForm R M) (x : M) :
          ((BilinForm.toLinHomFlip A) x) = fun (y : M) => A.bilin y x
          def LinearMap.toBilinAux {R : Type u_1} {M : Type u_2} [CommSemiring R] [AddCommMonoid M] [Module R M] (f : M →ₗ[R] M →ₗ[R] R) :

          A map with two arguments that is linear in both is a bilinear form.

          This is an auxiliary definition for the full linear equivalence LinearMap.toBilin.

          Equations
          • LinearMap.toBilinAux f = { bilin := fun (x y : M) => (f x) y, bilin_add_left := , bilin_smul_left := , bilin_add_right := , bilin_smul_right := }
          Instances For
            def BilinForm.toLin {R : Type u_1} {M : Type u_2} [CommSemiring R] [AddCommMonoid M] [Module R M] :

            Bilinear forms are linearly equivalent to maps with two arguments that are linear in both.

            Equations
            • BilinForm.toLin = let __src := BilinForm.toLinHom; { toLinearMap := __src, invFun := LinearMap.toBilinAux, left_inv := , right_inv := }
            Instances For
              def LinearMap.toBilin {R : Type u_1} {M : Type u_2} [CommSemiring R] [AddCommMonoid M] [Module R M] :

              A map with two arguments that is linear in both is linearly equivalent to bilinear form.

              Equations
              Instances For
                @[simp]
                theorem LinearMap.toBilinAux_eq {R : Type u_1} {M : Type u_2} [CommSemiring R] [AddCommMonoid M] [Module R M] (f : M →ₗ[R] M →ₗ[R] R) :
                LinearMap.toBilinAux f = LinearMap.toBilin f
                @[simp]
                theorem LinearMap.toBilin_symm {R : Type u_1} {M : Type u_2} [CommSemiring R] [AddCommMonoid M] [Module R M] :
                LinearEquiv.symm LinearMap.toBilin = BilinForm.toLin
                @[simp]
                theorem BilinForm.toLin_symm {R : Type u_1} {M : Type u_2} [CommSemiring R] [AddCommMonoid M] [Module R M] :
                LinearEquiv.symm BilinForm.toLin = LinearMap.toBilin
                @[simp]
                theorem LinearMap.toBilin_apply {R : Type u_1} {M : Type u_2} [CommSemiring R] [AddCommMonoid M] [Module R M] (f : M →ₗ[R] M →ₗ[R] R) (x : M) (y : M) :
                (LinearMap.toBilin f).bilin x y = (f x) y
                @[simp]
                theorem BilinForm.toLin_apply {R : Type u_1} {M : Type u_2} [CommSemiring R] [AddCommMonoid M] [Module R M] {B : BilinForm R M} (x : M) :
                ((BilinForm.toLin B) x) = B.bilin x
                @[simp]
                theorem LinearMap.compBilinForm_apply {R : Type u_1} {M : Type u_2} [CommSemiring R] [AddCommMonoid M] [Module R M] {R' : Type u_7} [CommSemiring R'] [Algebra R' R] [Module R' M] [IsScalarTower R' R M] (f : R →ₗ[R'] R') (B : BilinForm R M) (x : M) (y : M) :
                (LinearMap.compBilinForm f B).bilin x y = f (B.bilin x y)
                def LinearMap.compBilinForm {R : Type u_1} {M : Type u_2} [CommSemiring R] [AddCommMonoid M] [Module R M] {R' : Type u_7} [CommSemiring R'] [Algebra R' R] [Module R' M] [IsScalarTower R' R M] (f : R →ₗ[R'] R') (B : BilinForm R M) :

                Apply a linear map on the output of a bilinear form.

                Equations
                • LinearMap.compBilinForm f B = { bilin := fun (x y : M) => f (B.bilin x y), bilin_add_left := , bilin_smul_left := , bilin_add_right := , bilin_smul_right := }
                Instances For
                  def BilinForm.comp {R : Type u_1} {M : Type u_2} [CommSemiring R] [AddCommMonoid M] [Module R M] {M' : Type w} [AddCommMonoid M'] [Module R M'] (B : BilinForm R M') (l : M →ₗ[R] M') (r : M →ₗ[R] M') :

                  Apply a linear map on the left and right argument of a bilinear form.

                  Equations
                  • BilinForm.comp B l r = { bilin := fun (x y : M) => B.bilin (l x) (r y), bilin_add_left := , bilin_smul_left := , bilin_add_right := , bilin_smul_right := }
                  Instances For
                    def BilinForm.compLeft {R : Type u_1} {M : Type u_2} [CommSemiring R] [AddCommMonoid M] [Module R M] (B : BilinForm R M) (f : M →ₗ[R] M) :

                    Apply a linear map to the left argument of a bilinear form.

                    Equations
                    Instances For
                      def BilinForm.compRight {R : Type u_1} {M : Type u_2} [CommSemiring R] [AddCommMonoid M] [Module R M] (B : BilinForm R M) (f : M →ₗ[R] M) :

                      Apply a linear map to the right argument of a bilinear form.

                      Equations
                      Instances For
                        theorem BilinForm.comp_comp {R : Type u_1} {M : Type u_2} [CommSemiring R] [AddCommMonoid M] [Module R M] {M' : Type w} [AddCommMonoid M'] [Module R M'] {M'' : Type u_7} [AddCommMonoid M''] [Module R M''] (B : BilinForm R M'') (l : M →ₗ[R] M') (r : M →ₗ[R] M') (l' : M' →ₗ[R] M'') (r' : M' →ₗ[R] M'') :
                        BilinForm.comp (BilinForm.comp B l' r') l r = BilinForm.comp B (l' ∘ₗ l) (r' ∘ₗ r)
                        @[simp]
                        theorem BilinForm.compLeft_compRight {R : Type u_1} {M : Type u_2} [CommSemiring R] [AddCommMonoid M] [Module R M] (B : BilinForm R M) (l : M →ₗ[R] M) (r : M →ₗ[R] M) :
                        @[simp]
                        theorem BilinForm.compRight_compLeft {R : Type u_1} {M : Type u_2} [CommSemiring R] [AddCommMonoid M] [Module R M] (B : BilinForm R M) (l : M →ₗ[R] M) (r : M →ₗ[R] M) :
                        @[simp]
                        theorem BilinForm.comp_apply {R : Type u_1} {M : Type u_2} [CommSemiring R] [AddCommMonoid M] [Module R M] {M' : Type w} [AddCommMonoid M'] [Module R M'] (B : BilinForm R M') (l : M →ₗ[R] M') (r : M →ₗ[R] M') (v : M) (w : M) :
                        (BilinForm.comp B l r).bilin v w = B.bilin (l v) (r w)
                        @[simp]
                        theorem BilinForm.compLeft_apply {R : Type u_1} {M : Type u_2} [CommSemiring R] [AddCommMonoid M] [Module R M] (B : BilinForm R M) (f : M →ₗ[R] M) (v : M) (w : M) :
                        (BilinForm.compLeft B f).bilin v w = B.bilin (f v) w
                        @[simp]
                        theorem BilinForm.compRight_apply {R : Type u_1} {M : Type u_2} [CommSemiring R] [AddCommMonoid M] [Module R M] (B : BilinForm R M) (f : M →ₗ[R] M) (v : M) (w : M) :
                        (BilinForm.compRight B f).bilin v w = B.bilin v (f w)
                        @[simp]
                        theorem BilinForm.comp_id_left {R : Type u_1} {M : Type u_2} [CommSemiring R] [AddCommMonoid M] [Module R M] (B : BilinForm R M) (r : M →ₗ[R] M) :
                        BilinForm.comp B LinearMap.id r = BilinForm.compRight B r
                        @[simp]
                        theorem BilinForm.comp_id_right {R : Type u_1} {M : Type u_2} [CommSemiring R] [AddCommMonoid M] [Module R M] (B : BilinForm R M) (l : M →ₗ[R] M) :
                        BilinForm.comp B l LinearMap.id = BilinForm.compLeft B l
                        @[simp]
                        theorem BilinForm.compLeft_id {R : Type u_1} {M : Type u_2} [CommSemiring R] [AddCommMonoid M] [Module R M] (B : BilinForm R M) :
                        BilinForm.compLeft B LinearMap.id = B
                        @[simp]
                        theorem BilinForm.compRight_id {R : Type u_1} {M : Type u_2} [CommSemiring R] [AddCommMonoid M] [Module R M] (B : BilinForm R M) :
                        BilinForm.compRight B LinearMap.id = B
                        @[simp]
                        theorem BilinForm.comp_id_id {R : Type u_1} {M : Type u_2} [CommSemiring R] [AddCommMonoid M] [Module R M] (B : BilinForm R M) :
                        BilinForm.comp B LinearMap.id LinearMap.id = B
                        theorem BilinForm.comp_inj {R : Type u_1} {M : Type u_2} [CommSemiring R] [AddCommMonoid M] [Module R M] {M' : Type w} [AddCommMonoid M'] [Module R M'] (B₁ : BilinForm R M') (B₂ : BilinForm R M') {l : M →ₗ[R] M'} {r : M →ₗ[R] M'} (hₗ : Function.Surjective l) (hᵣ : Function.Surjective r) :
                        BilinForm.comp B₁ l r = BilinForm.comp B₂ l r B₁ = B₂
                        def BilinForm.congr {R : Type u_1} {M : Type u_2} [CommSemiring R] [AddCommMonoid M] [Module R M] {M' : Type u_7} [AddCommMonoid M'] [Module R M'] (e : M ≃ₗ[R] M') :

                        Apply a linear equivalence on the arguments of a bilinear form.

                        Equations
                        • One or more equations did not get rendered due to their size.
                        Instances For
                          @[simp]
                          theorem BilinForm.congr_apply {R : Type u_1} {M : Type u_2} [CommSemiring R] [AddCommMonoid M] [Module R M] {M' : Type u_7} [AddCommMonoid M'] [Module R M'] (e : M ≃ₗ[R] M') (B : BilinForm R M) (x : M') (y : M') :
                          ((BilinForm.congr e) B).bilin x y = B.bilin ((LinearEquiv.symm e) x) ((LinearEquiv.symm e) y)
                          @[simp]
                          theorem BilinForm.congr_trans {R : Type u_1} {M : Type u_2} [CommSemiring R] [AddCommMonoid M] [Module R M] {M' : Type u_7} {M'' : Type u_8} [AddCommMonoid M'] [AddCommMonoid M''] [Module R M'] [Module R M''] (e : M ≃ₗ[R] M') (f : M' ≃ₗ[R] M'') :
                          BilinForm.congr e ≪≫ₗ BilinForm.congr f = BilinForm.congr (e ≪≫ₗ f)
                          theorem BilinForm.congr_congr {R : Type u_1} {M : Type u_2} [CommSemiring R] [AddCommMonoid M] [Module R M] {M' : Type u_7} {M'' : Type u_8} [AddCommMonoid M'] [AddCommMonoid M''] [Module R M'] [Module R M''] (e : M' ≃ₗ[R] M'') (f : M ≃ₗ[R] M') (B : BilinForm R M) :
                          (BilinForm.congr e) ((BilinForm.congr f) B) = (BilinForm.congr (f ≪≫ₗ e)) B
                          theorem BilinForm.congr_comp {R : Type u_1} {M : Type u_2} [CommSemiring R] [AddCommMonoid M] [Module R M] {M' : Type u_7} {M'' : Type u_8} [AddCommMonoid M'] [AddCommMonoid M''] [Module R M'] [Module R M''] (e : M ≃ₗ[R] M') (B : BilinForm R M) (l : M'' →ₗ[R] M') (r : M'' →ₗ[R] M') :
                          BilinForm.comp ((BilinForm.congr e) B) l r = BilinForm.comp B ((LinearEquiv.symm e) ∘ₗ l) ((LinearEquiv.symm e) ∘ₗ r)
                          theorem BilinForm.comp_congr {R : Type u_1} {M : Type u_2} [CommSemiring R] [AddCommMonoid M] [Module R M] {M' : Type u_7} {M'' : Type u_8} [AddCommMonoid M'] [AddCommMonoid M''] [Module R M'] [Module R M''] (e : M' ≃ₗ[R] M'') (B : BilinForm R M) (l : M' →ₗ[R] M) (r : M' →ₗ[R] M) :
                          (BilinForm.congr e) (BilinForm.comp B l r) = BilinForm.comp B (l ∘ₗ (LinearEquiv.symm e)) (r ∘ₗ (LinearEquiv.symm e))
                          def BilinForm.linMulLin {R : Type u_1} {M : Type u_2} [CommSemiring R] [AddCommMonoid M] [Module R M] (f : M →ₗ[R] R) (g : M →ₗ[R] R) :

                          linMulLin f g is the bilinear form mapping x and y to f x * g y

                          Equations
                          • BilinForm.linMulLin f g = { bilin := fun (x y : M) => f x * g y, bilin_add_left := , bilin_smul_left := , bilin_add_right := , bilin_smul_right := }
                          Instances For
                            @[simp]
                            theorem BilinForm.linMulLin_apply {R : Type u_1} {M : Type u_2} [CommSemiring R] [AddCommMonoid M] [Module R M] {f : M →ₗ[R] R} {g : M →ₗ[R] R} (x : M) (y : M) :
                            (BilinForm.linMulLin f g).bilin x y = f x * g y
                            @[simp]
                            theorem BilinForm.linMulLin_comp {R : Type u_1} {M : Type u_2} [CommSemiring R] [AddCommMonoid M] [Module R M] {M' : Type u_7} [AddCommMonoid M'] [Module R M'] {f : M →ₗ[R] R} {g : M →ₗ[R] R} (l : M' →ₗ[R] M) (r : M' →ₗ[R] M) :
                            BilinForm.comp (BilinForm.linMulLin f g) l r = BilinForm.linMulLin (f ∘ₗ l) (g ∘ₗ r)
                            @[simp]
                            theorem BilinForm.linMulLin_compLeft {R : Type u_1} {M : Type u_2} [CommSemiring R] [AddCommMonoid M] [Module R M] {f : M →ₗ[R] R} {g : M →ₗ[R] R} (l : M →ₗ[R] M) :
                            @[simp]
                            theorem BilinForm.linMulLin_compRight {R : Type u_1} {M : Type u_2} [CommSemiring R] [AddCommMonoid M] [Module R M] {f : M →ₗ[R] R} {g : M →ₗ[R] R} (r : M →ₗ[R] M) :
                            theorem BilinForm.ext_basis {R : Type u_1} {M : Type u_2} [CommSemiring R] [AddCommMonoid M] [Module R M] {B : BilinForm R M} {F₂ : BilinForm R M} {ι : Type u_9} (b : Basis ι R M) (h : ∀ (i j : ι), B.bilin (b i) (b j) = F₂.bilin (b i) (b j)) :
                            B = F₂

                            Two bilinear forms are equal when they are equal on all basis vectors.

                            theorem BilinForm.sum_repr_mul_repr_mul {R : Type u_1} {M : Type u_2} [CommSemiring R] [AddCommMonoid M] [Module R M] {B : BilinForm R M} {ι : Type u_9} (b : Basis ι R M) (x : M) (y : M) :
                            (Finsupp.sum (b.repr x) fun (i : ι) (xi : R) => Finsupp.sum (b.repr y) fun (j : ι) (yj : R) => xi yj B.bilin (b i) (b j)) = B.bilin x y

                            Write out B x y as a sum over B (b i) (b j) if b is a basis.