Start with a four-state clock:

\[ \Omega=\{0,1,2,3\}, \qquad T(i)=i+1\pmod 4. \]

Give \(\Omega\) the discrete measurable structure, in which every subset is an allowed event, and define

\[ \mu(\{i\})=\frac14\qquad(i=0,1,2,3). \]

This is a probability measure because the four masses add to one. The map \(T\) merely rotates those equal masses, so it preserves \(\mu\).

At the four states, let a one-dimensional matrix cocycle use the positive scalar generators

\[ A(0)=\begin{bmatrix}1/2\end{bmatrix},\quad A(1)=\begin{bmatrix}4\end{bmatrix},\quad A(2)=\begin{bmatrix}1/4\end{bmatrix},\quad A(3)=\begin{bmatrix}8\end{bmatrix}. \]

A one-by-one matrix is still a matrix. Its induced infinity norm is the absolute value of its only entry. Starting at state \(0\), the chronological norms are therefore

\[ \frac12,\qquad4,\qquad\frac14,\qquad8. \]

The exact four-step product norm is

\[ N_4(0) =\frac12\cdot4\cdot\frac14\cdot8 =4. \]

Its positive logarithmic growth is

\[ P_4(0)=\log^+4=\log4=2\log2. \]

Now clip every one-step contraction before adding:

\[ \begin{aligned} S_4(0) &=\log^+\!\left(\frac12\right) +\log^+(4) +\log^+\!\left(\frac14\right) +\log^+(8)\\ &=0+2\log2+0+3\log2\\ &=5\log2. \end{aligned} \]

Thus

\[ \boxed{P_4(0)=2\log2\leq5\log2=S_4(0)}. \]

The gap is the whole point. The exact product incorporates the contractions \(1/2\) and \(1/4\), which offset part of the expansion. The envelope deletes those negative logarithms, so it is easier to integrate but intentionally less precise.

Four equally weighted states form a cycle. Their one-step matrix norms are one half, four, one quarter, and eight, with log-positive coefficients zero, two, zero, and three in units of log two. The exact product norm is four, so its positive log is two log two. The orbit envelope is five log two, and the one-step probability average is five fourths log two.
FigureOne complete finite model: the base map rotates four equal atoms. Two contractions disappear at the positive-log gate, while the two expansions contribute \(2\log2\) and \(3\log2\). The actual four-step positive log is \(2\log2\), below the orbit envelope \(5\log2\). The finite one-step average \(5\log2/4\) makes the integrability hypothesis visible rather than implicit.

This scalar model was chosen to expose the bookkeeping. General matrices need not commute, but their norms still satisfy the submultiplicative inequality that drives the same envelope estimate.

Define the observable

A log-positive integrability envelope is a real-valued upper-growth observable for a matrix cocycle. It keeps positive logarithmic expansion and clips everything else to zero. If

\[ N_k(\omega)=\lVert C(k,\omega)\rVert_\infty \]

is the finite-time maximum absolute row-sum norm, define

\[ P_k(\omega) {} = \log^+ N_k(\omega) {} = \max\!\left(0,\operatorname{Real.log}N_k(\omega)\right). \]

Here \(C(k,\omega)\) is the cocycle matrix after \(k\) steps from base state \(\omega\). The notation \(\log^+\), read “log positive,” is Mathlib’s Real.posLog. The result \(P_k:\Omega\to\mathbb R\) is measurable and nonnegative.

The word envelope is essential. \(P_k\) controls the positive tail of norm growth, but it does not preserve the full logarithmic dynamics. It sends exact collapse, strict contraction, and neutral norm one to the same real value zero.

Exact collapse, strict contraction, and unit norm enter the same zero output of the positive-log gate, while norms above one retain their positive logarithmic size. Shifted one-step outputs are then added into a finite orbit envelope.
FigureFinding: the positive-log gate preserves expansion above unit norm but deliberately merges collapse, contraction, and unit scale at zero. Summing the shifted one-step outputs gives a nonnegative finite-horizon majorant whose integrability can be inherited from one explicit generator assumption. The diagram does not recover negative growth, the extended-real bottom value, a normalized limit, or a Lyapunov exponent.

