The category of R-modules has all colimits. #
THIS FILE IS SYNCHRONIZED WITH MATHLIB4. Any changes to this file require a corresponding PR to mathlib4.
This file uses a "pre-automated" approach, just as for Mon/colimits.lean
.
Note that finite colimits can already be obtained from the instance abelian (Module R)
.
TODO:
In fact, in Module R
there is a much nicer model of colimits as quotients
of finitely supported functions, and we really should implement this as well (or instead).
We build the colimit of a diagram in Module
by constructing the
free group on the disjoint union of all the abelian groups in the diagram,
then taking the quotient by the abelian group laws within each abelian group,
and the identifications given by the morphisms in the diagram.
- of : Π {R : Type u} [_inst_1 : ring R] {J : Type w} [_inst_2 : category_theory.category J] {F : J ⥤ Module R} (j : J), ↥(F.obj j) → Module.colimits.prequotient F
- zero : Π {R : Type u} [_inst_1 : ring R] {J : Type w} [_inst_2 : category_theory.category J] {F : J ⥤ Module R}, Module.colimits.prequotient F
- neg : Π {R : Type u} [_inst_1 : ring R] {J : Type w} [_inst_2 : category_theory.category J] {F : J ⥤ Module R}, Module.colimits.prequotient F → Module.colimits.prequotient F
- add : Π {R : Type u} [_inst_1 : ring R] {J : Type w} [_inst_2 : category_theory.category J] {F : J ⥤ Module R}, Module.colimits.prequotient F → Module.colimits.prequotient F → Module.colimits.prequotient F
- smul : Π {R : Type u} [_inst_1 : ring R] {J : Type w} [_inst_2 : category_theory.category J] {F : J ⥤ Module R}, R → Module.colimits.prequotient F → Module.colimits.prequotient F
An inductive type representing all module expressions (without relations)
on a collection of types indexed by the objects of J
.
Instances for Module.colimits.prequotient
- Module.colimits.prequotient.has_sizeof_inst
- Module.colimits.prequotient.inhabited
- Module.colimits.colimit_setoid
Equations
- refl : ∀ {R : Type u} [_inst_1 : ring R] {J : Type w} [_inst_2 : category_theory.category J] {F : J ⥤ Module R} (x : Module.colimits.prequotient F), Module.colimits.relation F x x
- symm : ∀ {R : Type u} [_inst_1 : ring R] {J : Type w} [_inst_2 : category_theory.category J] {F : J ⥤ Module R} (x y : Module.colimits.prequotient F), Module.colimits.relation F x y → Module.colimits.relation F y x
- trans : ∀ {R : Type u} [_inst_1 : ring R] {J : Type w} [_inst_2 : category_theory.category J] {F : J ⥤ Module R} (x y z : Module.colimits.prequotient F), Module.colimits.relation F x y → Module.colimits.relation F y z → Module.colimits.relation F x z
- map : ∀ {R : Type u} [_inst_1 : ring R] {J : Type w} [_inst_2 : category_theory.category J] {F : J ⥤ Module R} (j j' : J) (f : j ⟶ j') (x : ↥(F.obj j)), Module.colimits.relation F (Module.colimits.prequotient.of j' (⇑(F.map f) x)) (Module.colimits.prequotient.of j x)
- zero : ∀ {R : Type u} [_inst_1 : ring R] {J : Type w} [_inst_2 : category_theory.category J] {F : J ⥤ Module R} (j : J), Module.colimits.relation F (Module.colimits.prequotient.of j 0) Module.colimits.prequotient.zero
- neg : ∀ {R : Type u} [_inst_1 : ring R] {J : Type w} [_inst_2 : category_theory.category J] {F : J ⥤ Module R} (j : J) (x : ↥(F.obj j)), Module.colimits.relation F (Module.colimits.prequotient.of j (-x)) (Module.colimits.prequotient.of j x).neg
- add : ∀ {R : Type u} [_inst_1 : ring R] {J : Type w} [_inst_2 : category_theory.category J] {F : J ⥤ Module R} (j : J) (x y : ↥(F.obj j)), Module.colimits.relation F (Module.colimits.prequotient.of j (x + y)) ((Module.colimits.prequotient.of j x).add (Module.colimits.prequotient.of j y))
- smul : ∀ {R : Type u} [_inst_1 : ring R] {J : Type w} [_inst_2 : category_theory.category J] {F : J ⥤ Module R} (j : J) (s : R) (x : ↥(F.obj j)), Module.colimits.relation F (Module.colimits.prequotient.of j (s • x)) (Module.colimits.prequotient.smul s (Module.colimits.prequotient.of j x))
- neg_1 : ∀ {R : Type u} [_inst_1 : ring R] {J : Type w} [_inst_2 : category_theory.category J] {F : J ⥤ Module R} (x x' : Module.colimits.prequotient F), Module.colimits.relation F x x' → Module.colimits.relation F x.neg x'.neg
- add_1 : ∀ {R : Type u} [_inst_1 : ring R] {J : Type w} [_inst_2 : category_theory.category J] {F : J ⥤ Module R} (x x' y : Module.colimits.prequotient F), Module.colimits.relation F x x' → Module.colimits.relation F (x.add y) (x'.add y)
- add_2 : ∀ {R : Type u} [_inst_1 : ring R] {J : Type w} [_inst_2 : category_theory.category J] {F : J ⥤ Module R} (x y y' : Module.colimits.prequotient F), Module.colimits.relation F y y' → Module.colimits.relation F (x.add y) (x.add y')
- smul_1 : ∀ {R : Type u} [_inst_1 : ring R] {J : Type w} [_inst_2 : category_theory.category J] {F : J ⥤ Module R} (s : R) (x x' : Module.colimits.prequotient F), Module.colimits.relation F x x' → Module.colimits.relation F (Module.colimits.prequotient.smul s x) (Module.colimits.prequotient.smul s x')
- zero_add : ∀ {R : Type u} [_inst_1 : ring R] {J : Type w} [_inst_2 : category_theory.category J] {F : J ⥤ Module R} (x : Module.colimits.prequotient F), Module.colimits.relation F (Module.colimits.prequotient.zero.add x) x
- add_zero : ∀ {R : Type u} [_inst_1 : ring R] {J : Type w} [_inst_2 : category_theory.category J] {F : J ⥤ Module R} (x : Module.colimits.prequotient F), Module.colimits.relation F (x.add Module.colimits.prequotient.zero) x
- add_left_neg : ∀ {R : Type u} [_inst_1 : ring R] {J : Type w} [_inst_2 : category_theory.category J] {F : J ⥤ Module R} (x : Module.colimits.prequotient F), Module.colimits.relation F (x.neg.add x) Module.colimits.prequotient.zero
- add_comm : ∀ {R : Type u} [_inst_1 : ring R] {J : Type w} [_inst_2 : category_theory.category J] {F : J ⥤ Module R} (x y : Module.colimits.prequotient F), Module.colimits.relation F (x.add y) (y.add x)
- add_assoc : ∀ {R : Type u} [_inst_1 : ring R] {J : Type w} [_inst_2 : category_theory.category J] {F : J ⥤ Module R} (x y z : Module.colimits.prequotient F), Module.colimits.relation F ((x.add y).add z) (x.add (y.add z))
- one_smul : ∀ {R : Type u} [_inst_1 : ring R] {J : Type w} [_inst_2 : category_theory.category J] {F : J ⥤ Module R} (x : Module.colimits.prequotient F), Module.colimits.relation F (Module.colimits.prequotient.smul 1 x) x
- mul_smul : ∀ {R : Type u} [_inst_1 : ring R] {J : Type w} [_inst_2 : category_theory.category J] {F : J ⥤ Module R} (s t : R) (x : Module.colimits.prequotient F), Module.colimits.relation F (Module.colimits.prequotient.smul (s * t) x) (Module.colimits.prequotient.smul s (Module.colimits.prequotient.smul t x))
- smul_add : ∀ {R : Type u} [_inst_1 : ring R] {J : Type w} [_inst_2 : category_theory.category J] {F : J ⥤ Module R} (s : R) (x y : Module.colimits.prequotient F), Module.colimits.relation F (Module.colimits.prequotient.smul s (x.add y)) ((Module.colimits.prequotient.smul s x).add (Module.colimits.prequotient.smul s y))
- smul_zero : ∀ {R : Type u} [_inst_1 : ring R] {J : Type w} [_inst_2 : category_theory.category J] {F : J ⥤ Module R} (s : R), Module.colimits.relation F (Module.colimits.prequotient.smul s Module.colimits.prequotient.zero) Module.colimits.prequotient.zero
- add_smul : ∀ {R : Type u} [_inst_1 : ring R] {J : Type w} [_inst_2 : category_theory.category J] {F : J ⥤ Module R} (s t : R) (x : Module.colimits.prequotient F), Module.colimits.relation F (Module.colimits.prequotient.smul (s + t) x) ((Module.colimits.prequotient.smul s x).add (Module.colimits.prequotient.smul t x))
- zero_smul : ∀ {R : Type u} [_inst_1 : ring R] {J : Type w} [_inst_2 : category_theory.category J] {F : J ⥤ Module R} (x : Module.colimits.prequotient F), Module.colimits.relation F (Module.colimits.prequotient.smul 0 x) Module.colimits.prequotient.zero
The relation on prequotient
saying when two expressions are equal
because of the module laws, or
because one element is mapped to another by a morphism in the diagram.
The setoid corresponding to module expressions modulo module relations and identifications.
Equations
- Module.colimits.colimit_setoid F = {r := Module.colimits.relation F, iseqv := _}
The underlying type of the colimit of a diagram in Module R
.
Equations
Instances for Module.colimits.colimit_type
Equations
- Module.colimits.colimit_type.add_comm_group F = {add := quot.lift (λ (x : Module.colimits.prequotient F), quot.lift (λ (y : Module.colimits.prequotient F), quot.mk setoid.r (x.add y)) _) _, add_assoc := _, zero := quot.mk setoid.r Module.colimits.prequotient.zero, zero_add := _, add_zero := _, nsmul := add_group.nsmul._default (quot.mk setoid.r Module.colimits.prequotient.zero) (quot.lift (λ (x : Module.colimits.prequotient F), quot.lift (λ (y : Module.colimits.prequotient F), quot.mk setoid.r (x.add y)) _) _) _ _, nsmul_zero' := _, nsmul_succ' := _, neg := quot.lift (λ (x : Module.colimits.prequotient F), quot.mk setoid.r x.neg) _, sub := add_group.sub._default (quot.lift (λ (x : Module.colimits.prequotient F), quot.lift (λ (y : Module.colimits.prequotient F), quot.mk setoid.r (x.add y)) _) _) _ (quot.mk setoid.r Module.colimits.prequotient.zero) _ _ (add_group.nsmul._default (quot.mk setoid.r Module.colimits.prequotient.zero) (quot.lift (λ (x : Module.colimits.prequotient F), quot.lift (λ (y : Module.colimits.prequotient F), quot.mk setoid.r (x.add y)) _) _) _ _) _ _ (quot.lift (λ (x : Module.colimits.prequotient F), quot.mk setoid.r x.neg) _), sub_eq_add_neg := _, zsmul := add_group.zsmul._default (quot.lift (λ (x : Module.colimits.prequotient F), quot.lift (λ (y : Module.colimits.prequotient F), quot.mk setoid.r (x.add y)) _) _) _ (quot.mk setoid.r Module.colimits.prequotient.zero) _ _ (add_group.nsmul._default (quot.mk setoid.r Module.colimits.prequotient.zero) (quot.lift (λ (x : Module.colimits.prequotient F), quot.lift (λ (y : Module.colimits.prequotient F), quot.mk setoid.r (x.add y)) _) _) _ _) _ _ (quot.lift (λ (x : Module.colimits.prequotient F), quot.mk setoid.r x.neg) _), zsmul_zero' := _, zsmul_succ' := _, zsmul_neg' := _, add_left_neg := _, add_comm := _}
Equations
- Module.colimits.colimit_type.module F = {to_distrib_mul_action := {to_mul_action := {to_has_smul := {smul := λ (s : R), quot.lift (λ (x : Module.colimits.prequotient F), quot.mk setoid.r (Module.colimits.prequotient.smul s x)) _}, one_smul := _, mul_smul := _}, smul_zero := _, smul_add := _}, add_smul := _, zero_smul := _}
The bundled module giving the colimit of a diagram.
Equations
The function from a given module in the diagram to the colimit module.
Equations
- Module.colimits.cocone_fun F j x = quot.mk setoid.r (Module.colimits.prequotient.of j x)
The group homomorphism from a given module in the diagram to the colimit module.
Equations
- Module.colimits.cocone_morphism F j = {to_fun := Module.colimits.cocone_fun F j, map_add' := _, map_smul' := _}
The cocone over the proposed colimit module.
Equations
- Module.colimits.colimit_cocone F = {X := Module.colimits.colimit F, ι := {app := Module.colimits.cocone_morphism F, naturality' := _}}
The function from the free module on the diagram to the cone point of any other cocone.
Equations
- Module.colimits.desc_fun_lift F s (Module.colimits.prequotient.smul s_1 x) = s_1 • Module.colimits.desc_fun_lift F s x
- Module.colimits.desc_fun_lift F s (x.add y) = Module.colimits.desc_fun_lift F s x + Module.colimits.desc_fun_lift F s y
- Module.colimits.desc_fun_lift F s x.neg = -Module.colimits.desc_fun_lift F s x
- Module.colimits.desc_fun_lift F s Module.colimits.prequotient.zero = 0
- Module.colimits.desc_fun_lift F s (Module.colimits.prequotient.of j x) = ⇑(s.ι.app j) x
The function from the colimit module to the cone point of any other cocone.
Equations
- Module.colimits.desc_fun F s = quot.lift (Module.colimits.desc_fun_lift F s) _
The group homomorphism from the colimit module to the cone point of any other cocone.
Equations
- Module.colimits.desc_morphism F s = {to_fun := Module.colimits.desc_fun F s, map_add' := _, map_smul' := _}
Evidence that the proposed colimit is the colimit.
Equations
- Module.colimits.colimit_cocone_is_colimit F = {desc := λ (s : category_theory.limits.cocone F), Module.colimits.desc_morphism F s, fac' := _, uniq' := _}