Mathlib.Probability.Poisson.Finite­Partition

Finite-partition Poisson-process tools: cell counts, splitting and superposition, iid-Poisson representations, relative entropy, and depoissonization.

Partition 18 core · 13 supporting · 3 submodules Finite-partition constructions for Poisson counts, their cell laws, and splitting identities. Superposition 13 core · 18 supporting · 2 submodules Superposition and retention laws for marked Poisson samples on finite partitions. Capped­Prefix 5 core · 9 supporting · 4 submodules This subtopic identifies a fixed finite iid sample, uniformly permuted and independently marked by fair Boolean variables, with the nonoverflow part of a finite marked-Poisson prefix experiment. Unequal­Mass­KL 4 core · 5 supporting · 3 submodules This module collects the count, conditional-sample, and finite-measure components of the exact KL identity for finite marked Poisson laws with arbitrary total intensity masses.
Basic 12 core · 12 supporting This file turns an independent Poisson count and infinite i.i.d. ★ finiteMarkedPoissonSampleLaw_restrict_count_eq★ map_totalizedPrefix_restrict_nonoverflow

Finite Poisson samples

This file turns an independent Poisson count and infinite i.i.d. stream into a genuine finite sequence. It records the count law and the exact, unnormalised fixed-count fibre law. The latter is the convenient measure-theoretic form of the statement that, conditional on the count, the observations are i.i.d.

abbrev FiniteSample reviewed
Causalean.Mathlib.Probability.FiniteMarkedPoissonPartition

For an observation space, a finite sample consists of a nonnegative sample size and one observation for each position below that size.

Definition (Lean source)
X :
FiniteSample X :
Type (max 0 u_2)
Σ n : ℕ, Fin n → X
Causalean.Mathlib.Probability.FiniteMarkedPoissonPartition.FiniteSample · Causalean/Mathlib/Probability/Poisson/FinitePartition/Basic.lean:38
def count reviewed
Causalean.Mathlib.Probability.FiniteMarkedPoissonPartition.FiniteSample

For a finite sample, its count is the number of observations it contains.

Definition (Lean source)
X :
Type u_1
shared
s :
count s :
ℕ
s.1
Causalean.Mathlib.Probability.FiniteMarkedPoissonPartition.FiniteSample.count · Causalean/Mathlib/Probability/Poisson/FinitePartition/Basic.lean:42 · uses FiniteSample
def points reviewed
Causalean.Mathlib.Probability.FiniteMarkedPoissonPartition.FiniteSample

For a finite sample, its points are its observations indexed by positions below its count.

Definition (Lean source)
X :
Type u_1
shared
s :
points s :
Fin s.count → X
s.2
Causalean.Mathlib.Probability.FiniteMarkedPoissonPartition.FiniteSample.points · Causalean/Mathlib/Probability/Poisson/FinitePartition/Basic.lean:45 · uses FiniteSample , count
def fixedSizeEmbed reviewed
Causalean.Mathlib.Probability.FiniteMarkedPoissonPartition

Given a sample size and a tuple indexed by its positions, the fixed-size embedding is the finite sample having that size and those observations.

Definition (Lean source)
X :
Type u_1
shared
n :
ℕ
x :
Fin n → X
fixedSizeEmbed n x :
⟨n, x⟩
Causalean.Mathlib.Probability.FiniteMarkedPoissonPartition.fixedSizeEmbed · Causalean/Mathlib/Probability/Poisson/FinitePartition/Basic.lean:49 · uses FiniteSample
def streamToFiniteSample reviewed
Causalean.Mathlib.Probability.FiniteMarkedPoissonPartition

Given a sample size paired with an infinite observation stream, the associated finite sample has that size and retains the corresponding stream prefix.

Definition (Lean source)
X :
Type u_1
shared
z :
ℕ × (ℕ → X)
streamToFiniteSample z :
⟨z.1, fun i => z.2 i⟩
Causalean.Mathlib.Probability.FiniteMarkedPoissonPartition.streamToFiniteSample · Causalean/Mathlib/Probability/Poisson/FinitePartition/Basic.lean:53 · uses FiniteSample
def finitePoissonSampleLaw reviewed
Causalean.Mathlib.Probability.FiniteMarkedPoissonPartition