What the gate retains and discards

For a nonnegative real norm \(r\), Mathlib’s definition gives the piecewise picture

\[ \log^+ r {} = \begin{cases} 0, & 0\le r\le 1,\\ \log r, & 1\le r. \end{cases} \]

The overlap at \(r=1\) is harmless because both branches equal zero. The construction is continuous even at \(r=0\), where Lean’s total real logarithm also has value zero.

Compare it with the extended log-norm observable \(L_k\) from RMT-14:

Norm regimeExtended log norm \(L_k\)Log-positive envelope \(P_k\)Information retained by \(P_k\)
\(N_k=0\)\(\bot\)\(0\)No record of exact collapse
\(0\lt N_k\lt1\)A negative real\(0\)No contraction magnitude
\(N_k=1\)\(0\)\(0\)Neutral scale is included in the same bucket
\(N_k\gt1\)A positive real\(\log N_k\)Positive expansion size

Thus \(P_k\) is not a replacement for \(L_k\). It is the simpler real majorant needed to state an ordinary Bochner-integrability hypothesis for the expanding part.

Finite-time subadditivity

RMT-14 proves norm submultiplicativity across the one-sided cocycle split:

\[ N_{m+k}(\omega) \le N_k(T^m\omega)N_m(\omega). \]

The positive logarithm is monotone on nonnegative inputs, and Mathlib proves

\[ \log^+(rs)\le \log^+r+\log^+s. \]

Consequently RMT-15 obtains

\[ P_{m+k}(\omega) \le P_k(T^m\omega)+P_m(\omega). \]

This is still a pointwise finite-time inequality. It invokes no probability, ergodicity, expectation, or limiting theorem.

The orbit-sum majorant

The one-step envelope is sampled along the forward base orbit and added:

\[ S_k(\omega) {} = \sum_{j=0}^{k-1}P_1(T^j\omega). \]

Lean names this function orbitLogPlusSum. The empty sum is zero, and extending the horizon appends the newest shifted one-step term:

\[ S_{k+1}(\omega) {} = S_k(\omega)+P_1(T^k\omega). \]

Induction with finite-time subadditivity proves the domination estimate

\[ 0\le P_k(\omega)\le S_k(\omega). \]

The right side is deliberately loose. It discards cancellation between matrix factors and every contracting one-step contribution. Its value is that it is a finite sum of copies of one measurable function pulled back along the base orbit.

The explicit integrability hypothesis

The project does not derive integrability from measure preservation. It names the missing assumption:

def HasIntegrableGeneratorLogPlus
    (C : DiscreteMatrixCocycle (ι := ι) μ) : Prop :=
  Integrable (C.logPlusNormObservable 1) μ

For a real-valued function, Mathlib’s Integrable predicate is absolute Bochner integrability with respect to the stated measure. Because \(P_1\) is nonnegative, this asks for a finite integral of its expanding tail. The measure \(\mu\) may be arbitrary. The definition does not assert \(\mu(\Omega)=1\), so the integral is not automatically an expectation.

The bundled base map is a measure-preserving transformation . Every natural iterate therefore also preserves \(\mu\), and integrability survives pullback:

\[ P_1\text{ integrable} \quad\Longrightarrow\quad \omega\mapsto P_1(T^j\omega)\text{ integrable for every }j. \]

A finite sum of those pullbacks is integrable, so \(S_k\) is integrable. Finally, measurability and \(0\le P_k\le S_k\) transfer integrability to every finite-horizon \(P_k\).

How the Lean interface is layered

The sixteen exported declarations deliberately separate four claims that are often compressed into one sentence.

First, logPlusNormObservable defines \(P_k\), while logPlusNormObservable_nonneg, logPlusNormObservable_zero, logPlusNormObservable_one, and measurable_logPlusNormObservable establish its elementary pointwise and measurable behavior. The finite split theorem logPlusNormObservable_add_le remains algebraic and pointwise.

