Mathlib.Probability.Poisson.Poincare

Poincaré inequalities for Poisson processes, from foundational difference operators through scalar, series, tensorized, and L² forms.

Tensorization 7 core · 2 supporting This module tensorizes variance over Measure.pi, using coordinate replacement to express conditional variances and add-one increments. ★ poissonPi_addOne_poincare

Finite-product tensorization of Poisson add-one Poincaré inequalities

This module tensorizes variance over Measure.pi, using coordinate replacement to express conditional variances and add-one increments. It also provides a nested paired-coordinate form whose sample space is directly of the shape i → j → Nat × Nat.

def coordinateReplace reviewed
Causalean.Mathlib.Probability.PoissonAddOnePoincare

A coordinate, dependent-product observation, and replacement value determine the observation with that coordinate replaced, given by updating exactly the selected coordinate.

Definition (Lean source)
iota :
Type*
iota → Type*
i :
iota
x :
(j : iota) → X j
y :
X i
j :
iota
coordinateReplace i x y j :
X j
update x i y
Causalean.Mathlib.Probability.PoissonAddOnePoincare.coordinateReplace · Causalean/Mathlib/Probability/Poisson/Poincare/Tensorization.lean:30
def coordinateAddOne reviewed
Causalean.Mathlib.Probability.PoissonAddOnePoincare

A coordinate, real-valued statistic, and count-vector observation determine the statistic's add-one increment in that coordinate, given by increasing the selected count by one and subtracting the original statistic.

Definition (Lean source)
iota :
Type*
i :
iota
F :
(iota → Nat) → Real
x :
iota → Nat
coordinateAddOne i F x :
F (update x i (x i + 1)) - F x
Causalean.Mathlib.Probability.PoissonAddOnePoincare.coordinateAddOne · Causalean/Mathlib/Probability/Poisson/Poincare/Tensorization.lean:36
def poissonPi reviewed
Causalean.Mathlib.Probability.PoissonAddOnePoincare

A finite collection of nonnegative Poisson rates determines the product law of independent Poisson counts, given by the coordinatewise product of their Poisson laws.

Definition (Lean source)
iota :
Type*
Fintype iota
lambda :
iota → NNReal
poissonPi lambda :
Measure (iota → Nat)
Measure.pi fun i ↦ poissonMeasure (lambda i)
Causalean.Mathlib.Probability.PoissonAddOnePoincare.poissonPi · Causalean/Mathlib/Probability/Poisson/Poincare/Tensorization.lean:42
theorem poissonPi_addOne_poincare reviewed
Causalean.Mathlib.Probability.PoissonAddOnePoincare

For a finite collection of nonnegative Poisson rates, a real-valued statistic of the count vector that is square-integrable and whose coordinate add-one increments are square-integrable has variance bounded by the sum of rate-weighted expected squared coordinate increments.

