Stat.Finite­Rao­Blackwell.Poisson.Finite­Partition

This roll-up module exports the ordered finite-label splitting law for one iid pool, its capped fixed-sample conditional mean, its explicit finite expansion, and the bounded squared-risk transfer to independent Poisson l

Nested­Event­Moment 8 core · 7 supporting · 4 submodules The fixed-count identity is mixed over the Poisson sample size to give a total, division-free joint factorial moment. Nested­Event­Ratio­Mean 9 core · 15 supporting · 5 submodules For arbitrary probability laws and measurable nested events, the total mean identity multiplies the success-fraction expectation by containing-event mass.
Basic 9 core · 0 supporting Defines the ordered label streams, the Poisson and label auxiliary experiment, and its capped conditional expectation on one fixed iid pool. ★ labelLaw_isProbabilityMeasure

A single iid pool with independently assigned finite labels

Defines the ordered label streams, the Poisson and label auxiliary experiment, and its capped conditional expectation on one fixed iid pool.

def labelLaw reviewed
Causalean.Stat.FiniteRaoBlackwell.Poisson.FinitePartition

For label masses summing to one, the label law assigns each label its specified mass. It is given by the finite mass function's probability measure.

Definition (Lean source)
I :
Type u_2
shared
p :
I → ℝ≥0
hp :
∑ i, p i = 1
labelLaw p hp :
by classical let q : PMF I := PMF.ofFintype (fun i => (p i : ℝ≥0∞)) (by exact_mod_cast hp) exact q.toMeasure
Causalean.Stat.FiniteRaoBlackwell.Poisson.FinitePartition.labelLaw · Causalean/Stat/FiniteRaoBlackwell/Poisson/FinitePartition/Basic.lean:26
theorem labelLaw_isProbabilityMeasure reviewed
Causalean.Stat.FiniteRaoBlackwell.Poisson.FinitePartition

The finite label law is a probability measure when its label masses sum to one.

Formal statement
I :
Type u_2
shared
p :
I → ℝ≥0
hp :
∑ i, p i = 1
Proof (Lean source)
theorem labelLaw_isProbabilityMeasure (p : I → ℝ≥0) (hp : ∑ i, p i = 1) : IsProbabilityMeasure (labelLaw p hp) := by classical unfold labelLaw infer_instance
Causalean.Stat.FiniteRaoBlackwell.Poisson.FinitePartition.labelLaw_isProbabilityMeasure · Causalean/Stat/FiniteRaoBlackwell/Poisson/FinitePartition/Basic.lean:35 · uses labelLaw
def unshuffle reviewed
Causalean.Stat.FiniteRaoBlackwell.Poisson.FinitePartition

Given a finite sequence of labeled observations, ordered label streams retain observations of each label in their original relative order. They are given by the label-wise regrouping.

Definition (Lean source)
X :
Type u_1
shared
I :
Type u_2
shared
s :
FiniteSample (X × I)
unshuffle s :
I → FiniteSample X
fun i
=> ⟨wordHistogram (fun k => (s.2 k).2) i, gatherWord (fun k => (s.2 k).2) (fun k => (s.2 k).1) i⟩
Causalean.Stat.FiniteRaoBlackwell.Poisson.FinitePartition.unshuffle · Causalean/Stat/FiniteRaoBlackwell/Poisson/FinitePartition/Basic.lean:43 · uses FiniteSample
def labeledPrefix reviewed
Causalean.Stat.FiniteRaoBlackwell.Poisson.FinitePartition

Given a fixed iid pool, an admissible count, and labels for that prefix, its ordered label streams preserve within-label arrival order. They are given by unshuffling the labeled prefix.

Definition (Lean source)
X :
Type u_1
shared
I :
Type u_2
shared
n :
ℕ
x :
Fin n → X
m :
ℕ
h :
m ≤ n
w :
Fin m → I
labeledPrefix x m h w :
I → FiniteSample X
unshuffle ⟨m, fun k => (x ⟨k.val, lt_of_lt_of_le k.isLt h⟩, w k)⟩
Causalean.Stat.FiniteRaoBlackwell.Poisson.FinitePartition.labeledPrefix · Causalean/Stat/FiniteRaoBlackwell/Poisson/FinitePartition/Basic.lean:50 · uses FiniteSample
def cappedStatistic reviewed
Causalean.Stat.FiniteRaoBlackwell.Poisson.FinitePartition

Given a fixed pool, a Poisson count and label vector, a stream statistic, and an overflow value, the capped statistic evaluates the labeled prefix when it fits and uses the overflow value otherwise. It is given by the capacity test.

Definition (Lean source)
X :
Type u_1
shared
I :
Type u_2
shared
n :
ℕ
x :
Fin n → X
T :
(I → FiniteSample X) → ℝ
zOver :
ℝ
z :
ℕ × (Fin n → I)
cappedStatistic x T zOver z :
ℝ
if h : z.1
≤ n then T (labeledPrefix x z.1 h (fun k => z.2 ⟨k.val, lt_of_lt_of_le k.isLt h⟩)) else zOver
Causalean.Stat.FiniteRaoBlackwell.Poisson.FinitePartition.cappedStatistic · Causalean/Stat/FiniteRaoBlackwell/Poisson/FinitePartition/Basic.lean:57 · uses FiniteSample
def auxiliaryLaw reviewed
Causalean.Stat.FiniteRaoBlackwell.Poisson.FinitePartition

Given label masses summing to one, a Poisson mean, and pool size, the auxiliary law draws an independent Poisson count and independent labels for all positions of the fixed pool. It is given by their product measure.

Definition (Lean source)
I :
Type u_2
shared
p :
I → ℝ≥0
hp :
∑ i, p i = 1
lambda :
ℝ≥0
n :
ℕ
auxiliaryLaw p hp lambda n :
Measure (ℕ × (Fin n → I))
by letI := labelLaw_isProbabilityMeasure p hp exact (poissonMeasure lambda).prod (Measure.pi (fun _ : Fin n => labelLaw p hp))
Causalean.Stat.FiniteRaoBlackwell.Poisson.FinitePartition.auxiliaryLaw · Causalean/Stat/FiniteRaoBlackwell/Poisson/FinitePartition/Basic.lean:67
def fixedStatistic reviewed
Causalean.Stat.FiniteRaoBlackwell.Poisson.FinitePartition