Second, orbitLogPlusSum defines \(S_k\). Its zero and successor theorems fix the indexing convention, and measurable_orbitLogPlusSum proves the finite sum measurable. The theorem logPlusNormObservable_le_orbitLogPlusSum is the pointwise bridge \(P_k\le S_k\). None of these declarations assumes the generator envelope is integrable.

Third, HasIntegrableGeneratorLogPlus names the missing one-step hypothesis. It is a proposition attached to a cocycle, not a field silently inserted into every cocycle and not a conclusion of measure preservation.

Fourth, the three declarations in the HasIntegrableGeneratorLogPlus namespace propagate that hypothesis to base iterates, orbit sums, and finally finite-horizon envelopes. This order makes the proof auditable: transport, finite addition, then domination.

In Lean: define the clipped observable

One idea, three languages Read across, then read the syntax map
A human says
At outcome omega and horizon k, measure the cocycle matrix, take its infinity norm, apply the real logarithm, and replace any negative result by zero.
On paper
\(P_k(\omega)=\log^+\!\bigl(\lVert C(k,\omega)\rVert_\infty\bigr).\)
In Lean
C.logPlusNormObservable k ω = log⁺ (C.normObservable k ω)
Syntax map
  • C is the bundled one-sided discrete matrix cocycle.
  • k : ℕ is the number of generator matrices in the finite product.
  • ω : Ω is one starting state in the base space.
  • C.normObservable k ω is the selected induced infinity norm of the realized k-step cocycle matrix.
  • log⁺ is the notation for Real.posLog after opening Real as a scoped namespace. It returns an ordinary real number.
  • The equality is definitional: unfolding logPlusNormObservable exposes the right-hand side.

The exact project definition is:

def logPlusNormObservable
    (C : DiscreteMatrixCocycle (ι := ι) μ) (k : ℕ) : Ω → ℝ :=
  fun ω ↦ log⁺ (C.normObservable k ω)

Read fun ω ↦ … as “the function that sends \(\omega\) to …”. The result type Ω → ℝ is a real-valued observable, not a measure and not yet an integral.

In Lean: dominate a horizon by one-step terms

One idea, three languages Read across, then read the syntax map
A human says
The positive log of the whole k-step product is no larger than the sum of the one-step positive logs encountered along the first k base states.
On paper
\(P_k(\omega)\leq\displaystyle\sum_{j=0}^{k-1}P_1(T^j\omega)=S_k(\omega).\)
In Lean
C.logPlusNormObservable_le_orbitLogPlusSum k ω
Syntax map
  • The theorem is called with the cocycle C before the dot.
  • orbitLogPlusSum expands to a Finset sum over Finset.range k, which contains exactly 0, 1, …, k - 1.
  • C.base^[j] is Lean’s notation for the j-fold iterate of the base map. Applying it to ω gives \(T^j\omega\).
  • The conclusion is pointwise. It requires neither an integral nor a probability measure.

The definition being bounded is:

def orbitLogPlusSum
    (C : DiscreteMatrixCocycle (ι := ι) μ) (k : ℕ) : Ω → ℝ :=
  fun ω ↦ ∑ j ∈ Finset.range k,
    C.logPlusNormObservable 1 (C.base^[j] ω)

At k = 0, Finset.range 0 is empty, so this sum is zero. At k + 1, the new term has index k. That is the same half-open indexing convention used in the paper sum.

In Lean: propagate the integrability certificate

One idea, three languages Read across, then read the syntax map
A human says
If the one-step positive-log generator is integrable, then the positive-log norm at every finite horizon k is integrable.
On paper
\(P_1\in L^1(\mu)\Longrightarrow P_k\in L^1(\mu)\quad\text{for every finite }k.\)
In Lean
hC.integrable_logPlusNormObservable k
Syntax map
  • hC has type C.HasIntegrableGeneratorLogPlus. After unfolding, that is proof evidence for Integrable (C.logPlusNormObservable 1) μ.
  • The dot notation asks Lean to use hC as the theorem’s first explicit argument.
  • k is arbitrary but finite because its type is ℕ.
  • The conclusion is Integrable (C.logPlusNormObservable k) μ. It does not say that the sequence converges as k → ∞.

