Stat.Moment­Problems

The classical moment problem: which sequences of raw moments come from a probability law, and what the moments pin down about the law.

Residual­Quadratic 23 core · 18 supporting · 3 submodules For a probability law μ on the real line with finite fourth moment, the minimal mean squared error of approximating y² by an affine function of y, r(μ) = min over (b₀, b₁) of ∫ (y² − b₀ − b₁ y)² dμ, has the closed form ( Bounded­Outcome­Envelope 14 core · 26 supporting · 5 submodules Sharp envelopes for a bounded outcome given its first moments: the extreme laws consistent with the reported moments, and the resulting upper and lower bounds on any further moment. Gaussian­Perturbation 8 core · 1 supporting · 6 submodules Finitely many moments cannot distinguish the Gaussian.
Raw­Moment 2 core · 0 supporting This module fixes the single raw-moment notation shared by the MomentProblems developments: the order-k raw moment of a measure on the real line is the Bochner integral of the k-th power. ★ rawMoment_eq_integral

Raw moments of a measure on the real line

This module fixes the single raw-moment notation shared by the MomentProblems developments: the order-k raw moment of a measure on the real line is the Bochner integral of the k-th power. Both the finite-moment near-Gaussian perturbation construction and the measure bridge for the quadratic projection residual are stated in terms of it.

abbrev rawMoment reviewed
Causalean.Stat.MomentProblems

Given a real measure and a nonnegative integer order, the raw moment is Mathlib's moment of the identity random variable. This argument-order adapter is reducible to ProbabilityTheory.moment id k ν, whose value is the integral of the corresponding power.

Definition (Lean source)
ν :
k :
ℕ
rawMoment ν k :
ℝ
ProbabilityTheory.moment id k ν
Causalean.Stat.MomentProblems.rawMoment · Causalean/Stat/MomentProblems/RawMoment.lean:25
theorem rawMoment_eq_integral reviewed
Causalean.Stat.MomentProblems

For a real measure at a nonnegative integer order, the raw-moment notation equals the integral of the corresponding power.

Formal statement
ν :
k :
ℕ
rawMoment ν k = ∫ x, x ^ k ∂ν
Proof (Lean source)
@[simp] theorem rawMoment_eq_integral (ν : Measure ℝ) (k : ℕ) : rawMoment ν k = ∫ x, x ^ k ∂ν := rfl
Causalean.Stat.MomentProblems.rawMoment_eq_integral · Causalean/Stat/MomentProblems/RawMoment.lean:31 · uses rawMoment
Cumulant 4 core · 1 supporting This module provides the general moment-to-cumulant coordinates used throughout the moment-problem layer: the joint cumulant of a pair of real random variables at a given bidegree (defined by the set-partition Möbius for ★ jointCumulant_zero_zero

Cumulants of real random variables, and the Gaussian-law predicate

This module provides the general moment-to-cumulant coordinates used throughout the moment-problem layer: the joint cumulant of a pair of real random variables at a given bidegree (defined by the set-partition Möbius formula on mixed moments), the univariate cumulant of a single real random variable obtained by specializing it, and the predicate "this law on the real line is a Gaussian law".

The total-order-zero cumulant is defined to be zero, matching the constant term of the cumulant-generating function. At every positive total order, the usual set-partition formula is used.

For variables with the needed moments, the second cumulant is the variance, the third is the centered third moment, and the fourth is the unnormalized fourth cumulant. The standardized ratio of the fourth cumulant to the variance squared is excess kurtosis when the variance is positive. This file does not prove that vanishing higher cumulants characterizes Gaussian laws; such a characterization needs additional moment-existence and determinacy assumptions. The Gaussian predicate here is the distributional property of being some gaussianReal, including degenerate Dirac laws.

def IsGaussianLaw reviewed
Causalean.Stat.MomentProblems

For a measure on the real line, the Gaussian-law property holds exactly when there exist a real mean and a nonnegative variance parameter such that the measure is the associated normal distribution. The variance parameter may be zero, so point masses count as degenerate Gaussian laws.

Definition (Lean source)
ν :
IsGaussianLaw ν :
Prop
∃ (mean : ℝ) (v : ℝ≥0), ν = gaussianReal mean v
Causalean.Stat.MomentProblems.IsGaussianLaw · Causalean/Stat/MomentProblems/Cumulant.lean:43
def jointCumulant reviewed
Causalean.Stat.MomentProblems

Given a sample space equipped with a σ-algebra, a measure on that space, two real-valued random variables, and two nonnegative integer orders, the joint cumulant at the specified bidegree is zero when both orders are zero; otherwise it is the sum over every partition of the combined slots, with the first pp slots assigned to the first variable and the remaining qq slots assigned to the second, of a signed factorial weight times the product, across its blocks, of the mixed moment whose exponents equal that block's counts of first- and second-variable slots.

Definition (Lean source)
Ω :
Type u_1
shared
μ :
X Y :
Ω → ℝ
p q :
ℕ
jointCumulant μ X Y p q :
ℝ
if p + q
= 0 then 0 else ∑ π : Finpartition (Finset.univ : Finset (Fin (p + q))), (-1 : ℝ) ^ (π.parts.card - 1) * (factorial (π.parts.card - 1) : ℝ) * ∏ B ∈ π.parts, ∫ ω, (X ω) ^ (B.filter (fun i => i.val < p)).card * (Y ω) ^ (B.filter (fun i => p ≤ i.val)).card ∂μ
Causalean.Stat.MomentProblems.jointCumulant · Causalean/Stat/MomentProblems/Cumulant.lean:55
theorem jointCumulant_zero_zero reviewed
Causalean.Stat.MomentProblems

Given a sample space equipped with a σ-algebra, a measure on that space, and two real-valued random variables, their joint cumulant at bidegree (0, 0) is zero.

Formal statement
Ω :
Type u_1
shared
μ :
X Y :
Ω → ℝ
jointCumulant μ X Y 0 0 = 0
Proof (Lean source)
@[simp] theorem jointCumulant_zero_zero (μ : Measure Ω) (X Y : Ω → ℝ) : jointCumulant μ X Y 0 0 = 0 := by simp [jointCumulant]
Causalean.Stat.MomentProblems.jointCumulant_zero_zero · Causalean/Stat/MomentProblems/Cumulant.lean:79 · uses jointCumulant
def sourceCumulant reviewed
Causalean.Stat.MomentProblems

Given a sample space equipped with a σ-algebra, a measure on that space, a real-valued random variable, and a nonnegative integer order, the cumulant of that order is zero at order zero and otherwise is the joint cumulant obtained by placing that same variable in every slot.

Definition (Lean source)
Ω :
Type u_1
shared
μ :
S :
Ω → ℝ
r :
ℕ
sourceCumulant μ S r :
ℝ
jointCumulant μ S S r 0
Causalean.Stat.MomentProblems.sourceCumulant · Causalean/Stat/MomentProblems/Cumulant.lean:87
1 supporting declaration (lemmas, instances)
Moment­Cumulant­Inversion 6 core · 9 supporting Cumulants of positive order are polynomials in the moments, and the polynomial of order r involves the moment of order r linearly (with coefficient one) plus a remainder built only from strictly lower moments. ★ sourceCumulant_eq_cumFromMom★ cumFromMom_momFromCum★ continuous_momFromCum

The triangular moment ↔ cumulant change of coordinates

Cumulants of positive order are polynomials in the moments, and the polynomial of order r involves the moment of order r linearly (with coefficient one) plus a remainder built only from strictly lower moments. The order-zero cumulant is set to zero. Triangularity at positive orders means the change of coordinates inverts: prescribing a cumulant sequence determines a moment sequence, recursively and uniquely, among sequences normalized to have total mass one and mean zero.

This module sets up both directions on abstract sequences of reals — no measure is needed to state them — and connects the forward direction to the measure-theoretic cumulant of a real random variable. It also records the two structural facts the inversion is used for downstream: each reconstructed moment depends only on the prescribed cumulants up to the same order (locality), and depends continuously on them.

def cumFromMom reviewed
Causalean.Stat.MomentProblems

For a nonnegative order and a real moment sequence, the cumulant read from that moment sequence is zero at order zero; at positive orders it is the signed, factorial-weighted sum over all partitions of a set of that many elements, with each partition contributing the product of the moments indexed by its block sizes.

Definition (Lean source)
r :
ℕ
m :
ℕ → ℝ
cumFromMom r m :
ℝ
if r
= 0 then 0 else ∑ π : Finpartition (Finset.univ : Finset (Fin r)), (-1 : ℝ) ^ (π.parts.card - 1) * (factorial (π.parts.card - 1) : ℝ) * ∏ B ∈ π.parts, m B.card
Causalean.Stat.MomentProblems.cumFromMom · Causalean/Stat/MomentProblems/MomentCumulantInversion.lean:36
def restFromMom reviewed
Causalean.Stat.MomentProblems

For a nonnegative order and a real moment sequence, the lower-order remainder of the cumulant formula is the same partition sum with the sole one-block partition omitted; hence it uses only moments of order strictly below that order.

Definition (Lean source)
r :
ℕ
m :
ℕ → ℝ
restFromMom r m :
ℝ
∑ π ∈ Finset.univ.filter (fun π : Finpartition (Finset.univ : Finset (Fin r)) => π.parts.card ≠ 1), (-1 : ℝ) ^ (π.parts.card - 1) * (factorial (π.parts.card - 1) : ℝ) * ∏ B ∈ π.parts, m B.card
Causalean.Stat.MomentProblems.restFromMom · Causalean/Stat/MomentProblems/MomentCumulantInversion.lean:51
theorem sourceCumulant_eq_cumFromMom reviewed
Causalean.Stat.MomentProblems

For a real random variable with law ν and any order r, the order-r cumulant of ν equals the abstract combinatorial cumulant formula evaluated at ν's own raw-moment sequence: the measure-theoretic and combinatorial definitions agree.

Formal statement
ν :
r :
ℕ
sourceCumulant ν (id : ℝ → ℝ) r = cumFromMom r (fun k => ∫ t, t ^ k ∂ν)
Proof (Lean source)
theorem sourceCumulant_eq_cumFromMom (ν : Measure ℝ) (r : ℕ) : sourceCumulant ν (id : ℝ → ℝ) r = cumFromMom r (fun k => ∫ t, t ^ k ∂ν) := by by_cases hr : r = 0 · subst r simp unfold sourceCumulant jointCumulant cumFromMom simp only [Nat.add_zero, if_neg hr] apply Finset.sum_congr rfl intro π _ congr 1 apply Finset.prod_congr rfl intro B hB have hfirst : B.filter (fun i => i.val < r) = B := Finset.filter_true_of_mem (fun i _ => i.isLt) have hsecond : B.filter (fun i => r ≤ i.val) = ∅ := Finset.filter_false_of_mem (fun i _ hi => (not_le_of_gt i.isLt) hi) rw [hsecond] simp
Causalean.Stat.MomentProblems.sourceCumulant_eq_cumFromMom · Causalean/Stat/MomentProblems/MomentCumulantInversion.lean:91 · uses cumFromMom , sourceCumulant
def momFromCum reviewed
Causalean.Stat.MomentProblems

For a real sequence of prescribed cumulants, the reconstructed moment sequence is defined by giving its zeroth moment the value one, giving its first moment the value zero, and at every order at least two, subtracting from the prescribed cumulant the lower-order remainder computed from the already reconstructed moments.

Definition (Lean source)
c :
ℕ → ℝ
momFromCum c :
ℕ → ℝ
clause 1
| 0 => 1
clause 2
| 1 => 0
clause 3
| succ (succ r)
=> c (r + 2)
- restFromMom (r + 2) (fun k => if _h : k < r + 2 then momFromCum c k else 0) termination_by n
=> n decreasing_by omega
Causalean.Stat.MomentProblems.momFromCum · Causalean/Stat/MomentProblems/MomentCumulantInversion.lean:175
theorem cumFromMom_momFromCum reviewed
Causalean.Stat.MomentProblems

Correctness of the inversion. Reading the cumulants back off the reconstructed moment sequence returns the prescribed cumulants, at every order r at least two.

Formal statement
c :
ℕ → ℝ
r :
ℕ
hr :
2 ≤ r
Proof (Lean source)
theorem cumFromMom_momFromCum (c : ℕ → ℝ) (r : ℕ) (hr : 2 ≤ r) : cumFromMom r (momFromCum c) = c r := by rw [cumFromMom_eq r (by omega), momFromCum_succ c r hr] ring
Causalean.Stat.MomentProblems.cumFromMom_momFromCum · Causalean/Stat/MomentProblems/MomentCumulantInversion.lean:215 · uses cumFromMom , momFromCum
theorem continuous_momFromCum reviewed
Causalean.Stat.MomentProblems

Continuity of the inversion. At any fixed order r, the reconstructed moment of that order is a continuous function of the prescribed cumulant sequence, so small perturbations of the target cumulants move the moments only slightly — the key to the openness arguments that use this inversion.

Formal statement
r :
ℕ
Continuous (fun c : ℕ → ℝ => momFromCum c r)
Proof (Lean source)
@[fun_prop] theorem continuous_momFromCum (r : ℕ) : Continuous (fun c : ℕ → ℝ => momFromCum c r) := by induction r using Nat.strong_induction_on with | h r ih => by_cases hr : 2 ≤ r · simp_rw [momFromCum_succ _ r hr] apply (continuous_apply r).sub unfold restFromMom apply continuous_finsetSum intro π _ apply continuous_const.mul apply continuous_finsetProd intro B hB exact ih B.card (block_card_lt_of_card_ne_one π ((Finset.mem_filter.mp ‹π ∈ Finset.univ.filter _›).2) hB) · interval_cases r · simpa only [momFromCum_zero] using (continuous_const : Continuous (fun _ : ℕ → ℝ => (1 : ℝ))) · simpa only [momFromCum_one] using (continuous_const : Continuous (fun _ : ℕ → ℝ => (0 : ℝ)))
Causalean.Stat.MomentProblems.continuous_momFromCum · Causalean/Stat/MomentProblems/MomentCumulantInversion.lean:238 · uses momFromCum
9 supporting declarations (lemmas, instances)
  • cumFromMom_zero theorem — For a real moment sequence, its order-zero combinatorial cumulant is zero.
    m :
    ℕ → ℝ
    cumFromMom 0 m = 0
    Proof (Lean source)
    @[simp] theorem cumFromMom_zero (m : ℕ → ℝ) : cumFromMom 0 m = 0 := by simp [cumFromMom]
    Causalean.Stat.MomentProblems.cumFromMom_zero · Causalean/Stat/MomentProblems/MomentCumulantInversion.lean:46
  • cumFromMom_eq theorem — Triangularity. At any positive order the cumulant equals the moment of that same order plus a remainder assembled only from strictly lower moments. This is what makes the moment-to-cumulant map invertible by recursion.
    r :
    ℕ
    hr :
    1 ≤ r
    m :
    ℕ → ℝ
    cumFromMom r m = m r + restFromMom r m
    Proof (Lean source)
    theorem cumFromMom_eq (r : ℕ) (hr : 1 ≤ r) (m : ℕ → ℝ) : cumFromMom r m = m r + restFromMom r m := by let P₀ : Finpartition (Finset.univ : Finset (Fin r)) := Finpartition.indiscrete (by intro hempty have hx : (⟨0, hr⟩ : Fin r) ∈ (Finset.univ : Finset (Fin r)) := Finset.mem_univ _ have hempty' : (Finset.univ : Finset (Fin r)) = ∅ := by simpa using hempty rw [hempty'] at hx exact notMem_empty _ hx) have hfiber : Finset.univ.filter (fun π : Finpartition (Finset.univ : Finset (Fin r)) => π.parts.card = 1) = {P₀} := by ext π simp only [mem_filter, Finset.mem_univ, true_and, Finset.mem_singleton] constructor · intro hp obtain ⟨B, hparts⟩ := Finset.card_eq_one.mp hp have hB : B = (Finset.univ : Finset (Fin r)) := by have := π.sup_parts simpa [hparts] using this apply Finpartition.ext simp [P₀, hparts, hB] · rintro rfl simp [P₀] rw [cumFromMom, if_neg (by omega), ← Finset.sum_filter_add_sum_filter_not (s := Finset.univ) (p := fun π : Finpartition (Finset.univ : Finset (Fin r)) => π.parts.card = 1)] rw [hfiber, Finset.sum_singleton] simp [P₀, restFromMom]
    Causalean.Stat.MomentProblems.cumFromMom_eq · Causalean/Stat/MomentProblems/MomentCumulantInversion.lean:114
  • cumFromMom_congr theorem — The order-r cumulant depends only on the moments up to order r: changing higher moments leaves it unchanged.
    r :
    ℕ
    m m' :
    ℕ → ℝ
    h :
    ∀ k
    if
    1 ≤ k
    and
    k ≤ r
    then
    m k = m' k
    Proof (Lean source)
    theorem cumFromMom_congr (r : ℕ) {m m' : ℕ → ℝ} (h : ∀ k, 1 ≤ k → k ≤ r → m k = m' k) : cumFromMom r m = cumFromMom r m' := by by_cases hr : r = 0 · simp [hr] rw [cumFromMom, if_neg hr, cumFromMom, if_neg hr] apply Finset.sum_congr rfl intro π _ congr 1 apply Finset.prod_congr rfl intro B hB exact h B.card (block_card_pos π hB) (block_card_le π hB)
    Causalean.Stat.MomentProblems.cumFromMom_congr · Causalean/Stat/MomentProblems/MomentCumulantInversion.lean:146
  • restFromMom_congr theorem — The lower-order remainder at order r depends only on the moments strictly below r: changing the order-r moment, or any higher one, leaves it unchanged.
    r :
    ℕ
    m m' :
    ℕ → ℝ
    h :
    ∀ k
    if
    1 ≤ k
    and
    k < r
    then
    m k = m' k
    Proof (Lean source)
    theorem restFromMom_congr (r : ℕ) {m m' : ℕ → ℝ} (h : ∀ k, 1 ≤ k → k < r → m k = m' k) : restFromMom r m = restFromMom r m' := by unfold restFromMom apply Finset.sum_congr rfl intro π hπ have hcard : π.parts.card ≠ 1 := (Finset.mem_filter.mp hπ).2 congr 1 apply Finset.prod_congr rfl intro B hB exact h B.card (block_card_pos π hB) (block_card_lt_of_card_ne_one π hcard hB)
    Causalean.Stat.MomentProblems.restFromMom_congr · Causalean/Stat/MomentProblems/MomentCumulantInversion.lean:161
  • momFromCum_zero theorem — The reconstructed moment sequence has total mass one.
    c :
    ℕ → ℝ
    momFromCum c 0 = 1
    Proof (Lean source)
    @[simp] theorem momFromCum_zero (c : ℕ → ℝ) : momFromCum c 0 = 1 := by rw [momFromCum]
    Causalean.Stat.MomentProblems.momFromCum_zero · Causalean/Stat/MomentProblems/MomentCumulantInversion.lean:191
  • momFromCum_one theorem — The reconstructed moment sequence is centered: its mean is zero.
    c :
    ℕ → ℝ
    momFromCum c 1 = 0
    Proof (Lean source)
    @[simp] theorem momFromCum_one (c : ℕ → ℝ) : momFromCum c 1 = 0 := by rw [momFromCum]
    Causalean.Stat.MomentProblems.momFromCum_one · Causalean/Stat/MomentProblems/MomentCumulantInversion.lean:195
  • momFromCum_succ theorem — The defining recursion: at every order at least two, the reconstructed moment is the target cumulant of that order minus the remainder built from the lower reconstructed moments.
    c :
    ℕ → ℝ
    r :
    ℕ
    hr :
    2 ≤ r
    Proof (Lean source)
    theorem momFromCum_succ (c : ℕ → ℝ) (r : ℕ) (hr : 2 ≤ r) : momFromCum c r = c r - restFromMom r (momFromCum c) := by cases r with | zero => omega | succ r => cases r with | zero => omega | succ n => rw [momFromCum] congr 1 apply restFromMom_congr intro k _ hk simp [hk]
    Causalean.Stat.MomentProblems.momFromCum_succ · Causalean/Stat/MomentProblems/MomentCumulantInversion.lean:199
  • momFromCum_congr theorem — Locality of the inversion. The reconstructed moment of order r depends only on the prescribed cumulants of orders two through r, so truncating the cumulant target beyond r is harmless.
    c c' :
    ℕ → ℝ
    r :
    ℕ
    h :
    ∀ k
    if
    2 ≤ k
    and
    k ≤ r
    then
    c k = c' k
    Proof (Lean source)
    theorem momFromCum_congr {c c' : ℕ → ℝ} (r : ℕ) (h : ∀ k, 2 ≤ k → k ≤ r → c k = c' k) : momFromCum c r = momFromCum c' r := by induction r using Nat.strong_induction_on with | h r ih => by_cases hr : 2 ≤ r · rw [momFromCum_succ c r hr, momFromCum_succ c' r hr, h r hr le_rfl] congr 1 apply restFromMom_congr intro k hkpos hkr exact ih k hkr (fun j hj hjk => h j hj (hjk.trans (le_of_lt hkr))) · interval_cases r <;> simp
    Causalean.Stat.MomentProblems.momFromCum_congr · Causalean/Stat/MomentProblems/MomentCumulantInversion.lean:222
  • momFromCum_eq_of_cum theorem — Uniqueness of the inversion. Any moment sequence with total mass one and mean zero whose cumulants are the prescribed ones is exactly the sequence produced by the recursion.
    m :
    ℕ → ℝ
    hm0 :
    m 0 = 1
    hm1 :
    m 1 = 0
    c :
    ℕ → ℝ
    hc :
    ∀ r
    if
    2 ≤ r
    then
    c r = cumFromMom r m
    r :
    ℕ
    momFromCum c r = m r
    Proof (Lean source)
    theorem momFromCum_eq_of_cum (m : ℕ → ℝ) (hm0 : m 0 = 1) (hm1 : m 1 = 0) (c : ℕ → ℝ) (hc : ∀ r, 2 ≤ r → c r = cumFromMom r m) (r : ℕ) : momFromCum c r = m r := by induction r using Nat.strong_induction_on with | h r ih => by_cases hr : 2 ≤ r · rw [momFromCum_succ c r hr, hc r hr, cumFromMom_eq r (by omega)] have hrest : restFromMom r (momFromCum c) = restFromMom r m := by apply restFromMom_congr intro k _ hkr exact ih k hkr rw [hrest] ring · interval_cases r <;> simp [hm0, hm1]
    Causalean.Stat.MomentProblems.momFromCum_eq_of_cum · Causalean/Stat/MomentProblems/MomentCumulantInversion.lean:264
