Product chains mix at time
ProvedMarkovMixing.product_chain_mixingFor let be an irreducible, reversible Markov chain on a finite space of at least two states, with stationary distribution (detailed balance ). The product chain on picks a uniformly random coordinate and updates it by its own chain, ; its stationary distribution is the product . Mixing is measured in continuous time: with the heat kernel and the total variation distance , the continuous mixing time is the first real time at which . Each factor's spectral gap is , with the largest eigenvalue (Mission VII); irreducibility together with at least two states is what makes this the book's .
The theorem (Theorem 20.7 of Levin–Peres–Wilmer) asserts, for , :
- if every and every factor satisfies , then ;
- if moreover exactly for every , then .
The product of independent chains mixes at time , not : a coupon-collector logarithm beyond the obvious slowdown, because the last coordinate to equilibrate is what matters. This is the abstract form of the hypercube's (the hypercube is the product of two-state chains with ), and the template computation behind the cutoff of Mission XI.
import Definitions.Def_mm_continuous import Mathlib.Analysis.SpecialFunctions.Log.Basic
namespace MarkovMixing
/-- **Theorem 20.7** (LPW): mixing of continuous-time product chains. If
each factor has spectral gap at least `γ` and `√π^{(i)}_min ≥ c₀`, then
`t^{cont}_mix(ε) ≤ (2γ)⁻¹ n log n + γ⁻¹ n log(1/(c₀ε))`; if all gaps equal
`γ`, then also
`t^{cont}_mix(ε) ≥ (n/2γ)(log n − log(8 log(1/(1−ε))))`.
Each factor is hypothesized irreducible and to have at least two states, so
that its `spectralGap` is the book's `γᵢ = 1 − λ₂`. `lambdaTwo` is a supremum
over the eigenvalues different from `1`; for a one-state chain, or the identity
chain, that set is empty and `sSup ∅ = 0` reports a spectral gap of `1` for a
chain that does not mix at all — under which the lower bound (20.16) is
false. -/
theorem product_chain_mixing {n : ℕ} (hn : 2 ≤ n) {W : Fin n → Type*}
[∀ i, Fintype (W i)] [∀ i, DecidableEq (W i)] [∀ i, Nonempty (W i)]
(P : ∀ i, Matrix (W i) (W i) ℝ) (hP : ∀ i, IsStochastic (P i))
(hirr : ∀ i, Irreducible (P i)) (hcard : ∀ i, 2 ≤ Fintype.card (W i))
(π : ∀ i, W i → ℝ) (hπ : ∀ i, IsStationary (P i) (π i))
(hrev : ∀ i, DetailedBalance (P i) (π i))
(γ c₀ : ℝ) (hγ : 0 < γ) (hgap : ∀ i, γ ≤ spectralGap (P i))
(hc0 : 0 < c₀) (hmin : ∀ i, c₀ ≤ Real.sqrt (⨅ x, π i x))
(ε : ℝ) (hε : 0 < ε) (hε1 : ε < 1) :
contMixingTime (productChain P) (fun x => ∏ i, π i (x i)) ε ≤
(2 * γ)⁻¹ * n * Real.log n + γ⁻¹ * n * Real.log (1 / (c₀ * ε)) ∧
((∀ i, spectralGap (P i) = γ) →
(n : ℝ) / (2 * γ) *
(Real.log n - Real.log (8 * Real.log (1 / (1 - ε)))) ≤
contMixingTime (productChain P) (fun x => ∏ i, π i (x i)) ε) := by
sorry
end MarkovMixing