Base camp: a fixed block computes the exact upper edge

Take the two-point probability space

\[ \Omega=\{a,b\}, \qquad \mu(\{a\})=\mu(\{b\})=\frac12, \]

and let \(T\) swap the points. Define a small potential

\[ \phi(a)=0, \qquad \phi(b)=1. \]

Now define a real process by

\[ X_n(\omega) {} = \left\lceil\frac n2\right\rceil +\phi(T^n\omega)-\phi(\omega). \]

This is not an invented sequence of unrelated rows. The endpoint terms telescope across a split:

\[ \begin{aligned} X_{m+n}(\omega) &= \left\lceil\frac{m+n}{2}\right\rceil +\phi(T^{m+n}\omega)-\phi(\omega)\\ &\le \left\lceil\frac m2\right\rceil +\left\lceil\frac n2\right\rceil +\phi(T^m\omega)-\phi(\omega)\\ &\qquad +\phi(T^{m+n}\omega)-\phi(T^m\omega)\\ &=X_m(\omega)+X_n(T^m\omega). \end{aligned} \]

The only inequality is \(\lceil(m+n)/2\rceil\le\lceil m/2\rceil+\lceil n/2\rceil\). Thus \(X\) is a genuine shifted-subadditive process.

Compute both paths before generalizing

Because \(T^n\) is the identity at even \(n\) and the swap at odd \(n\),

\[ \begin{array}{c|cc} &X_n(a)&X_n(b)\\ \hline n\text{ even}&n/2&n/2\\ n\text{ odd}&(n+3)/2&(n-1)/2. \end{array} \]

Every entry is nonnegative. The first nine horizons are:

\(n\)\(X_n(a)\)\(X_n(b)\)\(X_n(a)/n\)\(X_n(b)/n\)\(\int X_n\,d\mu\)\((\int X_n\,d\mu)/n\)
0000000
1202011
211\(1/2\)\(1/2\)1\(1/2\)
3311\(1/3\)2\(2/3\)
422\(1/2\)\(1/2\)2\(1/2\)
542\(4/5\)\(2/5\)3\(3/5\)
633\(1/2\)\(1/2\)3\(1/2\)
753\(5/7\)\(3/7\)4\(4/7\)
844\(1/2\)\(1/2\)4\(1/2\)

Lean totalizes division by zero, so the displayed \(n=0\) normalized values are zero. The asymptotic claim concerns positive horizons.

At \(a\), the odd normalized values are

\[ \frac12+\frac{3}{2n}; \]

at \(b\), they are

\[ \frac12-\frac{1}{2n}. \]

The even values are exactly \(1/2\). Hence both paths converge to \(1/2\), and in particular

\[ \limsup_n\frac{X_n(\omega)}n=\frac12 \quad\text{for }\omega=a,b. \]

Now choose the fixed block \(b=2\). The two block values are both one, so

\[ \frac1{2}\int_\Omega X_2\,d\mu {} = \frac12\cdot\frac{1+1}{2} {} = \frac12. \]

The RMT-29 inequality is sharp:

\[ \boxed{\limsup_n\frac{X_n(\omega)}n \le \frac1{2}\int_\Omega X_2\,d\mu =\frac12.} \]

The direction matters. It says the eventual upper edge of the sample path cannot exceed the block integral ratio. It does not say that every finite normalized value is at most \(1/2\): the table contains \(2\), \(1\), and \(4/5\).

See the centered proof inside the same numbers

The one-step observable is

\[ X_1(a)=2, \qquad X_1(b)=0. \]

Along either alternating orbit, its Birkhoff averages converge to the uniform integral \(1\). Subtract its orbit sum:

\[ Y_n(\omega)=X_n(\omega)-S_n(X_1)(\omega). \]

For both starting points,

\[ Y_n=-\left\lfloor\frac n2\right\rfloor, \qquad Y_2=-1. \]

The centered integral identity at block two is now visible without symbols hiding the arithmetic:

\[ \int Y_2\,d\mu {} = -1 {} = \int X_2\,d\mu-2\int X_1\,d\mu {} = 1-2. \]

The limiting centered contribution is

\[ \frac12\int Y_2\,d\mu=-\frac12, \]

and adding the one-step Birkhoff limit gives

\[ -\frac12+1=\frac12 =\frac12\int X_2\,d\mu. \]

For phase averaging, write \(n=2a+r\) with \(r=0\) or \(1\). The proof keeps the prefix \(2(a-1)\), one block shorter than the target. Its coefficient is

\[ \frac{2(a-1)}{2(2a+r)} \longrightarrow\frac12. \]

Both residue lanes therefore use Birkhoff averages under the original flip \(T\). This is essential: \(T\) is ergodic, while \(T^2\) is the identity and is not ergodic.

A numerical ledger for a uniform two-state flip and the subadditive process X n omega equals ceiling n over two plus phi of T to the n omega minus phi omega. The table lists both paths through horizon eight, shows normalized values approaching one half, computes the centered values minus floor n over two, and shows that the block-two integral ratio equals the limsup one half. A side panel notes that the flip is ergodic while its square is the identity.
FigureFinding: one exact finite model carries the source proof. The process is nonnegative and subadditive, the two normalized paths approach \(1/2\), \(Y_2=-1\), the one-step integral is \(1\), and \((\int Y_2)/2+\int X_1=1/2=(\int X_2)/2\). Block two is sharp even though \(T^2\) is not ergodic, because the proof averages both residues under \(T\).

The measure vocabulary is concrete here. A probability measure has total mass one. A measure-preserving transformation keeps event masses unchanged under preimage. A statement holds almost everywhere if it may fail only on a null set . On this uniform two-point space, the empty set is the only null set, so an almost-everywhere statement holds at both points.

Let \((\Omega,\mu,T)\) be an ergodic probability-preserving system and let

\[ X_n:\Omega\to\mathbb R, \qquad n\in\mathbb N, \]

be an integrable subadditive process. Its defining inequality has the form

\[ X_{m+n}(\omega) \le X_m(\omega)+X_n(T^m\omega). \]

The asymptotic quantity of interest is the normalized samplewise process

\[ \frac{X_n(\omega)}{n}. \]

Kingman’s theorem gives far more than this chapter: under its hypotheses it identifies an almost-sure limit (Kingman 1968). The RMT-29 layer stops at a precise earlier summit. Its generalized theorem assumes that the normalized path is eventually bounded below almost everywhere. For each positive block size \(b\), it proves