Formal statement
iota :
Type*
Fintype iota
lambda :
iota → NNReal
F :
(iota → Nat) → Real
hF :
MemLp F 2 (poissonPi lambda)
hD :
∀ i, MemLp (coordinateAddOne i F) 2 (poissonPi lambda)
variance F (poissonPi lambda)
≤ ∑ i : iota, (lambda i : Real) * ∫ x, (coordinateAddOne i F x) ^ 2 ∂(poissonPi lambda)
Proof (Lean source)
theorem poissonPi_addOne_poincare {iota : Type*} [Fintype iota] [DecidableEq iota] (lambda : iota → NNReal) (F : (iota → Nat) → Real) (hF : MemLp F 2 (poissonPi lambda)) (hD : ∀ i, MemLp (coordinateAddOne i F) 2 (poissonPi lambda)) : variance F (poissonPi lambda) ≤ ∑ i : iota, (lambda i : Real) * ∫ x, (coordinateAddOne i F x) ^ 2 ∂(poissonPi lambda) := by classical let e : Fin (card iota) ≃ iota := (Fintype.equivFin iota).symm let phi := MeasurableEquiv.piCongrLeft (fun _ : iota ↦ Nat) e let lambda' : Fin (card iota) → NNReal := fun k ↦ lambda (e k) let G : (Fin (card iota) → Nat) → Real := F ∘ phi have hmp := measurePreserving_piCongrLeft (fun i ↦ poissonMeasure (lambda i)) e have hG : MemLp G 2 (poissonPi lambda') := hF.comp_measurePreserving hmp have hDG (k : Fin (card iota)) : MemLp (coordinateAddOne k G) 2 (poissonPi lambda') := by have heq : coordinateAddOne k G = coordinateAddOne (e k) F ∘ phi := by funext z simp only [coordinateAddOne, G, Function.comp_apply] rw [piCongrLeft_update_const e z k (z k + 1)] rw [MeasurableEquiv.piCongrLeft_apply_apply] rw [heq] exact (hD (e k)).comp_measurePreserving hmp have hfin := poissonPi_fin_addOne_poincare (card iota) lambda' G hG hDG have hvar := hmp.variance_fun_comp hF.aemeasurable rw [show variance F (poissonPi lambda) = variance G (poissonPi lambda') by exact hvar.symm] calc variance G (poissonPi lambda') ≤ ∑ k, (lambda' k : Real) * ∫ z, (coordinateAddOne k G z) ^ 2 ∂(poissonPi lambda') := hfin _ = ∑ k, (lambda (e k) : Real) * ∫ x, (coordinateAddOne (e k) F x) ^ 2 ∂(poissonPi lambda) := by apply Finset.sum_congr rfl intro k _ congr 1 change (∫ z, (coordinateAddOne k G z) ^ 2 ∂Measure.pi (fun j ↦ poissonMeasure (lambda (e j)))) = ∫ x, (coordinateAddOne (e k) F x) ^ 2 ∂Measure.pi (fun i ↦ poissonMeasure (lambda i)) rw [← hmp.integral_comp'] apply integral_congr_ae filter_upwards with z simp only [coordinateAddOne, G, Function.comp_apply] rw [piCongrLeft_update_const e z k (z k + 1)] rw [MeasurableEquiv.piCongrLeft_apply_apply] _ = _ := e.sum_comp (fun i ↦ (lambda i : Real) * ∫ x, (coordinateAddOne i F x) ^ 2 ∂(poissonPi lambda))
Causalean.Mathlib.Probability.PoissonAddOnePoincare.poissonPi_addOne_poincare · Causalean/Mathlib/Probability/Poisson/Poincare/Tensorization.lean:562 · uses coordinateAddOne , poissonPi
def nestedPairedPoissonMeasure reviewed
Causalean.Mathlib.Probability.PoissonAddOnePoincare

Two arrays of nonnegative Poisson rates determine the nested product law of independent Poisson-count pairs, given by independent two-count product laws in every array cell.

Definition (Lean source)
iota kappa :
Type*
Fintype iota
Fintype kappa
lambda₁ lambda₂ :
iota → kappa → NNReal
nestedPairedPoissonMeasure lambda₁ lambda₂ :
Measure (iota → kappa → Nat × Nat)
Measure.pi fun i ↦ Measure.pi fun j ↦ (poissonMeasure (lambda₁ i j)).prod (poissonMeasure (lambda₂ i j))
Causalean.Mathlib.Probability.PoissonAddOnePoincare.nestedPairedPoissonMeasure · Causalean/Mathlib/Probability/Poisson/Poincare/Tensorization.lean:614
def nestedPairAddOneFst reviewed
Causalean.Mathlib.Probability.PoissonAddOnePoincare

A first array coordinate, second array coordinate, real-valued nested-array statistic, and nested count-pair observation determine the increment from adding one to that cell's first count, given by updating the selected first count and subtracting the original statistic.

Definition (Lean source)
iota kappa :
Type*
i :
iota
j :
kappa
F :
(iota → kappa → Nat × Nat) → Real
x :
iota → kappa → Nat × Nat
nestedPairAddOneFst i j F x :
F (update x i (update (x i) j ((x i j).1 + 1, (x i j).2))) - F x
Causalean.Mathlib.Probability.PoissonAddOnePoincare.nestedPairAddOneFst · Causalean/Mathlib/Probability/Poisson/Poincare/Tensorization.lean:622
def nestedPairAddOneSnd reviewed
Causalean.Mathlib.Probability.PoissonAddOnePoincare

A first array coordinate, second array coordinate, real-valued nested-array statistic, and nested count-pair observation determine the increment from adding one to that cell's second count, given by updating the selected second count and subtracting the original statistic.

Definition (Lean source)
iota kappa :
Type*
i :
iota
j :
kappa
F :
(iota → kappa → Nat × Nat) → Real
x :
iota → kappa → Nat × Nat
nestedPairAddOneSnd i j F x :
F (update x i (update (x i) j ((x i j).1, (x i j).2 + 1))) - F x
Causalean.Mathlib.Probability.PoissonAddOnePoincare.nestedPairAddOneSnd · Causalean/Mathlib/Probability/Poisson/Poincare/Tensorization.lean:631
2 supporting declarations (lemmas, instances)
  • variance_pi_le_sum_integral_coordinateVariance theorem — For a finite family of probability laws, a real-valued statistic of their product observation that is square-integrable has variance bounded by the sum of expected conditional variances from resampling one coordinate at a time.
    iota :
    Type*
    Fintype iota
    iota → Type*
    (i : iota) → MeasurableSpace (X i)
    mu :
    (i : iota) → Measure (X i)
    ∀ i, IsProbabilityMeasure (mu i)
    F :
    ((i : iota) → X i) → Real
    hF :
    MemLp F 2 (Measure.pi mu)
    variance F (Measure.pi mu)
    ≤ ∑ i : iota, ∫ x, variance (fun y ↦ F (coordinateReplace i x y)) (mu i) ∂(Measure.pi mu)
    Proof (Lean source)
    theorem variance_pi_le_sum_integral_coordinateVariance {iota : Type*} [Fintype iota] [DecidableEq iota] {X : iota → Type*} [(i : iota) → MeasurableSpace (X i)] (mu : (i : iota) → Measure (X i)) [∀ i, IsProbabilityMeasure (mu i)] (F : ((i : iota) → X i) → Real) (hF : MemLp F 2 (Measure.pi mu)) : variance F (Measure.pi mu) ≤ ∑ i : iota, ∫ x, variance (fun y ↦ F (coordinateReplace i x y)) (mu i) ∂(Measure.pi mu) := by classical let e : Fin (card iota) ≃ iota := (Fintype.equivFin iota).symm let phi := MeasurableEquiv.piCongrLeft X e let nu : (k : Fin (card iota)) → Measure (X (e k)) := fun k ↦ mu (e k) let G : ((k : Fin (card iota)) → X (e k)) → Real := F ∘ phi have hmp := measurePreserving_piCongrLeft mu e have hG : MemLp G 2 (Measure.pi nu) := by exact hF.comp_measurePreserving hmp have h := variance_pi_fin (card iota) nu G hG have hvar := hmp.variance_fun_comp hF.aemeasurable rw [show variance F (Measure.pi mu) = variance G (Measure.pi nu) by exact hvar.symm] calc variance G (Measure.pi nu) ≤ ∑ k, ∫ z, variance (fun y ↦ G (update z k y)) (nu k) ∂(Measure.pi nu) := h _ = ∑ k, ∫ x, variance (fun y ↦ F (coordinateReplace (e k) x y)) (mu (e k)) ∂(Measure.pi mu) := by apply Finset.sum_congr rfl intro k _ rw [← hmp.integral_comp'] apply integral_congr_ae filter_upwards with z congr 1 funext y apply congrArg F funext a obtain ⟨j, rfl⟩ := e.surjective a by_cases hj : j = k · subst j simp [phi, coordinateReplace, MeasurableEquiv.piCongrLeft_apply_apply] · simp [phi, coordinateReplace, MeasurableEquiv.piCongrLeft_apply_apply, hj] _ = _ := e.sum_comp (fun i ↦ ∫ x, variance (fun y ↦ F (coordinateReplace i x y)) (mu i) ∂(Measure.pi mu))
    Causalean.Mathlib.Probability.PoissonAddOnePoincare.variance_pi_le_sum_integral_coordinateVariance · Causalean/Mathlib/Probability/Poisson/Poincare/Tensorization.lean:376
  • nestedPairedPoisson_addOne_poincare theorem — For two arrays of nonnegative Poisson rates, a real-valued nested-array statistic that is square-integrable, with first-count add-one increments square-integrable and second-count add-one increments square-integrable, has variance bounded by the sum of the two rate-weighted expected squared increments in every cell.
    iota kappa :
    Type*
    Fintype iota
    Fintype kappa
    lambda₁ lambda₂ :
    iota → kappa → NNReal
    F :
    (iota → kappa → Nat × Nat) → Real
    hF :
    MemLp F 2 (nestedPairedPoissonMeasure lambda₁ lambda₂)
    hD₁ :
    ∀ i j,
    MemLp (nestedPairAddOneFst (iota := iota) (kappa := kappa) i j F) 2 (nestedPairedPoissonMeasure lambda₁ lambda₂)
    hD₂ :
    ∀ i j,
    MemLp (nestedPairAddOneSnd (iota := iota) (kappa := kappa) i j F) 2 (nestedPairedPoissonMeasure lambda₁ lambda₂)
    variance F (nestedPairedPoissonMeasure lambda₁ lambda₂)
    ≤ Finset.univ.sum (fun i : iota ↦ Finset.univ.sum (fun j : kappa ↦ ((lambda₁ i j : Real) * ∫ x : iota → kappa → Nat × Nat, (nestedPairAddOneFst (iota := iota) (kappa := kappa) (i : iota) (j : kappa) F x) ^ 2 ∂(nestedPairedPoissonMeasure lambda₁ lambda₂)) + ((lambda₂ i j : Real) * ∫ x : iota → kappa → Nat × Nat, (nestedPairAddOneSnd (iota := iota) (kappa := kappa) (i : iota) (j : kappa) F x) ^ 2 ∂(nestedPairedPoissonMeasure lambda₁ lambda₂))))
    Proof (Lean source)
    theorem nestedPairedPoisson_addOne_poincare {iota kappa : Type*} [Fintype iota] [DecidableEq iota] [Fintype kappa] [DecidableEq kappa] (lambda₁ lambda₂ : iota → kappa → NNReal) (F : (iota → kappa → Nat × Nat) → Real) (hF : MemLp F 2 (nestedPairedPoissonMeasure lambda₁ lambda₂)) (hD₁ : ∀ i j, MemLp (nestedPairAddOneFst (iota := iota) (kappa := kappa) i j F) 2 (nestedPairedPoissonMeasure lambda₁ lambda₂)) (hD₂ : ∀ i j, MemLp (nestedPairAddOneSnd (iota := iota) (kappa := kappa) i j F) 2 (nestedPairedPoissonMeasure lambda₁ lambda₂)) : variance F (nestedPairedPoissonMeasure lambda₁ lambda₂) ≤ Finset.univ.sum (fun i : iota ↦ Finset.univ.sum (fun j : kappa ↦ ((lambda₁ i j : Real) * ∫ x : iota → kappa → Nat × Nat, (nestedPairAddOneFst (iota := iota) (kappa := kappa) (i : iota) (j : kappa) F x) ^ 2 ∂(nestedPairedPoissonMeasure lambda₁ lambda₂)) + ((lambda₂ i j : Real) * ∫ x : iota → kappa → Nat × Nat, (nestedPairAddOneSnd (iota := iota) (kappa := kappa) (i : iota) (j : kappa) F x) ^ 2 ∂(nestedPairedPoissonMeasure lambda₁ lambda₂)))) := by classical let flatIndex := Sigma fun _ : iota ↦ Sigma fun _ : kappa ↦ Fin 2 let flatLambda : flatIndex → NNReal := fun p ↦ Fin.cases (lambda₁ p.1 p.2.1) (fun _ ↦ lambda₂ p.1 p.2.1) p.2.2 let e₁ := piCurry (fun (_ : iota) (_ : Sigma fun _ : kappa ↦ Fin 2) ↦ Nat) let e₂ := MeasurableEquiv.piCongrRight (fun _ : iota ↦ piCurry (fun (_ : kappa) (_ : Fin 2) ↦ Nat)) let e₃ := MeasurableEquiv.piCongrRight (fun _ : iota ↦ MeasurableEquiv.piCongrRight (fun _ : kappa ↦ MeasurableEquiv.piFinTwo (fun _ : Fin 2 ↦ Nat))) let e := e₁.trans (e₂.trans e₃) let mu₀ : Measure (flatIndex → Nat) := poissonPi flatLambda let mu₁ : Measure (iota → (Sigma fun _ : kappa ↦ Fin 2) → Nat) := Measure.pi fun i ↦ Measure.pi fun q ↦ poissonMeasure (flatLambda ⟨i, q⟩) let mu₂ : Measure (iota → kappa → Fin 2 → Nat) := Measure.pi fun i ↦ Measure.pi fun j ↦ Measure.pi fun b ↦ poissonMeasure (flatLambda ⟨i, ⟨j, b⟩⟩) let mu₃ : Measure (iota → kappa → Nat × Nat) := nestedPairedPoissonMeasure lambda₁ lambda₂ have hmp₁ : MeasurePreserving e₁ mu₀ mu₁ := by simpa [e₁, mu₀, mu₁, poissonPi, flatIndex] using (measurePreserving_piCurry_probability (fun (i : iota) (q : Sigma fun _ : kappa ↦ Fin 2) ↦ poissonMeasure (flatLambda ⟨i, q⟩))) have hmp₂ : MeasurePreserving e₂ mu₁ mu₂ := by apply measurePreserving_piCongrRight_probability intro i simpa [mu₁, mu₂, e₂] using (measurePreserving_piCurry_probability (fun (j : kappa) (b : Fin 2) ↦ poissonMeasure (flatLambda ⟨i, ⟨j, b⟩⟩))) have hmp₃ : MeasurePreserving e₃ mu₂ mu₃ := by apply measurePreserving_piCongrRight_probability intro i apply measurePreserving_piCongrRight_probability intro j convert (measurePreserving_piFinTwo (fun b : Fin 2 ↦ poissonMeasure (Fin.cases (lambda₁ i j) (fun _ ↦ lambda₂ i j) b))) using 1 · simp [mu₂, mu₃, e₃, nestedPairedPoissonMeasure, flatLambda] congr 2 have hmp : MeasurePreserving e mu₀ mu₃ := by exact hmp₃.comp (hmp₂.comp hmp₁) have he_apply (z : flatIndex → Nat) (i : iota) (j : kappa) : e z i j = (z ⟨i, ⟨j, 0⟩⟩, z ⟨i, ⟨j, 1⟩⟩) := by rfl have he_update_fst (z : flatIndex → Nat) (i : iota) (j : kappa) : e (update z ⟨i, ⟨j, 0⟩⟩ (z ⟨i, ⟨j, 0⟩⟩ + 1)) = update (e z) i (update (e z i) j ((e z i j).1 + 1, (e z i j).2)) := by funext i' j' rw [he_apply] by_cases hi : i' = i <;> by_cases hj : j' = j · subst i' subst j' simp [he_apply] · subst i' simp [he_apply, hj] · simp [he_apply, hi] · simp [he_apply, hi] have he_update_snd (z : flatIndex → Nat) (i : iota) (j : kappa) : e (update z ⟨i, ⟨j, 1⟩⟩ (z ⟨i, ⟨j, 1⟩⟩ + 1)) = update (e z) i (update (e z i) j ((e z i j).1, (e z i j).2 + 1)) := by funext i' j' rw [he_apply] by_cases hi : i' = i <;> by_cases hj : j' = j · subst i' subst j' simp [he_apply] · subst i' simp [he_apply, hj] · simp [he_apply, hi] · simp [he_apply, hi] let G : (flatIndex → Nat) → Real := F ∘ e have hG : MemLp G 2 mu₀ := hF.comp_measurePreserving hmp have hDpoint_fst (i : iota) (j : kappa) : coordinateAddOne ⟨i, ⟨j, 0⟩⟩ G = nestedPairAddOneFst i j F ∘ e := by funext z simp only [coordinateAddOne, G, Function.comp_apply, nestedPairAddOneFst] rw [he_update_fst] have hDpoint_snd (i : iota) (j : kappa) : coordinateAddOne ⟨i, ⟨j, 1⟩⟩ G = nestedPairAddOneSnd i j F ∘ e := by funext z simp only [coordinateAddOne, G, Function.comp_apply, nestedPairAddOneSnd] rw [he_update_snd] have hDG (p : flatIndex) : MemLp (coordinateAddOne p G) 2 mu₀ := by rcases p with ⟨i, j, b⟩ have hb : b = 0 ∨ b = 1 := by omega rcases hb with rfl | rfl · rw [hDpoint_fst] exact (hD₁ i j).comp_measurePreserving hmp · rw [hDpoint_snd] exact (hD₂ i j).comp_measurePreserving hmp have hflat := poissonPi_addOne_poincare flatLambda G hG hDG have henergy_fst (i : iota) (j : kappa) : (∫ z, (coordinateAddOne ⟨i, ⟨j, 0⟩⟩ G z) ^ 2 ∂mu₀) = ∫ x, (nestedPairAddOneFst i j F x) ^ 2 ∂mu₃ := by rw [← hmp.integral_comp'] apply integral_congr_ae filter_upwards with z rw [congrFun (hDpoint_fst i j) z] rfl have henergy_snd (i : iota) (j : kappa) : (∫ z, (coordinateAddOne ⟨i, ⟨j, 1⟩⟩ G z) ^ 2 ∂mu₀) = ∫ x, (nestedPairAddOneSnd i j F x) ^ 2 ∂mu₃ := by rw [← hmp.integral_comp'] apply integral_congr_ae filter_upwards with z rw [congrFun (hDpoint_snd i j) z] rfl have hvar := hmp.variance_fun_comp hF.aemeasurable rw [show variance F mu₃ = variance G mu₀ by exact hvar.symm] calc variance G mu₀ ≤ ∑ p : flatIndex, (flatLambda p : Real) * ∫ z, (coordinateAddOne p G z) ^ 2 ∂mu₀ := hflat _ = _ := by rw [Fintype.sum_sigma] apply Finset.sum_congr rfl intro i _ rw [Fintype.sum_sigma] apply Finset.sum_congr rfl intro j _ rw [Fin.sum_univ_two, henergy_fst, henergy_snd] congr 2
    Causalean.Mathlib.Probability.PoissonAddOnePoincare.nestedPairedPoisson_addOne_poincare · Causalean/Mathlib/Probability/Poisson/Poincare/Tensorization.lean:666
L2­Closure 3 core · 6 supporting This module isolates the pairwise product-law variance identity and the graph-norm density of finite-support truncations for the forward add-one operator. ★ variance_eq_half_integral_prod_sq_sub

Finite-support and L² closure for Poisson sequences

This module isolates the pairwise product-law variance identity and the graph-norm density of finite-support truncations for the forward add-one operator.

def addOne reviewed
Causalean.Mathlib.Probability.PoissonAddOnePoincare

A real sequence at an index has a forward add-one increment, given by the next value minus the current value.

Definition (Lean source)
f :
Nat → Real
n :
addOne f n :
f (n + 1) - f n
Causalean.Mathlib.Probability.PoissonAddOnePoincare.addOne · Causalean/Mathlib/Probability/Poisson/Poincare/L2Closure.lean:29
theorem variance_eq_half_integral_prod_sq_sub reviewed
Causalean.Mathlib.Probability.PoissonAddOnePoincare

Under a probability law, a square-integrable real statistic has variance equal to one half of the expected squared difference between two independent draws.

Formal statement
alpha :
Type*
f :
alpha → Real
hf :
MemLp f 2 mu
variance f mu = (1 / 2 : Real) * ∫ z, (f z.1 - f z.2) ^ 2 ∂(mu.prod mu)
Proof (Lean source)
theorem variance_eq_half_integral_prod_sq_sub {alpha : Type*} [MeasurableSpace alpha] (mu : Measure alpha) [IsProbabilityMeasure mu] (f : alpha → Real) (hf : MemLp f 2 mu) : variance f mu = (1 / 2 : Real) * ∫ z, (f z.1 - f z.2) ^ 2 ∂(mu.prod mu) := by -- Expand both sides with `variance_eq_sub`, use product Fubini for `f`, `f²`, and -- the cross term, and finish the resulting scalar identity by `ring`. rw [variance_eq_sub hf] have hfi : Integrable f mu := hf.integrable one_le_two have hfsq : Integrable (fun x ↦ f x ^ 2) mu := hf.integrable_sq have hfst : Integrable (fun z : alpha × alpha ↦ f z.1 ^ 2) (mu.prod mu) := hfsq.comp_fst mu have hsnd : Integrable (fun z : alpha × alpha ↦ f z.2 ^ 2) (mu.prod mu) := hfsq.comp_snd mu have hcross : Integrable (fun z : alpha × alpha ↦ f z.1 * f z.2) (mu.prod mu) := hfi.mul_prod hfi rw [show (fun z : alpha × alpha ↦ (f z.1 - f z.2) ^ 2) = fun z ↦ f z.1 ^ 2 - 2 * (f z.1 * f z.2) + f z.2 ^ 2 by funext z ring] have hInt : (∫ z : alpha × alpha, f z.1 ^ 2 - 2 * (f z.1 * f z.2) + f z.2 ^ 2 ∂(mu.prod mu)) = (∫ z : alpha × alpha, f z.1 ^ 2 ∂(mu.prod mu)) - 2 * (∫ z : alpha × alpha, f z.1 * f z.2 ∂(mu.prod mu)) + ∫ z : alpha × alpha, f z.2 ^ 2 ∂(mu.prod mu) := by calc _ = (∫ z : alpha × alpha, f z.1 ^ 2 - 2 * (f z.1 * f z.2) ∂(mu.prod mu)) + ∫ z : alpha × alpha, f z.2 ^ 2 ∂(mu.prod mu) := integral_add (hfst.sub (hcross.const_mul 2)) hsnd _ = ((∫ z : alpha × alpha, f z.1 ^ 2 ∂(mu.prod mu)) - ∫ z : alpha × alpha, 2 * (f z.1 * f z.2) ∂(mu.prod mu)) + ∫ z : alpha × alpha, f z.2 ^ 2 ∂(mu.prod mu) := by rw [integral_sub hfst (hcross.const_mul 2)] _ = _ := by rw [integral_const_mul] have hfstInt : (∫ z : alpha × alpha, f z.1 ^ 2 ∂(mu.prod mu)) = ∫ x, f x ^ 2 ∂mu := by simpa using integral_fun_fst (μ := mu) (ν := mu) (fun x ↦ f x ^ 2) have hsndInt : (∫ z : alpha × alpha, f z.2 ^ 2 ∂(mu.prod mu)) = ∫ x, f x ^ 2 ∂mu := by simpa using integral_fun_snd (μ := mu) (ν := mu) (fun x ↦ f x ^ 2) have hcrossInt : (∫ z : alpha × alpha, f z.1 * f z.2 ∂(mu.prod mu)) = (∫ x, f x ∂mu) * ∫ x, f x ∂mu := integral_prod_mul f f rw [hInt, hfstInt, hsndInt, hcrossInt] simp ring
Causalean.Mathlib.Probability.PoissonAddOnePoincare.variance_eq_half_integral_prod_sq_sub · Causalean/Mathlib/Probability/Poisson/Poincare/L2Closure.lean:33
def supportTruncation reviewed
Causalean.Mathlib.Probability.PoissonAddOnePoincare

A cutoff index and real sequence determine its support truncation, given by retaining exactly the values below the cutoff and setting all later values to zero.

Definition (Lean source)
K :
f :
Nat → Real
supportTruncation K f :
Nat → Real
fun n ↦ if n < K then f n else 0
Causalean.Mathlib.Probability.PoissonAddOnePoincare.supportTruncation · Causalean/Mathlib/Probability/Poisson/Poincare/L2Closure.lean:85
6 supporting declarations (lemmas, instances)
  • supportTruncation_finiteSupport lemma — A cutoff index of a real sequence has finite support.
    K :
    f :
    Nat → Real
    (support (supportTruncation K f)).Finite
    Proof (Lean source)
    lemma supportTruncation_finiteSupport (K : Nat) (f : Nat → Real) : (support (supportTruncation K f)).Finite := by refine (Set.finite_Iio K).subset ?_ intro n hn simp only [Function.mem_support] at hn by_contra hnot have hkn : ¬ n < K := by simpa using hnot exact hn (by simp [supportTruncation, hkn])
    Causalean.Mathlib.Probability.PoissonAddOnePoincare.supportTruncation_finiteSupport · Causalean/Mathlib/Probability/Poisson/Poincare/L2Closure.lean:89
  • memLp_poissonMeasure_of_finiteSupport lemma — At a nonnegative Poisson rate, a real sequence with finite support is square-integrable under the Poisson law.
    lambda :
    f :
    Nat → Real
    hf :
    (support f).Finite
    MemLp f 2 (poissonMeasure lambda)
    Proof (Lean source)
    lemma memLp_poissonMeasure_of_finiteSupport (lambda : NNReal) (f : Nat → Real) (hf : (support f).Finite) : MemLp f 2 (poissonMeasure lambda) := by -- On the discrete domain measurability is automatic. Use the explicit Poisson -- integrability criterion; a series supported on the finite support of `f` is summable. refine (memLp_two_iff_integrable_sq (measurable_of_countable _).aestronglyMeasurable).2 ?_ rw [integrable_poissonMeasure_iff] apply summable_of_hasFiniteSupport refine hf.subset ?_ intro n hn simp only [Function.mem_support] at hn ⊢ intro hfn simp [hfn] at hn
    Causalean.Mathlib.Probability.PoissonAddOnePoincare.memLp_poissonMeasure_of_finiteSupport · Causalean/Mathlib/Probability/Poisson/Poincare/L2Closure.lean:99
  • finiteSupport_addOne lemma — The add-one increment of a real sequence with finite support also has finite support.
    f :
    Nat → Real
    hf :
    (support f).Finite
    (support (addOne f)).Finite
    Proof (Lean source)
    lemma finiteSupport_addOne (f : Nat → Real) (hf : (support f).Finite) : (support (addOne f)).Finite := by -- The support is contained in `support f ∪ {n | n+1 ∈ support f}`; the successor -- preimage of a finite set is finite. have hpre : ((fun n : Nat ↦ n + 1) ⁻¹' support f).Finite := hf.preimage (Nat.succ_injective.injOn) refine (hf.union hpre).subset ?_ intro n hn simp only [Function.mem_support, Set.mem_union, Set.mem_preimage] at hn ⊢ by_contra hnot simp only [not_or, not_not] at hnot exact hn (by simp [addOne, hnot.1, hnot.2])
    Causalean.Mathlib.Probability.PoissonAddOnePoincare.finiteSupport_addOne · Causalean/Mathlib/Probability/Poisson/Poincare/L2Closure.lean:115
  • supportTruncation_integral_sq_tendsto_zero theorem — At a nonnegative Poisson rate, support truncations of a real sequence that is square-integrable converge to it in squared L² distance.
    lambda :
    f :
    Nat → Real
    hf :
    MemLp f 2 (poissonMeasure lambda)
    Tendsto (fun K ↦ ∫ n, (supportTruncation K f n - f n) ^ 2 ∂(poissonMeasure lambda)) atTop (nhds 0)
    Proof (Lean source)
    theorem supportTruncation_integral_sq_tendsto_zero (lambda : NNReal) (f : Nat → Real) (hf : MemLp f 2 (poissonMeasure lambda)) : Tendsto (fun K ↦ ∫ n, (supportTruncation K f n - f n) ^ 2 ∂(poissonMeasure lambda)) atTop (nhds 0) := by -- Rewrite the integral as the weighted series and identify it with the tail of the -- summable nonnegative series supplied by `hf.integrable_sq`. let a : Nat → Real := fun n ↦ exp (-(lambda : Real)) * (lambda : Real) ^ n / factorial n * f n ^ 2 have htail : Tendsto (fun K ↦ ∑' (n : {n // n ∉ (Finset.range K : Set Nat)}), a n) atTop (nhds 0) := (tendsto_tsum_compl_atTop_zero a).comp tendsto_finset_range convert htail using 1 funext K have hInt : Integrable (fun n ↦ (supportTruncation K f n - f n) ^ 2) (poissonMeasure lambda) := by refine hf.integrable_sq.mono (measurable_of_countable _).aestronglyMeasurable ?_ filter_upwards with n by_cases hn : n < K · simp [supportTruncation, hn, sq_nonneg] · simp [supportTruncation, hn] rw [integral_poissonMeasure' hInt] calc _ = ∑' n : Nat, ({n : Nat | n ∉ (Finset.range K : Set Nat)}).indicator a n := by apply tsum_congr intro n by_cases hn : n < K <;> simp [a, indicator, supportTruncation, hn] _ = _ := (tsum_subtype ({n : Nat | n ∉ (Finset.range K : Set Nat)}) a).symm
    Causalean.Mathlib.Probability.PoissonAddOnePoincare.supportTruncation_integral_sq_tendsto_zero · Causalean/Mathlib/Probability/Poisson/Poincare/L2Closure.lean:130
  • supportTruncation_addOne_integral_sq_tendsto_zero theorem — At a nonnegative Poisson rate, support truncations of a real sequence whose values are square-integrable and whose add-one increments are square-integrable converge to those increments in squared L² distance.
    lambda :
    f :
    Nat → Real
    hf :
    MemLp f 2 (poissonMeasure lambda)
    hdf :
    MemLp (addOne f) 2 (poissonMeasure lambda)
    Tendsto (fun K ↦ ∫ n, (addOne (supportTruncation K f) n - addOne f n) ^ 2 ∂(poissonMeasure lambda)) atTop (nhds 0)
    Proof (Lean source)
    theorem supportTruncation_addOne_integral_sq_tendsto_zero (lambda : NNReal) (f : Nat → Real) (hf : MemLp f 2 (poissonMeasure lambda)) (hdf : MemLp (addOne f) 2 (poissonMeasure lambda)) : Tendsto (fun K ↦ ∫ n, (addOne (supportTruncation K f) n - addOne f n) ^ 2 ∂(poissonMeasure lambda)) atTop (nhds 0) := by -- The identity `f (n+1) = addOne f n + f n` makes the shifted sequence square-integrable. -- Its squared norm, together with that of `f`, dominates every truncated add-one error; -- pointwise the error is eventually zero, so dominated convergence applies. have hshift : MemLp (fun n ↦ f (n + 1)) 2 (poissonMeasure lambda) := by have h := hdf.add hf convert h using 1 ext n simp [addOne] have hbound : Integrable (fun n ↦ 2 * (f (n + 1) ^ 2 + f n ^ 2)) (poissonMeasure lambda) := (hshift.integrable_sq.add hf.integrable_sq).const_mul 2 simpa only [integral_zero] using (tendsto_integral_of_dominated_convergence (μ := poissonMeasure lambda) (F := fun K n ↦ (addOne (supportTruncation K f) n - addOne f n) ^ 2) (f := fun _ ↦ (0 : Real)) (fun n ↦ 2 * (f (n + 1) ^ 2 + f n ^ 2)) (fun K ↦ (measurable_of_countable _).aestronglyMeasurable) hbound (fun K ↦ by filter_upwards with n simp only [Real.norm_eq_abs, abs_sq] by_cases hn : n < K <;> by_cases hsn : n + 1 < K <;> simp [addOne, supportTruncation, hn, hsn] <;> nlinarith [sq_nonneg (f n), sq_nonneg (f (n + 1)), sq_nonneg (f n + f (n + 1))]) (by filter_upwards with n apply tendsto_atTop_of_eventually_const (i₀ := n + 2) intro K hK have hn : n < K := by omega have hsn : n + 1 < K := by omega simp [addOne, supportTruncation, hn, hsn]))
    Causalean.Mathlib.Probability.PoissonAddOnePoincare.supportTruncation_addOne_integral_sq_tendsto_zero · Causalean/Mathlib/Probability/Poisson/Poincare/L2Closure.lean:166
  • variance_tendsto_of_integral_sq_sub_tendsto_zero theorem — Under a probability law, a sequence of real statistics and a limiting statistic, with each sequence member square-integrable, the limit square-integrable, and squared L² distance tending to zero, have variances converging to the limiting variance.
    alpha :
    Type*
    f :
    Nat → alpha → Real
    g :
    alpha → Real
    hf :
    ∀ K, MemLp (f K) 2 mu
    hg :
    MemLp g 2 mu
    hconv :
    Tendsto (fun K ↦ ∫ x, (f K x - g x) ^ 2 ∂mu) atTop (nhds 0)
    Tendsto (fun K ↦ variance (f K) mu) atTop (nhds (variance g mu))
    Proof (Lean source)
    theorem variance_tendsto_of_integral_sq_sub_tendsto_zero {alpha : Type*} [MeasurableSpace alpha] (mu : Measure alpha) [IsProbabilityMeasure mu] (f : Nat → alpha → Real) (g : alpha → Real) (hf : ∀ K, MemLp (f K) 2 mu) (hg : MemLp g 2 mu) (hconv : Tendsto (fun K ↦ ∫ x, (f K x - g x) ^ 2 ∂mu) atTop (nhds 0)) : Tendsto (fun K ↦ variance (f K) mu) atTop (nhds (variance g mu)) := by -- Squared L² convergence implies convergence of means and second moments by -- Cauchy–Schwarz on a probability space; conclude from `variance_eq_sub`. let d : Nat → alpha → Real := fun K x ↦ f K x - g x have hd (K : Nat) : MemLp (d K) 2 mu := by have h := (hf K).sub hg convert h using 1 ext x rfl have hCS (u v : alpha → Real) (hu : MemLp u 2 mu) (hv : MemLp v 2 mu) : |∫ x, u x * v x ∂mu| ≤ sqrt (∫ x, u x ^ 2 ∂mu) * sqrt (∫ x, v x ^ 2 ∂mu) := by calc |∫ x, u x * v x ∂mu| = ‖∫ x, u x * v x ∂mu‖ := by rw [Real.norm_eq_abs] _ ≤ ∫ x, ‖u x * v x‖ ∂mu := norm_integral_le_integral_norm _ _ = ∫ x, ‖u x‖ * ‖v x‖ ∂mu := by apply integral_congr_ae filter_upwards with x rw [norm_mul] _ ≤ (∫ x, ‖u x‖ ^ (2 : Real) ∂mu) ^ ((1 : Real) / 2) * (∫ x, ‖v x‖ ^ (2 : Real) ∂mu) ^ ((1 : Real) / 2) := integral_mul_norm_le_Lp_mul_Lq Real.HolderConjugate.two_two (by simpa using hu) (by simpa using hv) _ = _ := by rw [← Real.sqrt_eq_rpow, ← Real.sqrt_eq_rpow] congr 2 <;> apply integral_congr_ae <;> filter_upwards with x <;> simp [sq_abs] have hsqrt : Tendsto (fun K ↦ sqrt (∫ x, d K x ^ 2 ∂mu)) atTop (nhds 0) := by have := Real.continuous_sqrt.continuousAt.tendsto.comp hconv convert this using 1 · funext K rfl · simp have hdconv : Tendsto (fun K ↦ ∫ x, d K x ^ 2 ∂mu) atTop (nhds 0) := by simpa [d] using hconv have hmeanDiff : Tendsto (fun K ↦ ∫ x, d K x ∂mu) atTop (nhds 0) := by refine squeeze_zero_norm (a := fun K ↦ sqrt (∫ x, d K x ^ 2 ∂mu)) ?_ hsqrt · intro K simpa using (hCS (d K) (fun _ ↦ (1 : Real)) (hd K) (memLp_const 1)) have hcross : Tendsto (fun K ↦ ∫ x, g x * d K x ∂mu) atTop (nhds 0) := by refine squeeze_zero_norm (a := fun K ↦ sqrt (∫ x, g x ^ 2 ∂mu) * sqrt (∫ x, d K x ^ 2 ∂mu)) ?_ ?_ · intro K simpa [mul_comm] using hCS g (d K) hg (hd K) · simpa using ((tendsto_const_nhds : Tendsto (fun _ : Nat ↦ sqrt (∫ x, g x ^ 2 ∂mu)) atTop (nhds (sqrt (∫ x, g x ^ 2 ∂mu)))).mul hsqrt) have hmean : Tendsto (fun K ↦ ∫ x, f K x ∂mu) atTop (nhds (∫ x, g x ∂mu)) := by convert (tendsto_const_nhds.add hmeanDiff) using 1 · funext K rw [← integral_add (hg.integrable one_le_two) ((hd K).integrable one_le_two)] apply integral_congr_ae filter_upwards with x simp [d] · simp have hsecond : Tendsto (fun K ↦ ∫ x, (f K x) ^ 2 ∂mu) atTop (nhds (∫ x, g x ^ 2 ∂mu)) := by convert ((tendsto_const_nhds : Tendsto (fun _ : Nat ↦ ∫ x, g x ^ 2 ∂mu) atTop (nhds (∫ x, g x ^ 2 ∂mu))).add (hdconv.add (hcross.const_mul 2))) using 1 · funext K calc (∫ x, f K x ^ 2 ∂mu) = ∫ x, g x ^ 2 + (d K x ^ 2 + 2 * (g x * d K x)) ∂mu := by apply integral_congr_ae filter_upwards with x simp [d] ring _ = (∫ x, g x ^ 2 ∂mu) + ∫ x, d K x ^ 2 + 2 * (g x * d K x) ∂mu := integral_add hg.integrable_sq ((hd K).integrable_sq.add ((MemLp.integrable_mul hg (hd K)).const_mul 2)) _ = _ := by congr 1 calc (∫ x, d K x ^ 2 + 2 * (g x * d K x) ∂mu) = (∫ x, d K x ^ 2 ∂mu) + ∫ x, 2 * (g x * d K x) ∂mu := integral_add (hd K).integrable_sq ((MemLp.integrable_mul hg (hd K)).const_mul 2) _ = _ := by rw [integral_const_mul] · simp convert hsecond.sub (hmean.pow 2) using 1 · funext K rw [variance_eq_sub (hf K)] rfl · rw [variance_eq_sub hg] rfl
    Causalean.Mathlib.Probability.PoissonAddOnePoincare.variance_tendsto_of_integral_sq_sub_tendsto_zero · Causalean/Mathlib/Probability/Poisson/Poincare/L2Closure.lean:210
Nested­Paired­Flattening 5 core · 7 supporting This module exposes the measurable equivalence and measure-preserving transport hidden in the proof of the nested paired-Poisson Poincare inequality. ★ measurePreserving_nestedPairedPoissonFlattening

Flattening finite nested arrays of Poisson pairs

This module exposes the measurable equivalence and measure-preserving transport hidden in the proof of the nested paired-Poisson Poincare inequality. A nested array with two counts in each cell is represented as one finite dependent product, with a Fin 2 tag selecting the count.

abbrev NestedPairedPoissonIndex reviewed
Causalean.Mathlib.Probability.Poisson.Poincare

Two index types determine the coordinate labels for a flattened nested paired-count array, given by a cell label together with a tag for its first or second count.

Definition (Lean source)
iota kappa :
Type*
NestedPairedPoissonIndex iota kappa :
Type (max u_1 u_2)
Sigma fun _ : iota => Sigma fun _ : kappa => Fin 2
Causalean.Mathlib.Probability.Poisson.Poincare.NestedPairedPoissonIndex · Causalean/Mathlib/Probability/Poisson/Poincare/NestedPairedFlattening.lean:29
def nestedPairedPoissonRates reviewed
Causalean.Mathlib.Probability.Poisson.Poincare

Two arrays of nonnegative Poisson rates determine the rate assigned to each flattened coordinate, given by selecting the first or second rate according to that coordinate's count tag.

Definition (Lean source)
iota kappa :
Type*
lambda₁ lambda₂ :
iota → kappa → NNReal
nestedPairedPoissonRates lambda₁ lambda₂ :
fun p => Fin.cases (lambda₁ p.1 p.2.1) (fun _ => lambda₂ p.1 p.2.1) p.2.2
Causalean.Mathlib.Probability.Poisson.Poincare.nestedPairedPoissonRates · Causalean/Mathlib/Probability/Poisson/Poincare/NestedPairedFlattening.lean:35 · uses NestedPairedPoissonIndex
def nestedPairedPoissonUnflattening reviewed
Causalean.Mathlib.Probability.Poisson.Poincare

Two finite index types determine a measurable equivalence from a flat count vector to a nested array of count pairs, given by currying the two index levels and grouping the two tagged counts in each cell.

Definition (Lean source)
iota kappa :
Type*
Fintype iota
Fintype kappa
nestedPairedPoissonUnflattening iota kappa :
(NestedPairedPoissonIndex iota kappa → Nat) ≃ᵐ (iota → kappa → Nat × Nat)
(piCurry (fun (_ : iota) (_ : Sigma fun _ : kappa => Fin 2) => Nat)).trans ((MeasurableEquiv.piCongrRight fun _ : iota => piCurry (fun (_ : kappa) (_ : Fin 2) => Nat)).trans (MeasurableEquiv.piCongrRight fun _ : iota => MeasurableEquiv.piCongrRight fun _ : kappa => MeasurableEquiv.piFinTwo (fun _ : Fin 2 => Nat)))
Causalean.Mathlib.Probability.Poisson.Poincare.nestedPairedPoissonUnflattening · Causalean/Mathlib/Probability/Poisson/Poincare/NestedPairedFlattening.lean:75 · uses NestedPairedPoissonIndex
def nestedPairedPoissonFlattening reviewed
Causalean.Mathlib.Probability.Poisson.Poincare

Two finite index types determine a measurable equivalence from a nested array of count pairs to one flat count vector, given by the inverse of the canonical unflattening equivalence.

Definition (Lean source)
iota kappa :
Type*
Fintype iota
Fintype kappa
nestedPairedPoissonFlattening iota kappa :
(iota → kappa → Nat × Nat) ≃ᵐ (NestedPairedPoissonIndex iota kappa → Nat)
Causalean.Mathlib.Probability.Poisson.Poincare.nestedPairedPoissonFlattening · Causalean/Mathlib/Probability/Poisson/Poincare/NestedPairedFlattening.lean:90 · uses NestedPairedPoissonIndex
theorem measurePreserving_nestedPairedPoissonFlattening reviewed
Causalean.Mathlib.Probability.Poisson.Poincare

Two arrays of nonnegative Poisson rates have their nested paired-count law transported to the corresponding flat independent-Poisson product law.

Formal statement
iota kappa :
Type*
Fintype iota
Fintype kappa
lambda₁ lambda₂ :
iota → kappa → NNReal
Proof (Lean source)
theorem measurePreserving_nestedPairedPoissonFlattening {iota kappa : Type*} [Fintype iota] [Fintype kappa] (lambda₁ lambda₂ : iota → kappa → NNReal) : MeasurePreserving (nestedPairedPoissonFlattening iota kappa) (nestedPairedPoissonMeasure lambda₁ lambda₂) (poissonPi (nestedPairedPoissonRates lambda₁ lambda₂)) := by exact MeasurePreserving.symm (nestedPairedPoissonUnflattening iota kappa) (measurePreserving_nestedPairedPoissonUnflattening lambda₁ lambda₂)
7 supporting declarations (lemmas, instances)
Series 2 core · 7 supporting This module isolates the explicit Poisson weights, their size-bias shift, two nonnegative upper-triangle reindexings, and the finite telescoping/Cauchy–Schwarz estimate. ★ sq_sub_le_nat_sub_mul_sum_sq_step

Series algebra for the Poisson add-one inequality

This module isolates the explicit Poisson weights, their size-bias shift, two nonnegative upper-triangle reindexings, and the finite telescoping/Cauchy–Schwarz estimate.

def poissonWeight reviewed
Causalean.Mathlib.Probability.PoissonAddOnePoincare

A nonnegative Poisson rate and count value determine the real Poisson probability mass at that count, given by the standard exponential--factorial mass formula.

Definition (Lean source)
lambda :
n :
poissonWeight lambda n :
exp (-(lambda : Real)) * (lambda : Real) ^ n / factorial n
Causalean.Mathlib.Probability.PoissonAddOnePoincare.poissonWeight · Causalean/Mathlib/Probability/Poisson/Poincare/Series.lean:28
theorem sq_sub_le_nat_sub_mul_sum_sq_step reviewed
Causalean.Mathlib.Probability.PoissonAddOnePoincare

For a real sequence and ordered endpoints, the squared endpoint difference is bounded by path length times the sum of squared adjacent increments.

Formal statement
f :
Nat → Real
n m :
hnm :
n ≤ m
(f m - f n) ^ 2 ≤ (m - n : Nat) * ∑ k ∈ Ico n m, (f (k + 1) - f k) ^ 2
Proof (Lean source)
theorem sq_sub_le_nat_sub_mul_sum_sq_step (f : Nat → Real) {n m : Nat} (hnm : n ≤ m) : (f m - f n) ^ 2 ≤ (m - n : Nat) * ∑ k ∈ Ico n m, (f (k + 1) - f k) ^ 2 := by -- Rewrite the left difference by `Finset.sum_Ico_sub`; apply finite Cauchy–Schwarz to -- the increments paired with the constant-one vector, and simplify its squared norm. rw [← Finset.sum_Ico_sub f hnm] calc (∑ k ∈ Ico n m, (f (k + 1) - f k)) ^ 2 = (∑ k ∈ Ico n m, (f (k + 1) - f k) * 1) ^ 2 := by simp _ ≤ (∑ k ∈ Ico n m, (f (k + 1) - f k) ^ 2) * ∑ k ∈ Ico n m, (1 : Real) ^ 2 := Finset.sum_mul_sq_le_sq_mul_sq _ _ _ _ = (m - n : Nat) * ∑ k ∈ Ico n m, (f (k + 1) - f k) ^ 2 := by simp [Nat.card_Ico] ring
Causalean.Mathlib.Probability.PoissonAddOnePoincare.sq_sub_le_nat_sub_mul_sum_sq_step · Causalean/Mathlib/Probability/Poisson/Poincare/Series.lean:127
7 supporting declarations (lemmas, instances)
Nested­Paired­Factorization 2 core · 4 supporting After flattening, products of single-coordinate functions factor into scalar Poisson integrals. ★ integral_sq_nestedPaired_cellwise_product_eq_prod

Coordinate-product integrals under nested paired Poisson laws

After flattening, products of single-coordinate functions factor into scalar Poisson integrals. The square identity and integrability criterion are tailored to Poincare energy calculations.

def nestedPairedCoordinateProduct reviewed
Causalean.Mathlib.Probability.Poisson.Poincare

A scalar function at each flattened coordinate and a nested count-pair array determine their flattened coordinate product, given by multiplying the coordinate functions evaluated at the flattened counts.

Definition (Lean source)
iota kappa :
Type*
Fintype iota
Fintype kappa
g :
NestedPairedPoissonIndex iota kappa → Nat → Real
x :
iota → kappa → Nat × Nat
nestedPairedCoordinateProduct g x :
∏ p, g p (nestedPairedPoissonFlattening iota kappa x p)
Causalean.Mathlib.Probability.Poisson.Poincare.nestedPairedCoordinateProduct · Causalean/Mathlib/Probability/Poisson/Poincare/NestedPairedFactorization.lean:29 · uses NestedPairedPoissonIndex
theorem integral_sq_nestedPaired_cellwise_product_eq_prod reviewed
Causalean.Mathlib.Probability.Poisson.Poincare

Two arrays of nonnegative Poisson rates and first- and second-count scalar functions in every cell have their squared cellwise nested product integral factored into scalar Poisson second moments.

Formal statement
iota kappa :
Type*
Fintype iota
Fintype kappa
lambda₁ lambda₂ :
iota → kappa → NNReal
g₁ g₂ :
iota → kappa → Nat → Real
(∫ x, (∏ i, ∏ j, g₁ i j (x i j).1 * g₂ i j (x i j).2) ^ 2 ∂(nestedPairedPoissonMeasure lambda₁ lambda₂))
= ∏ i, ∏ j, ((∫ n, (g₁ i j n) ^ 2 ∂(poissonMeasure (lambda₁ i j))) * (∫ n, (g₂ i j n) ^ 2 ∂(poissonMeasure (lambda₂ i j))))
Proof (Lean source)
theorem integral_sq_nestedPaired_cellwise_product_eq_prod {iota kappa : Type*} [Fintype iota] [Fintype kappa] (lambda₁ lambda₂ : iota → kappa → NNReal) (g₁ g₂ : iota → kappa → Nat → Real) : (∫ x, (∏ i, ∏ j, g₁ i j (x i j).1 * g₂ i j (x i j).2) ^ 2 ∂(nestedPairedPoissonMeasure lambda₁ lambda₂)) = ∏ i, ∏ j, ((∫ n, (g₁ i j n) ^ 2 ∂(poissonMeasure (lambda₁ i j))) * (∫ n, (g₂ i j n) ^ 2 ∂(poissonMeasure (lambda₂ i j)))) := by let g : NestedPairedPoissonIndex iota kappa → Nat → Real := fun p => Fin.cases (g₁ p.1 p.2.1) (fun _ => g₂ p.1 p.2.1) p.2.2 have h := integral_sq_nestedPairedCoordinateProduct_eq_prod lambda₁ lambda₂ g simp only [nestedPairedCoordinateProduct, g, Fintype.prod_sigma, Fin.prod_univ_two, nestedPairedPoissonFlattening_apply_zero, nestedPairedPoissonFlattening_apply_one, nestedPairedPoissonRates] at h have hone : (1 : Fin 2) = succ 0 := rfl rw [hone] at h simpa only [Fin.cases_zero, Fin.cases_succ] using h
Causalean.Mathlib.Probability.Poisson.Poincare.integral_sq_nestedPaired_cellwise_product_eq_prod · Causalean/Mathlib/Probability/Poisson/Poincare/NestedPairedFactorization.lean:128 · uses nestedPairedPoissonMeasure
4 supporting declarations (lemmas, instances)
Nested­Paired­Polynomial­Growth 2 core · 5 supporting Finite Poisson products have moments of every natural order. ★ memLp_nestedPairedPoisson_and_addOne_of_polynomial_bound

Polynomial moments and L² closure for nested paired Poisson arrays

Finite Poisson products have moments of every natural order. This module packages that fact as a total-count moment theorem and a polynomial-growth criterion for a statistic and each of its two add-one increments.

def nestedPairedTotalCount reviewed
Causalean.Mathlib.Probability.Poisson.Poincare

A nested array of count pairs determines its total count, given by summing both counts across every finite array cell.

Definition (Lean source)
iota kappa :
Type*
Fintype iota
Fintype kappa
x :
iota → kappa → Nat × Nat
nestedPairedTotalCount x :
∑ i, ∑ j, ((x i j).1 + (x i j).2)
Causalean.Mathlib.Probability.Poisson.Poincare.nestedPairedTotalCount · Causalean/Mathlib/Probability/Poisson/Poincare/NestedPairedPolynomialGrowth.lean:32
theorem memLp_nestedPairedPoisson_and_addOne_of_polynomial_bound reviewed
Causalean.Mathlib.Probability.Poisson.Poincare

Two arrays of nonnegative Poisson rates, a measurable real-valued nested-array statistic, a nonnegative growth constant, a polynomial degree, and its total-count growth bound, namely that the absolute statistic is at most the constant times one plus the total count raised to the degree, give square integrability under the nested paired-Poisson law of the statistic itself and, in every cell, of its increment from adding one to the first count and of its increment from adding one to the second count. These are the square-integrability premises of the nested paired-Poisson Poincaré inequality.

Formal statement
iota kappa :
Type*
Fintype iota
Fintype kappa
lambda₁ lambda₂ :
iota → kappa → NNReal
F :
(iota → kappa → Nat × Nat) → Real
hF :
C :
degree :
hC :
0 ≤ C
hbound :
∀ x, |F x| ≤ C * (1 + (nestedPairedTotalCount x : Real)) ^ degree
conclusion 1
MemLp F 2 (nestedPairedPoissonMeasure lambda₁ lambda₂)
conclusion 2
i j :
MemLp (nestedPairAddOneFst i j F) 2 (nestedPairedPoissonMeasure lambda₁ lambda₂)
conclusion 3
i j :
MemLp (nestedPairAddOneSnd i j F) 2 (nestedPairedPoissonMeasure lambda₁ lambda₂)
Proof (Lean source)
theorem memLp_nestedPairedPoisson_and_addOne_of_polynomial_bound {iota kappa : Type*} [Fintype iota] [DecidableEq iota] [Fintype kappa] [DecidableEq kappa] (lambda₁ lambda₂ : iota → kappa → NNReal) (F : (iota → kappa → Nat × Nat) → Real) (hF : Measurable F) (C : Real) (degree : Nat) (hC : 0 ≤ C) (hbound : ∀ x, |F x| ≤ C * (1 + (nestedPairedTotalCount x : Real)) ^ degree) : MemLp F 2 (nestedPairedPoissonMeasure lambda₁ lambda₂) ∧ (∀ i j, MemLp (nestedPairAddOneFst i j F) 2 (nestedPairedPoissonMeasure lambda₁ lambda₂)) ∧ (∀ i j, MemLp (nestedPairAddOneSnd i j F) 2 (nestedPairedPoissonMeasure lambda₁ lambda₂)) := by refine ⟨memLp_nestedPairedPoisson_of_polynomial_bound lambda₁ lambda₂ F hF C degree hbound, ?_, ?_⟩ · intro i j exact memLp_nestedPairAddOneFst_of_polynomial_bound lambda₁ lambda₂ F C degree hC hbound i j · intro i j exact memLp_nestedPairAddOneSnd_of_polynomial_bound lambda₁ lambda₂ F C degree hC hbound i j
5 supporting declarations (lemmas, instances)
  • integrable_natCast_pow_poissonMeasure theorem — A nonnegative Poisson rate and natural-number exponent have an integrable real-valued count power under the Poisson law.
    lambda :
    degree :
    Integrable (fun n : Nat => (n : Real) ^ degree) (poissonMeasure lambda)
    Proof (Lean source)
    theorem integrable_natCast_pow_poissonMeasure (lambda : NNReal) (degree : Nat) : Integrable (fun n : Nat => (n : Real) ^ degree) (poissonMeasure lambda) := by apply integrable_pow_of_integrable_exp_mul (t := 1) (by norm_num) · rw [integrable_poissonMeasure_iff] have h := (Real.summable_pow_div_factorial ((lambda : Real) * exp 1)).mul_left (exp (-(lambda : Real))) simpa [Real.norm_eq_abs, Real.abs_exp, Real.exp_nat_mul, mul_pow, div_eq_mul_inv, mul_assoc, mul_left_comm, mul_comm] using h · refine Integrable.mono (integrable_const (μ := poissonMeasure lambda) (c := (1 : Real))) ?_ (ae_of_all _ fun n => ?_) · fun_prop · simp only [Real.norm_eq_abs, Real.abs_exp, norm_one] rw [Real.exp_le_one_iff] norm_num
    Causalean.Mathlib.Probability.Poisson.Poincare.integrable_natCast_pow_poissonMeasure · Causalean/Mathlib/Probability/Poisson/Poincare/NestedPairedPolynomialGrowth.lean:121
  • integrable_nestedPairedTotalCount_pow theorem — Two arrays of nonnegative Poisson rates and a natural-number exponent have an integrable power of the nested array's total count.
    iota kappa :
    Type*
    Fintype iota
    Fintype kappa
    lambda₁ lambda₂ :
    iota → kappa → NNReal
    degree :
    Integrable (fun x : iota → kappa → Nat × Nat => (nestedPairedTotalCount x : Real) ^ degree) (nestedPairedPoissonMeasure lambda₁ lambda₂)
    Proof (Lean source)
    theorem integrable_nestedPairedTotalCount_pow {iota kappa : Type*} [Fintype iota] [Fintype kappa] (lambda₁ lambda₂ : iota → kappa → NNReal) (degree : Nat) : Integrable (fun x : iota → kappa → Nat × Nat => (nestedPairedTotalCount x : Real) ^ degree) (nestedPairedPoissonMeasure lambda₁ lambda₂) := by let rates := nestedPairedPoissonRates lambda₁ lambda₂ let S : (NestedPairedPoissonIndex iota kappa → Nat) → Real := fun z => ∑ p, (z p : Real) have hpos : Integrable (fun z => exp (1 * S z)) (poissonPi rates) := by have hcoord : ∀ p, Integrable (fun n : Nat => exp (n : Real)) (poissonMeasure (rates p)) := by intro p rw [integrable_poissonMeasure_iff] have h := (Real.summable_pow_div_factorial ((rates p : Real) * exp 1)).mul_left (exp (-(rates p : Real))) simpa [Real.norm_eq_abs, Real.abs_exp, Real.exp_nat_mul, mul_pow, div_eq_mul_inv, mul_assoc, mul_left_comm, mul_comm] using h change Integrable _ (Measure.pi fun p => poissonMeasure (rates p)) simpa [S, one_mul, Real.exp_sum] using (Integrable.fintype_prod (𝕜 := Real) hcoord) have hneg : Integrable (fun z => exp (-1 * S z)) (poissonPi rates) := by change Integrable _ (Measure.pi fun p => poissonMeasure (rates p)) refine Integrable.mono (integrable_const (μ := Measure.pi fun p => poissonMeasure (rates p)) (c := (1 : Real))) (measurable_of_countable _).aestronglyMeasurable (ae_of_all _ fun z => ?_) simp only [Real.norm_eq_abs, Real.abs_exp, norm_one] rw [Real.exp_le_one_iff] have hs : 0 ≤ ∑ p, (z p : Real) := by positivity dsimp [S] linarith have hflat : Integrable (fun z => (S z) ^ degree) (poissonPi rates) := integrable_pow_of_integrable_exp_mul (t := 1) (by norm_num) hpos hneg degree have hcomp := (measurePreserving_nestedPairedPoissonFlattening lambda₁ lambda₂) |>.integrable_comp_of_integrable hflat convert hcomp using 1 funext x congr 1 simp only [nestedPairedTotalCount, S, Nat.cast_sum, Nat.cast_add] rw [Fintype.sum_sigma] simp only [Fintype.sum_sigma] simp [Fin.sum_univ_two]
    Causalean.Mathlib.Probability.Poisson.Poincare.integrable_nestedPairedTotalCount_pow · Causalean/Mathlib/Probability/Poisson/Poincare/NestedPairedPolynomialGrowth.lean:140
  • memLp_nestedPairedPoisson_of_polynomial_bound theorem — Two arrays of nonnegative Poisson rates, a measurable real-valued nested-array statistic, a growth constant, and a polynomial degree whose absolute value obeys the stated total-count growth bound give a square-integrable statistic under the nested paired-count law.
    iota kappa :
    Type*
    Fintype iota
    Fintype kappa
    lambda₁ lambda₂ :
    iota → kappa → NNReal
    F :
    (iota → kappa → Nat × Nat) → Real
    hF :
    C :
    degree :
    hbound :
    ∀ x, |F x| ≤ C * (1 + (nestedPairedTotalCount x : Real)) ^ degree
    MemLp F 2 (nestedPairedPoissonMeasure lambda₁ lambda₂)
    Proof (Lean source)
    theorem memLp_nestedPairedPoisson_of_polynomial_bound {iota kappa : Type*} [Fintype iota] [Fintype kappa] (lambda₁ lambda₂ : iota → kappa → NNReal) (F : (iota → kappa → Nat × Nat) → Real) (hF : Measurable F) (C : Real) (degree : Nat) (hbound : ∀ x, |F x| ≤ C * (1 + (nestedPairedTotalCount x : Real)) ^ degree) : MemLp F 2 (nestedPairedPoissonMeasure lambda₁ lambda₂) := by let T : (iota → kappa → Nat × Nat) → Real := fun x => (nestedPairedTotalCount x : Real) have hmoment : Integrable (fun x => (T x) ^ (2 * degree)) (nestedPairedPoissonMeasure lambda₁ lambda₂) := by simpa [T] using integrable_nestedPairedTotalCount_pow lambda₁ lambda₂ (2 * degree) have hone : Integrable (fun _ : iota → kappa → Nat × Nat => (1 : Real)) (nestedPairedPoissonMeasure lambda₁ lambda₂) := by simpa using integrable_nestedPairedTotalCount_pow lambda₁ lambda₂ 0 have hshift : Integrable (fun x => (1 + T x) ^ (2 * degree)) (nestedPairedPoissonMeasure lambda₁ lambda₂) := by refine Integrable.mono ((hone.add hmoment).const_mul ((2 : Real) ^ (2 * degree - 1))) (measurable_of_countable _).aestronglyMeasurable (ae_of_all _ fun x => ?_) rw [Real.norm_eq_abs, abs_of_nonneg (pow_nonneg (by positivity) _)] rw [Real.norm_eq_abs, abs_of_nonneg (mul_nonneg (by positivity) (add_nonneg (by positivity) (pow_nonneg (by positivity) _)))] simpa only [Pi.add_apply, one_pow] using (add_pow_le (a := (1 : Real)) (b := T x) (by positivity) (by positivity) (2 * degree)) refine (memLp_two_iff_integrable_sq hF.aestronglyMeasurable).2 ?_ refine Integrable.mono (hshift.const_mul (C ^ 2)) (measurable_of_countable _).aestronglyMeasurable (ae_of_all _ fun x => ?_) rw [Real.norm_eq_abs, abs_of_nonneg (sq_nonneg _)] rw [Real.norm_eq_abs, abs_of_nonneg (mul_nonneg (sq_nonneg _) (pow_nonneg (by positivity) _))] calc F x ^ 2 = |F x| ^ 2 := (sq_abs (F x)).symm _ ≤ (C * (1 + T x) ^ degree) ^ 2 := by gcongr; exact hbound x _ = C ^ 2 * (1 + T x) ^ (2 * degree) := by simp [mul_pow, ← pow_mul, Nat.mul_comm]
    Causalean.Mathlib.Probability.Poisson.Poincare.memLp_nestedPairedPoisson_of_polynomial_bound · Causalean/Mathlib/Probability/Poisson/Poincare/NestedPairedPolynomialGrowth.lean:191
  • memLp_nestedPairAddOneFst_of_polynomial_bound theorem — Two arrays of nonnegative Poisson rates, a real-valued nested-array statistic, a nonnegative growth constant, a polynomial degree, its total-count growth bound, and a selected cell give a square-integrable first-count add-one increment.
    iota kappa :
    Type*
    Fintype iota
    Fintype kappa
    lambda₁ lambda₂ :
    iota → kappa → NNReal
    F :
    (iota → kappa → Nat × Nat) → Real
    C :
    degree :
    hC :
    0 ≤ C
    hbound :
    ∀ x, |F x| ≤ C * (1 + (nestedPairedTotalCount x : Real)) ^ degree
    i :
    iota
    j :
    kappa
    MemLp (nestedPairAddOneFst i j F) 2 (nestedPairedPoissonMeasure lambda₁ lambda₂)
    Proof (Lean source)
    theorem memLp_nestedPairAddOneFst_of_polynomial_bound {iota kappa : Type*} [Fintype iota] [DecidableEq iota] [Fintype kappa] [DecidableEq kappa] (lambda₁ lambda₂ : iota → kappa → NNReal) (F : (iota → kappa → Nat × Nat) → Real) (C : Real) (degree : Nat) (hC : 0 ≤ C) (hbound : ∀ x, |F x| ≤ C * (1 + (nestedPairedTotalCount x : Real)) ^ degree) (i : iota) (j : kappa) : MemLp (nestedPairAddOneFst i j F) 2 (nestedPairedPoissonMeasure lambda₁ lambda₂) := by let upd : (iota → kappa → Nat × Nat) → (iota → kappa → Nat × Nat) := fun x => update x i (update (x i) j ((x i j).1 + 1, (x i j).2)) apply memLp_nestedPairedPoisson_of_polynomial_bound lambda₁ lambda₂ (nestedPairAddOneFst i j F) (measurable_of_countable _) (2 * C * 2 ^ degree) degree intro x change |F (upd x) - F x| ≤ (2 * C * 2 ^ degree) * (1 + (nestedPairedTotalCount x : Real)) ^ degree have hcount : nestedPairedTotalCount (upd x) = nestedPairedTotalCount x + 1 := by exact nestedPairedTotalCount_update_fst x i j have hbase_update : 1 + (nestedPairedTotalCount (upd x) : Real) ≤ 2 * (1 + (nestedPairedTotalCount x : Real)) := by rw [hcount, Nat.cast_add, Nat.cast_one] have ht : 0 ≤ (nestedPairedTotalCount x : Real) := by positivity linarith have hbase_old : 1 + (nestedPairedTotalCount x : Real) ≤ 2 * (1 + (nestedPairedTotalCount x : Real)) := by have ht : 0 ≤ (nestedPairedTotalCount x : Real) := by positivity linarith calc |F (upd x) - F x| ≤ |F (upd x)| + |F x| := abs_sub _ _ _ ≤ C * (1 + (nestedPairedTotalCount (upd x) : Real)) ^ degree + C * (1 + (nestedPairedTotalCount x : Real)) ^ degree := add_le_add (hbound (upd x)) (hbound x) _ ≤ C * (2 * (1 + (nestedPairedTotalCount x : Real))) ^ degree + C * (2 * (1 + (nestedPairedTotalCount x : Real))) ^ degree := by gcongr _ = (2 * C * 2 ^ degree) * (1 + (nestedPairedTotalCount x : Real)) ^ degree := by simp [mul_pow] ring
    Causalean.Mathlib.Probability.Poisson.Poincare.memLp_nestedPairAddOneFst_of_polynomial_bound · Causalean/Mathlib/Probability/Poisson/Poincare/NestedPairedPolynomialGrowth.lean:236
  • memLp_nestedPairAddOneSnd_of_polynomial_bound theorem — Two arrays of nonnegative Poisson rates, a real-valued nested-array statistic, a nonnegative growth constant, a polynomial degree, its total-count growth bound, and a selected cell give a square-integrable second-count add-one increment.
    iota kappa :
    Type*
    Fintype iota
    Fintype kappa
    lambda₁ lambda₂ :
    iota → kappa → NNReal
    F :
    (iota → kappa → Nat × Nat) → Real
    C :
    degree :
    hC :
    0 ≤ C
    hbound :
    ∀ x, |F x| ≤ C * (1 + (nestedPairedTotalCount x : Real)) ^ degree
    i :
    iota
    j :
    kappa
    MemLp (nestedPairAddOneSnd i j F) 2 (nestedPairedPoissonMeasure lambda₁ lambda₂)
    Proof (Lean source)
    theorem memLp_nestedPairAddOneSnd_of_polynomial_bound {iota kappa : Type*} [Fintype iota] [DecidableEq iota] [Fintype kappa] [DecidableEq kappa] (lambda₁ lambda₂ : iota → kappa → NNReal) (F : (iota → kappa → Nat × Nat) → Real) (C : Real) (degree : Nat) (hC : 0 ≤ C) (hbound : ∀ x, |F x| ≤ C * (1 + (nestedPairedTotalCount x : Real)) ^ degree) (i : iota) (j : kappa) : MemLp (nestedPairAddOneSnd i j F) 2 (nestedPairedPoissonMeasure lambda₁ lambda₂) := by let upd : (iota → kappa → Nat × Nat) → (iota → kappa → Nat × Nat) := fun x => update x i (update (x i) j ((x i j).1, (x i j).2 + 1)) apply memLp_nestedPairedPoisson_of_polynomial_bound lambda₁ lambda₂ (nestedPairAddOneSnd i j F) (measurable_of_countable _) (2 * C * 2 ^ degree) degree intro x change |F (upd x) - F x| ≤ (2 * C * 2 ^ degree) * (1 + (nestedPairedTotalCount x : Real)) ^ degree have hcount : nestedPairedTotalCount (upd x) = nestedPairedTotalCount x + 1 := by exact nestedPairedTotalCount_update_snd x i j have hbase_update : 1 + (nestedPairedTotalCount (upd x) : Real) ≤ 2 * (1 + (nestedPairedTotalCount x : Real)) := by rw [hcount, Nat.cast_add, Nat.cast_one] have ht : 0 ≤ (nestedPairedTotalCount x : Real) := by positivity linarith have hbase_old : 1 + (nestedPairedTotalCount x : Real) ≤ 2 * (1 + (nestedPairedTotalCount x : Real)) := by have ht : 0 ≤ (nestedPairedTotalCount x : Real) := by positivity linarith calc |F (upd x) - F x| ≤ |F (upd x)| + |F x| := abs_sub _ _ _ ≤ C * (1 + (nestedPairedTotalCount (upd x) : Real)) ^ degree + C * (1 + (nestedPairedTotalCount x : Real)) ^ degree := add_le_add (hbound (upd x)) (hbound x) _ ≤ C * (2 * (1 + (nestedPairedTotalCount x : Real))) ^ degree + C * (2 * (1 + (nestedPairedTotalCount x : Real))) ^ degree := by gcongr _ = (2 * C * 2 ^ degree) * (1 + (nestedPairedTotalCount x : Real)) ^ degree := by simp [mul_pow] ring
    Causalean.Mathlib.Probability.Poisson.Poincare.memLp_nestedPairAddOneSnd_of_polynomial_bound · Causalean/Mathlib/Probability/Poisson/Poincare/NestedPairedPolynomialGrowth.lean:287
Scalar 1 core · 3 supporting This module proves the scalar Poincaré inequality first for finitely supported sequences and then for arbitrary functions in the graph domain of the Poisson add-one operator. ★ poisson_addOne_poincare

Scalar Poisson add-one Poincaré inequality

This module proves the scalar Poincaré inequality first for finitely supported sequences and then for arbitrary functions in the graph domain of the Poisson add-one operator. The theorem is stated for every nonnegative rate, so the degenerate zero-rate Poisson law is included.

theorem poisson_addOne_poincare reviewed
Causalean.Mathlib.Probability.PoissonAddOnePoincare

At a nonnegative Poisson rate, a real sequence whose values are square-integrable and whose add-one increments are square-integrable has variance no larger than the rate times the expected squared add-one increment.

Formal statement
lambda :
f :
Nat → Real
hf :
MemLp f 2 (poissonMeasure lambda)
hdf :
MemLp (addOne f) 2 (poissonMeasure lambda)
≤ (lambda : Real) * ∫ n, (addOne f n) ^ 2 ∂(poissonMeasure lambda)
Proof (Lean source)
theorem poisson_addOne_poincare (lambda : NNReal) (f : Nat → Real) (hf : MemLp f 2 (poissonMeasure lambda)) (hdf : MemLp (addOne f) 2 (poissonMeasure lambda)) : variance f (poissonMeasure lambda) ≤ (lambda : Real) * ∫ n, (addOne f n) ^ 2 ∂(poissonMeasure lambda) := by -- Apply the finite-support result to `supportTruncation K f`. Pass variance and energy -- to the limit with the two graph-norm closure lemmas and L² variance continuity. let fK : Nat → Nat → Real := fun K ↦ supportTruncation K f have hfK (K : Nat) : MemLp (fK K) 2 (poissonMeasure lambda) := memLp_poissonMeasure_of_finiteSupport lambda _ (supportTruncation_finiteSupport K f) have hdfK (K : Nat) : MemLp (addOne (fK K)) 2 (poissonMeasure lambda) := memLp_poissonMeasure_of_finiteSupport lambda _ (finiteSupport_addOne _ (supportTruncation_finiteSupport K f)) have hvar : Tendsto (fun K ↦ variance (fK K) (poissonMeasure lambda)) atTop (nhds (variance f (poissonMeasure lambda))) := variance_tendsto_of_integral_sq_sub_tendsto_zero (poissonMeasure lambda) fK f hfK hf (by simpa [fK] using supportTruncation_integral_sq_tendsto_zero lambda f hf) have henergy : Tendsto (fun K ↦ ∫ n, (addOne (fK K) n) ^ 2 ∂(poissonMeasure lambda)) atTop (nhds (∫ n, (addOne f n) ^ 2 ∂(poissonMeasure lambda))) := integral_sq_tendsto_of_integral_sq_sub_tendsto_zero (poissonMeasure lambda) (fun K ↦ addOne (fK K)) (addOne f) hdfK hdf (by simpa [fK] using supportTruncation_addOne_integral_sq_tendsto_zero lambda f hf hdf) exact le_of_tendsto_of_tendsto' hvar ((tendsto_const_nhds : Tendsto (fun _ : Nat ↦ (lambda : Real)) atTop (nhds (lambda : Real))).mul henergy) (fun K ↦ poisson_addOne_poincare_finiteSupport lambda (fK K) (supportTruncation_finiteSupport K f))
Causalean.Mathlib.Probability.PoissonAddOnePoincare.poisson_addOne_poincare · Causalean/Mathlib/Probability/Poisson/Poincare/Scalar.lean:785 · uses addOne
3 supporting declarations (lemmas, instances)