Documentation

Mathlib.Algebra.Category.ModuleCat.Basic

The category of R-modules #

ModuleCat.{v} R is the category of bundled R-modules with carrier in the universe v. We show that it is preadditive and show that being an isomorphism, monomorphism and epimorphism is equivalent to being a linear equivalence, an injective linear map and a surjective linear map, respectively.

Implementation details #

To construct an object in the category of R-modules from a type M with an instance of the Module typeclass, write of R M. There is a coercion in the other direction. The roundtrip ↑(of R M) is definitionally equal to M itself (when M is a type with Module instance), and so is of R ↑M (when M : ModuleCat R M).

The morphisms are given their own type, not identified with LinearMap. There is a cast from morphisms in Module R to linear maps, written f.hom (ModuleCat.Hom.hom). To go from linear maps to morphisms in Module R, use ModuleCat.ofHom.

Similarly, given an isomorphism f : M ≅ N use f.toLinearEquiv and given a linear equiv f : M ≃ₗ[R] N, use f.toModuleIso.

structure ModuleCat (R : Type u) [Ring R] :
Type (max u (v + 1))

The category of R-modules and their morphisms.

Note that in the case of R = ℤ, we can not impose here that the -multiplication field from the module structure is defeq to the one coming from the isAddCommGroup structure (contrary to what we do for all module structures in mathlib), which creates some difficulties down the road.