\[ \limsup_{n\to\infty}\frac{X_n(\omega)}{n} \le \frac{1}{b}\int_\Omega X_b\,d\mu \quad\text{for almost every }\omega. \]

Pointwise nonnegativity is a sufficient, simpler way to discharge that lower-bound gate, and the module retains it as a compatibility wrapper. The log-positive cocycle process uses that wrapper.

For the cocycle log-positive process, intersecting these full-measure events over all blocks and taking the deterministic infimum gives

\[ \limsup_{n\to\infty} \frac{\log^+\lVert C(n,\omega)\rVert_\infty}{n} \le \gamma^+_\mu(C) \quad\text{almost everywhere}. \]

Here \(\gamma^+_\mu(C)\) is the integrated Fekete rate formalized earlier. This is a samplewise upper estimate. It is not convergence, a lower bound, a signed Lyapunov exponent, or an Oseledets theorem.

The immediate formal predecessors are Finite Phase Averaging for Nonpositive Subadditive Processes, Ergodic Birkhoff Limits and Normalized Space Averages, and the glossary entries on phase averaging , limit superior , and integrated log-positive growth rates . For broader proof lineage, Steele gives a conceptually algorithmic full proof that begins with a Birkhoff-based centering reduction and then uses an interval-decomposition argument (Steele 1989).

Learning objectives

By the end, a reader should be able to:

  1. explain why a fixed-block proof must control all residue classes;
  2. derive the centered process and reconstruct the normalized original process;
  3. explain why ordinary \(T\)-Birkhoff averages replace powered-map averages;
  4. calculate the coefficient left by phase averaging;
  5. identify where probability and the eventual-lower-bound gate enter, and explain why pointwise nonnegativity is only one sufficient wrapper;
  6. distinguish a limsup upper bound from a convergence theorem;
  7. optimize a countable family of block bounds using a deterministic Fekete rate;
  8. read the RMT-29 public theorem surface and its proof obligations; and
  9. audit examples that prevent stronger interpretations.
A generic theorem ladder starts with an integrable subadditive candidate whose normalized paths are eventually bounded below almost everywhere, produces a fixed-block almost-everywhere limsup bound, enters the nonnegative wrapper for log-positive cocycle observables, intersects the block events, and takes the positive-block Fekete infimum.
FigureThe public interface has three visible levels. The generalized theorem consumes a stated almost-everywhere eventual lower bound; its nonnegative wrapper chooses lower bound zero; the cocycle theorem then enforces every positive block simultaneously and optimizes by the existing deterministic Fekete identity.

The two obstacles

Subadditivity is not additivity

For an observable \(f\), the Birkhoff sum

\[ S_n f(\omega)=\sum_{j=0}^{n-1}f(T^j\omega) \]

satisfies an exact addition law. A subadditive process supplies only an upper comparison. Its future block begins at the shifted point \(T^m\omega\), and repeated decomposition leaves boundaries whose signs matter.

The one-step case nevertheless provides a universal majorant:

\[ X_n(\omega)\le S_n(X_1)(\omega), \qquad n\gt0. \]

This controls the sequence from above and later supplies the boundedness needed by a real-valued limsup lemma.

Ergodicity need not pass to powers

A tempting block proof studies \(X_b\) along

\[ \omega,T^b\omega,T^{2b}\omega,\ldots \]

and invokes Birkhoff for \(T^b\). That route silently needs \(T^b\) to be ergodic. It can fail even when \(T\) is ergodic. On the two-point probability space, the flip is ergodic but its square is the identity, so the square has nontrivial invariant events.

Finite phase averaging repairs the proof. It combines the \(b\) starting phases before taking limits and rewrites the result as an ordinary Birkhoff sum under \(T\). The asymptotic theorem is therefore applied only to the map whose ergodicity is actually assumed. Lalley’s teaching notes motivate this ordinary-map route (Lalley notes); the limiting input is the checked modern form of Birkhoff’s theorem (Birkhoff 1931).

The original Bool flip alternates two equally weighted states and is labeled ergodic. Its second iterate leaves both states fixed and is labeled nonergodic. A highlighted route sends all block phases back to Birkhoff averages under the original flip rather than applying an ergodic theorem to the square.
FigureErgodicity need not survive powering. Phase averaging exists here to keep the asymptotic argument under the original transformation, exactly matching the available hypothesis.

Center before taking blocks

Define the one-step-centered process

\[ Y_n(\omega) {} = X_n(\omega)-S_n(X_1)(\omega). \]

The one-step majorant gives \(Y_n\le0\) for positive \(n\). This sign is the entry ticket to the finite phase-averaging theorem. Centering does not claim that \(Y\) is zero, additive, or nonnegative.

The original process is recovered exactly:

\[ \begin{aligned} \frac{X_n(\omega)}{n} &= \frac{Y_n(\omega)}{n}+A_n(X_1)(\omega), \end{aligned} \]

where \(A_n\) is the ordinary Birkhoff average. The proof will bound the first term by block averages of \(Y_b\), then let the second term converge by RMT-28.

Integration respects this decomposition. Measure preservation and integrability imply

\[ \int_\Omega S_b(X_1)\,d\mu {} = b\int_\Omega X_1\,d\mu, \]

and hence

\[ \int_\Omega Y_b\,d\mu {} = \int_\Omega X_b\,d\mu -b\int_\Omega X_1\,d\mu. \]

The second identity is the cancellation mechanism at the end of the limit calculation.

Residues recover the full sequence

Fix a positive block size \(b\). Every natural time has a unique residue modulo \(b\), so it is enough to prove an eventual estimate along every arithmetic progression

\[ n=b a+r, \qquad 0\le r\lt b. \]

For large \(a\), set

\[ m=b(a-1). \]

The finite phase theorem gives the pointwise estimate

\[ Y_{ba+r}(\omega) \le \frac{1}{b}S_{b(a-1)}(Y_b)(\omega). \]
For block length three, natural times are split into residue lanes zero, one, and two. At a common large quotient a, each target time three a plus r is bounded using a centered Birkhoff prefix that is one complete block shorter. The three eventual lanes cover every sufficiently large time.
FigureThe block-three example makes the indexing visible. One complete block is retained as boundary slack, and the three residue lanes are recombined only after their separate eventual estimates are proved.

The lost block is deliberate. It absorbs the phase boundaries that cannot be discarded merely from subadditivity. Dividing by \(ba+r\gt0\) yields