The proof uses two reusable intermediate certificates:

hC.integrable_at_base_iterate j
hC.integrable_orbitLogPlusSum k
hC.integrable_logPlusNormObservable k

They correspond, in order, to preservation under the shift, closure under a finite sum, and domination of the target observable by that sum.

Three common misreads

“Zero positive log means no dynamics.” False. It can mean exact annihilation, strict contraction, or norm one. The full matrix can still rotate, project, shear within unit norm, or collapse every vector.

“An integrable expanding tail gives an integrable logarithm.” False. The negative tail has been deleted. A zero matrix is the sharp counterexample: \(P_k=0\) but \(L_k=\bot\).

“A preserved measure turns the integral into an expectation.” False. Preservation says that pulling an integrable function along the base does not destroy integrability. Only a separately supplied probability normalization would justify expectation language.

Read the four-state integrability ledger

In the opening model, the one-step observable has four values:

State \(i\)Generator norm \(\lVert A(i)\rVert_\infty\)\(P_1(i)=\log^+\lVert A(i)\rVert_\infty\)Probability
\(0\)\(1/2\)\(0\)\(1/4\)
\(1\)\(4\)\(2\log2\)\(1/4\)
\(2\)\(1/4\)\(0\)\(1/4\)
\(3\)\(8\)\(3\log2\)\(1/4\)

Every function on this finite space is measurable. All four displayed values are finite, so the function is integrable. Its integral is

\[ \int_\Omega P_1\,d\mu =\frac14\bigl(0+2\log2+0+3\log2\bigr) =\frac54\log2. \]

Because \(\mu\) is a probability measure, this integral may also be called the expectation of \(P_1\). The project definition does not assume probability, so its general theorem correctly says “integrable” rather than “has finite expectation.”

Composing with the rotation only permutes the value list. For example,

\[ (P_1\circ T)(0,1,2,3) =\bigl(2\log2,0,3\log2,0\bigr). \]

The integral remains \(5\log2/4\). The same holds for every iterate \(P_1\circ T^j\). Adding four such shifted functions gives an integrable orbit sum. The theorem then uses

\[ 0\le P_4\le S_4 \]

and measurability of \(P_4\) to transfer integrability from \(S_4\) to \(P_4\). This last step is a domination argument, not another appeal to measure preservation.

Exact source excerpts

Full project check. This uses the repository’s pinned Lean and Mathlib dependencies and may require substantial disk space and memory. The checked implementation is in LogPlusIntegrability.lean. Its pointwise finite-horizon split first combines norm submultiplicativity, monotonicity of positive log, and the positive-log product inequality:

theorem logPlusNormObservable_add_le
    (C : DiscreteMatrixCocycle (ι := ι) μ) (m k : ℕ) (ω : Ω) :
    C.logPlusNormObservable (m + k) ω ≤
      C.logPlusNormObservable k (C.base^[m] ω) +
        C.logPlusNormObservable m ω := by
  calc
    log⁺ (C.normObservable (m + k) ω) ≤
        log⁺ (C.normObservable k (C.base^[m] ω) * C.normObservable m ω) :=
      Real.posLog_le_posLog (norm_nonneg _) (C.normObservable_add_le m k ω)
    _ ≤ log⁺ (C.normObservable k (C.base^[m] ω)) +
        log⁺ (C.normObservable m ω) := Real.posLog_mul

The first line after calc replaces the whole-product norm by a product of block norms. The second turns positive log of that product into a sum. No integration occurs in this theorem.

The final integrability theorem makes the proof order explicit:

theorem HasIntegrableGeneratorLogPlus.integrable_logPlusNormObservable
    {C : DiscreteMatrixCocycle (ι := ι) μ}
    (hC : C.HasIntegrableGeneratorLogPlus) (k : ℕ) :
    Integrable (C.logPlusNormObservable k) μ := by
  apply (hC.integrable_orbitLogPlusSum k).mono'
    (C.measurable_logPlusNormObservable k).aestronglyMeasurable
  filter_upwards with ω
  rw [Real.norm_eq_abs, abs_of_nonneg (C.logPlusNormObservable_nonneg k ω)]
  exact C.logPlusNormObservable_le_orbitLogPlusSum k ω

