Given the past, the chain from time on is started from
ProvedMarkovChainCLT.traj_map_shift_add_eq_comp_iterLet be a Markov kernel and let be the kernel giving the law of the trajectory continuing from an initial segment . Then for every ,
where .
What it says. Conditionally on the first states of the chain, the process observed from time onwards is a chain started from — and it depends on the conditioning only through . This single statement packages both halves of the Markov property that a mixing estimate needs: forgetting (the past enters only via its last state) and restarting after steps (the distribution of that state is ).
Why it is the last probabilistic step. In the definition of the mixing coefficients , , one fixes a split point , a past event in and a future event in . Under the identification of the future -algebra as a single pullback along , the conditional probability of the future event given the past is precisely the left-hand side evaluated at a fixed measurable set. This theorem computes it: it equals . Comparing with the stationary value and applying the total-variation bound for -valued integrands turns any rate into the bound , uniformly in the split point . After this, no probabilistic input remains — only the arithmetic of averages.
Proof. Factor as , which requires the associativity . The inner shift is handled by the strong restart property, ; the outer one by the unconditional -step restart, , after commuting into to match its indexing convention. Composing the two pushforwards with Measure.map_map gives the claim.
import Definitions.Def_MarkovChainPathMeasure import Definitions.Def_MarkovIterKernel open Filter Finset Function MeasurableEquiv MeasurableSpace MeasureTheory Preorder ProbabilityTheory open scoped ENNReal NNReal Topology open MarkovChainCLT
theorem MarkovChainCLT.traj_map_shift_add_eq_comp_iter {X : Type*} [MeasurableSpace X]
(P : Kernel X X) [IsMarkovKernel P] (k n : ℕ) (u : Π _i : Finset.Iic k, X) :
(Kernel.traj (X := fun _ : ℕ => X) (BanditAlgorithm.markovChainStep P) k u).map
(fun ω : ℕ → X => fun l => ω (k + n + l))
= (BanditAlgorithm.markovChainKernel P)
∘ₘ (iterKernel P n (u ⟨k, Finset.mem_Iic.2 le_rfl⟩)) := by sorry