Documentation

Mathlib.Algebra.MonoidAlgebra.Module

Module structure on monoid algebras #

Main results #

Implementation notes #

We do not state the equivalent of DistribMulAction G (MonoidAlgebra k G) for AddMonoidAlgebra because mathlib does not have the notion of distributive actions of additive groups.

Multiplicative monoids #

@[implicit_reducible]
noncomputable instance MonoidAlgebra.distribMulAction {k : Type u₁} {G : Type uā‚‚} {R : Type u_2} [Monoid R] [Semiring k] [DistribMulAction R k] :
@[implicit_reducible]
noncomputable instance AddMonoidAlgebra.distribMulAction {k : Type u₁} {G : Type uā‚‚} {R : Type u_2} [Monoid R] [Semiring k] [DistribMulAction R k] :
@[implicit_reducible]
noncomputable instance MonoidAlgebra.module {R : Type u_2} {M : Type u_4} {S : Type u_5} [Semiring R] [Semiring S] [Module R S] :
@[implicit_reducible]
noncomputable instance AddMonoidAlgebra.module {R : Type u_2} {M : Type u_4} {S : Type u_5} [Semiring R] [Semiring S] [Module R S] :
noncomputable def MonoidAlgebra.coeffLinearEquiv (R : Type u_2) {M : Type u_4} {S : Type u_5} [Semiring R] [Semiring S] [Module R S] :

MonoidAlgebra.coeff as a linear equiv.