Atomic­Law 4 core · 4 supporting This module builds the finitely supported probability laws used as explicit witnesses in truncated moment problems: a finite list of distinct real atom locations carrying a matching list of weights. ★ isProbabilityMeasure_atomicLaw★ not_isGaussianLaw_atomicLaw

Finite atomic laws on the real line

This module builds the finitely supported probability laws used as explicit witnesses in truncated moment problems: a finite list of distinct real atom locations carrying a matching list of weights. It records how such a law integrates an arbitrary function (a weighted sum over the atoms), when it is a probability measure, how much mass it puts on each atom, that all of its moments are finite (the support is bounded), and that it is never Gaussian as soon as two atoms carry strictly positive mass.

The last fact is what makes finite atomic laws usable as non-Gaussian witnesses: a nondegenerate normal law has no atoms at all, and a degenerate one is a single point mass, so two distinct atoms of positive mass rule out both cases.

def atomicWeight reviewed
Causalean.Stat.MomentProblems

For a natural number of atoms, a list of their real locations, and a matching list of real weights, the weight assigned to a real point is the sum of the weights of precisely those atoms located at that point.

Definition (Lean source)
n :
ℕ
x :
Fin n → ℝ
p :
Fin n → ℝ
atomicWeight n x p :
ℝ → ℝ
fun t ↦ ∑ i : Fin n, if x i = t then p i else 0
Causalean.Stat.MomentProblems.atomicWeight · Causalean/Stat/MomentProblems/AtomicLaw.lean:34
def atomicLaw reviewed
Causalean.Stat.MomentProblems

