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 A
• DirectSum.GSemiring A
• DirectSum.GRing A
• DirectSum.GCommSemiring A
• DirectSum.GCommRing A

Respectively, these imbue the external direct sum ⨁ i, A i with:

• DirectSum.nonUnitalNonAssocSemiring, DirectSum.nonUnitalNonAssocRing
• DirectSum.semiring
• DirectSum.ring
• DirectSum.commSemiring
• DirectSum.commRing

the base ring A 0 with:

• DirectSum.GradeZero.nonUnitalNonAssocSemiring, DirectSum.GradeZero.nonUnitalNonAssocRing
• DirectSum.GradeZero.semiring
• DirectSum.GradeZero.ring
• DirectSum.GradeZero.commSemiring
• DirectSum.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 #

class DirectSum.GNonUnitalNonAssocSemiring {ι : Type u_1} (A : ιType u_2) [Add ι] [(i : ι) → AddCommMonoid (A i)] extends :
Type (max u_1 u_2)

A graded version of NonUnitalNonAssocSemiring.

• mul : {i j : ι} → A iA jA (i + j)
• mul_zero : ∀ {i j : ι} (a : A i),

Multiplication from the right with any graded component's zero vanishes.

• zero_mul : ∀ {i j : ι} (b : A j),

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) =

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 =

Multiplication from the left between graded components distributes with respect to addition.

Instances
theorem DirectSum.GNonUnitalNonAssocSemiring.mul_zero {ι : Type u_1} {A : ιType u_2} [Add ι] [(i : ι) → AddCommMonoid (A i)] [self : ] {i : ι} {j : ι} (a : A i) :

Multiplication from the right with any graded component's zero vanishes.

theorem DirectSum.GNonUnitalNonAssocSemiring.zero_mul {ι : Type u_1} {A : ιType u_2} [Add ι] [(i : ι) → AddCommMonoid (A i)] [self : ] {i : ι} {j : ι} (b : A j) :

Multiplication from the left with any graded component's zero vanishes.

theorem DirectSum.GNonUnitalNonAssocSemiring.mul_add {ι : Type u_1} {A : ιType u_2} [Add ι] [(i : ι) → AddCommMonoid (A i)] [self : ] {i : ι} {j : ι} (a : A i) (b : A j) (c : A j) :

Multiplication from the right between graded components distributes with respect to addition.

theorem DirectSum.GNonUnitalNonAssocSemiring.add_mul {ι : Type u_1} {A : ιType u_2} [Add ι] [(i : ι) → AddCommMonoid (A i)] [self : ] {i : ι} {j : ι} (a : A i) (b : A i) (c : A j) :

Multiplication from the left between graded components distributes with respect to addition.

class DirectSum.GSemiring {ι : Type u_1} (A : ιType u_2) [] [(i : ι) → AddCommMonoid (A i)] extends , :
Type (max u_1 u_2)

A graded version of Semiring.

• mul : {i j : ι} → A iA jA (i + j)
• mul_zero : ∀ {i j : ι} (a : A i),
• zero_mul : ∀ {i j : ι} (b : A j),
• mul_add : ∀ {i j : ι} (a : A i) (b c : A j), GradedMonoid.GMul.mul a (b + c) =
• add_mul : ∀ {i j : ι} (a b : A i) (c : A j), GradedMonoid.GMul.mul (a + b) c =
• one : A 0
• one_mul : ∀ (a : ), 1 * a = a

Multiplication by one on the left is the identity

• mul_one : ∀ (a : ), a * 1 = a

Multiplication by one on the right is the identity

• mul_assoc : ∀ (a b c : ), a * b * c = a * (b * c)

Multiplication is associative

• gnpow : (n : ) → {i : ι} → A iA (n i)

Optional field to allow definitional control of natural powers

• gnpow_zero' : ∀ (a : ), GradedMonoid.mk (0 a.fst) (DirectSum.GSemiring.gnpow 0 a.snd) = 1

The zeroth power will yield 1

• gnpow_succ' : ∀ (n : ) (a : ), GradedMonoid.mk (n.succ a.fst) (DirectSum.GSemiring.gnpow n.succ a.snd) = n a.fst, ⟩ * a