Given label masses summing to one, a Poisson mean, a fixed iid pool, a stream statistic, and an overflow value, the fixed-sample statistic averages the capped statistic over the independent count and labels. It is given by that auxiliary expectation.

Definition (Lean source)
X :
Type u_1
shared
I :
Type u_2
shared
p :
I → ℝ≥0
hp :
∑ i, p i = 1
lambda :
ℝ≥0
n :
ℕ
x :
Fin n → X
T :
(I → FiniteSample X) → ℝ
zOver :
ℝ
fixedStatistic p hp lambda x T zOver :
ℝ
∫ z, cappedStatistic x T zOver z ∂auxiliaryLaw p hp lambda n
Causalean.Stat.FiniteRaoBlackwell.Poisson.FinitePartition.fixedStatistic · Causalean/Stat/FiniteRaoBlackwell/Poisson/FinitePartition/Basic.lean:76 · uses FiniteSample
def labeledStreamLaw reviewed
Causalean.Stat.FiniteRaoBlackwell.Poisson.FinitePartition

Given an observation law, label masses summing to one, and a Poisson mean, the uncapped ordered-stream law labels a finite Poisson sample and unshuffles it by label. It is given by the mapped marked-Poisson law.

Definition (Lean source)
X :
Type u_1
shared
I :
Type u_2
shared
p :
I → ℝ≥0
hp :
∑ i, p i = 1
lambda :
ℝ≥0
labeledStreamLaw P p hp lambda :
by letI := labelLaw_isProbabilityMeasure p hp exact Measure.map unshuffle (finitePoissonSampleLaw (P.prod (labelLaw p hp)) lambda)
Causalean.Stat.FiniteRaoBlackwell.Poisson.FinitePartition.labeledStreamLaw · Causalean/Stat/FiniteRaoBlackwell/Poisson/FinitePartition/Basic.lean:85 · uses FiniteSample
def fixedPoolLaw reviewed
Causalean.Stat.FiniteRaoBlackwell.Poisson.FinitePartition

Given an observation law and a pool size, the fixed iid pool law has independent observations at each of its positions. It is given by the finite iid product measure.

Definition (Lean source)
X :
Type u_1
shared
n :
ℕ
fixedPoolLaw P n :
Measure (Fin n → X)
Measure.pi (fun _ : Fin n => P)
Causalean.Stat.FiniteRaoBlackwell.Poisson.FinitePartition.fixedPoolLaw · Causalean/Stat/FiniteRaoBlackwell/Poisson/FinitePartition/Basic.lean:94
Count­Vector 1 core · 1 supporting The histogram probability of an iid finite label word combines with its Poisson total count to give independent Poisson cell counts. ★ poisson_label_word_coefficient_eq

Count-vector coefficients and independent Poisson fibres

The histogram probability of an iid finite label word combines with its Poisson total count to give independent Poisson cell counts. The independent stream law has the corresponding fixed-count product fibres.

theorem poisson_label_word_coefficient_eq reviewed
Causalean.Stat.FiniteRaoBlackwell.Poisson.FinitePartition

Given label masses summing to one, a Poisson mean, and a prescribed vector of label counts, the Poisson mass of the total count times the total probability of label words with that histogram equals the product of the label-specific Poisson masses.

Formal statement
I :
Type u_2
shared
p :
I → ℝ≥0
hp :
∑ i, p i = 1
lambda :
ℝ≥0
c :
I → ℕ
(poissonMeasure lambda) ({∑ i, c i} : Set ℕ) * (∑ w : Fin (∑ i, c i) → I, if ∀ i, wordHistogram w i = c i then ∏ k, (p (w k) : ℝ≥0∞) else 0)
= ∏ i, (poissonMeasure (lambda * p i)) ({c i} : Set ℕ)
Proof (Lean source)
theorem poisson_label_word_coefficient_eq (p : I → ℝ≥0) (hp : ∑ i, p i = 1) (lambda : ℝ≥0) (c : I → ℕ) : (poissonMeasure lambda) ({∑ i, c i} : Set ℕ) * (∑ w : Fin (∑ i, c i) → I, if ∀ i, wordHistogram w i = c i then ∏ k, (p (w k) : ℝ≥0∞) else 0) = ∏ i, (poissonMeasure (lambda * p i)) ({c i} : Set ℕ) := by classical let n := ∑ i, c i let H := histogramWords n c have hweight (w : Fin n → I) (hw : w ∈ H) : ∏ k, (p (w k) : ℝ≥0∞) = ∏ i, (p i : ℝ≥0∞) ^ c i := by rw [← Finset.prod_fiberwise (Finset.univ : Finset (Fin n)) w (fun k => (p (w k) : ℝ≥0∞))] apply Finset.prod_congr rfl intro i _ have hi := (Finset.mem_filter.1 hw).2 i have hfactor : (∏ k ∈ (Finset.univ.filter fun k : Fin n => w k = i), (p (w k) : ℝ≥0∞)) = (p i : ℝ≥0∞) ^ wordHistogram w i := by rw [wordHistogram] calc (∏ k ∈ (Finset.univ.filter fun k : Fin n => w k = i), (p (w k) : ℝ≥0∞)) = ∏ _k ∈ (Finset.univ.filter fun k : Fin n => w k = i), (p i : ℝ≥0∞) := by apply Finset.prod_congr rfl intro k hk rw [(Finset.mem_filter.1 hk).2] _ = (p i : ℝ≥0∞) ^ (Finset.univ.filter fun k : Fin n => w k = i).card := by rw [Finset.prod_const] rw [hfactor, hi] have hsum : (∑ w : Fin n → I, if ∀ i, wordHistogram w i = c i then ∏ k, (p (w k) : ℝ≥0∞) else 0) = (H.card : ℝ≥0∞) * ∏ i, (p i : ℝ≥0∞) ^ c i := by simp only [← Finset.sum_filter] change (∑ w ∈ H, ∏ k, (p (w k) : ℝ≥0∞)) = (H.card : ℝ≥0∞) * ∏ i, (p i : ℝ≥0∞) ^ c i rw [Finset.sum_congr rfl (fun w hw => hweight w hw)] simp rw [hsum] rw [← mul_assoc] have hcard : H.card = Nat.multinomial Finset.univ c := histogramWords_card n c rfl simp_rw [poissonMeasure_singleton] rw [hcard] change (ofReal (poissonPMFReal lambda (∑ i, c i)) * (Nat.multinomial Finset.univ c : ℝ≥0∞)) * ∏ i : I, (p i : ℝ≥0∞) ^ c i = ∏ i : I, ofReal (poissonPMFReal (lambda * p i) (c i)) have hreal : poissonPMFReal lambda (∑ i, c i) * (Nat.multinomial Finset.univ c : ℝ) * ∏ i : I, (p i : ℝ) ^ c i = ∏ i : I, poissonPMFReal (lambda * p i) (c i) := by unfold poissonPMFReal push_cast simp_rw [mul_pow] rw [Finset.prod_div_distrib, Finset.prod_mul_distrib, Finset.prod_mul_distrib, Finset.prod_pow_eq_pow_sum Finset.univ c (lambda : ℝ), ← Real.exp_sum] have hpR : ∑ i : I, (p i : ℝ) = 1 := by exact_mod_cast hp have hexp : ∑ i : I, -((lambda : ℝ) * (p i : ℝ)) = -(lambda : ℝ) := by rw [show (fun i : I => -((lambda : ℝ) * (p i : ℝ))) = fun i => -(lambda : ℝ) * (p i : ℝ) by funext i ring] rw [← Finset.mul_sum, hpR, mul_one] rw [hexp] have hmulti := Nat.multinomial_spec Finset.univ c have hmultiR := congrArg (fun m : ℕ => (m : ℝ)) hmulti push_cast at hmultiR field_simp rw [← hmultiR] ring have hof := congrArg ofReal hreal rw [ENNReal.ofReal_prod_of_nonneg (fun i _ => poissonPMFReal_nonneg)] at hof have hp0 : 0 ≤ poissonPMFReal lambda (∑ i, c i) := poissonPMFReal_nonneg have hppow : ∀ i : I, 0 ≤ (p i : ℝ) ^ c i := fun i => by positivity rw [ENNReal.ofReal_mul (mul_nonneg hp0 (Nat.cast_nonneg _)), ENNReal.ofReal_mul hp0, ENNReal.ofReal_natCast, ENNReal.ofReal_prod_of_nonneg (fun i _ => hppow i)] at hof simp_rw [ENNReal.ofReal_pow (NNReal.coe_nonneg _)] at hof simp only [ENNReal.ofReal_coe_nnreal] at hof exact hof
Causalean.Stat.FiniteRaoBlackwell.Poisson.FinitePartition.poisson_label_word_coefficient_eq · Causalean/Stat/FiniteRaoBlackwell/Poisson/FinitePartition/CountVector.lean:25 · uses wordHistogram
1 supporting declaration (lemmas, instances)
Expansion 1 core · 0 supporting This module gives the explicit finite count-and-label-map expression for the capped conditional mean, so downstream estimators can identify an existing Rao--Blackwellized formula without changing its definition. ★ fixedStatistic_eq_finite_sum

