Mathlib.Probability.Poisson.Finite­Partition.Partition

Finite-partition constructions for Poisson counts, their cell laws, and splitting identities.

Basic 9 core · 8 supporting This file represents a finite measurable partition by its measurable cell classifier. ★ measurable_restrictPartition

Finite measurable partitions and restriction maps

This file represents a finite measurable partition by its measurable cell classifier. It defines the cell sets, their normalized observation laws, and the measurable restriction maps that stably filter a finite marked sequence.

structure FiniteMeasurablePartition reviewed
Causalean.Mathlib.Probability.FiniteMarkedPoissonPartition

A finite measurable partition of the sample space X into cells indexed by ι, represented by a classifier assigning each observation to its cell — the cells are the fibres of this map — where that classifier is measurable. The structure itself does not require the index type to be finite or singletons of it to be measurable; results that need finitely many cells or measurable individual cells assume those conditions separately.

Definition (Lean source)
X :
Type*
ι :
Type*
The cell containing an observation.
cell :
X → ι
Cell membership is measurable.
measurable_cell :
Causalean.Mathlib.Probability.FiniteMarkedPoissonPartition.FiniteMeasurablePartition · Causalean/Mathlib/Probability/Poisson/FinitePartition/Partition/Basic.lean:25
def ofSets reviewed
Causalean.Mathlib.Probability.FiniteMarkedPoissonPartition.FiniteMeasurablePartition

Given a finite family of candidate cells, if each cell is measurable, distinct cells are disjoint, and the cells cover the space, the constructed partition assigns each observation to its unique cell.

Definition (Lean source)
X :
Type u_1
shared
ι :
Type u_2
shared
A :
ι → Set X
hA :
∀ j, MeasurableSet (A j)
hdis :
Pairwise (fun i j => Disjoint (A i) (A j))
hcover :
⋃ j, A j = univ
ofSets A hA hdis hcover :
by classical have hex : ∀ x : X, ∃ j : ι, x ∈ A j := by intro x have hx : x ∈ ⋃ j, A j := by rw [hcover]; exact Set.mem_univ x simpa only [Set.mem_iUnion] using hx let c : X → ι := fun x
=> choose (hex x) have hc_mem (x : X) : x ∈ A (c x) := Classical.choose_spec (hex x) have hc_fiber (j : ι) : c ⁻¹' {j} = A j := by ext x simp only [Set.mem_preimage, Set.mem_singleton_iff] constructor · intro hx rw [← hx] exact hc_mem x · intro hx by_contra hne exact Set.disjoint_left.1 (hdis hne) (hc_mem x) hx exact ⟨c, measurable_to_countable' fun j => hc_fiber j ▸ hA j⟩
Causalean.Mathlib.Probability.FiniteMarkedPoissonPartition.FiniteMeasurablePartition.ofSets · Causalean/Mathlib/Probability/Poisson/FinitePartition/Partition/Basic.lean:43 · uses FiniteMeasurablePartition
def cellSet reviewed
Causalean.Mathlib.Probability.FiniteMarkedPoissonPartition.FiniteMeasurablePartition

Given a measurable classifier partition and a cell index, the cell set consists of the observations assigned to that index.

Definition (Lean source)
X :
Type u_1
shared
ι :
Type u_2
shared
j :
ι
cellSet p j :
Set X
p.cell ⁻¹' {j}
Causalean.Mathlib.Probability.FiniteMarkedPoissonPartition.FiniteMeasurablePartition.cellSet · Causalean/Mathlib/Probability/Poisson/FinitePartition/Partition/Basic.lean:97 · uses FiniteMeasurablePartition
def cellMass reviewed
Causalean.Mathlib.Probability.FiniteMarkedPoissonPartition.FiniteMeasurablePartition

Given a measurable classifier partition, an observation measure, and a cell index, the cell mass is the measure of that cell as a nonnegative number. A cell of infinite measure is sent to zero by this conversion, so it is the cell's mass for finite (in particular probability) measures, as used throughout.

Definition (Lean source)
X :
Type u_1
shared
ι :
Type u_2
shared
P :
j :
ι
cellMass p P j :
ℝ≥0
(P (p.cellSet j)).toNNReal
Causalean.Mathlib.Probability.FiniteMarkedPoissonPartition.FiniteMeasurablePartition.cellMass · Causalean/Mathlib/Probability/Poisson/FinitePartition/Partition/Basic.lean:123 · uses FiniteMeasurablePartition
def cellObservationLaw reviewed
Causalean.Mathlib.Probability.FiniteMarkedPoissonPartition.FiniteMeasurablePartition

Given a measurable classifier partition, an observation probability law, and a cell index, the within-cell observation law is the normalized restriction to a positive-mass cell and the original law when the cell has zero mass.

Definition (Lean source)
X :
Type u_1
shared
ι :
Type u_2
shared
j :
ι
cellObservationLaw p P j :
if h : P (p.cellSet j) = 0 then P else (P (p.cellSet j))⁻¹ • P.restrict (p.cellSet j)
Causalean.Mathlib.Probability.FiniteMarkedPoissonPartition.FiniteMeasurablePartition.cellObservationLaw · Causalean/Mathlib/Probability/Poisson/FinitePartition/Partition/Basic.lean:152 · uses FiniteMeasurablePartition
def cellIndices reviewed
Causalean.Mathlib.Probability.FiniteMarkedPoissonPartition.FiniteMeasurablePartition

