# Additively-graded algebra structures on ⨁ i, A i#

This file provides R-algebra structures on external direct sums of R-modules.

Recall that if A i are a family of AddCommMonoids indexed by an AddMonoid, then an instance of DirectSum.GMonoid A is a multiplication A i → A j → A (i + j) giving ⨁ i, A i the structure of a semiring. In this file, we introduce the DirectSum.GAlgebra R A class for the case where all A i are R-modules. This is the extra structure needed to promote ⨁ i, A i to an R-algebra.

## Main definitions #

• DirectSum.GAlgebra R A, the typeclass.
• DirectSum.toAlgebra extends DirectSum.toSemiring to produce an AlgHom.
class DirectSum.GAlgebra {ι : Type uι} (R : Type uR) (A : ιType uA) [] [(i : ι) → AddCommMonoid (A i)] [(i : ι) → Module R (A i)] [] :
Type (max uA uR)

A graded version of Algebra. An instance of DirectSum.GAlgebra R A endows (⨁ i, A i) with an R-algebra structure.

Instances
theorem DirectSum.GAlgebra.map_one {ι : Type uι} {R : Type uR} {A : ιType uA} [] [(i : ι) → AddCommMonoid (A i)] [(i : ι) → Module R (A i)] [] [self : ] :
theorem DirectSum.GAlgebra.map_mul {ι : Type uι} {R : Type uR} {A : ιType uA} [] [(i : ι) → AddCommMonoid (A i)] [(i : ι) → Module R (A i)] [] [self : ] (r : R) (s : R) :
theorem DirectSum.GAlgebra.commutes {ι : Type uι} {R : Type uR} {A : ιType uA} [] [(i : ι) → AddCommMonoid (A i)] [(i : ι) → Module R (A i)] [] [self : ] (r : R) (x : ) :
GradedMonoid.mk 0 (DirectSum.GAlgebra.toFun r) * x = x * GradedMonoid.mk 0 (DirectSum.GAlgebra.toFun r)
theorem DirectSum.GAlgebra.smul_def {ι : Type uι} {R : Type uR} {A : ιType uA} [] [(i : ι) → AddCommMonoid (A i)] [(i : ι) → Module R (A i)] [] [self : ] (r : R) (x : ) :
r x = GradedMonoid.mk 0 (DirectSum.GAlgebra.toFun r) * x
instance GradedMonoid.smulCommClass_right {ι : Type uι} (R : Type uR) (A : ιType uA) [] [(i : ι) → AddCommMonoid (A i)] [(i : ι) → Module R (A i)] [] [] :
Equations
• =
instance GradedMonoid.isScalarTower_right {ι : Type uι} (R : Type uR) (A : ιType uA) [] [(i : ι) → AddCommMonoid (A i)] [(i : ι) → Module R (A i)] [] [] :
Equations
• =
instance DirectSum.instAlgebra {ι : Type uι} (R : Type uR) (A : ιType uA) [] [(i : ι) → AddCommMonoid (A i)] [(i : ι) → Module R (A i)] [] [] [] :
Algebra R (DirectSum ι fun (i : ι) => A i)
Equations
• = Algebra.mk { toFun := ((DirectSum.of A 0).comp DirectSum.GAlgebra.toFun), map_one' := , map_mul' := , map_zero' := , map_add' := }
theorem DirectSum.algebraMap_apply {ι : Type uι} (R : Type uR) (A : ιType uA) [] [(i : ι) → AddCommMonoid (A i)] [(i : ι) → Module R (A i)] [] [] [] (r : R) :
(algebraMap R (DirectSum ι fun (i : ι) => A i)) r = (DirectSum.of A 0) (DirectSum.GAlgebra.toFun r)
theorem DirectSum.algebraMap_toAddMonoid_hom {ι : Type uι} (R : Type uR) (A : ιType uA) [] [(i : ι) → AddCommMonoid (A i)] [(i : ι) → Module R (A i)] [] [] [] :
(algebraMap R (DirectSum ι fun (i : ι) => A i)) = (DirectSum.of A 0).comp DirectSum.GAlgebra.toFun
@[simp]
theorem DirectSum.toAlgebra_apply {ι : Type uι} (R : Type uR) (A : ιType uA) {B : Type uB} [] [(i : ι) → AddCommMonoid (A i)] [(i : ι) → Module R (A i)] [] [] [] [Algebra R B] [] (f : (i : ι) → A i →ₗ[R] B) (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.toAlgebra R A f hone hmul) a = (DirectSum.toSemiring (fun (i : ι) => (f i).toAddMonoidHom) hone hmul) a
def DirectSum.toAlgebra {ι : Type uι} (R : Type uR) (A : ιType uA) {B : Type uB} [] [(i : ι) → AddCommMonoid (A i)] [(i : ι) → Module R (A i)] [] [] [] [Algebra R B] [] (f : (i : ι) → A i →ₗ[R] B) (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] B

