Structured coalescent
Structured Coalescent
InductiveState of two lineages in the island model#✓fully proved
The state of two ancestral lineages in the island model: in the same deme, in different demes, or coalesced (absorbing).
inductive PairState
/-- Both lineages are in the same deme. -/
| same
/-- The lineages are in different demes. -/
| different
/-- The lineages have coalesced. -/
| coalesced
deriving DecidableEq
Used by 7
Pair State
TheoremSum over the island-model pair states#✓fully proved
A sum over the three states.
theorem sum_eq {β : Type*} [AddCommMonoid β] (f : PairState → β) :
∑ t, f t = f same + f different + f coalesced
inductive PairState
/-- Both lineages are in the same deme. -/
| same
/-- The lineages are in different demes. -/
| different
/-- The lineages have coalesced. -/
| coalesced
deriving DecidableEq
MathlibExt/Biology/PopulationGenetics/StructuredCoalescent.lean:90
Uses 1 · Used by 2
Structured Coalescent
DefinitionTransition rates of the two-lineage structured coalescent#✓fully proved
The transition rates q(s, t) (s ≠ t) of the two-lineage structured coalescent in the
finite island model with d demes and M = 4Nm, time in units of 2N generations: same deme →
coalesced at rate 1, same deme → different demes at rate M, different demes → same deme at
rate M / (d - 1); all other rates (and the diagonal) are 0. Meaningful for d ≥ 2 and
M ≥ 0.
noncomputable def rate (d : ℕ) (M : ℝ) : PairState → PairState → ℝ
| same, coalesced => 1
| same, different => M
| different, same => M / (d - 1)
| _, _ => 0
inductive PairState
/-- Both lineages are in the same deme. -/
| same
/-- The lineages are in different demes. -/
| different
/-- The lineages have coalesced. -/
| coalesced
deriving DecidableEq
MathlibExt/Biology/PopulationGenetics/StructuredCoalescent.lean:90
DefinitionExit rate of a structured-coalescent state#✓fully proved
The total rate qₛ = ∑ₜ q(s, t) of leaving the state s.
noncomputable def exitRate (d : ℕ) (M : ℝ) (s : PairState) : ℝ := ∑ t, rate d M s t
inductive PairState
/-- Both lineages are in the same deme. -/
| same
/-- The lineages are in different demes. -/
| different
/-- The lineages have coalesced. -/
| coalesced
deriving DecidableEq
MathlibExt/Biology/PopulationGenetics/StructuredCoalescent.lean:90
noncomputable def rate (d : ℕ) (M : ℝ) : PairState → PairState → ℝ
| same, coalesced => 1
| same, different => M
| different, same => M / (d - 1)
| _, _ => 0
MathlibExt/Biology/PopulationGenetics/StructuredCoalescent.lean:120
Uses 2 · Used by 1
DefinitionFirst-step equations for mean coalescence time#✓fully proved
The first-step (backward Kolmogorov) equations for the mean time to coalescence:
h coalesced = 0, and at each transient state s, ∑ₜ q(s, t) (h t - h s) = -1. (The vector
of mean absorption times of a finite absorbing continuous-time Markov chain satisfies these
equations; this file does not construct the chain.)
def FirstStepEquations (d : ℕ) (M : ℝ) (h : PairState → ℝ) : Prop :=
h coalesced = 0 ∧ ∀ s, s ≠ coalesced → ∑ t, rate d M s t * (h t - h s) = -1
inductive PairState
/-- Both lineages are in the same deme. -/
| same
/-- The lineages are in different demes. -/
| different
/-- The lineages have coalesced. -/
| coalesced
deriving DecidableEq
MathlibExt/Biology/PopulationGenetics/StructuredCoalescent.lean:90
noncomputable def rate (d : ℕ) (M : ℝ) : PairState → PairState → ℝ
| same, coalesced => 1
| same, different => M
| different, same => M / (d - 1)
| _, _ => 0
MathlibExt/Biology/PopulationGenetics/StructuredCoalescent.lean:120
DefinitionMean coalescence time within a deme#✓fully proved
The mean coalescence time T₀ = d of two lineages in the same deme (units of 2N
generations).
def withinTime (d : ℕ) : ℝ := d
DefinitionMean coalescence time between demes#✓fully proved
The mean coalescence time T₁ = d + (d - 1) / M of two lineages in different demes (units of
2N generations). Meaningful for M > 0; betweenTime d 0 = d is a junk value (the true mean
is infinite).
noncomputable def betweenTime (d : ℕ) (M : ℝ) : ℝ := d + (d - 1) / M
DefinitionClosed-form mean coalescence times in the island model#✓fully proved
The closed-form mean time to coalescence from each state: T₀, T₁, and 0 once
coalesced. firstStepEquations_iff shows it is the unique solution of the first-step
equations.
noncomputable def meanCoalescenceTime (d : ℕ) (M : ℝ) : PairState → ℝ
| same => withinTime d
| different => betweenTime d M
| coalesced => 0
inductive PairState
/-- Both lineages are in the same deme. -/
| same
/-- The lineages are in different demes. -/
| different
/-- The lineages have coalesced. -/
| coalesced
deriving DecidableEq
MathlibExt/Biology/PopulationGenetics/StructuredCoalescent.lean:90
def withinTime (d : ℕ) : ℝ := d
MathlibExt/Biology/PopulationGenetics/StructuredCoalescent.lean:138
noncomputable def betweenTime (d : ℕ) (M : ℝ) : ℝ := d + (d - 1) / M
MathlibExt/Biology/PopulationGenetics/StructuredCoalescent.lean:143
TheoremMean coalescence times in the finite island model (Strobeck 1987; Slatkin 1991)#✓fully proved
For
d ≥ 2 demes and M = 4Nm > 0, the first-step equations have the unique solution
T₀ = d, T₁ = d + (d - 1) / M. In particular T₀ does not depend on the migration rate.
theorem firstStepEquations_iff {d : ℕ} (hd : 2 ≤ d) {M : ℝ} (hM : 0 < M)
(h : PairState → ℝ) : FirstStepEquations d M h ↔ h = meanCoalescenceTime d M
inductive PairState
/-- Both lineages are in the same deme. -/
| same
/-- The lineages are in different demes. -/
| different
/-- The lineages have coalesced. -/
| coalesced
deriving DecidableEq
MathlibExt/Biology/PopulationGenetics/StructuredCoalescent.lean:90
def FirstStepEquations (d : ℕ) (M : ℝ) (h : PairState → ℝ) : Prop :=
h coalesced = 0 ∧ ∀ s, s ≠ coalesced → ∑ t, rate d M s t * (h t - h s) = -1
MathlibExt/Biology/PopulationGenetics/StructuredCoalescent.lean:133
noncomputable def meanCoalescenceTime (d : ℕ) (M : ℝ) : PairState → ℝ
| same => withinTime d
| different => betweenTime d M
| coalesced => 0
MathlibExt/Biology/PopulationGenetics/StructuredCoalescent.lean:148
TheoremFirst-step analysis in jump-chain form#✓fully proved
At each transient state s the exit rate is
positive and the mean coalescence time is the mean holding time 1 / qₛ plus the mean time from
the next state, h s = 1 / qₛ + ∑ₜ (q(s, t) / qₛ) h t.
theorem meanCoalescenceTime_eq_firstStep {d : ℕ} (hd : 2 ≤ d) {M : ℝ} (hM : 0 < M)
{s : PairState} (hs : s ≠ coalesced) :
0 < exitRate d M s ∧ meanCoalescenceTime d M s =
1 / exitRate d M s + ∑ t, rate d M s t / exitRate d M s * meanCoalescenceTime d M t
inductive PairState
/-- Both lineages are in the same deme. -/
| same
/-- The lineages are in different demes. -/
| different
/-- The lineages have coalesced. -/
| coalesced
deriving DecidableEq
MathlibExt/Biology/PopulationGenetics/StructuredCoalescent.lean:90
noncomputable def exitRate (d : ℕ) (M : ℝ) (s : PairState) : ℝ := ∑ t, rate d M s t
MathlibExt/Biology/PopulationGenetics/StructuredCoalescent.lean:127
noncomputable def meanCoalescenceTime (d : ℕ) (M : ℝ) : PairState → ℝ
| same => withinTime d
| different => betweenTime d M
| coalesced => 0
MathlibExt/Biology/PopulationGenetics/StructuredCoalescent.lean:148
noncomputable def rate (d : ℕ) (M : ℝ) : PairState → PairState → ℝ
| same, coalesced => 1
| same, different => M
| different, same => M / (d - 1)
| _, _ => 0
MathlibExt/Biology/PopulationGenetics/StructuredCoalescent.lean:120
DefinitionSlatkin's mean total coalescence time#✓fully proved
Slatkin's mean coalescence time T̄ = T₀ / d + (d - 1) T₁ / d of two genes drawn from two
demes chosen independently and uniformly at random.
noncomputable def totalTime (d : ℕ) (M : ℝ) : ℝ :=
withinTime d / d + (d - 1) / d * betweenTime d M
def withinTime (d : ℕ) : ℝ := d
MathlibExt/Biology/PopulationGenetics/StructuredCoalescent.lean:138
noncomputable def betweenTime (d : ℕ) (M : ℝ) : ℝ := d + (d - 1) / M
MathlibExt/Biology/PopulationGenetics/StructuredCoalescent.lean:143
Uses 2 · Used by 4
DefinitionSlatkin's F_ST for the finite island model#✓fully proved
Slatkin's (1991) F_ST = (T̄ - T₀) / T̄ for the finite island model.
noncomputable def slatkinFST (d : ℕ) (M : ℝ) : ℝ :=
(totalTime d M - withinTime d) / totalTime d M
noncomputable def totalTime (d : ℕ) (M : ℝ) : ℝ :=
withinTime d / d + (d - 1) / d * betweenTime d M
MathlibExt/Biology/PopulationGenetics/StructuredCoalescent.lean:216
def withinTime (d : ℕ) : ℝ := d
MathlibExt/Biology/PopulationGenetics/StructuredCoalescent.lean:138
Uses 2 · Used by 3
TheoremClosed form of Slatkin's mean total coalescence time#✓fully proved
T̄ = d + (d - 1)² / (d M) for d ≥ 1.
theorem totalTime_eq {d : ℕ} (hd : 1 ≤ d) (M : ℝ) :
totalTime d M = d + (d - 1) ^ 2 / (d * M)
noncomputable def totalTime (d : ℕ) (M : ℝ) : ℝ :=
withinTime d / d + (d - 1) / d * betweenTime d M
MathlibExt/Biology/PopulationGenetics/StructuredCoalescent.lean:216
Uses 2 · Used by 2
TheoremPositivity of Slatkin's mean total coalescence time#✓fully proved
The denominator of Slatkin's F_ST is positive: 0 < T̄ for d ≥ 1 and M > 0.
theorem totalTime_pos {d : ℕ} (hd : 1 ≤ d) {M : ℝ} (hM : 0 < M) : 0 < totalTime d M
noncomputable def totalTime (d : ℕ) (M : ℝ) : ℝ :=
withinTime d / d + (d - 1) / d * betweenTime d M
MathlibExt/Biology/PopulationGenetics/StructuredCoalescent.lean:216
Uses 2
TheoremSlatkin's F_ST for the finite island model (Slatkin 1991)#✓fully proved
For d ≥ 2 demes and
M = 4Nm > 0, F_ST = 1 / (1 + M d² / (d - 1)²).
theorem slatkinFST_eq {d : ℕ} (hd : 2 ≤ d) {M : ℝ} (hM : 0 < M) :
slatkinFST d M = 1 / (1 + M * d ^ 2 / (d - 1) ^ 2)
noncomputable def slatkinFST (d : ℕ) (M : ℝ) : ℝ :=
(totalTime d M - withinTime d) / totalTime d M
MathlibExt/Biology/PopulationGenetics/StructuredCoalescent.lean:220
Uses 4 · Used by 2
TheoremSlatkin's F_ST lies strictly between 0 and 1#✓fully proved
Slatkin's F_ST lies in (0, 1) for d ≥ 2 and M > 0.
theorem slatkinFST_mem_Ioo {d : ℕ} (hd : 2 ≤ d) {M : ℝ} (hM : 0 < M) :
slatkinFST d M ∈ Set.Ioo (0 : ℝ) 1
noncomputable def slatkinFST (d : ℕ) (M : ℝ) : ℝ :=
(totalTime d M - withinTime d) / totalTime d M
MathlibExt/Biology/PopulationGenetics/StructuredCoalescent.lean:220
Uses 2
TheoremMany demes (Slatkin 1991)#✓fully proved
As the number of demes grows, Slatkin's F_ST tends to
Wright's 1 / (1 + M) = 1 / (1 + 4Nm) for every M > 0.
theorem tendsto_slatkinFST {M : ℝ} (hM : 0 < M) :
Tendsto (fun d : ℕ => slatkinFST d M) atTop (𝓝 (1 / (1 + M)))
noncomputable def slatkinFST (d : ℕ) (M : ℝ) : ℝ :=
(totalTime d M - withinTime d) / totalTime d M
MathlibExt/Biology/PopulationGenetics/StructuredCoalescent.lean:220
Uses 2
Loading dependency explorer…
The dependency explorer needs JavaScript and its graph data.