The category of R
-modules has finite biproducts #
THIS FILE IS SYNCHRONIZED WITH MATHLIB4. Any changes to this file require a corresponding PR to mathlib4.
@[protected, instance]
@[protected, instance]
@[simp]
theorem
Module.binary_product_limit_cone_is_limit_lift
{R : Type u}
[ring R]
(M N : Module R)
(s : category_theory.limits.cone (category_theory.limits.pair M N)) :
Construct limit data for a binary product in Module R
, using Module.of R (M × N)
.
Equations
- M.binary_product_limit_cone N = {cone := {X := Module.of R (↥M × ↥N) prod.module, π := {app := λ (j : category_theory.discrete category_theory.limits.walking_pair), j.cases_on (λ (j : category_theory.limits.walking_pair), j.cases_on (linear_map.fst R ↥M ↥N) (linear_map.snd R ↥M ↥N)), naturality' := _}}, is_limit := {lift := λ (s : category_theory.limits.cone (category_theory.limits.pair M N)), linear_map.prod (s.π.app {as := category_theory.limits.walking_pair.left}) (s.π.app {as := category_theory.limits.walking_pair.right}), fac' := _, uniq' := _}}
@[simp]
@[simp]
We verify that the biproduct in Module R
is isomorphic to
the cartesian product of the underlying types:
Equations
@[simp]
theorem
Module.biprod_iso_prod_hom_apply
{R : Type u}
[ring R]
(M N : Module R)
(i : ↥((category_theory.limits.binary_biproduct.bicone M N).to_cone.X)) :
@[simp]
@[simp]
theorem
Module.biprod_iso_prod_inv_comp_fst_apply
{R : Type u}
[ring R]
(M N : Module R)
(x : ↥(Module.of R (↥M × ↥N))) :
⇑category_theory.limits.biprod.fst (⇑((M.biprod_iso_prod N).inv) x) = ⇑(linear_map.fst R ↥M ↥N) x
@[simp]
@[simp]
theorem
Module.biprod_iso_prod_inv_comp_snd_apply
{R : Type u}
[ring R]
(M N : Module R)
(x : ↥(Module.of R (↥M × ↥N))) :
⇑category_theory.limits.biprod.snd (⇑((M.biprod_iso_prod N).inv) x) = ⇑(linear_map.snd R ↥M ↥N) x
def
Module.has_limit.lift
{R : Type u}
[ring R]
{J : Type w}
(f : J → Module R)
(s : category_theory.limits.fan f) :
The map from an arbitrary cone over a indexed family of abelian groups to the cartesian product of those groups.
@[simp]
theorem
Module.has_limit.product_limit_cone_is_limit_lift
{R : Type u}
[ring R]
{J : Type w}
(f : J → Module R)
(s : category_theory.limits.fan f) :
Construct limit data for a product in Module R
, using Module.of R (Π j, F.obj j)
.
Equations
- Module.has_limit.product_limit_cone f = {cone := {X := Module.of R (Π (j : J), ↥(f j)) (pi.module J (λ (j : J), ↥(f j)) R), π := category_theory.discrete.nat_trans (λ (j : category_theory.discrete J), linear_map.proj j.as)}, is_limit := {lift := Module.has_limit.lift f, fac' := _, uniq' := _}}
@[simp]
theorem
Module.biproduct_iso_pi_hom_apply
{R : Type u}
[ring R]
{J : Type}
[fintype J]
(f : J → Module R)
(x : ↥((category_theory.limits.biproduct.bicone f).to_cone.X))
(j : J) :
⇑((Module.biproduct_iso_pi f).hom) x j = ⇑(category_theory.limits.biproduct.π f j) x
@[simp]
theorem
Module.biproduct_iso_pi_inv_comp_π_apply
{R : Type u}
[ring R]
{J : Type}
[fintype J]
(f : J → Module R)
(j : J)
(x : ↥(Module.of R (Π (j : J), ↥(f j)))) :
⇑(category_theory.limits.biproduct.π f j) (⇑((Module.biproduct_iso_pi f).inv) x) = ⇑(linear_map.proj j) x
noncomputable
def
lequiv_prod_of_right_split_exact
{R : Type u}
{A M B : Type v}
[ring R]
[add_comm_group A]
[module R A]
[add_comm_group B]
[module R B]
[add_comm_group M]
[module R M]
{j : A →ₗ[R] M}
{g : M →ₗ[R] B}
{f : B →ₗ[R] M}
(hj : function.injective ⇑j)
(exac : linear_map.range j = linear_map.ker g)
(h : g.comp f = linear_map.id) :
The isomorphism A × B ≃ₗ[R] M
coming from a right split exact sequence 0 ⟶ A ⟶ M ⟶ B ⟶ 0
of modules.
Equations
- lequiv_prod_of_right_split_exact hj exac h = (_.splitting.iso ≪≫ (Module.of R A).biprod_iso_prod (Module.of R B)).to_linear_equiv.symm
noncomputable
def
lequiv_prod_of_left_split_exact
{R : Type u}
{A M B : Type v}
[ring R]
[add_comm_group A]
[module R A]
[add_comm_group B]
[module R B]
[add_comm_group M]
[module R M]
{j : A →ₗ[R] M}
{g : M →ₗ[R] B}
{f : M →ₗ[R] A}
(hg : function.surjective ⇑g)
(exac : linear_map.range j = linear_map.ker g)
(h : f.comp j = linear_map.id) :
The isomorphism A × B ≃ₗ[R] M
coming from a left split exact sequence 0 ⟶ A ⟶ M ⟶ B ⟶ 0
of modules.
Equations
- lequiv_prod_of_left_split_exact hg exac h = (_.splitting.iso ≪≫ (Module.of R A).biprod_iso_prod (Module.of R B)).to_linear_equiv.symm