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 monoidM
into 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.