Will the walker come home?
In the early 1920s George Pólya, walking in the woods above Zürich, kept running into the same young couple, far more often than seemed polite. He wondered whether two random walkers on a grid of paths are bound to meet again and again — equivalently, whether a single random walker is bound to return to where it started. His answer (1921) is one of the most quoted theorems in probability: on the line and in the plane a simple random walk returns home with probability one; in three or more dimensions it does not. A remark often attributed to Shizuo Kakutani puts it memorably: a drunk man will find his way home, but a drunk bird may get lost forever.
Pólya's theorem is the entrance to a large territory where randomness creates shape. Let each pipe in a porous rock be open or blocked at random (Broadbent and Hammersley's model of a gas-mask filter, 1957): does water seep through? Join people by random acquaintances (Erdős and Rényi, 1959–60): is there a giant connected community? Let a random walk take smaller and faster steps: what does the limiting curve look like, and what is the shape of its outer boundary? All these systems have phase transitions — sharp thresholds where global behaviour changes abruptly — and at the threshold, beautiful random fractals appear. This lesson is an orientation: the classical theorems with full proofs, the deep theorems stated precisely, and the open problems marked as open.
Counting returns, currents and clusters
Returns. A walk returns with probability one exactly when the expected number of returns is infinite. After steps the chance of being at the origin of is about (by the central limit theorem, the walk has spread over a region of volume about ). The series diverges for and converges for . That is the whole story, once each step is made rigorous.
Currents. Make every edge of the grid a resistor and pump current from the origin to "infinity". If the total resistance to infinity is infinite, no current escapes, and the random walk — whose hitting probabilities are exactly the voltages — keeps coming back. In the plane the number of resistors in parallel at distance grows only like , so the resistances of successive shells add up like ; in space they grow like and .
Clusters. In percolation, open edges form clusters. For small every cluster is finite: the number of possible long paths grows like , but each is open with probability . For close to the closed edges are rare and cannot surround the origin. In between lies a critical value , which for the square lattice is exactly — because the lattice is its own planar dual.
Analogy, not a formal construction
The resistor picture is not just an analogy: the voltage at when the origin is held at volt and a far boundary at is exactly the probability that a random walk from hits the origin before the boundary. Both are the unique harmonic function with those boundary values. The analogy is a theorem; what is heuristic above is only the shell-counting estimate.
Definitions
We assume stochastic processes (Markov chains, the strong Markov property, Brownian motion) and the probabilistic method; see also Markov chains.
Definition— simple random walk, recurrence and the Green function
On a connected, locally finite graph , simple random walk moves from to a uniformly chosen neighbour at each step. It is recurrent if, started at , it returns to with probability , and transient otherwise (this does not depend on ). The Green function is , the expected number of visits to . On we write .
Definition— electrical network and effective resistance
Give each edge a conductance (resistance ). For disjoint vertex sets , of a finite network, the voltage with on , on and elsewhere (harmonic) drives a total current out of ; the effective resistance is . For an infinite network and an exhaustion by finite sets , .
Definition— bond percolation and the critical probability
In bond percolation with parameter on a graph, each edge is open with probability and closed otherwise, independently. Open edges form open clusters. Let ; it is non-decreasing in . The critical probability is ; by Kolmogorov's 0–1 law an infinite open cluster exists with probability for and for .
Definition— Erdős–Rényi random graph
has vertex set , each of the possible edges present independently with probability . A property holds with high probability (w.h.p.) if its probability tends to as . The giant component regime is with fixed.
Definition— Hausdorff dimension
For and , , and . A smooth curve has dimension ; random fractals such as Brownian paths have larger, often non-integer, dimensions.
Examples
Example— The line ℤ
The walk on is at at time exactly when of its steps go right: . Since is the largest of the binomial coefficients , which add up to , we get , and . Electrically, is two half-lines of resistance each.
Example— The binary tree is transient
In the rooted binary tree each vertex has two children. The edges between generations and are in parallel and the generations are in series, so : transient. Directly: from a non-root vertex the walk moves to its parent with probability , so the probability of ever reaching the parent solves , whose relevant root is . From the root the walk first steps to a child, so it never returns with probability — matching the formula of Theorem 3 below.
Example— Percolation on a tree is a branching process
On the rooted tree in which every vertex has children, the open cluster of the root is a Galton–Watson tree with offspring. It is infinite with positive probability exactly when the mean offspring , so . The survival probability is the largest root of . The same mechanism — a branching process with mean — produces the giant component of .
Example— The Wheatstone bridge is self-dual
Five resistors arranged as a Wheatstone bridge between two terminals have effective resistance (by symmetry no current flows through the bridge). As a percolation problem, the bridge with each edge open with probability connects the terminals with probability exactly : its planar dual is again a bridge, and exactly one of "the terminals are joined by open edges" and "the dual terminals are joined by closed dual edges" occurs. This is the case of the self-dual rectangles used in the second experiment, where the computer checks it by enumerating all configurations (and all for ).
Pólya's theorem
Theorem— Theorem 1 — recurrence and the Green function
Simple random walk on started at is recurrent if and only if . More precisely, if , then (read as when ).
Proof
Let be the number of visits, including time . By the strong Markov property at successive return times, , so . Hence . On the other hand by linearity of expectation.
∎
Theorem— Theorem 2 — Pólya (1921)
Simple random walk on is recurrent for and transient for .
Proof
. As in the example, , and .
: the rotation trick. Write and set , . The four steps become the four steps of , each with probability — that is, and are independent simple random walks on . Since is injective, iff , so
Now for , by induction: it holds for (), and using the inductive step reduces to . Hence and .
. A closed walk of length takes steps in each direction along the three axes and the same number back, with , so
because the numbers are the probabilities of a trinomial distribution and sum to . The maximum is attained with as equal as possible, and Stirling's formula bounds it by . Together with (an induction like the one above) this gives , which is summable.
. The first three coordinates of the walk on perform a lazy simple random walk on (they move with probability at each step), which is transient; if the walk on returned to infinitely often, so would they.
∎
The proof for is formalised in Lean below, apart from the probabilistic modelling (the formula for and Theorem 1). For the Stirling step is cited, not proved. The first experiment computes for all three dimensions: it grows like , like , and converges to Watson's constant , so the walk on returns with probability .
Recurrent is not the same as "returns quickly". For the walk on , the first return time satisfies (a classical reflection-principle identity; see Feller, Vol. I, Ch. III). So : the walk returns with probability one, but the expected time it takes is infinite. In Lean, return_prob_tendsto_zero and return_1d_not_summable are exactly the two halves of this picture.
Electrical networks
Let have unit conductances, so the walk is simple random walk.
Theorem— Theorem 3 — the electrical criterion
For a vertex of degree , . In particular the walk is recurrent if and only if .
Proof
Fix a finite set and let be its outer boundary. Let . Then , on , and is harmonic elsewhere (condition on the first step), so it is the voltage of the definition. The current out of is . Hence . As these events decrease, and their intersection is "never return" up to a null set: almost surely, a walk that never returns to leaves every finite set, because staying in a finite set forever would mean visiting some vertex infinitely often, which forces a visit to . Meanwhile the resistances increase to .
∎
Two tools make the criterion usable, both proved in Doyle–Snell and Lyons–Peres (Ch. 2):
- Rayleigh's monotonicity principle. Increasing any edge resistance does not decrease any effective resistance. So a subgraph of a recurrent graph is recurrent, and a graph containing a transient subgraph is transient — another proof that , , is transient once is.
- The Nash-Williams inequality (1959). If are disjoint sets of edges, each separating from infinity, then .
again. Let be the edges joining to : there are of them, so and the walk is recurrent. (The divergence is proved in Lean.)
again. T. Lyons (1983) proved that a network is transient if and only if there is a unit flow from to infinity with finite energy . Spreading a unit flow evenly over the roughly edges at distance gives energy about . Making this precise requires some care with the cube's geometry (Lyons–Peres, Ch. 2); the convergence of is in Mathlib.
Percolation: the phase transition on ℤ²
Theorem— Lemma 4 — counting paths
The number of self-avoiding paths of length in starting at the origin satisfies .
Proof
There are choices for the first step, and at most for each later step, since a self-avoiding path cannot immediately reverse.
∎
(In fact , the connective constant of , whose exact value is unknown.)
Theorem— Theorem 5 — a genuine phase transition (Broadbent–Hammersley, 1957, by Peierls' argument)
For bond percolation on , . In particular there is a genuine phase transition: .
Proof
Lower bound. If the origin lies in an infinite open cluster, then for every there is an open self-avoiding path of length from the origin. Each such path is open with probability , so by the union bound and Lemma 4, for every . If the right side tends to (formalised as peierls_tendsto), so and .
Upper bound. Place the dual lattice so that each dual edge crosses exactly one primal edge, and declare a dual edge closed when the primal edge it crosses is closed. Planar topology gives the key fact: if a finite set of vertices lies in a single open cluster, that cluster is finite if and only if some closed dual circuit surrounds . Let and . A dual circuit of length surrounding has and crosses the positive -axis at one of fewer than points; through each point there are at most such circuits (Lemma 4 on the dual lattice). So
as the tail of a convergent series (formalised as dual_circuits_summable). Fix with this probability less than . The event that no closed dual circuit surrounds depends only on edges outside (a dual edge of a circuit surrounding crosses an edge with an endpoint outside ), and the event that all edges inside are open depends only on edges inside. They are independent, both have positive probability, and on the origin lies in an infinite open cluster. So , and .
∎
Kesten's theorem (1980). For bond percolation on , ; moreover (Harris, 1960). The proof combines self-duality — at the dual configuration has the same law as the primal one, so suitably chosen rectangles are crossed with probability exactly (the experiment checks this by exhaustive enumeration for small rectangles) — with the Russo–Seymour–Welsh theory (1978), which turns crossings of squares into crossings of long rectangles with probability bounded below, and a sharp-threshold argument showing that the crossing probabilities jump from near to near in a window around that shrinks with the size. Modern proofs use the Kahn–Kalai–Linial influence inequality (Bollobás–Riordan, 2006) or the randomised-algorithm method of Duminil-Copin, Raoufi and Tassion (2019). For site percolation on there is no self-duality and no known closed form: , an estimate from simulation and rigorous numerical bounds.
Random graphs (Erdős–Rényi, 1960). For : if , w.h.p. every component has vertices; if , w.h.p. there is a unique giant component with vertices, where solves , and all other components have vertices; at the largest component has order . The proof explores a component vertex by vertex; each newly found vertex has about new neighbours, so the exploration is approximately a branching process with mean , whose survival probability solves the equation above. For that equation has no positive root (proved in Lean), matching the absence of a giant. The giant appears at ; the graph becomes connected only much later, at .
Scaling limits: Brownian motion, SLE and random planar geometry
Brownian motion as a limit. Donsker's invariance principle (1951): the rescaled walk converges in distribution to Brownian motion, whatever the step distribution (mean zero, finite variance). Pólya's theorem has a continuum twin: planar Brownian motion is neighbourhood-recurrent (it returns to every disc, though it hits a given point with probability zero), while Brownian motion in is transient. Planar Brownian paths have Hausdorff dimension (a classical result; see Mörters–Peres). Their outer boundary — the frontier of the path — was conjectured by Mandelbrot (1982), from simulations, to have dimension ; Lawler, Schramm and Werner proved it (2001).
Schramm–Loewner evolution. Oded Schramm (2000) observed that a random curve in a planar domain which is conformally invariant and has a "domain Markov property" must be one of a one-parameter family , obtained by running Loewner's differential equation with driving function . Established identifications of scaling limits:
- loop-erased random walk → , uniform spanning tree Peano curve → (Lawler–Schramm–Werner, 2004);
- critical site percolation on the triangular lattice: Smirnov proved Cardy's formula and conformal invariance (2001), the exploration path converges to , and Smirnov and Werner derived critical exponents such as as (2001);
- interfaces of the critical Ising model → (Smirnov and coauthors, around 2010).
Werner (2006), Smirnov (2010) and Duminil-Copin (2022) received Fields Medals for work in this area.
Random planar geometry. Uniformly random planar maps (graphs embedded in the sphere) with faces, with distances rescaled by , converge to a random metric space, the Brownian map (Le Gall; Miermont, 2013), homeomorphic to the sphere and of Hausdorff dimension . Miller and Sheffield (2015–16) showed that the Brownian map is equivalent to Liouville quantum gravity with parameter , a random geometry built from the Gaussian free field.
Open problems (as of the references; check recent surveys):
- Is for bond percolation on ? Proved in dimension and in high dimensions (Hara–Slade, 1990, ; Fitzner–van der Hofstad, 2017, ), open in .
- Conformal invariance of critical bond percolation on . Smirnov's proof uses the special symmetry of the triangular lattice; universality, though widely believed, is open for .
- The self-avoiding walk. Its scaling limit in the plane is conjectured to be and its connective constant on is unknown; on the hexagonal lattice the connective constant is (Duminil-Copin and Smirnov, 2012).
The exact mathematics in Lean
Mathlib has measure-theoretic probability but no random walks on lattices, percolation or random graphs; and the probabilistic modelling (formulas for , Theorem 1, duality) would be a substantial project. What is formalised is the exact mathematics that the proofs above reduce to — the parts where the actual estimates live.
The bounds on central binomial coefficients, by induction, and the resulting divergence for and :
/-- `4ⁿ ≤ (2n + 1) · C(2n, n)`: the central binomial coefficient is the largest of the `2n + 1`
coefficients `C(2n, k)`, which sum to `4ⁿ`. This applies Mathlib's
`Nat.four_pow_le_two_mul_add_one_mul_centralBinom`. -/
theorem four_pow_le_central_binom (n : ℕ) : 4 ^ n ≤ (2 * n + 1) * centralBinom n :=
Nat.four_pow_le_two_mul_add_one_mul_centralBinom n/-- **Lower bound** `16ⁿ ≤ 4n · C(2n, n)²` for `n ≥ 1`, i.e. `C(2n, n)/4ⁿ ≥ 1/(2√n)`. Induction
using `(n + 1) C(2n+2, n+1) = 2(2n + 1) C(2n, n)` and `4n(n + 1) ≤ (2n + 1)²`. -/
theorem central_binom_sq_lower : ∀ n : ℕ, 1 ≤ n → 16 ^ n ≤ 4 * n * (centralBinom n) ^ 2 := by
intro n hn
induction n with
| zero => omega
| succ m ih =>
rcases Nat.eq_zero_or_pos m with h | h
· subst h; simp [centralBinom]
· have ih' := ih h
have key := Nat.succ_mul_centralBinom_succ m
-- multiply the target by (m + 1)², then use the recursion and the induction hypothesis
have h2 : 16 ^ (m + 1) * (m + 1) ^ 2 ≤
4 * (m + 1) * (centralBinom (m + 1)) ^ 2 * (m + 1) ^ 2 := by
have e : 4 * (m + 1) * (centralBinom (m + 1)) ^ 2 * (m + 1) ^ 2 =
4 * (m + 1) * ((m + 1) * centralBinom (m + 1)) ^ 2 := by ring
rw [e, key]
have : 16 ^ (m + 1) * (m + 1) ^ 2 = 16 * 16 ^ m * (m + 1) ^ 2 := by ring
rw [this]
calc 16 * 16 ^ m * (m + 1) ^ 2 ≤ 16 * (4 * m * centralBinom m ^ 2) * (m + 1) ^ 2 := by
gcongr
_ ≤ 4 * (m + 1) * (2 * (2 * m + 1) * centralBinom m) ^ 2 := by
have : 4 * m * (m + 1) ≤ (2 * m + 1) ^ 2 := by nlinarith
nlinarith [Nat.zero_le (centralBinom m ^ 2), this]
exact Nat.le_of_mul_le_mul_right h2 (by positivity)/-- **Upper bound** `(2n + 1) · C(2n, n)² ≤ 16ⁿ`, i.e. `C(2n, n)/4ⁿ ≤ 1/√(2n + 1)`. Induction using
the same recursion and `(2n + 1)(2n + 3) ≤ 4(n + 1)²`. -/
theorem central_binom_sq_upper : ∀ n : ℕ, (2 * n + 1) * (centralBinom n) ^ 2 ≤ 16 ^ n := by
intro n
induction n with
| zero => simp
| succ m ih =>
have key := Nat.succ_mul_centralBinom_succ m
have h2 : (2 * (m + 1) + 1) * (centralBinom (m + 1)) ^ 2 * (m + 1) ^ 2 ≤
16 ^ (m + 1) * (m + 1) ^ 2 := by
have e : (2 * (m + 1) + 1) * (centralBinom (m + 1)) ^ 2 * (m + 1) ^ 2 =
(2 * m + 3) * ((m + 1) * centralBinom (m + 1)) ^ 2 := by ring
rw [e, key]
have e2 : (2 * m + 3) * (2 * (2 * m + 1) * centralBinom m) ^ 2 =
4 * (2 * m + 3) * (2 * m + 1) * ((2 * m + 1) * centralBinom m ^ 2) := by ring
rw [e2]
calc 4 * (2 * m + 3) * (2 * m + 1) * ((2 * m + 1) * centralBinom m ^ 2)
≤ 4 * (2 * m + 3) * (2 * m + 1) * 16 ^ m := by gcongr
_ ≤ 16 ^ (m + 1) * (m + 1) ^ 2 := by
have : (2 * m + 3) * (2 * m + 1) ≤ 4 * (m + 1) ^ 2 := by nlinarith
have h16 : 16 ^ (m + 1) = 16 * 16 ^ m := by ring
rw [h16]
nlinarith [Nat.zero_le (16 ^ m)]
exact Nat.le_of_mul_le_mul_right h2 (by positivity)/-- `∑ 1/(2n + 1)` diverges: it dominates half the harmonic series, `1/(n + 1) ≤ 2/(2n + 1)`, and
Mathlib knows that `∑ 1/n` diverges (`Real.not_summable_one_div_natCast`). -/
theorem not_summable_one_div_two_mul_add_one :
¬ Summable (fun n : ℕ => (1 : ℝ) / (2 * n + 1)) := by
intro h
have h2 : Summable (fun n : ℕ => (1 : ℝ) / ((n + 1 : ℕ) : ℝ)) := by
refine Summable.of_nonneg_of_le (fun n => by positivity) (fun n => ?_) (h.mul_left 2)
push_cast
rw [div_le_iff₀ (by positivity)]
field_simp
nlinarith
exact Real.not_summable_one_div_natCast ((summable_nat_add_iff 1).mp h2)/-- **Pólya in dimension 1, analytically.** The probability that simple random walk on ℤ is at
the origin at time `2n` is `p₂ₙ = C(2n, n)/4ⁿ`, and `∑ p₂ₙ` (the expected number of returns)
diverges, because `p₂ₙ ≥ 1/(2n + 1)`. By the criterion proved in the lesson (Theorem 1), the
walk is recurrent. -/
theorem return_1d_not_summable :
¬ Summable (fun n : ℕ => (centralBinom n : ℝ) / 4 ^ n) := by
intro h
apply not_summable_one_div_two_mul_add_one
refine Summable.of_nonneg_of_le (fun n => by positivity) (fun n => ?_) h
have hle : (4 : ℝ) ^ n ≤ (2 * n + 1) * centralBinom n := by
exact_mod_cast four_pow_le_central_binom n
rw [div_le_div_iff₀ (by positivity) (by positivity)]
linarith/-- **Pólya in dimension 2, analytically.** On ℤ² the return probability at time `2n` is
`(C(2n, n)/4ⁿ)²` (by the rotation trick below), and `∑ (C(2n, n)/4ⁿ)²` diverges, because by
`central_binom_sq_lower` each term is at least `1/(4n)`. -/
theorem return_2d_not_summable :
¬ Summable (fun n : ℕ => ((centralBinom n : ℝ) / 4 ^ n) ^ 2) := by
intro h
have h1 : Summable (fun n : ℕ => (1 : ℝ) / ((n + 1 : ℕ) : ℝ)) := by
have h' := (summable_nat_add_iff 1).mpr h
refine Summable.of_nonneg_of_le (fun n => by positivity) (fun n => ?_) (h'.mul_left 4)
have hlow : (16 : ℝ) ^ (n + 1) ≤
4 * ((n + 1 : ℕ) : ℝ) * (centralBinom (n + 1) : ℝ) ^ 2 := by
exact_mod_cast central_binom_sq_lower (n + 1) (by omega)
have h16 : ((4 : ℝ) ^ (n + 1)) ^ 2 = 16 ^ (n + 1) := by
rw [← pow_mul, mul_comm, pow_mul]; norm_num
have hpos : (0 : ℝ) < ((n + 1 : ℕ) : ℝ) := by positivity
simp only [div_pow, h16]
rw [div_le_iff₀ hpos,
show 4 * ((centralBinom (n + 1) : ℝ) ^ 2 / 16 ^ (n + 1)) * ((n + 1 : ℕ) : ℝ)
= 4 * ((n + 1 : ℕ) : ℝ) * (centralBinom (n + 1) : ℝ) ^ 2 / 16 ^ (n + 1) by ring,
le_div_iff₀ (by positivity)]
linarith
exact Real.not_summable_one_div_natCast ((summable_nat_add_iff 1).mp h1)/-- Yet `p₂ₙ = C(2n, n)/4ⁿ → 0`: by `central_binom_sq_upper`, `p₂ₙ² ≤ 1/(2n + 1)`. The walk on ℤ
returns with probability one, but the chance of being home at any given late time is small — one
reason the expected return time is infinite. -/
theorem return_prob_tendsto_zero :
Tendsto (fun n : ℕ => (centralBinom n : ℝ) / 4 ^ n) atTop (𝓝 0) := by
have hsq : Tendsto (fun n : ℕ => ((centralBinom n : ℝ) / 4 ^ n) ^ 2) atTop (𝓝 0) := by
refine squeeze_zero (fun n => by positivity) (fun n => ?_)
tendsto_one_div_add_atTop_nhds_zero_nat
have hup : (2 * (n : ℝ) + 1) * (centralBinom n : ℝ) ^ 2 ≤ 16 ^ n := by
exact_mod_cast central_binom_sq_upper n
have h16 : ((4 : ℝ) ^ n) ^ 2 = 16 ^ n := by
rw [← pow_mul, mul_comm, pow_mul]; norm_num
rw [div_pow, h16, div_le_div_iff₀ (by positivity) (by positivity)]
nlinarith [sq_nonneg (centralBinom n : ℝ)]
have h := hsq.sqrt
simp only [Real.sqrt_zero] at h
refine h.congr (fun n => ?_)
exact Real.sqrt_sq (by positivity)The rotation trick: the map, the bijection of steps, and the characterisation of closed paths.
/-- The 45° rotation (and scaling by `√2`) `(x, y) ↦ (x + y, x − y)` of ℤ², as an additive map. -/
def rot : ℤ × ℤ →+ ℤ × ℤ where
toFun v := (v.1 + v.2, v.1 - v.2)
map_zero' := by simp
map_add' u v := by ext <;> simp <;> ring/-- The rotation is injective: from `x + y` and `x − y` one recovers `x` and `y`. -/
theorem rot_injective : Function.Injective rot := by
intro u v h
simp only [rot, AddMonoidHom.coe_mk, ZeroHom.coe_mk, Prod.mk.injEq] at h
ext <;> omega/-- The four unit steps of simple random walk on ℤ². -/
def unitSteps : Finset (ℤ × ℤ) := {(1, 0), (-1, 0), (0, 1), (0, -1)}/-- The four diagonal steps `(±1, ±1)`: a pair of independent `±1` steps. -/
def diagSteps : Finset (ℤ × ℤ) := {(1, 1), (-1, -1), (1, -1), (-1, 1)}/-- The rotation maps the four unit steps bijectively onto the four diagonal steps (checked by
`decide`; injectivity is `rot_injective`). So a uniformly random unit step becomes a pair of
*independent* uniform `±1` steps, and simple random walk on ℤ² becomes two independent simple
random walks on ℤ. -/
theorem rot_unit_steps : unitSteps.image rot = diagSteps := by
decide/-- A planar path (a list of steps) returns to the origin iff **both** rotated coordinate walks do.
With `rot_unit_steps` this gives `P(S₂ₙ = 0 in ℤ²) = P(S₂ₙ = 0 in ℤ)² = (C(2n, n)/4ⁿ)²`. -/
theorem closed_iff_rot (L : List (ℤ × ℤ)) :
L.sum = 0 ↔ ((L.map rot).map Prod.fst).sum = 0 ∧ ((L.map rot).map Prod.snd).sum = 0 := by
have e1 : ((L.map rot).map Prod.fst).sum = (rot L.sum).1 := by
rw [map_list_sum rot L]
exact (map_list_sum (AddMonoidHom.fst ℤ ℤ) _).symm
have e2 : ((L.map rot).map Prod.snd).sum = (rot L.sum).2 := by
rw [map_list_sum rot L]
exact (map_list_sum (AddMonoidHom.snd ℤ ℤ) _).symm
rw [e1, e2]
constructor
· intro h
simp [h]
· rintro ⟨h1, h2⟩
apply rot_injective
rw [map_zero]
exact Prod.ext h1 h2Electrical networks: Nash-Williams for , and the series behind transience of .
/-- **The Nash-Williams series for ℤ² diverges.** The edges joining the boundary of the box
`[-k, k]²` to the boundary of `[-(k+1), k+1]²` form a cutset of `8k + 4` unit resistors; the
Nash-Williams inequality gives `R_eff(0 ↔ ∞) ≥ ∑ₖ 1/(8k + 4) = ∞`, so the walk on ℤ² is
recurrent. Proof: compare with the harmonic series. -/
theorem nash_williams_diverges : ¬ Summable (fun k : ℕ => (1 : ℝ) / (8 * k + 4)) := by
intro h
have h2 : Summable (fun n : ℕ => (1 : ℝ) / ((n + 1 : ℕ) : ℝ)) := by
refine Summable.of_nonneg_of_le (fun n => by positivity) (fun n => ?_) (h.mul_left 8)
push_cast
rw [div_le_iff₀ (by positivity)]
field_simp
nlinarith
exact Real.not_summable_one_div_natCast ((summable_nat_add_iff 1).mp h2)/-- `∑ 1/n²` converges. In ℤ³ a unit flow from the origin spread evenly over spheres has energy
comparable to `∑ₖ k² · (1/k²)² = ∑ 1/k²`, finite, so by T. Lyons' criterion the walk on ℤ³ is
transient. This applies Mathlib's `Real.summable_one_div_nat_pow`. -/
theorem summable_inv_sq : Summable (fun n : ℕ => (1 : ℝ) / (n : ℝ) ^ 2) :=
Real.summable_one_div_nat_pow.mpr one_lt_twoPeierls' argument, with the path count of Lemma 4 as a hypothesis:
/-- **Peierls' estimate.** If there are at most `cₙ ≤ 4 · 3ⁿ` self-avoiding paths of length `n`
from the origin and each is open with probability `pⁿ`, then for `p < 1/3` the expected number of
open such paths, at most `cₙ pⁿ ≤ 4(3p)ⁿ`, tends to `0`. So the origin lies in an infinite open
cluster with probability `0`, and `p_c(ℤ²) ≥ 1/3`. (The count `cₙ ≤ 4 · 3^{n-1}` is proved in the
lesson; here it is a hypothesis.) -/
theorem peierls_tendsto {c : ℕ → ℕ} (hc : ∀ n, c n ≤ 4 * 3 ^ n) {p : ℝ} (hp0 : 0 ≤ p)
(hp : p < 1 / 3) : Tendsto (fun n => (c n : ℝ) * p ^ n) atTop (𝓝 0) := by
have h3 : 3 * p < 1 := by linarith
have hlim : Tendsto (fun n : ℕ => 4 * (3 * p) ^ n) atTop (𝓝 0) := by
simpa using (tendsto_pow_atTop_nhds_zero_of_lt_one (by linarith) h3).const_mul 4
refine squeeze_zero (fun n => by positivity) (fun n => ?_) hlim
have : (c n : ℝ) ≤ 4 * 3 ^ n := by exact_mod_cast hc n
calc (c n : ℝ) * p ^ n ≤ (4 * 3 ^ n) * p ^ n := by gcongr
_ = 4 * (3 * p) ^ n := by ring/-- **The dual half of Peierls' argument.** The number of dual circuits of length `n` surrounding
the origin is at most `n · 4 · 3ⁿ`, and each is closed with probability `qⁿ`, `q = 1 − p`. For
`q < 1/3` the series `∑ n · 4 · 3ⁿ qⁿ` converges, so its tails tend to `0`; this gives
`p_c(ℤ²) ≤ 2/3`. Uses Mathlib's `summable_pow_mul_geometric_of_norm_lt_one`. -/
theorem dual_circuits_summable {q : ℝ} (hq0 : 0 ≤ q) (hq : q < 1 / 3) :
Summable (fun n : ℕ => (n : ℝ) * 4 * 3 ^ n * q ^ n) := by
have h := summable_pow_mul_geometric_of_norm_lt_one 1 (r := 3 * q)
(by rw [Real.norm_eq_abs, abs_lt]; constructor <;> linarith)
refine (h.mul_left 4).congr (fun n => ?_)
ringAnd the subcritical random graph:
/-- **No giant component for `c ≤ 1`.** The fraction `β` of vertices of `G(n, c/n)` in the giant
component satisfies, in the limit, the survival equation of a Poisson(`c`) branching process,
`β = 1 − e^{−cβ}`. For `c ≤ 1` its only solution `β ≥ 0` is `β = 0`, because `1 − e^{−x} < x` for
`x > 0` (from Mathlib's `Real.add_one_lt_exp`). For `c > 1` a second, positive root appears. -/
theorem no_giant_subcritical {c β : ℝ} (hc : c ≤ 1) (hc0 : 0 ≤ c) (hβ : 0 ≤ β)
(h : β = 1 - Real.exp (-(c * β))) : β = 0 := by
by_contra hne
have hpos : 0 < β := lt_of_le_of_ne hβ (Ne.symm hne)
rcases eq_or_lt_of_le hc0 with hc0' | hc0'
· subst hc0'
simp at h
exact hne h
· have hx : 0 < c * β := mul_pos hc0' hpos
have := Real.add_one_lt_exp (show -(c * β) ≠ 0 by linarith)
nlinarithNot formalised: the random walk as a stochastic process and Theorem 1; the identification of with the counts used here; the Stirling estimate; electrical networks and the Nash-Williams inequality itself; Lemma 4 and planar duality; Kesten's theorem; the Erdős–Rényi theorem; Brownian motion's path properties and SLE. Formalising planar duality for percolation would need a discrete Jordan curve theorem — a good project for an ambitious learner.
Return probabilities, crossings and giants, computed
The first experiment checks the rotation trick by brute force (all walks of length ) and then sums exact return probabilities. In it uses the formula obtained by conditioning on the number of vertical steps, and compares the partial sums — and a tail correction based on — with Watson's closed form (Watson, 1939, in the form given by Glasser and Zucker, 1977).
"""Polya's theorem by exact return probabilities.
Simple random walk on Z^d is recurrent exactly when the expected number of
returns to the origin, G = sum_n u_2n with u_2n = P(S_2n = 0), is infinite.
We compute u_2n exactly or to floating-point accuracy:
d = 1: u_2n = C(2n, n) / 4^n
d = 2: u_2n = (C(2n, n) / 4^n)^2 (the 45-degree rotation trick)
d = 3: condition on the number 2j of vertical steps:
u_2n = sum_j C(2n, 2j) (1/3)^(2j) (2/3)^(2n-2j) u1_2j u2_(2n-2j)
and watch the partial sums G(N): they grow like sqrt(N) in d = 1, like
log(N)/pi in d = 2, and converge in d = 3, to Watson's constant
G = sqrt(6)/(32 pi^3) Gamma(1/24) Gamma(5/24) Gamma(7/24) Gamma(11/24),
so the walk returns with probability 1 - 1/G = 0.3405... We also check the
rotation trick exhaustively for short walks.
Evidence: exact counting for short walks (exhaustive-finite) and
floating-point summation of exact formulas (numerical). Finite partial sums
cannot prove divergence; the proofs are in the lesson and in Lean.
"""
import itertools
import math
STEPS2 = [(1, 0), (-1, 0), (0, 1), (0, -1)]
def closed_walks_2d(n):
"""Number of walks of length 2n on Z^2 that end at the origin (brute force)."""
count = 0
for walk in itertools.product(STEPS2, repeat=2 * n):
if sum(s[0] for s in walk) == 0 and sum(s[1] for s in walk) == 0:
count += 1
return count
def u1(n_max):
"""[u_0, u_2, ..., u_2n_max] for d = 1, via u_2n+2 = u_2n (2n+1)/(2n+2)."""
u = [1.0]
for n in range(n_max):
u.append(u[-1] * (2 * n + 1) / (2 * n + 2))
return u
def u3(n_max, one=None):
"""Return probabilities u_2n of simple random walk on Z^3, n <= n_max."""
one = one if one is not None else u1(n_max)
two = [x * x for x in one]
out = []
for n in range(n_max + 1):
total = 0.0
# term for j vertical pairs: C(2n,2j) (1/3)^2j (2/3)^(2n-2j) one[j] two[n-j]
log_c = 0.0 # log C(2n, 2j), updated multiplicatively
for j in range(n + 1):
if j > 0:
a = 2 * n - 2 * j + 2
log_c += math.log(a * (a - 1) / ((2 * j) * (2 * j - 1)))
weight = math.exp(log_c + 2 * j * math.log(1 / 3)
+ (2 * n - 2 * j) * math.log(2 / 3))
total += weight * one[j] * two[n - j]
out.append(total)
return out
def watson_constant():
"""G(Z^3) = sqrt(6)/(32 pi^3) Gamma(1/24)Gamma(5/24)Gamma(7/24)Gamma(11/24)."""
g = math.gamma
return (math.sqrt(6) / (32 * math.pi ** 3)
* g(1 / 24) * g(5 / 24) * g(7 / 24) * g(11 / 24))
def partial_sums(u, checkpoints):
"""{N: sum_{n=0}^{N} u_2n} at the given N."""
out, s = {}, 0.0
for n, x in enumerate(u):
s += x
if n in checkpoints:
out[n] = s
return out
def main():
print("Exhaustive check of the rotation trick on Z^2:")
for n in range(1, 5):
print(f" closed walks of length {2 * n}: {closed_walks_2d(n):>5}"
f" C({2 * n},{n})^2 = {math.comb(2 * n, n) ** 2:>5}")
big, small = 100000, 1200
one = u1(big)
g1 = partial_sums(one, {100, 1000, 10000, 100000})
g2 = partial_sums([x * x for x in one], {100, 1000, 10000, 100000})
g3 = partial_sums(u3(small, one), {100, 300, 1200})
print()
print("Expected number of visits to 0 up to time 2N, G(N) = sum u_2n:")
print(f"{'N':>8}{'d = 1':>11}{'2 sqrt(N/pi)':>14}{'d = 2':>9}"
f"{'log(N)/pi':>11}")
for n in sorted(g1):
print(f"{n:>8}{g1[n]:>11.2f}{2 * math.sqrt(n / math.pi):>14.2f}"
f"{g2[n]:>9.3f}{math.log(n) / math.pi:>11.3f}")
c3 = 4 * (3 / (4 * math.pi)) ** 1.5 # tail ~ c3 / sqrt(N)
print(f"{'N':>8}{'d = 3':>11}{'+ tail est.':>14}")
for n in sorted(g3):
print(f"{n:>8}{g3[n]:>11.5f}{g3[n] + c3 / math.sqrt(n):>14.5f}")
w = watson_constant()
print(f"Watson's exact value G = {w:.7f}; return probability "
f"1 - 1/G = {1 - 1 / w:.6f}")
print()
print("Epistemic status: the first table is an exhaustive count (exact);")
print("the others sum exact formulas in floating point. Partial sums that")
print("grow, or seem to settle, cannot by themselves prove divergence or")
print("convergence; the d = 1, 2 divergence is proved in the lesson and in")
print("Lean, and d = 3 convergence in the lesson (by an estimate).")
if __name__ == "__main__":
main()The second experiment estimates by simulation the probability of an open left–right crossing of the self-dual rectangle for several , showing the curve sharpening around as grows — and staying at at , as self-duality requires. Then it measures the largest component of random graphs with vertices and average degree , against the branching-process prediction .
"""Phase transitions: bond percolation on a grid and the giant component.
Part 1. Bond percolation on a square grid: each edge is open with
probability p. We estimate by simulation the probability that open edges
connect the left side of an (L + 1) x L rectangle to its right side. As L
grows the curve sharpens into a step at p = 1/2, Kesten's critical value;
at p = 1/2 the crossing probability is exactly 1/2 for every L, because the
rectangle is chosen to be self-dual.
Part 2. The Erdos-Renyi random graph with n vertices and m = c n / 2 random
edges (asymptotically the same as G(n, c/n)). The largest component has a
vanishing fraction of the vertices when c < 1 and a fraction close to the
positive root beta of beta = 1 - exp(-c beta) when c > 1.
Evidence: statistical (Monte Carlo with a fixed seed, small sizes and few
trials, with approximate standard errors). Simulations near a critical
point estimate behaviour; the exact critical values are theorems.
"""
import math
import random
def find(parent, x):
"""Root of x in a union-find forest, with path halving."""
while parent[x] != x:
parent[x] = parent[parent[x]]
x = parent[x]
return x
def union(parent, size, a, b):
"""Merge the components of a and b (union by size)."""
ra, rb = find(parent, a), find(parent, b)
if ra == rb:
return
if size[ra] < size[rb]:
ra, rb = rb, ra
parent[rb] = ra
size[ra] += size[rb]
def crosses(n, p, rng):
"""Is there an open left-right crossing of the self-dual rectangle R_n?
R_n has n interior columns x = 1..n and n + 1 rows y = 0..n. Each row
has n + 1 horizontal edges, from the left side (x = 0) through the
interior to the right side (x = n + 1), and each interior column has n
vertical edges. Its planar dual is a rotated copy of R_n, so at p = 1/2
a crossing occurs with probability exactly 1/2.
"""
count = n * (n + 1) + 2
parent, size = list(range(count)), [1] * count
left, right = count - 2, count - 1
def node(x, y):
return y * n + (x - 1)
for y in range(n + 1):
if rng.random() < p:
union(parent, size, left, node(1, y))
if rng.random() < p:
union(parent, size, node(n, y), right)
for x in range(1, n):
if rng.random() < p:
union(parent, size, node(x, y), node(x + 1, y))
for x in range(1, n + 1):
for y in range(n):
if rng.random() < p:
union(parent, size, node(x, y), node(x, y + 1))
return find(parent, left) == find(parent, right)
def crossing_probability(n, p, trials, rng):
"""Fraction of trials with an open left-right crossing."""
return sum(crosses(n, p, rng) for _ in range(trials)) / trials
def largest_component_fraction(n, c, rng):
"""Largest component of a random graph with n vertices and c n / 2 edges."""
parent, size = list(range(n)), [1] * n
for _ in range(round(c * n / 2)):
a, b = rng.randrange(n), rng.randrange(n)
if a != b:
union(parent, size, a, b)
return max(size[find(parent, v)] for v in range(n)) / n
def giant_fraction(c, iterations=200):
"""Largest root of beta = 1 - exp(-c beta) in [0, 1].
For c <= 1 the only root is 0 (proved in the lesson's Lean file); for
c > 1 iterating beta -> 1 - exp(-c beta) from beta = 1 converges to the
positive root.
"""
if c <= 1:
return 0.0
beta = 1.0
for _ in range(iterations):
beta = 1 - math.exp(-c * beta)
return beta
def main():
rng = random.Random(1957)
ps = [0.35, 0.45, 0.5, 0.55, 0.65]
trials = 200
print(f"Part 1: P(left-right open crossing), {trials} trials per entry")
print(" p " + "".join(f"{p:>8}" for p in ps))
for n in [8, 24]:
est = [crossing_probability(n, p, trials, rng) for p in ps]
print(f" L = {n:<3}" + "".join(f"{e:>8.2f}" for e in est))
print(f" (standard error of each entry at most about "
f"{0.5 / math.sqrt(trials):.2f})")
print()
n, reps = 2000, 5
print(f"Part 2: random graph, n = {n} vertices, average degree c "
f"({reps} samples)")
print(f" {'c':>4}{'largest component / n':>24}{'beta(c) theory':>17}")
for c in [0.5, 0.9, 1.5, 2.0, 3.0]:
sim = sum(largest_component_fraction(n, c, rng)
for _ in range(reps)) / reps
print(f" {c:>4}{sim:>24.3f}{giant_fraction(c):>17.3f}")
print(" (for c < 1 the largest component has O(log n) vertices,")
print(" so its fraction tends to 0 only slowly as n grows)")
print()
print("Epistemic status: Monte Carlo estimates from a few hundred random")
print("samples on small systems (statistical evidence). They are")
print("consistent with Kesten's theorem p_c = 1/2 and the Erdos-Renyi")
print("theorem, but cannot determine critical values or exponents exactly.")
if __name__ == "__main__":
main()The first experiment is exhaustive (exact) for short walks and numerical for the sums; the second is statistical, with a few hundred samples on small systems. A simulation near a critical point can suggest and estimate exponents; it cannot determine them exactly — Kesten's theorem and the SLE computations do that.
Explore: walks and spanning trees
Many one-dimensional walks at once, with their root-mean-square distance against the exact . Notice how far a typical walk wanders while still being bound to come home: that tension is why the expected return time is infinite.
Simple random walks on ℤ
Typical distance √n — and yet every walk returns, eventually.
- 8 of the walks
- root-mean-square distance (500 walks)
- ±√n (exact)
Root-mean-square distance after 400 steps
Simulated20.08
Exact√400 ≈ 20
Simulation of 500 walks of 400 steps: root-mean-square distance 20.08. The exact value is √n, about 20.
Evidence, not proofThis is a simulation of 500 walks (run 1) using a seeded random number generator. It is evidence, not proof: the exact values come from mathematics, and a new run gives slightly different numbers.
Exactly: the average of (position)² after n steps is n, so the root-mean-square distance is √n. Going twice as far takes four times as many steps.
Kirchhoff's theorem (1847) connects electrical networks to spanning trees: with unit resistors, the effective resistance between the endpoints of an edge equals the fraction of spanning trees that contain . Build spanning trees of this grid; the widget counts all of them () by the matrix-tree theorem. Uniform spanning trees, whose branches are loop-erased random walks (Wilson's algorithm), converge to and .
Spanning trees of a 3 × 3 grid
Kirchhoff: R_eff across an edge = (spanning trees through it) / (all spanning trees).
Edges chosen: 0. A spanning tree on 9 vertices has exactly 8 edges (|V| − 1).
- No cycle ✓
- Reaches every vertex ✗The chosen edges leave 9 separate pieces.
- A spanning tree ✗
Altogether this graph has 192 different spanning trees (counted exactly by Kirchhoff's matrix-tree theorem).
Exercises
1. Random structures: walks, percolation and random geometry
Warm-upHumanHow many of the walks of length on (steps , ) end at the origin?
2. Random structures: walks, percolation and random geometry
CoreHumanOn which of these graphs is simple random walk recurrent? (Choose all that apply.)
3. Random structures: walks, percolation and random geometry
CoreHumanIn the rooted binary tree (root of degree , all other vertices of degree ), what is the probability that simple random walk started at the root never returns to the root?
4. Random structures: walks, percolation and random geometry
Warm-upHumanHow many edges of join a vertex on the boundary of the square to a vertex on the boundary of ? (This is the cutset in the Nash-Williams argument.)
5. Random structures: walks, percolation and random geometry
CoreHumanIn Peierls' proof that , which fact justifies the bound on the number of self-avoiding paths of length from the origin?
6. Random structures: walks, percolation and random geometry
CoreHumanIn with , roughly what fraction of the vertices lie in the largest component when is large?
7. Random structures: walks, percolation and random geometry
CoreFormalWhich Lean statement says that the expected number of returns to the origin of simple random walk on , , is infinite?
8. Random structures: walks, percolation and random geometry
StretchHumanWhich of these are established theorems (not conjectures or numerical observations)? (Choose all that apply.)
9. Random structures: walks, percolation and random geometry
StretchComputationalWrite return_prob_1d(n) returning for simple random walk on as an exact Fraction, return_prob_2d(n) returning the probability for (use the rotation trick), and expected_visits(f, N) returning . The tests check exact values and the slow growth of the 2D sum.
10. Random structures: walks, percolation and random geometry
CoreHumanSimple random walk on returns to with probability . What is the expected time of the first return?
Common misconceptions
Misconception
"A recurrent walk must return quickly." In dimensions and the return time is finite with probability one but has infinite expectation: for the walk on , , whose sum diverges. In the tail is even heavier, .
Misconception
"Simulations near a critical point determine the critical exponents." Simulations give estimates with statistical and finite-size errors, which converge slowly near criticality. Exact values such as for triangular-lattice percolation or for the Brownian frontier needed proofs (here via SLE); Mandelbrot's was a conjecture from pictures for nearly twenty years. For bond percolation on even the qualitative statement is unproved.
Misconception
" is obvious by the symmetry ." Self-duality shows that crossings at are balanced, which makes the natural candidate, but turning this into took twenty years (Harris 1960, Kesten 1980): one needs RSW estimates and a sharp-threshold argument. Without self-duality there is no reason for a nice value: site percolation on has .
Misconception
"A transient walker escapes in a straight line." In the walk returns to the origin with probability about , and it visits every finite set only finitely often — but its path is still a wildly wandering random fractal at large scales (Brownian, of dimension ), not a ray.
Misconception
"The giant component appears when the graph becomes connected." In the giant component emerges at , while connectivity requires ; in between, the graph has a giant plus many small pieces, the last of which to join are isolated vertices.
Viewpoints
Analysis— Fourier analysis and harmonic functions
The analyst proves Pólya's theorem in one line. With the characteristic function of a step, , so (with a little care at ) . Near , , and is finite exactly when . Watson's 1939 evaluation of this integral for gives the constant computed in the experiment. Harmonic functions are the bridge to harmonic analysis and potential theory: voltages are discrete harmonic functions, and Kakutani (1944) showed that Brownian motion solves the Dirichlet problem.
Geometry— Random walks see the geometry of groups
Run simple random walk on the Cayley graph of a finitely generated group. Varopoulos (1986), using Gromov's polynomial growth theorem, proved that the walk is recurrent if and only if the group is a finite extension of , or — Pólya's theorem is the abelian case of a statement about growth: the volume of balls must grow at most quadratically. Kesten (1959) showed that the return probabilities decay exponentially exactly when the group is non-amenable, as for free groups, whose Cayley graphs are trees. Random walks have become a basic tool of geometric group theory.
Topology— Planar duality and crossing events
Percolation on is controlled by topology: the dual-circuit criterion in Peierls' argument and the self-duality behind Kesten's theorem are discrete forms of the Jordan curve theorem — in a rectangle, either there is an open left-right crossing or a closed dual top-bottom crossing, never both (the "Hex theorem", equivalent to the Brouwer fixed-point theorem in dimension ). In the scaling limit, critical interfaces become random fractal curves, and the question "how does a random curve wind around a point?" is answered by the SLE computations, which recover exponents from winding and crossing probabilities.
Combinatorics— Counting paths and the probabilistic method
Every proof in this lesson begins with counting: binomial coefficients for returns, for self-avoiding paths, trees for spanning trees and branching processes. The Erdős–Rényi threshold is proved with first- and second-moment methods — the expected number of tree components of each size, and its variance — the same techniques that prove the existence of Ramsey graphs in the probabilistic method. Kirchhoff's matrix-tree theorem turns effective resistances into ratios of spanning-tree counts, and Wilson's algorithm (1996) samples uniform spanning trees exactly using loop-erased random walks.
Physics— Critical phenomena and universality
Percolation is the simplest model of a phase transition in statistical mechanics. Physicists predicted, before any proof, that near quantities obey power laws whose exponents are universal — the same for bond and site percolation and for every two-dimensional lattice — and, using conformal field theory, computed them: Cardy's crossing formula (1992) and exponents such as and . These derivations are heuristic. Smirnov's theorem and the SLE program turned several of them into theorems, but only for specific lattices; universality itself remains largely unproved. Brownian motion entered physics through Einstein (1905) and Smoluchowski (1906), and Perrin's experiments confirming their predictions (1908) helped establish the existence of atoms.
Wonder Trails
Pólya's question in its most elementary form, for younger explorers (and anyone who likes a good story):
Wonder Trail · Optional · never gradedWill the walker return?A walker tosses a fair coin every minute: heads, one step east; tails, one step west. Is she certain to come back to where she started? What if she can also step north and south — or up and down in space?Follow the trailHistory and global context
- 1847–1900: networks and diffusion. Gustav Kirchhoff's laws and the matrix-tree theorem (1847); Lord Rayleigh's monotonicity principle (1870s); Louis Bachelier's random walk model of the Paris stock exchange (1900).
- 1905–1923: Brownian motion. Albert Einstein (1905) and Marian Smoluchowski (1906) explained Brownian motion as the cumulative effect of molecular collisions; Jean Perrin confirmed it experimentally (1908); Norbert Wiener constructed Brownian motion rigorously (1923).
- 1921–1960: walks, percolation, random graphs. George Pólya's recurrence theorem (1921). Andrei Kolmogorov's axioms (1933) made probability part of measure theory. Shizuo Kakutani linked Brownian motion and harmonic functions (1944); Kiyosi Itô built stochastic calculus (1940s). Monroe Donsker's invariance principle (1951). Simon Broadbent and John Hammersley introduced percolation (1957). Crispin Nash-Williams proved his inequality (1959). Paul Erdős and Alfréd Rényi founded random graph theory (1959–60). Theodore Harris proved (1960).
- 1978–1990: the critical point. Lucio Russo, Paul Seymour and Dominic Welsh developed crossing estimates (1978); Harry Kesten proved (1980); Terry Lyons proved his flow criterion (1983); Peter Doyle and Laurie Snell popularised electrical networks (1984); Takashi Hara and Gordon Slade developed the lace expansion for high-dimensional percolation (1990).
- 2000–today: conformal invariance. Oded Schramm introduced SLE (2000). Gregory Lawler, Schramm and Wendelin Werner computed intersection exponents and proved Mandelbrot's conjecture (2001). Stanislav Smirnov proved conformal invariance of critical percolation on the triangular lattice (2001). Jean-François Le Gall and Grégory Miermont constructed the Brownian map (2013); Jason Miller and Scott Sheffield related it to Liouville quantum gravity (2015–16). Hugo Duminil-Copin's work on phase transitions earned the 2022 Fields Medal.
Further reading
- Peter G. Doyle and J. Laurie Snell, Random Walks and Electric Networks (1984) — the classic, short and delightful introduction to the electrical method and Pólya's theorem.
- Russell Lyons and Yuval Peres, Probability on Trees and Networks (2016) — the standard modern reference for random walks on graphs, electrical networks, percolation on trees and groups.
- Geoffrey Grimmett, Percolation (1989; 2nd ed. 1999) — the comprehensive text, including Kesten's theorem.
- Béla Bollobás and Oliver Riordan, Percolation (2006) — a shorter route to through sharp thresholds.
- Geoffrey Grimmett, Probability on Graphs (2010; 2nd ed. 2018) — percolation, random walks, the Ising model and random graphs in one compact book.
- Remco van der Hofstad, Random Graphs and Complex Networks, Vol. 1 (2017) — the Erdős–Rényi phase transition in detail.
- Peter Mörters and Yuval Peres, Brownian Motion (2010) — path properties, Hausdorff dimension, and a first look at SLE.
- Gregory F. Lawler, Conformally Invariant Processes in the Plane (2005) — the mathematics of SLE.
- William Feller, An Introduction to Probability Theory and Its Applications, Vol. I (1950; 3rd ed. 1968) — Chapter III on the simple random walk, including return times.
A reading path: Doyle–Snell → Lyons–Peres Ch. 1–2 and 5 → Grimmett (Probability on Graphs) → Lawler or Mörters–Peres for the continuum.