Given an observation probability law and a nonnegative Poisson mean, the finite Poisson sample law draws an independent Poisson count and i.i.d. observation stream, then retains the stream prefix selected by the count.

Definition (Lean source)
X :
Type u_1
shared
lam :
ℝ≥0
finitePoissonSampleLaw P lam :
Causalean.Mathlib.Probability.FiniteMarkedPoissonPartition.finitePoissonSampleLaw · Causalean/Mathlib/Probability/Poisson/FinitePartition/Basic.lean:106 · uses FiniteSample
def finiteMarkedPoissonSampleLaw reviewed
Causalean.Mathlib.Probability.FiniteMarkedPoissonPartition

Given an observation probability law, a real-valued mark law, and a nonnegative Poisson mean, the finite marked Poisson sample law uses independent observation--mark pairs with the product of those laws as their common distribution.

Definition (Lean source)
X :
Type u_1
shared
lam :
ℝ≥0
finiteMarkedPoissonSampleLaw P R lam :
Measure (FiniteSample (X × ℝ))
finitePoissonSampleLaw (P.prod R) lam
Causalean.Mathlib.Probability.FiniteMarkedPoissonPartition.finiteMarkedPoissonSampleLaw · Causalean/Mathlib/Probability/Poisson/FinitePartition/Basic.lean:156 · uses FiniteSample
lemma finiteMarkedPoissonSampleLaw_restrict_count_eq reviewed
Causalean.Mathlib.Probability.FiniteMarkedPoissonPartition

For an observation probability law, a real-valued mark law, a nonnegative Poisson rate, and a count, the count-restricted marked law is its Poisson mass times the embedded product law.