\[ \frac{Y_{ba+r}(\omega)}{ba+r} \le A_{b(a-1)}(Y_b)(\omega) \frac{b(a-1)}{b(ba+r)}. \]

There are now two independent limits:

\[ A_{b(a-1)}(Y_b)(\omega) \longrightarrow \int_\Omega Y_b\,d\mu, \]

and

\[ \frac{b(a-1)}{b(ba+r)} \longrightarrow \frac1b. \]

The first uses ergodic Birkhoff convergence for the original map \(T\). The second is elementary real asymptotics. Meanwhile,

\[ A_{ba+r}(X_1)(\omega) \longrightarrow \int_\Omega X_1\,d\mu. \]

Adding the limits and inserting the centered integral identity gives

\[ \frac1b\left(\int X_b-b\int X_1\right)+\int X_1 {} = \frac1b\int X_b. \]

Because there are only finitely many residues, an eventual estimate on each progression becomes an eventual estimate on all sufficiently large natural times. In Lean, Eventually.atTop_of_arithmetic packages this passage (pinned Mathlib source).

From eventual estimates to limsup

The limsup is an order-theoretic tail operator. In \(\mathbb R\), applying limsup_le_iff requires enough boundedness to keep the result in the conditionally complete order (pinned Mathlib source).

The upper bound comes from the one-step majorant:

\[ \frac{X_n(\omega)}{n}\le A_n(X_1)(\omega), \]

and the Birkhoff average converges almost everywhere. The lower bound in the generalized public theorem is supplied directly:

\[ \text{for almost every }\omega,\quad \left(\frac{X_n(\omega)}n\right)_{n\to\infty} \text{ is eventually bounded below in }\mathbb R. \]

In Lean this is the IsBoundedUnder (· ≥ ·) atTop premise. The relation is written with \(\ge\) because a lower bound \(L\) satisfies \(X_n(\omega)/n\ge L\) eventually. The nonnegative wrapper chooses \(L=0\). The generalized theorem also accepts signed processes whose normalized paths have some other almost-everywhere lower bound.

The nearby countermodel: \(Z_n=-n^2\)

The lower-bound premise is not proof bureaucracy. On the one-point probability system, set

\[ Z_n=-n^2. \]

This process is integrable and subadditive because

\[ -(m+n)^2\le -m^2-n^2, \]

and its normalized ledger begins

\(n\)\(Z_n\)totalized \(Z_n/n\)
000
1\(-1\)\(-1\)
2\(-4\)\(-2\)
3\(-9\)\(-3\)
4\(-16\)\(-4\)
5\(-25\)\(-5\)
6\(-36\)\(-6\)

For any proposed real lower bound \(L\) and any proposed tail threshold \(N\), choose a natural

\[ n\ge N \quad\text{with}\quad n\gt-L. \]

Then \(-n\lt L\). Thus every tail contains a value below \(L\), so no tail is bounded below.

In the extended real numbers the traditional limsup is \(-\infty\). Mathlib’s Filter.limsup in the conditionally complete order \(\mathbb R\) is deliberately total. Here every real number is eventually an upper bound for \(-n\), so its definition becomes

\[ \operatorname{sInf}(\mathbb R)=0 \]

under the pinned real instance. But the block-one integral target is

\[ \frac{\int Z_1\,d\mu}{1}=-1. \]

Deleting the lower-bound gate would therefore demand the false real inequality \(0\le-1\). The generalized theorem rejects the model exactly where it should: its hXlower argument cannot be constructed. The nonnegative wrapper rejects it earlier.

A numerical boundary ledger for the one-point process Z n equals minus n squared. The normalized values are zero, minus one, minus two, through minus six. Rows show that proposed lower bounds zero, minus one, minus five, and minus twenty are defeated at horizons one, two, six, and twenty-one. A comparison distinguishes the extended-real limsup minus infinity from Mathlib's totalized real limsup zero, and shows that omitting the lower-bound gate would falsely require zero less than or equal to the block-one target minus one.
FigureFinding: \(Z_n=-n^2\) is a nearby integrable subadditive process, but \(Z_n/n=-n\) has no eventual real lower bound. The extended-real limsup is \(-\infty\); the pinned conditionally complete real operation totalizes to \(0\). Since the block-one target is \(-1\), the generalized RMT-29 lower-bound premise prevents a false \(0\le-1\) conclusion.

The cocycle specialization needs no extra signed lower-bound proof because \(\log^+\) is pointwise nonnegative by definition; it enters through the nonnegative wrapper.

Why probability appears

The Birkhoff endpoint used in the block proof identifies a time average with the ordinary integral. That exact statement is appropriate on a probability space. For a finite measure of positive mass \(q\), with \(q\ne1\), the time average converges to the normalized space average

\[ q^{-1}\int f\,d\mu, \]

not the raw integral. Consequently the clean block target \((\int X_b)/b\) is a probability-normalized theorem.

This is separate from measure preservation. Preservation proves that every shifted copy of an integrable function has the same integral. Probability turns the invariant constant into the raw integral rather than an integral divided by total mass.

Two finite preserved systems have identical orbit geometry but positive total masses one and q. The mass-one Birkhoff target is the raw integral, while the mass-q target is the raw integral divided by q. Only the first matches the unrescaled raw-integral Fekete rate.
FigureChanging total mass changes raw integrals but not normalized time averages. The probability premise aligns those scales; it is not shorthand for preservation, ergodicity, or independence.

Optimize over every block

For the cocycle process

\[ X_n(\omega)=\log^+\lVert C(n,\omega)\rVert_\infty, \]

the generic theorem gives, for every positive \(b\),

\[ L(\omega) {} := \limsup_n\frac{X_n(\omega)}n \le \frac1b\int X_b\,d\mu \]

outside a block-dependent null set. Natural numbers are countable, so the intersection of these full-measure events is still full measure. At every point in that intersection, \(L(\omega)\) is below every positive-block normalized integral.

The earlier deterministic Fekete theorem identifies their infimum with

\[ \gamma^+_\mu(C) {} = \inf_{b\ge1}\frac1b\int X_b\,d\mu. \]

The order step is le_csInf: exhibit one member of the set, then prove that the limsup lies below each member. The witness \(b=1\) proves nonemptiness. The resulting theorem compares a samplewise limsup with a deterministic integrated rate, but it does not exchange a limit and an integral.

