mathlib3 documentation

number_theory.arithmetic_function

Arithmetic Functions and Dirichlet Convolution #

THIS FILE IS SYNCHRONIZED WITH MATHLIB4. Any changes to this file require a corresponding PR to mathlib4.

This file defines arithmetic functions, which are functions from ℕ to a specified type that map 0 to 0. In the literature, they are often instead defined as functions from ℕ+. These arithmetic functions are endowed with a multiplication, given by Dirichlet convolution, and pointwise addition, to form the Dirichlet ring.

Main Definitions #

Main Results #

Notation #

The arithmetic functions ζ and σ have Greek letter names, which are localized notation in the namespace arithmetic_function.

Tags #

arithmetic functions, dirichlet convolution, divisors

@[protected, instance]
@[simp]
@[simp]
theorem nat.arithmetic_function.zero_apply {R : Type u_1} [has_zero R] {x : ℕ} :
⇑0 x = 0
@[ext]
theorem nat.arithmetic_function.ext {R : Type u_1} [has_zero R] ⦃f g : nat.arithmetic_function R⦄ (h : ∀ (x : ℕ), ⇑f x = ⇑g x) :
f = g
theorem nat.arithmetic_function.ext_iff {R : Type u_1} [has_zero R] {f g : nat.arithmetic_function R} :
f = g ↔ ∀ (x : ℕ), ⇑f x = ⇑g x
@[protected, instance]
Equations
theorem nat.arithmetic_function.one_apply {R : Type u_1} [has_zero R] [has_one R] {x : ℕ} :
⇑1 x = ite (x = 1) 1 0
@[simp]
theorem nat.arithmetic_function.one_one {R : Type u_1} [has_zero R] [has_one R] :
⇑1 1 = 1
@[simp]
theorem nat.arithmetic_function.one_apply_ne {R : Type u_1} [has_zero R] [has_one R] {x : ℕ} (h : x ≠ 1) :
⇑1 x = 0
@[protected, instance]
Equations
@[simp]
theorem nat.arithmetic_function.add_apply {R : Type u_1} [add_monoid R] {f g : nat.arithmetic_function R} {n : ℕ} :
⇑(f + g) n = ⇑f n + ⇑g n
@[protected, instance]
Equations
@[protected, instance]

The Dirichlet convolution of two arithmetic functions f and g is another arithmetic function such that (f * g) n is the sum of f x * g y over all (x,y) such that x * y = n.

Equations
@[simp]
@[protected, instance]

The Dirichlet convolution of two arithmetic functions f and g is another arithmetic function such that (f * g) n is the sum of f x * g y over all (x,y) such that x * y = n.

Equations
@[simp]
theorem nat.arithmetic_function.mul_apply {R : Type u_1} [semiring R] {f g : nat.arithmetic_function R} {n : ℕ} :
⇑(f * g) n = n.divisors_antidiagonal.sum (λ (x : ℕ × ℕ), ⇑f x.fst * ⇑g x.snd)
theorem nat.arithmetic_function.mul_apply_one {R : Type u_1} [semiring R] {f g : nat.arithmetic_function R} :
⇑(f * g) 1 = ⇑f 1 * ⇑g 1
@[simp, norm_cast]
@[simp, norm_cast]
theorem nat.arithmetic_function.mul_smul' {R : Type u_1} {M : Type u_2} [semiring R] [add_comm_monoid M] [module R M] (f g : nat.arithmetic_function R) (h : nat.arithmetic_function M) :
(f * g) • h = f • g • h
theorem nat.arithmetic_function.one_smul' {R : Type u_1} {M : Type u_2} [semiring R] [add_comm_monoid M] [module R M] (b : nat.arithmetic_function M) :
1 • b = b
@[protected, instance]
Equations

ζ 0 = 0, otherwise ζ x = 1. The Dirichlet Series is the Riemann ζ.

Equations

This is the pointwise product of arithmetic_functions.

Equations
@[simp]
theorem nat.arithmetic_function.pmul_apply {R : Type u_1} [mul_zero_class R] {f g : nat.arithmetic_function R} {x : ℕ} :
⇑(f.pmul g) x = ⇑f x * ⇑g x

This is the pointwise power of arithmetic_functions.

