Bernoulli polynomials #
The Bernoulli polynomials are an important tool obtained from Bernoulli numbers.
Mathematical overview #
The $n$-th Bernoulli polynomial is defined as $$ B_n(X) = ∑_{k = 0}^n {n \choose k} (-1)^k B_k X^{n - k} $$ where $B_k$ is the $k$-th Bernoulli number. The Bernoulli polynomials are generating functions, $$ \frac{t e^{tX} }{ e^t - 1} = ∑_{n = 0}^{\infty} B_n(X) \frac{t^n}{n!} $$
Implementation detail #
Bernoulli polynomials are defined using bernoulli
, the Bernoulli numbers.
Main theorems #
sum_bernoulli
: The sum of the $k^\mathrm{th}$ Bernoulli polynomial with binomial coefficients up ton
is(n + 1) * X^n
.Polynomial.bernoulli_generating_function
: The Bernoulli polynomials act as generating functions for the exponential.
TODO #
bernoulli_eval_one_neg
: $$ B_n(1 - x) = (-1)^n B_n(x) $$
The Bernoulli polynomials are defined in terms of the negative Bernoulli numbers.
Equations
- Polynomial.bernoulli n = Finset.sum (Finset.range (n + 1)) fun (i : ℕ) => (Polynomial.monomial (n - i)) (bernoulli i * ↑(Nat.choose n i))
Instances For
theorem
Polynomial.bernoulli_def
(n : ℕ)
:
Polynomial.bernoulli n = Finset.sum (Finset.range (n + 1)) fun (i : ℕ) => (Polynomial.monomial i) (bernoulli (n - i) * ↑(Nat.choose n i))
@[simp]
@[simp]
theorem
Polynomial.derivative_bernoulli_add_one
(k : ℕ)
:
Polynomial.derivative (Polynomial.bernoulli (k + 1)) = (↑k + 1) * Polynomial.bernoulli k
theorem
Polynomial.derivative_bernoulli
(k : ℕ)
:
Polynomial.derivative (Polynomial.bernoulli k) = ↑k * Polynomial.bernoulli (k - 1)
@[simp]
theorem
Polynomial.sum_bernoulli
(n : ℕ)
:
(Finset.sum (Finset.range (n + 1)) fun (k : ℕ) => ↑(Nat.choose (n + 1) k) • Polynomial.bernoulli k) = (Polynomial.monomial n) (↑n + 1)
theorem
Polynomial.bernoulli_eq_sub_sum
(n : ℕ)
:
↑(Nat.succ n) • Polynomial.bernoulli n = (Polynomial.monomial n) ↑(Nat.succ n) - Finset.sum (Finset.range n) fun (k : ℕ) => ↑(Nat.choose (n + 1) k) • Polynomial.bernoulli k
Another version of Polynomial.sum_bernoulli
.
theorem
Polynomial.sum_range_pow_eq_bernoulli_sub
(n : ℕ)
(p : ℕ)
:
((↑p + 1) * Finset.sum (Finset.range n) fun (k : ℕ) => ↑k ^ p) = Polynomial.eval (↑n) (Polynomial.bernoulli (Nat.succ p)) - bernoulli (Nat.succ p)
Another version of sum_range_pow
.
theorem
Polynomial.bernoulli_succ_eval
(n : ℕ)
(p : ℕ)
:
Polynomial.eval (↑n) (Polynomial.bernoulli (Nat.succ p)) = bernoulli (Nat.succ p) + (↑p + 1) * Finset.sum (Finset.range n) fun (k : ℕ) => ↑k ^ p
Rearrangement of Polynomial.sum_range_pow_eq_bernoulli_sub
.
theorem
Polynomial.bernoulli_eval_one_add
(n : ℕ)
(x : ℚ)
:
Polynomial.eval (1 + x) (Polynomial.bernoulli n) = Polynomial.eval x (Polynomial.bernoulli n) + ↑n * x ^ (n - 1)
theorem
Polynomial.bernoulli_generating_function
{A : Type u_1}
[CommRing A]
[Algebra ℚ A]
(t : A)
:
(PowerSeries.mk fun (n : ℕ) => (Polynomial.aeval t) ((1 / ↑(Nat.factorial n)) • Polynomial.bernoulli n)) * (PowerSeries.exp A - 1) = PowerSeries.X * (PowerSeries.rescale t) (PowerSeries.exp A)
The theorem that $(e^X - 1) * ∑ Bₙ(t)* X^n/n! = Xe^{tX}$