Given a measurable classifier partition, a cell index, and a finite marked sample, the cell indices are exactly the original sample positions whose observations belong to that cell.

Definition (Lean source)
X :
Type u_1
shared
ι :
Type u_2
shared
j :
ι
s :
FiniteSample (X × ℝ)
cellIndices p j s :
Finset (Fin s.count)
by classical exact Finset.univ.filter (fun k => p.cell (s.points k).1 = j)
Causalean.Mathlib.Probability.FiniteMarkedPoissonPartition.FiniteMeasurablePartition.cellIndices · Causalean/Mathlib/Probability/Poisson/FinitePartition/Partition/Basic.lean:186 · uses FiniteMeasurablePartition , FiniteSample , count
def restrictCell reviewed
Causalean.Mathlib.Probability.FiniteMarkedPoissonPartition.FiniteMeasurablePartition

Given a measurable classifier partition, a cell index, and a finite marked sample, the restriction to that cell retains exactly the pairs in the cell, preserving their original relative order.

Definition (Lean source)
X :
Type u_1
shared
ι :
Type u_2
shared
j :
ι
s :
FiniteSample (X × ℝ)
restrictCell p j s :
FiniteSample (X × ℝ)
by classical let t := p.cellIndices j s exact ⟨t.card, fun k
=> s.points (t.orderIsoOfFin rfl k)⟩
Causalean.Mathlib.Probability.FiniteMarkedPoissonPartition.FiniteMeasurablePartition.restrictCell · Causalean/Mathlib/Probability/Poisson/FinitePartition/Partition/Basic.lean:194 · uses FiniteMeasurablePartition , FiniteSample
def restrictPartition reviewed
Causalean.Mathlib.Probability.FiniteMarkedPoissonPartition.FiniteMeasurablePartition

Given a measurable classifier partition and a finite marked sample, the partition-wise restriction assigns each cell the pairs in that cell, preserving their original relative order.

Definition (Lean source)
X :
Type u_1
shared
ι :
Type u_2
shared
s :
FiniteSample (X × ℝ)
restrictPartition p s :
ι → FiniteSample (X × ℝ)
fun j => p.restrictCell j s
Causalean.Mathlib.Probability.FiniteMarkedPoissonPartition.FiniteMeasurablePartition.restrictPartition · Causalean/Mathlib/Probability/Poisson/FinitePartition/Partition/Basic.lean:203 · uses FiniteMeasurablePartition , FiniteSample
lemma measurable_restrictPartition reviewed
Causalean.Mathlib.Probability.FiniteMarkedPoissonPartition.FiniteMeasurablePartition

For a finite measurable partition, simultaneously restricting a finite marked sample to every cell is measurable.

