Decompositions of additive monoids, groups, and modules into direct sums #
Main definitions #
DirectSum.Decomposition ℳ: A typeclass to provide a constructive decomposition from an additive monoidMinto a family of additive submonoidsℳDirectSum.decompose ℳ: The canonical equivalence provided by the above typeclass
Main statements #
DirectSum.Decomposition.isInternal: The link toDirectSum.IsInternal.
Implementation details #
As we want to talk about different types of decomposition (additive monoids, modules, rings, ...),
we choose to avoid heavily bundling DirectSum.decompose, instead making copies for the
AddEquiv, LinearEquiv, 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 → ⨁ (i : ι), { x // x ∈ ℳ i }
- left_inv : Function.LeftInverse (↑(DirectSum.coeAddMonoidHom ℳ)) DirectSum.Decomposition.decompose'
- right_inv : Function.RightInverse (↑(DirectSum.coeAddMonoidHom ℳ)) DirectSum.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 DirectSum.IsInternal which comes with a constructive inverse to the
canonical "recomposition" rather than just a proof that the "recomposition" is bijective.
Instances
DirectSum.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
- One or more equations did not get rendered due to their size.
Instances For
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
- One or more equations did not get rendered due to their size.
Instances For
The - in the statements below doesn't resolve without this line.
This seems to 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
- DirectSum.addCommGroupSetLike ℳ = inferInstance
If M is graded by ι with degree i component ℳ i, then it is isomorphic as
a module to a direct sum of components.
Equations
- One or more equations did not get rendered due to their size.