A comparison panel shows RMT-29 proving that the normalized-process limsup lies below the integrated rate. A second, unfinished panel shows the missing lower-liminf inequality that would be needed to squeeze the sequence to a limit. Equality, mean convergence, signed exponents, and invariant splittings are outside both current arrows.
FigureRMT-29 formalizes the upper half only. A full convergence theorem needs an independently justified lower mechanism and cannot be inferred from the visual similarity of a limsup estimate to Kingman’s conclusion.

In Lean: seven bridges from the finite ledger to the upper limsup

The two-state calculation used integer and rational tables. The project source works with arbitrary real integrable shifted-subadditive processes. Read each bridge across: spoken mathematics, paper notation, exact Lean, and then the syntax tokens that carry the hypothesis.

Bridge 1: split the normalized process exactly

One idea, three languages Read across, then read the syntax map
A human says
The normalized original process equals the normalized centered process plus the one-step Birkhoff average.
On paper
\(X_n(\omega)/n=Y_n(\omega)/n+A_n(X_1)(\omega).\)
In Lean
normalized_eq_centered_add_birkhoffAverage n ω
Syntax map
  • centeredProcess T X n ω is \(Y_n(\omega)=X_n(\omega)-S_n(X_1)(\omega)\).
  • birkhoffAverage ℝ T (X 1) n ω is the ordinary real average of the one-step observable under the original map \(T\).
  • The identity is pointwise algebra. It assumes no measurable space, integrability, subadditivity, preservation, probability, or ergodicity.
  • At n = 0, Lean’s totalized real division makes every normalized term zero. The identity remains true but says nothing asymptotic.

Bridge 2: integrate a finite orbit sum

One idea, three languages Read across, then read the syntax map
A human says
A measure-preserving map makes every shifted copy have the same integral, so the integral of n orbit terms is n times the original integral.
On paper
\(\int S_nf\,d\mu=n\int f\,d\mu.\)
In Lean
integral_birkhoffSum_eq_nat_mul hT hf n
Syntax map
  • hT : MeasurePreserving T μ μ supplies measurability and the equality between the pushed-forward measure and \(\mu\).
  • hf : Integrable f μ makes every finite pullback integrable.
  • n : ℕ may be zero. The empty sum and the scalar product \(0\int f\) are both zero.
  • No finite-mass, probability, ergodicity, or subadditivity premise occurs.

Bridge 3: integrate the center

One idea, three languages Read across, then read the syntax map
A human says
The centered block integral is the original block integral minus b copies of the one-step integral.
On paper
\(\int Y_b\,d\mu=\int X_b\,d\mu-b\int X_1\,d\mu.\)
In Lean
hX.integral_centeredProcess hT b
Syntax map
  • hX : IsIntegrableSubadditiveProcessCandidate T μ X provides integrability of every \(X_n\).
  • hT : MeasurePreserving T μ μ lets Bridge 2 integrate the one-step orbit sum.
  • The theorem does not yet assume probability or ergodicity and states no limit.
  • In base camp at \(b=2\), the exact values are \(-1=1-2\cdot1\).

Bridge 4: keep every residue lane under one ordinary-map sum

One idea, three languages Read across, then read the syntax map
A human says
For a positive block b, phase averaging bounds the centered target at bq+b+r by one Birkhoff sum of the centered b-block observable, divided by b.
On paper
\(Y_{bq+b+r}(\omega)\le b^{-1}S_{bq}(Y_b)(\omega).\)
In Lean
hX.centeredProcess_le_birkhoffSum_phase_average_div b q r hb ω
Syntax map
  • q counts complete retained blocks and r is a residue. RMT-29 later substitutes q = a - 1.
  • hb : b ≠ 0 is the exact positive-block gate needed to divide by the natural block length.
  • The sum is birkhoffSum T, using the original map \(T\), not \(T^b\).
  • This imported RMT-20 theorem is finite and pointwise. It assumes neither probability nor ergodicity.

Bridge 5: state the generalized fixed-block theorem

One idea, three languages Read across, then read the syntax map
A human says
If almost every normalized path has some eventual real lower bound, then its real limsup is at most the normalized integral of any chosen positive block.
On paper
\(\bigl(X_n(\omega)/n\text{ eventually bounded below a.e.}\bigr)\Longrightarrow\limsup_n X_n(\omega)/n\le b^{-1}\int X_b\,d\mu\text{ a.e.}\)
In Lean
hX.ae_limsup_normalized_le_blockIntegral_of_ae_isBoundedUnder_ge hT hXlower b hb
Syntax map
  • [IsProbabilityMeasure μ] aligns the ergodic Birkhoff limit with the raw integral.
  • hT : Ergodic T μ supplies preservation and the constant almost-everywhere Birkhoff limit under the original map.
  • hXlower has exact type ∀ᵐ ω ∂μ, IsBoundedUnder (· ≥ ·) atTop (fun n ↦ X n ω / (n : ℝ)).
  • ∀ᵐ ω ∂μ reads “for almost every \(\omega\) with respect to \(\mu\).” Inside it, (· ≥ ·) encodes an eventual lower bound.
  • This is the generalized current interface. It accepts signed processes when their normalized paths meet the lower-bound gate.

Bridge 6: discharge the gate with nonnegativity

One idea, three languages Read across, then read the syntax map
A human says
A pointwise nonnegative process has zero as a lower bound, so it inherits the same fixed-block limsup estimate.
On paper
\(0\le X_n(\omega)\Longrightarrow\limsup_n X_n(\omega)/n\le b^{-1}\int X_b\,d\mu\text{ a.e.}\)
In Lean
hX.ae_limsup_normalized_le_blockIntegral hT hXnonneg b hb
Syntax map
  • hXnonneg : ∀ n ω, 0 ≤ X n ω proves that every normalized term is at least zero, including totalized time zero.
  • The wrapper constructs hXlower and calls Bridge 5. It is not the most general theorem.
  • Base camp and the log-positive cocycle process use this route.
  • The negative-square countermodel satisfies subadditivity but cannot supply hXnonneg or the generalized lower-bound premise.

Bridge 7: optimize the cocycle bounds over every block