Equations
@[simp]
theorem nat.arithmetic_function.ppow_apply {R : Type u_1} [semiring R] {f : nat.arithmetic_function R} {k x : ℕ} (kpos : 0 < k) :
⇑(f.ppow k) x = ⇑f x ^ k
theorem nat.arithmetic_function.ppow_succ {R : Type u_1} [semiring R] {f : nat.arithmetic_function R} {k : ℕ} :
f.ppow (k + 1) = f.pmul (f.ppow k)
theorem nat.arithmetic_function.ppow_succ' {R : Type u_1} [semiring R] {f : nat.arithmetic_function R} {k : ℕ} {kpos : 0 < k} :
f.ppow (k + 1) = (f.ppow k).pmul f

Multiplicative functions

Equations
theorem nat.arithmetic_function.is_multiplicative.map_prod {R : Type u_1} {ι : Type u_2} [comm_monoid_with_zero R] (g : ι → ℕ) {f : nat.arithmetic_function R} (hf : f.is_multiplicative) (s : finset ι) (hs : ↑s.pairwise (nat.coprime on g)) :
⇑f (s.prod (λ (i : ι), g i)) = s.prod (λ (i : ι), ⇑f (g i))

For any multiplicative function f and any n > 0, we can evaluate f n by evaluating f at p ^ k over the factorization of n

A recapitulation of the definition of multiplicative that is simpler for proofs

Two multiplicative functions f and g are equal if and only if they agree on prime powers

The identity on ℕ as an arithmetic_function.

Equations
@[simp]
theorem nat.arithmetic_function.pow_apply {k n : ℕ} :
⇑(nat.arithmetic_function.pow k) n = ite (k = 0 ∧ n = 0) 0 (n ^ k)

σ k n is the sum of the kth powers of the divisors of n

Equations

Ω n is the number of prime factors of n.

Equations

ω n is the number of distinct prime factors of n.

Equations

μ is the Möbius function. If n is squarefree with an even number of distinct prime factors, μ n = 1. If n is squarefree with an odd number of distinct prime factors, μ n = -1. If n is not squarefree, μ n = 0.

Equations

A unit in arithmetic_function R that evaluates to ζ, with inverse μ.

Equations
theorem nat.arithmetic_function.sum_eq_iff_sum_smul_moebius_eq {R : Type u_1} [add_comm_group R] {f g : ℕ → R} :
(∀ (n : ℕ), 0 < n → n.divisors.sum (λ (i : ℕ), f i) = g n) ↔ ∀ (n : ℕ), 0 < n → n.divisors_antidiagonal.sum (λ (x : ℕ × ℕ), ⇑nat.arithmetic_function.moebius x.fst • g x.snd) = f n

Möbius inversion for functions to an add_comm_group.

theorem nat.arithmetic_function.sum_eq_iff_sum_mul_moebius_eq {R : Type u_1} [ring R] {f g : ℕ → R} :
(∀ (n : ℕ), 0 < n → n.divisors.sum (λ (i : ℕ), f i) = g n) ↔ ∀ (n : ℕ), 0 < n → n.divisors_antidiagonal.sum (λ (x : ℕ × ℕ), ↑(⇑nat.arithmetic_function.moebius x.fst) * g x.snd) = f n

Möbius inversion for functions to a ring.

theorem nat.arithmetic_function.prod_eq_iff_prod_pow_moebius_eq {R : Type u_1} [comm_group R] {f g : ℕ → R} :
(∀ (n : ℕ), 0 < n → n.divisors.prod (λ (i : ℕ), f i) = g n) ↔ ∀ (n : ℕ), 0 < n → n.divisors_antidiagonal.prod (λ (x : ℕ × ℕ), g x.snd ^ ⇑nat.arithmetic_function.moebius x.fst) = f n

Möbius inversion for functions to a comm_group.

theorem nat.arithmetic_function.prod_eq_iff_prod_pow_moebius_eq_of_nonzero {R : Type u_1} [comm_group_with_zero R] {f g : ℕ → R} (hf : ∀ (n : ℕ), 0 < n → f n ≠ 0) (hg : ∀ (n : ℕ), 0 < n → g n ≠ 0) :
(∀ (n : ℕ), 0 < n → n.divisors.prod (λ (i : ℕ), f i) = g n) ↔ ∀ (n : ℕ), 0 < n → n.divisors_antidiagonal.prod (λ (x : ℕ × ℕ), g x.snd ^ ⇑nat.arithmetic_function.moebius x.fst) = f n

Möbius inversion for functions to a comm_group_with_zero.