Mutation–selection balance
The linear recursion
DefinitionLinear mutation–selection recursion#✓fully proved
One generation of the linear model: x ↦ (1 - s) x + U.
def linStep (s U x : ℝ) : ℝ := (1 - s) * x + U
Used by 12
s_het · Binomial transition kernel for loss-of-function counts · Transition kernel entries are probabilities · Unique fixed point \(U/s\) of the linear recursion · Closed-form orbit of the linear mutation–selection recursion · Demography-free mean · Demography-free mean, one step · Rows of the transition kernel have total mass one · Binomial mean of the transition kernel · Global attraction · Expected loss-of-function frequency converges to \(U/s\)TheoremClosed-form orbit of the linear mutation–selection recursion#✓fully proved
Closed-form orbit: x_t = U / s + (1 - s)^t (x_0 - U / s).
theorem linStep_iterate {s : ℝ} (hs : s ≠ 0) (U x : ℝ) (t : ℕ) :
(linStep s U)^[t] x = U / s + (1 - s) ^ t * (x - U / s)
def linStep (s U x : ℝ) : ℝ := (1 - s) * x + U
MathlibExt/Biology/PopulationGenetics/MutationSelectionBalance.lean:87
Uses 1 · Used by 1
TheoremUnique fixed point \(U/s\) of the linear recursion#✓fully proved
U / s is the unique fixed point.
theorem linStep_eq_self_iff {s : ℝ} (hs : s ≠ 0) (U x : ℝ) :
linStep s U x = x ↔ x = U / s
def linStep (s U x : ℝ) : ℝ := (1 - s) * x + U
MathlibExt/Biology/PopulationGenetics/MutationSelectionBalance.lean:87
Uses 1 · Used by 1
TheoremGlobal attraction#✓fully proved
For 0 < s < 2 every orbit converges to U / s.
theorem tendsto_linStep_iterate {s : ℝ} (hs0 : 0 < s) (hs2 : s < 2) (U x : ℝ) :
Tendsto (fun t => (linStep s U)^[t] x) atTop (𝓝 (U / s))
def linStep (s U x : ℝ) : ℝ := (1 - s) * x + U
MathlibExt/Biology/PopulationGenetics/MutationSelectionBalance.lean:87
Uses 2 · Used by 1
DefinitionFraction of de novo loss-of-function alleles#✓fully proved
The fraction of LoF alleles in the next generation that are new mutations, from
frequency x: U / ((1 - s) x + U).
noncomputable def deNovoFraction (s U x : ℝ) : ℝ := U / linStep s U x
def linStep (s U x : ℝ) : ℝ := (1 - s) * x + U
MathlibExt/Biology/PopulationGenetics/MutationSelectionBalance.lean:87
Uses 1 · Used by 1
TheoremAt equilibrium the de novo fraction is s_het#✓fully proved
At equilibrium the de novo fraction is s_het.
theorem deNovoFraction_eq {s U : ℝ} (hs : s ≠ 0) (hU : U ≠ 0) :
deNovoFraction s U (U / s) = s
noncomputable def deNovoFraction (s U x : ℝ) : ℝ := U / linStep s U x
MathlibExt/Biology/PopulationGenetics/MutationSelectionBalance.lean:121
Uses 3
The linear Wright–Fisher chain with arbitrary population sizes
DefinitionBinomial transition kernel for loss-of-function counts#✓fully proved
The transition probability from i LoF copies among N to j copies among N': binomial
sampling of N' copies with success probability (1 - s)(i / N) + U.
noncomputable def kernel (s U : ℝ) (N N' : ℕ) (i : Fin (N + 1)) (j : Fin (N' + 1)) : ℝ :=
(bernsteinPolynomial ℝ N' j).eval (linStep s U ((i : ℕ) / N))
def linStep (s U x : ℝ) : ℝ := (1 - s) * x + U
MathlibExt/Biology/PopulationGenetics/MutationSelectionBalance.lean:87
Uses 1 · Used by 6
DefinitionMean loss-of-function frequency of a distribution#✓fully proved
The mean LoF frequency ∑ μ_i (i / N) of a distribution μ on Fin (N + 1).
noncomputable def meanFreq (N : ℕ) (μ : Fin (N + 1) → ℝ) : ℝ := ∑ i, μ i * ((i : ℕ) / N)
DefinitionOne generation of the chain on distributions#✓fully proved
One generation of the chain acting on distributions.
noncomputable def pushStep (s U : ℝ) (N N' : ℕ) (μ : Fin (N + 1) → ℝ) : Fin (N' + 1) → ℝ :=
fun j => ∑ i, μ i * kernel s U N N' i j
noncomputable def kernel (s U : ℝ) (N N' : ℕ) (i : Fin (N + 1)) (j : Fin (N' + 1)) : ℝ :=
(bernsteinPolynomial ℝ N' j).eval (linStep s U ((i : ℕ) / N))
MathlibExt/Biology/PopulationGenetics/MutationSelectionBalance.lean:133
TheoremRows of the transition kernel have total mass one#✓fully proved
The kernel rows have total mass one (for every real sampling probability).
theorem sum_kernel (s U : ℝ) (N N' : ℕ) (i : Fin (N + 1)) : ∑ j, kernel s U N N' i j = 1
noncomputable def kernel (s U : ℝ) (N N' : ℕ) (i : Fin (N + 1)) (j : Fin (N' + 1)) : ℝ :=
(bernsteinPolynomial ℝ N' j).eval (linStep s U ((i : ℕ) / N))
MathlibExt/Biology/PopulationGenetics/MutationSelectionBalance.lean:133
Uses 2 · Used by 1
TheoremTransition kernel entries are probabilities#✓fully proved
The kernel entries are probabilities when the sampling probability is in [0, 1].
theorem kernel_nonneg {s U : ℝ} {N N' : ℕ} {i : Fin (N + 1)}
(h0 : 0 ≤ linStep s U ((i : ℕ) / N)) (h1 : linStep s U ((i : ℕ) / N) ≤ 1)
(j : Fin (N' + 1)) : 0 ≤ kernel s U N N' i j
def linStep (s U x : ℝ) : ℝ := (1 - s) * x + U
MathlibExt/Biology/PopulationGenetics/MutationSelectionBalance.lean:87
noncomputable def kernel (s U : ℝ) (N N' : ℕ) (i : Fin (N + 1)) (j : Fin (N' + 1)) : ℝ :=
(bernsteinPolynomial ℝ N' j).eval (linStep s U ((i : ℕ) / N))
MathlibExt/Biology/PopulationGenetics/MutationSelectionBalance.lean:133
Uses 2
TheoremBinomial mean of the transition kernel#✓fully proved
The binomial mean: ∑_j kernel(i, j) (j / N') = (1 - s)(i / N) + U for N' > 0.
theorem sum_kernel_mul (s U : ℝ) (N : ℕ) {N' : ℕ} (hN' : 0 < N') (i : Fin (N + 1)) :
∑ j, kernel s U N N' i j * ((j : ℕ) / N') = linStep s U ((i : ℕ) / N)
noncomputable def kernel (s U : ℝ) (N N' : ℕ) (i : Fin (N + 1)) (j : Fin (N' + 1)) : ℝ :=
(bernsteinPolynomial ℝ N' j).eval (linStep s U ((i : ℕ) / N))
MathlibExt/Biology/PopulationGenetics/MutationSelectionBalance.lean:133
def linStep (s U x : ℝ) : ℝ := (1 - s) * x + U
MathlibExt/Biology/PopulationGenetics/MutationSelectionBalance.lean:87
Uses 2 · Used by 1
TheoremDemography-free mean, one step#✓fully proved
For any sizes N, N' > 0 and any distribution μ
of total mass one, the mean frequency after one generation is (1 - s) m + U.
theorem meanFreq_pushStep (s U : ℝ) (N : ℕ) {N' : ℕ} (hN' : 0 < N') {μ : Fin (N + 1) → ℝ}
(hμ : ∑ i, μ i = 1) : meanFreq N' (pushStep s U N N' μ) = linStep s U (meanFreq N μ)
noncomputable def meanFreq (N : ℕ) (μ : Fin (N + 1) → ℝ) : ℝ := ∑ i, μ i * ((i : ℕ) / N)
MathlibExt/Biology/PopulationGenetics/MutationSelectionBalance.lean:137
noncomputable def pushStep (s U : ℝ) (N N' : ℕ) (μ : Fin (N + 1) → ℝ) : Fin (N' + 1) → ℝ :=
fun j => ∑ i, μ i * kernel s U N N' i j
MathlibExt/Biology/PopulationGenetics/MutationSelectionBalance.lean:140
def linStep (s U x : ℝ) : ℝ := (1 - s) * x + U
MathlibExt/Biology/PopulationGenetics/MutationSelectionBalance.lean:87
Uses 5 · Used by 1
TheoremPushing a distribution forward preserves total mass#✓fully proved
Pushing a distribution forward preserves total mass.
theorem sum_pushStep (s U : ℝ) (N N' : ℕ) {μ : Fin (N + 1) → ℝ} (hμ : ∑ i, μ i = 1) :
∑ j, pushStep s U N N' μ j = 1
noncomputable def pushStep (s U : ℝ) (N N' : ℕ) (μ : Fin (N + 1) → ℝ) : Fin (N' + 1) → ℝ :=
fun j => ∑ i, μ i * kernel s U N N' i j
MathlibExt/Biology/PopulationGenetics/MutationSelectionBalance.lean:140
Uses 3 · Used by 1
DefinitionLaw of the loss-of-function count under any demography#✓fully proved
The law of the LoF count in generation t for population sizes N t (any demography),
started from μ₀.
noncomputable def law (s U : ℝ) (N : ℕ → ℕ) (μ₀ : Fin (N 0 + 1) → ℝ) :
(t : ℕ) → Fin (N t + 1) → ℝ
| 0 => μ₀
| t + 1 => pushStep s U (N t) (N (t + 1)) (law s U N μ₀ t)
noncomputable def pushStep (s U : ℝ) (N N' : ℕ) (μ : Fin (N + 1) → ℝ) : Fin (N' + 1) → ℝ :=
fun j => ∑ i, μ i * kernel s U N N' i j
MathlibExt/Biology/PopulationGenetics/MutationSelectionBalance.lean:140
Uses 1 · Used by 2
TheoremDemography-free mean#✓fully proved
For every sequence of positive population sizes, E[X_t] follows
the deterministic linear recursion (derived from the binomial mean). The identity holds for all
real s, U; law is a probability law when 0 ≤ U ≤ s ≤ 1 and μ₀ is one.
theorem meanFreq_law (s U : ℝ) {N : ℕ → ℕ} (hN : ∀ t, 0 < N t) {μ₀ : Fin (N 0 + 1) → ℝ}
(hμ₀ : ∑ i, μ₀ i = 1) (t : ℕ) :
meanFreq (N t) (law s U N μ₀ t) = (linStep s U)^[t] (meanFreq (N 0) μ₀)
noncomputable def meanFreq (N : ℕ) (μ : Fin (N + 1) → ℝ) : ℝ := ∑ i, μ i * ((i : ℕ) / N)
MathlibExt/Biology/PopulationGenetics/MutationSelectionBalance.lean:137
noncomputable def law (s U : ℝ) (N : ℕ → ℕ) (μ₀ : Fin (N 0 + 1) → ℝ) :
(t : ℕ) → Fin (N t + 1) → ℝ
| 0 => μ₀
| t + 1 => pushStep s U (N t) (N (t + 1)) (law s U N μ₀ t)
MathlibExt/Biology/PopulationGenetics/MutationSelectionBalance.lean:203
def linStep (s U x : ℝ) : ℝ := (1 - s) * x + U
MathlibExt/Biology/PopulationGenetics/MutationSelectionBalance.lean:87
Uses 5 · Used by 1
TheoremExpected loss-of-function frequency converges to \(U/s\)#✓fully proved
The expected LoF frequency converges to U / s under any demography.
theorem tendsto_meanFreq_law {s : ℝ} (hs0 : 0 < s) (hs2 : s < 2) (U : ℝ) {N : ℕ → ℕ}
(hN : ∀ t, 0 < N t) {μ₀ : Fin (N 0 + 1) → ℝ} (hμ₀ : ∑ i, μ₀ i = 1) :
Tendsto (fun t => meanFreq (N t) (law s U N μ₀ t)) atTop (𝓝 (U / s))
noncomputable def meanFreq (N : ℕ) (μ : Fin (N + 1) → ℝ) : ℝ := ∑ i, μ i * ((i : ℕ) / N)
MathlibExt/Biology/PopulationGenetics/MutationSelectionBalance.lean:137
noncomputable def law (s U : ℝ) (N : ℕ → ℕ) (μ₀ : Fin (N 0 + 1) → ℝ) :
(t : ℕ) → Fin (N t + 1) → ℝ
| 0 => μ₀
| t + 1 => pushStep s U (N t) (N (t + 1)) (law s U N μ₀ t)
MathlibExt/Biology/PopulationGenetics/MutationSelectionBalance.lean:203
The diploid model
DefinitionMean fitness under Hardy–Weinberg proportions#✓fully proved
Mean fitness under Hardy–Weinberg with LoF frequency q and fitnesses 1, 1 - s, 1 - t:
1 - 2 q (1 - q) s - q² t.
def meanFitness (s t q : ℝ) : ℝ := 1 - 2 * q * (1 - q) * s - q ^ 2 * t
Used by 7
U / s is an equilibrium · Equilibria lie at or below U / s · Haldane–Muller load · Mean fitness under multiplicative fitness · Mean fitness at the multiplicative mutation–selection equilibrium · Positivity of mean fitness for allele frequencies below one · Loss-of-function frequency after selectionDefinitionLoss-of-function frequency after selection#✓fully proved
LoF frequency after selection: q (1 - s (1 - q) - t q) / w̄.
noncomputable def selected (s t q : ℝ) : ℝ := q * (1 - s * (1 - q) - t * q) / meanFitness s t q
def meanFitness (s t q : ℝ) : ℝ := 1 - 2 * q * (1 - q) * s - q ^ 2 * t
MathlibExt/Biology/PopulationGenetics/MutationSelectionBalance.lean:236
Uses 1 · Used by 3
DefinitionOne diploid generation of selection and mutation#✓fully proved
One generation: selection, then mutation of wild-type alleles at rate U.
noncomputable def diploidStep (s t U q : ℝ) : ℝ := (1 - U) * selected s t q + U
noncomputable def selected (s t q : ℝ) : ℝ := q * (1 - s * (1 - q) - t * q) / meanFitness s t q
MathlibExt/Biology/PopulationGenetics/MutationSelectionBalance.lean:239
Uses 1 · Used by 2
TheoremMean fitness under multiplicative fitness#✓fully proved
With multiplicative fitness, w̄ = (1 - s q)² for every q.
theorem meanFitness_mult (s q : ℝ) : meanFitness s (2 * s - s ^ 2) q = (1 - s * q) ^ 2
def meanFitness (s t q : ℝ) : ℝ := 1 - 2 * q * (1 - q) * s - q ^ 2 * t
MathlibExt/Biology/PopulationGenetics/MutationSelectionBalance.lean:236
Uses 1 · Used by 2
TheoremU / s is an equilibrium#✓fully proved
U / s is an equilibrium of the multiplicative diploid model (an algebraic identity for
s ≠ 0, U ≠ 1; a frequency in [0, 1] when 0 ≤ U ≤ s).
theorem diploidStep_mult_fixed {s U : ℝ} (hs : s ≠ 0) (hU : U ≠ 1) :
diploidStep s (2 * s - s ^ 2) U (U / s) = U / s
noncomputable def diploidStep (s t U q : ℝ) : ℝ := (1 - U) * selected s t q + U
MathlibExt/Biology/PopulationGenetics/MutationSelectionBalance.lean:242
TheoremMean fitness at the multiplicative mutation–selection equilibrium#✓fully proved
At the multiplicative equilibrium the mean fitness is (1 - U)², independent of s.
Requires U ≠ 1, so that U / s is genuinely a fixed point (diploidStep_mult_fixed):
for U = 1 the point U / s is not an equilibrium.
theorem meanFitness_mult_at_equilibrium {s U : ℝ} (hs : s ≠ 0) (hU : U ≠ 1) :
meanFitness s (2 * s - s ^ 2) (U / s) = (1 - U) ^ 2
def meanFitness (s t q : ℝ) : ℝ := 1 - 2 * q * (1 - q) * s - q ^ 2 * t
MathlibExt/Biology/PopulationGenetics/MutationSelectionBalance.lean:236
Uses 2 · Used by 1
TheoremHaldane–Muller load#✓fully proved
1 - w̄ = 2U - U² at the multiplicative equilibrium
(U ≠ 1, so U / s is a fixed point).
theorem load_mult_at_equilibrium {s U : ℝ} (hs : s ≠ 0) (hU : U ≠ 1) :
1 - meanFitness s (2 * s - s ^ 2) (U / s) = 2 * U - U ^ 2
def meanFitness (s t q : ℝ) : ℝ := 1 - 2 * q * (1 - q) * s - q ^ 2 * t
MathlibExt/Biology/PopulationGenetics/MutationSelectionBalance.lean:236
Uses 2
TheoremPositivity of mean fitness for allele frequencies below one#✓fully proved
Mean fitness is positive for 0 ≤ q < 1 and s, t ≤ 1 (nonnegative fitnesses).
theorem meanFitness_pos {s t q : ℝ} (hs : s ≤ 1) (ht : t ≤ 1) (hq0 : 0 ≤ q) (hq1 : q < 1) :
0 < meanFitness s t q
def meanFitness (s t q : ℝ) : ℝ := 1 - 2 * q * (1 - q) * s - q ^ 2 * t
MathlibExt/Biology/PopulationGenetics/MutationSelectionBalance.lean:236
Uses 1 · Used by 1
TheoremEquilibria lie at or below U / s#✓fully proved
Equilibria lie at or below U / s when homozygotes are at least multiplicatively unfit
(2s - s² ≤ t, which includes recessive lethality t = 1): every fixed point q ∈ [0, 1) of
the diploid map satisfies q ≤ U / s.
theorem le_div_of_diploidStep_eq {s t U q : ℝ} (hs0 : 0 < s) (hs1 : s ≤ 1) (ht : t ≤ 1)
(hst : 2 * s - s ^ 2 ≤ t) (hq0 : 0 ≤ q) (hq1 : q < 1) (hfix : diploidStep s t U q = q) :
q ≤ U / s
noncomputable def diploidStep (s t U q : ℝ) : ℝ := (1 - U) * selected s t q + U
MathlibExt/Biology/PopulationGenetics/MutationSelectionBalance.lean:242
Loading dependency explorer…
The dependency explorer needs JavaScript and its graph data.