The race of iid clocks: the exponential law is forced #
Category: 1-Mathlib. No CSD content: this is the classical competing-risks characterisation, which Mathlib does not have.
Glossary: https://glossary.constraintsurfacedynamics.com/first-passage-race/
Plain-language, CSD-role and formal statements of the first-passage race, with this module as the
Lean anchor. Kept symmetric by scripts/check-glossary.sh.
★★★ hasRaceProperty_iff_exists_expMeasure — for iid clocks at linear rates, the first to fire
wins in proportion to its rate iff the waiting-time law is exponential. This is the statement of
specs/record-layer-plan.md §3c, and the route to it is
specs/q12c-exponential-characterisation-route.md. CompetingExponentials.lean supplies the ⇐
direction in its own framing; everything here is the ⇒ direction.
The change of framing #
There, clock j had its own law Exp bⱼ and the race was ξ i < ξ j. Here all clocks are iid
with one unknown law μ, and the rate enters as a scaling: clock j fires at ξ j / b j. For
the exponential the two framings agree (hasRaceProperty_expMeasure); for a general μ only the
second makes sense, because "the law of the clock" is exactly what is being solved for.
scaledRaceCell— the readings on which clockifires first.scaledRaceCell_onerecords that at unit rates it israceCell.- ★★
measure_scaledRaceCell— the kernel identity: the winning probability is∫ ∏ⱼ G(bⱼ/bᵢ · t) dμ(t), withG t = μ (Ioi t)the survival function (survival). No hypothesis onμbeyond being a probability measure, and — unlike the exponential case — the slice is a box at everyt, not merely almost every one. HasRaceProperty— the hypothesis of §3c, quantified over every number of clocks.
★ What the k-clock family buys #
Instantiating the race at rates (1, c, c, …, c) turns an integral equation into a moment
sequence — ★★ HasRaceProperty.lintegral_measure_Ioi_pow gives E[G(cξ)ᵏ] = 1/(1 + kc), and
★★ …_pow_mul_pow the mixed form E[G(cξ)ᵖ G(ξ)ᵏ] = 1/(1 + pc + k). G(cξ) takes values in
[0,1], where moments determine the law — which is why the two-clock version of the same question
looks like Choquet–Deny and this one does not. Three consequences, in order:
- ★★
HasRaceProperty.map_survival—G(ξ)is uniform on[0,1], with no regularity hypothesis onμ: thec = 1moments are the uniform moments, so Hausdorff determinacy (MeasureTheory.ext_of_forall_integral_pow_eq_of_null_compl) closes it. Atomlessness ofμis therefore derived from the race property, not assumed of it. - ★★
HasRaceProperty.survival_natMul_ae—G(mt) = G(t)ᵐalmost everywhere, for every naturalm. ★ The proof needs no quantile, no determinacy in two variables and no injectivity ofG: when the ratio is a natural number,G(t)ᵐis itself a product ofmsurvival factors at rate1, so all three terms of∫ (G(mt) − G(t)ᵐ)² dμare instances of the same race family and cancel. - ★
raceRate_le— the rate is the same at every good reading. The functional equation tiesGtogether only along the lattice{mt}; antitonicity connects two lattices, becausemt ≤ nt'forcesG(t)ᵐ ≥ G(t')ⁿ. Letting the integer ratio climb tot'/tgives the comparison, and the real ratios the argument never had are not missed.
Then HasRaceProperty.exists_eq_expMeasure reads the law off through map_survival.
⚠️ The second conjunct is not optional #
HasRaceProperty quantifies over the number of clocks, and that is load-bearing: at a fixed
number of outcomes n the family supplies only n−1 moments, and finitely many moments determine
nothing. What is forced is the exponential law given that one clock law serves every n — the
measurement-independence of the fibre law that specs/sigma-fibre-contextuality.md commits to.
Never state the conclusion without it.
Nothing here is a new physical claim: it removes a posit from the record layer's fibre construction rather than adding one.
Reference: specs/q12c-exponential-characterisation-route.md;
specs/q12-fibre-mechanism-scoping.md; specs/record-layer-plan.md §3b–§3c;
specs/sigma-fibre-contextuality.md; specs/future-work.md. See
ProbabilityTheory.measure_raceCell for the ⇐ direction in the other framing and
MeasureTheory.ext_of_forall_integral_pow_eq_of_null_compl for the determinacy step.
The race at general rates #
The scaled race cell: the readings on which clock i fires first, when clock j reads
ξ j and fires at ξ j / b j.
The rate enters by scaling the reading rather than by changing the law, which is what lets the
law stay an unknown. At unit rates this is raceCell (scaledRaceCell_one).
Equations
Instances For
At unit rates the scaled race is the plain race of CompetingExponentials.lean.
The race cells are pairwise disjoint at any rates: two clocks cannot both be strictly first.
Like raceCell_pairwiseDisjoint, this is the partition content and needs no hypothesis on the
rates at all.
★★ The kernel identity. For iid clocks with law μ at rates b, clock i wins with
probability ∫ ∏ⱼ G(bⱼ/bᵢ · t) dμ(t), where G t = μ (Ioi t) is the survival function and the
product runs over the other clocks.
This is measure_raceCell with the exponential assumption removed and the integral left standing:
there G was known and the integral could be evaluated, here G is the unknown. The proof splits
coordinate i off the product (measurePreserving_piFinSuccAbove) and reads the remaining clocks'
survival as a box (Measure.pi_pi) — and because the rates are carried by the scaling rather than
by the law, the slice is a box at every t, so no almost-everywhere step is needed.
The race property, and the moment sequence it forces #
The race property of specs/record-layer-plan.md §3c: for iid clocks with law μ, the
first to fire is clock i with probability bᵢ / Σⱼ bⱼ, for every number of clocks and every
positive rate vector.
The quantification over n is the load-bearing part and is not free — see the scope note in the
module docstring. hasRaceProperty_expMeasure is the witness that the hypothesis is satisfiable.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The kernel identity at a unit-rate winner: clock 0 runs at rate 1 and the rest at rates
r, so the ratios rⱼ/1 are the rates themselves.
★★ The race property turns into a family of moments. For any positive rates r on the
losing clocks, ∫ ∏ⱼ G(rⱼ t) dμ(t) = 1/(1 + Σⱼ rⱼ).
This is step 1 of specs/q12c-exponential-characterisation-route.md in its general form; the two
corollaries below are the instantiations the route uses.
★★ (1) of the route memo. Racing one clock at rate 1 against k clocks at rate c
gives the moment sequence E[G(cξ)ᵏ] = 1/(1 + kc).
The integral equation of the two-clock case has become a moment problem on [0,1], where the
moments determine the law.
★★ The mixed moments, at rates (1, c^p, 1^k): E[G(cξ)ᵖ G(ξ)ᵏ] = 1/(1 + pc + k).
This is the form step 3′ consumes. At p = 1 the left-hand side is a fixed continuous weight
integrated against every power of G(ξ), which is exactly the hypothesis of
MeasureTheory.eq_of_forall_integral_mul_pow_eq — so no joint law, no rearrangement theory and no
two-dimensional determinacy is needed.
Non-vacuity: the exponential laws have the race property #
The hypothesis is satisfiable. Every exponential law has the race property — which is the
⇐ direction of §3c in the iid framing, and the check that HasRaceProperty is not vacuous.
Compare measure_raceCell, which is the same fact in the other framing: there the rate lived in
the law (Exp bⱼ) and the race was unscaled; here one law serves every clock and the rate scales
the reading. The two agree because ξ / b is Exp (rb) when ξ is Exp r — visible in the proof
as the rate r cancelling out of r / (r + r·S/bᵢ).
Step 2: the race property forces the survival function to be uniform #
The survival function G t = P(ξ > t) of a law on the line, as a real-valued function.
Real-valued, whereas the kernel identity above states the same thing in ℝ≥0∞ because that is
where lintegral lives: the analytic half of the route consumes a continuous real function
(MeasureTheory.eq_of_forall_integral_mul_pow_eq lives on C(Icc a b, ℝ)), and this is the form
it wants.
Equations
- ProbabilityTheory.survival μ t = (μ (Set.Ioi t)).toReal
Instances For
★★ Step 2 — the probability integral transform, and the regularity comes free.
G(ξ) is uniform on [0,1].
The route memo assumes G continuous and strictly decreasing, and reaches this by the standard
probability integral transform. It does not have to: the c = 1 case of the moment family already
says E[G(ξ)ᵏ] = 1/(1+k) for every k, and those are exactly the moments of the uniform law, so
Hausdorff determinacy (MeasureTheory.ext_of_forall_integral_pow_eq_of_null_compl) delivers the
conclusion with no hypothesis on μ at all.
So atomlessness of μ is a consequence of the race property rather than an assumption on it —
as it must be, since the k+1-clock race at equal rates says the smallest of k+1 iid readings is
strictly smallest with probability 1/(k+1), and ties would cost.
Step 3: the multiplicative functional equation, almost everywhere #
The mixed moment identity as a real integral of survival.
★★ The multiplicative functional equation. For every m ≥ 1, G(mt) = G(t)ᵐ for
μ-almost every t.
★ This is the route's real surprise, and it replaces all three of the assemblies the memo had
mapped — no quantile G⁻¹, no two-dimensional determinacy, no injectivity of G. The reason is
that when the ratio is a natural number m, the function G(t)ᵐ is itself a product of m
survival factors at rate 1, so all three terms of ∫ (G(mt) − G(t)ᵐ)² dμ are instances of the
same race family:
∫ G(mt)² dμ = 1/(1+2m)at rates(1, m, m);∫ G(mt)·G(t)ᵐ dμ = 1/(1+2m)at rates(1, m, 1ᵐ);∫ G(t)²ᵐ dμ = 1/(1+2m)at rates(1, 1²ᵐ).
They cancel, so the square has integral zero and vanishes almost everywhere. Restricting the ratio
to the integers is exactly what makes the cross term computable — and HasRaceProperty.eq_expMeasure
shows the integers are enough, because monotonicity supplies what the missing real ratios would
have.
Step 4: from the functional equation to the exponential law #
The survival function avoids both endpoints almost everywhere — immediate from step 2, since
{0, 1} is Lebesgue-null.
The clock readings are almost surely positive — derived, not assumed.
The route memo sets the problem up with ξ supported on (0,∞); it does not have to. Antitonicity
plus the m = 2 case of the functional equation is enough: for t ≤ 0 one has 2t ≤ t, so
G(t) ≤ G(2t) = G(t)², which is false for G(t) ∈ (0,1).
A good reading: positive, with the survival function strictly inside (0,1), and satisfying
the whole multiplicative family. HasRaceProperty.ae_regular says almost every reading is good;
everything after this point is an argument about good readings and their ratios to one another.
Equations
- ProbabilityTheory.RaceRegular μ t = (0 < t ∧ ProbabilityTheory.survival μ t ∈ Set.Ioo 0 1 ∧ ∀ (m : ℕ), 0 < m → ProbabilityTheory.survival μ (↑m * t) = ProbabilityTheory.survival μ t ^ m)
Instances For
The three almost-everywhere facts, bundled: positivity, both endpoints avoided, and the whole
multiplicative family at once (a countable intersection, via ae_all_iff).
The rate read off at a good reading: the λ for which G t = e^{-λt} at that one point.
Equations
- ProbabilityTheory.raceRate μ t = -Real.log (ProbabilityTheory.survival μ t) / t
Instances For
★ The rate is the same at every good reading, which is what makes the integer ratios of
survival_natMul_ae enough to pin the law down.
The functional equation ties G together only along the lattice {mt}, and a priori nothing
connects the lattices of two different readings. Antitonicity connects them: whenever mt ≤ nt'
one has G(t)ᵐ = G(mt) ≥ G(nt') = G(t')ⁿ, so m·λ(t)·t ≤ n·λ(t')·t'. Letting the integer ratio
m/n climb to t'/t gives λ(t) ≤ λ(t'), and symmetry gives equality. Neither density of the
support nor a real ratio is needed anywhere.
★★★ The race property forces the exponential law.
This is the ⇒ direction of specs/record-layer-plan.md §3c: if for every number of clocks and
every positive rate vector the first of n iid clocks to fire is clock i with probability
bᵢ/Σⱼbⱼ, then the clock law is exponential. With hasRaceProperty_expMeasure for the converse it
is the characterisation.
⚠️ The second conjunct travels with the first. HasRaceProperty quantifies over the number of
clocks, and that is not a formality: at a fixed number of outcomes n the family supplies only
n−1 moments, and finitely many moments determine nothing. So what is forced is the exponential law
given that one clock law serves every n — the measurement-independence of the fibre law that
specs/sigma-fibre-contextuality.md commits to. Never state the conclusion without it.
★★★ The characterisation of specs/record-layer-plan.md §3c: for iid linear clocks,
first-to-fire is proportional to the rate iff the waiting times are exponential.
The ⇐ direction is hasRaceProperty_expMeasure; the ⇒ direction is
HasRaceProperty.exists_eq_expMeasure, and it carries the second conjunct documented there —
HasRaceProperty quantifies over the number of clocks, so what is characterised is the law that
serves every n.