One idea, three languages Read across, then read the syntax map
A human says
For a discrete matrix cocycle with integrable one-step log-positive growth, the samplewise normalized log-positive limsup is at most the deterministic integrated Fekete rate almost everywhere.
On paper
\(\limsup_n n^{-1}\log^+\lVert C(n,\omega)\rVert_\infty\le\gamma_\mu^+(C)\text{ for }\mu\text{-almost every }\omega.\)
In Lean
hC.ae_limsup_normalized_le_integratedLogPlusGrowthRate hT
Syntax map
  • hC : C.HasIntegrableGeneratorLogPlus supplies the integrable subadditive candidate and its pointwise nonnegativity.
  • hT : Ergodic C.base μ concerns the cocycle’s original base map.
  • ae_all_iff intersects the block-dependent conull events over all natural \(b\).
  • integratedLogPlusGrowthRate_eq_sInf rewrites the deterministic rate as the infimum of positive-block ratios; le_csInf uses the blockwise inequalities.
  • The result is only an upper limsup bound. It supplies neither a lower liminf nor convergence.

Try the exact declarations in the repository

Try it in the repository NonlinearDynamics/Random/RandomCocycles/SubadditiveUpperLimsup.lean

The authoritative source is formalization/NonlinearDynamics/Random/RandomCocycles/SubadditiveUpperLimsup.lean. For a full project check, save this temporary query as formalization/NonlinearDynamics/SubadditiveUpperLimsupChecks.lean:

import NonlinearDynamics.Random.RandomCocycles.SubadditiveUpperLimsup

open MeasureTheory Set Filter Topology Finset Function
open NonlinearDynamics.Random.RandomCocycles

-- Imported finite bridges used by RMT-29.
#check normalized_eq_centered_add_birkhoffAverage
#check IsIntegrableSubadditiveProcessCandidate.centeredProcess_le_birkhoffSum_phase_average_div

-- The five RMT-29 public declarations, in source order.
#check integral_birkhoffSum_eq_nat_mul
#check IsIntegrableSubadditiveProcessCandidate.integral_centeredProcess
#check IsIntegrableSubadditiveProcessCandidate.ae_limsup_normalized_le_blockIntegral_of_ae_isBoundedUnder_ge
#check IsIntegrableSubadditiveProcessCandidate.ae_limsup_normalized_le_blockIntegral
#check DiscreteMatrixCocycle.HasIntegrableGeneratorLogPlus.ae_limsup_normalized_le_integratedLogPlusGrowthRate

Then type:

cd formalization
lake env lean NonlinearDynamics/SubadditiveUpperLimsupChecks.lean

Delete the temporary query file afterward. To compile the authoritative module itself, type:

cd formalization
lake env lean NonlinearDynamics/Random/RandomCocycles/SubadditiveUpperLimsup.lean

These commands import the pinned project and Mathlib and may require substantial disk space and memory.

Full project check, from the repository root
cd formalization
lake env lean -DwarningAsError=true NonlinearDynamics/Random/RandomCocycles/SubadditiveUpperLimsup.lean

Resource note: this exact file uses the repository's pinned Lean and Mathlib dependencies. Initial project setup can require substantial disk space and build time. For a lightweight first step on macOS or Linux, use the page's standalone Lean-core or Std tutorial.

Type the finite process and lower-bound ledgers with Lean and Std

The next worksheet uses exact integers and rationals. It computes both paths of the two-state process through horizon eight, its centered values, block ratios, and phase coefficients. It also computes the negative-square ledger and concrete witnesses defeating several proposed lower bounds.

The finite Boolean checks test subadditivity and nonnegativity through horizon twelve; they illustrate the formula but are not the general Mathlib proof. The worksheet does not define a measure, a filter, or an infinite limsup. Save this exact text as /tmp/SubadditiveUpperLimsupTutorial.lean:

import Std

namespace SubadditiveUpperLimsupTutorial

inductive Point where
  | a
  | b
  deriving Repr, DecidableEq

def step : Point → Point
  | .a => .b
  | .b => .a

def iterate : Nat → Point → Point
  | 0, p => p
  | n + 1, p => iterate n (step p)

def phi : Point → Int
  | .a => 0
  | .b => 1

def ceilHalf (n : Nat) : Nat := (n + 1) / 2

def process (n : Nat) (p : Point) : Int :=
  (ceilHalf n : Int) + phi (iterate n p) - phi p

def oneStep : Point → Int := process 1

def orbitSum (n : Nat) (f : Point → Int) (p : Point) : Int :=
  ((List.range n).map fun j => f (iterate j p)).sum

def centered (n : Nat) (p : Point) : Int :=
  process n p - orbitSum n oneStep p

def normalize (z : Int) (n : Nat) : Rat :=
  if n = 0 then 0 else (z : Rat) / (n : Rat)

def integralTwo (f : Point → Int) : Rat :=
  ((f .a : Rat) + (f .b : Rat)) / 2

def processIntegral (n : Nat) : Rat := integralTwo (process n)

def centeredIntegral (n : Nat) : Rat := integralTwo (centered n)

def blockTarget (b : Nat) : Rat :=
  if b = 0 then 0 else processIntegral b / (b : Rat)

def processLedger (n : Nat) :=
  (n, process n .a, process n .b,
    normalize (process n .a) n, normalize (process n .b) n,
    processIntegral n, blockTarget n)

def blockPrefix (b a : Nat) : Nat := b * (a - 1)

def blockCoefficient (b r a : Nat) : Rat :=
  (blockPrefix b a : Rat) / ((b : Rat) * (b * a + r : Rat))

def subadditiveThrough (bound : Nat) : Bool :=
  (List.range (bound + 1)).all fun m =>
    (List.range (bound + 1)).all fun n =>
      [.a, .b].all fun p =>
        process (m + n) p ≤ process m p + process n (iterate m p)

def nonnegativeThrough (bound : Nat) : Bool :=
  (List.range (bound + 1)).all fun n =>
    [.a, .b].all fun p => 0 ≤ process n p

def negativeProcess (n : Nat) : Int := -((n * n : Nat) : Int)

def normalizedNegative (n : Nat) : Rat := normalize (negativeProcess n) n

def lowerWitness (lower : Int) : Nat := lower.natAbs + 1

def lowerWitnessRow (lower : Int) :=
  let n := lowerWitness lower
  (lower, n, normalizedNegative n,
    decide (normalizedNegative n < (lower : Rat)))

#eval (List.range 9).map processLedger
#eval (List.range 9).map fun n => (n, centered n .a, centered n .b)
#eval (centeredIntegral 2, processIntegral 1,
  centeredIntegral 2 / 2 + processIntegral 1, blockTarget 2)