For a natural number of atoms, a list of their real locations, and a matching list of real weights, the finite atomic law is the measure that puts each weight as point mass at its corresponding location.

Definition (Lean source)
n :
ℕ
x :
Fin n → ℝ
p :
Fin n → ℝ
atomicLaw n x p :
Causalean.Stat.MomentProblems.atomicLaw · Causalean/Stat/MomentProblems/AtomicLaw.lean:40
theorem isProbabilityMeasure_atomicLaw reviewed
Causalean.Stat.MomentProblems

A finite atomic law on the real line, built from n pairwise distinct atom locations carrying nonnegative weights that sum to one, is a probability measure.

Formal statement
n :
ℕ
Fin n → ℝ
Fin n → ℝ
hx :
hp :
∀ i, 0 ≤ p i
hsum :
∑ i, p i = 1
Proof (Lean source)
theorem isProbabilityMeasure_atomicLaw {n : ℕ} {x : Fin n → ℝ} {p : Fin n → ℝ} (hx : Injective x) (hp : ∀ i, 0 ≤ p i) (hsum : ∑ i, p i = 1) : IsProbabilityMeasure (atomicLaw n x p) := by classical apply isProbabilityMeasure_discreteMeasure · intro t ht obtain ⟨i, hi, rfl⟩ := Finset.mem_image.mp ht rw [atomicWeight_apply hx] exact hp i · rw [Finset.sum_image hx.injOn] simpa only [atomicWeight_apply hx] using hsum
Causalean.Stat.MomentProblems.isProbabilityMeasure_atomicLaw · Causalean/Stat/MomentProblems/AtomicLaw.lean:72 · uses atomicLaw
theorem not_isGaussianLaw_atomicLaw reviewed
Causalean.Stat.MomentProblems

