# Stirling's formula #

This file proves Stirling's formula for the factorial. It states that $n!$ grows asymptotically like $\sqrt{2\pi n}(\frac{n}{e})^n$.

## Proof outline #

The proof follows: https://proofwiki.org/wiki/Stirling%27s_Formula.

We proceed in two parts.

Part 1: We consider the sequence $a_n$ of fractions $\frac{n!}{\sqrt{2n}(\frac{n}{e})^n}$ and prove that this sequence converges to a real, positive number $a$. For this the two main ingredients are

• taking the logarithm of the sequence and
• using the series expansion of $\log(1 + x)$.

Part 2: We use the fact that the series defined in part 1 converges against a real number $a$ and prove that $a = \sqrt{\pi}$. Here the main ingredient is the convergence of Wallis' product formula for π.

### Part 1 #

https://proofwiki.org/wiki/Stirling%27s_Formula#Part_1

noncomputable def Stirling.stirlingSeq (n : ) :

Define stirlingSeq n as $\frac{n!}{\sqrt{2n}(\frac{n}{e})^n}$. Stirling's formula states that this sequence has limit $\sqrt(π)$.

Equations
• = n.factorial / ((2 * n) * (n / ) ^ n)
Instances For
theorem Stirling.log_stirlingSeq_formula (n : ) :
= Real.log n.factorial - 1 / 2 * Real.log (2 * n) - n * Real.log (n / )
theorem Stirling.log_stirlingSeq_diff_hasSum (m : ) :
HasSum (fun (k : ) => 1 / (2 * (k + 1) + 1) * ((1 / (2 * (m + 1) + 1)) ^ 2) ^ (k + 1)) (Real.log (Stirling.stirlingSeq (m + 1)) - Real.log (Stirling.stirlingSeq (m + 2)))

The sequence log (stirlingSeq (m + 1)) - log (stirlingSeq (m + 2)) has the series expansion ∑ 1 / (2 * (k + 1) + 1) * (1 / 2 * (m + 1) + 1)^(2 * (k + 1))

The sequence log ∘ stirlingSeq ∘ succ is monotone decreasing

theorem Stirling.log_stirlingSeq_diff_le_geo_sum (n : ) :
Real.log (Stirling.stirlingSeq (n + 1)) - Real.log (Stirling.stirlingSeq (n + 2)) (1 / (2 * (n + 1) + 1)) ^ 2 / (1 - (1 / (2 * (n + 1) + 1)) ^ 2)

We have a bound for successive elements in the sequence log (stirlingSeq k).

We have the bound log (stirlingSeq n) - log (stirlingSeq (n+1)) ≤ 1/(4 n^2)

For any n, we have log_stirlingSeq 1 - log_stirlingSeq n ≤ 1/4 * ∑' 1/k^2

The sequence log_stirlingSeq is bounded below for n ≥ 1.

The sequence stirlingSeq is positive for n > 0

The sequence stirlingSeq has a positive lower bound.

The sequence stirlingSeq ∘ succ is monotone decreasing

The limit a of the sequence stirlingSeq satisfies 0 < a

### Part 2 #

https://proofwiki.org/wiki/Stirling%27s_Formula#Part_2

Filter.Tendsto (fun (n : ) => n / (2 * n + 1)) Filter.atTop (nhds (1 / 2))

The sequence n / (2 * n + 1) tends to 1/2

theorem Stirling.stirlingSeq_pow_four_div_stirlingSeq_pow_two_eq (n : ) (hn : n 0) :
/ Stirling.stirlingSeq (2 * n) ^ 2 * (n / (2 * n + 1)) =

For any n ≠ 0, we have the identity (stirlingSeq n)^4 / (stirlingSeq (2*n))^2 * (n / (2 * n + 1)) = W n, where W n is the n-th partial product of Wallis' formula for π / 2.

theorem Stirling.second_wallis_limit (a : ) (hane : a 0) (ha : Filter.Tendsto Stirling.stirlingSeq Filter.atTop (nhds a)) :
Filter.Tendsto Real.Wallis.W Filter.atTop (nhds (a ^ 2 / 2))

Suppose the sequence stirlingSeq (defined above) has the limit a ≠ 0. Then the Wallis sequence W n has limit a^2 / 2.

theorem Stirling.factorial_isEquivalent_stirling :
Asymptotics.IsEquivalent Filter.atTop (fun (n : ) => n.factorial) fun (n : ) => (2 * n * Real.pi) * (n / ) ^ n

Stirling's Formula, formulated in terms of Asymptotics.IsEquivalent.