Successor powers behave as expected

• natCast : A 0

The canonical map from ℕ to the zeroth component of a graded semiring.

• natCast_zero :

The canonical map from ℕ to a graded semiring respects zero.

• natCast_succ : ∀ (n : ), = + GradedMonoid.GOne.one

The canonical map from ℕ to a graded semiring respects successors.

Instances
theorem DirectSum.GSemiring.natCast_zero {ι : Type u_1} {A : ιType u_2} [] [(i : ι) → AddCommMonoid (A i)] [self : ] :

The canonical map from ℕ to a graded semiring respects zero.

theorem DirectSum.GSemiring.natCast_succ {ι : Type u_1} {A : ιType u_2} [] [(i : ι) → AddCommMonoid (A i)] [self : ] (n : ) :
= + GradedMonoid.GOne.one

The canonical map from ℕ to a graded semiring respects successors.

class DirectSum.GCommSemiring {ι : Type u_1} (A : ιType u_2) [] [(i : ι) → AddCommMonoid (A i)] extends :
Type (max u_1 u_2)

A graded version of CommSemiring.

• mul : {i j : ι} → A iA jA (i + j)
• mul_zero : ∀ {i j : ι} (a : A i),
• zero_mul : ∀ {i j : ι} (b : A j),
• mul_add : ∀ {i j : ι} (a : A i) (b c : A j), GradedMonoid.GMul.mul a (b + c) =
• add_mul : ∀ {i j : ι} (a b : A i) (c : A j), GradedMonoid.GMul.mul (a + b) c =
• one : A 0
• one_mul : ∀ (a : ), 1 * a = a
• mul_one : ∀ (a : ), a * 1 = a
• mul_assoc : ∀ (a b c : ), a * b * c = a * (b * c)
• gnpow : (n : ) → {i : ι} → A iA (n i)
• gnpow_zero' : ∀ (a : ), GradedMonoid.mk (0 a.fst) (DirectSum.GSemiring.gnpow 0 a.snd) = 1
• gnpow_succ' : ∀ (n : ) (a : ), GradedMonoid.mk (n.succ a.fst) (DirectSum.GSemiring.gnpow n.succ a.snd) = n a.fst, ⟩ * a
• natCast : A 0
• natCast_zero :
• natCast_succ : ∀ (n : ), = + GradedMonoid.GOne.one
• mul_comm : ∀ (a b : ), a * b = b * a

Multiplication is commutative

Instances
class DirectSum.GRing {ι : Type u_1} (A : ιType u_2) [] [(i : ι) → AddCommGroup (A i)] extends :
Type (max u_1 u_2)

A graded version of Ring.

• mul : {i j : ι} → A iA jA (i + j)
• mul_zero : ∀ {i j : ι} (a : A i),
• zero_mul : ∀ {i j : ι} (b : A j),
• mul_add : ∀ {i j : ι} (a : A i) (b c : A j), GradedMonoid.GMul.mul a (b + c) =
• add_mul : ∀ {i j : ι} (a b : A i) (c : A j), GradedMonoid.GMul.mul (a + b) c =
• one : A 0
• one_mul : ∀ (a : ), 1 * a = a
• mul_one : ∀ (a : ), a * 1 = a
• mul_assoc : ∀ (a b c : ), a * b * c = a * (b * c)
• gnpow : (n : ) → {i : ι} → A iA (n i)
• gnpow_zero' : ∀ (a : ), GradedMonoid.mk (0 a.fst) (DirectSum.GSemiring.gnpow 0 a.snd) = 1
• gnpow_succ' : ∀ (n : ) (a : ), GradedMonoid.mk (n.succ a.fst) (DirectSum.GSemiring.gnpow n.succ a.snd) = n a.fst, ⟩ * a
• natCast : A 0
• natCast_zero :
• natCast_succ : ∀ (n : ), = + GradedMonoid.GOne.one
• intCast : A 0

The canonical map from ℤ to the zeroth component of a graded ring.

• intCast_ofNat : ∀ (n : ),

The canonical map from ℤ to a graded ring extends the canonical map from ℕ to the underlying graded semiring.

