File: Mathlib/NumberTheory/LSeries/Convolution.lean

full_name: toArithmeticFunction
code: /-- We turn any function `ℕ → R` into an `ArithmeticFunction R` by setting its value at `0`
to be zero. -/
def toArithmeticFunction {R : Type*} [Zero R] (f : ℕ → R) : ArithmeticFunction R 
goal: ArithmeticFunction R

full_name: toArithmeticFunction_congr
code: lemma toArithmeticFunction_congr {R : Type*} [Zero R] {f f' : ℕ → R}
    (h : ∀ {n}, n ≠ 0 → f n = f' n) :
    toArithmeticFunction f = toArithmeticFunction f' 
goal: toArithmeticFunction f = toArithmeticFunction f'

full_name: ArithmeticFunction.toArithmeticFunction_eq_self
code: /-- If we consider an arithmetic function just as a function and turn it back into an
arithmetic function, it is the same as before. -/
@[simp]
lemma ArithmeticFunction.toArithmeticFunction_eq_self {R : Type*} [Zero R]
    (f : ArithmeticFunction R) :
    toArithmeticFunction f = f 
goal: toArithmeticFunction ⇑f = f

full_name: LSeries.convolution
code: /-- Dirichlet convolution of two sequences.

We define this in terms of the already existing definition for arithmetic functions. -/
noncomputable def LSeries.convolution {R : Type*} [Semiring R] (f g : ℕ → R) : ℕ → R 
goal: ℕ → R

full_name: LSeries.notation._aux_Mathlib_NumberTheory_LSeries_Convolution___unexpand_LSeries_convolution_1
code: @[inherit_doc]
scoped[LSeries.notation] infixl:70 " ⍟ " => LSeries.convolution
goal: Lean.PrettyPrinter.Unexpander

full_name: LSeries.notation.«_aux_Mathlib_NumberTheory_LSeries_Convolution___macroRules_LSeries_notation_term_⍟__1»
code: @[inherit_doc]
scoped[LSeries.notation] infixl:70 " ⍟ " => LSeries.convolution
goal: Lean.Macro

full_name: LSeries.convolution_congr
code: lemma LSeries.convolution_congr {R : Type*} [Semiring R] {f f' g g' : ℕ → R}
    (hf : ∀ {n}, n ≠ 0 → f n = f' n) (hg : ∀ {n}, n ≠ 0 → g n = g' n) :
    f ⍟ g = f' ⍟ g' 
goal: f ⍟ g = f' ⍟ g'

full_name: ArithmeticFunction.coe_mul
code: /-- The product of two arithmetic functions defines the same function as the Dirichlet convolution
of the functions defined by them. -/
lemma ArithmeticFunction.coe_mul {R : Type*} [Semiring R] (f g : ArithmeticFunction R) :
    f ⍟ g = ⇑(f * g) 
goal: ⇑f ⍟ ⇑g = ⇑(f * g)

full_name: LSeries.convolution_def
code: lemma convolution_def {R : Type*} [Semiring R] (f g : ℕ → R) :
    f ⍟ g = fun n ↦ ∑ p ∈ n.divisorsAntidiagonal, f p.1 * g p.2 
goal: f ⍟ g = fun n => ∑ p ∈ n.divisorsAntidiagonal, f p.1 * g p.2

full_name: LSeries.convolution_map_zero
code: @[simp]
lemma convolution_map_zero {R : Type*} [Semiring R] (f g : ℕ → R) : (f ⍟ g) 0 = 0 
goal: (f ⍟ g) 0 = 0

full_name: LSeries.term_convolution
code: /-- We give an expression of the `LSeries.term` of the convolution of two functions
in terms of a sum over `Nat.divisorsAntidiagonal`. -/
lemma term_convolution (f g : ℕ → ℂ) (s : ℂ) (n : ℕ) :
    term (f ⍟ g) s n = ∑ p ∈ n.divisorsAntidiagonal, term f s p.1 * term g s p.2 
goal: LSeries.term (f ⍟ g) s n = ∑ p ∈ n.divisorsAntidiagonal, LSeries.term f s p.1 * LSeries.term g s p.2

full_name: LSeries.term_convolution'
code: /-- We give an expression of the `LSeries.term` of the convolution of two functions
in terms of an a priori infinte sum over all pairs `(k, m)` with `k * m = n`
(the set we sum over is infinite when `n = 0`). This is the version needed for the
proof that `L (f ⍟ g) = L f * L g`. -/
lemma term_convolution' (f g : ℕ → ℂ) (s : ℂ) :
    term (f ⍟ g) s = fun n ↦
      ∑' (b : (fun p : ℕ × ℕ ↦ p.1 * p.2) ⁻¹' {n}), term f s b.val.1 * term g s b.val.2 
goal: LSeries.term (f ⍟ g) s = fun n =>
  ∑' (b : ↑((fun p => p.1 * p.2) ⁻¹' {n})), LSeries.term f s (↑b).1 * LSeries.term g s (↑b).2