The mono’ domination principle asks for an integrable majorant, an almost-everywhere strongly measurable target, and an almost-everywhere norm bound. The project has a pointwise bound, so it is strong enough to discharge the almost-everywhere obligation.

Standalone tutorial: arithmetic worksheet

Standalone tutorial. The real logarithm is analytic, but the opening example uses powers of two. We can therefore record every log size exactly by its coefficient of \(\log2\). This complete program imports only Std; it does not import Mathlib or the project.

Save it as LogPositiveEnvelopeScratch.lean:

import Std

namespace LogPositiveEnvelopeScratch

-- A value e represents the scalar generator norm 2^e.
def exponents : List Int := [-1, 2, -2, 3]

-- log⁺(2^e) = max(0, e) · log 2.
def positiveLogCoeff (e : Int) : Nat :=
  e.toNat

def productExponent : Int :=
  exponents.foldl (fun total e => total + e) 0

def finiteLogPlusCoeff : Nat :=
  positiveLogCoeff productExponent

def orbitEnvelopeCoeff : Nat :=
  (exponents.map positiveLogCoeff).sum

def envelopeBoundHolds : Bool :=
  decide (finiteLogPlusCoeff ≤ orbitEnvelopeCoeff)

#eval exponents.map positiveLogCoeff
#eval productExponent
#eval finiteLogPlusCoeff
#eval orbitEnvelopeCoeff
#eval envelopeBoundHolds
#eval (orbitEnvelopeCoeff, exponents.length)

end LogPositiveEnvelopeScratch

Run exactly this small file on macOS or Linux with the pinned Lean toolchain:

elan run leanprover/lean4:v4.32.0 lean LogPositiveEnvelopeScratch.lean

The outputs should be [0, 2, 0, 3], 2, 2, 5, true, and (5, 4). They encode

\[ P_4=2\log2, \qquad S_4=5\log2, \qquad \int P_1\,d\mu=\frac54\log2. \]

The worksheet checks the finite arithmetic only. A list of integer exponents does not define Mathlib’s matrix cocycle or measure-preserving map, and it supplies no Bochner-integrability proof.

Try the exact declarations in the project

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

Full project check. This uses the repository’s pinned Lean and Mathlib dependencies and may require substantial disk space and memory. Place these probes after the module import:

import NonlinearDynamics.Random.RandomCocycles.LogPlusIntegrability

open Matrix MeasureTheory
open scoped Matrix.Norms.Operator Real
open NonlinearDynamics.Random.RandomCocycles

#check Real.posLog
#check Real.posLog_nonneg
#check Real.posLog_mul
#check DiscreteMatrixCocycle.logPlusNormObservable
#check DiscreteMatrixCocycle.logPlusNormObservable_nonneg
#check DiscreteMatrixCocycle.logPlusNormObservable_zero
#check DiscreteMatrixCocycle.logPlusNormObservable_one
#check DiscreteMatrixCocycle.measurable_logPlusNormObservable
#check DiscreteMatrixCocycle.logPlusNormObservable_add_le
#check DiscreteMatrixCocycle.orbitLogPlusSum
#check DiscreteMatrixCocycle.orbitLogPlusSum_zero
#check DiscreteMatrixCocycle.orbitLogPlusSum_succ
#check DiscreteMatrixCocycle.logPlusNormObservable_le_orbitLogPlusSum
#check DiscreteMatrixCocycle.HasIntegrableGeneratorLogPlus
#check DiscreteMatrixCocycle.HasIntegrableGeneratorLogPlus.integrable_at_base_iterate
#check DiscreteMatrixCocycle.HasIntegrableGeneratorLogPlus.integrable_orbitLogPlusSum
#check DiscreteMatrixCocycle.HasIntegrableGeneratorLogPlus.integrable_logPlusNormObservable

