Documentation

Mathlib.Algebra.GradedMonoid

Additively-graded multiplicative structures #

This module provides a set of heterogeneous typeclasses for defining a multiplicative structure over the sigma type GradedMonoid A such that (*) : A i → A j → A (i + j); that is to say, A forms an additively-graded monoid. The typeclasses are:

These respectively imbue:

the base type A 0 with:

and the ith grade A i with A 0-actions () defined as left-multiplication:

For now, these typeclasses are primarily used in the construction of DirectSum.Ring and the rest of that file.

Dependent graded products #

This also introduces List.dProd, which takes the (possibly non-commutative) product of a list of graded elements of type A i. This definition primarily exist to allow GradedMonoid.mk and DirectSum.of to be pulled outside a product, such as in GradedMonoid.mk_list_dProd and DirectSum.of_list_dProd.

Internally graded monoids #

In addition to the above typeclasses, in the most frequent case when A is an indexed collection of SetLike subobjects (such as AddSubmonoids, AddSubgroups, or Submodules), this file provides the Prop typeclasses:

which respectively provide the API lemmas

Strictly this last class is unnecessary as it has no fields not present in its parents, but it is included for convenience. Note that there is no need for SetLike.GradedRing or similar, as all the information it would contain is already supplied by GradedMonoid when A is a collection of objects satisfying AddSubmonoidClass such as Submodules. These constructions are explored in Algebra.DirectSum.Internal.

This file also defines:

Tags #

graded monoid

def GradedMonoid {ι : Type u_1} (A : ιType u_2) :
Type (max u_1 u_2)

A type alias of sigma types for graded monoids.

Equations
def GradedMonoid.mk {ι : Type u_1} {A : ιType u_2} (i : ι) :
A iGradedMonoid A

Construct an element of a graded monoid.

Equations

Actions #

instance GradedMonoid.instSMul {ι : Type u_1} {α : Type u_3} {A : ιType u_2} [(i : ι) → SMul α (A i)] :

If R acts on each A i, then it acts on GradedMonoid A via the .2 projection.

Equations
@[simp]
theorem GradedMonoid.fst_smul {ι : Type u_1} {α : Type u_3} {A : ιType u_2} [(i : ι) → SMul α (A i)] (a : α) (x : GradedMonoid A) :
(a x).fst = x.fst
@[simp]
theorem GradedMonoid.snd_smul {ι : Type u_1} {α : Type u_3} {A : ιType u_2} [(i : ι) → SMul α (A i)] (a : α) (x : GradedMonoid A) :
(a x).snd = a x.snd
theorem GradedMonoid.smul_mk {ι : Type u_1} {α : Type u_3} {A : ιType u_2} [(i : ι) → SMul α (A i)] {i : ι} (c : α) (a : A i) :
c mk i a = mk i (c a)
instance GradedMonoid.instSMulCommClass {ι : Type u_1} {α : Type u_3} {β : Type u_4} {A : ιType u_2} [(i : ι) → SMul α (A i)] [(i : ι) → SMul β (A i)] [∀ (i : ι), SMulCommClass α β (A i)] :
instance GradedMonoid.instIsScalarTower {ι : Type u_1} {α : Type u_3} {β : Type u_4} {A : ιType u_2} [SMul α β] [(i : ι) → SMul α (A i)] [(i : ι) → SMul β (A i)] [∀ (i : ι), IsScalarTower α β (A i)] :
instance GradedMonoid.instMulAction {ι : Type u_1} {α : Type u_3} {A : ιType u_2} [Monoid α] [(i : ι) → MulAction α (A i)] :
Equations

Typeclasses #

class GradedMonoid.GOne {ι : Type u_1} (A : ιType u_2) [Zero ι] :
Type u_2

A graded version of One, which must be of grade 0.

  • one : A 0

    The term one of grade 0