Finite count-and-label expansion

This module gives the explicit finite count-and-label-map expression for the capped conditional mean, so downstream estimators can identify an existing Rao--Blackwellized formula without changing its definition.

theorem fixedStatistic_eq_finite_sum reviewed
Causalean.Stat.FiniteRaoBlackwell.Poisson.FinitePartition

Given label masses summing to one, a Poisson mean, a fixed pool, a stream statistic, and an overflow value, the conditional mean equals the explicit finite sum over admissible counts and label maps, plus the Poisson overflow mass times the overflow value.

Formal statement
X :
Type u_1
shared
I :
Type u_2
shared
p :
I → ℝ≥0
hp :
∑ i, p i = 1
lambda :
ℝ≥0
n :
ℕ
x :
Fin n → X
T :
(I → FiniteSample X) → ℝ
zOver :
ℝ
fixedStatistic p hp lambda x T zOver
= (∑ M : Fin (n + 1), (poissonMeasure lambda).real {M.val} * ∑ w : Fin M.val → I, (∏ k : Fin M.val, (p (w k) : ℝ)) * T (labeledPrefix x M.val (le_of_lt_succ M.isLt) w))
+ (poissonMeasure lambda).real (Ioi n) * zOver
Proof (Lean source)
theorem fixedStatistic_eq_finite_sum (p : I → ℝ≥0) (hp : ∑ i, p i = 1) (lambda : ℝ≥0) {n : ℕ} (x : Fin n → X) (T : (I → FiniteSample X) → ℝ) (zOver : ℝ) : fixedStatistic p hp lambda x T zOver = (∑ M : Fin (n + 1), (poissonMeasure lambda).real {M.val} * ∑ w : Fin M.val → I, (∏ k : Fin M.val, (p (w k) : ℝ)) * T (labeledPrefix x M.val (le_of_lt_succ M.isLt) w)) + (poissonMeasure lambda).real (Ioi n) * zOver := by classical let μ : Measure ℕ := poissonMeasure lambda let ρ : Measure (Fin n → I) := Measure.pi (fun _ : Fin n => labelLaw p hp) let f : ℕ × (Fin n → I) → ℝ := cappedStatistic x T zOver haveI : IsProbabilityMeasure ρ := by dsimp [ρ] haveI := labelLaw_isProbabilityMeasure p hp infer_instance haveI : IsProbabilityMeasure μ := by dsimp [μ] infer_instance have hfinite : (range f).Finite := by let g : Fin (n + 1) × (Fin n → I) → ℝ := fun z => f (z.1.val, z.2) have hsub : range f ⊆ Set.insert zOver (range g) := by rintro a ⟨z, rfl⟩ by_cases hz : z.1 ≤ n · right exact ⟨(⟨z.1, Nat.lt_succ_of_le hz⟩, z.2), rfl⟩ · left simp [f, cappedStatistic, hz] exact (Set.finite_range g).insert zOver |>.subset hsub obtain ⟨C, hC⟩ := hfinite.isBounded.exists_norm_le have hf : Integrable f (μ.prod ρ) := by apply Integrable.of_bound (C := C) · exact (measurable_of_countable f).aestronglyMeasurable · filter_upwards [] with z exact hC (f z) ⟨z, rfl⟩ have hprod : fixedStatistic p hp lambda x T zOver = ∫ m : ℕ, (∫ w : Fin n → I, f (m, w) ∂ρ) ∂μ := by change (∫ z, f z ∂μ.prod ρ) = _ exact integral_prod f hf have hslice (m : ℕ) (hm : m ≤ n) : (∫ w : Fin n → I, f (m, w) ∂ρ) = ∑ w : Fin m → I, (∏ k, (p (w k) : ℝ)) * T (labeledPrefix x m hm w) := by let q : (Fin n → I) → (Fin m → I) := fun w k => w ⟨k.val, lt_of_lt_of_le k.isLt hm⟩ have hq : Measurable q := by fun_prop have hmeas : Measurable (fun w : Fin m → I => T (labeledPrefix x m hm w)) := measurable_of_countable _ calc (∫ w : Fin n → I, f (m, w) ∂ρ) = ∫ w : Fin n → I, T (labeledPrefix x m hm (q w)) ∂ρ := by congr 1 funext w simp [f, cappedStatistic, hm, q] _ = ∫ w : Fin m → I, T (labeledPrefix x m hm w) ∂Measure.map q ρ := (integral_map hq.aemeasurable hmeas.aestronglyMeasurable).symm _ = ∫ w : Fin m → I, T (labeledPrefix x m hm w) ∂Measure.pi (fun _ : Fin m => labelLaw p hp) := by rw [show Measure.map q ρ = Measure.pi (fun _ : Fin m => labelLaw p hp) from map_labelPrefix_pi p hp hm] _ = _ := integral_label_pi_eq_sum p hp m _ have htail (m : ℕ) (hm : n < m) : (∫ w : Fin n → I, f (m, w) ∂ρ) = zOver := by have hn : ¬ m ≤ n := Nat.not_le.mpr hm simp [f, cappedStatistic, hn, ρ] let g : ℕ → ℝ := fun m => ∫ w : Fin n → I, f (m, w) ∂ρ have hg : Integrable g μ := hf.integral_prod_left have hcap : (↑(range (n + 1)) : Set ℕ) = Iic n := by ext m simp have hfirst : (∫ m in Iic n, g m ∂μ) = ∑ M : Fin (n + 1), μ.real {M.val} * ∑ w : Fin M.val → I, (∏ k, (p (w k) : ℝ)) * T (labeledPrefix x M.val (le_of_lt_succ M.isLt) w) := by rw [← hcap, setIntegral_finset (range (n + 1)) hg.integrableOn] simp_rw [smul_eq_mul] rw [← Fin.sum_univ_eq_sum_range] apply Finset.sum_congr rfl intro M _ change μ.real {M.val} * (∫ w : Fin n → I, f (M.val, w) ∂ρ) = _ rw [hslice M.val (le_of_lt_succ M.isLt)] have hlast : (∫ m in Ioi n, g m ∂μ) = μ.real (Ioi n) * zOver := by rw [setIntegral_congr_fun measurableSet_Ioi (fun m hm => htail m hm)] simp [Measure.real_def] rw [hprod] calc (∫ m, g m ∂μ) = (∫ m in Iic n, g m ∂μ) + (∫ m in Ioi n, g m ∂μ) := by simpa only [Set.compl_Iic] using (integral_add_compl measurableSet_Iic hg).symm _ = _ := by rw [hfirst, hlast]
Causalean.Stat.FiniteRaoBlackwell.Poisson.FinitePartition.fixedStatistic_eq_finite_sum · Causalean/Stat/FiniteRaoBlackwell/Poisson/FinitePartition/Expansion.lean:99 · uses FiniteSample , fixedStatistic , labeledPrefix
Law 1 core · 5 supporting The unshuffled marked Poisson sample has independent label streams. ★ map_unshuffle_restrict_histogram_eq