#eval (List.range 6).map fun b => (b + 1, blockTarget (b + 1))
#eval [2, 3, 4, 5, 6].map fun a =>
  (a, blockCoefficient 2 0 a, blockCoefficient 2 1 a)
#eval (List.range 7).map fun n => (n, negativeProcess n, normalizedNegative n)
#eval [0, -1, -5, -20].map lowerWitnessRow
#eval (0 : Rat) ≤ (-1 : Rat)

example : subadditiveThrough 12 = true := by native_decide
example : nonnegativeThrough 12 = true := by native_decide
example :
    (List.range 9).map (fun n => centered n .a) =
      [0, 0, -1, -1, -2, -2, -3, -3, -4] := by
  native_decide
example : blockTarget 1 = 1 := by native_decide
example : blockTarget 2 = 1 / 2 := by native_decide
example :
    [0, -1, -5, -20].all (fun lower =>
      let n := lowerWitness lower
      normalizedNegative n < (lower : Rat)) = true := by
  native_decide

end SubadditiveUpperLimsupTutorial

From any directory, type:

source "$HOME/.elan/env"
elan run leanprover/lean4:v4.32.0 lean \
  /tmp/SubadditiveUpperLimsupTutorial.lean

The byte-for-byte standard output emitted by Lean is:

[(0, 0, 0, 0, 0, 0, 0),
 (1, 2, 0, 2, 0, 1, 1),
 (2, 1, 1, (1 : Rat)/2, (1 : Rat)/2, 1, (1 : Rat)/2),
 (3, 3, 1, 1, (1 : Rat)/3, 2, (2 : Rat)/3),
 (4, 2, 2, (1 : Rat)/2, (1 : Rat)/2, 2, (1 : Rat)/2),
 (5, 4, 2, (4 : Rat)/5, (2 : Rat)/5, 3, (3 : Rat)/5),
 (6, 3, 3, (1 : Rat)/2, (1 : Rat)/2, 3, (1 : Rat)/2),
 (7, 5, 3, (5 : Rat)/7, (3 : Rat)/7, 4, (4 : Rat)/7),
 (8, 4, 4, (1 : Rat)/2, (1 : Rat)/2, 4, (1 : Rat)/2)]
[(0, 0, 0), (1, 0, 0), (2, -1, -1), (3, -1, -1), (4, -2, -2), (5, -2, -2), (6, -3, -3), (7, -3, -3), (8, -4, -4)]
(-1, 1, (1 : Rat)/2, (1 : Rat)/2)
[(1, 1), (2, (1 : Rat)/2), (3, (2 : Rat)/3), (4, (1 : Rat)/2), (5, (3 : Rat)/5), (6, (1 : Rat)/2)]
[(2, (1 : Rat)/4, (1 : Rat)/5),
 (3, (1 : Rat)/3, (2 : Rat)/7),
 (4, (3 : Rat)/8, (1 : Rat)/3),
 (5, (2 : Rat)/5, (4 : Rat)/11),
 (6, (5 : Rat)/12, (5 : Rat)/13)]
[(0, 0, 0), (1, -1, -1), (2, -4, -2), (3, -9, -3), (4, -16, -4), (5, -25, -5), (6, -36, -6)]
[(0, 1, -1, true), (-1, 2, -2, true), (-5, 6, -6, true), (-20, 21, -21, true)]
false

The first ledger columns are \((n,X_n(a),X_n(b),X_n(a)/n,X_n(b)/n,\int X_n,\int X_n/n)\). The second is the centered ledger. The four-tuple \((-1,1,1/2,1/2)\) is the block-two cancellation. The next outputs list the block ratios and the two residue coefficients. Each true in the negative-square witness list says that the displayed horizon falls below the proposed lower bound. The final false is the invalid conclusion \(0\le-1\).

Standalone tutorial, suitable for a normal macOS or Linux machine. It imports only Std and never opens the project’s Mathlib dependency graph. This exact file and output were checked with the pinned Lean 4.32.0 toolchain. The exact project module uses the full project commands above.

Complete source-order declaration, private-helper, and probe map

The checked source is 428 lines and has SHA-256 c39c8b3547ab0cfe949a8859d76ad226c1bef71d3648fc61c76487bb825bf1b9. It contains five public declarations, fourteen private support items, three anonymous compiled probes, and five axiom queries. The full sequence is:

No.VisibilitySource itemExact role
1publicintegral_birkhoffSum_eq_nat_mulIntegrates a finite orbit sum under measure preservation
2privateblockPrefixDefines the one-block-short prefix \(b(a-1)\)
3privatetendsto_blockPrefixProves that prefix tends to infinity for \(b\ne0\)
4privatetendsto_arithmeticProves each lane \(a\mapsto ba+r\) is cofinal
5privatetendsto_blockCoefficientSends the phase coefficient to \(1/b\)
6publicIsIntegrableSubadditiveProcessCandidate.integral_centeredProcessComputes \(\int Y_b=\int X_b-b\int X_1\)
7publicIsIntegrableSubadditiveProcessCandidate.ae_limsup_normalized_le_blockIntegral_of_ae_isBoundedUnder_geGeneralized fixed-block theorem under an almost-everywhere eventual lower bound
8publicIsIntegrableSubadditiveProcessCandidate.ae_limsup_normalized_le_blockIntegralNonnegative compatibility wrapper for item 7
9publicDiscreteMatrixCocycle.HasIntegrableGeneratorLogPlus.ae_limsup_normalized_le_integratedLogPlusGrowthRateIntersects all block bounds and applies the Fekete infimum
10privatermt29ZeroProcessDefines the totalized zero boundary process
11privatermt29ZeroProcess_candidatePackages it as an integrable subadditive candidate
12privatermt29FlipDefines the Boolean flip
13privatermt29TwoCycleMeasureDefines the equally weighted two-point measure
14privateprobability instanceProves the two-point measure has total mass one
15privatermt29Flip_measurePreserving_twoCycleProves the flip preserves the two-point measure
16privatermt29Flip_preErgodic_twoCycleProves invariant sets are null or conull
17privatermt29Flip_ergodic_twoCycleCombines preservation and pre-ergodicity
18privatermt29Flip_square_eq_idComputes the square of the flip
19privatermt29Flip_square_not_ergodicProves that identity square is not ergodic here
20probehorizon-zero integral exampleChecks totality of the empty Birkhoff sum identity
21probezero-process limsup exampleApplies the nonnegative wrapper at block one
22probeergodic-flip/block-two exampleApplies the theorem although the powered map is nonergodic
23axiom queryitem 1Audits the finite integration theorem
24axiom queryitem 6Audits centered integration
25axiom queryitem 7Audits the generalized lower-bounded theorem
26axiom queryitem 8Audits the nonnegative wrapper
27axiom queryitem 9Audits the cocycle specialization