Each #check asks the pinned elaborator for the exact type already proved in the repository. It does not rerun the proof in the browser. The full-project command below checks the complete module.

Full project check, from the repository root
cd formalization
lake env lean -DwarningAsError=true NonlinearDynamics/Random/RandomCocycles/LogPlusIntegrability.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.

Empty matrix dimension

When the matrix index type is empty, RMT-14 proves \(N_k=0\) at every horizon. Because \(\log^+0=0\), RMT-15 proves

\[ P_k(\omega)=0 \]

for every \(k\) and \(\omega\). This also explains why the time-zero identity \(P_0=0\) needs no Nonempty ι assumption: the inhabited branch has norm one, while the empty branch has norm zero, and positive log sends both to zero.

The module does not export a separate empty-dimensional theorem for every orbit sum or integrability proposition. Those consequences can be derived from the checked zero observable and general finite-sum facts when needed.

What this envelope does not establish

The RMT-15 interface does not prove:

  • integrability of the RMT-14 EReal-valued extended log norm;
  • any estimate for negative logarithmic growth or inverse-matrix norms;
  • that cocycle matrices are nonzero, injective, or invertible;
  • a probability normalization, expectation, or distributional law;
  • ergodicity, mixing, independence, or identical distribution;
  • a normalized process such as \(k^{-1}P_k\) or \(k^{-1}L_k\);
  • convergence, an almost-sure growth rate, or a deterministic limit;
  • Kingman’s subadditive ergodic theorem or the Furstenberg-Kesten theorem;
  • a Lyapunov exponent, Lyapunov spectrum, or Oseledets splitting;
  • a two-sided cocycle or negative-time dynamics; or
  • a derivative, tangent-space, or random-Jacobian interpretation.

An integrable \(P_k\) can coexist with complete collapse. If \(C(k,\omega)=0\), then \(P_k(\omega)=0\) while the extended log norm is \(\bot\). Positive-tail integrability alone therefore says nothing about the negative endpoint needed for a full Lyapunov analysis.

Where to continue

RMT-34 repairs the missing negative tail under an explicit, stronger interface. The integrable generator log tails package combines pointwise matrix units with integrable forward and inverse one-step log-positive norms, producing integrable lower and upper rails around every finite-time real log norm. A checked geometric-probability example shows that the forward moment does not imply the inverse moment. There is one separate shortcut: if the RMT-33 log-positive rate is strictly positive, the positive log and real log eventually agree almost everywhere without those inverse assumptions. That shortcut proves no result in the zero or negative rate regime.

The integrated log-positive growth rate is the RMT-16 successor. It integrates each finite-horizon envelope, proves under the same explicit one-step integrability hypothesis that the resulting real sequence is subadditive, and applies deterministic Fekete convergence over positive horizons. The successor still assumes no probability normalization or ergodicity and proves no samplewise or Lyapunov limit.

Finite-Horizon Log-Positive Cocycle Integrability derives the complete sixteen-declaration Lean layer, including the orbit-sum recurrence, measure-preserving pullbacks, finite-sum integrability, and the final domination proof.

Finite-Time Norm and Extended-Log-Norm Observables for Matrix Cocycles develops the zero-faithful predecessor. The one-sided discrete matrix cocycle entry supplies the shifted base orbit and product convention.

References

Mathlib contributors. The positive part of the logarithm, Mathlib 4 documentation. This official source defines Real.posLog, proves nonnegativity, continuity, monotonicity on nonnegative inputs, and the two-factor product estimate used by RMT-15.

Mathlib contributors. Bochner integrability, Mathlib 4 documentation. This official source contains integrability under a measure-preserving pullback, finite-sum closure, and domination principles.

J. F. C. Kingman. The ergodic theory of subadditive stochastic processes, Journal of the Royal Statistical Society: Series B 30(3), 499-510, 1968. This primary source is a later asymptotic destination. The present envelope supplies only finite-horizon measurability, domination, and integrability.

The exact upstream Lean source audited for this entry is Mathlib commit 81a5d257, the revision pinned by formalization/lake-manifest.json.