• intCast_negSucc_ofNat : ∀ (n : ),

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
theorem DirectSum.GRing.intCast_ofNat {ι : Type u_1} {A : ιType u_2} [] [(i : ι) → AddCommGroup (A i)] [self : ] (n : ) :

The canonical map from ℤ to a graded ring extends the canonical map from ℕ to the underlying graded semiring.

theorem DirectSum.GRing.intCast_negSucc_ofNat {ι : Type u_1} {A : ιType u_2} [] [(i : ι) → AddCommGroup (A i)] [self : ] (n : ) :

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.

class DirectSum.GCommRing {ι : Type u_1} (A : ιType u_2) [] [(i : ι) → AddCommGroup (A i)] extends :
Type (max u_1 u_2)

A graded version of CommRing.

• mul : {i j : ι} → A iA jA (i + j)
• mul_zero : ∀ {i j : ι} (a : A i),
• zero_mul : ∀ {i j : ι} (b : A j),
• mul_add : ∀ {i j : ι} (a : A i) (b c : A j), GradedMonoid.GMul.mul a (b + c) =
• add_mul : ∀ {i j : ι} (a b : A i) (c : A j), GradedMonoid.GMul.mul (a + b) c =
• one : A 0
• one_mul : ∀ (a : ), 1 * a = a
• mul_one : ∀ (a : ), a * 1 = a
• mul_assoc : ∀ (a b c : ), a * b * c = a * (b * c)
• gnpow : (n : ) → {i : ι} → A iA (n i)
• gnpow_zero' : ∀ (a : ), GradedMonoid.mk (0 a.fst) (DirectSum.GSemiring.gnpow 0 a.snd) = 1
• gnpow_succ' : ∀ (n : ) (a : ), GradedMonoid.mk (n.succ a.fst) (DirectSum.GSemiring.gnpow n.succ a.snd) = n a.fst, ⟩ * a
• natCast : A 0
• natCast_zero :
• natCast_succ : ∀ (n : ), = + GradedMonoid.GOne.one
• intCast : A 0
• intCast_ofNat : ∀ (n : ),
• intCast_negSucc_ofNat : ∀ (n : ),
• mul_comm : ∀ (a b : ), a * b = b * a

Multiplication is commutative

Instances
theorem DirectSum.of_eq_of_gradedMonoid_eq {ι : Type u_1} [] {A : ιType u_2} [(i : ι) → AddCommMonoid (A i)] {i : ι} {j : ι} {a : A i} {b : A j} (h : = ) :
(DirectSum.of A i) a = (DirectSum.of A j) b

Instances for ⨁ i, A i#

instance DirectSum.instOne {ι : Type u_1} [] (A : ιType u_2) [Zero ι] [(i : ι) → AddCommMonoid (A i)] :
One (DirectSum ι fun (i : ι) => A i)
Equations
theorem DirectSum.one_def {ι : Type u_1} [] (A : ιType u_2) [Zero ι] [(i : ι) → AddCommMonoid (A i)] :
1 = (DirectSum.of A 0) GradedMonoid.GOne.one
@[simp]
theorem DirectSum.gMulHom_apply_apply {ι : Type u_1} (A : ιType u_2) [Add ι] [(i : ι) → AddCommMonoid (A i)] {i : ι} {j : ι} (a : A i) (b : A j) :
( a) b =
def DirectSum.gMulHom {ι : Type u_1} (A : ιType u_2) [Add ι] [(i : ι) → AddCommMonoid (A i)] {i : ι} {j : ι} :
A i →+ A j →+ A (i + j)

The piecewise multiplication from the Mul instance, as a bundled homomorphism.

