Elementwise monoid structure of additive submonoids #
These definitions are a cut-down versions of the ones around Submodule.mul
, as that API is
usually more useful.
SMul (AddSubmonoid R) (AddSubmonoid A)
is also provided given DistribSMul R A
,
and when R = A
it is definitionally equal to the multiplication on AddSubmonoid R
.
These are all available in the Pointwise
locale.
Additionally, it provides various degrees of monoid structure:
AddSubmonoid.one
AddSubmonoid.mul
AddSubmonoid.mulOneClass
AddSubmonoid.semigroup
AddSubmonoid.monoid
which is available globally to match the monoid structure implied bySubmodule.idemSemiring
.
Implementation notes #
Many results about multiplication are derived from the corresponding results about scalar
multiplication, but results requiring right distributivity do not have SMul versions,
due to the lack of a suitable typeclass (unless one goes all the way to Module
).
If R
is an additive monoid with one (e.g., a semiring), then 1 : AddSubmonoid R
is the range
of Nat.cast : ℕ → R
.
Equations
- AddSubmonoid.one = { one := AddMonoidHom.mrange (Nat.castAddMonoidHom R) }
Instances For
For M : Submonoid R
and N : AddSubmonoid A
, M • N
is the additive submonoid
generated by all m • n
where m ∈ M
and n ∈ N
.
Equations
- AddSubmonoid.smul = { smul := fun (M : AddSubmonoid R) (N : AddSubmonoid A) => ⨆ (s : ↥M), AddSubmonoid.map (DistribSMul.toAddMonoidHom A ↑s) N }
Instances For
Multiplication of additive submonoids of a semiring R. The additive submonoid S * T
is the
smallest R-submodule of R
containing the elements s * t
for s ∈ S
and t ∈ T
.
Equations
- AddSubmonoid.mul = { mul := fun (M N : AddSubmonoid R) => ⨆ (s : ↥M), AddSubmonoid.map (AddMonoidHom.mul ↑s) N }
Instances For
AddSubmonoid.neg
distributes over multiplication.
This is available as an instance in the Pointwise
locale.
Equations
- AddSubmonoid.hasDistribNeg = { toInvolutiveNeg := AddSubmonoid.involutiveNeg, neg_mul := ⋯, mul_neg := ⋯ }
Instances For
A MulOneClass
structure on additive submonoids of a (possibly, non-associative) semiring.
Equations
- AddSubmonoid.mulOneClass = { toOne := AddSubmonoid.one, toMul := AddSubmonoid.mul, one_mul := ⋯, mul_one := ⋯ }
Instances For
Semigroup structure on additive submonoids of a (possibly, non-unital) semiring.
Equations
- AddSubmonoid.semigroup = { toMul := AddSubmonoid.mul, mul_assoc := ⋯ }
Instances For
Monoid structure on additive submonoids of a semiring.
Equations
- AddSubmonoid.monoid = { toSemigroup := AddSubmonoid.semigroup, toOne := MulOneClass.toOne, one_mul := ⋯, mul_one := ⋯, npow := npowRecAuto, npow_zero := ⋯, npow_succ := ⋯ }