The proof of item 7 first combines the supplied lower bound with the one-step-Birkhoff upper bound so limsup_le_iff is legal in \(\mathbb R\). It then enters every arithmetic lane, composes the two Birkhoff limits with private items 3 and 4, multiplies by the coefficient from private item 5, applies finite phase averaging, and recombines the lanes. Item 8 does only one new thing: it constructs lower bound zero and invokes item 7.

Boundary models

Negative-square process and the real-limsup gate

Status: explanatory countermodel for the generalized signature, not one of the three anonymous compiled probes.

The earlier \(Z_n=-n^2\) ledger is subadditive and integrable but has no eventual real lower bound after normalization. It therefore explains why item 7 exposes hXlower. The module’s compiled probes test totalized zero and powered-map behavior; they do not compile this negative process.

Positive additive one-point model

Status: explanatory sharpness model, not one of the three compiled anonymous examples in the RMT-29 module.

On a one-point probability space let \(X_n=cn\) with \(c\ge0\). The process is additive, every normalized value is \(c\), and

\[ \frac1b\int X_b\,d\mu=c. \]

The theorem is sharp at every block size.

Zero process and time zero

Status: represented by compiled boundary support and an anonymous example.

If \(X_n=0\), every conclusion is equality. The normalized expression at time zero is also totalized by Lean’s real division, but the asymptotic proof works eventually at positive times. No growth interpretation is assigned to division by a zero horizon.

The flip blocks powered-map reasoning

Status: represented by the compiled Bool boundary and block-two example.

Let \(T\) swap two equally weighted points. Then \(T\) is ergodic while \(T^2\) is the identity and is not ergodic. A proof that assumes Birkhoff convergence for \(T^2\) from ergodicity of \(T\) is invalid. The RMT-29 proof uses phase averaging and Birkhoff only for \(T\).

Empty matrix index

Status: explanatory signature audit, not one of the three compiled anonymous examples in the RMT-29 module.

The cocycle theorem does not need a positive matrix dimension. With an empty finite index type, matrix definitions and nonnegativity remain total. This boundary demonstrates that no hidden inhabitant is required.

What is proved, and what is not

The checked layer proves:

  • exact finite Birkhoff-sum integration under measure preservation;
  • exact centered-block integration;
  • a generic almost-everywhere upper limsup bound for integrable subadditive candidates whose normalized paths are eventually bounded below almost everywhere on an ergodic probability system;
  • a pointwise-nonnegative compatibility wrapper for that theorem; and
  • the corresponding integrated-rate bound for log-positive matrix cocycles.

It does not prove:

  • a matching lower liminf bound;
  • convergence of \(X_n/n\);
  • the full subadditive ergodic theorem;
  • equality with the integrated rate;
  • convergence in \(L^1\);
  • an interchange of limit and integral;
  • a signed logarithmic growth theorem;
  • existence of Lyapunov exponents in the usual signed sense;
  • an Oseledets splitting;
  • mixing, independence, or powered-map ergodicity; or
  • any quantitative rate of convergence.

Thirty-two solved exercises

Exercise 1: check the one-step majorant

Why is \(X_n\le S_n(X_1)\) a natural induction?

Solution. Split the successor horizon as \(n\) followed by \(1\). Subadditivity gives \(X_{n+1}\le X_n+X_1\circ T^n\); the induction hypothesis appends this last shifted one-step term to \(S_n(X_1)\). The positive-horizon induction starts at \(n=1\), where equality holds.

Exercise 2: determine the sign of the center

What sign does \(Y_n=X_n-S_n(X_1)\) have for positive \(n\)?

Solution. The one-step majorant gives \(Y_n\le0\).

Exercise 3: reconstruct the process

Solve the definition of \(Y_n\) for \(X_n/n\).

Solution. Divide \(X_n=Y_n+S_n(X_1)\) by \(n\gt0\) to obtain \(X_n/n=Y_n/n+A_n(X_1)\).

Exercise 4: integrate an orbit sum

Why is \(\int S_bf=b\int f\)?

Solution. Integrate the finite sum termwise. Each iterate preserves the measure, so every pullback term has integral \(\int f\). There are \(b\) terms.

Exercise 5: integrate the center

Compute \(\int Y_b\).

Solution. Linearity and Exercise 4 give \(\int Y_b=\int X_b-b\int X_1\).

Exercise 6: find the missing block

For \(n=ba+r\), why use \(m=b(a-1)\) rather than \(ba\)?

Solution. The finite phase theorem must retain boundary corrections. One complete block is sacrificed so every phase row fits the common horizon.

Exercise 7: calculate the coefficient

Evaluate \(b(a-1)/(b(ba+r))\) as \(a\to\infty\).

Solution. Divide numerator and denominator by \(a\). The limit is \(b/(b^2)=1/b\) because \(b\gt0\).

Exercise 8: explain the residue bound

Why require \(0\le r\lt b\)?

Solution. Those are exactly the finitely many residues modulo \(b\), so their arithmetic progressions cover every natural time.

Exercise 9: prove the arithmetic map diverges

Why does \(a\mapsto ba+r\) tend to infinity?

Solution. Since \(b\ge1\), one has \(a\le ba\le ba+r\).

Exercise 10: prove the prefix diverges

Why does \(a\mapsto b(a-1)\) tend to infinity?

Solution. Beyond any finite prefix, \(a-1\) tends to infinity, and multiplication by the positive integer \(b\) preserves divergence.

Exercise 11: identify the Birkhoff map

Which transformation appears in the limiting averages?

Solution. The original map \(T\), both for \(Y_b\) and for \(X_1\).

Exercise 12: reject the powered-map shortcut

Why is Ergodic T insufficient for a direct \(T^b\) Birkhoff call?

Solution. Ergodicity need not pass to powers. The two-point flip with \(b=2\) is a counterexample.

Exercise 13: combine the limiting constants

Simplify \((\int Y_b)/b+\int X_1\).

Solution. Substitute the centered integral formula. The one-step terms cancel, leaving \((\int X_b)/b\).

Exercise 14: locate probability

Where does mass one matter?