Equations
• = { toFun := fun (a : A i) => { toFun := fun (b : A j) => , map_zero' := , map_add' := }, map_zero' := , map_add' := }
Instances For
@[reducible]
def DirectSum.mulHom {ι : Type u_1} [] (A : ιType u_2) [Add ι] [(i : ι) → AddCommMonoid (A i)] :
(DirectSum ι fun (i : ι) => A i) →+ (DirectSum ι fun (i : ι) => A i) →+ DirectSum ι fun (i : ι) => A i

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
instance DirectSum.instMul {ι : Type u_1} [] (A : ιType u_2) [Add ι] [(i : ι) → AddCommMonoid (A i)] :
Mul (DirectSum ι fun (i : ι) => A i)
Equations
• = { mul := fun (a b : DirectSum ι fun (i : ι) => A i) => ( a) b }
instance DirectSum.instNonUnitalNonAssocSemiring {ι : Type u_1} [] (A : ιType u_2) [Add ι] [(i : ι) → AddCommMonoid (A i)] :
NonUnitalNonAssocSemiring (DirectSum ι fun (i : ι) => A i)
Equations
• = let __src := inferInstance;
theorem DirectSum.mulHom_apply {ι : Type u_1} [] {A : ιType u_2} [Add ι] [(i : ι) → AddCommMonoid (A i)] (a : DirectSum ι fun (i : ι) => A i) (b : DirectSum ι fun (i : ι) => A i) :
( a) b = a * b
theorem DirectSum.mulHom_of_of {ι : Type u_1} [] {A : ιType u_2} [Add ι] [(i : ι) → AddCommMonoid (A i)] {i : ι} {j : ι} (a : A i) (b : A j) :
( ((DirectSum.of A i) a)) ((DirectSum.of A j) b) = (DirectSum.of A (i + j))
theorem DirectSum.of_mul_of {ι : Type u_1} [] {A : ιType u_2} [Add ι] [(i : ι) → AddCommMonoid (A i)] {i : ι} {j : ι} (a : A i) (b : A j) :
(DirectSum.of A i) a * (DirectSum.of A j) b = (DirectSum.of A (i + j))
instance DirectSum.instNatCast {ι : Type u_1} [] (A : ιType u_2) [(i : ι) → AddCommMonoid (A i)] [] :
NatCast (DirectSum ι fun (i : ι) => A i)
Equations
instance DirectSum.semiring {ι : Type u_1} [] (A : ιType u_2) [(i : ι) → AddCommMonoid (A i)] [] :
Semiring (DirectSum ι fun (i : ι) => A i)

The Semiring structure derived from GSemiring A.

Equations
• = let __src := inferInstance; Semiring.mk npowRec
theorem DirectSum.ofPow {ι : Type u_1} [] (A : ιType u_2) [(i : ι) → AddCommMonoid (A i)] [] {i : ι} (a : A i) (n : ) :
(DirectSum.of A i) a ^ n = (DirectSum.of A (n i))
theorem DirectSum.ofList_dProd {ι : Type u_1} [] (A : ιType u_2) [(i : ι) → AddCommMonoid (A i)] [] {α : Type u_3} (l : List α) (fι : αι) (fA : (a : α) → A ( a)) :
(DirectSum.of A (l.dProdIndex )) (l.dProd fA) = (List.map (fun (a : α) => (DirectSum.of A ( a)) (fA a)) l).prod
theorem DirectSum.list_prod_ofFn_of_eq_dProd {ι : Type u_1} [] (A : ιType u_2) [(i : ι) → AddCommMonoid (A i)] [] (n : ) (fι : Fin nι) (fA : (a : Fin n) → A ( a)) :
(List.ofFn fun (a : Fin n) => (DirectSum.of A ( a)) (fA a)).prod = (DirectSum.of A (.dProdIndex )) (.dProd fA)
theorem DirectSum.mul_eq_dfinsupp_sum {ι : Type u_1} [] (A : ιType u_2) [(i : ι) → AddCommMonoid (A i)] [] [(i : ι) → (x : A i) → Decidable (x 0)] (a : DirectSum ι fun (i : ι) => A i) (a' : DirectSum ι fun (i : ι) => A i) :
a * a' = DFinsupp.sum a fun (i : ι) (ai : A i) => DFinsupp.sum a' fun (j : ι) (aj : A j) => (DirectSum.of A (i + j)) (GradedMonoid.GMul.mul ai aj)
theorem DirectSum.mul_eq_sum_support_ghas_mul {ι : Type u_1} [] (A : ιType u_2) [(i : ι) → AddCommMonoid (A i)] [] [(i : ι) → (x : A i) → Decidable (x 0)] (a : DirectSum ι fun (i : ι) => A i) (a' : DirectSum ι fun (i : ι) => A i) :
a * a' = ij, (DirectSum.of A (ij.1 + ij.2)) (GradedMonoid.GMul.mul (a ij.1) (a' ij.2))