full_name: LSeriesHasSum.convolution
code: /-- The L-series of the convolution product `f ⍟ g` of two sequences `f` and `g`
equals the product of their L-series, assuming both L-series converge. -/
lemma LSeriesHasSum.convolution {f g : ℕ → ℂ} {s a b : ℂ} (hf : LSeriesHasSum f s a)
    (hg : LSeriesHasSum g s b) :
    LSeriesHasSum (f ⍟ g) s (a * b) 
goal: LSeriesHasSum (f ⍟ g) s (a * b)

full_name: LSeries_convolution'
code: /-- The L-series of the convolution product `f ⍟ g` of two sequences `f` and `g`
equals the product of their L-series, assuming both L-series converge. -/
lemma LSeries_convolution' {f g : ℕ → ℂ} {s : ℂ} (hf : LSeriesSummable f s)
    (hg : LSeriesSummable g s) :
    LSeries (f ⍟ g) s = LSeries f s * LSeries g s 
goal: L (f ⍟ g) s = L f s * L g s

full_name: LSeries_convolution
code: /-- The L-series of the convolution product `f ⍟ g` of two sequences `f` and `g`
equals the product of their L-series in their common half-plane of absolute convergence. -/
lemma LSeries_convolution {f g : ℕ → ℂ} {s : ℂ}
    (hf : abscissaOfAbsConv f < s.re) (hg : abscissaOfAbsConv g < s.re) :
    LSeries (f ⍟ g) s = LSeries f s * LSeries g s 
goal: L (f ⍟ g) s = L f s * L g s

full_name: LSeriesSummable.convolution
code: /-- The L-series of the convolution product `f ⍟ g` of two sequences `f` and `g`
is summable when both L-series are summable. -/
lemma LSeriesSummable.convolution {f g : ℕ → ℂ} {s : ℂ} (hf : LSeriesSummable f s)
    (hg : LSeriesSummable g s) :
    LSeriesSummable (f ⍟ g) s 
goal: LSeriesSummable (f ⍟ g) s

full_name: ArithmeticFunction.LSeriesHasSum_mul
code: /-- The L-series of the (convolution) product of two `ℂ`-valued arithmetic functions `f` and `g`
equals the product of their L-series, assuming both L-series converge. -/
lemma LSeriesHasSum_mul {f g : ArithmeticFunction ℂ} {s a b : ℂ} (hf : LSeriesHasSum ↗f s a)
    (hg : LSeriesHasSum ↗g s b) :
    LSeriesHasSum ↗(f * g) s (a * b) 
goal: LSeriesHasSum (fun n => (f * g) n) s (a * b)

full_name: ArithmeticFunction.LSeries_mul'
code: /-- The L-series of the (convolution) product of two `ℂ`-valued arithmetic functions `f` and `g`
equals the product of their L-series, assuming both L-series converge. -/
lemma LSeries_mul' {f g : ArithmeticFunction ℂ} {s : ℂ} (hf : LSeriesSummable ↗f s)
    (hg : LSeriesSummable ↗g s) :
    LSeries ↗(f * g) s = LSeries ↗f s * LSeries ↗g s 
goal: L (fun n => (f * g) n) s = L (fun n => f n) s * L (fun n => g n) s

full_name: ArithmeticFunction.LSeries_mul
code: /-- The L-series of the (convolution) product of two `ℂ`-valued arithmetic functions `f` and `g`
equals the product of their L-series in their common half-plane of absolute convergence. -/
lemma LSeries_mul {f g : ArithmeticFunction ℂ} {s : ℂ}
    (hf : abscissaOfAbsConv ↗f < s.re) (hg : abscissaOfAbsConv ↗g < s.re) :
    LSeries ↗(f * g) s = LSeries ↗f s * LSeries ↗g s 
goal: L (fun n => (f * g) n) s = L (fun n => f n) s * L (fun n => g n) s

full_name: ArithmeticFunction.LSeriesSummable_mul
code: /-- The L-series of the (convolution) product of two `ℂ`-valued arithmetic functions `f` and `g`
is summable when both L-series are summable. -/
lemma LSeriesSummable_mul {f g : ArithmeticFunction ℂ} {s : ℂ} (hf : LSeriesSummable ↗f s)
    (hg : LSeriesSummable ↗g s) :
    LSeriesSummable ↗(f * g) s 
goal: LSeriesSummable (fun n => (f * g) n) s