Formal statement
X :
Type u_1
shared
ι :
Type u_2
shared
Measurable p.restrictPartition
Proof (Lean source)
@[fun_prop] lemma measurable_restrictPartition (p : FiniteMeasurablePartition X ι) : Measurable p.restrictPartition := by unfold restrictPartition exact measurable_pi_lambda _ fun j => p.measurable_restrictCell j
Causalean.Mathlib.Probability.FiniteMarkedPoissonPartition.FiniteMeasurablePartition.measurable_restrictPartition · Causalean/Mathlib/Probability/Poisson/FinitePartition/Partition/Basic.lean:285 · uses FiniteMeasurablePartition , restrictPartition , FiniteSample
8 supporting declarations (lemmas, instances)
  • ofSets_cellSet lemma — For a family of candidate cells, if each cell is measurable, distinct cells are disjoint, and the cells cover the observation space, then for each cell index, the corresponding classifier fibre is exactly the supplied cell.
    X :
    Type u_1
    shared
    ι :
    Type u_2
    shared
    A :
    ι → Set X
    hA :
    ∀ j, MeasurableSet (A j)
    hdis :
    Pairwise (fun i j => Disjoint (A i) (A j))
    hcover :
    ⋃ j, A j = univ
    j :
    ι
    (ofSets A hA hdis hcover).cell ⁻¹' {j} = A j
    Proof (Lean source)
    lemma ofSets_cellSet (A : ι → Set X) (hA : ∀ j, MeasurableSet (A j)) (hdis : Pairwise (fun i j => Disjoint (A i) (A j))) (hcover : ⋃ j, A j = univ) (j : ι) : (ofSets A hA hdis hcover).cell ⁻¹' {j} = A j := by classical unfold ofSets dsimp only ext x simp only [Set.mem_preimage, Set.mem_singleton_iff] constructor · intro hx rw [← hx] exact Classical.choose_spec (show ∃ k, x ∈ A k by have hx' : x ∈ ⋃ k, A k := by rw [hcover]; exact Set.mem_univ x simpa only [Set.mem_iUnion] using hx') · intro hx let hex : ∃ k, x ∈ A k := by have hx' : x ∈ ⋃ k, A k := by rw [hcover]; exact Set.mem_univ x simpa only [Set.mem_iUnion] using hx' by_contra hne exact Set.disjoint_left.1 (hdis hne) (Classical.choose_spec hex) hx
    Causalean.Mathlib.Probability.FiniteMarkedPoissonPartition.FiniteMeasurablePartition.ofSets_cellSet · Causalean/Mathlib/Probability/Poisson/FinitePartition/Partition/Basic.lean:69
  • measurableSet_cellSet lemma — For a measurable classifier partition and a cell index, the corresponding cell is measurable.
    X :
    Type u_1
    shared
    ι :
    Type u_2
    shared
    j :
    ι
    MeasurableSet (p.cellSet j)
    Proof (Lean source)
    lemma measurableSet_cellSet (p : FiniteMeasurablePartition X ι) (j : ι) : MeasurableSet (p.cellSet j) := by exact (measurableSet_singleton j).preimage p.measurable_cell
    Causalean.Mathlib.Probability.FiniteMarkedPoissonPartition.FiniteMeasurablePartition.measurableSet_cellSet · Causalean/Mathlib/Probability/Poisson/FinitePartition/Partition/Basic.lean:102
  • disjoint_cellSet lemma — For a measurable classifier partition, if two cell indices are distinct, their corresponding cells are disjoint.
    X :
    Type u_1
    shared
    ι :
    Type u_2
    shared
    i j :
    ι
    hij :
    i ≠ j
    Disjoint (p.cellSet i) (p.cellSet j)
    Proof (Lean source)
    lemma disjoint_cellSet (p : FiniteMeasurablePartition X ι) {i j : ι} (hij : i ≠ j) : Disjoint (p.cellSet i) (p.cellSet j) := by apply Set.disjoint_left.2 intro x hxi hxj exact hij (hxi.symm.trans hxj)
    Causalean.Mathlib.Probability.FiniteMarkedPoissonPartition.FiniteMeasurablePartition.disjoint_cellSet · Causalean/Mathlib/Probability/Poisson/FinitePartition/Partition/Basic.lean:108
  • iUnion_cellSet lemma — For a measurable classifier partition, the union of all its cells is the whole observation space.
    X :
    Type u_1
    shared
    ι :
    Type u_2
    shared
    ⋃ j : ι, p.cellSet j = univ
    Proof (Lean source)
    lemma iUnion_cellSet (p : FiniteMeasurablePartition X ι) : ⋃ j : ι, p.cellSet j = univ := by ext x simp [cellSet]
    Causalean.Mathlib.Probability.FiniteMarkedPoissonPartition.FiniteMeasurablePartition.iUnion_cellSet · Causalean/Mathlib/Probability/Poisson/FinitePartition/Partition/Basic.lean:116
  • sum_cellMass lemma — For a measurable classifier partition and an observation probability law, the masses of all partition cells sum to one.
    X :
    Type u_1
    shared
    ι :
    Type u_2
    shared
    ∑ j, p.cellMass P j = 1
    Proof (Lean source)
    lemma sum_cellMass (p : FiniteMeasurablePartition X ι) (P : Measure X) [IsProbabilityMeasure P] : ∑ j, p.cellMass P j = 1 := by apply ENNReal.coe_injective rw [ENNReal.coe_finset_sum] simp only [ENNReal.coe_one, cellMass] simp_rw [ENNReal.coe_toNNReal (measure_ne_top P _)] calc ∑ j, P (p.cellSet j) = P (⋃ j ∈ (Finset.univ : Finset ι), p.cellSet j) := by symm apply measure_biUnion_finset · intro i _ j _ hij exact p.disjoint_cellSet hij · intro j _ exact p.measurableSet_cellSet j _ = P (⋃ j, p.cellSet j) := by simp _ = 1 := by rw [p.iUnion_cellSet, measure_univ]
    Causalean.Mathlib.Probability.FiniteMarkedPoissonPartition.FiniteMeasurablePartition.sum_cellMass · Causalean/Mathlib/Probability/Poisson/FinitePartition/Partition/Basic.lean:132
  • cellObservationLaw_isProbabilityMeasure instance — The within-cell observation law is a probability measure for a measurable classifier partition, an observation probability law, and a selected cell, including when that cell has probability zero.
    X :
    Type u_1
    shared
    ι :
    Type u_2
    shared
    j :
    ι
    cellObservationLaw_isProbabilityMeasure p P j :
    IsProbabilityMeasure (p.cellObservationLaw P j)
    by unfold cellObservationLaw split_ifs with h · infer_instance · constructor rw [Measure.smul_apply, Measure.restrict_apply MeasurableSet.univ] simpa using ENNReal.inv_mul_cancel h (measure_ne_top P _)
    Causalean.Mathlib.Probability.FiniteMarkedPoissonPartition.FiniteMeasurablePartition.cellObservationLaw_isProbabilityMeasure · Causalean/Mathlib/Probability/Poisson/FinitePartition/Partition/Basic.lean:160
  • cellObservationLaw_apply_cellSet lemma — For a measurable classifier partition, an observation probability law, and a selected cell, if that cell has positive mass, its normalized within-cell law assigns probability one to the cell.
    X :
    Type u_1
    shared
    ι :
    Type u_2
    shared
    j :
    ι
    hj :
    P (p.cellSet j) ≠ 0
    p.cellObservationLaw P j (p.cellSet j) = 1
    Proof (Lean source)
    lemma cellObservationLaw_apply_cellSet (p : FiniteMeasurablePartition X ι) (P : Measure X) [IsProbabilityMeasure P] (j : ι) (hj : P (p.cellSet j) ≠ 0) : p.cellObservationLaw P j (p.cellSet j) = 1 := by rw [cellObservationLaw, dif_neg hj, Measure.smul_apply, Measure.restrict_apply (p.measurableSet_cellSet j)] simpa using ENNReal.inv_mul_cancel hj (measure_ne_top P _)
    Causalean.Mathlib.Probability.FiniteMarkedPoissonPartition.FiniteMeasurablePartition.cellObservationLaw_apply_cellSet · Causalean/Mathlib/Probability/Poisson/FinitePartition/Partition/Basic.lean:174
  • measurable_restrictCell lemma — For a measurable classifier partition and a selected cell, restricting a finite marked sample to that cell is measurable.
    X :
    Type u_1
    shared
    ι :
    Type u_2
    shared
    j :
    ι
    Measurable (p.restrictCell j)
    Proof (Lean source)
    @[fun_prop] lemma measurable_restrictCell (p : FiniteMeasurablePartition X ι) (j : ι) : Measurable (p.restrictCell j) := by classical intro s hs rw [MeasurableSpace.measurableSet_iInf] at hs ⊢ intro n change MeasurableSet (fixedSizeEmbed n ⁻¹' (p.restrictCell j ⁻¹' s)) rw [show fixedSizeEmbed n ⁻¹' (p.restrictCell j ⁻¹' s) = ⋃ t : Finset (Fin n), {x : Fin n → X × ℝ | p.cellIndices j (fixedSizeEmbed n x) = t} ∩ (fun x : Fin n → X × ℝ => fun k => x (t.orderIsoOfFin rfl k)) ⁻¹' (fixedSizeEmbed t.card ⁻¹' s) by ext x simp only [mem_preimage, mem_iUnion, mem_inter_iff, mem_setOf_eq] constructor · intro hx let t := p.cellIndices j (fixedSizeEmbed n x) refine ⟨t, rfl, ?_⟩ exact hx · rintro ⟨t, ht, hx⟩ subst t exact hx] apply MeasurableSet.iUnion intro t apply MeasurableSet.inter · rw [show {x : Fin n → X × ℝ | p.cellIndices j (fixedSizeEmbed n x) = t} = ⋂ k : Fin n, if k ∈ t then {x : Fin n → X × ℝ | p.cell (x k).1 = j} else {x : Fin n → X × ℝ | p.cell (x k).1 = j}ᶜ by ext x simp only [Set.mem_setOf_eq, Set.mem_iInter] refine Iff.trans Finset.ext_iff ?_ simp only [cellIndices, FiniteSample.count, FiniteSample.points, fixedSizeEmbed, mem_filter, Finset.mem_univ, true_and] apply forall_congr' intro k by_cases hkt : k ∈ t · simp only [hkt, if_true, Set.mem_setOf_eq] constructor · intro h exact (Finset.mem_filter.1 (h.2 hkt)).2 · intro hk constructor · intro _ exact hkt · intro _ exact Finset.mem_filter.2 ⟨Finset.mem_univ _, hk⟩ · simp only [hkt, if_false, Set.mem_compl_iff, Set.mem_setOf_eq] constructor · intro h hk have hkf : k ∈ ({k | p.cell (x k).1 = j} : Finset (Fin n)) := Finset.mem_filter.2 ⟨Finset.mem_univ _, hk⟩ exact hkt (h.1 hkf) · intro hk constructor · intro hkf exact (hk (Finset.mem_filter.1 hkf).2).elim · intro hkt' exact (hkt hkt').elim] apply MeasurableSet.iInter intro k split_ifs · exact (p.measurable_cell.comp ((measurable_pi_apply k).fst)) (measurableSet_singleton j) · exact ((p.measurable_cell.comp ((measurable_pi_apply k).fst)) (measurableSet_singleton j)).compl · have hst : MeasurableSet (fixedSizeEmbed t.card ⁻¹' s) := hs t.card exact hst.preimage (by fun_prop)
    Causalean.Mathlib.Probability.FiniteMarkedPoissonPartition.FiniteMeasurablePartition.measurable_restrictCell · Causalean/Mathlib/Probability/Poisson/FinitePartition/Partition/Basic.lean:210
Cell­Laws 1 core · 1 supporting This file derives each cell's Poisson count law and its exact conditional marked sample law from the joint finite-partition splitting theorem. ★ map_restrictCell_count_finiteMarkedPoissonSampleLaw

Marginal laws for partition cells

This file derives each cell's Poisson count law and its exact conditional marked sample law from the joint finite-partition splitting theorem.

lemma map_restrictCell_count_finiteMarkedPoissonSampleLaw reviewed
Causalean.Mathlib.Probability.FiniteMarkedPoissonPartition.FiniteMeasurablePartition

Cell counts are Poisson. For a finite measurable partition, an observation probability law, a real-valued mark law, a nonnegative intensity, and a selected cell, the cell count is Poisson with mean equal to intensity times cell mass.

Formal statement
X :
Type u_1
shared
ι :
Type u_2
shared
lam :
ℝ≥0
j :
ι
Measure.map (fun s => (p.restrictCell j s).count) (finiteMarkedPoissonSampleLaw P R lam)
= poissonMeasure (lam * p.cellMass P j)
Proof (Lean source)
lemma map_restrictCell_count_finiteMarkedPoissonSampleLaw [StandardBorelSpace X] (p : FiniteMeasurablePartition X ι) (P : Measure X) [IsProbabilityMeasure P] (R : Measure ℝ) [IsProbabilityMeasure R] (lam : ℝ≥0) (j : ι) : Measure.map (fun s => (p.restrictCell j s).count) (finiteMarkedPoissonSampleLaw P R lam) = poissonMeasure (lam * p.cellMass P j) := by /- Prefer deriving this from the joint splitting theorem by mapping the `j`th coordinate and then the measurable count map; `Measure.pi_map_eval` gives the marginal of the finite product. A separate thinning calculation should only be used if it materially shortens the proof. -/ classical let μ := finiteMarkedPoissonSampleLaw P R lam let ν : ι → Measure (FiniteSample (X × ℝ)) := fun k => finiteMarkedPoissonSampleLaw (p.cellObservationLaw P k) R (lam * p.cellMass P k) have hjoint : Measure.map p.restrictPartition μ = Measure.pi ν := by exact map_restrictPartition_finiteMarkedPoissonSampleLaw p P R lam have hcell : Measure.map (p.restrictCell j) μ = ν j := by calc Measure.map (p.restrictCell j) μ = Measure.map (Function.eval j) (Measure.map p.restrictPartition μ) := by rw [Measure.map_map (measurable_pi_apply j) p.measurable_restrictPartition] rfl _ = Measure.map (Function.eval j) (Measure.pi ν) := by rw [hjoint] _ = ν j := by rw [Measure.pi_map_eval] simp [ν] change Measure.map (FiniteSample.count ∘ p.restrictCell j) μ = poissonMeasure (lam * p.cellMass P j) rw [← Measure.map_map measurable_finiteSample_count (p.measurable_restrictCell j), hcell] exact finiteMarkedPoissonSampleLaw_map_count (p.cellObservationLaw P j) R (lam * p.cellMass P j)
Causalean.Mathlib.Probability.FiniteMarkedPoissonPartition.FiniteMeasurablePartition.map_restrictCell_count_finiteMarkedPoissonSampleLaw · Causalean/Mathlib/Probability/Poisson/FinitePartition/Partition/CellLaws.lean:23 · uses FiniteMeasurablePartition , cellMass , restrictCell , FiniteSample , count , finiteMarkedPoissonSampleLaw
1 supporting declaration (lemmas, instances)
Splitting 8 core · 4 supporting This file proves the exact joint law of the restrictions of a finite marked Poisson sample to the cells of a finite measurable partition. ★ map_restrictPartition_finiteMarkedPoissonSampleLaw

Poisson splitting across a finite partition

This file proves the exact joint law of the restrictions of a finite marked Poisson sample to the cells of a finite measurable partition. The proof tracks the complete vector of cell counts and combines the multinomial count allocation with the conditional product laws within cells.

def wordHistogram reviewed
Causalean.Mathlib.Probability.FiniteMarkedPoissonPartition.FiniteMeasurablePartition

For a finite label sequence and a label, the histogram count is the number of positions carrying that label.

Definition (Lean source)
ι :
Type u_2
shared
n :
ℕ
w :
Fin n → ι
j :
ι
wordHistogram w j :
ℕ
by classical exact (Finset.univ.filter fun k => w k = j).card
Causalean.Mathlib.Probability.FiniteMarkedPoissonPartition.FiniteMeasurablePartition.wordHistogram · Causalean/Mathlib/Probability/Poisson/FinitePartition/Partition/Splitting.lean:28
def histogramWords reviewed
Causalean.Mathlib.Probability.FiniteMarkedPoissonPartition.FiniteMeasurablePartition

For a sequence length and a vector of label counts, the set of label sequences with that histogram collects every length-n sequence whose number of positions carrying each label equals the prescribed count.

Definition (Lean source)
ι :
Type u_2
shared
n :
ℕ
c :
ι → ℕ
histogramWords n c :
Finset (Fin n → ι)
by classical exact Finset.univ.filter fun w => ∀ j, wordHistogram w j = c j
Causalean.Mathlib.Probability.FiniteMarkedPoissonPartition.FiniteMeasurablePartition.histogramWords · Causalean/Mathlib/Probability/Poisson/FinitePartition/Partition/Splitting.lean:34
def wordIndices reviewed
Causalean.Mathlib.Probability.FiniteMarkedPoissonPartition.FiniteMeasurablePartition

For a finite label sequence and a label, the label-index set contains exactly the positions carrying that label.

Definition (Lean source)
ι :
Type u_2
shared
n :
ℕ
w :
Fin n → ι
j :
ι
wordIndices w j :
by classical exact Finset.univ.filter fun k => w k = j
Causalean.Mathlib.Probability.FiniteMarkedPoissonPartition.FiniteMeasurablePartition.wordIndices · Causalean/Mathlib/Probability/Poisson/FinitePartition/Partition/Splitting.lean:198
def wordFiberEquiv reviewed
Causalean.Mathlib.Probability.FiniteMarkedPoissonPartition.FiniteMeasurablePartition

For a finite label sequence and a label, the ordered correspondence matches occurrence numbers for that label with exactly the positions where it occurs.

Definition (Lean source)
ι :
Type u_2
shared
n :
ℕ
w :
Fin n → ι
j :
ι
wordFiberEquiv w j :
Fin (wordHistogram w j) ≃ {k : Fin n // w k = j}
by classical exact ((wordIndices w j).orderIsoOfFin (wordIndices_card w j).symm).toEquiv.trans (Equiv.subtypeEquiv (Equiv.refl _) (by simp [wordIndices]))
Causalean.Mathlib.Probability.FiniteMarkedPoissonPartition.FiniteMeasurablePartition.wordFiberEquiv · Causalean/Mathlib/Probability/Poisson/FinitePartition/Partition/Splitting.lean:211 · uses wordHistogram
def wordUnshuffleEquiv reviewed
Causalean.Mathlib.Probability.FiniteMarkedPoissonPartition.FiniteMeasurablePartition

For a finite label sequence, the unshuffling correspondence matches all label-specific occurrence slots with the original sample positions.

Definition (Lean source)
ι :
Type u_2
shared
n :
ℕ
w :
Fin n → ι
wordUnshuffleEquiv w :
(Σ j : ι, Fin (wordHistogram w j)) ≃ Fin n
by classical exact (Equiv.sigmaCongrRight fun j => wordFiberEquiv w j).trans (Equiv.sigmaFiberEquiv w)
Causalean.Mathlib.Probability.FiniteMarkedPoissonPartition.FiniteMeasurablePartition.wordUnshuffleEquiv · Causalean/Mathlib/Probability/Poisson/FinitePartition/Partition/Splitting.lean:219 · uses wordHistogram
def gatherWord reviewed
Causalean.Mathlib.Probability.FiniteMarkedPoissonPartition.FiniteMeasurablePartition

Given an assignment of positions to cell indices and a tuple of points, the cell-wise regrouping assigns each cell the points with its label in their original order.

Definition (Lean source)
ι :
Type u_2
shared
Y :
n :
ℕ
w :
Fin n → ι
z :
Fin n → Y
j :
gatherWord w z j :
Fin (wordHistogram w j) → Y
fun j k => z (wordUnshuffleEquiv w ⟨j, k⟩)
Causalean.Mathlib.Probability.FiniteMarkedPoissonPartition.FiniteMeasurablePartition.gatherWord · Causalean/Mathlib/Probability/Poisson/FinitePartition/Partition/Splitting.lean:249 · uses wordHistogram
def fixedPartitionEmbed reviewed
Causalean.Mathlib.Probability.FiniteMarkedPoissonPartition.FiniteMeasurablePartition

Given a count for every cell and a matching point tuple for every cell, the fixed partition embedding assigns each cell the finite sample with that count and tuple.

Definition (Lean source)
ι :
Type u_2
shared
Y :
c :
ι → ℕ
z :
∀ j
if
Fin (c j)
then
Y
fixedPartitionEmbed c z :
ι → FiniteSample Y
fun j => fixedSizeEmbed (c j) (z j)
Causalean.Mathlib.Probability.FiniteMarkedPoissonPartition.FiniteMeasurablePartition.fixedPartitionEmbed · Causalean/Mathlib/Probability/Poisson/FinitePartition/Partition/Splitting.lean:342 · uses FiniteSample
lemma map_restrictPartition_finiteMarkedPoissonSampleLaw reviewed
Causalean.Mathlib.Probability.FiniteMarkedPoissonPartition.FiniteMeasurablePartition

Partition splitting. For a finite measurable partition, an observation probability law, a real-valued mark law, and a nonnegative intensity, cell restrictions are independent marked Poisson samples with mass-scaled intensities.

Formal statement
X :
Type u_1
shared
ι :
Type u_2
shared
lam :
ℝ≥0
Measure.map p.restrictPartition (finiteMarkedPoissonSampleLaw P R lam)
= Measure.pi (fun j : ι => finiteMarkedPoissonSampleLaw (p.cellObservationLaw P j) R (lam * p.cellMass P j))
Proof (Lean source)
lemma map_restrictPartition_finiteMarkedPoissonSampleLaw [StandardBorelSpace X] (p : FiniteMeasurablePartition X ι) (P : Measure X) [IsProbabilityMeasure P] (R : Measure ℝ) [IsProbabilityMeasure R] (lam : ℝ≥0) : Measure.map p.restrictPartition (finiteMarkedPoissonSampleLaw P R lam) = Measure.pi (fun j : ι => finiteMarkedPoissonSampleLaw (p.cellObservationLaw P j) R (lam * p.cellMass P j)) := by /- Proof route for the filler: disintegrate both sides over the complete cell-count vector `c : ι → ℕ`. On a fixed global count, partition the i.i.d. tuple by its classifier word; each word with histogram `c` pushes forward to the same product of the fixed-size within-cell laws, up to coordinate reindexing. Count the words in that histogram fibre and combine its multinomial factor with the scalar Poisson mass. The resulting coefficient is the product of the cell Poisson masses. Treat zero-mass cells before cancelling cell masses. `Measure.pi_map_piCongrLeft` and `measurePreserving_piCongrLeft` are the intended permutation tools. -/ let μ := Measure.map p.restrictPartition (finiteMarkedPoissonSampleLaw P R lam) let ν := Measure.pi (fun j : ι => finiteMarkedPoissonSampleLaw (p.cellObservationLaw P j) R (lam * p.cellMass P j)) have hrest (c : ι → ℕ) : μ.restrict (partitionCountFiber (Y := X × ℝ) c) = ν.restrict (partitionCountFiber (Y := X × ℝ) c) := by rw [show μ = Measure.map p.restrictPartition (finiteMarkedPoissonSampleLaw P R lam) by rfl, map_restrictPartition_restrict_partitionCountFiber p P R lam c] rw [show ν = Measure.pi (fun j : ι => finiteMarkedPoissonSampleLaw (p.cellObservationLaw P j) R (lam * p.cellMass P j)) by rfl, pi_cellLaws_restrict_partitionCountFiber p P R lam c] rw [poisson_multinomial_coefficient lam (p.cellMass P) (p.sum_cellMass P) c] have hdis : Pairwise (onFun Disjoint (fun c : ι → ℕ => partitionCountFiber (Y := X × ℝ) c)) := by intro c d hcd apply Set.disjoint_left.2 intro q hqc hqd apply hcd funext j exact (hqc j).symm.trans (hqd j) have hcover : ⋃ c : ι → ℕ, partitionCountFiber (Y := X × ℝ) c = univ := by ext q simp only [Set.mem_iUnion, Set.mem_univ, iff_true] exact ⟨fun j => (q j).count, fun _ => rfl⟩ change μ = ν calc μ = μ.restrict univ := by rw [Measure.restrict_univ] _ = μ.restrict (⋃ c : ι → ℕ, partitionCountFiber (Y := X × ℝ) c) := by rw [hcover] _ = Measure.sum (fun c : ι → ℕ => μ.restrict (partitionCountFiber (Y := X × ℝ) c)) := by exact Measure.restrict_iUnion hdis measurableSet_partitionCountFiber _ = Measure.sum (fun c : ι → ℕ => ν.restrict (partitionCountFiber (Y := X × ℝ) c)) := by congr 1 funext c exact hrest c _ = ν.restrict (⋃ c : ι → ℕ, partitionCountFiber (Y := X × ℝ) c) := by exact (Measure.restrict_iUnion hdis measurableSet_partitionCountFiber).symm _ = ν.restrict univ := by rw [hcover] _ = ν := Measure.restrict_univ
4 supporting declarations (lemmas, instances)
  • histogramWords_card theorem — If the label counts sum to the sequence length, then the number of label sequences with that histogram is the multinomial coefficient of the counts.
    ι :
    Type u_2
    shared
    n :
    ℕ
    c :
    ι → ℕ
    hc :
    ∑ j, c j = n
    Proof (Lean source)
    theorem histogramWords_card (n : ℕ) (c : ι → ℕ) (hc : ∑ j, c j = n) : (histogramWords n c).card = multinomial univ c := by classical let e : (Σ j : ι, Fin (c j)) ≃ Fin n := Fintype.equivOfCardEq (by simpa using hc) let w₀ : Fin n → ι := wordOfEquiv c e have hw₀ (j : ι) : wordHistogram w₀ j = c j := wordOfEquiv_histogram c e j let H : Set (Fin n → ι) := {w | ∀ j, wordHistogram w j = c j} letI : Fintype (Perm (Fin n))ᵈᵐᵃ := Fintype.ofEquiv (Perm (Fin n)) DomMulAct.mk have horbit : MulAction.orbit (Perm (Fin n))ᵈᵐᵃ w₀ = H := by ext w constructor · rintro ⟨g, rfl⟩ intro j rw [← hw₀ j] unfold wordHistogram rw [← Fintype.card_subtype, ← Fintype.card_subtype] apply Fintype.card_congr exact Equiv.subtypeEquiv (DomMulAct.mk.symm g : Perm (Fin n)) (by intro k simp [DomMulAct.smul_apply]) · intro hw have hcard (j : ι) : card {k : Fin n // w₀ k = j} = card {k : Fin n // w k = j} := by rw [Fintype.card_subtype, Fintype.card_subtype] exact (hw₀ j).trans (hw j).symm let g : Perm (Fin n) := Equiv.ofFiberEquiv fun j => Fintype.equivOfCardEq (hcard j) refine ⟨DomMulAct.mk g.symm, ?_⟩ funext k change (DomMulAct.mk g.symm • w₀) k = w k rw [DomMulAct.smul_apply] change w₀ (g.symm k) = w k symm have hg := Equiv.ofFiberEquiv_map (fun j => Fintype.equivOfCardEq (hcard j)) (g.symm k) change w (g (g.symm k)) = w₀ (g.symm k) at hg simpa using hg have hcardH : card H = (histogramWords n c).card := by rw [Fintype.card_subtype] congr 1 have horbitCard : card H * ∏ j, (c j).factorial = n.factorial := by have hos := MulAction.card_orbit_mul_card_stabilizer_eq_card_group (Perm (Fin n))ᵈᵐᵃ w₀ have hstab : card (MulAction.stabilizer (Perm (Fin n))ᵈᵐᵃ w₀) = ∏ j, (c j).factorial := by rw [show card (MulAction.stabilizer (Perm (Fin n))ᵈᵐᵃ w₀) = card {g : Perm (Fin n) // w₀ ∘ g = w₀} by apply Fintype.card_congr exact Equiv.subtypeEquiv DomMulAct.mk.symm (fun g => DomMulAct.mem_stabilizer_iff), DomMulAct.stabilizer_card w₀] congr 2 with j rw [Fintype.card_subtype] change (wordHistogram w₀ j).factorial = (c j).factorial exact congrArg factorial (hw₀ j) have hdom : card (Perm (Fin n))ᵈᵐᵃ = n.factorial := by rw [← Fintype.card_congr (DomMulAct.mk : Perm (Fin n) ≃ (Perm (Fin n))ᵈᵐᵃ), Fintype.card_perm, Fintype.card_fin] have horbitCardEq : card (MulAction.orbit (Perm (Fin n))ᵈᵐᵃ w₀) = card H := Fintype.card_congr (Equiv.setCongr horbit) rw [horbitCardEq, hstab, hdom] at hos exact hos have hmulti := Nat.multinomial_spec univ c rw [hc] at hmulti rw [← hcardH] apply Nat.eq_of_mul_eq_mul_right (Nat.prod_factorial_pos univ c) simpa [mul_comm] using horbitCard.trans hmulti.symm
    Causalean.Mathlib.Probability.FiniteMarkedPoissonPartition.FiniteMeasurablePartition.histogramWords_card · Causalean/Mathlib/Probability/Poisson/FinitePartition/Partition/Splitting.lean:96
  • wordIndices_card lemma — For a finite label sequence and a label, the number of its positions equals its histogram count.
    ι :
    Type u_2
    shared
    n :
    ℕ
    w :
    Fin n → ι
    j :
    ι
    (wordIndices w j).card = wordHistogram w j
    Proof (Lean source)
    lemma wordIndices_card {n : ℕ} (w : Fin n → ι) (j : ι) : (wordIndices w j).card = wordHistogram w j := by rfl
    Causalean.Mathlib.Probability.FiniteMarkedPoissonPartition.FiniteMeasurablePartition.wordIndices_card · Causalean/Mathlib/Probability/Poisson/FinitePartition/Partition/Splitting.lean:205
  • measurable_gatherWord lemma — For a finite cell-label sequence, regrouping a tuple of points by those labels is measurable.
    ι :
    Type u_2
    shared
    Y :
    n :
    ℕ
    w :
    Fin n → ι
    Measurable (gatherWord (Y := Y) w)
    Proof (Lean source)
    @[fun_prop] lemma measurable_gatherWord {Y : Type*} [MeasurableSpace Y] {n : ℕ} (w : Fin n → ι) : Measurable (gatherWord (Y := Y) w) := by have hfun : gatherWord (Y := Y) w = piCurry (fun j : ι => fun _ : Fin (wordHistogram w j) => Y) ∘ MeasurableEquiv.piCongrLeft (fun _ : Σ j : ι, Fin (wordHistogram w j) => Y) (wordEquiv w) := by funext z j k simp only [Function.comp_apply] rw [MeasurableEquiv.piCurry_apply] change z (wordUnshuffleEquiv w ⟨j, k⟩) = (Equiv.piCongrLeft (fun _ : Σ j, Fin (wordHistogram w j) => Y) (wordEquiv w)) z ⟨j, k⟩ rw [Equiv.piCongrLeft_apply] simp [wordEquiv] exact (eq_rec_constant _ _).symm rw [hfun] exact (piCurry _).measurable.comp (MeasurableEquiv.piCongrLeft _ (wordEquiv w)).measurable
    Causalean.Mathlib.Probability.FiniteMarkedPoissonPartition.FiniteMeasurablePartition.measurable_gatherWord · Causalean/Mathlib/Probability/Poisson/FinitePartition/Partition/Splitting.lean:263
  • measurable_fixedPartitionEmbed lemma — For a prescribed count in every cell, embedding one tuple per cell as finite samples is measurable.
    ι :
    Type u_2
    shared
    Y :
    c :
    ι → ℕ
    Proof (Lean source)
    @[fun_prop] lemma measurable_fixedPartitionEmbed {Y : Type*} [MeasurableSpace Y] (c : ι → ℕ) : Measurable (fixedPartitionEmbed (Y := Y) c) := by apply measurable_pi_lambda intro j exact (measurable_fixedSizeEmbed (c j)).comp (measurable_pi_apply j)
    Causalean.Mathlib.Probability.FiniteMarkedPoissonPartition.FiniteMeasurablePartition.measurable_fixedPartitionEmbed · Causalean/Mathlib/Probability/Poisson/FinitePartition/Partition/Splitting.lean:349