Skip to content

Commit 290fe09

Browse files
committed
wip
1 parent b3548bc commit 290fe09

File tree

1 file changed

+175
-0
lines changed

1 file changed

+175
-0
lines changed
Lines changed: 175 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,175 @@
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

Comments
 (0)