A finite atomic probability law with at least two locations that are pairwise distinct and each carry strictly positive mass is not a Gaussian law: a normal law with positive variance has no point masses at all, and one with zero variance is a single point mass.

Formal statement
n :
ℕ
Fin n → ℝ
Fin n → ℝ
hx :
hp :
∀ i, 0 < p i
hn :
2 ≤ n
Proof (Lean source)
theorem not_isGaussianLaw_atomicLaw {n : ℕ} {x : Fin n → ℝ} {p : Fin n → ℝ} (hx : Injective x) (hp : ∀ i, 0 < p i) (hn : 2 ≤ n) : ¬ IsGaussianLaw (atomicLaw n x p) := by classical intro hgauss obtain ⟨mean, v, hv⟩ := hgauss let i₀ : Fin n := ⟨0, by omega⟩ let i₁ : Fin n := ⟨1, by omega⟩ have hi₀₁ : i₀ ≠ i₁ := by intro h have := congrArg val h simp [i₀, i₁] at this have hx₀₁ : x i₀ ≠ x i₁ := fun h ↦ hi₀₁ (hx h) have hpnonneg : ∀ i, 0 ≤ p i := fun i ↦ (hp i).le by_cases hvzero : v = 0 · have hdirac : atomicLaw n x p = Measure.dirac mean := by rw [hv, hvzero, gaussianReal_zero_var] have hmass₀ := atomicLaw_singleton hx hpnonneg i₀ have hmass₁ := atomicLaw_singleton hx hpnonneg i₁ rw [hdirac] at hmass₀ hmass₁ have hmean₀ : mean = x i₀ := by by_contra hne have hzero : Measure.dirac mean {x i₀} = 0 := by simp [Measure.dirac_apply' mean (MeasurableSet.singleton (x i₀)), hne] exact ENNReal.ofReal_ne_zero_iff.mpr (hp i₀) (hmass₀.symm.trans hzero) have hmean₁ : mean = x i₁ := by by_contra hne have hzero : Measure.dirac mean {x i₁} = 0 := by simp [Measure.dirac_apply' mean (MeasurableSet.singleton (x i₁)), hne] exact ENNReal.ofReal_ne_zero_iff.mpr (hp i₁) (hmass₁.symm.trans hzero) exact hx₀₁ (hmean₀.symm.trans hmean₁) · have hnoatoms : NullSingletonClass (atomicLaw n x p) := by rw [hv] exact nullSingletonClass_gaussianReal hvzero have hzero : atomicLaw n x p {x i₀} = 0 := hnoatoms.measure_singleton (x i₀) rw [atomicLaw_singleton hx hpnonneg i₀] at hzero exact ENNReal.ofReal_ne_zero_iff.mpr (hp i₀) hzero
Causalean.Stat.MomentProblems.not_isGaussianLaw_atomicLaw · Causalean/Stat/MomentProblems/AtomicLaw.lean:119 · uses IsGaussianLaw , atomicLaw
4 supporting declarations (lemmas, instances)
Score­Program 4 core · 3 supporting This file solves the optimization problem that uses the projection residual from ResidualQuadratic.ProjectionResidual. ★ scoreCost_eq

