Correctness of coupling from the past (Propp--Wilson)
ProvedMarkovMixing.cftp_correctLet be a Markov chain on a finite state space with stationary distribution , and let be a random mapping representation of : a probability distribution on update functions with for all . Coupling from the past draws i.i.d. maps at past times and composes them forward up to time zero,
(deepening the horizon prepends randomness inside the composition; the maps near time stay fixed). The composition has coalesced when it is a constant map, and the algorithm outputs the common value. Assume coalescence is almost sure: .
The theorem (correctness of coupling from the past, Propp–Wilson; §22.2–22.3 of Levin–Peres–Wilmer — the capstone of Chapter 22 and of this series) asserts: for every state ,
The output of CFTP is an exact sample from the stationary distribution — no mixing-time error, no knowledge of required. The point is the direction of composition: for fixed the law of is that of forward steps from , but the coalesced value is shared by all , so on the coalescence event the output agrees with a chain started from itself — and the discrepancy is bounded by the vanishing non-coalescence probability. Running the same maps into the future instead produces a biased sample; the from-the-past order is what the proof, and the formalization, pin down.
import Definitions.Def_mm_cftp import Mathlib.Analysis.SpecificLimits.Basic
namespace MarkovMixing
/-- **§22.2–22.3, correctness of coupling from the past** (Propp–Wilson;
LPW), the capstone of Chapter 22: if the update maps represent `P`, `π` is
stationary for `P`, and coalescence is almost sure, then the CFTP output is
distributed *exactly* according to `π`: the probability of collapsing to `y`
within `t` steps from the past tends to `π(y)`. -/
theorem cftp_correct {V : Type*} [Fintype V] [DecidableEq V] [Nonempty V]
(P : Matrix V V ℝ) (hP : IsStochastic P)
(π : V → ℝ) (hπ : IsStationary P π)
(ν : (V → V) → ℝ) (hν : IsRandomMapRep P ν)
(hcoal : Filter.Tendsto (fun t => cftpNotCoalescedProb ν t)
Filter.atTop (nhds 0)) (y : V) :
Filter.Tendsto (fun t => cftpOutputProb ν t y)
Filter.atTop (nhds (π y)) := by
sorry
end MarkovMixing