Instances
    instance GradedMonoid.GOne.toOne {ι : Type u_1} (A : ιType u_2) [Zero ι] [GOne A] :

    GOne implies One (GradedMonoid A)

    Equations
    @[simp]
    theorem GradedMonoid.fst_one {ι : Type u_1} (A : ιType u_2) [Zero ι] [GOne A] :
    @[simp]
    theorem GradedMonoid.snd_one {ι : Type u_1} (A : ιType u_2) [Zero ι] [GOne A] :
    class GradedMonoid.GMul {ι : Type u_1} (A : ιType u_2) [Add ι] :
    Type (max u_1 u_2)

    A graded version of Mul. Multiplication combines grades additively, like AddMonoidAlgebra.

    • mul {i j : ι} : A iA jA (i + j)

      The homogeneous multiplication map mul

    Instances
      instance GradedMonoid.GMul.toMul {ι : Type u_1} (A : ιType u_2) [Add ι] [GMul A] :

      GMul implies Mul (GradedMonoid A).

      Equations
      @[simp]
      theorem GradedMonoid.fst_mul {ι : Type u_1} (A : ιType u_2) [Add ι] [GMul A] (x y : GradedMonoid A) :
      (x * y).fst = x.fst + y.fst
      @[simp]
      theorem GradedMonoid.snd_mul {ι : Type u_1} (A : ιType u_2) [Add ι] [GMul A] (x y : GradedMonoid A) :
      (x * y).snd = GMul.mul x.snd y.snd
      theorem GradedMonoid.mk_mul_mk {ι : Type u_1} (A : ιType u_2) [Add ι] [GMul A] {i j : ι} (a : A i) (b : A j) :
      mk i a * mk j b = mk (i + j) (GMul.mul a b)
      def GradedMonoid.GMonoid.gnpowRec {ι : Type u_1} {A : ιType u_2} [AddMonoid ι] [GMul A] [GOne A] (n : ) {i : ι} :
      A iA (n i)

      A default implementation of power on a graded monoid, like npowRec. GMonoid.gnpow should be used instead.

      Equations
      @[simp]
      theorem GradedMonoid.GMonoid.gnpowRec_zero {ι : Type u_1} {A : ιType u_2} [AddMonoid ι] [GMul A] [GOne A] (a : GradedMonoid A) :
      @[simp]
      theorem GradedMonoid.GMonoid.gnpowRec_succ {ι : Type u_1} {A : ιType u_2} [AddMonoid ι] [GMul A] [GOne A] (n : ) (a : GradedMonoid A) :

      A tactic to for use as an optional value for GMonoid.gnpow_zero'.

      Equations
      • One or more equations did not get rendered due to their size.

      A tactic to for use as an optional value for GMonoid.gnpow_succ'.

      Equations
      • One or more equations did not get rendered due to their size.
      class GradedMonoid.GMonoid {ι : Type u_1} (A : ιType u_2) [AddMonoid ι] extends GradedMonoid.GMul A, GradedMonoid.GOne A :
      Type (max u_1 u_2)

      A graded version of Monoid

      Like Monoid.npow, this has an optional GMonoid.gnpow field to allow definitional control of natural powers of a graded monoid.

      Instances
        instance GradedMonoid.GMonoid.toMonoid {ι : Type u_1} (A : ιType u_2) [AddMonoid ι] [GMonoid A] :

        GMonoid implies a Monoid (GradedMonoid A).

        Equations
        • One or more equations did not get rendered due to their size.
        @[simp]
        theorem GradedMonoid.fst_pow {ι : Type u_1} (A : ιType u_2) [AddMonoid ι] [GMonoid A] (x : GradedMonoid A) (n : ) :
        (x ^ n).fst = n x.fst
        @[simp]
        theorem GradedMonoid.snd_pow {ι : Type u_1} (A : ιType u_2) [AddMonoid ι] [GMonoid A] (x : GradedMonoid A) (n : ) :
        (x ^ n).snd = GMonoid.gnpow n x.snd
        theorem GradedMonoid.mk_pow {ι : Type u_1} (A : ιType u_2) [AddMonoid ι] [GMonoid A] {i : ι} (a : A i) (n : ) :
        mk i a ^ n = mk (n i) (GMonoid.gnpow n a)
        class GradedMonoid.GCommMonoid {ι : Type u_1} (A : ιType u_2) [AddCommMonoid ι] extends GradedMonoid.GMonoid A :
        Type (max u_1 u_2)

        A graded version of CommMonoid.

        Instances

          GCommMonoid implies a CommMonoid (GradedMonoid A), although this is only used as an instance locally to define notation in gmonoid and similar typeclasses.

          Equations

          Instances for A 0 #

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

          instance GradedMonoid.GradeZero.one {ι : Type u_1} (A : ιType u_2) [Zero ι] [GOne A] :
          One (A 0)

          1 : A 0 is the value provided in GOne.one.

          Equations
          instance GradedMonoid.GradeZero.smul {ι : Type u_1} (A : ιType u_2) [AddZeroClass ι] [GMul A] (i : ι) :
          SMul (A 0) (A i)

          (•) : A 0 → A i → A i is the value provided in GradedMonoid.GMul.mul, composed with an Eq.rec to turn A (0 + i) into A i.

          Equations
          instance GradedMonoid.GradeZero.mul {ι : Type u_1} (A : ιType u_2) [AddZeroClass ι] [GMul A] :
          Mul (A 0)

          (*) : A 0 → A 0 → A 0 is the value provided in GradedMonoid.GMul.mul, composed with an Eq.rec to turn A (0 + 0) into A 0.

          Equations
          @[simp]
          theorem GradedMonoid.mk_zero_smul {ι : Type u_1} {A : ιType u_2} [AddZeroClass ι] [GMul A] {i : ι} (a : A 0) (b : A i) :
          mk i (a b) = mk 0 a * mk i b
          theorem GradedMonoid.GradeZero.smul_eq_mul {ι : Type u_1} {A : ιType u_2} [AddZeroClass ι] [GMul A] (a b : A 0) :
          a b = a * b
          instance GradedMonoid.instNatPowOfNat {ι : Type u_1} (A : ιType u_2) [AddMonoid ι] [GMonoid A] :
          NatPow (A 0)
          Equations
          @[simp]
          theorem GradedMonoid.mk_zero_pow {ι : Type u_1} {A : ιType u_2} [AddMonoid ι] [GMonoid A] (a : A 0) (n : ) :
          mk 0 (a ^ n) = mk 0 a ^ n
          instance GradedMonoid.GradeZero.monoid {ι : Type u_1} (A : ιType u_2) [AddMonoid ι] [GMonoid A] :
          Monoid (A 0)

          The Monoid structure derived from GMonoid A.

          Equations
          instance GradedMonoid.GradeZero.commMonoid {ι : Type u_1} (A : ιType u_2) [AddCommMonoid ι] [GCommMonoid A] :

          The CommMonoid structure derived from GCommMonoid A.

          Equations
          def GradedMonoid.mkZeroMonoidHom {ι : Type u_1} (A : ιType u_2) [AddMonoid ι] [GMonoid A] :

          GradedMonoid.mk 0 is a MonoidHom, using the GradedMonoid.GradeZero.monoid structure.

          Equations
          instance GradedMonoid.GradeZero.mulAction {ι : Type u_1} (A : ιType u_2) [AddMonoid ι] [GMonoid A] {i : ι} :
          MulAction (A 0) (A i)

          Each grade A i derives an A 0-action structure from GMonoid A.

          Equations

          Dependent products of graded elements #

          def List.dProdIndex {ι : Type u_1} {α : Type u_2} [AddMonoid ι] (l : List α) ( : αι) :
          ι

          The index used by List.dProd. Propositionally this is equal to (l.map fι).Sum, but definitionally it needs to have a different form to avoid introducing Eq.recs in List.dProd.

          Equations
          @[simp]
          theorem List.dProdIndex_nil {ι : Type u_1} {α : Type u_2} [AddMonoid ι] ( : αι) :
          @[simp]
          theorem List.dProdIndex_cons {ι : Type u_1} {α : Type u_2} [AddMonoid ι] (a : α) (l : List α) ( : αι) :
          (a :: l).dProdIndex = a + l.dProdIndex
          theorem List.dProdIndex_eq_map_sum {ι : Type u_1} {α : Type u_2} [AddMonoid ι] (l : List α) ( : αι) :
          l.dProdIndex = (map l).sum
          def List.dProd {ι : Type u_1} {α : Type u_2} {A : ιType u_3} [AddMonoid ι] [GradedMonoid.GMonoid A] (l : List α) ( : αι) (fA : (a : α) → A ( a)) :
          A (l.dProdIndex )

          A dependent product for graded monoids represented by the indexed family of types A i. This is a dependent version of (l.map fA).prod.

          For a list l : List α, this computes the product of fA a over a, where each fA is of type A (fι a).

          Equations
          @[simp]
          theorem List.dProd_nil {ι : Type u_1} {α : Type u_2} {A : ιType u_3} [AddMonoid ι] [GradedMonoid.GMonoid A] ( : αι) (fA : (a : α) → A ( a)) :
          @[simp]
          theorem List.dProd_cons {ι : Type u_1} {α : Type u_2} {A : ιType u_3} [AddMonoid ι] [GradedMonoid.GMonoid A] ( : αι) (fA : (a : α) → A ( a)) (a : α) (l : List α) :
          (a :: l).dProd fA = GradedMonoid.GMul.mul (fA a) (l.dProd fA)
          theorem GradedMonoid.mk_list_dProd {ι : Type u_1} {α : Type u_2} {A : ιType u_3} [AddMonoid ι] [GMonoid A] (l : List α) ( : αι) (fA : (a : α) → A ( a)) :
          mk (l.dProdIndex ) (l.dProd fA) = (List.map (fun (a : α) => mk ( a) (fA a)) l).prod
          theorem GradedMonoid.list_prod_map_eq_dProd {ι : Type u_1} {α : Type u_2} {A : ιType u_3} [AddMonoid ι] [GMonoid A] (l : List α) (f : αGradedMonoid A) :
          (List.map f l).prod = mk (l.dProdIndex fun (i : α) => (f i).fst) (l.dProd (fun (i : α) => (f i).fst) fun (i : α) => (f i).snd)

          A variant of GradedMonoid.mk_list_dProd for rewriting in the other direction.

          theorem GradedMonoid.list_prod_ofFn_eq_dProd {ι : Type u_1} {A : ιType u_3} [AddMonoid ι] [GMonoid A] {n : } (f : Fin nGradedMonoid A) :
          (List.ofFn f).prod = mk ((List.finRange n).dProdIndex fun (i : Fin n) => (f i).fst) ((List.finRange n).dProd (fun (i : Fin n) => (f i).fst) fun (i : Fin n) => (f i).snd)

          Concrete instances #

          instance One.gOne (ι : Type u_1) {R : Type u_2} [Zero ι] [One R] :
          GradedMonoid.GOne fun (x : ι) => R
          Equations
          @[simp]
          theorem One.gOne_one (ι : Type u_1) {R : Type u_2} [Zero ι] [One R] :
          instance Mul.gMul (ι : Type u_1) {R : Type u_2} [Add ι] [Mul R] :
          GradedMonoid.GMul fun (x : ι) => R
          Equations
          @[simp]
          theorem Mul.gMul_mul (ι : Type u_1) {R : Type u_2} [Add ι] [Mul R] {i✝ j✝ : ι} (x y : R) :
          instance Monoid.gMonoid (ι : Type u_1) {R : Type u_2} [AddMonoid ι] [Monoid R] :
          GradedMonoid.GMonoid fun (x : ι) => R

          If all grades are the same type and themselves form a monoid, then there is a trivial grading structure.

          Equations
          • One or more equations did not get rendered due to their size.
          @[simp]
          theorem Monoid.gMonoid_gnpow (ι : Type u_1) {R : Type u_2} [AddMonoid ι] [Monoid R] (n : ) (x✝ : ι) (a : R) :
          instance CommMonoid.gCommMonoid (ι : Type u_1) {R : Type u_2} [AddCommMonoid ι] [CommMonoid R] :
          GradedMonoid.GCommMonoid fun (x : ι) => R

          If all grades are the same type and themselves form a commutative monoid, then there is a trivial grading structure.

          Equations
          @[simp]
          theorem List.dProd_monoid (ι : Type u_1) {R : Type u_2} {α : Type u_3} [AddMonoid ι] [Monoid R] (l : List α) ( : αι) (fA : αR) :
          l.dProd fA = (map fA l).prod

          When all the indexed types are the same, the dependent product is just the regular product.

          Shorthands for creating instance of the above typeclasses for collections of subobjects #

          class SetLike.GradedOne {ι : Type u_1} {R : Type u_2} {S : Type u_3} [SetLike S R] [One R] [Zero ι] (A : ιS) :

          A version of GradedMonoid.GOne for internally graded objects.

          • one_mem : 1 A 0

            One has grade zero

          Instances
            theorem SetLike.one_mem_graded {ι : Type u_1} {R : Type u_2} {S : Type u_3} [SetLike S R] [One R] [Zero ι] (A : ιS) [GradedOne A] :
            1 A 0
            instance SetLike.gOne {ι : Type u_1} {R : Type u_2} {S : Type u_3} [SetLike S R] [One R] [Zero ι] (A : ιS) [GradedOne A] :
            GradedMonoid.GOne fun (i : ι) => (A i)
            Equations
            @[simp]
            theorem SetLike.coe_gOne {ι : Type u_1} {R : Type u_2} {S : Type u_3} [SetLike S R] [One R] [Zero ι] (A : ιS) [GradedOne A] :
            class SetLike.GradedMul {ι : Type u_1} {R : Type u_2} {S : Type u_3} [SetLike S R] [Mul R] [Add ι] (A : ιS) :

            A version of GradedMonoid.ghas_one for internally graded objects.

            • mul_mem i j : ι {gi gj : R} : gi A igj A jgi * gj A (i + j)

              Multiplication is homogeneous

            Instances
              theorem SetLike.mul_mem_graded {ι : Type u_1} {R : Type u_2} {S : Type u_3} [SetLike S R] [Mul R] [Add ι] {A : ιS} [GradedMul A] i j : ι {gi gj : R} (hi : gi A i) (hj : gj A j) :
              gi * gj A (i + j)
              instance SetLike.gMul {ι : Type u_1} {R : Type u_2} {S : Type u_3} [SetLike S R] [Mul R] [Add ι] (A : ιS) [GradedMul A] :
              GradedMonoid.GMul fun (i : ι) => (A i)
              Equations
              @[simp]
              theorem SetLike.coe_gMul {ι : Type u_1} {R : Type u_2} {S : Type u_3} [SetLike S R] [Mul R] [Add ι] (A : ιS) [GradedMul A] {i j : ι} (x : (A i)) (y : (A j)) :
              (GradedMonoid.GMul.mul x y) = x * y
              class SetLike.GradedMonoid {ι : Type u_1} {R : Type u_2} {S : Type u_3} [SetLike S R] [Monoid R] [AddMonoid ι] (A : ιS) extends SetLike.GradedOne A, SetLike.GradedMul A :

              A version of GradedMonoid.GMonoid for internally graded objects.

              Instances
                def SetLike.GradeZero.submonoid {ι : Type u_1} {R : Type u_2} {S : Type u_3} [SetLike S R] [Monoid R] [AddMonoid ι] (A : ιS) [GradedMonoid A] :

                The submonoid A 0 of R.

                Equations
                @[simp]
                theorem SetLike.GradeZero.coe_submonoid {ι : Type u_1} {R : Type u_2} {S : Type u_3} [SetLike S R] [Monoid R] [AddMonoid ι] (A : ιS) [GradedMonoid A] :
                (submonoid A) = (A 0)
                instance SetLike.GradeZero.instMonoid {ι : Type u_1} {R : Type u_2} {S : Type u_3} [SetLike S R] [Monoid R] [AddMonoid ι] {A : ιS} [GradedMonoid A] :
                Monoid (A 0)

                The monoid A 0 inherited from R in the presence of SetLike.GradedMonoid A.

                Equations
                instance SetLike.GradeZero.instCommMonoid {ι : Type u_1} [AddMonoid ι] {R : Type u_4} {S : Type u_5} [SetLike S R] [CommMonoid R] {A : ιS} [GradedMonoid A] :
                CommMonoid (A 0)

                The commutative monoid A 0 inherited from R in the presence of SetLike.GradedMonoid A.

                Equations
                @[simp]
                theorem SetLike.GradeZero.coe_one {ι : Type u_1} {R : Type u_2} {S : Type u_3} [SetLike S R] [Monoid R] [AddMonoid ι] {A : ιS} [GradedMonoid A] :
                1 = 1
                @[simp]
                theorem SetLike.GradeZero.coe_mul {ι : Type u_1} {R : Type u_2} {S : Type u_3} [SetLike S R] [Monoid R] [AddMonoid ι] {A : ιS} [GradedMonoid A] (a b : (A 0)) :
                ↑(a * b) = a * b
                @[simp]
                theorem SetLike.GradeZero.coe_pow {ι : Type u_1} {R : Type u_2} {S : Type u_3} [SetLike S R] [Monoid R] [AddMonoid ι] {A : ιS} [GradedMonoid A] (a : (A 0)) (n : ) :
                ↑(a ^ n) = a ^ n
                theorem SetLike.pow_mem_graded {ι : Type u_1} {R : Type u_2} {S : Type u_3} [SetLike S R] [Monoid R] [AddMonoid ι] {A : ιS} [GradedMonoid A] (n : ) {r : R} {i : ι} (h : r A i) :
                r ^ n A (n i)
                theorem SetLike.list_prod_map_mem_graded {ι : Type u_1} {R : Type u_2} {S : Type u_3} [SetLike S R] [Monoid R] [AddMonoid ι] {A : ιS} [GradedMonoid A] {ι' : Type u_4} (l : List ι') (i : ι'ι) (r : ι'R) (h : jl, r j A (i j)) :
                (List.map r l).prod A (List.map i l).sum
                theorem SetLike.list_prod_ofFn_mem_graded {ι : Type u_1} {R : Type u_2} {S : Type u_3} [SetLike S R] [Monoid R] [AddMonoid ι] {A : ιS} [GradedMonoid A] {n : } (i : Fin nι) (r : Fin nR) (h : ∀ (j : Fin n), r j A (i j)) :
                instance SetLike.gMonoid {ι : Type u_1} {R : Type u_2} {S : Type u_3} [SetLike S R] [Monoid R] [AddMonoid ι] (A : ιS) [GradedMonoid A] :
                GradedMonoid.GMonoid fun (i : ι) => (A i)

                Build a GMonoid instance for a collection of subobjects.

                Equations
                • One or more equations did not get rendered due to their size.
                @[simp]
                theorem SetLike.coe_gnpow {ι : Type u_1} {R : Type u_2} {S : Type u_3} [SetLike S R] [Monoid R] [AddMonoid ι] (A : ιS) [GradedMonoid A] {i : ι} (x : (A i)) (n : ) :
                instance SetLike.gCommMonoid {ι : Type u_1} {R : Type u_2} {S : Type u_3} [SetLike S R] [CommMonoid R] [AddCommMonoid ι] (A : ιS) [GradedMonoid A] :
                GradedMonoid.GCommMonoid fun (i : ι) => (A i)

                Build a GCommMonoid instance for a collection of subobjects.

                Equations
                @[simp]
                theorem SetLike.coe_list_dProd {ι : Type u_1} {R : Type u_2} {α : Type u_3} {S : Type u_4} [SetLike S R] [Monoid R] [AddMonoid ι] (A : ιS) [GradedMonoid A] ( : αι) (fA : (a : α) → (A ( a))) (l : List α) :
                (l.dProd fA) = (List.map (fun (a : α) => (fA a)) l).prod
                theorem SetLike.list_dProd_eq {ι : Type u_1} {R : Type u_2} {α : Type u_3} {S : Type u_4} [SetLike S R] [Monoid R] [AddMonoid ι] (A : ιS) [GradedMonoid A] ( : αι) (fA : (a : α) → (A ( a))) (l : List α) :
                l.dProd fA = (List.map (fun (a : α) => (fA a)) l).prod,

                A version of List.coe_dProd_set_like with Subtype.mk.

                def SetLike.IsHomogeneousElem {ι : Type u_1} {R : Type u_2} {S : Type u_3} [SetLike S R] (A : ιS) (a : R) :

                An element a : R is said to be homogeneous if there is some i : ι such that a ∈ A i.

                Equations
                @[simp]
                theorem SetLike.isHomogeneousElem_coe {ι : Type u_1} {R : Type u_2} {S : Type u_3} [SetLike S R] {A : ιS} {i : ι} (x : (A i)) :
                @[deprecated SetLike.isHomogeneousElem_coe (since := "2025-01-31")]
                theorem SetLike.homogeneous_coe {ι : Type u_1} {R : Type u_2} {S : Type u_3} [SetLike S R] {A : ιS} {i : ι} (x : (A i)) :

                Alias of SetLike.isHomogeneousElem_coe.

                theorem SetLike.isHomogeneousElem_one {ι : Type u_1} {R : Type u_2} {S : Type u_3} [SetLike S R] [Zero ι] [One R] (A : ιS) [GradedOne A] :
                @[deprecated SetLike.isHomogeneousElem_one (since := "2025-01-31")]
                theorem SetLike.homogeneous_one {ι : Type u_1} {R : Type u_2} {S : Type u_3} [SetLike S R] [Zero ι] [One R] (A : ιS) [GradedOne A] :

                Alias of SetLike.isHomogeneousElem_one.

                theorem SetLike.IsHomogeneousElem.mul {ι : Type u_1} {R : Type u_2} {S : Type u_3} [SetLike S R] [Add ι] [Mul R] {A : ιS} [GradedMul A] {a b : R} :
                @[deprecated SetLike.IsHomogeneousElem.mul (since := "2025-01-31")]
                theorem SetLike.homogeneous_mul {ι : Type u_1} {R : Type u_2} {S : Type u_3} [SetLike S R] [Add ι] [Mul R] {A : ιS} [GradedMul A] {a b : R} :

                Alias of SetLike.IsHomogeneousElem.mul.

                def SetLike.homogeneousSubmonoid {ι : Type u_1} {R : Type u_2} {S : Type u_3} [SetLike S R] [AddMonoid ι] [Monoid R] (A : ιS) [GradedMonoid A] :

                When A is a SetLike.GradedMonoid A, then the homogeneous elements forms a submonoid.

                Equations
                theorem SetLike.prod_mem_graded {ι : Type u_2} {R : Type u_3} {S : Type u_4} [SetLike S R] [CommMonoid R] [AddCommMonoid ι] (A : ιS) [GradedMonoid A] {κ : Type u_5} (i : κι) (g : κR) {F : Finset κ} (hF : kF, g k A (i k)) :
                kF, g k A (∑ kF, i k)
                theorem SetLike.prod_pow_mem_graded {ι : Type u_2} {R : Type u_3} {S : Type u_4} [SetLike S R] [CommMonoid R] [AddCommMonoid ι] (A : ιS) [GradedMonoid A] {κ : Type u_5} (i : κι) (g : κR) {F : Finset κ} (n : κ) (hF : kF, g k A (i k)) :
                kF, g k ^ n k A (∑ kF, n k i k)