Constrained quadratic score program dual to the L² projection residual

This file solves the optimization problem that uses the projection residual from ResidualQuadratic.ProjectionResidual. For a probability measure μ on ℝ with finite fourth moment and positive variance, consider the constrained minimum-norm score program: among all scores s ∈ L²(μ) that are moment-orthogonal to 1 and y and carry a prescribed y²-moment x,

minimize ∫ s² dμ subject to ∫ s dμ = 0, ∫ y·s dμ = 0, ∫ y²·s dμ = x,

what is the least achievable L²(μ) norm² of s?

The answer is the duality identity

scoreCost μ x = x² / r, where r = l2ResidualQuadratic μ

is the (positive) L² residual of regressing y² on span{1, y} (ProjectionResidual.lean). This is the classic Lagrangian / minimum-norm-interpolation duality: the constrained least-norm value is (prescribed moment)² / (residual variance of the constrained direction).

Contents

* FeasibleScore μ x s — feasibility: s ∈ L²(μ) with the three moment constraints. * optScore μ x — the optimal score s*(y) = (x/r)·q(y), q the projection residual. * optScore_feasible, optScore_cost — s* is feasible and achieves cost x²/r (attainment). * feasibleScore_cost_lower_bound — every feasible s has ∫ s² ≥ x²/r (completing the square: ∫ (s − (x/r)q)² = ∫ s² − x²/r ≥ 0, using ∫ q·s = x and ∫ q² = r). * scoreCost, scoreCost_eq — the program value and the headline duality scoreCost μ x = x²/r.

Reuse

The identity is the reusable score-cost primitive for arm-specific moment problems: once an arm law has residual variance r_{a,ν}, a target moment displacement x has least score norm J_{a,ν}(x) = x² / r_{a,ν}.

structure FeasibleScore reviewed
Causalean.Stat.MomentProblems.ScoreProgram

Feasibility of a score. s : ℝ → ℝ is feasible for target x if it lies in L²(μ) and is moment-orthogonal to 1 and y while carrying prescribed y²-moment x: s ∈ L²(μ), ∫ s dμ = 0, ∫ y·s dμ = 0, ∫ y²·s dμ = x.

Definition (Lean source)
μ :
x :
ℝ
s :
ℝ → ℝ
memL2 :
MemLp s 2 μ

s is square-integrable: s ∈ L²(μ).

mean_zero :
∫ y, s y ∂μ = 0

s is orthogonal to the constant 1: ∫ s dμ = 0.

cov_id_zero :
∫ y, y * s y ∂μ = 0