Instances For
    @[reducible, inline]
    abbrev ModuleCatMax (R : Type u₁) [Ring R] :
    Type (max u₁ ((max v₁ v₂) + 1))

    An alias for ModuleCat.{max u₁ u₂}, to deal around unification issues. Since the universe the ring lives in can be inferred, we put that last.

    Equations
    Instances For
      Equations
      @[reducible, inline]
      abbrev ModuleCat.of (R : Type u) [Ring R] (X : Type v) [AddCommGroup X] [Module R X] :

      The object in the category of R-algebras associated to a type equipped with the appropriate typeclasses. This is the preferred way to construct a term of ModuleCat R.

      Equations
      Instances For
        theorem ModuleCat.coe_of (R : Type u) [Ring R] (X : Type v) [Ring X] [Module R X] :
        (ModuleCat.of R X) = X
        structure ModuleCat.Hom {R : Type u} [Ring R] (M N : ModuleCat R) :

        The type of morphisms in ModuleCat R.

        • hom : M →ₗ[R] N

          The underlying linear map.

        Instances For
          theorem ModuleCat.Hom.ext {R : Type u} {inst✝ : Ring R} {M N : ModuleCat R} {x y : M.Hom N} (hom : x.hom = y.hom) :
          x = y
          instance ModuleCat.instCoeFunHomForallCarrier (R : Type u) [Ring R] {M N : ModuleCat R} :
          CoeFun (M N) fun (x : M N) => MN
          Equations
          @[simp]
          theorem ModuleCat.hom_id {R : Type u} [Ring R] {M : ModuleCat R} :
          (CategoryTheory.CategoryStruct.id M).hom = LinearMap.id
          theorem ModuleCat.id_apply {R : Type u} [Ring R] (M : ModuleCat R) (x : M) :
          @[simp]
          theorem ModuleCat.hom_comp {R : Type u} [Ring R] {M N O : ModuleCat R} (f : M N) (g : N O) :
          (CategoryTheory.CategoryStruct.comp f g).hom = g.hom ∘ₗ f.hom
          theorem ModuleCat.comp_apply {R : Type u} [Ring R] {M N O : ModuleCat R} (f : M N) (g : N O) (x : M) :
          (CategoryTheory.CategoryStruct.comp f g).hom x = g.hom (f.hom x)
          theorem ModuleCat.hom_ext {R : Type u} [Ring R] {M N : ModuleCat R} {f g : M N} (hf : f.hom = g.hom) :
          f = g
          theorem ModuleCat.hom_bijective {R : Type u} [Ring R] {M N : ModuleCat R} :
          Function.Bijective ModuleCat.Hom.hom
          theorem ModuleCat.hom_injective {R : Type u} [Ring R] {M N : ModuleCat R} :
          Function.Injective ModuleCat.Hom.hom

          Convenience shortcut for ModuleCat.hom_bijective.injective.

          theorem ModuleCat.hom_surjective {R : Type u} [Ring R] {M N : ModuleCat R} :
          Function.Surjective ModuleCat.Hom.hom

          Convenience shortcut for ModuleCat.hom_bijective.surjective.

          @[reducible, inline]
          abbrev ModuleCat.ofHom {R : Type u} [Ring R] {X Y : Type v} [AddCommGroup X] [Module R X] [AddCommGroup Y] [Module R Y] (f : X →ₗ[R] Y) :

          Typecheck a LinearMap as a morphism in ModuleCat R.

          Equations
          Instances For
            @[deprecated ModuleCat.ofHom]
            def ModuleCat.asHom {R : Type u} [Ring R] {X Y : Type v} [AddCommGroup X] [Module R X] [AddCommGroup Y] [Module R Y] (f : X →ₗ[R] Y) :

            Alias of ModuleCat.ofHom.


            Typecheck a LinearMap as a morphism in ModuleCat R.

            Equations
            Instances For
              theorem ModuleCat.hom_ofHom {R : Type u} [Ring R] {X Y : Type v} [AddCommGroup X] [Module R X] [AddCommGroup Y] [Module R Y] (f : X →ₗ[R] Y) :
              (ModuleCat.ofHom f).hom = f
              @[simp]
              theorem ModuleCat.ofHom_hom {R : Type u} [Ring R] {M N : ModuleCat R} (f : M N) :
              @[simp]
              theorem ModuleCat.ofHom_comp {R : Type u} [Ring R] {M N O : Type v} [AddCommGroup M] [AddCommGroup N] [AddCommGroup O] [Module R M] [Module R N] [Module R O] (f : M →ₗ[R] N) (g : N →ₗ[R] O) :
              theorem ModuleCat.ofHom_apply {R : Type u} [Ring R] {M N : Type v} [AddCommGroup M] [AddCommGroup N] [Module R M] [Module R N] (f : M →ₗ[R] N) (x : M) :
              (ModuleCat.ofHom f).hom x = f x
              @[simp]
              theorem ModuleCat.inv_hom_apply {R : Type u} [Ring R] {M N : ModuleCat R} (e : M N) (x : M) :
              e.inv.hom (e.hom.hom x) = x
              @[simp]
              theorem ModuleCat.hom_inv_apply {R : Type u} [Ring R] {M N : ModuleCat R} (e : M N) (x : N) :
              e.hom.hom (e.inv.hom x) = x
              def ModuleCat.homEquiv {R : Type u} [Ring R] {M N : ModuleCat R} :
              (M N) (M →ₗ[R] N)

              ModuleCat.Hom.hom bundled as an Equiv.

              Equations
              • ModuleCat.homEquiv = { toFun := ModuleCat.Hom.hom, invFun := ModuleCat.ofHom, left_inv := , right_inv := }
              Instances For
                Equations
                Equations
                • One or more equations did not get rendered due to their size.
                theorem ModuleCat.forget_obj (R : Type u) [Ring R] {M : ModuleCat R} :
                theorem ModuleCat.forget_map (R : Type u) [Ring R] {M N : ModuleCat R} (f : M N) :
                (CategoryTheory.forget (ModuleCat R)).map f = f.hom
                Equations
                • One or more equations did not get rendered due to their size.
                @[simp]
                theorem ModuleCat.forget₂_map (R : Type u) [Ring R] (X Y : ModuleCat R) (f : X Y) :
                (CategoryTheory.forget₂ (ModuleCat R) AddCommGrp).map f = f.hom.toAddMonoidHom
                @[simp]
                theorem ModuleCat.of_coe (R : Type u) [Ring R] (X : ModuleCat R) :
                ModuleCat.of R X = X
                def ModuleCat.ofSelfIso {R : Type u} [Ring R] (M : ModuleCat R) :
                ModuleCat.of R M M

                Forgetting to the underlying type and then building the bundled object returns the original module.

                Equations
                Instances For
                  @[simp]
                  theorem ModuleCat.ofSelfIso_hom {R : Type u} [Ring R] (M : ModuleCat R) :
                  @[simp]
                  theorem ModuleCat.ofSelfIso_inv {R : Type u} [Ring R] (M : ModuleCat R) :

                  Reinterpreting a linear map in the category of R-modules

                  Equations
                  Instances For
                    @[deprecated ModuleCat.ofHom_apply]
                    theorem ModuleCat.asHom_apply {R : Type u} [Ring R] {M N : Type v} [AddCommGroup M] [AddCommGroup N] [Module R M] [Module R N] (f : M →ₗ[R] N) (x : M) :
                    (ModuleCat.ofHom f).hom x = f x

                    Alias of ModuleCat.ofHom_apply.

                    @[deprecated ModuleCat.ofHom]
                    def ModuleCat.asHomRight {R : Type u} [Ring R] {X Y : Type v} [AddCommGroup X] [Module R X] [AddCommGroup Y] [Module R Y] (f : X →ₗ[R] Y) :

                    Alias of ModuleCat.ofHom.


                    Typecheck a LinearMap as a morphism in ModuleCat R.

                    Equations
                    Instances For
                      @[deprecated ModuleCat.ofHom]
                      def ModuleCat.asHomLeft {R : Type u} [Ring R] {X Y : Type v} [AddCommGroup X] [Module R X] [AddCommGroup Y] [Module R Y] (f : X →ₗ[R] Y) :

                      Alias of ModuleCat.ofHom.


                      Typecheck a LinearMap as a morphism in ModuleCat R.

                      Equations
                      Instances For

                        Reinterpreting a linear map in the category of R-modules. This notation is deprecated: use instead.

                        Equations
                        Instances For

                          Reinterpreting a linear map in the category of R-modules. This notation is deprecated: use instead.

                          Equations
                          Instances For
                            def LinearEquiv.toModuleIso {R : Type u} [Ring R] {X₁ X₂ : Type v} {g₁ : AddCommGroup X₁} {g₂ : AddCommGroup X₂} {m₁ : Module R X₁} {m₂ : Module R X₂} (e : X₁ ≃ₗ[R] X₂) :

                            Build an isomorphism in the category Module R from a LinearEquiv between Modules.

                            Equations
                            Instances For
                              @[simp]
                              theorem LinearEquiv.toModuleIso_inv_hom {R : Type u} [Ring R] {X₁ X₂ : Type v} {g₁ : AddCommGroup X₁} {g₂ : AddCommGroup X₂} {m₁ : Module R X₁} {m₂ : Module R X₂} (e : X₁ ≃ₗ[R] X₂) :
                              e.toModuleIso.inv.hom = e.symm
                              @[simp]
                              theorem LinearEquiv.toModuleIso_hom_hom {R : Type u} [Ring R] {X₁ X₂ : Type v} {g₁ : AddCommGroup X₁} {g₂ : AddCommGroup X₂} {m₁ : Module R X₁} {m₂ : Module R X₂} (e : X₁ ≃ₗ[R] X₂) :
                              e.toModuleIso.hom.hom = e
                              @[reducible, inline, deprecated LinearEquiv.toModuleIso]
                              abbrev LinearEquiv.toModuleIso' {R : Type u} [Ring R] {M N : ModuleCat R} (i : M ≃ₗ[R] N) :
                              M N

                              Build an isomorphism in the category Module R from a LinearEquiv between Modules.

                              Equations
                              • i.toModuleIso' = i.toModuleIso
                              Instances For
                                @[reducible, inline, deprecated LinearEquiv.toModuleIso]
                                abbrev LinearEquiv.toModuleIso'Left {R : Type u} [Ring R] {X₂ : Type v} {X₁ : ModuleCat R} [AddCommGroup X₂] [Module R X₂] (e : X₁ ≃ₗ[R] X₂) :
                                X₁ ModuleCat.of R X₂

                                Build an isomorphism in the category ModuleCat R from a LinearEquiv between Modules.

                                Equations
                                • e.toModuleIso'Left = e.toModuleIso
                                Instances For
                                  @[reducible, inline, deprecated LinearEquiv.toModuleIso]
                                  abbrev LinearEquiv.toModuleIso'Right {R : Type u} [Ring R] {X₁ : Type v} [AddCommGroup X₁] [Module R X₁] {X₂ : ModuleCat R} (e : X₁ ≃ₗ[R] X₂) :
                                  ModuleCat.of R X₁ X₂

                                  Build an isomorphism in the category ModuleCat R from a LinearEquiv between Modules.

                                  Equations
                                  • e.toModuleIso'Right = e.toModuleIso
                                  Instances For
                                    def CategoryTheory.Iso.toLinearEquiv {R : Type u} [Ring R] {X Y : ModuleCat R} (i : X Y) :
                                    X ≃ₗ[R] Y

                                    Build a LinearEquiv from an isomorphism in the category ModuleCat R.

                                    Equations
                                    Instances For
                                      def linearEquivIsoModuleIso {R : Type u} [Ring R] {X Y : Type u} [AddCommGroup X] [AddCommGroup Y] [Module R X] [Module R Y] :

                                      linear equivalences between Modules are the same as (isomorphic to) isomorphisms in ModuleCat

                                      Equations
                                      • linearEquivIsoModuleIso = { hom := fun (e : X ≃ₗ[R] Y) => e.toModuleIso, inv := fun (i : ModuleCat.of R X ModuleCat.of R Y) => i.toLinearEquiv, hom_inv_id := , inv_hom_id := }
                                      Instances For
                                        @[simp]
                                        theorem linearEquivIsoModuleIso_inv {R : Type u} [Ring R] {X Y : Type u} [AddCommGroup X] [AddCommGroup Y] [Module R X] [Module R Y] (i : ModuleCat.of R X ModuleCat.of R Y) :
                                        linearEquivIsoModuleIso.inv i = i.toLinearEquiv
                                        @[simp]
                                        theorem linearEquivIsoModuleIso_hom {R : Type u} [Ring R] {X Y : Type u} [AddCommGroup X] [AddCommGroup Y] [Module R X] [Module R Y] (e : X ≃ₗ[R] Y) :
                                        linearEquivIsoModuleIso.hom e = e.toModuleIso
                                        instance ModuleCat.instAddHom {R : Type u} [Ring R] {M N : ModuleCat R} :
                                        Add (M N)
                                        Equations
                                        • ModuleCat.instAddHom = { add := fun (f g : M N) => { hom := f.hom + g.hom } }
                                        @[simp]
                                        theorem ModuleCat.hom_add {R : Type u} [Ring R] {M N : ModuleCat R} (f g : M N) :
                                        (f + g).hom = f.hom + g.hom
                                        instance ModuleCat.instZeroHom {R : Type u} [Ring R] {M N : ModuleCat R} :
                                        Zero (M N)
                                        Equations
                                        • ModuleCat.instZeroHom = { zero := { hom := 0 } }
                                        @[simp]
                                        theorem ModuleCat.hom_zero {R : Type u} [Ring R] {M N : ModuleCat R} :
                                        instance ModuleCat.instSMulNatHom {R : Type u} [Ring R] {M N : ModuleCat R} :
                                        SMul (M N)
                                        Equations
                                        • ModuleCat.instSMulNatHom = { smul := fun (n : ) (f : M N) => { hom := n f.hom } }
                                        @[simp]
                                        theorem ModuleCat.hom_nsmul {R : Type u} [Ring R] {M N : ModuleCat R} (n : ) (f : M N) :
                                        (n f).hom = n f.hom
                                        instance ModuleCat.instNegHom {R : Type u} [Ring R] {M N : ModuleCat R} :
                                        Neg (M N)
                                        Equations
                                        • ModuleCat.instNegHom = { neg := fun (f : M N) => { hom := -f.hom } }
                                        @[simp]
                                        theorem ModuleCat.hom_neg {R : Type u} [Ring R] {M N : ModuleCat R} (f : M N) :
                                        (-f).hom = -f.hom
                                        instance ModuleCat.instSubHom {R : Type u} [Ring R] {M N : ModuleCat R} :
                                        Sub (M N)
                                        Equations
                                        • ModuleCat.instSubHom = { sub := fun (f g : M N) => { hom := f.hom - g.hom } }
                                        @[simp]
                                        theorem ModuleCat.hom_sub {R : Type u} [Ring R] {M N : ModuleCat R} (f g : M N) :
                                        (f - g).hom = f.hom - g.hom
                                        instance ModuleCat.instSMulIntHom {R : Type u} [Ring R] {M N : ModuleCat R} :
                                        SMul (M N)
                                        Equations
                                        • ModuleCat.instSMulIntHom = { smul := fun (n : ) (f : M N) => { hom := n f.hom } }
                                        @[simp]
                                        theorem ModuleCat.hom_zsmul {R : Type u} [Ring R] {M N : ModuleCat R} (n : ) (f : M N) :
                                        (n f).hom = n f.hom
                                        instance ModuleCat.instAddCommGroupHom {R : Type u} [Ring R] {M N : ModuleCat R} :
                                        Equations
                                        @[simp]
                                        theorem ModuleCat.hom_sum {R : Type u} [Ring R] {M N : ModuleCat R} {ι : Type u_1} (f : ι(M N)) (s : Finset ι) :
                                        (∑ is, f i).hom = is, (f i).hom
                                        Equations
                                        • ModuleCat.instPreadditive = { homGroup := inferInstance, add_comp := , comp_add := }
                                        def ModuleCat.homAddEquiv {R : Type u} [Ring R] {M N : ModuleCat R} :
                                        (M N) ≃+ (M →ₗ[R] N)

                                        ModuleCat.Hom.hom bundled as an additive equivalence.

                                        Equations
                                        • ModuleCat.homAddEquiv = { toEquiv := ModuleCat.homEquiv, map_add' := }
                                        Instances For
                                          @[simp]
                                          theorem ModuleCat.homAddEquiv_symm_apply_hom {R : Type u} [Ring R] {M N : ModuleCat R} (f : M →ₗ[R] N) :
                                          (ModuleCat.homAddEquiv.symm f).hom = f
                                          @[simp]
                                          theorem ModuleCat.homAddEquiv_apply {R : Type u} [Ring R] {M N : ModuleCat R} (self : M.Hom N) :
                                          ModuleCat.homAddEquiv self = self.hom
                                          instance ModuleCat.instSMulHom {R : Type u} [Ring R] {M N : ModuleCat R} {S : Type u_1} [Monoid S] [DistribMulAction S N] [SMulCommClass R S N] :
                                          SMul S (M N)
                                          Equations
                                          • ModuleCat.instSMulHom = { smul := fun (c : S) (f : M N) => { hom := c f.hom } }
                                          @[simp]
                                          theorem ModuleCat.hom_smul {R : Type u} [Ring R] {M N : ModuleCat R} {S : Type u_1} [Monoid S] [DistribMulAction S N] [SMulCommClass R S N] (s : S) (f : M N) :
                                          (s f).hom = s f.hom
                                          instance ModuleCat.Hom.instModule {R : Type u} [Ring R] {M N : ModuleCat R} {S : Type u_1} [Semiring S] [Module S N] [SMulCommClass R S N] :
                                          Module S (M N)
                                          Equations
                                          def ModuleCat.homLinearEquiv {R : Type u} [Ring R] {M N : ModuleCat R} {S : Type u_1} [Semiring S] [Module S N] [SMulCommClass R S N] :
                                          (M N) ≃ₗ[S] M →ₗ[R] N

                                          ModuleCat.Hom.hom bundled as a linear equivalence.

                                          Equations
                                          • ModuleCat.homLinearEquiv = { toFun := ModuleCat.homAddEquiv.toFun, map_add' := , map_smul' := , invFun := ModuleCat.homAddEquiv.invFun, left_inv := , right_inv := }
                                          Instances For
                                            @[simp]
                                            theorem ModuleCat.homLinearEquiv_apply {R : Type u} [Ring R] {M N : ModuleCat R} {S : Type u_1} [Semiring S] [Module S N] [SMulCommClass R S N] (a✝ : M N) :
                                            ModuleCat.homLinearEquiv a✝ = ModuleCat.homAddEquiv.toFun a✝
                                            @[simp]
                                            theorem ModuleCat.homLinearEquiv_symm_apply {R : Type u} [Ring R] {M N : ModuleCat R} {S : Type u_1} [Semiring S] [Module S N] [SMulCommClass R S N] (a✝ : M →ₗ[R] N) :
                                            ModuleCat.homLinearEquiv.symm a✝ = ModuleCat.homAddEquiv.invFun a✝
                                            Equations
                                            • ModuleCat.instLinear = { homModule := inferInstance, smul_comp := , comp_smul := }
                                            theorem ModuleCat.Iso.homCongr_eq_arrowCongr {S : Type u} [CommRing S] {X Y X' Y' : ModuleCat S} (i : X X') (j : Y Y') (f : X Y) :
                                            (i.homCongr j) f = { hom := (i.toLinearEquiv.arrowCongr j.toLinearEquiv) f.hom }
                                            theorem ModuleCat.Iso.conj_eq_conj {S : Type u} [CommRing S] {X X' : ModuleCat S} (i : X X') (f : CategoryTheory.End X) :
                                            i.conj f = { hom := i.toLinearEquiv.conj f.hom }
                                            def ModuleCat.endMulEquiv {R : Type u} [Ring R] (M : ModuleCat R) :

                                            ModuleCat.Hom.hom as an isomorphism of monoids.

                                            Equations
                                            • M.endMulEquiv = { toFun := ModuleCat.Hom.hom, invFun := ModuleCat.ofHom, left_inv := , right_inv := , map_mul' := }
                                            Instances For
                                              @[simp]
                                              theorem ModuleCat.endMulEquiv_symm_apply_hom {R : Type u} [Ring R] (M : ModuleCat R) (f : M →ₗ[R] M) :
                                              (M.endMulEquiv.symm f).hom = f
                                              @[simp]
                                              theorem ModuleCat.endMulEquiv_apply {R : Type u} [Ring R] (M : ModuleCat R) (self : M.Hom M) :
                                              M.endMulEquiv self = self.hom

                                              The scalar multiplication on an object of ModuleCat R considered as a morphism of rings from R to the endomorphisms of the underlying abelian group.

                                              Equations
                                              • M.smul = { toFun := fun (r : R) => { toFun := fun (m : M) => r m, map_zero' := , map_add' := }, map_one' := , map_mul' := , map_zero' := , map_add' := }
                                              Instances For

                                                The scalar multiplication on ModuleCat R considered as a morphism of rings to the endomorphisms of the forgetful functor to AddCommGrp).

                                                Equations
                                                • ModuleCat.smulNatTrans R = { toFun := fun (r : R) => { app := fun (M : ModuleCat R) => M.smul r, naturality := }, map_one' := , map_mul' := , map_zero' := , map_add' := }
                                                Instances For
                                                  @[simp]
                                                  theorem ModuleCat.smulNatTrans_apply_app (R : Type u) [Ring R] (r : R) (M : ModuleCat R) :
                                                  ((ModuleCat.smulNatTrans R) r).app M = M.smul r

                                                  Given A : AddCommGrp and a ring morphism R →+* End A, this is a type synonym for A, on which we shall define a structure of R-module.

                                                  Equations
                                                  Instances For
                                                    Equations
                                                    @[simp]
                                                    theorem ModuleCat.mkOfSMul'_smul {R : Type u} [Ring R] {A : AddCommGrp} (φ : R →+* CategoryTheory.End A) (r : R) (x : (ModuleCat.mkOfSMul' φ)) :
                                                    r x = (let_fun this := φ r; this) x
                                                    @[reducible, inline]

                                                    Given A : AddCommGrp and a ring morphism R →+* End A, this is an object in ModuleCat R, whose underlying abelian group is A and whose scalar multiplication is given by R.

                                                    Equations
                                                    Instances For
                                                      @[simp]
                                                      theorem ModuleCat.mkOfSMul_smul {R : Type u} [Ring R] {A : AddCommGrp} (φ : R →+* CategoryTheory.End A) (r : R) :
                                                      (ModuleCat.mkOfSMul φ).smul r = φ r

                                                      Constructor for morphisms in ModuleCat R which takes as inputs a morphism between the underlying objects in AddCommGrp and the compatibility with the scalar multiplication.

                                                      Equations
                                                      • ModuleCat.homMk φ = { hom := { toFun := φ, map_add' := , map_smul' := } }
                                                      Instances For
                                                        @[simp]
                                                        def ModuleCat.ofHom₂ {R : Type u_1} [CommRing R] {M N P : ModuleCat R} (f : M →ₗ[R] N →ₗ[R] P) :
                                                        M ModuleCat.of R (N P)

                                                        Turn a bilinear map into a homomorphism.

                                                        Equations
                                                        Instances For
                                                          @[simp]
                                                          theorem ModuleCat.ofHom₂_hom {R : Type u_1} [CommRing R] {M N P : ModuleCat R} (f : M →ₗ[R] N →ₗ[R] P) :
                                                          (ModuleCat.ofHom₂ f).hom = ModuleCat.homLinearEquiv.symm ∘ₗ f
                                                          def ModuleCat.Hom.hom₂ {R : Type u_1} [CommRing R] {M N P : ModuleCat R} (f : M.Hom (ModuleCat.of R (N P))) :
                                                          M →ₗ[R] N →ₗ[R] P

                                                          Turn a homomorphism into a bilinear map.

                                                          Equations
                                                          Instances For
                                                            @[simp]
                                                            theorem ModuleCat.Hom.hom₂_apply {R : Type u_1} [CommRing R] {M N P : ModuleCat R} (f : M.Hom (ModuleCat.of R (N P))) (a✝ : M) :
                                                            f.hom₂ a✝ = (f.hom a✝).hom
                                                            @[simp]
                                                            theorem ModuleCat.Hom.hom₂_ofHom₂ {R : Type u_1} [CommRing R] {M N P : ModuleCat R} (f : M →ₗ[R] N →ₗ[R] P) :
                                                            @[simp]

                                                            @[simp] lemmas for LinearMap.comp and categorical identities.

                                                            @[simp]
                                                            theorem LinearMap.comp_id_moduleCat {R : Type u_1} [Ring R] {G : ModuleCat R} {H : Type u} [AddCommGroup H] [Module R H] (f : G →ₗ[R] H) :
                                                            @[simp]
                                                            theorem LinearMap.id_moduleCat_comp {R : Type u_1} [Ring R] {G : Type u} [AddCommGroup G] [Module R G] {H : ModuleCat R} (f : G →ₗ[R] H) :