|
| 1 | +/- |
| 2 | +Copyright (c) 2025 Etienne Marion. All rights reserved. |
| 3 | +Released under Apache 2.0 license as described in the file LICENSE. |
| 4 | +Authors: Etienne Marion |
| 5 | +-/ |
| 6 | +module |
| 7 | + |
| 8 | +public import Mathlib.Probability.Distributions.Gaussian.Fernique |
| 9 | +public import Mathlib.Probability.Distributions.Gaussian.Multivariate |
| 10 | +public import Mathlib.Analysis.InnerProductSpace.GramMatrix |
| 11 | + |
| 12 | +/-! |
| 13 | +# Pre-Brownian motion as a projective limit |
| 14 | +
|
| 15 | +-/ |
| 16 | + |
| 17 | +@[expose] public section |
| 18 | + |
| 19 | + |
| 20 | +open MeasureTheory NormedSpace Set |
| 21 | +open scoped ENNReal NNReal |
| 22 | + |
| 23 | +namespace L2 |
| 24 | + |
| 25 | +variable {ι : Type*} [Finite ι] |
| 26 | +variable {α : Type*} {mα : MeasurableSpace α} {μ : Measure α} |
| 27 | + |
| 28 | +/- In an `L2` space, the matrix of intersections of pairs of sets is positive semi-definite. -/ |
| 29 | +theorem posSemidef_interMatrix {μ : Measure α} {v : ι → (Set α)} |
| 30 | + (hv₁ : ∀ j, MeasurableSet (v j)) (hv₂ : ∀ j, μ (v j) ≠ ∞ := by finiteness) : |
| 31 | + Matrix.PosSemidef (Matrix.of fun i j : ι ↦ μ.real (v i ∩ v j)) := by |
| 32 | + simp only [hv₁, ne_eq, hv₂, not_false_eq_true, |
| 33 | + ← L2.real_inner_indicatorConstLp_one_indicatorConstLp_one] |
| 34 | + exact Matrix.posSemidef_gram ℝ _ |
| 35 | + |
| 36 | +end L2 |
| 37 | + |
| 38 | +namespace ProbabilityTheory |
| 39 | + |
| 40 | +variable {ι : Type*} {d : ℕ} |
| 41 | + |
| 42 | +def brownianCovMatrix (I : Finset ℝ≥0) : Matrix I I ℝ := Matrix.of fun s t ↦ min s.1 t.1 |
| 43 | + |
| 44 | +lemma brownianCovMatrix_apply {I : Finset ℝ≥0} (s t : I) : |
| 45 | + brownianCovMatrix I s t = min s.1 t.1 := rfl |
| 46 | + |
| 47 | +lemma brownianCovMatrix_submatrix {I J : Finset ℝ≥0} (hJI : J ⊆ I) : |
| 48 | + (brownianCovMatrix I).submatrix (fun i : J ↦ ⟨i.1, hJI i.2⟩) (fun i : J ↦ ⟨i.1, hJI i.2⟩) = |
| 49 | + brownianCovMatrix J := rfl |
| 50 | + |
| 51 | +lemma posSemidef_brownianCovMatrix (I : Finset ℝ≥0) : |
| 52 | + (brownianCovMatrix I).PosSemidef := by |
| 53 | + have h : brownianCovMatrix I = |
| 54 | + fun s t ↦ volume.real ((Icc 0 s.1.toReal) ∩ (Icc 0 t.1.toReal)) := by |
| 55 | + simp [Icc_inter_Icc, max_self, Real.volume_real_Icc, sub_zero, le_inf_iff, |
| 56 | + NNReal.zero_le_coe, and_self, sup_of_le_left] |
| 57 | + rfl |
| 58 | + exact h ▸ L2.posSemidef_interMatrix (fun j ↦ measurableSet_Icc) |
| 59 | + (fun j ↦ isCompact_Icc.measure_ne_top) |
| 60 | + |
| 61 | +variable [DecidableEq ι] |
| 62 | + |
| 63 | +noncomputable |
| 64 | +def gaussianProjectiveFamily (I : Finset ℝ≥0) : Measure (I → ℝ) := |
| 65 | + multivariateGaussian 0 (brownianCovMatrix I) |>.map (MeasurableEquiv.toLp 2 (I → ℝ)).symm |
| 66 | + |
| 67 | +lemma measurePreserving_equiv_multivariateGaussian (I : Finset ℝ≥0) : |
| 68 | + MeasurePreserving (MeasurableEquiv.toLp 2 (I → ℝ)).symm |
| 69 | + (multivariateGaussian 0 (brownianCovMatrix I)) (gaussianProjectiveFamily I) where |
| 70 | + measurable := by fun_prop |
| 71 | + map_eq := rfl |
| 72 | + |
| 73 | +lemma measurePreserving_equiv_gaussianProjectiveFamily (I : Finset ℝ≥0) : |
| 74 | + MeasurePreserving (MeasurableEquiv.toLp 2 (I → ℝ)).symm.symm (gaussianProjectiveFamily I) |
| 75 | + (multivariateGaussian 0 (brownianCovMatrix I)) where |
| 76 | + measurable := by fun_prop |
| 77 | + map_eq := by |
| 78 | + rw [gaussianProjectiveFamily, Measure.map_map, MeasurableEquiv.symm_comp_self, |
| 79 | + Measure.map_id] |
| 80 | + all_goals fun_prop |
| 81 | + |
| 82 | +lemma integral_gaussianProjectiveFamily {E : Type*} [NormedAddCommGroup E] [NormedSpace ℝ E] |
| 83 | + (I : Finset ℝ≥0) (f : (I → ℝ) → E) : |
| 84 | + ∫ x, f x ∂gaussianProjectiveFamily I = |
| 85 | + ∫ x, f (EuclideanSpace.equiv I ℝ x) |
| 86 | + ∂multivariateGaussian 0 (brownianCovMatrix I) := by |
| 87 | + simp only [gaussianProjectiveFamily, integral_map_equiv, MeasurableEquiv.toLp_symm_apply] |
| 88 | + rfl |
| 89 | + |
| 90 | +instance isGaussian_gaussianProjectiveFamily (I : Finset ℝ≥0) : |
| 91 | + IsGaussian (gaussianProjectiveFamily I) := by |
| 92 | + unfold gaussianProjectiveFamily |
| 93 | + rw [show ⇑(MeasurableEquiv.toLp 2 (I → ℝ)).symm = ⇑(EuclideanSpace.equiv I ℝ) from rfl] |
| 94 | + infer_instance |
| 95 | + |
| 96 | +@[simp] |
| 97 | +lemma integral_id_gaussianProjectiveFamily (I : Finset ℝ≥0) : |
| 98 | + ∫ x, x ∂(gaussianProjectiveFamily I) = 0 := by |
| 99 | + rw [integral_gaussianProjectiveFamily, ← ContinuousLinearEquiv.coe_coe, |
| 100 | + ContinuousLinearMap.integral_comp_id_comm IsGaussian.integrable_id, |
| 101 | + integral_id_multivariateGaussian, map_zero] |
| 102 | + |
| 103 | +lemma integral_id_gaussianProjectiveFamily' (I : Finset ℝ≥0) : |
| 104 | + ∫ x, id x ∂(gaussianProjectiveFamily I) = 0 := integral_id_gaussianProjectiveFamily I |
| 105 | + |
| 106 | +open scoped RealInnerProductSpace in |
| 107 | +lemma covariance_eval_gaussianProjectiveFamily (I : Finset ℝ≥0) (s t : I) : |
| 108 | + cov[fun x ↦ x s, fun x ↦ x t; gaussianProjectiveFamily I] = min s.1 t.1 := by |
| 109 | + rw [gaussianProjectiveFamily, covariance_map_equiv] |
| 110 | + change cov[fun x : EuclideanSpace ℝ I ↦ x s, fun x ↦ x t; _] = _ |
| 111 | + have (u : I) : (fun x : EuclideanSpace ℝ I ↦ x u) = |
| 112 | + fun x ↦ ⟪EuclideanSpace.basisFun I ℝ u, x⟫ := by ext; simp [PiLp.inner_apply] |
| 113 | + rw [this, this, ← covarianceBilin_apply_eq_cov, |
| 114 | + covarianceBilin_multivariateGaussian (posSemidef_brownianCovMatrix I), |
| 115 | + ContinuousBilinForm.ofMatrix_orthonormalBasis, brownianCovMatrix_apply] |
| 116 | + exact IsGaussian.memLp_two_id |
| 117 | + |
| 118 | +lemma variance_eval_gaussianProjectiveFamily {I : Finset ℝ≥0} (s : I) : |
| 119 | + Var[fun x ↦ x s; gaussianProjectiveFamily I] = s := by |
| 120 | + rw [← covariance_self, covariance_eval_gaussianProjectiveFamily, min_self] |
| 121 | + exact Measurable.aemeasurable <| by fun_prop |
| 122 | + |
| 123 | +lemma hasLaw_eval_gaussianProjectiveFamily {I : Finset ℝ≥0} (s : I) : |
| 124 | + HasLaw (fun x ↦ x s) (gaussianReal 0 s) (gaussianProjectiveFamily I) where |
| 125 | + aemeasurable := Measurable.aemeasurable <| by fun_prop |
| 126 | + map_eq := by |
| 127 | + rw [HasGaussianLaw.map_eq_gaussianReal, variance_eval_gaussianProjectiveFamily, |
| 128 | + Real.toNNReal_coe] |
| 129 | + swap |
| 130 | + · exact IsGaussian.hasGaussianLaw_id.eval s |
| 131 | + conv => enter [1, 1, 2]; change fun x ↦ ContinuousLinearMap.proj (R := ℝ) s x |
| 132 | + rw [ContinuousLinearMap.integral_comp_id_comm, integral_id_gaussianProjectiveFamily, map_zero] |
| 133 | + exact IsGaussian.integrable_id |
| 134 | + |
| 135 | +open ContinuousLinearMap in |
| 136 | +lemma hasLaw_eval_sub_eval_gaussianProjectiveFamily (I : Finset ℝ≥0) (s t : I) : |
| 137 | + HasLaw ((fun x ↦ x s - x t)) (gaussianReal 0 (max (s - t) (t - s))) |
| 138 | + (gaussianProjectiveFamily I) where |
| 139 | + map_eq := by |
| 140 | + rw [HasGaussianLaw.map_eq_gaussianReal, variance_fun_sub, |
| 141 | + variance_eval_gaussianProjectiveFamily, variance_eval_gaussianProjectiveFamily, |
| 142 | + covariance_eval_gaussianProjectiveFamily] |
| 143 | + · conv => |
| 144 | + enter [1, 1, 2]; |
| 145 | + change fun x ↦ (proj (R := ℝ) (φ := fun i : I ↦ ℝ) s - |
| 146 | + proj (R := ℝ) (φ := fun i : I ↦ ℝ) t) x |
| 147 | + rw [integral_comp_id_comm, integral_id_gaussianProjectiveFamily, map_zero] |
| 148 | + · norm_cast |
| 149 | + rw [sub_add_eq_add_sub, ← NNReal.coe_add, ← NNReal.coe_sub, Real.toNNReal_coe, |
| 150 | + NNReal.add_sub_two_mul_min_eq_max] |
| 151 | + nth_grw 1 [two_mul, min_le_left, min_le_right] |
| 152 | + · exact IsGaussian.integrable_id |
| 153 | + · exact (IsGaussian.hasGaussianLaw_id.eval s).memLp_two |
| 154 | + · exact (IsGaussian.hasGaussianLaw_id.eval t).memLp_two |
| 155 | + · exact (IsGaussian.hasGaussianLaw_id.prodMk s t).sub |
| 156 | + |
| 157 | +lemma isProjectiveMeasureFamily_gaussianProjectiveFamily : |
| 158 | + IsProjectiveMeasureFamily (α := fun _ ↦ ℝ) gaussianProjectiveFamily := by |
| 159 | + intro I J hJI |
| 160 | + nth_rw 2 [gaussianProjectiveFamily] |
| 161 | + rw [Measure.map_map] |
| 162 | + · have : (Finset.restrict₂ (π := fun _ ↦ ℝ) hJI ∘ (MeasurableEquiv.toLp 2 (I → ℝ)).symm) = |
| 163 | + (MeasurableEquiv.toLp 2 (J → ℝ)).symm ∘ (EuclideanSpace.restrict₂ hJI) := by |
| 164 | + ext; simp |
| 165 | + rw [this, ((measurePreserving_equiv_multivariateGaussian J).comp |
| 166 | + (measurePreserving_restrict_multivariateGaussian |
| 167 | + (posSemidef_brownianCovMatrix I) hJI)).map_eq] |
| 168 | + · exact Finset.measurable_restrict₂ _ -- fun_prop fails |
| 169 | + · fun_prop |
| 170 | + |
| 171 | +lemma measurePreserving_restrict_gaussianProjectiveFamily {I J : Finset ℝ≥0} (hIJ : I ⊆ J) : |
| 172 | + MeasurePreserving (Finset.restrict₂ (π := fun _ ↦ ℝ) hIJ) (gaussianProjectiveFamily J) |
| 173 | + (gaussianProjectiveFamily I) where |
| 174 | + measurable := Finset.measurable_restrict₂ _ |
| 175 | + map_eq := isProjectiveMeasureFamily_gaussianProjectiveFamily J I hIJ |>.symm |
0 commit comments