Skip to content

Commit 57a4db2

Browse files
committed
feat(MeasureTheory): WithLp 2 (U × V) → U × V is measure preserving
1 parent 1321470 commit 57a4db2

1 file changed

Lines changed: 58 additions & 0 deletions

File tree

Mathlib/MeasureTheory/Measure/Haar/InnerProductSpace.lean

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ Authors: Sébastien Gouëzel
66
module
77

88
public import Mathlib.Analysis.InnerProductSpace.Orientation
9+
public import Mathlib.Analysis.InnerProductSpace.ProdL2
910
public import Mathlib.MeasureTheory.Measure.Lebesgue.EqHaar
1011
public import Mathlib.Analysis.Normed.Lp.MeasurableSpace
1112

@@ -180,3 +181,60 @@ theorem measurePreserving (f : E ≃ₗᵢ[ℝ] F) :
180181
congr
181182

182183
end LinearIsometryEquiv
184+
185+
section Prod
186+
187+
variable (U V : Type*)
188+
variable [NormedAddCommGroup U] [InnerProductSpace ℝ U] [MeasurableSpace U] [BorelSpace U]
189+
variable [FiniteDimensional ℝ U]
190+
variable [NormedAddCommGroup V] [InnerProductSpace ℝ V] [MeasurableSpace V] [BorelSpace V]
191+
variable [FiniteDimensional ℝ V]
192+
193+
-- Decompose `WithLp 2 (U × V) ≃ᵐ U × V` into a series of known measure-preserving equivalences
194+
private noncomputable def aux :
195+
WithLp 2 (U × V) ≃ᵐ U × V :=
196+
( -- WithLp 2 (U × V) ≃ₗᵢ[] WithLp 2 (WithLp 2 (Fin .. → ℝ) × WithLp 2 (Fin .. → ℝ)
197+
(LinearIsometryEquiv.withLpProdCongr 2
198+
(stdOrthonormalBasis ℝ U).repr
199+
(stdOrthonormalBasis ℝ V).repr).trans <|
200+
-- .. ≃ₗᵢ[] WithLp 2 (Fin (finrank ℝ U) ⊕ Fin (finrank ℝ V) → ℝ)
201+
(PiLp.sumPiLpEquivProdLpPiLp 2 (fun _ ↦ ℝ)).symm
202+
).toMeasurableEquiv.trans <|
203+
-- .. ≃ᵐ Fin (finrank ℝ U) ⊕ Fin (finrank ℝ V) → ℝ
204+
(MeasurableEquiv.toLp 2 _).symm.trans <|
205+
-- .. ≃ᵐ Fin (finrank ℝ U) → ℝ × Fin (finrank ℝ V) → ℝ
206+
(MeasurableEquiv.sumPiEquivProdPi (fun _ ↦ ℝ)).trans <|
207+
-- .. ≃ᵐ U × V
208+
(MeasurableEquiv.prodCongr
209+
((MeasurableEquiv.toLp 2 _).trans (stdOrthonormalBasis ℝ U).repr.symm.toMeasurableEquiv)
210+
((MeasurableEquiv.toLp 2 _).trans (stdOrthonormalBasis ℝ V).repr.symm.toMeasurableEquiv))
211+
212+
/-- The measure equivalence between `WithLp 2 (U × V)` and `U × V` is volume preserving. -/
213+
theorem EuclideanSpace.volume_preserving_symm_measurableEquiv_toLp_prod :
214+
MeasurePreserving (MeasurableEquiv.toLp 2 (U × V)).symm := by
215+
suffices MeasurePreserving (aux U V) by
216+
convert this
217+
ext uv
218+
<;> simp [aux, MeasurableEquiv.coe_sumPiEquivProdPi, LinearEquiv.prodCongr_symm,
219+
MeasurableEquiv.prodCongr]
220+
refine (LinearIsometryEquiv.measurePreserving _).trans ?_
221+
refine (volume_preserving_symm_measurableEquiv_toLp _).trans ?_
222+
refine (measurePreserving_sumPiEquivProdPi _).trans ?_
223+
refine MeasurePreserving.prod ?_ ?_
224+
all_goals
225+
· refine (EuclideanSpace.volume_preserving_symm_measurableEquiv_toLp _).symm.trans ?_
226+
exact (LinearIsometryEquiv.measurePreserving _)
227+
228+
/-- A copy of `EuclideanSpace.volume_preserving_symm_measurableEquiv_toLp_prod`
229+
for the canonical spelling of the equivalence. -/
230+
theorem Prod.volume_preserving_ofLp :
231+
MeasurePreserving (WithLp.ofLp : WithLp 2 (U × V) → U × V) :=
232+
EuclideanSpace.volume_preserving_symm_measurableEquiv_toLp_prod U V
233+
234+
/-- The reverse direction of `Prod.volume_preserving_ofLp`, since
235+
`MeasurePreserving.symm` only works for `MeasurableEquiv`s. -/
236+
theorem Prod.volume_preserving_toLp :
237+
MeasurePreserving (WithLp.toLp 2 : U × V → WithLp 2 (U × V)) :=
238+
(EuclideanSpace.volume_preserving_symm_measurableEquiv_toLp_prod U V).symm
239+
240+
end Prod

0 commit comments

Comments
 (0)