Additively-graded multiplicative structures on ⨁ i, A i #
This module provides a set of heterogeneous typeclasses for defining a multiplicative structure
over ⨁ i, A i such that (*) : A i → A j → A (i + j); that is to say, A forms an
additively-graded ring. The typeclasses are:
DirectSum.GNonUnitalNonAssocSemiring ADirectSum.GSemiring ADirectSum.GRing ADirectSum.GCommSemiring ADirectSum.GCommRing A
Respectively, these imbue the external direct sum ⨁ i, A i with:
DirectSum.nonUnitalNonAssocSemiring,DirectSum.nonUnitalNonAssocRingDirectSum.semiringDirectSum.ringDirectSum.commSemiringDirectSum.commRing
the base ring A 0 with:
DirectSum.GradeZero.nonUnitalNonAssocSemiring,DirectSum.GradeZero.nonUnitalNonAssocRingDirectSum.GradeZero.semiringDirectSum.GradeZero.ringDirectSum.GradeZero.commSemiringDirectSum.GradeZero.commRing
and the ith grade A i with A 0-actions (•) defined as left-multiplication:
DirectSum.GradeZero.smul (A 0),DirectSum.GradeZero.smulWithZero (A 0)DirectSum.GradeZero.module (A 0)- (nothing)
- (nothing)
- (nothing)
Note that in the presence of these instances, ⨁ i, A i itself inherits an A 0-action.
DirectSum.ofZeroRingHom : A 0 →+* ⨁ i, A i provides DirectSum.of A 0 as a ring
homomorphism.
DirectSum.toSemiring extends DirectSum.toAddMonoid to produce a RingHom.
Direct sums of subobjects #
Additionally, this module provides helper functions to construct GSemiring and GCommSemiring
instances for:
A : ι → Submonoid S:DirectSum.GSemiring.ofAddSubmonoids,DirectSum.GCommSemiring.ofAddSubmonoids.A : ι → Subgroup S:DirectSum.GSemiring.ofAddSubgroups,DirectSum.GCommSemiring.ofAddSubgroups.A : ι → Submodule S:DirectSum.GSemiring.ofSubmodules,DirectSum.GCommSemiring.ofSubmodules.
If CompleteLattice.independent (Set.range A), these provide a gradation of ⨆ i, A i, and the
mapping ⨁ i, A i →+ ⨆ i, A i can be obtained as
DirectSum.toMonoid (fun i ↦ AddSubmonoid.inclusion <| le_iSup A i).
Tags #
graded ring, filtered ring, direct sum, add_submonoid
Typeclasses #
A graded version of NonUnitalNonAssocSemiring.
- mul : {i j : ι} → A i → A j → A (i + j)
- mul_zero : ∀ {i j : ι} (a : A i), GradedMonoid.GMul.mul a 0 = 0
Multiplication from the right with any graded component's zero vanishes.
- zero_mul : ∀ {i j : ι} (b : A j), GradedMonoid.GMul.mul 0 b = 0
Multiplication from the left with any graded component's zero vanishes.
- mul_add : ∀ {i j : ι} (a : A i) (b c : A j), GradedMonoid.GMul.mul a (b + c) = GradedMonoid.GMul.mul a b + GradedMonoid.GMul.mul a c
Multiplication from the right between graded components distributes with respect to addition.
- add_mul : ∀ {i j : ι} (a b : A i) (c : A j), GradedMonoid.GMul.mul (a + b) c = GradedMonoid.GMul.mul a c + GradedMonoid.GMul.mul b c
Multiplication from the left between graded components distributes with respect to addition.
Instances
Multiplication from the right with any graded component's zero vanishes.
Multiplication from the left with any graded component's zero vanishes.
Multiplication from the right between graded components distributes with respect to addition.
Multiplication from the left between graded components distributes with respect to addition.
A graded version of Semiring.
- mul : {i j : ι} → A i → A j → A (i + j)
- mul_zero : ∀ {i j : ι} (a : A i), GradedMonoid.GMul.mul a 0 = 0
- zero_mul : ∀ {i j : ι} (b : A j), GradedMonoid.GMul.mul 0 b = 0
- mul_add : ∀ {i j : ι} (a : A i) (b c : A j), GradedMonoid.GMul.mul a (b + c) = GradedMonoid.GMul.mul a b + GradedMonoid.GMul.mul a c
- add_mul : ∀ {i j : ι} (a b : A i) (c : A j), GradedMonoid.GMul.mul (a + b) c = GradedMonoid.GMul.mul a c + GradedMonoid.GMul.mul b c
- one : A 0
- one_mul : ∀ (a : GradedMonoid A), 1 * a = a
Multiplication by
oneon the left is the identity - mul_one : ∀ (a : GradedMonoid A), a * 1 = a
Multiplication by
oneon the right is the identity Multiplication is associative
Optional field to allow definitional control of natural powers
- gnpow_zero' : ∀ (a : GradedMonoid A), GradedMonoid.mk (0 • a.fst) (DirectSum.GSemiring.gnpow 0 a.snd) = 1
The zeroth power will yield 1
- gnpow_succ' : ∀ (n : ℕ) (a : GradedMonoid A), GradedMonoid.mk (n.succ • a.fst) (DirectSum.GSemiring.gnpow n.succ a.snd) = ⟨n • a.fst, DirectSum.GSemiring.gnpow n a.snd⟩ * a
Successor powers behave as expected
- natCast : ℕ → A 0
The canonical map from ℕ to the zeroth component of a graded semiring.
- natCast_zero : DirectSum.GSemiring.natCast 0 = 0
The canonical map from ℕ to a graded semiring respects zero.
- natCast_succ : ∀ (n : ℕ), DirectSum.GSemiring.natCast (n + 1) = DirectSum.GSemiring.natCast n + GradedMonoid.GOne.one
The canonical map from ℕ to a graded semiring respects successors.
Instances
The canonical map from ℕ to a graded semiring respects zero.
The canonical map from ℕ to a graded semiring respects successors.
A graded version of CommSemiring.
- mul : {i j : ι} → A i → A j → A (i + j)
- mul_zero : ∀ {i j : ι} (a : A i), GradedMonoid.GMul.mul a 0 = 0
- zero_mul : ∀ {i j : ι} (b : A j), GradedMonoid.GMul.mul 0 b = 0
- mul_add : ∀ {i j : ι} (a : A i) (b c : A j), GradedMonoid.GMul.mul a (b + c) = GradedMonoid.GMul.mul a b + GradedMonoid.GMul.mul a c
- add_mul : ∀ {i j : ι} (a b : A i) (c : A j), GradedMonoid.GMul.mul (a + b) c = GradedMonoid.GMul.mul a c + GradedMonoid.GMul.mul b c
- one : A 0
- one_mul : ∀ (a : GradedMonoid A), 1 * a = a
- mul_one : ∀ (a : GradedMonoid A), a * 1 = a
- gnpow_zero' : ∀ (a : GradedMonoid A), GradedMonoid.mk (0 • a.fst) (DirectSum.GSemiring.gnpow 0 a.snd) = 1
- gnpow_succ' : ∀ (n : ℕ) (a : GradedMonoid A), GradedMonoid.mk (n.succ • a.fst) (DirectSum.GSemiring.gnpow n.succ a.snd) = ⟨n • a.fst, DirectSum.GSemiring.gnpow n a.snd⟩ * a
- natCast : ℕ → A 0
- natCast_zero : DirectSum.GSemiring.natCast 0 = 0
- natCast_succ : ∀ (n : ℕ), DirectSum.GSemiring.natCast (n + 1) = DirectSum.GSemiring.natCast n + GradedMonoid.GOne.one
- mul_comm : ∀ (a b : GradedMonoid A), a * b = b * a
Multiplication is commutative
Instances
A graded version of Ring.
- mul : {i j : ι} → A i → A j → A (i + j)
- mul_zero : ∀ {i j : ι} (a : A i), GradedMonoid.GMul.mul a 0 = 0
- zero_mul : ∀ {i j : ι} (b : A j), GradedMonoid.GMul.mul 0 b = 0
- mul_add : ∀ {i j : ι} (a : A i) (b c : A j), GradedMonoid.GMul.mul a (b + c) = GradedMonoid.GMul.mul a b + GradedMonoid.GMul.mul a c
- add_mul : ∀ {i j : ι} (a b : A i) (c : A j), GradedMonoid.GMul.mul (a + b) c = GradedMonoid.GMul.mul a c + GradedMonoid.GMul.mul b c
- one : A 0
- one_mul : ∀ (a : GradedMonoid A), 1 * a = a
- mul_one : ∀ (a : GradedMonoid A), a * 1 = a
- gnpow_zero' : ∀ (a : GradedMonoid A), GradedMonoid.mk (0 • a.fst) (DirectSum.GSemiring.gnpow 0 a.snd) = 1
- gnpow_succ' : ∀ (n : ℕ) (a : GradedMonoid A), GradedMonoid.mk (n.succ • a.fst) (DirectSum.GSemiring.gnpow n.succ a.snd) = ⟨n • a.fst, DirectSum.GSemiring.gnpow n a.snd⟩ * a
- natCast : ℕ → A 0
- natCast_zero : DirectSum.GSemiring.natCast 0 = 0
- natCast_succ : ∀ (n : ℕ), DirectSum.GSemiring.natCast (n + 1) = DirectSum.GSemiring.natCast n + GradedMonoid.GOne.one
- intCast : ℤ → A 0
The canonical map from ℤ to the zeroth component of a graded ring.
- intCast_ofNat : ∀ (n : ℕ), DirectSum.GRing.intCast ↑n = DirectSum.GSemiring.natCast n
The canonical map from ℤ to a graded ring extends the canonical map from ℕ to the underlying graded semiring.
- intCast_negSucc_ofNat : ∀ (n : ℕ), DirectSum.GRing.intCast (Int.negSucc n) = -DirectSum.GSemiring.natCast (n + 1)
On negative integers, the canonical map from ℤ to a graded ring is the negative extension of the canonical map from ℕ to the underlying graded semiring.
Instances
The canonical map from ℤ to a graded ring extends the canonical map from ℕ to the underlying graded semiring.
On negative integers, the canonical map from ℤ to a graded ring is the negative extension of the canonical map from ℕ to the underlying graded semiring.
A graded version of CommRing.
- mul : {i j : ι} → A i → A j → A (i + j)
- mul_zero : ∀ {i j : ι} (a : A i), GradedMonoid.GMul.mul a 0 = 0
- zero_mul : ∀ {i j : ι} (b : A j), GradedMonoid.GMul.mul 0 b = 0
- mul_add : ∀ {i j : ι} (a : A i) (b c : A j), GradedMonoid.GMul.mul a (b + c) = GradedMonoid.GMul.mul a b + GradedMonoid.GMul.mul a c
- add_mul : ∀ {i j : ι} (a b : A i) (c : A j), GradedMonoid.GMul.mul (a + b) c = GradedMonoid.GMul.mul a c + GradedMonoid.GMul.mul b c
- one : A 0
- one_mul : ∀ (a : GradedMonoid A), 1 * a = a
- mul_one : ∀ (a : GradedMonoid A), a * 1 = a
- gnpow_zero' : ∀ (a : GradedMonoid A), GradedMonoid.mk (0 • a.fst) (DirectSum.GSemiring.gnpow 0 a.snd) = 1
- gnpow_succ' : ∀ (n : ℕ) (a : GradedMonoid A), GradedMonoid.mk (n.succ • a.fst) (DirectSum.GSemiring.gnpow n.succ a.snd) = ⟨n • a.fst, DirectSum.GSemiring.gnpow n a.snd⟩ * a
- natCast : ℕ → A 0
- natCast_zero : DirectSum.GSemiring.natCast 0 = 0
- natCast_succ : ∀ (n : ℕ), DirectSum.GSemiring.natCast (n + 1) = DirectSum.GSemiring.natCast n + GradedMonoid.GOne.one
- intCast : ℤ → A 0
- intCast_ofNat : ∀ (n : ℕ), DirectSum.GRing.intCast ↑n = DirectSum.GSemiring.natCast n
- intCast_negSucc_ofNat : ∀ (n : ℕ), DirectSum.GRing.intCast (Int.negSucc n) = -DirectSum.GSemiring.natCast (n + 1)
- mul_comm : ∀ (a b : GradedMonoid A), a * b = b * a
Multiplication is commutative
Instances
Instances for ⨁ i, A i #
Equations
- DirectSum.instOne A = { one := (DirectSum.of A 0) GradedMonoid.GOne.one }
The piecewise multiplication from the Mul instance, as a bundled homomorphism.
Equations
- DirectSum.gMulHom A = { toFun := fun (a : A i) => { toFun := fun (b : A j) => GradedMonoid.GMul.mul a b, map_zero' := ⋯, map_add' := ⋯ }, map_zero' := ⋯, map_add' := ⋯ }
Instances For
The multiplication from the Mul instance, as a bundled homomorphism.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- DirectSum.instNonUnitalNonAssocSemiring A = let __src := inferInstance; NonUnitalNonAssocSemiring.mk ⋯ ⋯ ⋯ ⋯
The Semiring structure derived from GSemiring A.
Equations
- DirectSum.semiring A = let __src := inferInstance; Semiring.mk ⋯ ⋯ ⋯ ⋯ npowRec ⋯ ⋯
A heavily unfolded version of the definition of multiplication
The CommSemiring structure derived from GCommSemiring A.
Equations
- DirectSum.commSemiring A = let __src := DirectSum.semiring A; CommSemiring.mk ⋯
The Ring derived from GSemiring A.
Equations
- DirectSum.nonAssocRing A = let __src := inferInstance; let __src_1 := inferInstance; NonUnitalNonAssocRing.mk ⋯ ⋯ ⋯ ⋯
The Ring derived from GSemiring A.
Equations
- DirectSum.ring A = let __src := DirectSum.semiring A; let __src_1 := inferInstance; Ring.mk ⋯ SubNegMonoid.zsmul ⋯ ⋯ ⋯ ⋯ ⋯ ⋯
The CommRing derived from GCommSemiring A.
Equations
- DirectSum.commRing A = let __src := DirectSum.ring A; let __src_1 := DirectSum.commSemiring A; CommRing.mk ⋯
Instances for A 0 #
The various G* instances are enough to promote the AddCommMonoid (A 0) structure to various
types of multiplicative structure.
Equations
Equations
Equations
- DirectSum.instNatCastOfNat A = { natCast := DirectSum.GSemiring.natCast }
The Semiring structure derived from GSemiring A.
Equations
- DirectSum.GradeZero.semiring A = Function.Injective.semiring ⇑(DirectSum.of A 0) ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯
of A 0 is a RingHom, using the DirectSum.GradeZero.semiring structure.
Equations
- DirectSum.ofZeroRingHom A = let __src := DirectSum.of A 0; { toFun := (↑__src).toFun, map_one' := ⋯, map_mul' := ⋯, map_zero' := ⋯, map_add' := ⋯ }
Instances For
Each grade A i derives an A 0-module structure from GSemiring A. Note that this results
in an overall Module (A 0) (⨁ i, A i) structure via DirectSum.module.
Equations
- DirectSum.GradeZero.module A = Function.Injective.module (A 0) (DirectSum.of A i) ⋯ ⋯
The CommSemiring structure derived from GCommSemiring A.
Equations
- DirectSum.GradeZero.commSemiring A = Function.Injective.commSemiring ⇑(DirectSum.of A 0) ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯
The NonUnitalNonAssocRing derived from GNonUnitalNonAssocSemiring A.
Equations
- DirectSum.GradeZero.nonUnitalNonAssocRing A = Function.Injective.nonUnitalNonAssocRing ⇑(DirectSum.of A 0) ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯
Equations
- DirectSum.instIntCastOfNat A = { intCast := DirectSum.GRing.intCast }
The Ring derived from GSemiring A.
Equations
- DirectSum.GradeZero.ring A = Function.Injective.ring ⇑(DirectSum.of A 0) ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯
The CommRing derived from GCommSemiring A.
Equations
- DirectSum.GradeZero.commRing A = Function.Injective.commRing ⇑(DirectSum.of A 0) ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯
If two ring homomorphisms from ⨁ i, A i are equal on each of A i y,
then they are equal.
See note [partially-applied ext lemmas].
Two RingHoms out of a direct sum are equal if they agree on the generators.
A family of AddMonoidHoms preserving DirectSum.One.one and DirectSum.Mul.mul
describes a RingHoms on ⨁ i, A i. This is a stronger version of DirectSum.toMonoid.
Of particular interest is the case when A i are bundled subojects, f is the family of
coercions such as AddSubmonoid.subtype (A i), and the [GSemiring A] structure originates from
DirectSum.gsemiring.ofAddSubmonoids, in which case the proofs about GOne and GMul
can be discharged by rfl.
Equations
- DirectSum.toSemiring f hone hmul = let __src := DirectSum.toAddMonoid f; { toFun := ⇑(DirectSum.toAddMonoid f), map_one' := ⋯, map_mul' := ⋯, map_zero' := ⋯, map_add' := ⋯ }
Instances For
Families of AddMonoidHoms preserving DirectSum.One.one and DirectSum.Mul.mul
are isomorphic to RingHoms on ⨁ i, A i. This is a stronger version of DFinsupp.liftAddHom.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Concrete instances #
A direct sum of copies of a Semiring inherits the multiplication structure.
A direct sum of copies of a Semiring inherits the multiplication structure.
Equations
- One or more equations did not get rendered due to their size.
A direct sum of copies of a CommSemiring inherits the commutative multiplication structure.
Equations
- CommSemiring.directSumGCommSemiring ι = let __src := CommMonoid.gCommMonoid ι; let __src_1 := Semiring.directSumGSemiring ι; DirectSum.GCommSemiring.mk ⋯