Fixed-word laws for labeled Poisson samples

The unshuffled marked Poisson sample has independent label streams. Capping a fixed iid pool preserves the corresponding nonoverflow law, and averaging the cap has an explicit finite count-and-label expansion.

theorem map_unshuffle_restrict_histogram_eq reviewed
Causalean.Stat.FiniteRaoBlackwell.Poisson.FinitePartition

Given an observation probability law, finite label masses, and a prescribed label-count vector, restricting an iid marked tuple of the matching total length to that histogram and unshuffling it gives the sum of the matching label-word weights times independent fixed-length iid observation streams.

Formal statement
X :
Type u_1
shared
I :
Type u_2
shared
p :
I → ℝ≥0
hp :
∑ i, p i = 1
c :
I → ℕ
Measure.map (fun z : Fin (∑ i, c i) → X × I => unshuffle (⟨∑ i, c i, z⟩ : FiniteSample (X × I))) ((Measure.pi (fun _ : Fin (∑ i, c i) => P.prod (labelLaw p hp))).restrict {z | ∀ i, wordHistogram (fun k => (z k).2) i = c i})
= (∑ w : Fin (∑ i, c i) → I, if ∀ i, wordHistogram w i = c i then ∏ k, (p (w k) : ℝ≥0∞) else 0) • Measure.pi (fun i : I => Measure.map (fixedSizeEmbed (c i)) (Measure.pi (fun _ : Fin (c i) => P)))
Proof (Lean source)
theorem map_unshuffle_restrict_histogram_eq (P : Measure X) [IsProbabilityMeasure P] (p : I → ℝ≥0) (hp : ∑ i, p i = 1) (c : I → ℕ) : Measure.map (fun z : Fin (∑ i, c i) → X × I => unshuffle (⟨∑ i, c i, z⟩ : FiniteSample (X × I))) ((Measure.pi (fun _ : Fin (∑ i, c i) => P.prod (labelLaw p hp))).restrict {z | ∀ i, wordHistogram (fun k => (z k).2) i = c i}) = (∑ w : Fin (∑ i, c i) → I, if ∀ i, wordHistogram w i = c i then ∏ k, (p (w k) : ℝ≥0∞) else 0) • Measure.pi (fun i : I => Measure.map (fixedSizeEmbed (c i)) (Measure.pi (fun _ : Fin (c i) => P))) := by -- The histogram event is the disjoint union of its finite label-word -- fibres. Map each restricted fibre with -- `map_unshuffle_restrict_labelWord`; all matching words have identical -- target product laws, so factor that measure out of the finite sum. classical let m := ∑ i, c i let μ : Measure (Fin m → X × I) := Measure.pi (fun _ : Fin m => P.prod (labelLaw p hp)) let f : (Fin m → X × I) → (I → FiniteSample X) := fun z => unshuffle (⟨m, z⟩ : FiniteSample (X × I)) let good : (Fin m → I) → Prop := fun w => ∀ i, wordHistogram w i = c i let fibre : (Fin m → I) → Set (Fin m → X × I) := fun w => {z | (fun k => (z k).2) = w} let cell : (Fin m → I) → Set (Fin m → X × I) := fun w => if good w then fibre w else ∅ have hmeas (w : Fin m → I) : MeasurableSet (cell w) := by dsimp [cell] split · exact (measurable_pi_lambda _ fun k => measurable_snd.comp (measurable_pi_apply k)) (measurableSet_singleton w) · exact MeasurableSet.empty have hdisj : ((Finset.univ : Finset (Fin m → I)) : Set (Fin m → I)).Pairwise (fun w v => Disjoint (cell w) (cell v)) := by intro w _ v _ hne apply Set.disjoint_left.mpr intro z hzw hzv dsimp [cell] at hzw hzv split_ifs at hzw hzv <;> try simp_all exact hne (hzw.symm.trans hzv) have hunion : (⋃ w ∈ (Finset.univ : Finset (Fin m → I)), cell w) = {z | good (fun k => (z k).2)} := by ext z simp only [Set.mem_iUnion, Finset.mem_univ, Set.mem_ofPred_eq] constructor · rintro ⟨w, _, hw⟩ dsimp [cell] at hw split_ifs at hw with h · exact (show (fun k => (z k).2) = w from hw) ▸ h · simpa using hw · intro hz refine ⟨fun k => (z k).2, by simp, ?_⟩ simp [cell, hz, fibre] have hpartition : μ.restrict {z | good (fun k => (z k).2)} = ∑ w : Fin m → I, μ.restrict (cell w) := by rw [← hunion, Measure.restrict_biUnion_finset hdisj hmeas, Measure.sum_fintype] simpa [Finset.sum_coe_sort] have hfixed (w : Fin m → I) : Measure.map f (μ.restrict (cell w)) = (if good w then ∏ k, (p (w k) : ℝ≥0∞) else 0) • Measure.pi (fun i : I => Measure.map (fixedSizeEmbed (c i)) (Measure.pi (fun _ : Fin (c i) => P))) := by by_cases hw : good w · simp only [cell, if_pos hw] rw [map_unshuffle_restrict_labelWord P p hp w] congr 1 change ∀ i, wordHistogram w i = c i at hw exact congrArg Measure.pi (funext fun i => by rw [hw i]) · simp [cell, hw] change Measure.map f (μ.restrict {z | good (fun k => (z k).2)}) = _ rw [hpartition, Measure.map_finset_sum] · simp_rw [hfixed] rw [Finset.sum_smul] · exact measurable_unshuffle.comp (measurable_fixedSizeEmbed m) |>.aemeasurable
Causalean.Stat.FiniteRaoBlackwell.Poisson.FinitePartition.map_unshuffle_restrict_histogram_eq · Causalean/Stat/FiniteRaoBlackwell/Poisson/FinitePartition/Law.lean:190 · uses wordHistogram , FiniteSample , fixedSizeEmbed , labelLaw , unshuffle
5 supporting declarations (lemmas, instances)
  • measurable_unshuffle theorem — Unshuffling finite labeled samples into ordered label streams is measurable.
    X :
    Type u_1
    shared
    I :
    Type u_2
    shared
    Measurable (unshuffle (X := X) (I := I))
    Proof (Lean source)
    @[fun_prop] theorem measurable_unshuffle : Measurable (unshuffle (X := X) (I := I)) := by classical apply measurable_pi_lambda intro i t ht rw [MeasurableSpace.measurableSet_iInf] intro n change MeasurableSet {z : Fin n → X × I | unshuffle (⟨n, z⟩ : FiniteSample (X × I)) i ∈ t} have hsection : {z : Fin n → X × I | unshuffle (⟨n, z⟩ : FiniteSample (X × I)) i ∈ t} = ⋃ w : Fin n → I, {z | (fun k => (z k).2) = w} ∩ {z | (⟨wordHistogram w i, gatherWord w (fun k => (z k).1) i⟩ : FiniteSample X) ∈ t} := by ext z simp only [Set.mem_ofPred_eq, Set.mem_iUnion, Set.mem_inter_iff] constructor · intro hz refine ⟨fun k => (z k).2, rfl, ?_⟩ exact hz · rintro ⟨w, hw, hz⟩ subst w exact hz rw [hsection] apply MeasurableSet.iUnion intro w apply MeasurableSet.inter · exact (measurable_pi_lambda _ fun k => measurable_snd.comp (measurable_pi_apply k)) (measurableSet_singleton w) · exact ((measurable_fixedSizeEmbed (wordHistogram w i)).comp ((measurable_pi_apply i).comp ((measurable_gatherWord w).comp (measurable_pi_lambda _ fun k => measurable_fst.comp (measurable_pi_apply k))))) ht
    Causalean.Stat.FiniteRaoBlackwell.Poisson.FinitePartition.measurable_unshuffle · Causalean/Stat/FiniteRaoBlackwell/Poisson/FinitePartition/Law.lean:25
  • map_gatherWord_iid_pi theorem — For a fixed finite label word, regrouping iid observations by that word has the product law of iid tuples in its label cells, with each tuple length given by the number of occurrences of its label.
    X :
    Type u_1
    shared
    I :
    Type u_2
    shared
    m :
    ℕ
    w :
    Fin m → I
    Measure.map (gatherWord w) (Measure.pi (fun _ : Fin m => P))
    = Measure.pi (fun i : I => Measure.pi (fun _ : Fin (wordHistogram w i) => P))
    Proof (Lean source)
    theorem map_gatherWord_iid_pi {m : ℕ} (w : Fin m → I) (P : Measure X) [IsProbabilityMeasure P] : Measure.map (gatherWord w) (Measure.pi (fun _ : Fin m => P)) = Measure.pi (fun i : I => Measure.pi (fun _ : Fin (wordHistogram w i) => P)) := by let e := (wordUnshuffleEquiv w).symm let reindex := MeasurableEquiv.piCongrLeft (fun _ : Σ i : I, Fin (wordHistogram w i) => X) e have hreindex : Measure.map reindex (Measure.pi fun _ : Fin m => P) = Measure.pi fun _ : Σ i : I, Fin (wordHistogram w i) => P := by exact Measure.pi_map_piCongrLeft e (fun _ : Σ i : I, Fin (wordHistogram w i) => P) have hfun : gatherWord (Y := X) w = piCurry (fun i : I => fun _ : Fin (wordHistogram w i) => X) ∘ reindex := by funext z i k simp only [Function.comp_apply] rw [MeasurableEquiv.piCurry_apply] change z (wordUnshuffleEquiv w ⟨i, k⟩) = (Equiv.piCongrLeft (fun _ : Σ i : I, Fin (wordHistogram w i) => X) e) z ⟨i, k⟩ rw [Equiv.piCongrLeft_apply] simp [e] rw [hfun, ← Measure.map_map (piCurry _).measurable reindex.measurable, hreindex] simpa only [Measure.infinitePi_eq_pi] using Measure.infinitePi_map_piCurry (fun i : I => fun _ : Fin (wordHistogram w i) => P)
    Causalean.Stat.FiniteRaoBlackwell.Poisson.FinitePartition.map_gatherWord_iid_pi · Causalean/Stat/FiniteRaoBlackwell/Poisson/FinitePartition/Law.lean:61
  • map_unshuffle_restrict_labelWord theorem — Given an observation probability law, finite label masses, and a fixed label word, the law of iid marked observations restricted to that word, then unshuffled, is its word probability times the product of the corresponding fixed-length iid observation streams.
    X :
    Type u_1
    shared
    I :
    Type u_2
    shared
    p :
    I → ℝ≥0
    hp :
    ∑ i, p i = 1
    m :
    ℕ
    w :
    Fin m → I
    Measure.map (fun z : Fin m → X × I => unshuffle (⟨m, z⟩ : FiniteSample (X × I))) ((Measure.pi (fun _ : Fin m => P.prod (labelLaw p hp))).restrict {z | (fun k => (z k).2) = w})
    = (∏ k, (p (w k) : ℝ≥0∞)) • Measure.pi (fun i : I => Measure.map (fixedSizeEmbed (wordHistogram w i)) (Measure.pi (fun _ : Fin (wordHistogram w i) => P)))
    Proof (Lean source)
    theorem map_unshuffle_restrict_labelWord (P : Measure X) [IsProbabilityMeasure P] (p : I → ℝ≥0) (hp : ∑ i, p i = 1) {m : ℕ} (w : Fin m → I) : Measure.map (fun z : Fin m → X × I => unshuffle (⟨m, z⟩ : FiniteSample (X × I))) ((Measure.pi (fun _ : Fin m => P.prod (labelLaw p hp))).restrict {z | (fun k => (z k).2) = w}) = (∏ k, (p (w k) : ℝ≥0∞)) • Measure.pi (fun i : I => Measure.map (fixedSizeEmbed (wordHistogram w i)) (Measure.pi (fun _ : Fin (wordHistogram w i) => P))) := by classical letI := labelLaw_isProbabilityMeasure p hp let e := MeasurableEquiv.arrowProdEquivProdArrow X I (Fin m) let μ : Measure (Fin m → X) := Measure.pi (fun _ => P) let ν : Measure (Fin m → I) := Measure.pi (fun _ => labelLaw p hp) have hmass (i : I) : labelLaw p hp {i} = (p i : ℝ≥0∞) := by unfold labelLaw rw [PMF.toMeasure_apply_singleton _ _ (measurableSet_singleton i), PMF.ofFintype_apply] have hν : ν {w} = ∏ k, (p (w k) : ℝ≥0∞) := by simp only [ν, Measure.pi_singleton, hmass] have hpre : e ⁻¹' (univ ×ˢ {w}) = {z : Fin m → X × I | (fun k => (z k).2) = w} := by ext z simp [e, MeasurableEquiv.arrowProdEquivProdArrow, Equiv.arrowProdEquivProdArrow] have hsource : Measure.map e ((Measure.pi (fun _ : Fin m => P.prod (labelLaw p hp))).restrict {z | (fun k => (z k).2) = w}) = (∏ k, (p (w k) : ℝ≥0∞)) • Measure.map (fun x : Fin m → X => (x, w)) μ := by rw [← hpre, ← Measure.restrict_map e.measurable (MeasurableSet.univ.prod (measurableSet_singleton w)), (measurePreserving_arrowProdEquivProdArrow X I (Fin m) (fun _ => P) (fun _ => labelLaw p hp)).map_eq] change (μ.prod ν).restrict (univ ×ˢ {w}) = _ rw [← Measure.prod_restrict, Measure.restrict_univ, Measure.restrict_singleton, hν, Measure.prod_smul_right, Measure.prod_dirac] have htarget : Measure.map (fun x : Fin m → X => fun i => fixedSizeEmbed (wordHistogram w i) (gatherWord w x i)) μ = Measure.pi (fun i : I => Measure.map (fixedSizeEmbed (wordHistogram w i)) (Measure.pi (fun _ : Fin (wordHistogram w i) => P))) := by change Measure.map ((fun y i => fixedSizeEmbed (wordHistogram w i) (y i)) ∘ gatherWord w) μ = _ calc _ = Measure.map (fun y => fun i => fixedSizeEmbed (wordHistogram w i) (y i)) (Measure.map (gatherWord w) μ) := (Measure.map_map (measurable_pi_lambda _ fun i => (measurable_fixedSizeEmbed _).comp (measurable_pi_apply i)) (measurable_gatherWord w)).symm _ = _ := by rw [map_gatherWord_iid_pi w P] exact Measure.pi_map_pi (fun i => (measurable_fixedSizeEmbed _).aemeasurable) calc _ = Measure.map (fun q : (Fin m → X) × (Fin m → I) => unshuffle (⟨m, fun k => (q.1 k, q.2 k)⟩ : FiniteSample (X × I))) (Measure.map e ((Measure.pi (fun _ : Fin m => P.prod (labelLaw p hp))).restrict {z | (fun k => (z k).2) = w})) := by rw [Measure.map_map] · rfl · exact measurable_unshuffle.comp (measurable_fixedSizeEmbed m |>.comp (measurable_pi_lambda _ fun k => ((measurable_pi_apply k).comp measurable_fst).prodMk ((measurable_pi_apply k).comp measurable_snd))) · exact e.measurable _ = _ := by rw [hsource, Measure.map_smul] congr 1 calc Measure.map (fun q : (Fin m → X) × (Fin m → I) => unshuffle (⟨m, fun k => (q.1 k, q.2 k)⟩ : FiniteSample (X × I))) (Measure.map (fun x : Fin m → X => (x, w)) μ) = Measure.map (fun x : Fin m → X => unshuffle (⟨m, fun k => (x k, w k)⟩ : FiniteSample (X × I))) μ := by rw [Measure.map_map] · rfl · exact measurable_unshuffle.comp (measurable_fixedSizeEmbed m |>.comp (measurable_pi_lambda _ fun k => ((measurable_pi_apply k).comp measurable_fst).prodMk ((measurable_pi_apply k).comp measurable_snd))) · fun_prop _ = _ := by convert htarget using 1 congr 1
    Causalean.Stat.FiniteRaoBlackwell.Poisson.FinitePartition.map_unshuffle_restrict_labelWord · Causalean/Stat/FiniteRaoBlackwell/Poisson/FinitePartition/Law.lean:94
  • map_joint_prefix_pi theorem — For an iid observation law, label masses summing to one, a pool size, and a shorter prefix length, pairing the observation and label prefixes gives iid marked observations.
    X :
    Type u_1
    shared
    I :
    Type u_2
    shared
    p :
    I → ℝ≥0
    hp :
    ∑ i, p i = 1
    n m :
    ℕ
    h :
    m ≤ n
    Measure.map (fun z : (Fin n → X) × (Fin n → I) => fun k : Fin m => (z.1 ⟨k.val, lt_of_lt_of_le k.isLt h⟩, z.2 ⟨k.val, lt_of_lt_of_le k.isLt h⟩)) ((fixedPoolLaw P n).prod (Measure.pi (fun _ : Fin n => labelLaw p hp)))
    = Measure.pi (fun _ : Fin m => P.prod (labelLaw p hp))
    Proof (Lean source)
    theorem map_joint_prefix_pi (P : Measure X) [IsProbabilityMeasure P] (p : I → ℝ≥0) (hp : ∑ i, p i = 1) {n m : ℕ} (h : m ≤ n) : Measure.map (fun z : (Fin n → X) × (Fin n → I) => fun k : Fin m => (z.1 ⟨k.val, lt_of_lt_of_le k.isLt h⟩, z.2 ⟨k.val, lt_of_lt_of_le k.isLt h⟩)) ((fixedPoolLaw P n).prod (Measure.pi (fun _ : Fin n => labelLaw p hp))) = Measure.pi (fun _ : Fin m => P.prod (labelLaw p hp)) := by classical letI := labelLaw_isProbabilityMeasure p hp let Q := labelLaw p hp let μ := P.prod Q let pair : (Fin n → X) × (Fin n → I) → (Fin n → X × I) := fun z k => (z.1 k, z.2 k) let pref : (Fin n → X × I) → (Fin m → X × I) := fun z k => z ⟨k.val, lt_of_lt_of_le k.isLt h⟩ have hpair : Measure.map pair ((fixedPoolLaw P n).prod (Measure.pi (fun _ : Fin n => Q))) = Measure.pi (fun _ : Fin n => μ) := by have he : pair = (MeasurableEquiv.arrowProdEquivProdArrow X I (Fin n)).symm := by funext z k rfl rw [he] exact (measurePreserving_arrowProdEquivProdArrow X I (Fin n) (fun _ => P) (fun _ => Q)).symm.map_eq have hprefix : Measure.map pref (Measure.pi (fun _ : Fin n => μ)) = Measure.pi (fun _ : Fin m => μ) := by symm refine Measure.pi_eq (fun s hs => ?_) rw [Measure.map_apply (by fun_prop) (.univ_pi hs)] have hpre : pref ⁻¹' (Set.univ.pi s) = Set.univ.pi (fun j : Fin n => if hj : j.val < m then s ⟨j.val, hj⟩ else univ) := by ext z simp only [Set.mem_preimage, Set.mem_pi, Set.mem_univ, true_implies] constructor · intro hz j split · exact hz ⟨j.val, ‹j.val < m›⟩ · trivial · intro hz k simpa [pref] using hz ⟨k.val, lt_of_lt_of_le k.isLt h⟩ rw [hpre, Measure.pi_pi] let t : Finset (Fin n) := Finset.univ.filter fun j => j.val < m have ht (j : t) : j.val.val < m := by simpa only [t, mem_filter, Finset.mem_univ, true_and] using j.property let e : Fin m ≃ t := { toFun := fun k => ⟨⟨k.val, lt_of_lt_of_le k.isLt h⟩, by simp [t, k.isLt]⟩ invFun := fun j => ⟨j.val.val, ht j⟩ left_inv := fun k => by rfl right_inv := fun j => by ext; rfl } calc (∏ j : Fin n, μ (if hj : j.val < m then s ⟨j.val, hj⟩ else univ)) = ∏ j : Fin n, if hj : j.val < m then μ (s ⟨j.val, hj⟩) else 1 := by apply Fintype.prod_congr intro j split <;> simp _ = ∏ j : t, μ (s ⟨j.val.val, ht j⟩) := by rw [Finset.prod_dite] simp only [Finset.prod_const_one, mul_one] apply Fintype.prod_congr intro j congr 2 _ = ∏ k : Fin m, μ (s k) := by symm apply Fintype.prod_equiv e intro k rfl calc Measure.map (fun z : (Fin n → X) × (Fin n → I) => fun k : Fin m => (z.1 ⟨k.val, lt_of_lt_of_le k.isLt h⟩, z.2 ⟨k.val, lt_of_lt_of_le k.isLt h⟩)) ((fixedPoolLaw P n).prod (Measure.pi (fun _ : Fin n => Q))) = Measure.map pref (Measure.map pair ((fixedPoolLaw P n).prod (Measure.pi (fun _ : Fin n => Q)))) := by rw [Measure.map_map (by fun_prop) (by fun_prop)] rfl _ = Measure.pi (fun _ : Fin m => μ) := by rw [hpair, hprefix]
    Causalean.Stat.FiniteRaoBlackwell.Poisson.FinitePartition.map_joint_prefix_pi · Causalean/Stat/FiniteRaoBlackwell/Poisson/FinitePartition/Law.lean:275
  • unshuffle_total_count theorem — The total length of the ordered label streams equals the length of the original labeled sample.
    X :
    Type u_1
    shared
    I :
    Type u_2
    shared
    s :
    FiniteSample (X × I)
    ∑ i, ((unshuffle s) i).count = s.count
    Proof (Lean source)
    theorem unshuffle_total_count (s : FiniteSample (X × I)) : ∑ i, ((unshuffle s) i).count = s.count := by classical let w : Fin s.count → I := fun k => (s.2 k).2 have h := Finset.card_eq_sum_card_fiberwise (s := (Finset.univ : Finset (Fin s.count))) (t := (Finset.univ : Finset I)) (f := w) (fun k _ => Finset.mem_univ (w k)) change ∑ i, wordHistogram w i = s.count simpa [wordHistogram, w] using h.symm
    Causalean.Stat.FiniteRaoBlackwell.Poisson.FinitePartition.unshuffle_total_count · Causalean/Stat/FiniteRaoBlackwell/Poisson/FinitePartition/Law.lean:363