A heavily unfolded version of the definition of multiplication

instance DirectSum.commSemiring {ι : Type u_1} [] (A : ιType u_2) [(i : ι) → AddCommMonoid (A i)] [] :
CommSemiring (DirectSum ι fun (i : ι) => A i)

The CommSemiring structure derived from GCommSemiring A.

Equations
• = let __src := ;
instance DirectSum.nonAssocRing {ι : Type u_1} [] (A : ιType u_2) [(i : ι) → AddCommGroup (A i)] [Add ι] :
NonUnitalNonAssocRing (DirectSum ι fun (i : ι) => A i)

The Ring derived from GSemiring A.

Equations
• = let __src := inferInstance; let __src_1 := inferInstance;
instance DirectSum.ring {ι : Type u_1} [] (A : ιType u_2) [(i : ι) → AddCommGroup (A i)] [] [] :
Ring (DirectSum ι fun (i : ι) => A i)

The Ring derived from GSemiring A.

Equations
• = let __src := ; let __src_1 := inferInstance; Ring.mk SubNegMonoid.zsmul
instance DirectSum.commRing {ι : Type u_1} [] (A : ιType u_2) [(i : ι) → AddCommGroup (A i)] [] :
CommRing (DirectSum ι fun (i : ι) => A i)

The CommRing derived from GCommSemiring A.

Equations
• = let __src := ; let __src_1 := ;

Instances for A 0#

The various G* instances are enough to promote the AddCommMonoid (A 0) structure to various types of multiplicative structure.

@[simp]
theorem DirectSum.of_zero_one {ι : Type u_1} [] (A : ιType u_2) [Zero ι] [(i : ι) → AddCommMonoid (A i)] :
(DirectSum.of A 0) 1 = 1
@[simp]
theorem DirectSum.of_zero_smul {ι : Type u_1} [] (A : ιType u_2) [] [(i : ι) → AddCommMonoid (A i)] {i : ι} (a : A 0) (b : A i) :
(DirectSum.of A i) (a b) = (DirectSum.of A 0) a * (DirectSum.of A i) b
@[simp]
theorem DirectSum.of_zero_mul {ι : Type u_1} [] (A : ιType u_2) [] [(i : ι) → AddCommMonoid (A i)] (a : A 0) (b : A 0) :
(DirectSum.of A 0) (a * b) = (DirectSum.of A 0) a * (DirectSum.of A 0) b
instance DirectSum.GradeZero.nonUnitalNonAssocSemiring {ι : Type u_1} [] (A : ιType u_2) [] [(i : ι) → AddCommMonoid (A i)] :
Equations
instance DirectSum.GradeZero.smulWithZero {ι : Type u_1} [] (A : ιType u_2) [] [(i : ι) → AddCommMonoid (A i)] (i : ι) :
SMulWithZero (A 0) (A i)
Equations
@[simp]
theorem DirectSum.of_zero_pow {ι : Type u_1} [] (A : ιType u_2) [(i : ι) → AddCommMonoid (A i)] [] (a : A 0) (n : ) :
(DirectSum.of A 0) (a ^ n) = (DirectSum.of A 0) a ^ n
instance DirectSum.instNatCastOfNat {ι : Type u_1} (A : ιType u_2) [(i : ι) → AddCommMonoid (A i)] [] :
NatCast (A 0)
Equations
• = { natCast := DirectSum.GSemiring.natCast }
@[simp]
theorem DirectSum.of_natCast {ι : Type u_1} [] (A : ιType u_2) [(i : ι) → AddCommMonoid (A i)] [] (n : ) :
(DirectSum.of A 0) n = n
@[simp]
theorem DirectSum.of_zero_ofNat {ι : Type u_1} [] (A : ιType u_2) [(i : ι) → AddCommMonoid (A i)] [] (n : ) [n.AtLeastTwo] :
instance DirectSum.GradeZero.semiring {ι : Type u_1} [] (A : ιType u_2) [(i : ι) → AddCommMonoid (A i)] [] :
Semiring (A 0)

