Total progeny and the hitting-time theorem
DefinitionFirst passage of the exploration walk#✓fully proved
The exploration walk started at k with steps x_i - 1 stays positive at every time
j < n: j < k + ∑_{i < j} x_i. Together with ∑ x_i + k = n this says that the walk first
hits 0 at time n.
DefinitionCyclic shift of a tuple#✓fully proved
The cyclic shift i ↦ x_{(i + r) mod n} of a tuple.
def rotate {n : ℕ} (x : Fin n → ℕ) (r : ℕ) : Fin n → ℕ :=
fun i => x ⟨(i.val + r) % n, Nat.mod_lt _ (Nat.zero_lt_of_lt i.isLt)⟩
Used by 2
TheoremCycle lemma#✓fully proved
Cycle lemma (Dvoretzky–Motzkin 1947). If x : Fin n → ℕ satisfies ∑ x_i + k = n with
1 ≤ k, then exactly k of the n cyclic shifts of x (counted by shift r < n) are
first-passage sequences.
theorem card_filter_isFirstPassage_rotate {k n : ℕ} (hk : 1 ≤ k) (x : Fin n → ℕ)
(hx : ∑ i, x i + k = n) :
#{r ∈ range n | IsFirstPassage k n (rotate x r)} = k
def IsFirstPassage (k n : ℕ) (x : Fin n → ℕ) : Prop :=
∀ j ∈ range n, j < k + ∑ i with i.val < j, x i
MathlibExt/Probability/BranchingProcess/TotalProgeny.lean:88
def rotate {n : ℕ} (x : Fin n → ℕ) (r : ℕ) : Fin n → ℕ :=
fun i => x ⟨(i.val + r) % n, Nat.mod_lt _ (Nat.zero_lt_of_lt i.isLt)⟩
MathlibExt/Probability/BranchingProcess/TotalProgeny.lean:95
Uses 2 · Used by 1
DefinitionWalk weight of step sequences ending at zero#✓fully proved
The weight W_p(k, n) = ∑ ∏_i p(x_i) over the step sequences x : Fin n → ℕ with
∑ x_i + k = n (the walk from k is at 0 at time n). For p(j) = P(ξ = j) this is
P(ξ_1 + ⋯ + ξ_n = n - k) when k ≤ n, and 0 when k > n.
def walkWeight {R : Type*} [CommSemiring R] (p : ℕ → R) (k n : ℕ) : R :=
∑ x ∈ (Nat.antidiagonalTuple n (n - k)).filter (fun x => ∑ i, x i + k = n), ∏ i, p (x i)
DefinitionHitting weight of first-passage step sequences#✓fully proved
The weight H_p(k, n) = ∑ ∏_i p(x_i) over the step sequences with ∑ x_i + k = n along
which the walk from k first hits 0 at time n. For p(j) = P(ξ = j) this is the
probability P(T = n) that the total progeny of k ancestors is n.
def hittingWeight {R : Type*} [CommSemiring R] (p : ℕ → R) (k n : ℕ) : R :=
∑ x ∈ (Nat.antidiagonalTuple n (n - k)).filter
(fun x => ∑ i, x i + k = n ∧ IsFirstPassage k n x), ∏ i, p (x i)
def IsFirstPassage (k n : ℕ) (x : Fin n → ℕ) : Prop :=
∀ j ∈ range n, j < k + ∑ i with i.val < j, x i
MathlibExt/Probability/BranchingProcess/TotalProgeny.lean:88
Uses 1 · Used by 5
TheoremHitting-time theorem#✓fully proved
Hitting-time theorem, weighted form: n · H_p(k, n) = k · W_p(k, n) for every weight
p with values in a commutative semiring and all k, n. For probability weights this is the
hitting-time theorem of van der Hofstad–Keane (2008); the proof double counts cyclic shifts
with the cycle lemma.
theorem natCast_mul_hittingWeight {R : Type*} [CommSemiring R] (p : ℕ → R) (k n : ℕ) :
(n : R) * hittingWeight p k n = k * walkWeight p k n
def hittingWeight {R : Type*} [CommSemiring R] (p : ℕ → R) (k n : ℕ) : R :=
∑ x ∈ (Nat.antidiagonalTuple n (n - k)).filter
(fun x => ∑ i, x i + k = n ∧ IsFirstPassage k n x), ∏ i, p (x i)
MathlibExt/Probability/BranchingProcess/TotalProgeny.lean:309
def walkWeight {R : Type*} [CommSemiring R] (p : ℕ → R) (k n : ℕ) : R :=
∑ x ∈ (Nat.antidiagonalTuple n (n - k)).filter (fun x => ∑ i, x i + k = n), ∏ i, p (x i)
MathlibExt/Probability/BranchingProcess/TotalProgeny.lean:303
Uses 5 · Used by 2
TheoremProbability of first passage at time n#✓fully proved
Under ν^{⊗n}, the event that the walk from k first hits 0 at time n has
measure H_p(k, n) with p(j) = ν{j}. When ν is a probability measure this is the
probability P(T = n).
theorem measure_firstPassage (k n : ℕ) :
(Measure.pi fun _ : Fin n => ν) {x | ∑ i, x i + k = n ∧ IsFirstPassage k n x} =
hittingWeight (fun j => ν {j}) k n
def IsFirstPassage (k n : ℕ) (x : Fin n → ℕ) : Prop :=
∀ j ∈ range n, j < k + ∑ i with i.val < j, x i
MathlibExt/Probability/BranchingProcess/TotalProgeny.lean:88
def hittingWeight {R : Type*} [CommSemiring R] (p : ℕ → R) (k n : ℕ) : R :=
∑ x ∈ (Nat.antidiagonalTuple n (n - k)).filter
(fun x => ∑ i, x i + k = n ∧ IsFirstPassage k n x), ∏ i, p (x i)
MathlibExt/Probability/BranchingProcess/TotalProgeny.lean:309
Uses 2 · Used by 1
TheoremProbability of the offspring walk event as a walk weight#✓fully proved
Under ν^{⊗n}, the event ξ_1 + ⋯ + ξ_n + k = n has measure W_p(k, n) with
p(j) = ν{j}. When ν is a probability measure this is the probability
P(ξ_1 + ⋯ + ξ_n = n - k).
theorem measure_walk (k n : ℕ) :
(Measure.pi fun _ : Fin n => ν) {x | ∑ i, x i + k = n} =
walkWeight (fun j => ν {j}) k n
def walkWeight {R : Type*} [CommSemiring R] (p : ℕ → R) (k n : ℕ) : R :=
∑ x ∈ (Nat.antidiagonalTuple n (n - k)).filter (fun x => ∑ i, x i + k = n), ∏ i, p (x i)
MathlibExt/Probability/BranchingProcess/TotalProgeny.lean:303
Uses 1 · Used by 1
TheoremOtter–Dwass formula#✓fully proved
For i.i.d. offspring numbers with law ν and k ancestors,
the finite-measure identity
n · P(T = n) = k · P(ξ_1 + ⋯ + ξ_n = n - k) holds as an identity of event masses
(Otter 1949; Dwass 1969); the two sides are probabilities when ν is a probability
measure.
theorem natCast_mul_measure_firstPassage (k n : ℕ) :
(n : ℝ≥0∞) * (Measure.pi fun _ : Fin n => ν)
{x | ∑ i, x i + k = n ∧ IsFirstPassage k n x} =
k * (Measure.pi fun _ : Fin n => ν) {x | ∑ i, x i + k = n}
def IsFirstPassage (k n : ℕ) (x : Fin n → ℕ) : Prop :=
∀ j ∈ range n, j < k + ∑ i with i.val < j, x i
MathlibExt/Probability/BranchingProcess/TotalProgeny.lean:88
TheoremWalk weights for Poisson offspring#✓fully proved
For Poisson(r) step weights, W_p(k, n) = e^{-rn} (rn)^{n-k} / (n-k)! when k ≤ n:
the sum of n independent Poisson(r) variables is Poisson(rn).
theorem walkWeight_poisson (r : ℝ≥0) {k n : ℕ} (hkn : k ≤ n) :
walkWeight (fun j => (poissonMeasure r).real {j}) k n =
Real.exp (-(r * n)) * (r * n) ^ (n - k) / (n - k)!
def walkWeight {R : Type*} [CommSemiring R] (p : ℕ → R) (k n : ℕ) : R :=
∑ x ∈ (Nat.antidiagonalTuple n (n - k)).filter (fun x => ∑ i, x i + k = n), ∏ i, p (x i)
MathlibExt/Probability/BranchingProcess/TotalProgeny.lean:303
Uses 1 · Used by 1
TheoremBorel–Tanner law#✓fully proved
For Poisson(r) offspring and k ≤ n ancestors,
n · P(T = n) = k e^{-rn} (rn)^{n-k} / (n-k)! (Tanner 1961; Haight–Breuer 1960).
theorem natCast_mul_hittingWeight_poisson (r : ℝ≥0) {k n : ℕ} (hkn : k ≤ n) :
(n : ℝ) * hittingWeight (fun j => (poissonMeasure r).real {j}) k n =
k * (Real.exp (-(r * n)) * (r * n) ^ (n - k) / (n - k)!)
def hittingWeight {R : Type*} [CommSemiring R] (p : ℕ → R) (k n : ℕ) : R :=
∑ x ∈ (Nat.antidiagonalTuple n (n - k)).filter
(fun x => ∑ i, x i + k = n ∧ IsFirstPassage k n x), ∏ i, p (x i)
MathlibExt/Probability/BranchingProcess/TotalProgeny.lean:309
Uses 4 · Used by 1
TheoremBorel law#✓fully proved
For Poisson(r) offspring and one ancestor, the total progeny satisfies
P(T = n) = e^{-rn} (rn)^{n-1} / n! for n ≥ 1 (Borel 1942).
theorem hittingWeight_poisson_one (r : ℝ≥0) {n : ℕ} (hn : 1 ≤ n) :
hittingWeight (fun j => (poissonMeasure r).real {j}) 1 n =
Real.exp (-(r * n)) * (r * n) ^ (n - 1) / n !
def hittingWeight {R : Type*} [CommSemiring R] (p : ℕ → R) (k n : ℕ) : R :=
∑ x ∈ (Nat.antidiagonalTuple n (n - k)).filter
(fun x => ∑ i, x i + k = n ∧ IsFirstPassage k n x), ∏ i, p (x i)
MathlibExt/Probability/BranchingProcess/TotalProgeny.lean:309
Uses 2
DefinitionMean total progeny of a Galton–Watson process#✓fully proved
The mean total progeny ∑_n E Z_n of the Galton–Watson process started from one individual.
By Tonelli this is E ∑_n Z_n for any process with the generation laws law ν n.
noncomputable def meanTotalProgeny : ℝ≥0∞ :=
∑' n, ∫⁻ z, (z : ℝ≥0∞) ∂(law ν n)
noncomputable def law : ℕ → Measure ℕ
| 0 => Measure.dirac 1
| n + 1 => (law n).bind (Measure.convPow ν)
MathlibExt/Probability/BranchingProcess/GaltonWatson.lean:64
Uses 1 · Used by 1
TheoremMean total progeny equals \(1/(1-m)\)#✓fully proved
The mean total progeny is (1 - m)⁻¹ in [0, ∞]: it is 1 / (1 - m) for m < 1 and ∞
for m ≥ 1 (m the mean offspring number).
theorem meanTotalProgeny_eq [IsProbabilityMeasure ν] : meanTotalProgeny ν = (1 - mean ν)⁻¹
noncomputable def meanTotalProgeny : ℝ≥0∞ :=
∑' n, ∫⁻ z, (z : ℝ≥0∞) ∂(law ν n)
MathlibExt/Probability/BranchingProcess/TotalProgeny.lean:470
noncomputable def mean : ℝ≥0∞ :=
∫⁻ k, (k : ℝ≥0∞) ∂ν
MathlibExt/Probability/BranchingProcess/GaltonWatson.lean:69
Loading dependency explorer…
The dependency explorer needs JavaScript and its graph data.