Risk 1 core · 7 supporting Conditional averaging over a Poisson count and finite labels contracts squared loss. ★ fixedRisk_le_independentRisk_add_tail

Squared-risk transfer for a capped labeled Poisson experiment

Conditional averaging over a Poisson count and finite labels contracts squared loss. The cap contributes at most interval diameter squared times the scalar Poisson upper-tail probability.

theorem fixedRisk_le_independentRisk_add_tail reviewed
Causalean.Stat.FiniteRaoBlackwell.Poisson.FinitePartition

For an iid observation law, label masses summing to one, a Poisson mean, a pool size, a measurable stream statistic confined to an interval, a target in that interval, and an overflow value in it, fixed-sample squared risk is at most independent Poisson-stream risk plus squared interval diameter times the Poisson upper tail.

Formal statement
X :
Type u_1
shared
I :
Type u_2
shared
p :
I → ℝ≥0
hp :
∑ i, p i = 1
lambda :
ℝ≥0
n :
ℕ
T :
(I → FiniteSample X) → ℝ
hT :
a b theta zOver :
ℝ
hTmem :
∀ s, T s ∈ Icc a b
htheta :
theta ∈ Icc a b
hzOver :
zOver ∈ Icc a b
sqRisk (fixedPoolLaw P n) (fun x => fixedStatistic p hp lambda x T zOver) theta
≤ sqRisk (Measure.pi (fun i : I => finitePoissonSampleLaw P (lambda * p i))) T theta
+ (b - a) ^ 2 * (poissonMeasure lambda).real (Ioi n)
Proof (Lean source)
theorem fixedRisk_le_independentRisk_add_tail (P : Measure X) [IsProbabilityMeasure P] (p : I → ℝ≥0) (hp : ∑ i, p i = 1) (lambda : ℝ≥0) (n : ℕ) {T : (I → FiniteSample X) → ℝ} (hT : Measurable T) {a b theta zOver : ℝ} (hTmem : ∀ s, T s ∈ Icc a b) (htheta : theta ∈ Icc a b) (hzOver : zOver ∈ Icc a b) : sqRisk (fixedPoolLaw P n) (fun x => fixedStatistic p hp lambda x T zOver) theta ≤ sqRisk (Measure.pi (fun i : I => finitePoissonSampleLaw P (lambda * p i))) T theta + (b - a) ^ 2 * (poissonMeasure lambda).real (Ioi n) := by exact (fixedRisk_le_cappedRisk P p hp lambda n hT hTmem hzOver theta).trans (cappedRisk_le_independentRisk_add_tail P p hp lambda n hT hTmem htheta hzOver)
Causalean.Stat.FiniteRaoBlackwell.Poisson.FinitePartition.fixedRisk_le_independentRisk_add_tail · Causalean/Stat/FiniteRaoBlackwell/Poisson/FinitePartition/Risk.lean:434 · uses FiniteSample , finitePoissonSampleLaw , fixedPoolLaw , fixedStatistic , sqRisk
7 supporting declarations (lemmas, instances)
Stream­Law 1 core · 6 supporting This module identifies the ordered label streams of a marked Poisson sample with independent finite Poisson samples and transports that law to the nonoverflow part of a single capped iid pool. ★ labeledStreamLaw_eq_independent

