Decompositions of additive monoids, groups, and modules into direct sums #
THIS FILE IS SYNCHRONIZED WITH MATHLIB4. Any changes to this file require a corresponding PR to mathlib4.
Main definitions #
direct_sum.decomposition ℳ: A typeclass to provide a constructive decomposition from an additive monoidMinto a family of additive submonoidsℳdirect_sum.decompose ℳ: The canonical equivalence provided by the above typeclass
Main statements #
direct_sum.decomposition.is_internal: The link todirect_sum.is_internal.
Implementation details #
As we want to talk about different types of decomposition (additive monoids, modules, rings, ...),
we choose to avoid heavily bundling direct_sum.decompose, instead making copies for the
add_equiv, linear_equiv, etc. This means we have to repeat statements that follow from these
bundled homs, but means we don't have to repeat statements for different types of decomposition.
- decompose' : M → direct_sum ι (λ (i : ι), ↥(ℳ i))
- left_inv : function.left_inverse ⇑(direct_sum.coe_add_monoid_hom ℳ) direct_sum.decomposition.decompose'
- right_inv : function.right_inverse ⇑(direct_sum.coe_add_monoid_hom ℳ) direct_sum.decomposition.decompose'
A decomposition is an equivalence between an additive monoid M and a direct sum of additive
submonoids ℳ i of that M, such that the "recomposition" is canonical. This definition also
works for additive groups and modules.
This is a version of direct_sum.is_internal which comes with a constructive inverse to the
canonical "recomposition" rather than just a proof that the "recomposition" is bijective.
Instances of this typeclass
Instances of other typeclasses for direct_sum.decomposition
- direct_sum.decomposition.has_sizeof_inst
- direct_sum.decomposition.subsingleton
direct_sum.decomposition instances, while carrying data, are always equal.
If M is graded by ι with degree i component ℳ i, then it is isomorphic as
to a direct sum of components. This is the canonical spelling of the decompose' field.
Equations
- direct_sum.decompose ℳ = {to_fun := direct_sum.decomposition.decompose' _inst_5, inv_fun := ⇑(direct_sum.coe_add_monoid_hom ℳ), left_inv := _, right_inv := _}
If M is graded by ι with degree i component ℳ i, then it is isomorphic as
an additive monoid to a direct sum of components.
Equations
- direct_sum.decompose_add_equiv ℳ = {to_fun := (direct_sum.decompose ℳ).symm.to_fun, inv_fun := (direct_sum.decompose ℳ).symm.inv_fun, left_inv := _, right_inv := _, map_add' := _}.symm
The - in the statements below doesn't resolve without this line.
This seems to a be a problem of synthesized vs inferred typeclasses disagreeing. If we replace
the statement of decompose_neg with @eq (⨁ i, ℳ i) (decompose ℳ (-x)) (-decompose ℳ x)
instead of decompose ℳ (-x) = -decompose ℳ x, which forces the typeclasses needed by ⨁ i, ℳ i to
be found by unification rather than synthesis, then everything works fine without this instance.
Equations
- direct_sum.add_comm_group_set_like ℳ = direct_sum.add_comm_group (λ (i : ι), ↥(ℳ i))
If M is graded by ι with degree i component ℳ i, then it is isomorphic as
a module to a direct sum of components.