s is orthogonal to y: ∫ y·s dμ = 0.

cov_sq :
∫ y, y ^ 2 * s y ∂μ = x

s carries the prescribed y²-moment: ∫ y²·s dμ = x.

Causalean.Stat.MomentProblems.ScoreProgram.FeasibleScore · Causalean/Stat/MomentProblems/ScoreProgram.lean:58
def optScore reviewed
Causalean.Stat.MomentProblems.ScoreProgram

For a measure on the real line and a real target moment, the optimal score assigns to each real value the projection residual of its square multiplied by the target moment divided by the closed-form residual scalar calculated from the first four raw moments of the measure.

Definition (Lean source)
μ :
x :
ℝ
optScore μ x :
ℝ → ℝ
fun y => (x / l2ResidualQuadratic μ) * projResidual μ y
Causalean.Stat.MomentProblems.ScoreProgram.optScore · Causalean/Stat/MomentProblems/ScoreProgram.lean:75
def scoreCost reviewed
Causalean.Stat.MomentProblems.ScoreProgram

For a measure on the real line and a real target moment, the score-program value is the infimum, over all square-integrable real-valued functions whose mean and first moment-weighted mean are zero and whose second-moment-weighted mean equals the target, of their integrated square.

Definition (Lean source)
μ :
x :
ℝ
scoreCost μ x :
ℝ
sInf {c : ℝ | ∃ s, FeasibleScore μ x s ∧ c = ∫ y, s y ^ 2 ∂μ}
Causalean.Stat.MomentProblems.ScoreProgram.scoreCost · Causalean/Stat/MomentProblems/ScoreProgram.lean:85
theorem scoreCost_eq reviewed
Causalean.Stat.MomentProblems.ScoreProgram

The score-program duality (headline). For a probability measure μ on ℝ with a finite fourth moment and first moment squared strictly below the second moment (positive variance), if moreover the closed-form residual l2ResidualQuadratic μ is positive, then for every target y²-moment x, the value of the constrained minimum-norm score program equals x² / l2ResidualQuadratic μ:

Formal statement
h :
hnd :
rawMoment μ 1 ^ 2 < rawMoment μ 2
hr :
x :
ℝ
scoreCost μ x = x ^ 2 / l2ResidualQuadratic μ
Proof (Lean source)
theorem scoreCost_eq (μ : Measure ℝ) [IsProbabilityMeasure μ] (h : FiniteMoment4 μ) (hnd : rawMoment μ 1 ^ 2 < rawMoment μ 2) (hr : 0 < l2ResidualQuadratic μ) (x : ℝ) : scoreCost μ x = x ^ 2 / l2ResidualQuadratic μ := by have hmem : x ^ 2 / l2ResidualQuadratic μ ∈ {c : ℝ | ∃ s, FeasibleScore μ x s ∧ c = ∫ y, s y ^ 2 ∂μ} := ⟨optScore μ x, optScore_feasible μ h hnd hr x, (optScore_cost μ h hnd hr x).symm⟩ have hlb : x ^ 2 / l2ResidualQuadratic μ ∈ lowerBounds {c : ℝ | ∃ s, FeasibleScore μ x s ∧ c = ∫ y, s y ^ 2 ∂μ} := by rintro c ⟨s, hs, rfl⟩ exact feasibleScore_cost_lower_bound μ h hnd hr x hs exact IsLeast.csInf_eq ⟨hmem, hlb⟩
3 supporting declarations (lemmas, instances)
Symmetric­Atom­Solve 11 core · 15 supporting Fix L + 1 equally spaced atoms placed symmetrically about the origin. ★ continuous_cumulantToWeights★ cumulantToWeights_uniformCumulantPoint

Solving for atom weights that match a prescribed cumulant target

Fix L + 1 equally spaced atoms placed symmetrically about the origin. Matching the raw moments of orders 0, 1, …, L of a weight vector supported on those atoms to a prescribed moment target is a square linear system whose matrix is a transposed Vandermonde matrix in the atom locations. The atoms being distinct, that matrix is invertible, so the weights are recovered from the moment target by a linear — in particular continuous — solve.

Composing this solve with the triangular moment↔cumulant inversion gives the map this module exports: prescribed truncated cumulants ↦ atom weights, which is continuous, and which sends the cumulants of the uniform-weight law back to the uniform weights. That is exactly what is needed to conclude, by openness of the strict-positivity constraint, that a whole neighborhood of cumulant targets is matched by genuine (positive-weight) probability laws.

Nothing here yet asserts positivity of the solved weights: it is a pure linear-algebra and continuity layer. The realizability conclusion is drawn in TruncatedCumulantInterior.

def symmetricAtoms reviewed
Causalean.Stat.MomentProblems

For a nonnegative integer L, the symmetric atom locations are the L + 1 real numbers −L, −L + 2, …, L, indexed in increasing order; equivalently, the location with index i is twice i minus L.

Definition (Lean source)
L :
ℕ
symmetricAtoms L :
Fin (L + 1) → ℝ
fun i => 2 * (i.val : ℝ) - (L : ℝ)
Causalean.Stat.MomentProblems.symmetricAtoms · Causalean/Stat/MomentProblems/SymmetricAtomSolve.lean:38
def uniformWeights reviewed
Causalean.Stat.MomentProblems

For a nonnegative integer L, the uniform weight vector assigns mass 1/(L+1)1/(L+1) to each of the L + 1 symmetric atoms.

Definition (Lean source)
L :
ℕ
uniformWeights L :
Fin (L + 1) → ℝ
fun _ => 1 / (L + 1 : ℝ)
Causalean.Stat.MomentProblems.uniformWeights · Causalean/Stat/MomentProblems/SymmetricAtomSolve.lean:72
def uniformMoments reviewed
Causalean.Stat.MomentProblems

For a nonnegative integer L, the raw-moment sequence of the uniform law on the symmetric atoms assigns to every nonnegative order the equally weighted average of that power of the L + 1 symmetric atom locations.

Definition (Lean source)
L :
ℕ
uniformMoments L :
ℕ → ℝ
fun k => ∑ i, uniformWeights L i * symmetricAtoms L i ^ k
Causalean.Stat.MomentProblems.uniformMoments · Causalean/Stat/MomentProblems/SymmetricAtomSolve.lean:95
def uniformCumulants reviewed
Causalean.Stat.MomentProblems