The Semiring structure derived from GSemiring A.

Equations
def DirectSum.ofZeroRingHom {ι : Type u_1} [] (A : ιType u_2) [(i : ι) → AddCommMonoid (A i)] [] :
A 0 →+* DirectSum ι fun (i : ι) => A i

of A 0 is a RingHom, using the DirectSum.GradeZero.semiring structure.

Equations
• = let __src := ; { toFun := (↑__src).toFun, map_one' := , map_mul' := , map_zero' := , map_add' := }
Instances For
instance DirectSum.GradeZero.module {ι : Type u_1} [] (A : ιType u_2) [(i : ι) → AddCommMonoid (A i)] [] {i : ι} :
Module (A 0) (A i)

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
instance DirectSum.GradeZero.commSemiring {ι : Type u_1} [] (A : ιType u_2) [(i : ι) → AddCommMonoid (A i)] [] :

The CommSemiring structure derived from GCommSemiring A.

Equations
instance DirectSum.GradeZero.nonUnitalNonAssocRing {ι : Type u_1} [] (A : ιType u_2) [(i : ι) → AddCommGroup (A i)] [] :

The NonUnitalNonAssocRing derived from GNonUnitalNonAssocSemiring A.

Equations
instance DirectSum.instIntCastOfNat {ι : Type u_1} (A : ιType u_2) [(i : ι) → AddCommGroup (A i)] [] [] :
IntCast (A 0)
Equations
• = { intCast := DirectSum.GRing.intCast }
@[simp]
theorem DirectSum.of_intCast {ι : Type u_1} [] (A : ιType u_2) [(i : ι) → AddCommGroup (A i)] [] [] (n : ) :
(DirectSum.of A 0) n = n
instance DirectSum.GradeZero.ring {ι : Type u_1} [] (A : ιType u_2) [(i : ι) → AddCommGroup (A i)] [] [] :
Ring (A 0)

The Ring derived from GSemiring A.

Equations
instance DirectSum.GradeZero.commRing {ι : Type u_1} [] (A : ιType u_2) [(i : ι) → AddCommGroup (A i)] [] :
CommRing (A 0)

The CommRing derived from GCommSemiring A.

Equations
theorem DirectSum.ringHom_ext'_iff {ι : Type u_1} [] {A : ιType u_2} {R : Type u_3} [(i : ι) → AddCommMonoid (A i)] [] [] {F : (DirectSum ι fun (i : ι) => A i) →+* R} {G : (DirectSum ι fun (i : ι) => A i) →+* R} :
F = G ∀ (i : ι), (↑F).comp (DirectSum.of A i) = (↑G).comp (DirectSum.of A i)
theorem DirectSum.ringHom_ext' {ι : Type u_1} [] {A : ιType u_2} {R : Type u_3} [(i : ι) → AddCommMonoid (A i)] [] [] ⦃F : (DirectSum ι fun (i : ι) => A i) →+* R ⦃G : (DirectSum ι fun (i : ι) => A i) →+* R (h : ∀ (i : ι), (↑F).comp (DirectSum.of A i) = (↑G).comp (DirectSum.of A i)) :
F = G

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].

theorem DirectSum.ringHom_ext {ι : Type u_1} [] {A : ιType u_2} {R : Type u_3} [(i : ι) → AddCommMonoid (A i)] [] [] ⦃f : (DirectSum ι fun (i : ι) => A i) →+* R ⦃g : (DirectSum ι fun (i : ι) => A i) →+* R (h : ∀ (i : ι) (x : A i), f ((DirectSum.of A i) x) = g ((DirectSum.of A i) x)) :
f = g

Two RingHoms out of a direct sum are equal if they agree on the generators.

