Documentation

Mathlib.Algebra.SkewMonoidAlgebra.Basic

Skew Monoid Algebras #

Given a monoid G acting on a ring k, the skew monoid algebra of G over k is the set of finitely supported functions f : G → k for which addition is defined pointwise and multiplication of two elements f and g is given by the finitely supported function whose value at a is the sum of f x * (x • g y) over all pairs x, y such that x * y = a, where denotes the action of G on k. When this action is trivial, this product is the usual convolution product.

In fact the construction of the skew monoid algebra makes sense when G is not even a monoid, but merely a magma, i.e., when G carries a multiplication which is not required to satisfy any conditions at all, and k is a not-necessarily-associative semiring. In this case the construction yields a not-necessarily-unital, not-necessarily-associative algebra.

Main Definitions #

TODO #

structure SkewMonoidAlgebra (k : Type u_1) (G : Type u_2) [Zero k] :
Type (max u_1 u_2)

The skew monoid algebra of G over k is the type of finite formal k-linear combinations of terms of G, endowed with a skewed convolution product.

Instances For
    @[simp]
    theorem SkewMonoidAlgebra.eta {k : Type u_1} {G : Type u_2} [AddMonoid k] (f : SkewMonoidAlgebra k G) :
    { toFinsupp := f.toFinsupp } = f
    instance SkewMonoidAlgebra.instZero {k : Type u_1} {G : Type u_2} [AddMonoid k] :
    Equations
    Equations
    @[simp]
    theorem SkewMonoidAlgebra.ofFinsupp_zero {k : Type u_1} {G : Type u_2} [AddMonoid k] :
    { toFinsupp := 0 } = 0
    @[simp]
    theorem SkewMonoidAlgebra.ofFinsupp_add {k : Type u_1} {G : Type u_2} [AddMonoid k] {a b : G →₀ k} :
    { toFinsupp := a + b } = { toFinsupp := a } + { toFinsupp := b }
    @[simp]
    theorem SkewMonoidAlgebra.ofFinsupp_smul {k : Type u_1} {G : Type u_2} [AddMonoid k] {S : Type u_3} [SMulZeroClass S k] (a : S) (b : G →₀ k) :
    { toFinsupp := a b } = a { toFinsupp := b }
    @[simp]
    theorem SkewMonoidAlgebra.toFinsupp_zero {k : Type u_1} {G : Type u_2} [AddMonoid k] :
    @[simp]
    theorem SkewMonoidAlgebra.toFinsupp_add {k : Type u_1} {G : Type u_2} [AddMonoid k] (a b : SkewMonoidAlgebra k G) :
    @[simp]
    theorem SkewMonoidAlgebra.toFinsupp_smul {k : Type u_1} {G : Type u_2} [AddMonoid k] {S : Type u_3} [SMulZeroClass S k] (a : S) (b : SkewMonoidAlgebra k G) :
    theorem IsSMulRegular.skewMonoidAlgebra {k : Type u_1} {G : Type u_2} [AddMonoid k] {S : Type u_3} [Monoid S] [DistribMulAction S k] {a : S} (ha : IsSMulRegular k a) :
    @[simp]
    theorem SkewMonoidAlgebra.toFinsupp_inj {k : Type u_1} {G : Type u_2} [AddMonoid k] {a b : SkewMonoidAlgebra k G} :
    theorem SkewMonoidAlgebra.ofFinsupp_inj {k : Type u_1} {G : Type u_2} [AddMonoid k] {a b : G →₀ k} :
    { toFinsupp := a } = { toFinsupp := b } a = b

    A variant of SkewMonoidAlgebra.ofFinsupp_injective in terms of Iff.

    @[simp]
    theorem SkewMonoidAlgebra.toFinsupp_eq_zero {k : Type u_1} {G : Type u_2} [AddMonoid k] {a : SkewMonoidAlgebra k G} :
    a.toFinsupp = 0 a = 0
    @[simp]
    theorem SkewMonoidAlgebra.ofFinsupp_eq_zero {k : Type u_1} {G : Type u_2} [AddMonoid k] {a : G →₀ k} :
    { toFinsupp := a } = 0 a = 0
    def SkewMonoidAlgebra.support {k : Type u_1} {G : Type u_2} [AddMonoid k] :

    For f : SkewMonoidAlgebra k G, f.support is the set of all a ∈ G such that f a ≠ 0.

    Equations
    Instances For
      @[simp]
      theorem SkewMonoidAlgebra.support_ofFinsupp {k : Type u_1} {G : Type u_2} [AddMonoid k] (p : G →₀ k) :
      { toFinsupp := p }.support = p.support
      @[simp]
      theorem SkewMonoidAlgebra.support_zero {k : Type u_1} {G : Type u_2} [AddMonoid k] :
      @[simp]
      theorem SkewMonoidAlgebra.support_eq_empty {k : Type u_1} {G : Type u_2} [AddMonoid k] {p : SkewMonoidAlgebra k G} :
      p.support = p = 0
      def SkewMonoidAlgebra.coeff {k : Type u_1} {G : Type u_2} [AddMonoid k] :
      SkewMonoidAlgebra k GGk

      coeff f a (often denoted f.coeff a) is the coefficient of a in f.

      Equations
      Instances For
        @[simp]
        theorem SkewMonoidAlgebra.coeff_ofFinsupp {k : Type u_1} {G : Type u_2} [AddMonoid k] (p : G →₀ k) :
        { toFinsupp := p }.coeff = p
        @[simp]
        theorem SkewMonoidAlgebra.coeff_inj {k : Type u_1} {G : Type u_2} [AddMonoid k] (p q : SkewMonoidAlgebra k G) :
        p.coeff = q.coeff p = q
        @[simp]
        theorem SkewMonoidAlgebra.toFinsupp_apply {k : Type u_1} {G : Type u_2} [AddMonoid k] (f : SkewMonoidAlgebra k G) (g : G) :
        f.toFinsupp g = f.coeff g
        @[simp]
        theorem SkewMonoidAlgebra.coeff_zero {k : Type u_1} {G : Type u_2} [AddMonoid k] (g : G) :
        coeff 0 g = 0
        @[simp]
        theorem SkewMonoidAlgebra.mem_support_iff {k : Type u_1} {G : Type u_2} [AddMonoid k] {f : SkewMonoidAlgebra k G} {a : G} :
        a f.support f.coeff a 0
        theorem SkewMonoidAlgebra.notMem_support_iff {k : Type u_1} {G : Type u_2} [AddMonoid k] {f : SkewMonoidAlgebra k G} {a : G} :
        af.support f.coeff a = 0
        @[deprecated SkewMonoidAlgebra.notMem_support_iff (since := "2025-05-23")]
        theorem SkewMonoidAlgebra.not_mem_support_iff {k : Type u_1} {G : Type u_2} [AddMonoid k] {f : SkewMonoidAlgebra k G} {a : G} :
        af.support f.coeff a = 0

        Alias of SkewMonoidAlgebra.notMem_support_iff.

        theorem SkewMonoidAlgebra.ext_iff {k : Type u_1} {G : Type u_2} [AddMonoid k] {p q : SkewMonoidAlgebra k G} :
        p = q ∀ (n : G), p.coeff n = q.coeff n
        theorem SkewMonoidAlgebra.ext {k : Type u_1} {G : Type u_2} [AddMonoid k] {p q : SkewMonoidAlgebra k G} :
        (∀ (a : G), p.coeff a = q.coeff a)p = q
        @[simp]
        theorem SkewMonoidAlgebra.coeff_add {k : Type u_1} {G : Type u_2} [AddMonoid k] (p q : SkewMonoidAlgebra k G) (a : G) :
        (p + q).coeff a = p.coeff a + q.coeff a
        @[simp]
        theorem SkewMonoidAlgebra.coeff_smul {k : Type u_1} {G : Type u_2} [AddMonoid k] {S : Type u_3} [SMulZeroClass S k] (r : S) (p : SkewMonoidAlgebra k G) (a : G) :
        (r p).coeff a = r p.coeff a
        def SkewMonoidAlgebra.single {k : Type u_1} {G : Type u_2} [AddMonoid k] (a : G) (b : k) :

        single a b is the finitely supported function with value b at a and zero otherwise.

        Equations
        Instances For
          @[simp]
          theorem SkewMonoidAlgebra.toFinsupp_single {k : Type u_1} {G : Type u_2} [AddMonoid k] (a : G) (b : k) :
          @[simp]
          theorem SkewMonoidAlgebra.ofFinsupp_single {k : Type u_1} {G : Type u_2} [AddMonoid k] (a : G) (b : k) :
          { toFinsupp := Finsupp.single a b } = single a b
          theorem SkewMonoidAlgebra.coeff_single {k : Type u_1} {G : Type u_2} [AddMonoid k] (a : G) (b : k) [DecidableEq G] :
          theorem SkewMonoidAlgebra.coeff_single_apply {k : Type u_1} {G : Type u_2} [AddMonoid k] {a a' : G} {b : k} [Decidable (a = a')] :
          (single a b).coeff a' = if a = a' then b else 0
          theorem SkewMonoidAlgebra.single_zero_right {k : Type u_1} {G : Type u_2} [AddMonoid k] (a : G) :
          single a 0 = 0
          @[simp]
          theorem SkewMonoidAlgebra.single_add {k : Type u_1} {G : Type u_2} [AddMonoid k] (a : G) (b₁ b₂ : k) :
          single a (b₁ + b₂) = single a b₁ + single a b₂
          @[simp]
          theorem SkewMonoidAlgebra.single_zero {k : Type u_1} {G : Type u_2} [AddMonoid k] (a : G) :
          single a 0 = 0
          theorem SkewMonoidAlgebra.single_eq_zero {k : Type u_1} {G : Type u_2} [AddMonoid k] {a : G} {b : k} :
          single a b = 0 b = 0

          Group isomorphism between SkewMonoidAlgebra k G and G →₀ k.

          Equations
          Instances For
            @[simp]
            theorem SkewMonoidAlgebra.toFinsuppAddEquiv_symm_apply {k : Type u_1} {G : Type u_2} [AddMonoid k] (toFinsupp : G →₀ k) :
            toFinsuppAddEquiv.symm toFinsupp = { toFinsupp := toFinsupp }
            theorem SkewMonoidAlgebra.smul_single {k : Type u_1} {G : Type u_2} [AddMonoid k] {S : Type u_3} [SMulZeroClass S k] (s : S) (a : G) (b : k) :
            s single a b = single a (s b)
            instance SkewMonoidAlgebra.instOne {k : Type u_1} {G : Type u_2} [One G] [AddMonoidWithOne k] :

            The unit of the multiplication is single 1 1, i.e. the function that is 1 at 1 and zero elsewhere.

            Equations
            Equations
            theorem SkewMonoidAlgebra.ofFinsupp_one {k : Type u_1} {G : Type u_2} [One G] [AddMonoidWithOne k] :
            { toFinsupp := Finsupp.single 1 1 } = 1
            @[simp]
            theorem SkewMonoidAlgebra.ofFinsupp_eq_one {k : Type u_1} {G : Type u_2} [One G] [AddMonoidWithOne k] {a : G →₀ k} :
            { toFinsupp := a } = 1 a = Finsupp.single 1 1
            @[simp]
            theorem SkewMonoidAlgebra.single_one_one {k : Type u_1} {G : Type u_2} [One G] [AddMonoidWithOne k] :
            single 1 1 = 1
            theorem SkewMonoidAlgebra.one_def {k : Type u_1} {G : Type u_2} [One G] [AddMonoidWithOne k] :
            1 = single 1 1
            @[simp]
            theorem SkewMonoidAlgebra.coeff_one_one {k : Type u_1} {G : Type u_2} [One G] [AddMonoidWithOne k] :
            coeff 1 1 = 1
            theorem SkewMonoidAlgebra.coeff_one {k : Type u_1} {G : Type u_2} [One G] [AddMonoidWithOne k] {a : G} [Decidable (a = 1)] :
            coeff 1 a = if a = 1 then 1 else 0
            theorem SkewMonoidAlgebra.natCast_def {k : Type u_1} {G : Type u_2} [One G] [AddMonoidWithOne k] (n : ) :
            n = single 1 n
            @[simp]
            theorem SkewMonoidAlgebra.single_nat {k : Type u_1} {G : Type u_2} [One G] [AddMonoidWithOne k] (n : ) :
            single 1 n = n
            def SkewMonoidAlgebra.sum {k : Type u_1} {G : Type u_2} [AddCommMonoid k] {N : Type u_3} [AddCommMonoid N] (f : SkewMonoidAlgebra k G) (g : GkN) :
            N

            sum f g is the sum of g a (f.coeff a) over the support of f.

            Equations
            Instances For
              theorem SkewMonoidAlgebra.sum_def {k : Type u_1} {G : Type u_2} [AddCommMonoid k] {N : Type u_3} [AddCommMonoid N] (f : SkewMonoidAlgebra k G) (g : GkN) :
              f.sum g = f.toFinsupp.sum g
              theorem SkewMonoidAlgebra.sum_def' {k : Type u_1} {G : Type u_2} [AddCommMonoid k] {N : Type u_3} [AddCommMonoid N] (f : SkewMonoidAlgebra k G) (g : GkN) :
              f.sum g = af.support, g a (f.coeff a)

              Unfolded version of sum_def in terms of Finset.sum.

              @[simp]
              theorem SkewMonoidAlgebra.sum_single_index {k : Type u_1} {G : Type u_2} [AddCommMonoid k] {N : Type u_3} [AddCommMonoid N] {a : G} {b : k} {h : GkN} (h_zero : h a 0 = 0) :
              (single a b).sum h = h a b
              theorem SkewMonoidAlgebra.map_sum {k : Type u_1} {G : Type u_2} [AddCommMonoid k] {N : Type u_3} {P : Type u_4} [AddCommMonoid N] [AddCommMonoid P] {H : Type u_5} [FunLike H N P] [AddMonoidHomClass H N P] (h : H) (f : SkewMonoidAlgebra k G) (g : GkN) :
              h (f.sum g) = f.sum fun (a : G) (b : k) => h (g a b)
              theorem SkewMonoidAlgebra.toFinsupp_sum' {k : Type u_1} {G : Type u_2} [AddCommMonoid k] {k' : Type u_3} {G' : Type u_4} [AddCommMonoid k'] (f : SkewMonoidAlgebra k G) (g : GkSkewMonoidAlgebra k' G') :
              (f.sum g).toFinsupp = f.toFinsupp.sum fun (x1 : G) (x2 : k) => (g x1 x2).toFinsupp

              Variant where the image of g is a SkewMonoidAlgebra.

              theorem SkewMonoidAlgebra.ofFinsupp_sum {k : Type u_1} {G : Type u_2} [AddCommMonoid k] {k' : Type u_3} {G' : Type u_4} [AddCommMonoid k'] (f : G →₀ k) (g : GkG' →₀ k') :
              { toFinsupp := f.sum g } = { toFinsupp := f }.sum fun (x1 : G) (x2 : k) => { toFinsupp := g x1 x2 }
              theorem SkewMonoidAlgebra.sum_add_index' {k : Type u_1} {G : Type u_2} [AddCommMonoid k] {S : Type u_3} [AddCommMonoid S] {f g : SkewMonoidAlgebra k G} {h : GkS} (hf : ∀ (i : G), h i 0 = 0) (h_add : ∀ (a : G) (b₁ b₂ : k), h a (b₁ + b₂) = h a b₁ + h a b₂) :
              (f + g).sum h = f.sum h + g.sum h

              Taking the sum under h is an additive homomorphism, if h is an additive homomorphism. This is a more specific version of SkewMonoidAlgebra.sum_add_index with simpler hypotheses.

              theorem SkewMonoidAlgebra.sum_add_index {k : Type u_1} {G : Type u_2} [AddCommMonoid k] {S : Type u_3} [DecidableEq G] [AddCommMonoid S] {f g : SkewMonoidAlgebra k G} {h : GkS} (h_zero : af.support g.support, h a 0 = 0) (h_add : af.support g.support, ∀ (b₁ b₂ : k), h a (b₁ + b₂) = h a b₁ + h a b₂) :
              (f + g).sum h = f.sum h + g.sum h

              Taking the sum under h is an additive homomorphism, if h is an additive homomorphism. This is a more general version of SkewMonoidAlgebra.sum_add_index'; the latter has simpler hypotheses.

              @[simp]
              theorem SkewMonoidAlgebra.sum_add {k : Type u_1} {G : Type u_2} [AddCommMonoid k] {S : Type u_3} [AddCommMonoid S] (p : SkewMonoidAlgebra k G) (f g : GkS) :
              (p.sum fun (n : G) (x : k) => f n x + g n x) = p.sum f + p.sum g
              @[simp]
              theorem SkewMonoidAlgebra.sum_zero_index {k : Type u_1} {G : Type u_2} [AddCommMonoid k] {S : Type u_3} [AddCommMonoid S] {f : GkS} :
              sum 0 f = 0
              @[simp]
              theorem SkewMonoidAlgebra.sum_zero {k : Type u_1} {G : Type u_2} [AddCommMonoid k] {N : Type u_3} [AddCommMonoid N] {f : SkewMonoidAlgebra k G} :
              (f.sum fun (x : G) (x : k) => 0) = 0
              theorem SkewMonoidAlgebra.sum_sum_index {α : Type u_3} {β : Type u_4} {M : Type u_5} {N : Type u_6} {P : Type u_7} [AddCommMonoid M] [AddCommMonoid N] [AddCommMonoid P] {f : SkewMonoidAlgebra M α} {g : αMSkewMonoidAlgebra N β} {h : βNP} (h_zero : ∀ (a : β), h a 0 = 0) (h_add : ∀ (a : β) (b₁ b₂ : N), h a (b₁ + b₂) = h a b₁ + h a b₂) :
              (f.sum g).sum h = f.sum fun (a : α) (b : M) => (g a b).sum h
              @[simp]
              theorem SkewMonoidAlgebra.coeff_sum {k : Type u_1} {G : Type u_2} [AddCommMonoid k] {k' : Type u_3} {G' : Type u_4} [AddCommMonoid k'] {f : SkewMonoidAlgebra k G} {g : GkSkewMonoidAlgebra k' G'} {a₂ : G'} :
              (f.sum g).coeff a₂ = f.sum fun (a₁ : G) (b : k) => (g a₁ b).coeff a₂
              theorem SkewMonoidAlgebra.sum_mul {k : Type u_1} {G : Type u_2} [AddCommMonoid k] {S : Type u_3} [NonUnitalNonAssocSemiring S] (b : S) (s : SkewMonoidAlgebra k G) {f : GkS} :
              s.sum f * b = s.sum fun (a : G) (c : k) => f a c * b
              theorem SkewMonoidAlgebra.mul_sum {k : Type u_1} {G : Type u_2} [AddCommMonoid k] {S : Type u_3} [NonUnitalNonAssocSemiring S] (b : S) (s : SkewMonoidAlgebra k G) {f : GkS} :
              b * s.sum f = s.sum fun (a : G) (c : k) => b * f a c
              @[simp]
              theorem SkewMonoidAlgebra.sum_ite_eq' {k : Type u_1} {G : Type u_2} [AddCommMonoid k] {N : Type u_3} [AddCommMonoid N] [DecidableEq G] (f : SkewMonoidAlgebra k G) (a : G) (b : GkN) :
              (f.sum fun (x : G) (v : k) => if x = a then b x v else 0) = if a f.support then b a (f.coeff a) else 0

              Analogue of Finsupp.sum_ite_eq' for SkewMonoidAlgebra.

              theorem SkewMonoidAlgebra.smul_sum {k : Type u_1} {G : Type u_2} [AddCommMonoid k] {M : Type u_3} {R : Type u_4} [AddCommMonoid M] [DistribSMul R M] {v : SkewMonoidAlgebra k G} {c : R} {h : GkM} :
              c v.sum h = v.sum fun (a : G) (b : k) => c h a b
              theorem SkewMonoidAlgebra.sum_congr {k : Type u_1} {G : Type u_2} [AddCommMonoid k] {f : SkewMonoidAlgebra k G} {M : Type u_3} [AddCommMonoid M] {g₁ g₂ : GkM} (h : xf.support, g₁ x (f.coeff x) = g₂ x (f.coeff x)) :
              f.sum g₁ = f.sum g₂
              theorem SkewMonoidAlgebra.induction_on {k : Type u_1} {G : Type u_2} [AddCommMonoid k] {p : SkewMonoidAlgebra k GProp} (f : SkewMonoidAlgebra k G) (zero : p 0) (single : ∀ (g : G) (a : k), p (single g a)) (add : ∀ (f g : SkewMonoidAlgebra k G), p fp gp (f + g)) :
              p f
              theorem SkewMonoidAlgebra.induction_on' {k : Type u_1} {G : Type u_2} [AddCommMonoid k] [instNonempty : Nonempty G] {p : SkewMonoidAlgebra k GProp} (f : SkewMonoidAlgebra k G) (single : ∀ (g : G) (a : k), p (single g a)) (add : ∀ (f g : SkewMonoidAlgebra k G), p fp gp (f + g)) :
              p f

              Slightly less general but more convenient version of SkewMonoidAlgebra.induction_on.

              theorem SkewMonoidAlgebra.addHom_ext {k : Type u_1} {G : Type u_2} [AddCommMonoid k] {M : Type u_3} [AddZeroClass M] {f g : SkewMonoidAlgebra k G →+ M} (h : ∀ (a : G) (b : k), f (single a b) = g (single a b)) :
              f = g

              If two additive homomorphisms from SkewMonoidAlgebra k G are equal on each single a b, then they are equal.

              theorem SkewMonoidAlgebra.addHom_ext_iff {k : Type u_1} {G : Type u_2} [AddCommMonoid k] {M : Type u_3} [AddZeroClass M] {f g : SkewMonoidAlgebra k G →+ M} :
              f = g ∀ (a : G) (b : k), f (single a b) = g (single a b)
              def SkewMonoidAlgebra.mapDomain {k : Type u_1} {G : Type u_2} [AddCommMonoid k] {G' : Type u_3} (f : GG') :

              Given f : G → G' and v : SkewMonoidAlgebra k G, mapDomain f v : SkewMonoidAlgebra k G' is the finitely supported additive homomorphism whose value at a : G' is the sum of v x over all x such that f x = a. Note that SkewMonoidAlgebra.mapDomain is defined as an AddHom, while MonoidAlgebra.mapDomain is defined as a function.

              Equations
              Instances For
                @[simp]
                theorem SkewMonoidAlgebra.mapDomain_apply {k : Type u_1} {G : Type u_2} [AddCommMonoid k] {G' : Type u_3} (f : GG') (v : SkewMonoidAlgebra k G) :
                (mapDomain f) v = v.sum fun (a : G) => single (f a)
                theorem SkewMonoidAlgebra.toFinsupp_mapDomain {k : Type u_1} {G : Type u_2} [AddCommMonoid k] {G' : Type u_3} (f : GG') (v : SkewMonoidAlgebra k G) :
                theorem SkewMonoidAlgebra.mapDomain_comp {k : Type u_1} {G : Type u_2} [AddCommMonoid k] {G' : Type u_3} {G'' : Type u_4} {f : GG'} {g : G'G''} {v : SkewMonoidAlgebra k G} :
                (mapDomain (g f)) v = (mapDomain g) ((mapDomain f) v)
                theorem SkewMonoidAlgebra.sum_mapDomain_index {k : Type u_1} {G : Type u_2} [AddCommMonoid k] {G' : Type u_3} {f : GG'} {v : SkewMonoidAlgebra k G} {k' : Type u_5} [AddCommMonoid k'] {h : G'kk'} (h_zero : ∀ (b : G'), h b 0 = 0) (h_add : ∀ (b : G') (m₁ m₂ : k), h b (m₁ + m₂) = h b m₁ + h b m₂) :
                ((mapDomain f) v).sum h = v.sum fun (a : G) (m : k) => h (f a) m
                theorem SkewMonoidAlgebra.mapDomain_single {k : Type u_1} {G : Type u_2} [AddCommMonoid k] {G' : Type u_3} {f : GG'} {a : G} {b : k} :
                (mapDomain f) (single a b) = single (f a) b
                theorem SkewMonoidAlgebra.mapDomain_smul {k : Type u_1} {G : Type u_2} [AddCommMonoid k] {G' : Type u_3} {f : GG'} {v : SkewMonoidAlgebra k G} {R : Type u_5} [Monoid R] [DistribMulAction R k] {b : R} :
                (mapDomain f) (b v) = b (mapDomain f) v
                def SkewMonoidAlgebra.liftNC {k : Type u_1} {G : Type u_2} [AddCommMonoid k] {R : Type u_5} [NonUnitalNonAssocSemiring R] (f : k →+ R) (g : GR) :

                A non-commutative version of SkewMonoidAlgebra.lift: given an additive homomorphism f : k →+ R and a homomorphism g : G → R, returns the additive homomorphism from SkewMonoidAlgebra k G such that liftNC f g (single a b) = f b * g a.

                If k is a semiring and f is a ring homomorphism and for all x : R, y : G the equality (f (y • x)) * g y = (g y) * (f x)) holds, then the result is a ring homomorphism (see SkewMonoidAlgebra.liftNCRingHom).

                If R is a k-algebra and f = algebraMap k R, then the result is an algebra homomorphism called SkewMonoidAlgebra.lift.

                Equations
                Instances For
                  @[simp]
                  theorem SkewMonoidAlgebra.liftNC_single {k : Type u_1} {G : Type u_2} [AddCommMonoid k] {R : Type u_5} [NonUnitalNonAssocSemiring R] (f : k →+ R) (g : GR) (a : G) (b : k) :
                  (liftNC f g) (single a b) = f b * g a
                  theorem SkewMonoidAlgebra.eq_liftNC {k : Type u_1} {G : Type u_2} [AddCommMonoid k] {R : Type u_5} [NonUnitalNonAssocSemiring R] (f : k →+ R) (g : GR) (l : SkewMonoidAlgebra k G →+ R) (h : ∀ (a : G) (b : k), l (single a b) = f b * g a) :
                  l = liftNC f g
                  @[simp]
                  theorem SkewMonoidAlgebra.ofFinsupp_neg {k : Type u_1} {G : Type u_2} [AddGroup k] {a : G →₀ k} :
                  { toFinsupp := -a } = -{ toFinsupp := a }
                  Equations
                  • One or more equations did not get rendered due to their size.
                  @[simp]
                  @[simp]
                  theorem SkewMonoidAlgebra.ofFinsupp_sub {k : Type u_1} {G : Type u_2} [AddGroup k] {a b : G →₀ k} :
                  { toFinsupp := a - b } = { toFinsupp := a } - { toFinsupp := b }
                  @[simp]
                  theorem SkewMonoidAlgebra.toFinsupp_sub {k : Type u_1} {G : Type u_2} [AddGroup k] (a b : SkewMonoidAlgebra k G) :
                  @[simp]
                  theorem SkewMonoidAlgebra.single_neg {k : Type u_1} {G : Type u_2} [AddGroup k] (a : G) (b : k) :
                  single a (-b) = -single a b
                  Equations
                  • One or more equations did not get rendered due to their size.
                  theorem SkewMonoidAlgebra.intCast_def {k : Type u_1} {G : Type u_2} [AddGroupWithOne k] [One G] (z : ) :
                  z = single 1 z
                  theorem SkewMonoidAlgebra.sum_smul_index {k : Type u_1} {G : Type u_2} {N : Type u_3} [AddCommMonoid N] [NonUnitalNonAssocSemiring k] {g : SkewMonoidAlgebra k G} {b : k} {h : GkN} (h0 : ∀ (i : G), h i 0 = 0) :
                  (b g).sum h = g.sum fun (x1 : G) (x2 : k) => h x1 (b * x2)
                  theorem SkewMonoidAlgebra.sum_smul_index' {k : Type u_1} {G : Type u_2} {N : Type u_3} {R : Type u_4} [AddCommMonoid k] [DistribSMul R k] [AddCommMonoid N] {g : SkewMonoidAlgebra k G} {b : R} {h : GkN} (h0 : ∀ (i : G), h i 0 = 0) :
                  (b g).sum h = g.sum fun (x1 : G) (x2 : k) => h x1 (b x2)
                  @[simp]
                  theorem SkewMonoidAlgebra.liftNC_one {k : Type u_1} {G : Type u_2} {g_hom : Type u_3} {R : Type u_4} [NonAssocSemiring k] [One G] [Semiring R] [FunLike g_hom G R] [OneHomClass g_hom G R] (f : k →+* R) (g : g_hom) :
                  (liftNC f g) 1 = 1
                  instance SkewMonoidAlgebra.instMul {k : Type u_1} {G : Type u_2} [Mul G] [SMul G k] [NonUnitalNonAssocSemiring k] :

                  The product of f g : SkewMonoidAlgebra k G is the finitely supported function whose value at a is the sum of f x * (x • g y) over all pairs x, y such that x * y = a. (Think of a skew group ring.)

                  Equations
                  theorem SkewMonoidAlgebra.mul_def {k : Type u_1} {G : Type u_2} [Mul G] [SMul G k] [NonUnitalNonAssocSemiring k] {f g : SkewMonoidAlgebra k G} :
                  f * g = f.sum fun (a₁ : G) (b₁ : k) => g.sum fun (a₂ : G) (b₂ : k) => single (a₁ * a₂) (b₁ * a₁ b₂)
                  Equations
                  • One or more equations did not get rendered due to their size.
                  theorem SkewMonoidAlgebra.liftNC_mul {k : Type u_1} {G : Type u_2} [Mul G] {R : Type u_3} [Semiring R] [NonAssocSemiring k] [SMul G k] {g_hom : Type u_4} [FunLike g_hom G R] [MulHomClass g_hom G R] (f : k →+* R) (g : g_hom) (a b : SkewMonoidAlgebra k G) (h_comm : ∀ {x y : G}, y a.supportf (y b.coeff x) * g y = g y * f (b.coeff x)) :
                  (liftNC f g) (a * b) = (liftNC f g) a * (liftNC f g) b

                  Semiring structure #

                  Equations
                  • One or more equations did not get rendered due to their size.
                  Equations
                  • One or more equations did not get rendered due to their size.
                  def SkewMonoidAlgebra.liftNCRingHom {k : Type u_1} {G : Type u_2} [Semiring k] [Monoid G] [MulSemiringAction G k] {R : Type u_3} [Semiring R] (f : k →+* R) (g : G →* R) (h_comm : ∀ {x : k} {y : G}, f (y x) * g y = g y * f x) :

                  liftNC as a RingHom, for when f x and g y commute

                  Equations
                  Instances For

                    Derived instances #

                    Equations
                    • One or more equations did not get rendered due to their size.
                    Equations
                    • One or more equations did not get rendered due to their size.
                    Equations
                    • One or more equations did not get rendered due to their size.
                    instance SkewMonoidAlgebra.instRing {k : Type u_1} {G : Type u_2} [Ring k] [Monoid G] [MulSemiringAction G k] :
                    Equations
                    • One or more equations did not get rendered due to their size.
                    instance SkewMonoidAlgebra.instDistribSMul {k : Type u_1} {G : Type u_2} {S : Type u_3} [AddMonoid k] [DistribSMul S k] :
                    Equations
                    instance SkewMonoidAlgebra.instModule {k : Type u_1} {G : Type u_2} {S : Type u_3} [Semiring S] [AddCommMonoid k] [Module S k] :
                    Equations
                    instance SkewMonoidAlgebra.instIsScalarTower {k : Type u_1} {G : Type u_2} {S₁ : Type u_4} {S₂ : Type u_5} [AddMonoid k] [SMul S₁ S₂] [SMulZeroClass S₁ k] [SMulZeroClass S₂ k] [IsScalarTower S₁ S₂ k] :
                    instance SkewMonoidAlgebra.instSMulCommClass {k : Type u_1} {G : Type u_2} {S₁ : Type u_4} {S₂ : Type u_5} [AddMonoid k] [SMulZeroClass S₁ k] [SMulZeroClass S₂ k] [SMulCommClass S₁ S₂ k] :

                    The basis on SkewMonoidAlgebra k G with basis vectors fun i ↦ single i 1

                    Equations
                    Instances For
                      def SkewMonoidAlgebra.comapSMul {G : Type u_2} {M : Type u_6} {α : Type u_7} [Monoid G] [MulAction G α] [AddCommMonoid M] :

                      Scalar multiplication acting on the domain.

                      This is not an instance as it would conflict with the action on the range. See the file test/instance_diamonds.lean for examples of such conflicts.

                      Equations
                      Instances For
                        theorem SkewMonoidAlgebra.comapSMul_def {G : Type u_2} {M : Type u_6} {α : Type u_7} [Monoid G] [AddCommMonoid M] [MulAction G α] (g : G) (f : SkewMonoidAlgebra M α) :
                        g f = (mapDomain fun (x : α) => g x) f
                        @[simp]
                        theorem SkewMonoidAlgebra.comapSMul_single {G : Type u_2} {M : Type u_6} {α : Type u_7} [Monoid G] [AddCommMonoid M] [MulAction G α] (g : G) (a : α) (b : M) :
                        g single a b = single (g a) b
                        def SkewMonoidAlgebra.comapMulAction {G : Type u_2} {M : Type u_6} {α : Type u_7} [Monoid G] [AddCommMonoid M] [MulAction G α] :

                        comapSMul is multiplicative

                        Equations
                        Instances For

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

                          Equations
                          Instances For