A family of LinearMaps preserving DirectSum.GOne.one and DirectSum.GMul.mul describes an AlgHom on ⨁ i, A i. This is a stronger version of DirectSum.toSemiring.

Of particular interest is the case when A i are bundled subojects, f is the family of coercions such as Submodule.subtype (A i), and the [GMonoid A] structure originates from DirectSum.GMonoid.ofAddSubmodules, in which case the proofs about GOne and GMul can be discharged by rfl.

Equations
• One or more equations did not get rendered due to their size.
Instances For
theorem DirectSum.algHom_ext'_iff {ι : Type uι} {R : Type uR} {A : ιType uA} {B : Type uB} [] [(i : ι) → AddCommMonoid (A i)] [(i : ι) → Module R (A i)] [] [] [] [Algebra R B] [] {f : (DirectSum ι fun (i : ι) => A i) →ₐ[R] B} {g : (DirectSum ι fun (i : ι) => A i) →ₐ[R] B} :
f = g ∀ (i : ι), f.toLinearMap ∘ₗ DirectSum.lof R ι A i = g.toLinearMap ∘ₗ DirectSum.lof R ι A i
theorem DirectSum.algHom_ext' {ι : Type uι} (R : Type uR) (A : ιType uA) {B : Type uB} [] [(i : ι) → AddCommMonoid (A i)] [(i : ι) → Module R (A i)] [] [] [] [Algebra R B] [] ⦃f : (DirectSum ι fun (i : ι) => A i) →ₐ[R] B ⦃g : (DirectSum ι fun (i : ι) => A i) →ₐ[R] B (h : ∀ (i : ι), f.toLinearMap ∘ₗ DirectSum.lof R ι A i = g.toLinearMap ∘ₗ DirectSum.lof R ι A i) :
f = g

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

See note [partially-applied ext lemmas].

theorem DirectSum.algHom_ext {ι : Type uι} (R : Type uR) (A : ιType uA) {B : Type uB} [] [(i : ι) → AddCommMonoid (A i)] [(i : ι) → Module R (A i)] [] [] [] [Algebra R B] [] ⦃f : (DirectSum ι fun (i : ι) => A i) →ₐ[R] B ⦃g : (DirectSum ι fun (i : ι) => A i) →ₐ[R] B (h : ∀ (i : ι) (x : A i), f ((DirectSum.of A i) x) = g ((DirectSum.of A i) x)) :
f = g
@[simp]
theorem DirectSum.gMulLHom_apply_apply {ι : Type uι} (R : Type uR) (A : ιType uA) [] [(i : ι) → AddCommMonoid (A i)] [(i : ι) → Module R (A i)] [] [] {i : ι} {j : ι} (a : A i) (b : A j) :
( a) b =
def DirectSum.gMulLHom {ι : Type uι} (R : Type uR) (A : ιType uA) [] [(i : ι) → AddCommMonoid (A i)] [(i : ι) → Module R (A i)] [] [] {i : ι} {j : ι} :
A i →ₗ[R] A j →ₗ[R] A (i + j)

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

This is the graded version of LinearMap.mul, and the linear version of DirectSum.gMulHom

Equations
• = { toFun := fun (a : A i) => { toFun := fun (b : A j) => , map_add' := , map_smul' := }, map_add' := , map_smul' := }
Instances For

### Concrete instances #

@[simp]
theorem Algebra.directSumGAlgebra_toFun_apply {ι : Type uι} {R : Type u_1} {A : Type u_2} [] [] [] [Algebra R A] :
∀ (a : R), DirectSum.GAlgebra.toFun a = (↑(algebraMap R A)).toFun a
instance Algebra.directSumGAlgebra {ι : Type uι} {R : Type u_1} {A : Type u_2} [] [] [] [Algebra R A] :
DirectSum.GAlgebra R fun (x : ι) => A

A direct sum of copies of an Algebra inherits the algebra structure.

Equations
• Algebra.directSumGAlgebra = { toFun := (algebraMap R A).toAddMonoidHom, map_one := , map_mul := , commutes := , smul_def := }