@@ -6,6 +6,7 @@ Authors: Sébastien Gouëzel
66module
77
88public import Mathlib.Analysis.InnerProductSpace.Orientation
9+ public import Mathlib.Analysis.InnerProductSpace.ProdL2
910public import Mathlib.MeasureTheory.Measure.Lebesgue.EqHaar
1011public import Mathlib.Analysis.Normed.Lp.MeasurableSpace
1112
@@ -180,3 +181,60 @@ theorem measurePreserving (f : E ≃ₗᵢ[ℝ] F) :
180181 congr
181182
182183end 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