Solution. It identifies the ergodic Birkhoff constant with the raw integral rather than the integral divided by total mass.

Exercise 15: locate measure preservation

Where is preservation used before the limit theorem?

Solution. It makes every shifted pullback of an integrable observable have the same integral, yielding the finite Birkhoff-sum integral identity.

Exercise 16: locate the generalized lower-bound gate

Where does eventual lower-boundedness enter the generalized proof?

Solution. Together with the one-step-Birkhoff upper bound, it supplies the two order bounds needed to use limsup_le_iff in the conditionally complete real order. Pointwise nonnegativity is used only by the wrapper to choose the lower bound zero.

Exercise 17: test a negative process

Show that \(X_n=-n^2\) is subadditive.

Solution. Since \((m+n)^2\ge m^2+n^2\), negation reverses the inequality.

Exercise 18: normalize the negative process

What is \(X_n/n\) for positive \(n\)?

Solution. It is \(-n\), which is not bounded below in \(\mathbb R\).

Exercise 19: test the zero process

What does the block theorem say for \(X_n=0\)?

Solution. Both limsup and block integral ratio are zero, so the inequality is equality.

Exercise 20: test a sharp positive process

What does the theorem say for \(X_n=cn\) with \(c\ge0\) on one point?

Solution. Every normalized term and every normalized block integral is \(c\), so the estimate is sharp.

Exercise 21: separate limsup from limit

Does \(\limsup a_n\le L\) imply \(a_n\to L\)?

Solution. No. The sequence alternating between \(0\) and \(1\) has limsup \(1\) but does not converge.

Exercise 22: identify the missing half

What kind of inequality would complement the upper bound?

Solution. A lower estimate of the form \(\liminf X_n/n\ge\gamma\), together with the reverse comparison needed to identify both quantities.

Exercise 23: take the block infimum

If \(L\le a_b\) for every \(b\ge1\), what follows?

Solution. Nonemptiness plus the inequalities \(L\le a_b\) lets le_csInf conclude \(L\le\inf_{b\ge1}a_b\).

Exercise 24: witness nonemptiness

Which block is the simplest witness for the Fekete set?

Solution. Block \(b=1\).

Exercise 25: intersect the events

Why can the proof enforce every positive-block inequality simultaneously?

Solution. Positive natural numbers are countable, and a countable intersection of full-measure events has full measure.

Exercise 26: inspect time zero

Why is \(X_0/0\) not an analytic premise?

Solution. Lean’s real division is total, but the proof eventually works only at positive times and the Fekete infimum ranges over positive blocks.

Exercise 27: explain log-positive nonnegativity

Why does the cocycle endpoint inherit the generic lower bound?

Solution. By definition \(\log^+x=\max(\log x,0)\), so the observable is pointwise nonnegative at every horizon.

Exercise 28: reject a signed exponent claim

Why is the endpoint not a signed Lyapunov exponent theorem?

Solution. Positive clipping erases contraction. A negative logarithmic growth rate can produce the identically zero log-positive process.

Exercise 29: reject independence

Where are independent orbit samples assumed?

Solution. Nowhere. The proof uses deterministic subadditivity, measure preservation, ergodicity, integrability, and finite phase averaging.

Exercise 30: reject a limit-integral exchange

Does the cocycle endpoint prove \(\int\lim X_n/n=\lim\int X_n/n\)?

Solution. No. It compares a pointwise limsup to an independently defined deterministic infimum of finite-horizon integrals.

Exercise 31: audit the empty index

Why need no Nonempty ι hypothesis in the cocycle theorem?

Solution. The finite-dimensional matrix and norm interfaces used by the theorem are total for an empty finite index. The proof never chooses an index.

Exercise 32: state the exact summit

Give the strongest justified one-sentence conclusion.

Solution. For an ergodic probability-base discrete matrix cocycle with an integrable one-step log-positive envelope, the samplewise normalized log-positive norm has limsup at most the integrated log-positive Fekete rate almost everywhere.

Continue to the finite lower-bound bridge

Finite Bad-Block Measure Bounds Before Kingman’s Lower Liminf develops the next checked layer. It turns visits to strict centered short-block failures into a finite real-measure ratio through ordered interval packing. That chapter still stops before the ergodic lower-liminf conclusion.

The Guarded Real-Liminf Bridge to Log-Positive Kingman Convergence continues through the later rational null-event layer, exposes Mathlib’s exact real-boundedness gates, and completes the log-positive convergence assembly. This later result does not change the one-sided scope of RMT-29 itself.

Full project check

After installing the repository’s pinned dependencies, run this from the repository root:

cd formalization
lake env lean NonlinearDynamics/Random/RandomCocycles/SubadditiveUpperLimsup.lean

This command may compile substantial parts of the pinned Mathlib graph and therefore may require substantial disk space and memory. The Standalone tutorial above remains the lighter route for following the arithmetic interactively.

References

J. F. C. Kingman. The ergodic theory of subadditive stochastic processes, Journal of the Royal Statistical Society: Series B 30(3), 499-510, 1968, doi:10.1111/j.2517-6161.1968.tb00749.x. This is the primary source for the full asymptotic theorem. RMT-29 formalizes only the upper-limsup component described above.

J. Michael Steele. Kingman’s subadditive ergodic theorem, Annales de l’Institut Henri Poincaré, Probabilités et Statistiques 25(1), 93-98, 1989. Steele gives a conceptually algorithmic full proof, beginning with a Birkhoff-based centering reduction and then using an interval-decomposition argument. It is proof-lineage context, not a Lean dependency.

Steven P. Lalley. Kingman’s Subadditive Ergodic Theorem, University of Chicago lecture notes, undated, accessed 2026-07-22. The notes explain why \(T^b\) need not be ergodic and motivate averaging all phases so ordinary \(T\)-Birkhoff convergence applies. They are a pedagogical source, not a primary theorem source; RMT-20 separately audits a finite boundary inconsistency in their displayed rows.

George D. Birkhoff. Proof of the Ergodic Theorem, Proceedings of the National Academy of Sciences 17(12), 656-660, 1931. This is the historical source for the individual ergodic theorem used only through the repository’s checked RMT-28 interface.

Mathlib contributors. Liminf and limsup, Mathlib commit 81a5d257. The pinned source supplies limsup_le_iff.

Mathlib contributors. Arithmetic progressions at atTop, Mathlib commit 81a5d257. The pinned source supplies Eventually.atTop_of_arithmetic.