Instances For
    noncomputable def AddMonoidAlgebra.coeffLinearEquiv (R : Type u_2) {M : Type u_4} {S : Type u_5} [Semiring R] [Semiring S] [Module R S] :

    MonoidAlgebra.coeff as a linear equiv.

    Instances For
      @[simp]
      theorem AddMonoidAlgebra.coeffLinearEquiv_symm_apply (R : Type u_2) {M : Type u_4} {S : Type u_5} [Semiring R] [Semiring S] [Module R S] (aāœ : M →₀ S) :
      (coeffLinearEquiv R).symm aāœ = ofCoeff aāœ
      @[simp]
      theorem MonoidAlgebra.coeffLinearEquiv_apply (R : Type u_2) {M : Type u_4} {S : Type u_5} [Semiring R] [Semiring S] [Module R S] (aāœ : MonoidAlgebra S M) :
      (coeffLinearEquiv R) aāœ = aāœ.coeff
      @[simp]
      theorem MonoidAlgebra.coeffLinearEquiv_symm_apply (R : Type u_2) {M : Type u_4} {S : Type u_5} [Semiring R] [Semiring S] [Module R S] (aāœ : M →₀ S) :
      (coeffLinearEquiv R).symm aāœ = ofCoeff aāœ
      @[simp]
      theorem AddMonoidAlgebra.coeffLinearEquiv_apply (R : Type u_2) {M : Type u_4} {S : Type u_5} [Semiring R] [Semiring S] [Module R S] (aāœ : AddMonoidAlgebra S M) :
      (coeffLinearEquiv R) aāœ = aāœ.coeff
      noncomputable def MonoidAlgebra.supported (R : Type u_2) {M : Type u_4} (S : Type u_5) [Semiring R] [Semiring S] [Module R S] (s : Set M) :

      The R-submodule of all elements of S[M] supported on a subset s of M.

      Instances For
        noncomputable def AddMonoidAlgebra.supported (R : Type u_2) {M : Type u_4} (S : Type u_5) [Semiring R] [Semiring S] [Module R S] (s : Set M) :

        The R-submodule of all elements of S[M] supported on a subset s of M.

        Instances For
          theorem MonoidAlgebra.mem_supported {R : Type u_2} {M : Type u_4} {S : Type u_5} [Semiring R] [Semiring S] [Module R S] {s : Set M} {x : MonoidAlgebra S M} :
          x ∈ supported R S s ↔ ↑x.coeff.support āŠ† s
          theorem AddMonoidAlgebra.mem_supported {R : Type u_2} {M : Type u_4} {S : Type u_5} [Semiring R] [Semiring S] [Module R S] {s : Set M} {x : AddMonoidAlgebra S M} :
          x ∈ supported R S s ↔ ↑x.coeff.support āŠ† s
          theorem MonoidAlgebra.mem_supported' {R : Type u_2} {M : Type u_4} {S : Type u_5} [Semiring R] [Semiring S] [Module R S] {s : Set M} {x : MonoidAlgebra S M} :
          x ∈ supported R S s ↔ āˆ€ m āˆ‰ s, x.coeff m = 0
          theorem AddMonoidAlgebra.mem_supported' {R : Type u_2} {M : Type u_4} {S : Type u_5} [Semiring R] [Semiring S] [Module R S] {s : Set M} {x : AddMonoidAlgebra S M} :
          x ∈ supported R S s ↔ āˆ€ m āˆ‰ s, x.coeff m = 0
          theorem MonoidAlgebra.supported_eq_map (R : Type u_2) {M : Type u_4} (S : Type u_5) [Semiring R] [Semiring S] [Module R S] (s : Set M) :
          theorem AddMonoidAlgebra.supported_eq_map (R : Type u_2) {M : Type u_4} (S : Type u_5) [Semiring R] [Semiring S] [Module R S] (s : Set M) :
          theorem MonoidAlgebra.supported_eq_span_single (R : Type u_2) {M : Type u_4} [Semiring R] (s : Set M) :
          supported R R s = Submodule.span R ((fun (m : M) => single m 1) '' s)
          theorem AddMonoidAlgebra.supported_eq_span_single (R : Type u_2) {M : Type u_4} [Semiring R] (s : Set M) :
          supported R R s = Submodule.span R ((fun (m : M) => single m 1) '' s)
          theorem MonoidAlgebra.supported_mono {R : Type u_2} {M : Type u_4} {S : Type u_5} [Semiring R] [Semiring S] [Module R S] {s t : Set M} (hst : s āŠ† t) :
          theorem AddMonoidAlgebra.supported_mono {R : Type u_2} {M : Type u_4} {S : Type u_5} [Semiring R] [Semiring S] [Module R S] {s t : Set M} (hst : s āŠ† t) :
          noncomputable def MonoidAlgebra.supportedEquivFinsupp {R : Type u_2} {M : Type u_4} {S : Type u_5} [Semiring R] [Semiring S] [Module R S] (s : Set M) :
          ↄ(supported R S s) ā‰ƒā‚—[R] ↑s →₀ S

          Interpret Finsupp.restrictSupportEquiv as a linear equivalence between supported M R s and s →₀ M.

          Instances For
            noncomputable def AddMonoidAlgebra.supportedEquivFinsupp {R : Type u_2} {M : Type u_4} {S : Type u_5} [Semiring R] [Semiring S] [Module R S] (s : Set M) :
            ↄ(supported R S s) ā‰ƒā‚—[R] ↑s →₀ S

            Interpret Finsupp.restrictSupportEquiv as a linear equivalence between supported M R s and s →₀ M.

            Instances For
              @[simp]
              theorem AddMonoidAlgebra.supportedEquivFinsupp_apply_apply {R : Type u_2} {M : Type u_4} {S : Type u_5} [Semiring R] [Semiring S] [Module R S] (s : Set M) (aāœ : ↄ(supported R S s)) (aāœĀ¹ : { x : M // x ∈ s }) :
              ((supportedEquivFinsupp s) aāœ) aāœĀ¹ = (↑aāœ).coeff ↑aāœĀ¹
              @[simp]
              theorem MonoidAlgebra.supportedEquivFinsupp_apply_apply {R : Type u_2} {M : Type u_4} {S : Type u_5} [Semiring R] [Semiring S] [Module R S] (s : Set M) (aāœ : ↄ(supported R S s)) (aāœĀ¹ : { x : M // x ∈ s }) :
              ((supportedEquivFinsupp s) aāœ) aāœĀ¹ = (↑aāœ).coeff ↑aāœĀ¹
              @[simp]
              theorem MonoidAlgebra.supportedEquivFinsupp_symm_apply_coe_support_val {R : Type u_2} {M : Type u_4} {S : Type u_5} [Semiring R] [Semiring S] [Module R S] (s : Set M) (aāœ : ↑s →₀ S) :
              (↑((supportedEquivFinsupp s).symm aāœ)).support.val = Multiset.map Subtype.val aāœ.support.val
              @[simp]
              theorem AddMonoidAlgebra.supportedEquivFinsupp_symm_apply_coe_support_val {R : Type u_2} {M : Type u_4} {S : Type u_5} [Semiring R] [Semiring S] [Module R S] (s : Set M) (aāœ : ↑s →₀ S) :
              (↑((supportedEquivFinsupp s).symm aāœ)).support.val = Multiset.map Subtype.val aāœ.support.val
              @[simp]
              theorem AddMonoidAlgebra.supportedEquivFinsupp_apply_support_val {R : Type u_2} {M : Type u_4} {S : Type u_5} [Semiring R] [Semiring S] [Module R S] (s : Set M) (aāœ : ↄ(supported R S s)) :
              ((supportedEquivFinsupp s) aāœ).support.val = Multiset.map (fun (x : ↄ({x ∈ (↑aāœ).coeff.support | x ∈ s})) => āŸØā†‘x, ā‹ÆāŸ©) (Multiset.filter (fun (x : M) => x ∈ s) (↑aāœ).coeff.support.val).attach
              @[simp]
              theorem AddMonoidAlgebra.supportedEquivFinsupp_symm_apply_coe_apply {R : Type u_2} {M : Type u_4} {S : Type u_5} [Semiring R] [Semiring S] [Module R S] (s : Set M) (aāœ : ↑s →₀ S) (a : M) :
              ↑((supportedEquivFinsupp s).symm aāœ) a = if h : a ∈ s then aāœ ⟨a, h⟩ else 0
              @[simp]
              theorem MonoidAlgebra.supportedEquivFinsupp_symm_apply_coe_apply {R : Type u_2} {M : Type u_4} {S : Type u_5} [Semiring R] [Semiring S] [Module R S] (s : Set M) (aāœ : ↑s →₀ S) (a : M) :
              ↑((supportedEquivFinsupp s).symm aāœ) a = if h : a ∈ s then aāœ ⟨a, h⟩ else 0
              @[simp]
              theorem MonoidAlgebra.supportedEquivFinsupp_apply_support_val {R : Type u_2} {M : Type u_4} {S : Type u_5} [Semiring R] [Semiring S] [Module R S] (s : Set M) (aāœ : ↄ(supported R S s)) :
              ((supportedEquivFinsupp s) aāœ).support.val = Multiset.map (fun (x : ↄ({x ∈ (↑aāœ).coeff.support | x ∈ s})) => āŸØā†‘x, ā‹ÆāŸ©) (Multiset.filter (fun (x : M) => x ∈ s) (↑aāœ).coeff.support.val).attach
              instance MonoidAlgebra.faithfulSMul {k : Type u₁} {G : Type uā‚‚} {R : Type u_2} [Semiring k] [SMulZeroClass R k] [FaithfulSMul R k] [Nonempty G] :
              instance AddMonoidAlgebra.faithfulSMul {k : Type u₁} {G : Type uā‚‚} {R : Type u_2} [Semiring k] [SMulZeroClass R k] [FaithfulSMul R k] [Nonempty G] :
              noncomputable def MonoidAlgebra.basis (R : Type u_6) (k : Type u_7) [Semiring k] :

              The standard basis for a monoid algebra.

              Instances For
                noncomputable def AddMonoidAlgebra.basis (R : Type u_6) (k : Type u_7) [Semiring k] :

                The standard basis for an additive monoid algebra.

                Instances For
                  @[simp]
                  theorem MonoidAlgebra.basis_apply {R : Type u_2} (k : Type u_6) [Semiring k] (r : R) :
                  (basis R k) r = single r 1
                  @[simp]
                  theorem AddMonoidAlgebra.basis_apply {R : Type u_2} (k : Type u_6) [Semiring k] (r : R) :
                  (basis R k) r = single r 1
                  @[implicit_reducible]
                  noncomputable def MonoidAlgebra.comapDistribMulActionSelf {k : Type u₁} {G : Type uā‚‚} [Group G] [Semiring k] :

                  This is not an instance as it conflicts with MonoidAlgebra.distribMulAction when G = kˣ.

                  TODO: Change the type to DistribMulAction Gᵈᵐᵃ k[G] and then it can be an instance. TODO: Generalise to a group acting on another, instead of just the left multiplication action.

                  Instances For

                    Copies of ext lemmas and bundled singles from Finsupp #

                    As MonoidAlgebra is a type synonym, ext will not unfold it to find ext lemmas. We need bundled version of Finsupp.single with the right types to state these lemmas. It is good practice to have those, regardless of the ext issue.

                    noncomputable def MonoidAlgebra.singleDistribMulActionHom {k : Type u₁} {G : Type uā‚‚} {R : Type u_2} [Semiring k] [Monoid R] [DistribMulAction R k] (a : G) :

                    MonoidAlgebra.single as a DistribMulActionHom.

                    Instances For
                      noncomputable def AddMonoidAlgebra.singleDistribMulActionHom {k : Type u₁} {G : Type uā‚‚} {R : Type u_2} [Semiring k] [Monoid R] [DistribMulAction R k] (a : G) :

                      AddMonoidAlgebra.single as a DistribMulActionHom.

                      Instances For
                        theorem MonoidAlgebra.distribMulActionHom_ext' {k : Type u₁} {G : Type uā‚‚} {R : Type u_2} [Semiring k] {N : Type u_5} [Monoid R] [AddMonoid N] [DistribMulAction R N] [DistribMulAction R k] {f g : MonoidAlgebra k G →+[R] N} (h : āˆ€ (a : G), f.comp (singleDistribMulActionHom a) = g.comp (singleDistribMulActionHom a)) :
                        f = g

                        A copy of Finsupp.distribMulActionHom_ext' for MonoidAlgebra.

                        theorem AddMonoidAlgebra.distribMulActionHom_ext' {k : Type u₁} {G : Type uā‚‚} {R : Type u_2} [Semiring k] {N : Type u_5} [Monoid R] [AddMonoid N] [DistribMulAction R N] [DistribMulAction R k] {f g : AddMonoidAlgebra k G →+[R] N} (h : āˆ€ (a : G), f.comp (singleDistribMulActionHom a) = g.comp (singleDistribMulActionHom a)) :
                        f = g

                        A copy of Finsupp.distribMulActionHom_ext' for AddMonoidAlgebra.

                        theorem MonoidAlgebra.distribMulActionHom_ext'_iff {k : Type u₁} {G : Type uā‚‚} {R : Type u_2} [Semiring k] {N : Type u_5} [Monoid R] [AddMonoid N] [DistribMulAction R N] [DistribMulAction R k] {f g : MonoidAlgebra k G →+[R] N} :
                        f = g ↔ āˆ€ (a : G), f.comp (singleDistribMulActionHom a) = g.comp (singleDistribMulActionHom a)
                        theorem AddMonoidAlgebra.distribMulActionHom_ext'_iff {k : Type u₁} {G : Type uā‚‚} {R : Type u_2} [Semiring k] {N : Type u_5} [Monoid R] [AddMonoid N] [DistribMulAction R N] [DistribMulAction R k] {f g : AddMonoidAlgebra k G →+[R] N} :
                        f = g ↔ āˆ€ (a : G), f.comp (singleDistribMulActionHom a) = g.comp (singleDistribMulActionHom a)
                        @[reducible, inline]
                        noncomputable abbrev MonoidAlgebra.lsingle {k : Type u₁} {G : Type uā‚‚} {R : Type u_2} [Semiring k] [Semiring R] [Module R k] (a : G) :

                        A copy of Finsupp.lsingle for MonoidAlgebra.

                        Instances For
                          @[reducible, inline]
                          noncomputable abbrev AddMonoidAlgebra.lsingle {k : Type u₁} {G : Type uā‚‚} {R : Type u_2} [Semiring k] [Semiring R] [Module R k] (a : G) :

                          A copy of Finsupp.lsingle for AddMonoidAlgebra.

                          Instances For
                            @[simp]
                            theorem MonoidAlgebra.lsingle_apply {k : Type u₁} {G : Type uā‚‚} {R : Type u_2} [Semiring k] [Semiring R] [Module R k] (a : G) (b : k) :
                            (lsingle a) b = single a b
                            @[simp]
                            theorem AddMonoidAlgebra.lsingle_apply {k : Type u₁} {G : Type uā‚‚} {R : Type u_2} [Semiring k] [Semiring R] [Module R k] (a : G) (b : k) :
                            (lsingle a) b = single a b
                            theorem MonoidAlgebra.lhom_ext' {k : Type u₁} {G : Type uā‚‚} {R : Type u_2} [Semiring k] {N : Type u_5} [Semiring R] [AddCommMonoid N] [Module R N] [Module R k] ⦃f g : MonoidAlgebra k G →ₗ[R] N⦄ (H : āˆ€ (x : G), f āˆ˜ā‚— lsingle x = g āˆ˜ā‚— lsingle x) :
                            f = g

                            A copy of Finsupp.lhom_ext' for MonoidAlgebra.

                            theorem AddMonoidAlgebra.lhom_ext' {k : Type u₁} {G : Type uā‚‚} {R : Type u_2} [Semiring k] {N : Type u_5} [Semiring R] [AddCommMonoid N] [Module R N] [Module R k] ⦃f g : AddMonoidAlgebra k G →ₗ[R] N⦄ (H : āˆ€ (x : G), f āˆ˜ā‚— lsingle x = g āˆ˜ā‚— lsingle x) :
                            f = g
                            theorem AddMonoidAlgebra.lhom_ext'_iff {k : Type u₁} {G : Type uā‚‚} {R : Type u_2} [Semiring k] {N : Type u_5} [Semiring R] [AddCommMonoid N] [Module R N] [Module R k] {f g : AddMonoidAlgebra k G →ₗ[R] N} :
                            f = g ↔ āˆ€ (x : G), f āˆ˜ā‚— lsingle x = g āˆ˜ā‚— lsingle x
                            theorem MonoidAlgebra.lhom_ext'_iff {k : Type u₁} {G : Type uā‚‚} {R : Type u_2} [Semiring k] {N : Type u_5} [Semiring R] [AddCommMonoid N] [Module R N] [Module R k] {f g : MonoidAlgebra k G →ₗ[R] N} :
                            f = g ↔ āˆ€ (x : G), f āˆ˜ā‚— lsingle x = g āˆ˜ā‚— lsingle x
                            theorem MonoidAlgebra.smul_of {R : Type u_2} {M : Type u_4} [Semiring R] [MulOneClass M] (m : M) (r : R) :
                            r • (of R M) m = single m r
                            theorem MonoidAlgebra.of_mem_span_of_iff {R : Type u_2} {M : Type u_4} [Semiring R] [MulOneClass M] {s : Set M} {m : M} [Nontrivial R] :
                            (of R M) m ∈ Submodule.span R (⇑(of R M) '' s) ↔ m ∈ s

                            The image of an element m : M in R[M] belongs to the submodule generated by s : Set M if and only if m ∈ s.

                            theorem MonoidAlgebra.mem_closure_of_mem_span_closure {R : Type u_2} {M : Type u_4} [Semiring R] [MulOneClass M] {s : Set M} {m : M} [Nontrivial R] (h : (of R M) m ∈ Submodule.span R ↑(Submonoid.closure (⇑(of R M) '' s))) :

                            If the image of an element m : M in R[M] belongs to the submodule generated by the closure of some s : Set M then m ∈ closure s.

                            theorem MonoidAlgebra.liftNC_smul {R : Type u_2} {S : Type u_3} {M : Type u_4} [Semiring R] [Semiring S] [MulOneClass M] (f : S →+* R) (g : M →* R) (c : S) (φ : MonoidAlgebra S M) :
                            (liftNC ↑f ⇑g) (c • φ) = f c * (liftNC ↑f ⇑g) φ

                            Non-unital, non-associative algebra structure #

                            instance MonoidAlgebra.isScalarTower_self (k : Type u₁) {G : Type uā‚‚} {R : Type u_2} [Semiring k] [DistribSMul R k] [Mul G] [IsScalarTower R k k] :
                            instance AddMonoidAlgebra.isScalarTower_self (k : Type u₁) {G : Type uā‚‚} {R : Type u_2} [Semiring k] [DistribSMul R k] [Add G] [IsScalarTower R k k] :
                            instance MonoidAlgebra.smulCommClass_self (k : Type u₁) {G : Type uā‚‚} {R : Type u_2} [Semiring k] [DistribSMul R k] [Mul G] [SMulCommClass R k k] :

                            Note that if k is a CommSemiring then we have SMulCommClass k k k and so we can take R = k in the below. In other words, if the coefficients are commutative amongst themselves, they also commute with the algebra multiplication.

                            instance AddMonoidAlgebra.smulCommClass_self (k : Type u₁) {G : Type uā‚‚} {R : Type u_2} [Semiring k] [DistribSMul R k] [Add G] [SMulCommClass R k k] :
                            instance MonoidAlgebra.smulCommClass_symm_self (k : Type u₁) {G : Type uā‚‚} {R : Type u_2} [Semiring k] [DistribSMul R k] [Mul G] [SMulCommClass k R k] :
                            def MonoidAlgebra.submoduleOfSMulMem {k : Type u₁} {G : Type uā‚‚} [CommSemiring k] [Monoid G] {V : Type u_5} [AddCommMonoid V] [Module k V] [Module (MonoidAlgebra k G) V] [IsScalarTower k (MonoidAlgebra k G) V] (W : Submodule k V) (h : āˆ€ (g : G), āˆ€ v ∈ W, (of k G) g • v ∈ W) :

                            A submodule over k which is stable under scalar multiplication by elements of G is a submodule over k[G]

                            Instances For

                              Additive monoids #

                              theorem AddMonoidAlgebra.of'_mem_span {R : Type u_2} {M : Type u_4} [Semiring R] [Nontrivial R] {m : M} {s : Set M} :
                              of' R M m ∈ Submodule.span R (of' R M '' s) ↔ m ∈ s

                              The image of an element m : M in R[M] belongs the submodule generated by s : Set M if and only if m ∈ s.

                              theorem AddMonoidAlgebra.mem_closure_of_mem_span_closure {R : Type u_2} {M : Type u_4} [Semiring R] [AddMonoid M] [Nontrivial R] {m : M} {s : Set M} (h : of' R M m ∈ Submodule.span R ↑(Submonoid.closure (of' R M '' s))) :

                              If the image of an element m : M in R[M] belongs the submodule generated by the closure of some s : Set M then m ∈ closure s.

                              theorem AddMonoidAlgebra.liftNC_smul {R : Type u_2} {S : Type u_3} {M : Type u_4} [Semiring R] [Semiring S] [AddZeroClass M] (f : S →+* R) (g : Multiplicative M →* R) (c : S) (φ : AddMonoidAlgebra S M) :
                              (liftNC ↑f ⇑g) (c • φ) = f c * (liftNC ↑f ⇑g) φ