for lamplighter chains
ProvedMarkovMixing.lamplighter_mixingLet be any sequence of connected graphs with . The base walk on is the lazy simple random walk (hold with probability , else move to a uniform neighbour); its cover time is the worst, over starting vertices, expected time to have visited every vertex (Mission VI). The lamplighter chain has states (lamp configuration in , lamplighter position); one step randomizes the lamp at the current position, moves the lamplighter one base-walk step, and randomizes the lamp at the new position; its stationary distribution is uniform lamps times the base walk's stationary distribution. The mixing time is the first at which the worst-case total variation distance drops to , with .
The theorem (Theorem 19.2 of Levin–Peres–Wilmer) asserts: there are constants such that for all sufficiently large ,
The lamp configuration looks uniform only once (essentially) every lamp has been touched, so the lamplighter mixes exactly when the base walk has covered the graph — the cleanest theorem converting cover times into mixing times. The upper bound couples two lamplighters after a cover-time's worth of steps; the lower bound shows that before a constant fraction of the cover time, the set of unvisited lamps betrays the starting configuration (via the separation–total-variation relation of this mission).
import Definitions.Def_mm_cutoff
namespace MarkovMixing
/-- **Theorem 19.2** (LPW): the mixing time of the lamplighter chain is
comparable to the cover time of the underlying lazy walk: there are
constants `c₁, c₂ > 0` such that for all sufficiently large `n`,
`c₁ t_cov(G_n) ≤ t_mix(G_n⁎) ≤ c₂ t_cov(G_n)`. -/
theorem lamplighter_mixing {Vf : ℕ → Type*} [∀ n, Fintype (Vf n)]
[∀ n, DecidableEq (Vf n)] [∀ n, Nonempty (Vf n)]
(G : ∀ n, SimpleGraph (Vf n)) [∀ n, DecidableRel (G n).Adj]
(hconn : ∀ n, (G n).Connected)
(hcard : Filter.Tendsto (fun n => Fintype.card (Vf n))
Filter.atTop Filter.atTop) :
∃ c₁ c₂ : ℝ, 0 < c₁ ∧ 0 < c₂ ∧ ∃ N : ℕ, ∀ n : ℕ, N ≤ n →
c₁ * coverTimeMax (lazy (graphWalk (G n))) ≤
(tMix (lamplighter (G n)) (lamplighterStationary (G n)) : ℝ) ∧
(tMix (lamplighter (G n)) (lamplighterStationary (G n)) : ℝ) ≤
c₂ * coverTimeMax (lazy (graphWalk (G n))) := by
sorry
end MarkovMixing