@[simp]
theorem DirectSum.toSemiring_apply {ι : Type u_1} [] {A : ιType u_2} {R : Type u_3} [(i : ι) → AddCommMonoid (A i)] [] [] (f : (i : ι) → A i →+ R) (hone : (f 0) GradedMonoid.GOne.one = 1) (hmul : ∀ {i j : ι} (ai : A i) (aj : A j), (f (i + j)) (GradedMonoid.GMul.mul ai aj) = (f i) ai * (f j) aj) (a : DirectSum ι fun (i : ι) => A i) :
(DirectSum.toSemiring f hone hmul) a =
def DirectSum.toSemiring {ι : Type u_1} [] {A : ιType u_2} {R : Type u_3} [(i : ι) → AddCommMonoid (A i)] [] [] (f : (i : ι) → A i →+ R) (hone : (f 0) GradedMonoid.GOne.one = 1) (hmul : ∀ {i j : ι} (ai : A i) (aj : A j), (f (i + j)) (GradedMonoid.GMul.mul ai aj) = (f i) ai * (f j) aj) :
(DirectSum ι fun (i : ι) => A i) →+* R

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 := ; { toFun := , map_one' := , map_mul' := , map_zero' := , map_add' := }
Instances For
theorem DirectSum.toSemiring_of {ι : Type u_1} [] {A : ιType u_2} {R : Type u_3} [(i : ι) → AddCommMonoid (A i)] [] [] (f : (i : ι) → A i →+ R) (hone : (f 0) GradedMonoid.GOne.one = 1) (hmul : ∀ {i j : ι} (ai : A i) (aj : A j), (f (i + j)) (GradedMonoid.GMul.mul ai aj) = (f i) ai * (f j) aj) (i : ι) (x : A i) :
(DirectSum.toSemiring f hone hmul) ((DirectSum.of A i) x) = (f i) x
@[simp]
theorem DirectSum.toSemiring_coe_addMonoidHom {ι : Type u_1} [] {A : ιType u_2} {R : Type u_3} [(i : ι) → AddCommMonoid (A i)] [] [] (f : (i : ι) → A i →+ R) (hone : (f 0) GradedMonoid.GOne.one = 1) (hmul : ∀ {i j : ι} (ai : A i) (aj : A j), (f (i + j)) (GradedMonoid.GMul.mul ai aj) = (f i) ai * (f j) aj) :
(DirectSum.toSemiring f hone hmul) =
@[simp]
theorem DirectSum.liftRingHom_symm_apply_coe {ι : Type u_1} [] {A : ιType u_2} {R : Type u_3} [(i : ι) → AddCommMonoid (A i)] [] [] (F : (DirectSum ι fun (i : ι) => A i) →+* R) {i : ι} :
(DirectSum.liftRingHom.symm F) = (↑F).comp (DirectSum.of A i)
@[simp]
theorem DirectSum.liftRingHom_apply {ι : Type u_1} [] {A : ιType u_2} {R : Type u_3} [(i : ι) → AddCommMonoid (A i)] [] [] (f : { f : {i : ι} → A i →+ R // f GradedMonoid.GOne.one = 1 ∀ {i j : ι} (ai : A i) (aj : A j), f (GradedMonoid.GMul.mul ai aj) = f ai * f aj }) :
DirectSum.liftRingHom f = DirectSum.toSemiring (fun (x : ι) => f)
def DirectSum.liftRingHom {ι : Type u_1} [] {A : ιType u_2} {R : Type u_3} [(i : ι) → AddCommMonoid (A i)] [] [] :
{ f : {i : ι} → A i →+ R // f GradedMonoid.GOne.one = 1 ∀ {i j : ι} (ai : A i) (aj : A j), f (GradedMonoid.GMul.mul ai aj) = f ai * f aj } ((DirectSum ι fun (i : ι) => A i) →+* R)

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.

Equations
instance Semiring.directSumGSemiring (ι : Type u_1) {R : Type u_2} [] [] :
DirectSum.GSemiring fun (x : ι) => R

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.
instance CommSemiring.directSumGCommSemiring (ι : Type u_1) {R : Type u_2} [] [] :
DirectSum.GCommSemiring fun (x : ι) => R

A direct sum of copies of a CommSemiring inherits the commutative multiplication structure.

Equations
• = let __src := ; let __src_1 := ;