Formal statement
X :
Type u_1
shared
lam :
ℝ≥0
n :
ℕ
(finiteMarkedPoissonSampleLaw P R lam).restrict (FiniteSample.count ⁻¹' ({n} : Set ℕ))
= (poissonMeasure lam) ({n} : Set ℕ) • Measure.map (fixedSizeEmbed n) (Measure.pi (fun _ : Fin n => P.prod R))
Proof (Lean source)
lemma finiteMarkedPoissonSampleLaw_restrict_count_eq (P : Measure X) [IsProbabilityMeasure P] (R : Measure ℝ) [IsProbabilityMeasure R] (lam : ℝ≥0) (n : ℕ) : (finiteMarkedPoissonSampleLaw P R lam).restrict (FiniteSample.count ⁻¹' ({n} : Set ℕ)) = (poissonMeasure lam) ({n} : Set ℕ) • Measure.map (fixedSizeEmbed n) (Measure.pi (fun _ : Fin n => P.prod R)) := by exact finitePoissonSampleLaw_restrict_count_eq (P.prod R) lam n
Causalean.Mathlib.Probability.FiniteMarkedPoissonPartition.finiteMarkedPoissonSampleLaw_restrict_count_eq · Causalean/Mathlib/Probability/Poisson/FinitePartition/Basic.lean:184 · uses FiniteSample , count , finiteMarkedPoissonSampleLaw , fixedSizeEmbed
def prefixOfLE reviewed
Causalean.Mathlib.Probability.FiniteMarkedPoissonPartition

Given a fixed array, a requested prefix length, and a proof that the request fits, the finite prefix sample retains the first m coordinates.

Definition (Lean source)
X :
Type u_1
shared
n :
ℕ
x :
Fin n → X
m :
ℕ
h :
m ≤ n
prefixOfLE x m h :
⟨m, fun i ↦ x ⟨i, lt_of_lt_of_le i.isLt h⟩⟩
Causalean.Mathlib.Probability.FiniteMarkedPoissonPartition.prefixOfLE · Causalean/Mathlib/Probability/Poisson/FinitePartition/Basic.lean:209 · uses FiniteSample
def cappedPrefix reviewed
Causalean.Mathlib.Probability.FiniteMarkedPoissonPartition

For a fixed array and a requested length, the capped prefix is the genuine prefix in the right summand when the request fits and the distinguished left summand on overflow, so overflow is never confused with an empty observation.

Definition (Lean source)
X :
Type u_1
shared
n :
ℕ
x :
Fin n → X
m :
ℕ
cappedPrefix x m :
if h : m ≤ n then inr (prefixOfLE x m h) else inl ()
Causalean.Mathlib.Probability.FiniteMarkedPoissonPartition.cappedPrefix · Causalean/Mathlib/Probability/Poisson/FinitePartition/Basic.lean:215 · uses FiniteSample
def totalizedPrefix reviewed
Causalean.Mathlib.Probability.FiniteMarkedPoissonPartition

For an overflow finite sample, a fixed array, and a requested length, the totalized capped prefix agrees with the genuine prefix off overflow and uses the specified value on overflow.

Definition (Lean source)
X :
Type u_1
shared
n :
ℕ
overflow :
x :
Fin n → X
m :
ℕ
totalizedPrefix overflow x m :
elim (fun _ ↦ overflow) id (cappedPrefix x m)
Causalean.Mathlib.Probability.FiniteMarkedPoissonPartition.totalizedPrefix · Causalean/Mathlib/Probability/Poisson/FinitePartition/Basic.lean:222 · uses FiniteSample
theorem map_totalizedPrefix_restrict_nonoverflow reviewed
Causalean.Mathlib.Probability.FiniteMarkedPoissonPartition

For an observation probability law, a Poisson mean, a fixed sample size, and an overflow totalization, the nonoverflow totalized-prefix law equals the count-capped finite Poisson law.

Formal statement
X :
Type u_1
shared
lambda :
ℝ≥0
n :
ℕ
overflow :
Measure.map (fun z : (Fin n → X) × ℕ ↦ totalizedPrefix overflow z.1 z.2) (((Measure.pi (fun _ : Fin n ↦ P)).prod (poissonMeasure lambda)).restrict (snd ⁻¹' Iic n))
= (finitePoissonSampleLaw P lambda).restrict (FiniteSample.count ⁻¹' Iic n)
Proof (Lean source)
theorem map_totalizedPrefix_restrict_nonoverflow (P : Measure X) [IsProbabilityMeasure P] (lambda : ℝ≥0) (n : ℕ) (overflow : FiniteSample X) : Measure.map (fun z : (Fin n → X) × ℕ ↦ totalizedPrefix overflow z.1 z.2) (((Measure.pi (fun _ : Fin n ↦ P)).prod (poissonMeasure lambda)).restrict (Prod.snd ⁻¹' Iic n)) = (finitePoissonSampleLaw P lambda).restrict (FiniteSample.count ⁻¹' Iic n) := by -- Decompose both restrictions as the countable sum over `m : Iic n`. -- On each fibre, product restriction and `finitePoissonSampleLaw_restrict_count_eq` -- both reduce to the Poisson atom at `m` times the map of the same `m`-prefix law. classical let Qn : Measure (Fin n → X) := Measure.pi (fun _ : Fin n ↦ P) let μ : Measure ((Fin n → X) × ℕ) := Qn.prod (poissonMeasure lambda) let ν : Measure (FiniteSample X) := finitePoissonSampleLaw P lambda let f : ((Fin n → X) × ℕ) → FiniteSample X := fun z ↦ totalizedPrefix overflow z.1 z.2 have hf : Measurable f := measurable_totalizedPrefix overflow have hfiber (m : Fin (n + 1)) : Measure.map f (μ.restrict (Prod.snd ⁻¹' ({m.val} : Set ℕ))) = ν.restrict (FiniteSample.count ⁻¹' ({m.val} : Set ℕ)) := by have hm : m.val ≤ n := Nat.le_of_lt_succ m.isLt have hs : Prod.snd ⁻¹' ({m.val} : Set ℕ) = (Set.univ : Set (Fin n → X)) ×ˢ ({m.val} : Set ℕ) := by ext z simp rw [finitePoissonSampleLaw_restrict_count_eq] rw [hs, ← Measure.prod_restrict, Measure.restrict_univ, Measure.restrict_singleton, Measure.prod_smul_right, Measure.map_smul, Measure.prod_dirac, Measure.map_map hf (by fun_prop)] have hfun : f ∘ (fun x : Fin n → X ↦ (x, m.val)) = fixedSizeEmbed m.val ∘ (fun x : Fin n → X ↦ fun i : Fin m.val ↦ x ⟨i, lt_of_lt_of_le i.isLt hm⟩) := by funext x simp [f, totalizedPrefix, cappedPrefix, hm, prefixOfLE, fixedSizeEmbed] rw [hfun, ← Measure.map_map (measurable_fixedSizeEmbed m.val) (by fun_prop), map_prefixCoordinates_pi P hm] have hsource : (Prod.snd : ((Fin n → X) × ℕ) → ℕ) ⁻¹' Iic n = ⋃ m : Fin (n + 1), (Prod.snd : ((Fin n → X) × ℕ) → ℕ) ⁻¹' ({m.val} : Set ℕ) := by ext z simp only [Set.mem_preimage, Set.mem_Iic, Set.mem_iUnion, Set.mem_singleton_iff] constructor · intro hz exact ⟨⟨z.2, Nat.lt_succ_of_le hz⟩, rfl⟩ · rintro ⟨m, hm⟩ rw [hm] exact Nat.le_of_lt_succ m.isLt have htarget : (FiniteSample.count : FiniteSample X → ℕ) ⁻¹' Iic n = ⋃ m : Fin (n + 1), (FiniteSample.count : FiniteSample X → ℕ) ⁻¹' ({m.val} : Set ℕ) := by ext z simp only [Set.mem_preimage, Set.mem_Iic, Set.mem_iUnion, Set.mem_singleton_iff] constructor · intro hz exact ⟨⟨z.count, Nat.lt_succ_of_le hz⟩, rfl⟩ · rintro ⟨m, hm⟩ rw [hm] exact Nat.le_of_lt_succ m.isLt have hsource_disjoint : Pairwise (onFun Disjoint (fun m : Fin (n + 1) ↦ (Prod.snd : ((Fin n → X) × ℕ) → ℕ) ⁻¹' ({m.val} : Set ℕ))) := by intro a b hab change Disjoint ((Prod.snd : ((Fin n → X) × ℕ) → ℕ) ⁻¹' ({a.val} : Set ℕ)) ((Prod.snd : ((Fin n → X) × ℕ) → ℕ) ⁻¹' ({b.val} : Set ℕ)) rw [Set.disjoint_left] intro z hza hzb simp only [Set.mem_preimage, Set.mem_singleton_iff] at hza hzb apply hab apply Fin.ext exact hza.symm.trans hzb have htarget_disjoint : Pairwise (onFun Disjoint (fun m : Fin (n + 1) ↦ (FiniteSample.count : FiniteSample X → ℕ) ⁻¹' ({m.val} : Set ℕ))) := by intro a b hab change Disjoint ((FiniteSample.count : FiniteSample X → ℕ) ⁻¹' ({a.val} : Set ℕ)) ((FiniteSample.count : FiniteSample X → ℕ) ⁻¹' ({b.val} : Set ℕ)) rw [Set.disjoint_left] intro z hza hzb simp only [Set.mem_preimage, Set.mem_singleton_iff] at hza hzb apply hab apply Fin.ext exact hza.symm.trans hzb change Measure.map f (μ.restrict (Prod.snd ⁻¹' Iic n)) = ν.restrict (FiniteSample.count ⁻¹' Iic n) rw [hsource, Measure.restrict_iUnion hsource_disjoint (fun m ↦ measurable_snd (measurableSet_singleton m.val)), Measure.map_sum hf.aemeasurable, htarget, Measure.restrict_iUnion htarget_disjoint (fun m ↦ measurable_finiteSample_count (measurableSet_singleton m.val))] congr 1 funext m exact hfiber m
Causalean.Mathlib.Probability.FiniteMarkedPoissonPartition.map_totalizedPrefix_restrict_nonoverflow · Causalean/Mathlib/Probability/Poisson/FinitePartition/Basic.lean:312 · uses FiniteSample , count , finitePoissonSampleLaw , totalizedPrefix
12 supporting declarations (lemmas, instances)
KL 4 core · 4 supporting This file packages a finite measure as a Poisson count with mean equal to its mass times a scalar intensity and conditionally i.i.d. ★ klDiv_finiteMeasureMarkedPoissonLaw

Relative entropy of finite Poisson experiments

This file packages a finite measure as a Poisson count with mean equal to its mass times a scalar intensity and conditionally i.i.d. points from its normalisation. It states the extended-real KL identity for two equal-mass finite intensity measures and the monotone upper-bound form used in testing arguments. A shared independent real mark law is carried throughout.

def finiteMeasureMass reviewed
Causalean.Mathlib.Probability.FiniteMarkedPoissonPartition

Given a finite measure, its finite-measure mass is its total mass on the observation space, represented as a nonnegative real number.

Definition (Lean source)
X :
Type u_1
shared
finiteMeasureMass ν :
ℝ≥0
(ν univ).toNNReal
Causalean.Mathlib.Probability.FiniteMarkedPoissonPartition.finiteMeasureMass · Causalean/Mathlib/Probability/Poisson/FinitePartition/KL.lean:330
def normalizedFiniteMeasure reviewed
Causalean.Mathlib.Probability.FiniteMarkedPoissonPartition

Given a finite measure and a fallback probability law, the normalized finite measure is the fallback when the measure is zero and otherwise is the measure divided by its total mass.

Definition (Lean source)
X :
Type u_1
shared
normalizedFiniteMeasure ν P₀ :
by classical exact if h : ν = 0 then P₀ else (ν univ)⁻¹ • ν
Causalean.Mathlib.Probability.FiniteMarkedPoissonPartition.normalizedFiniteMeasure · Causalean/Mathlib/Probability/Poisson/FinitePartition/KL.lean:335
def finiteMeasureMarkedPoissonLaw reviewed
Causalean.Mathlib.Probability.FiniteMarkedPoissonPartition

Given a finite intensity measure, a fallback probability law, a real-valued mark law, and a nonnegative scalar intensity, the finite-measure marked Poisson law normalizes the intensity measure and uses a Poisson mean equal to the scalar intensity times its total mass.

Definition (Lean source)
X :
Type u_1
shared
lam :
ℝ≥0
finiteMeasureMarkedPoissonLaw ν P₀ R lam :
Measure (FiniteSample (X × ℝ))
Causalean.Mathlib.Probability.FiniteMarkedPoissonPartition.finiteMeasureMarkedPoissonLaw · Causalean/Mathlib/Probability/Poisson/FinitePartition/KL.lean:375 · uses FiniteSample
lemma klDiv_finiteMeasureMarkedPoissonLaw reviewed
Causalean.Mathlib.Probability.FiniteMarkedPoissonPartition

For two finite intensity measures, a fallback probability law, a real-valued mark law, and a nonnegative scalar intensity, if the intensity measures have equal total mass, their marked Poisson divergence is the scalar intensity times their divergence.

Formal statement
X :
shared
ν₀ ν₁ :
lam :
ℝ≥0
hmass :
ν₀ univ = ν₁ univ
= (lam : ℝ≥0∞) * klDiv ν₀ ν₁
Proof (Lean source)
lemma klDiv_finiteMeasureMarkedPoissonLaw [StandardBorelSpace X] (ν₀ ν₁ : Measure X) [IsFiniteMeasure ν₀] [IsFiniteMeasure ν₁] (P₀ : Measure X) [IsProbabilityMeasure P₀] (R : Measure ℝ) [IsProbabilityMeasure R] (lam : ℝ≥0) (hmass : ν₀ univ = ν₁ univ) : klDiv (finiteMeasureMarkedPoissonLaw ν₀ P₀ R lam) (finiteMeasureMarkedPoissonLaw ν₁ P₀ R lam) = (lam : ℝ≥0∞) * klDiv ν₀ ν₁ := by by_cases hν₀ : ν₀ = 0 · subst ν₀ have hν₁ : ν₁ = 0 := by apply Measure.measure_univ_eq_zero.mp simpa using hmass.symm subst ν₁ simp [finiteMeasureMarkedPoissonLaw, finiteMeasureMass, normalizedFiniteMeasure] have hν₁ : ν₁ ≠ 0 := by intro h apply hν₀ apply Measure.measure_univ_eq_zero.mp simpa [h] using hmass have hm : finiteMeasureMass ν₀ = finiteMeasureMass ν₁ := by simp only [finiteMeasureMass] rw [hmass] unfold finiteMeasureMarkedPoissonLaw rw [← hm, klDiv_finiteMarkedPoissonSampleLaw] have hrecover₀ := finiteMeasureMass_smul_normalizedFiniteMeasure ν₀ P₀ hν₀ have hrecover₁ := finiteMeasureMass_smul_normalizedFiniteMeasure ν₁ P₀ hν₁ have hrecover₁' : finiteMeasureMass ν₀ • normalizedFiniteMeasure ν₁ P₀ = ν₁ := by rw [hm] exact hrecover₁ have hKL : klDiv ν₀ ν₁ = (finiteMeasureMass ν₀ : ℝ≥0∞) * klDiv (normalizedFiniteMeasure ν₀ P₀) (normalizedFiniteMeasure ν₁ P₀) := by calc klDiv ν₀ ν₁ = klDiv (finiteMeasureMass ν₀ • normalizedFiniteMeasure ν₀ P₀) (finiteMeasureMass ν₀ • normalizedFiniteMeasure ν₁ P₀) := by exact congrArg₂ klDiv hrecover₀.symm hrecover₁'.symm _ = _ := InformationTheory.klDiv_smul_same (finiteMeasureMass ν₀) calc ((lam * finiteMeasureMass ν₀ : ℝ≥0) : ℝ≥0∞) * klDiv (normalizedFiniteMeasure ν₀ P₀) (normalizedFiniteMeasure ν₁ P₀) = (lam : ℝ≥0∞) * ((finiteMeasureMass ν₀ : ℝ≥0∞) * klDiv (normalizedFiniteMeasure ν₀ P₀) (normalizedFiniteMeasure ν₁ P₀)) := by simp only [ENNReal.coe_mul] rw [mul_assoc] _ = (lam : ℝ≥0∞) * klDiv ν₀ ν₁ := by rw [hKL]
Causalean.Mathlib.Probability.FiniteMarkedPoissonPartition.klDiv_finiteMeasureMarkedPoissonLaw · Causalean/Mathlib/Probability/Poisson/FinitePartition/KL.lean:411 · uses FiniteSample , finiteMeasureMarkedPoissonLaw
4 supporting declarations (lemmas, instances)
Depoissonization 4 core · 12 supporting This file provides measurable maps between dependent finite samples, padded streams, and canonical marked configurations. ★ markedPoissonKL_le_two_mul_of_piKL

Finite-sample maps and de-Poissonization

This file provides measurable maps between dependent finite samples, padded streams, and canonical marked configurations. It also records the Poisson count identity and a reusable exponential lower-tail bound used to transfer random-size experiments to fixed sample sizes.

def finiteSampleMap reviewed
Causalean.Mathlib.Probability.FiniteMarkedPoissonPartition

Given a map between observation spaces and a finite sample, the mapped finite sample has the same size and applies the map to every observation.

Definition (Lean source)
f :
X → Y
s :
finiteSampleMap f s :
⟨s.count, fun i => f (s.points i)⟩
Causalean.Mathlib.Probability.FiniteMarkedPoissonPartition.finiteSampleMap · Causalean/Mathlib/Probability/Poisson/FinitePartition/Depoissonization.lean:30 · uses FiniteSample
lemma markedPoissonKL_le_two_mul_of_piKL reviewed
Causalean.Mathlib.Probability.FiniteMarkedPoissonPartition

For two observation probability laws, a real-valued mark law, and a sample size, suppose the size is positive and the product-law divergence is within a budget. The corresponding doubled-mean marked Poisson divergence is at most twice the budget.

Formal statement
n :
ℕ
hn :
1 ≤ n
B :
ℝ
hpi :
klDiv (Measure.pi (fun _ : Fin n => P)) (Measure.pi (fun _ : Fin n => Q))
≤ ofReal B
≤ ofReal (2 * B)
Proof (Lean source)
lemma markedPoissonKL_le_two_mul_of_piKL {X : Type*} [MeasurableSpace X] [StandardBorelSpace X] (P Q : Measure X) [IsProbabilityMeasure P] [IsProbabilityMeasure Q] (R : Measure ℝ) [IsProbabilityMeasure R] (n : ℕ) (hn : 1 ≤ n) {B : ℝ} (hpi : klDiv (Measure.pi (fun _ : Fin n => P)) (Measure.pi (fun _ : Fin n => Q)) ≤ ofReal B) : klDiv (finiteMeasureMarkedPoissonLaw P P R (2 * n)) (finiteMeasureMarkedPoissonLaw Q P R (2 * n)) ≤ ofReal (2 * B) := by let i : Fin n := ⟨0, lt_of_lt_of_le Nat.zero_lt_one hn⟩ have hone_le : klDiv P Q ≤ klDiv (Measure.pi (fun _ : Fin n => P)) (Measure.pi (fun _ : Fin n => Q)) := by have h := InformationTheory.klDiv_map_le (Measure.pi (fun _ : Fin n => P)) (Measure.pi (fun _ : Fin n => Q)) (measurable_pi_apply i) rw [Measure.pi_map_eval, Measure.pi_map_eval] at h simpa using h have hprod_ne : klDiv (Measure.pi (fun _ : Fin n => P)) (Measure.pi (fun _ : Fin n => Q)) ≠ ⊤ := ne_top_of_le_ne_top ENNReal.ofReal_ne_top hpi have hone_ne : klDiv P Q ≠ ⊤ := ne_top_of_le_ne_top hprod_ne hone_le have hguards := InformationTheory.klDiv_ne_top_iff.mp hone_ne have hreal := Causalean.Mathlib.InformationTheory.productKL_tensorization_of_finite n P Q hguards.1 hguards.2 have heq : klDiv (Measure.pi (fun _ : Fin n => P)) (Measure.pi (fun _ : Fin n => Q)) = (n : ℝ≥0∞) * klDiv P Q := by have hmul : (n : ℝ≥0∞) * klDiv P Q ≠ ⊤ := ENNReal.mul_ne_top (ENNReal.natCast_ne_top n) hone_ne apply (ENNReal.toReal_eq_toReal_iff' hprod_ne hmul).mp rw [ENNReal.toReal_mul, ENNReal.toReal_natCast] exact hreal rw [klDiv_finiteMeasureMarkedPoissonLaw P Q P R (2 * n) (by simp)] rw [show (((2 : ℝ≥0) * (n : ℝ≥0) : ℝ≥0) : ℝ≥0∞) = (2 : ℝ≥0∞) * (n : ℝ≥0∞) by norm_num, mul_assoc, ← heq] calc (2 : ℝ≥0∞) * klDiv (Measure.pi (fun _ : Fin n => P)) (Measure.pi (fun _ : Fin n => Q)) ≤ 2 * ofReal B := mul_le_mul_right hpi 2 _ = ofReal (2 * B) := by rw [ENNReal.ofReal_mul (by norm_num : (0 : ℝ) ≤ 2)] norm_num
Causalean.Mathlib.Probability.FiniteMarkedPoissonPartition.markedPoissonKL_le_two_mul_of_piKL · Causalean/Mathlib/Probability/Poisson/FinitePartition/Depoissonization.lean:79 · uses FiniteSample , finiteMeasureMarkedPoissonLaw
def canonicalPrefixObservations reviewed
Causalean.Mathlib.Probability.FiniteMarkedPoissonPartition

Given a fallback observation, a prefix length, and a finite sample of observation--mark pairs, the canonical prefix consists of the first n observations when available and otherwise repeats the fallback n times.

Definition (Lean source)
X :
x₀ :
X
n :
ℕ
s :
FiniteSample (X × ℝ)
canonicalPrefixObservations x₀ n s :
Fin n → X
if h : n ≤ s.count then fun k => (s.points (castLE h k)).1 else fun _ => x₀
Causalean.Mathlib.Probability.FiniteMarkedPoissonPartition.canonicalPrefixObservations · Causalean/Mathlib/Probability/Poisson/FinitePartition/Depoissonization.lean:134 · uses FiniteSample
def finiteSamplePaddedStream reviewed
Causalean.Mathlib.Probability.FiniteMarkedPoissonPartition

Given a fallback observation and a finite sample, its padded stream representation records the sample size, then agrees with its observations below that size and equals the fallback thereafter.

Definition (Lean source)
X :
x0 :
X
s :
finiteSamplePaddedStream x0 s :
ℕ × (ℕ → X)
(s.count, fun k => if h : k < s.count then s.points ⟨k, h⟩ else x0)
Causalean.Mathlib.Probability.FiniteMarkedPoissonPartition.finiteSamplePaddedStream · Causalean/Mathlib/Probability/Poisson/FinitePartition/Depoissonization.lean:264 · uses FiniteSample
12 supporting declarations (lemmas, instances)
IIDPoisson 3 core · 4 supporting This file provides the paper-neutral count-and-stream probability space used as the elementary input to finite marked Poisson constructions. ★ iidStreamLaw_map_finPrefix

I.i.d. streams paired with an independent Poisson count

This file provides the paper-neutral count-and-stream probability space used as the elementary input to finite marked Poisson constructions. An infinite i.i.d. stream has exact finite product marginals, and pairing it with an independent scalar Poisson count preserves both the count and prefix laws.

def iidStreamLaw reviewed
Causalean.Mathlib.Probability.FiniteMarkedPoissonPartition

Given a probability measure on a measurable sample space, the infinite i.i.d. stream law is the product probability measure on infinite sequences whose every coordinate has that measure as its marginal.

Definition (Lean source)
X :
Type u_1
shared
iidStreamLaw P :
Measure (ℕ → X)
Measure.infinitePi (fun _ : ℕ => P)
Causalean.Mathlib.Probability.FiniteMarkedPoissonPartition.iidStreamLaw · Causalean/Mathlib/Probability/Poisson/FinitePartition/IIDPoisson.lean:23
lemma iidStreamLaw_map_finPrefix reviewed
Causalean.Mathlib.Probability.FiniteMarkedPoissonPartition

Every finite prefix length under an i.i.d. stream law has the corresponding finite product law.

Formal statement
X :
Type u_1
shared
n :
ℕ
Measure.map (fun z : ℕ → X => fun i : Fin n => z i) (iidStreamLaw P)
= Measure.pi (fun _ : Fin n => P)
Proof (Lean source)
lemma iidStreamLaw_map_finPrefix (P : Measure X) [IsProbabilityMeasure P] (n : ℕ) : Measure.map (fun z : ℕ → X => fun i : Fin n => z i) (iidStreamLaw P) = Measure.pi (fun _ : Fin n => P) := by unfold iidStreamLaw symm apply Measure.pi_eq intro s hs rw [Measure.map_apply (by fun_prop) (.univ_pi hs)] rw [show (fun z : ℕ → X => fun i : Fin n => z i) ⁻¹' Set.univ.pi s = pi (range n) (fun i : ℕ => if h : i < n then s ⟨i, h⟩ else univ) by ext z simp only [Set.mem_preimage, Set.mem_pi, Set.mem_univ, forall_const] constructor · intro hz i hi have hin : i < n := by simpa using hi rw [dif_pos hin] simpa using hz ⟨i, hin⟩ · intro hz i have hi := hz (i : ℕ) (show (i : ℕ) ∈ range n from Finset.mem_range.mpr i.2) rw [dif_pos i.2] at hi simpa using hi] rw [Measure.infinitePi_pi (μ := fun _ : ℕ => P) (s := range n) (t := fun i : ℕ => if h : i < n then s ⟨i, h⟩ else univ)] · rw [Finset.prod_range] simp · intro i hi rw [dif_pos (Finset.mem_range.1 hi)] exact hs _
Causalean.Mathlib.Probability.FiniteMarkedPoissonPartition.iidStreamLaw_map_finPrefix · Causalean/Mathlib/Probability/Poisson/FinitePartition/IIDPoisson.lean:37 · uses iidStreamLaw
def poissonIIDStreamLaw reviewed
Causalean.Mathlib.Probability.FiniteMarkedPoissonPartition

Given an observation probability law and a nonnegative Poisson rate, the joint count-and-stream law is the product law of a Poisson count with that rate and an independent infinite stream whose coordinates are independent with the given common distribution.

Definition (Lean source)
X :
Type u_1
shared
lam :
ℝ≥0
poissonIIDStreamLaw P lam :
Measure (ℕ × (ℕ → X))
Causalean.Mathlib.Probability.FiniteMarkedPoissonPartition.poissonIIDStreamLaw · Causalean/Mathlib/Probability/Poisson/FinitePartition/IIDPoisson.lean:71
4 supporting declarations (lemmas, instances)