Ordered labeled Poisson stream laws

This module identifies the ordered label streams of a marked Poisson sample with independent finite Poisson samples and transports that law to the nonoverflow part of a single capped iid pool.

theorem labeledStreamLaw_eq_independent reviewed
Causalean.Stat.FiniteRaoBlackwell.Poisson.FinitePartition

Given an observation probability law, label masses summing to one, and a Poisson mean, the unshuffled streams are independent finite Poisson samples, with label-specific mean lambda * p i.

Formal statement
X :
Type u_1
shared
I :
Type u_2
shared
p :
I → ℝ≥0
hp :
∑ i, p i = 1
lambda :
ℝ≥0
labeledStreamLaw P p hp lambda
= Measure.pi (fun i : I => finitePoissonSampleLaw P (lambda * p i))
Proof (Lean source)
theorem labeledStreamLaw_eq_independent (P : Measure X) [IsProbabilityMeasure P] (p : I → ℝ≥0) (hp : ∑ i, p i = 1) (lambda : ℝ≥0) : labeledStreamLaw P p hp lambda = Measure.pi (fun i : I => finitePoissonSampleLaw P (lambda * p i)) := by -- Partition both measures by the complete label-count vector. On every -- fibre, use the two fixed-count identities above; then sum the pairwise -- disjoint restrictions. This keeps arbitrary measurable observation spaces. classical have hcover : (⋃ c : I → ℕ, {s : I → FiniteSample X | ∀ i, (s i).count = c i}) = univ := by ext s simp only [Set.mem_iUnion, Set.mem_setOf_eq, Set.mem_univ, iff_true] exact ⟨fun i => (s i).count, fun i => rfl⟩ apply Measure.ext_of_iUnion_eq_univ hcover intro c exact (labeledStreamLaw_restrict_countVector_eq P p hp lambda c).trans (independentStreamLaw_restrict_countVector_eq P p lambda c).symm
Causalean.Stat.FiniteRaoBlackwell.Poisson.FinitePartition.labeledStreamLaw_eq_independent · Causalean/Stat/FiniteRaoBlackwell/Poisson/FinitePartition/StreamLaw.lean:158 · uses FiniteSample , finitePoissonSampleLaw , labeledStreamLaw
6 supporting declarations (lemmas, instances)