Documentation

Atlas.ProjectionTheory.code.MultConvProjection

noncomputable def MultiplicativeConvolution.mulConv_ZMod (q : ) [NeZero q] (f g : ZMod q) (a : ZMod q) :

Multiplicative convolution on ZMod q: $(f *_M g)(a) = \sum_{b, c \in \mathbb{Z}/q,\ bc = a} f(b)\, g(c)$.

Instances For
    noncomputable def MultiplicativeConvolution.modProjection_arith (N q : ) [NeZero q] (f : ) (a : ZMod q) :

    The projection $\pi_q f : \mathbb{Z}/q \to \mathbb{C}$ of an arithmetic function $f : \mathbb{N} \to \mathbb{C}$ truncated to $[0, N)$: at $a \in \mathbb{Z}/q$ it sums $f(n)$ over $n < N$ with $n \equiv a \pmod q$.

    Instances For
      theorem MultiplicativeConvolution.sum_comm4 (N q : ) [NeZero q] (h : ZMod qZMod q) :
      b : ZMod q, c : ZMod q, nFinset.range N, mFinset.range N, h b c n m = nFinset.range N, mFinset.range N, b : ZMod q, c : ZMod q, h b c n m

      Swap the order of four nested sums (two over ZMod q, two over Finset.range N) so that the n, m sums are outermost — used to rearrange double sums in the projection-of-convolution computation.

      theorem MultiplicativeConvolution.mulConv_ZMod_eq_double_sum (N q : ) [NeZero q] (f g : ) (a : ZMod q) :
      mulConv_ZMod q (modProjection_arith N q f) (modProjection_arith N q g) a = nFinset.range N, mFinset.range N, if n * m = a then f n * g m else 0

      Expanding the mod-$q$ multiplicative convolution of two truncated projections: $\bigl(\pi_q f *_M \pi_q g\bigr)(a) = \sum_{n, m < N,\ nm \equiv a} f(n)\, g(m)$.

      theorem MultiplicativeConvolution.sum_product_eq_sum_divisorsAntidiagonal (N : ) (f g : ) (hf : ∀ (n : ), N nf n = 0) (hg : ∀ (n : ), N ng n = 0) (hf0 : f 0 = 0) (hg0 : g 0 = 0) (n : ) (hn : n < N * N) :
      xFinset.range N ×ˢ Finset.range N with x.1 * x.2 = n, f x.1 * g x.2 = xn.divisorsAntidiagonal, f x.1 * g x.2

      If $f, g$ are supported on positive integers $< N$, then for $n < N^2$ the truncated product-sum $\sum_{(d_1, d_2) \in [0,N)^2,\ d_1 d_2 = n} f(d_1) g(d_2)$ equals the sum over the full divisor antidiagonal $\sum_{d_1 d_2 = n} f(d_1) g(d_2)$.

      theorem MultiplicativeConvolution.modProjection_mulConv (N q : ) [NeZero q] (f g : ) (hf : ∀ (n : ), N nf n = 0) (hg : ∀ (n : ), N ng n = 0) (hf0 : f 0 = 0) (hg0 : g 0 = 0) (a : ZMod q) :

      Projection of multiplicative convolution (pointwise form): if $f, g$ are supported on positive integers $< N$, then $\pi_q(f *_M g)(a) = (\pi_q f *_M \pi_q g)(a)$, where the truncation on the left is taken at $N^2$.

      theorem MultiplicativeConvolution.modProjection_mulConv_arithFun (N q : ) [NeZero q] (f g : ArithmeticFunction ) (hf : ∀ (n : ), N nf n = 0) (hg : ∀ (n : ), N ng n = 0) (a : ZMod q) :
      modProjection_arith (N * N) q (fun (n : ) => (f * g) n) a = mulConv_ZMod q (modProjection_arith N q f) (modProjection_arith N q g) a

      Projection-of-convolution identity for ArithmeticFunctions: with the support hypotheses on $f, g$, we have $\pi_q(f * g)(a) = (\pi_q f *_M \pi_q g)(a)$ (here f * g is Dirichlet convolution of arithmetic functions).

      theorem MultiplicativeConvolution.modProjection_mulConv_arithFun' (N q : ) [NeZero q] (f g : ) (hf : ∀ (n : ), N nf n = 0) (hg : ∀ (n : ), N ng n = 0) (hf0 : f 0 = 0) (hg0 : g 0 = 0) :

      Functional form of the projection-of-convolution identity: under the support hypotheses, $\pi_q(f *_M g) = \pi_q f *_M \pi_q g$ as functions on $\mathbb{Z}/q$.

      noncomputable def MultiplicativeConvolution.modProjection_pos (N q : ) [NeZero q] (f : ) (a : ZMod q) :

      The mod-$q$ projection of $f$ on $\mathbb{N}$ truncated to $1 \le n < N$ (positive integers only): $\pi_q^+ f(a) = \sum_{0 < n < N,\ n \equiv a} f(n)$.

      Instances For

        Modify $f : \mathbb{N} \to \mathbb{C}$ so that its value at $0$ is set to $0$, leaving all other values unchanged.

        Instances For

          zeroAt0 f vanishes at $0$.

          theorem MultiplicativeConvolution.zeroAt0_support (f : ) (N : ) (hf : ∀ (n : ), N nf n = 0) (n : ) :
          N nzeroAt0 f n = 0

          If $f$ is supported on $n < N$, so is zeroAt0 f.

          The positive-truncation projection equals the arithmetic projection of $f$ with its value at $0$ zeroed out: $\pi_q^+ f = \pi_q (\mathrm{zeroAt0}\, f)$.

          theorem MultiplicativeConvolution.mulConv_pos_eq_zeroAt0 (f g : ) (n : ) (hn : n 0) :
          mulConv f g n = mulConv (zeroAt0 f) (zeroAt0 g) n

          For $n \ne 0$, the multiplicative convolution $(f *_M g)(n)$ is unchanged if we replace $f, g$ by their zeroAt0 modifications (the value at $0$ does not contribute when $n > 0$).

          theorem MultiplicativeConvolution.modProjection_mulConv_pos (N q : ) [NeZero q] (f g : ) (hf : ∀ (n : ), N nf n = 0) (hg : ∀ (n : ), N ng n = 0) :

          Projection of multiplicative convolution (positive-truncation version): if $f, g$ are supported on $n < N$, then $\pi_q^+(f *_M g) = \pi_q^+ f *_M \pi_q^+ g$ as functions on $\mathbb{Z}/q$.