The category of R-modules #
If R is a semiring, SemimoduleCat.{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 and
monomorphism are equivalent to being a linear equivalence and an injective 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 : SemimoduleCat 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 (SemimoduleCat.Hom.hom).
To go from linear maps to morphisms in Module R, use SemimoduleCat.ofHom.
Similarly, given an isomorphism f : M ≅ N use f.toLinearEquiv and given a linear equiv
f : M ≃ₗ[R] N, use f.toModuleIso.
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 isAddCommMonoid structure (contrary to what we do for all module structures in
mathlib), which creates some difficulties down the road.
- carrier : Type vthe underlying type of an object in SemimoduleCat R
- isAddCommMonoid : AddCommMonoid ↑self
- isModule : Module R ↑self
Instances For
Equations
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 SemimoduleCat R.
Equations
- SemimoduleCat.of R X = { carrier := X, isAddCommMonoid := inst✝¹, isModule := inst✝ }
Instances For
Equations
- One or more equations did not get rendered due to their size.
Equations
- One or more equations did not get rendered due to their size.
Turn a morphism in SemimoduleCat back into a LinearMap.
Equations
Instances For
Typecheck a LinearMap as a morphism in SemimoduleCat.
Equations
Instances For
Use the ConcreteCategory.hom projection for @[simps] lemmas.
Equations
- SemimoduleCat.Hom.Simps.hom A B f = f.hom
Instances For
The results below duplicate the ConcreteCategory simp lemmas, but we can keep them for dsimp.
Convenience shortcut for SemimoduleCat.hom_bijective.injective.
Convenience shortcut for SemimoduleCat.hom_bijective.surjective.
SemimoduleCat.Hom.hom bundled as an Equiv.
Equations
- SemimoduleCat.homEquiv = { toFun := SemimoduleCat.Hom.hom, invFun := SemimoduleCat.ofHom, left_inv := ⋯, right_inv := ⋯ }
Instances For
Equations
- One or more equations did not get rendered due to their size.
Equations
- SemimoduleCat.instInhabited R = { default := SemimoduleCat.of R PUnit.{?u.10 + 1} }
Forgetting to the underlying type and then building the bundled object returns the original module.
Equations
- M.ofSelfIso = { hom := CategoryTheory.CategoryStruct.id M, inv := CategoryTheory.CategoryStruct.id M, hom_inv_id := ⋯, inv_hom_id := ⋯ }
Instances For
Reinterpreting a linear map in the category of R-modules
Equations
- SemimoduleCat.«term↟_» = Lean.ParserDescr.node `SemimoduleCat.«term↟_» 1022 (Lean.ParserDescr.binary `andthen (Lean.ParserDescr.symbol "↟") (Lean.ParserDescr.cat `term 1024))
Instances For
Build an isomorphism in the category Module R from a LinearEquiv between Modules.
Equations
- e.toModuleIsoₛ = { hom := SemimoduleCat.ofHom ↑e, inv := SemimoduleCat.ofHom ↑e.symm, hom_inv_id := ⋯, inv_hom_id := ⋯ }
Instances For
Build a LinearEquiv from an isomorphism in the category SemimoduleCat R.
Equations
Instances For
linear equivalences between Modules are the same as (isomorphic to) isomorphisms
in SemimoduleCat
Equations
- linearEquivIsoModuleIsoₛ = { hom := fun (e : X ≃ₗ[R] Y) => e.toModuleIsoₛ, inv := fun (i : SemimoduleCat.of R X ≅ SemimoduleCat.of R Y) => i.toLinearEquivₛ, hom_inv_id := ⋯, inv_hom_id := ⋯ }
Instances For
Equations
- SemimoduleCat.instAddHom = { add := fun (f g : M ⟶ N) => { hom' := SemimoduleCat.Hom.hom f + SemimoduleCat.Hom.hom g } }
Equations
- SemimoduleCat.instSMulNatHom = { smul := fun (n : ℕ) (f : M ⟶ N) => { hom' := n • SemimoduleCat.Hom.hom f } }
Equations
- SemimoduleCat.instSMulNatHom_1 = { smul := fun (n : ℕ) (f : M ⟶ N) => { hom' := n • SemimoduleCat.Hom.hom f } }
Equations
- SemimoduleCat.instHasZeroMorphisms = { zero := @SemimoduleCat.instZeroHom R inst✝, comp_zero := ⋯, zero_comp := ⋯ }
SemimoduleCat.Hom.hom bundled as an additive equivalence.
Equations
- SemimoduleCat.homAddEquiv = { toEquiv := SemimoduleCat.homEquiv, map_add' := ⋯ }
Instances For
Equations
- SemimoduleCat.instSMulHom = { smul := fun (c : S) (f : M ⟶ N) => { hom' := c • SemimoduleCat.Hom.hom f } }
Equations
- SemimoduleCat.Hom.instModule = Function.Injective.module S { toFun := SemimoduleCat.Hom.hom, map_zero' := ⋯, map_add' := ⋯ } ⋯ ⋯
SemimoduleCat.Hom.hom bundled as a linear equivalence.
Equations
- SemimoduleCat.homLinearEquiv = { toFun := SemimoduleCat.homAddEquiv.toFun, map_add' := ⋯, map_smul' := ⋯, invFun := SemimoduleCat.homAddEquiv.invFun, left_inv := ⋯, right_inv := ⋯ }
Instances For
Let S be an S₀-algebra. Then S-modules are modules over S₀.
Equations
Instances For
Turn a bilinear map into a homomorphism.
Equations
Instances For
Turn a homomorphism into a bilinear map.
Equations
Instances For
@[simp] lemmas for LinearMap.comp and categorical identities.