Documentation

Mathlib.Topology.Algebra.InfiniteSum.DiscreteConvolution

Discrete Convolution #

Discrete convolution over monoids: (f ⋆[L] g) x is the sum of L (f a) (g b) over all pairs (a, b) with a * b = x, that is, over mulFiber x. Additive monoids are also supported.

Design #

Uses a bilinear map L : E →ₗ[S] E' →ₗ[S] F to combine values, following MeasureTheory.convolution.

The index monoid M can be non-commutative (group algebras R[G] with non-abelian G).

@[to_additive] generates multiplicative and additive versions from a single definition. The mul/add distinction refers to the index monoid M: multiplicative sums over mulFiber x = {(a,b) | a * b = x}, additive sums over addFiber x = {(a,b) | a + b = x}.

Main Definitions #

Main Results #

Notation #

NotationOperation
f ⋆[L] g∑' ab : mulFiber x, L (f ab.1.1) (g ab.1.2)
f ⋆₊[L] g∑' ab : addFiber x, L (f ab.1.1) (g ab.1.2)
f ⋆ᵣ gringConvolution f g
f ⋆ᵣ₊ gaddRingConvolution f g

Precedence design: f:68 and g:67 gives right associativity (f ⋆ g ⋆ h parses as f ⋆ (g ⋆ h)), matching function composition and MeasureTheory.convolution.

Multiplication Fiber #

def DiscreteConvolution.mulFiber {M : Type u_1} [Monoid M] (x : M) :
Set (M × M)

The fiber of multiplication at x: all pairs (a, b) with a * b = x.