For a nonnegative integer L, the cumulant sequence of the uniform law on the symmetric atoms is the cumulant sequence calculated from that law's raw moments.

Definition (Lean source)
L :
ℕ
uniformCumulants L :
ℕ → ℝ
fun r => cumFromMom r (uniformMoments L)
Causalean.Stat.MomentProblems.uniformCumulants · Causalean/Stat/MomentProblems/SymmetricAtomSolve.lean:109
def atomVandermonde reviewed
Causalean.Stat.MomentProblems

For a nonnegative integer L, the Vandermonde matrix of the symmetric atoms is the square real matrix whose row for each atom lists successive powers of that atom, from power zero through power L.

Definition (Lean source)
L :
ℕ
atomVandermonde L :
Matrix (Fin (L + 1)) (Fin (L + 1)) ℝ
Matrix.vandermonde (symmetricAtoms L)
Causalean.Stat.MomentProblems.atomVandermonde · Causalean/Stat/MomentProblems/SymmetricAtomSolve.lean:126
def atomSolve reviewed
Causalean.Stat.MomentProblems

For a nonnegative integer L and a prescribed vector of real raw moments of orders zero through L, the moment-matching weight vector is the result of applying the inverse transpose of the Vandermonde matrix of the symmetric atoms to that vector.

Definition (Lean source)
L :
ℕ
b :
Fin (L + 1) → ℝ
atomSolve L b :
Fin (L + 1) → ℝ
(atomVandermonde L).transpose⁻¹.mulVec b
Causalean.Stat.MomentProblems.atomSolve · Causalean/Stat/MomentProblems/SymmetricAtomSolve.lean:140
def padCumulants reviewed
Causalean.Stat.MomentProblems

For a nonnegative integer L and a finite coordinate vector whose entries at orders two through L are prescribed cumulants, the zero-padded coordinate sequence agrees with that vector through order L and equals zero at every higher order. Entries zero and one are normalization placeholders and are ignored by the centered moment reconstruction.

Definition (Lean source)
L :
ℕ
y :
Fin (L + 1) → ℝ
padCumulants L y :
ℕ → ℝ
fun k => if h : k < L + 1 then y ⟨k, h⟩ else 0
Causalean.Stat.MomentProblems.padCumulants · Causalean/Stat/MomentProblems/SymmetricAtomSolve.lean:197
def cumulantToWeights reviewed
Causalean.Stat.MomentProblems

For a nonnegative integer L and a coordinate vector prescribing cumulants at orders two through L, the cumulant-to-weights map reconstructs the centered raw moments and returns the symmetric-atom weights solving their Vandermonde moment-matching system. The entries at orders zero and one are ignored because the reconstructed mass and mean are fixed to one and zero.

Definition (Lean source)
L :
ℕ
y :
Fin (L + 1) → ℝ
cumulantToWeights L y :
Fin (L + 1) → ℝ
atomSolve L (fun k => momFromCum (padCumulants L y) k.val)
Causalean.Stat.MomentProblems.cumulantToWeights · Causalean/Stat/MomentProblems/SymmetricAtomSolve.lean:214
theorem continuous_cumulantToWeights reviewed
Causalean.Stat.MomentProblems

The cumulant-to-weights map is continuous. For any truncation order L, the map sending a truncated cumulant target to the recovered symmetric-atom weights is continuous, since both the moment↔cumulant inversion and the Vandermonde solve it composes are continuous.

Formal statement
L :
ℕ
Proof (Lean source)
@[fun_prop] theorem continuous_cumulantToWeights (L : ℕ) : Continuous (cumulantToWeights L) := by apply (continuous_atomSolve L).comp apply continuous_pi intro k exact (continuous_momFromCum k.val).comp (continuous_padCumulants L)
Causalean.Stat.MomentProblems.continuous_cumulantToWeights · Causalean/Stat/MomentProblems/SymmetricAtomSolve.lean:223 · uses cumulantToWeights
def uniformCumulantPoint reviewed
Causalean.Stat.MomentProblems

For a nonnegative integer L, the base cumulant target is the vector of cumulants of orders zero through L of the uniform probability law on the symmetric atoms.

Definition (Lean source)
L :
ℕ
uniformCumulantPoint L :
Fin (L + 1) → ℝ
fun k => uniformCumulants L k.val
Causalean.Stat.MomentProblems.uniformCumulantPoint · Causalean/Stat/MomentProblems/SymmetricAtomSolve.lean:233
theorem cumulantToWeights_uniformCumulantPoint reviewed
Causalean.Stat.MomentProblems

The base point maps to the uniform weights. For any truncation order L, feeding the cumulants of the uniform-weight law on the symmetric atoms into the cumulant-to-weights map returns exactly the uniform weights — all strictly positive, hence strictly inside the positivity constraints.

Formal statement
L :
ℕ
cumulantToWeights L (uniformCumulantPoint L) = uniformWeights L
Proof (Lean source)
theorem cumulantToWeights_uniformCumulantPoint (L : ℕ) : cumulantToWeights L (uniformCumulantPoint L) = uniformWeights L := by calc cumulantToWeights L (uniformCumulantPoint L) = atomSolve L (fun k => momFromCum (padCumulants L (uniformCumulantPoint L)) k.val) := rfl _ = atomSolve L (fun k => uniformMoments L k.val) := by congr 1 funext k exact momFromCum_padCumulants_uniform L k _ = uniformWeights L := atomSolve_uniformMoments L
Causalean.Stat.MomentProblems.cumulantToWeights_uniformCumulantPoint · Causalean/Stat/MomentProblems/SymmetricAtomSolve.lean:247 · uses cumulantToWeights , uniformCumulantPoint , uniformWeights
15 supporting declarations (lemmas, instances)
Truncated­Cumulant­Interior 2 core · 0 supporting The main result of this module says that the truncated cumulant sequences of orders two through L attainable by *centered, non-Gaussian* probability laws on the real line with finite L-th moment fill up a set with nonemp ★ truncatedCumulantInterior

The truncated cumulant range has nonempty interior

The main result of this module says that the truncated cumulant sequences of orders two through L attainable by centered, non-Gaussian probability laws on the real line with finite L-th moment fill up a set with nonempty interior: there is one attainable cumulant vector all of whose sufficiently small perturbations are again attainable by such a law.

