This document explains step‑by‑step how the Lean 4 development contained in PoissonProcess.lean proves (half of) the equivalence between two common definitions of a Poisson process.
-
Definition 1 (
IsPoissonProcess1) Definition 2.1.1 in Sheldon$N(0)=0$ - Indepedent increment
- Number of events in any interval of length
$t$ follows$\rm{Poi}(\lambda t)$
-
Definition 2 (
IsPoissonProcess2) Definition 2.1.2 in Sheldon$N(0)=0$ - independent and stationary increments,
- a small‑time jump formula
$\mathbb P[N_h = 1] = \lambda h + o(h)$ , and - a small‑time no‑large‑jump formula
$\mathbb P[N_h \ge 2] = o(h)$ .
The Lean file proves
leaving the reverse implication as sorry (to be filled in later).
The exposition below mirrors the file’s internal section numbering.
Notation. Throughout,
Ωis a type equipped with aMeasurableSpace,μ : ProbabilityMeasure Ωis the background probability measure, and the counting process is a functionu : ℝ≥0 → Ω → ℕ.
@[class] structure IsCountingProcess (u : ℝ≥0 → Ω → ℕ) : PropA counting process is assumed to be measurable, non‑negative, integer‑valued and monotone in t.
- Independent increments—
HasIndpendentIncrements—are packaged usingiIndepFunfromMathlib.Probability. - Stationary increments—
HasStationaryIncrements—state translation invariance of increment distributions.
structure IsPoissonProcess1 … (r : ℝ≥0) : Prop
structure IsPoissonProcess2 … (r : ℝ≥0) : PropDefinition 1 uses poissonPMFReal for part iii; Definition 2 use landau notation for part iii and iv.
The Lean file splits the proof into three thematic blocks.
Lemma poisson_process1_has_stationary_increments shows that the explicit Poisson formula in Definition 1 already implies the increments are stationary.
Takeaway: In the homogeneous Poisson law the parameter depends only on t₂ − t₁; therefore translating both endpoints by s leaves the law unchanged.
Before tackling the
| Lemma | Lean identifier | Formula |
|---|---|---|
| Zero jumps | poisson_process1_zero_jump |
|
| Single jump | poisson_process1_single_jump |
|
| Many jumps | poisson_process1_multiple_jump |
The last lemma uses a partition of unity of Ω into the three events and a bespoke measurability/disjointness helper probability_measure_union.
We define
Using Real.exp_sub_sum_range_succ_isLittleO_pow from Mathlib.Analysis, the lemma
theorem f2iii_is_little_O : …proves f2iii =o[𝓝[>] 0] id.
With this in hand, poisson_process1_implies_process2iii matches Definition 2.iii:
A similar construction,
leads to f_zero_is_little_O and, after a small algebraic rearrangement, poisson_process1_implies_process2iv realises Definition 2.iv.
Finally, poisson_process_equiv puts the pieces together:
- Part (i) is inherited verbatim (
u 0 = 0). - Part (ii) merges independent increments (from Definition 1) with the new stationary‑increment lemma (Section 3.1).
- Parts (iii) and (iv) are the
$o(h)$ statements proved in Section 3.3.
The forward implication is thus completely mechanised. The reverse implication remains as a future exercise (marked sorry).
PoissonProcess.lean
├ 0. Counting‑process preliminaries
├ 1. Definition 1 ⇒ Definition 2
│ ├ 1.1 Stationary increments
│ ├ 1.2 Small‑time probabilities (0/1/≥2 jumps)
│ └ 1.3 Construction of little‑o error terms
├ 2. (todo) Definition 2 ⇒ Definition 1
└ 3. IsPoissonProcess (combined structure)
Search tips
#find IsPoissonProcess1shows the definition.#print poisson_process1_single_jumpdisplays a proof’s statement.
Suggested reading order
- Skim the structures at the top of the file.
- Read Lemma
poisson_process1_multiple_jump—it showcases Lean’s measure theory tactics. - Follow the dependencies of
poisson_process_equiv.
The proof relies on Mathlib’s extensive probability library and on the work of many contributors who formalised measure theory, asymptotics and the exponential function. Special thanks to the Mathlib maintainers for prompt reviews.
Last compiled: 16 May 2025 (Europe/London).