Block dynamics comparison
ProvedMarkovMixing.ising_block_dynamicsLet be a graph with maximum degree on a finite vertex set , and let be the Ising distribution at inverse temperature : on spin configurations . Fix blocks covering , each of size at most , with every vertex lying in at most blocks. The block dynamics picks a uniform block and re-samples the configuration on it from conditioned on the configuration outside; the single-site Glauber dynamics is the special case of singleton blocks. For either chain, the spectral gap is with the largest eigenvalue different from (eigenvalues in the real-eigenvector sense of Mission VII); write for the block dynamics' gap and for the single-site gap.
The theorem (Theorem 15.9 of Levin–Peres–Wilmer) asserts the comparison
A spectral gap for the (coarse, easy-to-analyze) block dynamics transfers to the single-site dynamics at a cost depending only on the block size, the overlap multiplicity, the degree, and the temperature — not on the number of vertices. This is the engine of divide-and-conquer gap proofs: the book uses it for the tree theorem of this mission, and it is the template for gap bounds on lattices via recursive block decompositions. The proof routes each block update through a canonical path of single-site updates and bounds the congestion via the comparison method of Mission VII.
import Definitions.Def_mm_ising
namespace MarkovMixing
/-- **Theorem 15.9** (LPW): comparison of the block dynamics and the
single-site Glauber dynamics for the Ising model: if the blocks cover the
vertex set, have size at most `M`, and each vertex lies in at most `M⋆`
blocks, then `γ_B ≤ M² M⋆ (4 e^{2βΔ})^{M+1} γ`. -/
theorem ising_block_dynamics {Vv : Type*} [Fintype Vv] [DecidableEq Vv]
[Nonempty Vv] (G : SimpleGraph Vv) [DecidableRel G.Adj]
(β : ℝ) (hβ : 0 < β) {b : ℕ} (hb : 0 < b) (blocks : Fin b → Finset Vv)
(hcover : ∀ v : Vv, ∃ i : Fin b, v ∈ blocks i)
(M Ms : ℕ) (hM : ∀ i : Fin b, (blocks i).card ≤ M)
(hMs : ∀ v : Vv, (Finset.univ.filter fun i : Fin b => v ∈ blocks i).card ≤ Ms) :
spectralGap (blockDynamics (isingDist G β) blocks) ≤
(M : ℝ) ^ 2 * (Ms : ℝ) *
(4 * Real.exp (2 * β * (G.maxDegree : ℝ))) ^ (M + 1) *
spectralGap (glauber (isingDist G β)) := by
sorry
end MarkovMixing