The proof is constructive rather than an appeal to the general (truncated Hamburger) moment problem. Put L + 1 distinct equally spaced symmetric atoms on the line. Matching the first L + 1 raw moments of a weight vector to a target is then a linear system with a transposed Vandermonde matrix, hence invertible, and the moment target itself is obtained from the cumulant target by the triangular moment↔cumulant inversion — so weights depend continuously on the prescribed cumulants (SymmetricAtomSolve). At the uniform weight vector all weights are strictly positive, and positivity is an open condition, so every nearby cumulant target still solves to strictly positive weights, i.e. to a genuine probability law. That law is centered (the atoms are symmetric and the first-moment equation is part of the solved system), has all moments finite (finite support), and is non-Gaussian (at least two atoms carry positive mass).

The order L = 0 case is degenerate — a single atom would be a point mass, i.e. a degenerate Gaussian — and is handled separately by an explicit fair two-point law on ±1.

Background references: Akhiezer (1965), The Classical Moment Problem; Curto–Fialkow (1991), Recursiveness, Positivity, and Truncated Moment Problems; and Schmüdgen (2017), The Moment Problem, Chapter 10. The result below is the separate constructive centered-cumulant specialization described above; it does not use a flat-extension theorem.

def TruncatedCumulantInterior reviewed
Causalean.Stat.MomentProblems

For a nonnegative truncation order, the interior-of-the-truncated-cumulant-range condition says that there exist a real cumulant sequence and a strictly positive real radius such that every real sequence whose entries of every order from two through the truncation order differ from the corresponding target entries by less than that radius is the cumulant sequence, at each of those orders, of some centered non-Gaussian probability law on the real line with finite moment of the truncation order.

Definition (Lean source)
L :
ℕ
TruncatedCumulantInterior L :
Prop
∃ (c : ℕ → ℝ) (ε : ℝ),
0 < ε
clause 1
c' :
ℕ → ℝ
(∀ r, 2 ≤ r → r ≤ L → |c' r - c r| < ε)
∃ ν : Measure ℝ,
∫ x, x ∂ν = 0
MemLp (id : ℝ → ℝ) (L : ℝ≥0∞) ν
r :
2 ≤ r
r ≤ L
sourceCumulant ν id r = c' r
Causalean.Stat.MomentProblems.TruncatedCumulantInterior · Causalean/Stat/MomentProblems/TruncatedCumulantInterior.lean:46
theorem truncatedCumulantInterior reviewed
Causalean.Stat.MomentProblems

The truncated cumulant range has nonempty interior. For every truncation order L, there is a cumulant vector, of orders two through L, together with a strictly positive radius, such that every cumulant vector within that radius is the truncated cumulant vector of some centered, non-Gaussian probability law on the real line with finite L-th moment.

Formal statement
L :
ℕ
Proof (Lean source)
theorem truncatedCumulantInterior (L : ℕ) : TruncatedCumulantInterior L := by by_cases hL : L = 0 · simpa [hL] using truncatedCumulantInterior_zero have hLpos : 1 ≤ L := by omega let radius : ℝ := 1 / (L + 1 : ℝ) have hradius : 0 < radius := by dsimp [radius]; positivity obtain ⟨ε, hε, hcont⟩ := Metric.continuousAt_iff.mp (continuous_cumulantToWeights L).continuousAt radius hradius refine ⟨uniformCumulants L, ε, hε, ?_⟩ intro c' hc' let y : Fin (L + 1) → ℝ := fun k => if 2 ≤ k.val then c' k.val else uniformCumulants L k.val have hy : dist y (uniformCumulantPoint L) < ε := by rw [dist_pi_lt_iff hε] intro k by_cases hk : 2 ≤ k.val · simpa [y, uniformCumulantPoint, hk, Real.dist_eq] using hc' k.val hk (by omega) · simpa [y, uniformCumulantPoint, hk] using hε have hphiDist : dist (cumulantToWeights L y) (cumulantToWeights L (uniformCumulantPoint L)) < radius := hcont hy have hp : ∀ i, 0 < cumulantToWeights L y i := by intro i have hi := (dist_pi_lt_iff hradius).mp hphiDist i rw [cumulantToWeights_uniformCumulantPoint L] at hi simp only [Real.dist_eq, uniformWeights, radius] at hi linarith [abs_lt.mp hi] have hpad : ∀ k, 2 ≤ k → k ≤ L → padCumulants L y k = c' k := by intro k hk hkL simp [padCumulants, y, hk, show k < L + 1 by omega] have hmom : ∀ k, k ≤ L → momFromCum (padCumulants L y) k = momFromCum c' k := by intro k hk apply momFromCum_congr intro j hj hjk exact hpad j hj (hjk.trans hk) have hsolve : ∀ k, k ≤ L → ∑ i, cumulantToWeights L y i * symmetricAtoms L i ^ k = momFromCum c' k := by intro k hk let kf : Fin (L + 1) := ⟨k, by omega⟩ simpa [cumulantToWeights, kf, hmom k hk] using atomSolve_spec L (fun j => momFromCum (padCumulants L y) j.val) kf have hsum : ∑ i, cumulantToWeights L y i = 1 := by simpa using hsolve 0 (by omega) have hmean : ∑ i, cumulantToWeights L y i * symmetricAtoms L i = 0 := by simpa using hsolve 1 hLpos let ν := atomicLaw (L + 1) (symmetricAtoms L) (cumulantToWeights L y) have hpnonneg : ∀ i, 0 ≤ cumulantToWeights L y i := fun i => (hp i).le refine ⟨ν, isProbabilityMeasure_atomicLaw (symmetricAtoms_injective L) hpnonneg hsum, ?_, not_isGaussianLaw_atomicLaw (symmetricAtoms_injective L) hp (by omega), memLp_id_atomicLaw (symmetricAtoms_injective L) hpnonneg hsum (L : ℝ≥0∞), ?_⟩ · simpa [ν] using (integral_atomicLaw (symmetricAtoms_injective L) hpnonneg id).trans hmean · intro r hr hrL rw [sourceCumulant_eq_cumFromMom] calc cumFromMom r (fun k => ∫ t, t ^ k ∂ν) = cumFromMom r (momFromCum c') := by apply cumFromMom_congr intro k hk hkR rw [integral_atomicLaw (symmetricAtoms_injective L) hpnonneg] exact hsolve k (hkR.trans hrL) _ = c' r := cumFromMom_momFromCum c' r hr
Causalean.Stat.MomentProblems.truncatedCumulantInterior · Causalean/Stat/MomentProblems/TruncatedCumulantInterior.lean:90 · uses TruncatedCumulantInterior