Equations
Instances For
    def DiscreteConvolution.addFiber {M : Type u_1} [AddMonoid M] (x : M) :
    Set (M × M)

    The fiber of addition at x: all pairs (a, b) with a + b = x.

    Equations
    Instances For
      theorem DiscreteConvolution.mem_mulFiber {M : Type u_1} [Monoid M] {x : M} {ab : M × M} :
      ab mulFiber x ab.1 * ab.2 = x
      theorem DiscreteConvolution.mem_addFiber {M : Type u_1} [AddMonoid M] {x : M} {ab : M × M} :
      ab addFiber x ab.1 + ab.2 = x

      Convolution Definition and Existence #

      noncomputable def DiscreteConvolution.convolution {M : Type u_1} {S : Type u_2} {E : Type u_3} {E' : Type u_4} {F : Type u_5} [Monoid M] [CommSemiring S] [AddCommMonoid E] [AddCommMonoid E'] [AddCommMonoid F] [Module S E] [Module S E'] [Module S F] [TopologicalSpace F] (L : E →ₗ[S] E' →ₗ[S] F) (f : ME) (g : ME') :
      MF

      The discrete convolution of f and g using bilinear map L: the value at x is the sum of L (f a) (g b) over all pairs (a, b) with a * b = x.

      Equations
      Instances For
        noncomputable def DiscreteConvolution.addConvolution {M : Type u_1} {S : Type u_2} {E : Type u_3} {E' : Type u_4} {F : Type u_5} [AddMonoid M] [CommSemiring S] [AddCommMonoid E] [AddCommMonoid E'] [AddCommMonoid F] [Module S E] [Module S E'] [Module S F] [TopologicalSpace F] (L : E →ₗ[S] E' →ₗ[S] F) (f : ME) (g : ME') :
        MF

        Additive convolution: the value at x is the sum of L (f a) (g b) over all pairs (a, b) with a + b = x.

        Equations
        Instances For

          Notation for discrete convolution with explicit bilinear map: (f ⋆[L] g) x = ∑' ab : mulFiber x, L (f ab.1.1) (g ab.1.2).

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

            Notation for additive convolution with explicit bilinear map: (f ⋆₊[L] g) x = ∑' ab : addFiber x, L (f ab.1.1) (g ab.1.2).

            Equations
            • One or more equations did not get rendered due to their size.
            Instances For
              @[simp]
              theorem DiscreteConvolution.zero_convolution {M : Type u_1} {S : Type u_2} {E : Type u_3} {E' : Type u_4} {F : Type u_5} [Monoid M] [CommSemiring S] [AddCommMonoid E] [AddCommMonoid E'] [AddCommMonoid F] [Module S E] [Module S E'] [Module S F] [TopologicalSpace F] (L : E →ₗ[S] E' →ₗ[S] F) (f : ME') :
              convolution L 0 f = 0
              @[simp]
              theorem DiscreteConvolution.zero_addConvolution {M : Type u_1} {S : Type u_2} {E : Type u_3} {E' : Type u_4} {F : Type u_5} [AddMonoid M] [CommSemiring S] [AddCommMonoid E] [AddCommMonoid E'] [AddCommMonoid F] [Module S E] [Module S E'] [Module S F] [TopologicalSpace F] (L : E →ₗ[S] E' →ₗ[S] F) (f : ME') :
              @[simp]
              theorem DiscreteConvolution.convolution_zero {M : Type u_1} {S : Type u_2} {E : Type u_3} {E' : Type u_4} {F : Type u_5} [Monoid M] [CommSemiring S] [AddCommMonoid E] [AddCommMonoid E'] [AddCommMonoid F] [Module S E] [Module S E'] [Module S F] [TopologicalSpace F] (L : E →ₗ[S] E' →ₗ[S] F) (f : ME) :
              convolution L f 0 = 0
              @[simp]
              theorem DiscreteConvolution.addConvolution_zero {M : Type u_1} {S : Type u_2} {E : Type u_3} {E' : Type u_4} {F : Type u_5} [AddMonoid M] [CommSemiring S] [AddCommMonoid E] [AddCommMonoid E'] [AddCommMonoid F] [Module S E] [Module S E'] [Module S F] [TopologicalSpace F] (L : E →ₗ[S] E' →ₗ[S] F) (f : ME) :
              @[simp]
              theorem DiscreteConvolution.single_convolution {M : Type u_1} {S : Type u_2} {E : Type u_3} {F : Type u_5} [Monoid M] [CommSemiring S] [AddCommMonoid E] [AddCommMonoid F] [Module S E] [Module S F] [TopologicalSpace F] [DecidableEq M] (L : E →ₗ[S] F →ₗ[S] F) (e : E) (f : MF) (hL : ∀ (y : F), (L e) y = y) :
              convolution L (Pi.single 1 e) f = f
              @[simp]
              theorem DiscreteConvolution.single_addConvolution {M : Type u_1} {S : Type u_2} {E : Type u_3} {F : Type u_5} [AddMonoid M] [CommSemiring S] [AddCommMonoid E] [AddCommMonoid F] [Module S E] [Module S F] [TopologicalSpace F] [DecidableEq M] (L : E →ₗ[S] F →ₗ[S] F) (e : E) (f : MF) (hL : ∀ (y : F), (L e) y = y) :
              @[simp]
              theorem DiscreteConvolution.convolution_single {M : Type u_1} {S : Type u_2} {E : Type u_3} {F : Type u_5} [Monoid M] [CommSemiring S] [AddCommMonoid E] [AddCommMonoid F] [Module S E] [Module S F] [TopologicalSpace F] [DecidableEq M] (L : F →ₗ[S] E →ₗ[S] F) (e : E) (f : MF) (hL : ∀ (y : F), (L y) e = y) :
              convolution L f (Pi.single 1 e) = f
              @[simp]
              theorem DiscreteConvolution.addConvolution_single {M : Type u_1} {S : Type u_2} {E : Type u_3} {F : Type u_5} [AddMonoid M] [CommSemiring S] [AddCommMonoid E] [AddCommMonoid F] [Module S E] [Module S F] [TopologicalSpace F] [DecidableEq M] (L : F →ₗ[S] E →ₗ[S] F) (e : E) (f : MF) (hL : ∀ (y : F), (L y) e = y) :
              def DiscreteConvolution.ConvolutionExistsAt {M : Type u_1} {S : Type u_2} {E : Type u_3} {E' : Type u_4} {F : Type u_5} [Monoid M] [CommSemiring S] [AddCommMonoid E] [AddCommMonoid E'] [AddCommMonoid F] [Module S E] [Module S E'] [Module S F] [TopologicalSpace F] (L : E →ₗ[S] E' →ₗ[S] F) (f : ME) (g : ME') (x : M) :

              The convolution of f and g with bilinear map L exists at x: the family ab ↦ L (f ab.1.1) (g ab.1.2) indexed by mulFiber x is summable.

              Equations
              Instances For
                def DiscreteConvolution.AddConvolutionExistsAt {M : Type u_1} {S : Type u_2} {E : Type u_3} {E' : Type u_4} {F : Type u_5} [AddMonoid M] [CommSemiring S] [AddCommMonoid E] [AddCommMonoid E'] [AddCommMonoid F] [Module S E] [Module S E'] [Module S F] [TopologicalSpace F] (L : E →ₗ[S] E' →ₗ[S] F) (f : ME) (g : ME') (x : M) :

                The additive convolution of f and g with bilinear map L exists at x: the family ab ↦ L (f ab.1.1) (g ab.1.2) indexed by addFiber x is summable.

                Equations
                Instances For
                  def DiscreteConvolution.ConvolutionExists {M : Type u_1} {S : Type u_2} {E : Type u_3} {E' : Type u_4} {F : Type u_5} [Monoid M] [CommSemiring S] [AddCommMonoid E] [AddCommMonoid E'] [AddCommMonoid F] [Module S E] [Module S E'] [Module S F] [TopologicalSpace F] (L : E →ₗ[S] E' →ₗ[S] F) (f : ME) (g : ME') :

                  The convolution of f and g with bilinear map L exists at every point, that is, ConvolutionExistsAt L f g x holds for every x.

                  This does not assert that the resulting function convolution L f g is summable over M.

                  Equations
                  Instances For
                    def DiscreteConvolution.AddConvolutionExists {M : Type u_1} {S : Type u_2} {E : Type u_3} {E' : Type u_4} {F : Type u_5} [AddMonoid M] [CommSemiring S] [AddCommMonoid E] [AddCommMonoid E'] [AddCommMonoid F] [Module S E] [Module S E'] [Module S F] [TopologicalSpace F] (L : E →ₗ[S] E' →ₗ[S] F) (f : ME) (g : ME') :

                    The additive convolution of f and g with bilinear map L exists at every point, that is, AddConvolutionExistsAt L f g x holds for every x.

                    This does not assert that the resulting function addConvolution L f g is summable over M.

                    Equations
                    Instances For
                      theorem DiscreteConvolution.ConvolutionExistsAt.distrib_add {M : Type u_1} {S : Type u_2} {E : Type u_3} {E' : Type u_4} {F : Type u_5} [Monoid M] [CommSemiring S] [AddCommMonoid E] [AddCommMonoid E'] [AddCommMonoid F] [Module S E] [Module S E'] [Module S F] [TopologicalSpace F] [T2Space F] [ContinuousAdd F] {f : ME} {g g' : ME'} {x : M} (L : E →ₗ[S] E' →ₗ[S] F) (hfg : ConvolutionExistsAt L f g x) (hfg' : ConvolutionExistsAt L f g' x) :
                      convolution L f (g + g') x = convolution L f g x + convolution L f g' x
                      theorem DiscreteConvolution.AddConvolutionExistsAt.distrib_add {M : Type u_1} {S : Type u_2} {E : Type u_3} {E' : Type u_4} {F : Type u_5} [AddMonoid M] [CommSemiring S] [AddCommMonoid E] [AddCommMonoid E'] [AddCommMonoid F] [Module S E] [Module S E'] [Module S F] [TopologicalSpace F] [T2Space F] [ContinuousAdd F] {f : ME} {g g' : ME'} {x : M} (L : E →ₗ[S] E' →ₗ[S] F) (hfg : AddConvolutionExistsAt L f g x) (hfg' : AddConvolutionExistsAt L f g' x) :
                      addConvolution L f (g + g') x = addConvolution L f g x + addConvolution L f g' x
                      theorem DiscreteConvolution.ConvolutionExists.distrib_add {M : Type u_1} {S : Type u_2} {E : Type u_3} {E' : Type u_4} {F : Type u_5} [Monoid M] [CommSemiring S] [AddCommMonoid E] [AddCommMonoid E'] [AddCommMonoid F] [Module S E] [Module S E'] [Module S F] [TopologicalSpace F] [T2Space F] [ContinuousAdd F] {f : ME} {g g' : ME'} (L : E →ₗ[S] E' →ₗ[S] F) (hfg : ConvolutionExists L f g) (hfg' : ConvolutionExists L f g') :
                      convolution L f (g + g') = convolution L f g + convolution L f g'
                      theorem DiscreteConvolution.AddConvolutionExists.distrib_add {M : Type u_1} {S : Type u_2} {E : Type u_3} {E' : Type u_4} {F : Type u_5} [AddMonoid M] [CommSemiring S] [AddCommMonoid E] [AddCommMonoid E'] [AddCommMonoid F] [Module S E] [Module S E'] [Module S F] [TopologicalSpace F] [T2Space F] [ContinuousAdd F] {f : ME} {g g' : ME'} (L : E →ₗ[S] E' →ₗ[S] F) (hfg : AddConvolutionExists L f g) (hfg' : AddConvolutionExists L f g') :
                      theorem DiscreteConvolution.ConvolutionExistsAt.add_distrib {M : Type u_1} {S : Type u_2} {E : Type u_3} {E' : Type u_4} {F : Type u_5} [Monoid M] [CommSemiring S] [AddCommMonoid E] [AddCommMonoid E'] [AddCommMonoid F] [Module S E] [Module S E'] [Module S F] [TopologicalSpace F] [T2Space F] [ContinuousAdd F] {f f' : ME} {g : ME'} {x : M} (L : E →ₗ[S] E' →ₗ[S] F) (hfg : ConvolutionExistsAt L f g x) (hfg' : ConvolutionExistsAt L f' g x) :
                      convolution L (f + f') g x = convolution L f g x + convolution L f' g x
                      theorem DiscreteConvolution.AddConvolutionExistsAt.add_distrib {M : Type u_1} {S : Type u_2} {E : Type u_3} {E' : Type u_4} {F : Type u_5} [AddMonoid M] [CommSemiring S] [AddCommMonoid E] [AddCommMonoid E'] [AddCommMonoid F] [Module S E] [Module S E'] [Module S F] [TopologicalSpace F] [T2Space F] [ContinuousAdd F] {f f' : ME} {g : ME'} {x : M} (L : E →ₗ[S] E' →ₗ[S] F) (hfg : AddConvolutionExistsAt L f g x) (hfg' : AddConvolutionExistsAt L f' g x) :
                      addConvolution L (f + f') g x = addConvolution L f g x + addConvolution L f' g x
                      theorem DiscreteConvolution.ConvolutionExists.add_distrib {M : Type u_1} {S : Type u_2} {E : Type u_3} {E' : Type u_4} {F : Type u_5} [Monoid M] [CommSemiring S] [AddCommMonoid E] [AddCommMonoid E'] [AddCommMonoid F] [Module S E] [Module S E'] [Module S F] [TopologicalSpace F] [T2Space F] [ContinuousAdd F] {f f' : ME} {g : ME'} (L : E →ₗ[S] E' →ₗ[S] F) (hfg : ConvolutionExists L f g) (hfg' : ConvolutionExists L f' g) :
                      convolution L (f + f') g = convolution L f g + convolution L f' g
                      theorem DiscreteConvolution.AddConvolutionExists.add_distrib {M : Type u_1} {S : Type u_2} {E : Type u_3} {E' : Type u_4} {F : Type u_5} [AddMonoid M] [CommSemiring S] [AddCommMonoid E] [AddCommMonoid E'] [AddCommMonoid F] [Module S E] [Module S E'] [Module S F] [TopologicalSpace F] [T2Space F] [ContinuousAdd F] {f f' : ME} {g : ME'} (L : E →ₗ[S] E' →ₗ[S] F) (hfg : AddConvolutionExists L f g) (hfg' : AddConvolutionExists L f' g) :
                      theorem DiscreteConvolution.ConvolutionExistsAt.smul_convolution {M : Type u_1} {S : Type u_2} {E : Type u_3} {E' : Type u_4} [Monoid M] [CommSemiring S] [AddCommMonoid E] [AddCommMonoid E'] [Module S E] [Module S E'] {F : Type u_8} [AddCommMonoid F] [Module S F] [TopologicalSpace F] [ContinuousConstSMul S F] [T2Space F] {c : S} {f : ME} {g : ME'} {x : M} (L : E →ₗ[S] E' →ₗ[S] F) (hfg : ConvolutionExistsAt L f g x) :
                      convolution L (c f) g x = c convolution L f g x
                      theorem DiscreteConvolution.AddConvolutionExistsAt.vadd_convolution {M : Type u_1} {S : Type u_2} {E : Type u_3} {E' : Type u_4} [AddMonoid M] [CommSemiring S] [AddCommMonoid E] [AddCommMonoid E'] [Module S E] [Module S E'] {F : Type u_8} [AddCommMonoid F] [Module S F] [TopologicalSpace F] [ContinuousConstSMul S F] [T2Space F] {c : S} {f : ME} {g : ME'} {x : M} (L : E →ₗ[S] E' →ₗ[S] F) (hfg : AddConvolutionExistsAt L f g x) :
                      addConvolution L (c f) g x = c addConvolution L f g x
                      theorem DiscreteConvolution.ConvolutionExistsAt.convolution_smul {M : Type u_1} {S : Type u_2} {E : Type u_3} {E' : Type u_4} [Monoid M] [CommSemiring S] [AddCommMonoid E] [AddCommMonoid E'] [Module S E] [Module S E'] {F : Type u_8} [AddCommMonoid F] [Module S F] [TopologicalSpace F] [ContinuousConstSMul S F] [T2Space F] {c : S} {f : ME} {g : ME'} {x : M} (L : E →ₗ[S] E' →ₗ[S] F) (hfg : ConvolutionExistsAt L f g x) :
                      convolution L f (c g) x = c convolution L f g x
                      theorem DiscreteConvolution.AddConvolutionExistsAt.convolution_vadd {M : Type u_1} {S : Type u_2} {E : Type u_3} {E' : Type u_4} [AddMonoid M] [CommSemiring S] [AddCommMonoid E] [AddCommMonoid E'] [Module S E] [Module S E'] {F : Type u_8} [AddCommMonoid F] [Module S F] [TopologicalSpace F] [ContinuousConstSMul S F] [T2Space F] {c : S} {f : ME} {g : ME'} {x : M} (L : E →ₗ[S] E' →ₗ[S] F) (hfg : AddConvolutionExistsAt L f g x) :
                      addConvolution L f (c g) x = c addConvolution L f g x

                      Finite Multiplication Fibers #

                      Multiplication fibers are finite when the index monoid has Finset.HasMulAntidiagonal.

                      Addition fibers are finite when the index monoid has Finset.HasAntidiagonal.

                      theorem DiscreteConvolution.convolution_eq_sum_mulAntidiagonal {M : Type u_1} {S : Type u_2} {E : Type u_3} {E' : Type u_4} {F : Type u_5} [Monoid M] [Finset.HasMulAntidiagonal M] [CommSemiring S] [AddCommMonoid E] [AddCommMonoid E'] [AddCommMonoid F] [Module S E] [Module S E'] [Module S F] [TopologicalSpace F] (L : E →ₗ[S] E' →ₗ[S] F) (f : ME) (g : ME') (x : M) :
                      convolution L f g x = abFinset.mulAntidiagonal x, (L (f ab.1)) (g ab.2)

                      Convolution is a finite sum when the index monoid has Finset.HasMulAntidiagonal.

                      theorem DiscreteConvolution.addConvolution_eq_sum_antidiagonal {M : Type u_1} {S : Type u_2} {E : Type u_3} {E' : Type u_4} {F : Type u_5} [AddMonoid M] [Finset.HasAntidiagonal M] [CommSemiring S] [AddCommMonoid E] [AddCommMonoid E'] [AddCommMonoid F] [Module S E] [Module S E'] [Module S F] [TopologicalSpace F] (L : E →ₗ[S] E' →ₗ[S] F) (f : ME) (g : ME') (x : M) :
                      addConvolution L f g x = abFinset.antidiagonal x, (L (f ab.1)) (g ab.2)

                      Additive convolution is a finite sum when the index monoid has Finset.HasAntidiagonal.

                      theorem DiscreteConvolution.convolutionExists_of_hasMulAntidiagonal {M : Type u_1} {S : Type u_2} {E : Type u_3} {E' : Type u_4} {F : Type u_5} [Monoid M] [Finset.HasMulAntidiagonal M] [CommSemiring S] [AddCommMonoid E] [AddCommMonoid E'] [AddCommMonoid F] [Module S E] [Module S E'] [Module S F] [TopologicalSpace F] (L : E →ₗ[S] E' →ₗ[S] F) (f : ME) (g : ME') :

                      Convolution exists whenever the index monoid has Finset.HasMulAntidiagonal, since every fiber is then finite.

                      theorem DiscreteConvolution.addConvolutionExists_of_hasAntidiagonal {M : Type u_1} {S : Type u_2} {E : Type u_3} {E' : Type u_4} {F : Type u_5} [AddMonoid M] [Finset.HasAntidiagonal M] [CommSemiring S] [AddCommMonoid E] [AddCommMonoid E'] [AddCommMonoid F] [Module S E] [Module S E'] [Module S F] [TopologicalSpace F] (L : E →ₗ[S] E' →ₗ[S] F) (f : ME) (g : ME') :

                      Additive convolution exists whenever the index monoid has Finset.HasAntidiagonal, since every fiber is then finite.

                      Commutativity #

                      theorem DiscreteConvolution.convolution_comm {M : Type u_1} {S : Type u_2} {E : Type u_3} [CommMonoid M] [CommSemiring S] [AddCommMonoid E] [Module S E] [TopologicalSpace E] (L : E →ₗ[S] E →ₗ[S] E) (f g : ME) (hL : ∀ (x y : E), (L x) y = (L y) x) :
                      theorem DiscreteConvolution.addConvolution_comm {M : Type u_1} {S : Type u_2} {E : Type u_3} [AddCommMonoid M] [CommSemiring S] [AddCommMonoid E] [Module S E] [TopologicalSpace E] (L : E →ₗ[S] E →ₗ[S] E) (f g : ME) (hL : ∀ (x y : E), (L x) y = (L y) x) :

                      Convolution with Multiplication #

                      noncomputable def DiscreteConvolution.ringConvolution {M : Type u_1} {R : Type u_7} [NonUnitalNonAssocSemiring R] [Monoid M] [TopologicalSpace R] (f g : MR) :
                      MR

                      The discrete convolution of two functions using multiplication to combine their values.

                      Equations
                      Instances For
                        noncomputable def DiscreteConvolution.addRingConvolution {M : Type u_1} {R : Type u_7} [NonUnitalNonAssocSemiring R] [AddMonoid M] [TopologicalSpace R] (f g : MR) :
                        MR

                        The additive-index convolution using multiplication to combine values.

                        Equations
                        Instances For

                          Notation for convolution using multiplication to combine values.

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

                            Notation for additive-index convolution using multiplication to combine values.

                            Equations
                            • One or more equations did not get rendered due to their size.
                            Instances For
                              @[simp]
                              theorem DiscreteConvolution.ringConvolution_apply {M : Type u_1} {R : Type u_7} [NonUnitalNonAssocSemiring R] [Monoid M] [TopologicalSpace R] (f g : MR) (x : M) :
                              ringConvolution f g x = ∑' (ab : (mulFiber x)), f (↑ab).1 * g (↑ab).2
                              @[simp]
                              theorem DiscreteConvolution.addRingConvolution_apply {M : Type u_1} {R : Type u_7} [NonUnitalNonAssocSemiring R] [AddMonoid M] [TopologicalSpace R] (f g : MR) (x : M) :
                              addRingConvolution f g x = ∑' (ab : (addFiber x)), f (↑ab).1 * g (↑ab).2
                              theorem DiscreteConvolution.smul_ringConvolution {M : Type u_1} {S : Type u_2} {R : Type u_7} [Monoid M] [NonUnitalNonAssocSemiring R] [DistribSMul S R] [TopologicalSpace R] [T2Space R] [ContinuousConstSMul S R] [IsScalarTower S R R] (c : S) (f g : MR) (hfg : ConvolutionExists (LinearMap.mul R) f g) :

                              External scalar multiplication in the first factor commutes with convolution.

                              theorem DiscreteConvolution.ringConvolution_smul {M : Type u_1} {S : Type u_2} {R : Type u_7} [Monoid M] [NonUnitalNonAssocSemiring R] [DistribSMul S R] [TopologicalSpace R] [T2Space R] [ContinuousConstSMul S R] [SMulCommClass S R R] (c : S) (f g : MR) (hfg : ConvolutionExists (LinearMap.mul R) f g) :

                              External scalar multiplication in the second factor commutes with convolution.

                              Multiplication convolution as a finite sum over the mulAntidiagonal.

                              Additive-index multiplication convolution as a finite sum over the antidiagonal.