measure_theory.function.jacobian
⟷
Mathlib.MeasureTheory.Function.Jacobian
The following section lists changes to this file in mathlib3 and mathlib4 that occured after the initial port. Most recent changes are shown first. Hovering over a commit will show all commits associated with the same mathlib3 commit.
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(last sync)
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -1351,7 +1351,7 @@ theorem integral_image_eq_integral_abs_det_fderiv_smul [CompleteSpace F] (hs : M
have : ∀ x : s, g (s.restrict f x) = (g ∘ f) x := fun x => rfl
simp only [this, ENNReal.ofReal]
rw [← (MeasurableEmbedding.subtype_coe hs).integral_map, map_comap_subtype_coe hs,
- set_integral_withDensity_eq_set_integral_smul₀
+ setIntegral_withDensity_eq_setIntegral_smul₀
(ae_measurable_to_nnreal_abs_det_fderiv_within μ hs hf') _ hs]
congr with x
conv_rhs => rw [← Real.coe_toNNReal _ (abs_nonneg (f' x).det)]
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -3,7 +3,7 @@ Copyright (c) 2022 Sébastien Gouëzel. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Sébastien Gouëzel
-/
-import Analysis.Calculus.Inverse
+import Analysis.Calculus.InverseFunctionTheorem.ApproximatesLinearOn
import MeasureTheory.Constructions.BorelSpace.ContinuousLinearMap
import MeasureTheory.Covering.BesicovitchVectorSpace
import MeasureTheory.Measure.Lebesgue.EqHaar
@@ -358,7 +358,7 @@ theorem addHaar_image_le_mul_of_det_lt (A : E →L[ℝ] E) {m : ℝ≥0} (hm : E
apply Set.mem_add.2 ⟨A (z - x), f z - f x - A (z - x) + f x, _, _, _⟩
· apply mem_image_of_mem
simpa only [dist_eq_norm, mem_closed_ball, mem_closedBall_zero_iff] using zr
- · rw [mem_closedBall_iff_norm, add_sub_cancel]
+ · rw [mem_closedBall_iff_norm, add_sub_cancel_right]
calc
‖f z - f x - A (z - x)‖ ≤ δ * ‖z - x‖ := hf _ zs _ xs
_ ≤ ε * r :=
@@ -559,7 +559,7 @@ theorem ApproximatesLinearOn.norm_fderiv_sub_le {A : E →L[ℝ] E} {δ : ℝ≥
exact ⟨a, az, by simp only [ha, add_neg_cancel_left]⟩
have norm_a : ‖a‖ ≤ ‖z‖ + ε :=
calc
- ‖a‖ = ‖z + (a - z)‖ := by simp only [add_sub_cancel'_right]
+ ‖a‖ = ‖z + (a - z)‖ := by simp only [add_sub_cancel]
_ ≤ ‖z‖ + ‖a - z‖ := (norm_add_le _ _)
_ ≤ ‖z‖ + ε := add_le_add_left (mem_closedBall_iff_norm.1 az) _
-- use the approximation properties to control `(f' x - A) a`, and then `(f' x - A) z` as `z` is
@@ -571,13 +571,13 @@ theorem ApproximatesLinearOn.norm_fderiv_sub_le {A : E →L[ℝ] E} {δ : ℝ≥
_ = ‖f y - f x - A (y - x) - (f y - f x - (f' x) (y - x))‖ :=
by
congr 1
- simp only [ya, add_sub_cancel', sub_sub_sub_cancel_left, ContinuousLinearMap.coe_sub',
+ simp only [ya, add_sub_cancel_left, sub_sub_sub_cancel_left, ContinuousLinearMap.coe_sub',
eq_self_iff_true, sub_left_inj, Pi.sub_apply, ContinuousLinearMap.map_smul, smul_sub]
_ ≤ ‖f y - f x - A (y - x)‖ + ‖f y - f x - (f' x) (y - x)‖ := (norm_sub_le _ _)
_ ≤ δ * ‖y - x‖ + ε * ‖y - x‖ := (add_le_add (hf _ ys _ xs) (hρ ⟨rρ hy, ys⟩))
_ = r * (δ + ε) * ‖a‖ :=
by
- simp only [ya, add_sub_cancel', norm_smul, Real.norm_eq_abs, abs_of_nonneg rpos.le]
+ simp only [ya, add_sub_cancel_left, norm_smul, Real.norm_eq_abs, abs_of_nonneg rpos.le]
ring
_ ≤ r * (δ + ε) * (‖z‖ + ε) :=
mul_le_mul_of_nonneg_left norm_a (mul_nonneg rpos.le (add_nonneg δ.2 εpos.le))
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -157,7 +157,7 @@ theorem exists_closed_cover_approximatesLinearOn_of_hasFDerivWithinAt [SecondCou
rw [hT]
refine' mem_Union.2 ⟨⟨x, xs⟩, _⟩
simpa only [mem_ball, Subtype.coe_mk, dist_self] using (rpos (f' x)).bot_lt
- rwa [mem_Union₂] at this
+ rwa [mem_Union₂] at this
obtain ⟨ε, εpos, hε⟩ : ∃ ε : ℝ, 0 < ε ∧ ‖f' x - f' z‖ + ε ≤ r (f' z) :=
by
refine' ⟨r (f' z) - ‖f' x - f' z‖, _, le_of_eq (by abel)⟩
@@ -372,7 +372,7 @@ theorem addHaar_image_le_mul_of_det_lt (A : E →L[ℝ] E) {m : ℝ≥0} (hm : E
rw [smul_add, ← add_assoc, add_comm {f x}, add_assoc, smul_closedBall _ _ εpos.le, smul_zero,
singleton_add_closedBall_zero, ← image_smul_set ℝ E E A, smul_closedBall _ _ zero_le_one,
smul_zero, Real.norm_eq_abs, abs_of_nonneg r0, mul_one, mul_comm]
- rw [this] at K
+ rw [this] at K
calc
μ (f '' (s ∩ closed_ball x r)) ≤ μ ({f x} + r • (A '' closed_ball 0 1 + closed_ball 0 ε)) :=
measure_mono K
@@ -387,7 +387,7 @@ theorem addHaar_image_le_mul_of_det_lt (A : E →L[ℝ] E) {m : ℝ≥0} (hm : E
have J : ∀ᶠ a in 𝓝[>] (0 : ℝ≥0∞), μ (f '' s) ≤ m * (μ s + a) :=
by
filter_upwards [self_mem_nhdsWithin] with a ha
- change 0 < a at ha
+ change 0 < a at ha
obtain ⟨t, r, t_count, ts, rpos, st, μt⟩ :
∃ (t : Set E) (r : E → ℝ),
t.Countable ∧
@@ -401,7 +401,7 @@ theorem addHaar_image_le_mul_of_det_lt (A : E →L[ℝ] E) {m : ℝ≥0} (hm : E
calc
μ (f '' s) ≤ μ (⋃ x : t, f '' (s ∩ closed_ball x (r x))) :=
by
- rw [bUnion_eq_Union] at st
+ rw [bUnion_eq_Union] at st
apply measure_mono
rw [← image_Union, ← inter_Union]
exact image_subset _ (subset_inter (subset.refl _) st)
@@ -415,7 +415,7 @@ theorem addHaar_image_le_mul_of_det_lt (A : E →L[ℝ] E) {m : ℝ≥0} (hm : E
apply tendsto.mono_left _ nhdsWithin_le_nhds
apply ENNReal.Tendsto.const_mul (tendsto_const_nhds.add tendsto_id)
simp only [ENNReal.coe_ne_top, Ne.def, or_true_iff, not_false_iff]
- rw [add_zero] at L
+ rw [add_zero] at L
exact ge_of_tendsto L J
#align measure_theory.add_haar_image_le_mul_of_det_lt MeasureTheory.addHaar_image_le_mul_of_det_lt
-/
@@ -481,7 +481,7 @@ theorem mul_le_addHaar_image_of_lt_det (A : E →L[ℝ] E) {m : ℝ≥0}
refine' tendsto.mul (tendsto_const_nhds.mul _) tendsto_id
refine' (tendsto.sub tendsto_const_nhds tendsto_id).inv₀ _
simpa only [tsub_zero, inv_eq_zero, Ne.def] using H
- simp only [MulZeroClass.mul_zero] at this
+ simp only [MulZeroClass.mul_zero] at this
exact (tendsto_order.1 this).2 δ₀ δ₀pos
-- let `δ` be small enough, and `f` approximated by `B` up to `δ`.
filter_upwards [L1, L2]
@@ -527,7 +527,7 @@ theorem ApproximatesLinearOn.norm_fderiv_sub_le {A : E →L[ℝ] E} {δ : ℝ≥
tendsto (fun ε : ℝ => ((δ : ℝ) + ε) * (‖z‖ + ε) + ‖f' x - A‖ * ε) (𝓝[>] 0)
(𝓝 ((δ + 0) * (‖z‖ + 0) + ‖f' x - A‖ * 0)) :=
tendsto.mono_left (Continuous.tendsto (by continuity) 0) nhdsWithin_le_nhds
- simp only [add_zero, MulZeroClass.mul_zero] at this
+ simp only [add_zero, MulZeroClass.mul_zero] at this
apply le_of_tendsto_of_tendsto tendsto_const_nhds this
filter_upwards [self_mem_nhdsWithin]
exact H
@@ -554,7 +554,7 @@ theorem ApproximatesLinearOn.norm_fderiv_sub_le {A : E →L[ℝ] E} {δ : ℝ≥
-- write `y = x + r a` with `a ∈ closed_ball z ε`.
obtain ⟨a, az, ya⟩ : ∃ a, a ∈ closed_ball z ε ∧ y = x + r • a :=
by
- simp only [mem_smul_set, image_add_left, mem_preimage, singleton_add] at hy
+ simp only [mem_smul_set, image_add_left, mem_preimage, singleton_add] at hy
rcases hy with ⟨a, az, ha⟩
exact ⟨a, az, by simp only [ha, add_neg_cancel_left]⟩
have norm_a : ‖a‖ ≤ ‖z‖ + ε :=
@@ -593,7 +593,7 @@ theorem ApproximatesLinearOn.norm_fderiv_sub_le {A : E →L[ℝ] E} {δ : ℝ≥
_ ≤ (δ + ε) * (‖z‖ + ε) + ‖f' x - A‖ * ‖z - a‖ :=
by
apply add_le_add
- · rw [mul_assoc] at I ; exact (mul_le_mul_left rpos).1 I
+ · rw [mul_assoc] at I; exact (mul_le_mul_left rpos).1 I
· apply ContinuousLinearMap.le_opNorm
_ ≤ (δ + ε) * (‖z‖ + ε) + ‖f' x - A‖ * ε :=
add_le_add le_rfl
@@ -750,7 +750,7 @@ theorem addHaar_image_eq_zero_of_det_fderivWithin_eq_zero
(𝓝 (((0 : ℝ≥0) : ℝ≥0∞) * μ (closed_ball 0 R))) :=
ENNReal.Tendsto.mul_const (ENNReal.tendsto_coe.2 tendsto_id)
(Or.inr measure_closed_ball_lt_top.Ne)
- simp only [MulZeroClass.zero_mul, ENNReal.coe_zero] at this
+ simp only [MulZeroClass.zero_mul, ENNReal.coe_zero] at this
exact tendsto.mono_left this nhdsWithin_le_nhds
apply le_antisymm _ (zero_le _)
apply ge_of_tendsto B
@@ -826,7 +826,7 @@ theorem aemeasurable_fderivWithin (hs : MeasurableSet s)
exact hg n
-- putting these two properties together gives the conclusion.
filter_upwards [E₁, E₂] with x hx1 hx2
- rw [← nndist_eq_nnnorm] at hx1
+ rw [← nndist_eq_nnnorm] at hx1
rw [hx2, dist_comm]
exact hx1
#align measure_theory.ae_measurable_fderiv_within MeasureTheory.aemeasurable_fderivWithin
@@ -992,7 +992,7 @@ theorem addHaar_image_le_lintegral_abs_det_fderiv_aux2 (hs : MeasurableSet s) (h
refine' tendsto_const_nhds.add _
refine' ENNReal.Tendsto.mul_const _ (Or.inr h's)
exact ENNReal.Tendsto.const_mul (ENNReal.tendsto_coe.2 tendsto_id) (Or.inr ENNReal.coe_ne_top)
- simp only [add_zero, MulZeroClass.zero_mul, MulZeroClass.mul_zero, ENNReal.coe_zero] at this
+ simp only [add_zero, MulZeroClass.zero_mul, MulZeroClass.mul_zero, ENNReal.coe_zero] at this
apply ge_of_tendsto this
filter_upwards [self_mem_nhdsWithin]
rintro ε (εpos : 0 < ε)
@@ -1086,7 +1086,7 @@ theorem lintegral_abs_det_fderiv_le_addHaar_image_aux1 (hs : MeasurableSet s)
simp only [ht, εpos.ne', WithTop.mul_top, ENNReal.coe_eq_zero, le_top, Ne.def,
not_false_iff, _root_.add_top]
have := h t g (htg.mono_num (min_le_left _ _))
- rwa [WithTop.coe_sub, ENNReal.sub_mul, tsub_le_iff_right] at this
+ rwa [WithTop.coe_sub, ENNReal.sub_mul, tsub_le_iff_right] at this
simp only [ht, imp_true_iff, Ne.def, not_false_iff]
choose δ hδ using this
obtain ⟨t, A, t_disj, t_meas, t_cover, ht, -⟩ :
@@ -1165,7 +1165,7 @@ theorem lintegral_abs_det_fderiv_le_addHaar_image_aux2 (hs : MeasurableSet s) (h
refine' tendsto_const_nhds.add _
refine' ENNReal.Tendsto.mul_const _ (Or.inr h's)
exact ENNReal.Tendsto.const_mul (ENNReal.tendsto_coe.2 tendsto_id) (Or.inr ENNReal.coe_ne_top)
- simp only [add_zero, MulZeroClass.zero_mul, MulZeroClass.mul_zero, ENNReal.coe_zero] at this
+ simp only [add_zero, MulZeroClass.zero_mul, MulZeroClass.mul_zero, ENNReal.coe_zero] at this
apply ge_of_tendsto this
filter_upwards [self_mem_nhdsWithin]
rintro ε (εpos : 0 < ε)
@@ -1284,11 +1284,11 @@ theorem restrict_map_withDensity_abs_det_fderiv_eq_addHaar (hs : MeasurableSet s
rw [hF, ← measure.map_map u_meas measurable_subtype_coe, map_comap_subtype_coe hs,
restrict_with_density hs]
exact map_with_density_abs_det_fderiv_eq_add_haar μ hs u' (hf.congr uf.symm) u_meas
- rw [uf.image_eq] at A
+ rw [uf.image_eq] at A
have : F = s.restrict f := by
ext x
exact uf x.2
- rwa [this] at A
+ rwa [this] at A
#align measure_theory.restrict_map_with_density_abs_det_fderiv_eq_add_haar MeasureTheory.restrict_map_withDensity_abs_det_fderiv_eq_addHaar
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -177,7 +177,7 @@ theorem exists_closed_cover_approximatesLinearOn_of_hasFDerivWithinAt [SecondCou
_ ≤ ‖f y - f x - (f' x) (y - x)‖ + ‖(f' x - f' z) (y - x)‖ := (norm_add_le _ _)
_ ≤ ε * ‖y - x‖ + ‖f' x - f' z‖ * ‖y - x‖ :=
by
- refine' add_le_add (hδ _) (ContinuousLinearMap.le_op_norm _ _)
+ refine' add_le_add (hδ _) (ContinuousLinearMap.le_opNorm _ _)
rw [inter_comm]
exact inter_subset_inter_right _ (ball_subset_ball hn.le) hy
_ ≤ r (f' z) * ‖y - x‖ := by
@@ -519,7 +519,7 @@ theorem ApproximatesLinearOn.norm_fderiv_sub_le {A : E →L[ℝ] E} {δ : ℝ≥
-- start from a Lebesgue density point `x`, belonging to `s`.
intro x hx xs
-- consider an arbitrary vector `z`.
- apply ContinuousLinearMap.op_norm_le_bound _ δ.2 fun z => _
+ apply ContinuousLinearMap.opNorm_le_bound _ δ.2 fun z => _
-- to show that `‖(f' x - A) z‖ ≤ δ ‖z‖`, it suffices to do it up to some error that vanishes
-- asymptotically in terms of `ε > 0`.
suffices H : ∀ ε, 0 < ε → ‖(f' x - A) z‖ ≤ (δ + ε) * (‖z‖ + ε) + ‖f' x - A‖ * ε
@@ -594,7 +594,7 @@ theorem ApproximatesLinearOn.norm_fderiv_sub_le {A : E →L[ℝ] E} {δ : ℝ≥
by
apply add_le_add
· rw [mul_assoc] at I ; exact (mul_le_mul_left rpos).1 I
- · apply ContinuousLinearMap.le_op_norm
+ · apply ContinuousLinearMap.le_opNorm
_ ≤ (δ + ε) * (‖z‖ + ε) + ‖f' x - A‖ * ε :=
add_le_add le_rfl
(mul_le_mul_of_nonneg_left (mem_closedBall_iff_norm'.1 az) (norm_nonneg _))
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -1268,7 +1268,12 @@ theorem restrict_map_withDensity_abs_det_fderiv_eq_addHaar (hs : MeasurableSet s
Measure.map (s.restrict f) (comap coe (μ.withDensity fun x => ENNReal.ofReal |(f' x).det|)) =
μ.restrict (f '' s) :=
by
- obtain ⟨u, u_meas, uf⟩ : ∃ u, Measurable u ∧ eq_on u f s := by classical
+ obtain ⟨u, u_meas, uf⟩ : ∃ u, Measurable u ∧ eq_on u f s := by
+ classical
+ refine' ⟨piecewise s f 0, _, piecewise_eq_on _ _ _⟩
+ refine' ContinuousOn.measurable_piecewise _ continuous_zero.continuous_on hs
+ have : DifferentiableOn ℝ f s := fun x hx => (hf' x hx).DifferentiableWithinAt
+ exact this.continuous_on
have u' : ∀ x ∈ s, HasFDerivWithinAt u (f' x) s x := fun x hx =>
(hf' x hx).congr (fun y hy => uf hy) (uf hx)
set F : s → E := u ∘ coe with hF
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -1268,12 +1268,7 @@ theorem restrict_map_withDensity_abs_det_fderiv_eq_addHaar (hs : MeasurableSet s
Measure.map (s.restrict f) (comap coe (μ.withDensity fun x => ENNReal.ofReal |(f' x).det|)) =
μ.restrict (f '' s) :=
by
- obtain ⟨u, u_meas, uf⟩ : ∃ u, Measurable u ∧ eq_on u f s := by
- classical
- refine' ⟨piecewise s f 0, _, piecewise_eq_on _ _ _⟩
- refine' ContinuousOn.measurable_piecewise _ continuous_zero.continuous_on hs
- have : DifferentiableOn ℝ f s := fun x hx => (hf' x hx).DifferentiableWithinAt
- exact this.continuous_on
+ obtain ⟨u, u_meas, uf⟩ : ∃ u, Measurable u ∧ eq_on u f s := by classical
have u' : ∀ x ∈ s, HasFDerivWithinAt u (f' x) s x := fun x hx =>
(hf' x hx).congr (fun y hy => uf hy) (uf hx)
set F : s → E := u ∘ coe with hF
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -1407,7 +1407,7 @@ theorem integral_target_eq_integral_abs_det_fderiv_smul [CompleteSpace F]
{f : PartialHomeomorph E E} (hf' : ∀ x ∈ f.source, HasFDerivAt f (f' x) x) (g : E → F) :
∫ x in f.target, g x ∂μ = ∫ x in f.source, |(f' x).det| • g (f x) ∂μ :=
by
- have : f '' f.source = f.target := LocalEquiv.image_source_eq_target f.to_local_equiv
+ have : f '' f.source = f.target := PartialEquiv.image_source_eq_target f.to_local_equiv
rw [← this]
apply integral_image_eq_integral_abs_det_fderiv_smul μ f.open_source.measurable_set _ f.inj_on
intro x hx
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -1403,8 +1403,8 @@ theorem integral_image_eq_integral_abs_deriv_smul {s : Set ℝ} {f : ℝ → ℝ
-/
#print MeasureTheory.integral_target_eq_integral_abs_det_fderiv_smul /-
-theorem integral_target_eq_integral_abs_det_fderiv_smul [CompleteSpace F] {f : LocalHomeomorph E E}
- (hf' : ∀ x ∈ f.source, HasFDerivAt f (f' x) x) (g : E → F) :
+theorem integral_target_eq_integral_abs_det_fderiv_smul [CompleteSpace F]
+ {f : PartialHomeomorph E E} (hf' : ∀ x ∈ f.source, HasFDerivAt f (f' x) x) (g : E → F) :
∫ x in f.target, g x ∂μ = ∫ x in f.source, |(f' x).det| • g (f x) ∂μ :=
by
have : f '' f.source = f.target := LocalEquiv.image_source_eq_target f.to_local_equiv
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -3,12 +3,12 @@ Copyright (c) 2022 Sébastien Gouëzel. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Sébastien Gouëzel
-/
-import Mathbin.Analysis.Calculus.Inverse
-import Mathbin.MeasureTheory.Constructions.BorelSpace.ContinuousLinearMap
-import Mathbin.MeasureTheory.Covering.BesicovitchVectorSpace
-import Mathbin.MeasureTheory.Measure.Lebesgue.EqHaar
-import Mathbin.Analysis.NormedSpace.Pointwise
-import Mathbin.MeasureTheory.Constructions.Polish
+import Analysis.Calculus.Inverse
+import MeasureTheory.Constructions.BorelSpace.ContinuousLinearMap
+import MeasureTheory.Covering.BesicovitchVectorSpace
+import MeasureTheory.Measure.Lebesgue.EqHaar
+import Analysis.NormedSpace.Pointwise
+import MeasureTheory.Constructions.Polish
#align_import measure_theory.function.jacobian from "leanprover-community/mathlib"@"6b31d1eebd64eab86d5bd9936bfaada6ca8b5842"
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -2,11 +2,6 @@
Copyright (c) 2022 Sébastien Gouëzel. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Sébastien Gouëzel
-
-! This file was ported from Lean 3 source module measure_theory.function.jacobian
-! leanprover-community/mathlib commit 6b31d1eebd64eab86d5bd9936bfaada6ca8b5842
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathbin.Analysis.Calculus.Inverse
import Mathbin.MeasureTheory.Constructions.BorelSpace.ContinuousLinearMap
@@ -15,6 +10,8 @@ import Mathbin.MeasureTheory.Measure.Lebesgue.EqHaar
import Mathbin.Analysis.NormedSpace.Pointwise
import Mathbin.MeasureTheory.Constructions.Polish
+#align_import measure_theory.function.jacobian from "leanprover-community/mathlib"@"6b31d1eebd64eab86d5bd9936bfaada6ca8b5842"
+
/-!
# Change of variables in higher-dimensional integrals
mathlib commit https://github.com/leanprover-community/mathlib/commit/9240e8be927a0955b9a82c6c85ef499ee3a626b8
@@ -307,13 +307,12 @@ to the approximating linear map.
#print MeasureTheory.addHaar_image_le_mul_of_det_lt /-
/-- Let `f` be a function which is sufficiently close (in the Lipschitz sense) to a given linear
map `A`. Then it expands the volume of any set by at most `m` for any `m > det A`. -/
-theorem addHaar_image_le_mul_of_det_lt (A : E →L[ℝ] E) {m : ℝ≥0}
- (hm : ENNReal.ofReal (|A.det|) < m) :
+theorem addHaar_image_le_mul_of_det_lt (A : E →L[ℝ] E) {m : ℝ≥0} (hm : ENNReal.ofReal |A.det| < m) :
∀ᶠ δ in 𝓝[>] (0 : ℝ≥0),
∀ (s : Set E) (f : E → E) (hf : ApproximatesLinearOn f A s δ), μ (f '' s) ≤ m * μ s :=
by
apply nhdsWithin_le_nhds
- let d := ENNReal.ofReal (|A.det|)
+ let d := ENNReal.ofReal |A.det|
-- construct a small neighborhood of `A '' (closed_ball 0 1)` with measure comparable to
-- the determinant of `A`.
obtain ⟨ε, hε, εpos⟩ :
@@ -428,7 +427,7 @@ theorem addHaar_image_le_mul_of_det_lt (A : E →L[ℝ] E) {m : ℝ≥0}
/-- Let `f` be a function which is sufficiently close (in the Lipschitz sense) to a given linear
map `A`. Then it expands the volume of any set by at least `m` for any `m < det A`. -/
theorem mul_le_addHaar_image_of_lt_det (A : E →L[ℝ] E) {m : ℝ≥0}
- (hm : (m : ℝ≥0∞) < ENNReal.ofReal (|A.det|)) :
+ (hm : (m : ℝ≥0∞) < ENNReal.ofReal |A.det|) :
∀ᶠ δ in 𝓝[>] (0 : ℝ≥0),
∀ (s : Set E) (f : E → E) (hf : ApproximatesLinearOn f A s δ),
(m : ℝ≥0∞) * μ s ≤ μ (f '' s) :=
@@ -446,7 +445,7 @@ theorem mul_le_addHaar_image_of_lt_det (A : E →L[ℝ] E) {m : ℝ≥0}
-- let `B` be the continuous linear equiv version of `A`.
let B := A.to_continuous_linear_equiv_of_det_ne_zero hA
-- the determinant of `B.symm` is bounded by `m⁻¹`
- have I : ENNReal.ofReal (|(B.symm : E →L[ℝ] E).det|) < (m⁻¹ : ℝ≥0) :=
+ have I : ENNReal.ofReal |(B.symm : E →L[ℝ] E).det| < (m⁻¹ : ℝ≥0) :=
by
simp only [ENNReal.ofReal, abs_inv, Real.toNNReal_inv, ContinuousLinearEquiv.det_coe_symm,
ContinuousLinearMap.coe_toContinuousLinearEquivOfDetNeZero, ENNReal.coe_lt_coe] at hm ⊢
@@ -626,11 +625,11 @@ theorem addHaar_image_eq_zero_of_differentiableOn_of_addHaar_eq_zero (hf : Diffe
∃ δ : ℝ≥0,
0 < δ ∧
∀ (t : Set E) (hf : ApproximatesLinearOn f A t δ),
- μ (f '' t) ≤ (Real.toNNReal (|A.det|) + 1 : ℝ≥0) * μ t :=
+ μ (f '' t) ≤ (Real.toNNReal |A.det| + 1 : ℝ≥0) * μ t :=
by
intro A
- let m : ℝ≥0 := Real.toNNReal (|A.det|) + 1
- have I : ENNReal.ofReal (|A.det|) < m := by
+ let m : ℝ≥0 := Real.toNNReal |A.det| + 1
+ have I : ENNReal.ofReal |A.det| < m := by
simp only [ENNReal.ofReal, m, lt_add_iff_pos_right, zero_lt_one, ENNReal.coe_lt_coe]
rcases((add_haar_image_le_mul_of_det_lt μ A I).And self_mem_nhdsWithin).exists with ⟨δ, h, h'⟩
exact ⟨δ, h', fun t ht => h t f ht⟩
@@ -651,12 +650,12 @@ theorem addHaar_image_eq_zero_of_differentiableOn_of_addHaar_eq_zero (hf : Diffe
rw [← image_Union, ← inter_Union]
exact image_subset f (subset_inter subset.rfl t_cover)
_ ≤ ∑' n, μ (f '' (s ∩ t n)) := (measure_Union_le _)
- _ ≤ ∑' n, (Real.toNNReal (|(A n).det|) + 1 : ℝ≥0) * μ (s ∩ t n) :=
+ _ ≤ ∑' n, (Real.toNNReal |(A n).det| + 1 : ℝ≥0) * μ (s ∩ t n) :=
by
apply ENNReal.tsum_le_tsum fun n => _
apply (hδ (A n)).2
exact ht n
- _ ≤ ∑' n, (Real.toNNReal (|(A n).det|) + 1 : ℝ≥0) * 0 :=
+ _ ≤ ∑' n, (Real.toNNReal |(A n).det| + 1 : ℝ≥0) * 0 :=
by
refine' ENNReal.tsum_le_tsum fun n => mul_le_mul_left' _ _
exact le_trans (measure_mono (inter_subset_left _ _)) (le_of_eq hs)
@@ -678,11 +677,11 @@ theorem addHaar_image_eq_zero_of_det_fderivWithin_eq_zero_aux
∃ δ : ℝ≥0,
0 < δ ∧
∀ (t : Set E) (hf : ApproximatesLinearOn f A t δ),
- μ (f '' t) ≤ (Real.toNNReal (|A.det|) + ε : ℝ≥0) * μ t :=
+ μ (f '' t) ≤ (Real.toNNReal |A.det| + ε : ℝ≥0) * μ t :=
by
intro A
- let m : ℝ≥0 := Real.toNNReal (|A.det|) + ε
- have I : ENNReal.ofReal (|A.det|) < m := by
+ let m : ℝ≥0 := Real.toNNReal |A.det| + ε
+ have I : ENNReal.ofReal |A.det| < m := by
simp only [ENNReal.ofReal, m, lt_add_iff_pos_right, εpos, ENNReal.coe_lt_coe]
rcases((add_haar_image_le_mul_of_det_lt μ A I).And self_mem_nhdsWithin).exists with ⟨δ, h, h'⟩
exact ⟨δ, h', fun t ht => h t f ht⟩
@@ -702,7 +701,7 @@ theorem addHaar_image_eq_zero_of_det_fderivWithin_eq_zero_aux
rw [← image_Union, ← inter_Union]
exact image_subset f (subset_inter subset.rfl t_cover)
_ ≤ ∑' n, μ (f '' (s ∩ t n)) := (measure_Union_le _)
- _ ≤ ∑' n, (Real.toNNReal (|(A n).det|) + ε : ℝ≥0) * μ (s ∩ t n) :=
+ _ ≤ ∑' n, (Real.toNNReal |(A n).det| + ε : ℝ≥0) * μ (s ∩ t n) :=
by
apply ENNReal.tsum_le_tsum fun n => _
apply (hδ (A n)).2
@@ -839,7 +838,7 @@ theorem aemeasurable_fderivWithin (hs : MeasurableSet s)
#print MeasureTheory.aemeasurable_ofReal_abs_det_fderivWithin /-
theorem aemeasurable_ofReal_abs_det_fderivWithin (hs : MeasurableSet s)
(hf' : ∀ x ∈ s, HasFDerivWithinAt f (f' x) s x) :
- AEMeasurable (fun x => ENNReal.ofReal (|(f' x).det|)) (μ.restrict s) :=
+ AEMeasurable (fun x => ENNReal.ofReal |(f' x).det|) (μ.restrict s) :=
by
apply ennreal.measurable_of_real.comp_ae_measurable
refine' continuous_abs.measurable.comp_ae_measurable _
@@ -893,7 +892,7 @@ directions, first up to controlled errors and then letting these errors tend to
#print MeasureTheory.addHaar_image_le_lintegral_abs_det_fderiv_aux1 /-
theorem addHaar_image_le_lintegral_abs_det_fderiv_aux1 (hs : MeasurableSet s)
(hf' : ∀ x ∈ s, HasFDerivWithinAt f (f' x) s x) {ε : ℝ≥0} (εpos : 0 < ε) :
- μ (f '' s) ≤ ∫⁻ x in s, ENNReal.ofReal (|(f' x).det|) ∂μ + 2 * ε * μ s :=
+ μ (f '' s) ≤ ∫⁻ x in s, ENNReal.ofReal |(f' x).det| ∂μ + 2 * ε * μ s :=
by
/- To bound `μ (f '' s)`, we cover `s` by sets where `f` is well-approximated by linear maps
`A n` (and where `f'` is almost everywhere close to `A n`), and then use that `f` expands the
@@ -904,11 +903,11 @@ theorem addHaar_image_le_lintegral_abs_det_fderiv_aux1 (hs : MeasurableSet s)
0 < δ ∧
(∀ B : E →L[ℝ] E, ‖B - A‖ ≤ δ → |B.det - A.det| ≤ ε) ∧
∀ (t : Set E) (g : E → E) (hf : ApproximatesLinearOn g A t δ),
- μ (g '' t) ≤ (ENNReal.ofReal (|A.det|) + ε) * μ t :=
+ μ (g '' t) ≤ (ENNReal.ofReal |A.det| + ε) * μ t :=
by
intro A
- let m : ℝ≥0 := Real.toNNReal (|A.det|) + ε
- have I : ENNReal.ofReal (|A.det|) < m := by
+ let m : ℝ≥0 := Real.toNNReal |A.det| + ε
+ have I : ENNReal.ofReal |A.det| < m := by
simp only [ENNReal.ofReal, m, lt_add_iff_pos_right, εpos, ENNReal.coe_lt_coe]
rcases((add_haar_image_le_mul_of_det_lt μ A I).And self_mem_nhdsWithin).exists with ⟨δ, h, δpos⟩
obtain ⟨δ', δ'pos, hδ'⟩ : ∃ (δ' : ℝ) (H : 0 < δ'), ∀ B, dist B A < δ' → dist B.det A.det < ↑ε :=
@@ -941,14 +940,14 @@ theorem addHaar_image_le_lintegral_abs_det_fderiv_aux1 (hs : MeasurableSet s)
rw [← image_Union, ← inter_Union]
exact image_subset f (subset_inter subset.rfl t_cover)
_ ≤ ∑' n, μ (f '' (s ∩ t n)) := (measure_Union_le _)
- _ ≤ ∑' n, (ENNReal.ofReal (|(A n).det|) + ε) * μ (s ∩ t n) :=
+ _ ≤ ∑' n, (ENNReal.ofReal |(A n).det| + ε) * μ (s ∩ t n) :=
by
apply ENNReal.tsum_le_tsum fun n => _
apply (hδ (A n)).2.2
exact ht n
- _ = ∑' n, ∫⁻ x in s ∩ t n, ENNReal.ofReal (|(A n).det|) + ε ∂μ := by
+ _ = ∑' n, ∫⁻ x in s ∩ t n, ENNReal.ofReal |(A n).det| + ε ∂μ := by
simp only [lintegral_const, MeasurableSet.univ, measure.restrict_apply, univ_inter]
- _ ≤ ∑' n, ∫⁻ x in s ∩ t n, ENNReal.ofReal (|(f' x).det|) + 2 * ε ∂μ :=
+ _ ≤ ∑' n, ∫⁻ x in s ∩ t n, ENNReal.ofReal |(f' x).det| + 2 * ε ∂μ :=
by
apply ENNReal.tsum_le_tsum fun n => _
apply lintegral_mono_ae
@@ -961,23 +960,23 @@ theorem addHaar_image_le_lintegral_abs_det_fderiv_aux1 (hs : MeasurableSet s)
_ ≤ |(f' x).det| + |(f' x).det - (A n).det| := (abs_sub _ _)
_ ≤ |(f' x).det| + ε := add_le_add le_rfl ((hδ (A n)).2.1 _ hx)
calc
- ENNReal.ofReal (|(A n).det|) + ε ≤ ENNReal.ofReal (|(f' x).det| + ε) + ε :=
+ ENNReal.ofReal |(A n).det| + ε ≤ ENNReal.ofReal (|(f' x).det| + ε) + ε :=
add_le_add (ENNReal.ofReal_le_ofReal I) le_rfl
- _ = ENNReal.ofReal (|(f' x).det|) + 2 * ε := by
+ _ = ENNReal.ofReal |(f' x).det| + 2 * ε := by
simp only [ENNReal.ofReal_add, abs_nonneg, two_mul, add_assoc, NNReal.zero_le_coe,
ENNReal.ofReal_coe_nnreal]
- _ = ∫⁻ x in ⋃ n, s ∩ t n, ENNReal.ofReal (|(f' x).det|) + 2 * ε ∂μ :=
+ _ = ∫⁻ x in ⋃ n, s ∩ t n, ENNReal.ofReal |(f' x).det| + 2 * ε ∂μ :=
by
have M : ∀ n : ℕ, MeasurableSet (s ∩ t n) := fun n => hs.inter (t_meas n)
rw [lintegral_Union M]
exact pairwise_disjoint_mono t_disj fun n => inter_subset_right _ _
- _ = ∫⁻ x in s, ENNReal.ofReal (|(f' x).det|) + 2 * ε ∂μ :=
+ _ = ∫⁻ x in s, ENNReal.ofReal |(f' x).det| + 2 * ε ∂μ :=
by
have : s = ⋃ n, s ∩ t n := by
rw [← inter_Union]
exact subset.antisymm (subset_inter subset.rfl t_cover) (inter_subset_left _ _)
rw [← this]
- _ = ∫⁻ x in s, ENNReal.ofReal (|(f' x).det|) ∂μ + 2 * ε * μ s := by
+ _ = ∫⁻ x in s, ENNReal.ofReal |(f' x).det| ∂μ + 2 * ε * μ s := by
simp only [lintegral_add_right' _ aemeasurable_const, set_lintegral_const]
#align measure_theory.add_haar_image_le_lintegral_abs_det_fderiv_aux1 MeasureTheory.addHaar_image_le_lintegral_abs_det_fderiv_aux1
-/
@@ -985,12 +984,12 @@ theorem addHaar_image_le_lintegral_abs_det_fderiv_aux1 (hs : MeasurableSet s)
#print MeasureTheory.addHaar_image_le_lintegral_abs_det_fderiv_aux2 /-
theorem addHaar_image_le_lintegral_abs_det_fderiv_aux2 (hs : MeasurableSet s) (h's : μ s ≠ ∞)
(hf' : ∀ x ∈ s, HasFDerivWithinAt f (f' x) s x) :
- μ (f '' s) ≤ ∫⁻ x in s, ENNReal.ofReal (|(f' x).det|) ∂μ :=
+ μ (f '' s) ≤ ∫⁻ x in s, ENNReal.ofReal |(f' x).det| ∂μ :=
by
-- We just need to let the error tend to `0` in the previous lemma.
have :
- tendsto (fun ε : ℝ≥0 => ∫⁻ x in s, ENNReal.ofReal (|(f' x).det|) ∂μ + 2 * ε * μ s) (𝓝[>] 0)
- (𝓝 (∫⁻ x in s, ENNReal.ofReal (|(f' x).det|) ∂μ + 2 * (0 : ℝ≥0) * μ s)) :=
+ tendsto (fun ε : ℝ≥0 => ∫⁻ x in s, ENNReal.ofReal |(f' x).det| ∂μ + 2 * ε * μ s) (𝓝[>] 0)
+ (𝓝 (∫⁻ x in s, ENNReal.ofReal |(f' x).det| ∂μ + 2 * (0 : ℝ≥0) * μ s)) :=
by
apply tendsto.mono_left _ nhdsWithin_le_nhds
refine' tendsto_const_nhds.add _
@@ -1007,7 +1006,7 @@ theorem addHaar_image_le_lintegral_abs_det_fderiv_aux2 (hs : MeasurableSet s) (h
#print MeasureTheory.addHaar_image_le_lintegral_abs_det_fderiv /-
theorem addHaar_image_le_lintegral_abs_det_fderiv (hs : MeasurableSet s)
(hf' : ∀ x ∈ s, HasFDerivWithinAt f (f' x) s x) :
- μ (f '' s) ≤ ∫⁻ x in s, ENNReal.ofReal (|(f' x).det|) ∂μ :=
+ μ (f '' s) ≤ ∫⁻ x in s, ENNReal.ofReal |(f' x).det| ∂μ :=
by
/- We already know the result for finite-measure sets. We cover `s` by finite-measure sets using
`spanning_sets μ`, and apply the previous result to each of these parts. -/
@@ -1023,7 +1022,7 @@ theorem addHaar_image_le_lintegral_abs_det_fderiv (hs : MeasurableSet s)
by
conv_lhs => rw [A, image_Union]
exact measure_Union_le _
- _ ≤ ∑' n, ∫⁻ x in s ∩ u n, ENNReal.ofReal (|(f' x).det|) ∂μ :=
+ _ ≤ ∑' n, ∫⁻ x in s ∩ u n, ENNReal.ofReal |(f' x).det| ∂μ :=
by
apply ENNReal.tsum_le_tsum fun n => _
apply
@@ -1032,7 +1031,7 @@ theorem addHaar_image_le_lintegral_abs_det_fderiv (hs : MeasurableSet s)
have : μ (u n) < ∞ :=
lt_of_le_of_lt (measure_mono (disjointed_subset _ _)) (measure_spanning_sets_lt_top μ n)
exact ne_of_lt (lt_of_le_of_lt (measure_mono (inter_subset_right _ _)) this)
- _ = ∫⁻ x in s, ENNReal.ofReal (|(f' x).det|) ∂μ :=
+ _ = ∫⁻ x in s, ENNReal.ofReal |(f' x).det| ∂μ :=
by
conv_rhs => rw [A]
rw [lintegral_Union]
@@ -1044,7 +1043,7 @@ theorem addHaar_image_le_lintegral_abs_det_fderiv (hs : MeasurableSet s)
#print MeasureTheory.lintegral_abs_det_fderiv_le_addHaar_image_aux1 /-
theorem lintegral_abs_det_fderiv_le_addHaar_image_aux1 (hs : MeasurableSet s)
(hf' : ∀ x ∈ s, HasFDerivWithinAt f (f' x) s x) (hf : InjOn f s) {ε : ℝ≥0} (εpos : 0 < ε) :
- ∫⁻ x in s, ENNReal.ofReal (|(f' x).det|) ∂μ ≤ μ (f '' s) + 2 * ε * μ s :=
+ ∫⁻ x in s, ENNReal.ofReal |(f' x).det| ∂μ ≤ μ (f '' s) + 2 * ε * μ s :=
by
/- To bound `∫⁻ x in s, ennreal.of_real (|(f' x).det|) ∂μ`, we cover `s` by sets where `f` is
well-approximated by linear maps `A n` (and where `f'` is almost everywhere close to `A n`),
@@ -1055,7 +1054,7 @@ theorem lintegral_abs_det_fderiv_le_addHaar_image_aux1 (hs : MeasurableSet s)
0 < δ ∧
(∀ B : E →L[ℝ] E, ‖B - A‖ ≤ δ → |B.det - A.det| ≤ ε) ∧
∀ (t : Set E) (g : E → E) (hf : ApproximatesLinearOn g A t δ),
- ENNReal.ofReal (|A.det|) * μ t ≤ μ (g '' t) + ε * μ t :=
+ ENNReal.ofReal |A.det| * μ t ≤ μ (g '' t) + ε * μ t :=
by
intro A
obtain ⟨δ', δ'pos, hδ'⟩ : ∃ (δ' : ℝ) (H : 0 < δ'), ∀ B, dist B A < δ' → dist B.det A.det < ↑ε :=
@@ -1072,8 +1071,8 @@ theorem lintegral_abs_det_fderiv_le_addHaar_image_aux1 (hs : MeasurableSet s)
· refine' ⟨δ'', half_pos δ'pos, I'', _⟩
simp only [hA, forall_const, MulZeroClass.zero_mul, ENNReal.ofReal_zero, imp_true_iff,
zero_le, abs_zero]
- let m : ℝ≥0 := Real.toNNReal (|A.det|) - ε
- have I : (m : ℝ≥0∞) < ENNReal.ofReal (|A.det|) :=
+ let m : ℝ≥0 := Real.toNNReal |A.det| - ε
+ have I : (m : ℝ≥0∞) < ENNReal.ofReal |A.det| :=
by
simp only [ENNReal.ofReal, WithTop.coe_sub]
apply ENNReal.sub_lt_self ENNReal.coe_ne_top
@@ -1105,14 +1104,14 @@ theorem lintegral_abs_det_fderiv_le_addHaar_image_aux1 (hs : MeasurableSet s)
rw [← inter_Union]
exact subset.antisymm (subset_inter subset.rfl t_cover) (inter_subset_left _ _)
calc
- ∫⁻ x in s, ENNReal.ofReal (|(f' x).det|) ∂μ =
- ∑' n, ∫⁻ x in s ∩ t n, ENNReal.ofReal (|(f' x).det|) ∂μ :=
+ ∫⁻ x in s, ENNReal.ofReal |(f' x).det| ∂μ =
+ ∑' n, ∫⁻ x in s ∩ t n, ENNReal.ofReal |(f' x).det| ∂μ :=
by
conv_lhs => rw [s_eq]
rw [lintegral_Union]
· exact fun n => hs.inter (t_meas n)
· exact pairwise_disjoint_mono t_disj fun n => inter_subset_right _ _
- _ ≤ ∑' n, ∫⁻ x in s ∩ t n, ENNReal.ofReal (|(A n).det|) + ε ∂μ :=
+ _ ≤ ∑' n, ∫⁻ x in s ∩ t n, ENNReal.ofReal |(A n).det| + ε ∂μ :=
by
apply ENNReal.tsum_le_tsum fun n => _
apply lintegral_mono_ae
@@ -1125,11 +1124,10 @@ theorem lintegral_abs_det_fderiv_le_addHaar_image_aux1 (hs : MeasurableSet s)
_ ≤ |(A n).det| + |(f' x).det - (A n).det| := (abs_add _ _)
_ ≤ |(A n).det| + ε := add_le_add le_rfl ((hδ (A n)).2.1 _ hx)
calc
- ENNReal.ofReal (|(f' x).det|) ≤ ENNReal.ofReal (|(A n).det| + ε) :=
- ENNReal.ofReal_le_ofReal I
- _ = ENNReal.ofReal (|(A n).det|) + ε := by
+ ENNReal.ofReal |(f' x).det| ≤ ENNReal.ofReal (|(A n).det| + ε) := ENNReal.ofReal_le_ofReal I
+ _ = ENNReal.ofReal |(A n).det| + ε := by
simp only [ENNReal.ofReal_add, abs_nonneg, NNReal.zero_le_coe, ENNReal.ofReal_coe_nnreal]
- _ = ∑' n, (ENNReal.ofReal (|(A n).det|) * μ (s ∩ t n) + ε * μ (s ∩ t n)) := by
+ _ = ∑' n, (ENNReal.ofReal |(A n).det| * μ (s ∩ t n) + ε * μ (s ∩ t n)) := by
simp only [set_lintegral_const, lintegral_add_right _ measurable_const]
_ ≤ ∑' n, (μ (f '' (s ∩ t n)) + ε * μ (s ∩ t n) + ε * μ (s ∩ t n)) :=
by
@@ -1159,7 +1157,7 @@ theorem lintegral_abs_det_fderiv_le_addHaar_image_aux1 (hs : MeasurableSet s)
#print MeasureTheory.lintegral_abs_det_fderiv_le_addHaar_image_aux2 /-
theorem lintegral_abs_det_fderiv_le_addHaar_image_aux2 (hs : MeasurableSet s) (h's : μ s ≠ ∞)
(hf' : ∀ x ∈ s, HasFDerivWithinAt f (f' x) s x) (hf : InjOn f s) :
- ∫⁻ x in s, ENNReal.ofReal (|(f' x).det|) ∂μ ≤ μ (f '' s) :=
+ ∫⁻ x in s, ENNReal.ofReal |(f' x).det| ∂μ ≤ μ (f '' s) :=
by
-- We just need to let the error tend to `0` in the previous lemma.
have :
@@ -1181,7 +1179,7 @@ theorem lintegral_abs_det_fderiv_le_addHaar_image_aux2 (hs : MeasurableSet s) (h
#print MeasureTheory.lintegral_abs_det_fderiv_le_addHaar_image /-
theorem lintegral_abs_det_fderiv_le_addHaar_image (hs : MeasurableSet s)
(hf' : ∀ x ∈ s, HasFDerivWithinAt f (f' x) s x) (hf : InjOn f s) :
- ∫⁻ x in s, ENNReal.ofReal (|(f' x).det|) ∂μ ≤ μ (f '' s) :=
+ ∫⁻ x in s, ENNReal.ofReal |(f' x).det| ∂μ ≤ μ (f '' s) :=
by
/- We already know the result for finite-measure sets. We cover `s` by finite-measure sets using
`spanning_sets μ`, and apply the previous result to each of these parts. -/
@@ -1193,8 +1191,8 @@ theorem lintegral_abs_det_fderiv_le_addHaar_image (hs : MeasurableSet s)
have A : s = ⋃ n, s ∩ u n := by
rw [← inter_Union, iUnion_disjointed, Union_spanning_sets, inter_univ]
calc
- ∫⁻ x in s, ENNReal.ofReal (|(f' x).det|) ∂μ =
- ∑' n, ∫⁻ x in s ∩ u n, ENNReal.ofReal (|(f' x).det|) ∂μ :=
+ ∫⁻ x in s, ENNReal.ofReal |(f' x).det| ∂μ =
+ ∑' n, ∫⁻ x in s ∩ u n, ENNReal.ofReal |(f' x).det| ∂μ :=
by
conv_lhs => rw [A]
rw [lintegral_Union]
@@ -1232,7 +1230,7 @@ integral of `|(f' x).det|` on `s`.
Note that the measurability of `f '' s` is given by `measurable_image_of_fderiv_within`. -/
theorem lintegral_abs_det_fderiv_eq_addHaar_image (hs : MeasurableSet s)
(hf' : ∀ x ∈ s, HasFDerivWithinAt f (f' x) s x) (hf : InjOn f s) :
- ∫⁻ x in s, ENNReal.ofReal (|(f' x).det|) ∂μ = μ (f '' s) :=
+ ∫⁻ x in s, ENNReal.ofReal |(f' x).det| ∂μ = μ (f '' s) :=
le_antisymm (lintegral_abs_det_fderiv_le_addHaar_image μ hs hf' hf)
(addHaar_image_le_lintegral_abs_det_fderiv μ hs hf')
#align measure_theory.lintegral_abs_det_fderiv_eq_add_haar_image MeasureTheory.lintegral_abs_det_fderiv_eq_addHaar_image
@@ -1248,7 +1246,7 @@ function `s.restrict f`, see `restrict_map_with_density_abs_det_fderiv_eq_add_ha
-/
theorem map_withDensity_abs_det_fderiv_eq_addHaar (hs : MeasurableSet s)
(hf' : ∀ x ∈ s, HasFDerivWithinAt f (f' x) s x) (hf : InjOn f s) (h'f : Measurable f) :
- Measure.map f ((μ.restrict s).withDensity fun x => ENNReal.ofReal (|(f' x).det|)) =
+ Measure.map f ((μ.restrict s).withDensity fun x => ENNReal.ofReal |(f' x).det|) =
μ.restrict (f '' s) :=
by
apply measure.ext fun t ht => _
@@ -1270,7 +1268,7 @@ see `map_with_density_abs_det_fderiv_eq_add_haar`.
-/
theorem restrict_map_withDensity_abs_det_fderiv_eq_addHaar (hs : MeasurableSet s)
(hf' : ∀ x ∈ s, HasFDerivWithinAt f (f' x) s x) (hf : InjOn f s) :
- Measure.map (s.restrict f) (comap coe (μ.withDensity fun x => ENNReal.ofReal (|(f' x).det|))) =
+ Measure.map (s.restrict f) (comap coe (μ.withDensity fun x => ENNReal.ofReal |(f' x).det|)) =
μ.restrict (f '' s) :=
by
obtain ⟨u, u_meas, uf⟩ : ∃ u, Measurable u ∧ eq_on u f s := by
@@ -1283,7 +1281,7 @@ theorem restrict_map_withDensity_abs_det_fderiv_eq_addHaar (hs : MeasurableSet s
(hf' x hx).congr (fun y hy => uf hy) (uf hx)
set F : s → E := u ∘ coe with hF
have A :
- measure.map F (comap coe (μ.with_density fun x => ENNReal.ofReal (|(f' x).det|))) =
+ measure.map F (comap coe (μ.with_density fun x => ENNReal.ofReal |(f' x).det|)) =
μ.restrict (u '' s) :=
by
rw [hF, ← measure.map_map u_meas measurable_subtype_coe, map_comap_subtype_coe hs,
@@ -1307,7 +1305,7 @@ injective and differentiable on a measurable set `s`, then the Lebesgue integral
Note that the measurability of `f '' s` is given by `measurable_image_of_fderiv_within`. -/
theorem lintegral_image_eq_lintegral_abs_det_fderiv_mul (hs : MeasurableSet s)
(hf' : ∀ x ∈ s, HasFDerivWithinAt f (f' x) s x) (hf : InjOn f s) (g : E → ℝ≥0∞) :
- ∫⁻ x in f '' s, g x ∂μ = ∫⁻ x in s, ENNReal.ofReal (|(f' x).det|) * g (f x) ∂μ :=
+ ∫⁻ x in f '' s, g x ∂μ = ∫⁻ x in s, ENNReal.ofReal |(f' x).det| * g (f x) ∂μ :=
by
rw [← restrict_map_with_density_abs_det_fderiv_eq_add_haar μ hs hf' hf,
(measurable_embedding_of_fderiv_within hs hf' hf).lintegral_map]
mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -111,6 +111,7 @@ measurable pieces, by linear maps (with a prescribed precision depending on the
-/
+#print exists_closed_cover_approximatesLinearOn_of_hasFDerivWithinAt /-
/-- Assume that a function `f` has a derivative at every point of a set `s`. Then one may cover `s`
with countably many closed sets `t n` on which `f` is well approximated by linear maps `A n`. -/
theorem exists_closed_cover_approximatesLinearOn_of_hasFDerivWithinAt [SecondCountableTopology F]
@@ -264,9 +265,11 @@ theorem exists_closed_cover_approximatesLinearOn_of_hasFDerivWithinAt [SecondCou
apply mem_Union.2 ⟨q, _⟩
simp only [hq, subset_closure hnz, hp, mem_inter_iff, and_self_iff]
#align exists_closed_cover_approximates_linear_on_of_has_fderiv_within_at exists_closed_cover_approximatesLinearOn_of_hasFDerivWithinAt
+-/
variable [MeasurableSpace E] [BorelSpace E] (μ : Measure E) [IsAddHaarMeasure μ]
+#print exists_partition_approximatesLinearOn_of_hasFDerivWithinAt /-
/-- Assume that a function `f` has a derivative at every point of a set `s`. Then one may
partition `s` into countably many disjoint relatively measurable sets (i.e., intersections
of `s` with measurable sets `t n`) on which `f` is well approximated by linear maps `A n`. -/
@@ -288,6 +291,7 @@ theorem exists_partition_approximatesLinearOn_of_hasFDerivWithinAt [SecondCounta
· rw [iUnion_disjointed]; exact st
· intro n; exact (t_approx n).mono_set (inter_subset_inter_right _ (disjointed_subset _ _))
#align exists_partition_approximates_linear_on_of_has_fderiv_within_at exists_partition_approximatesLinearOn_of_hasFDerivWithinAt
+-/
namespace MeasureTheory
@@ -300,6 +304,7 @@ to the approximating linear map.
-/
+#print MeasureTheory.addHaar_image_le_mul_of_det_lt /-
/-- Let `f` be a function which is sufficiently close (in the Lipschitz sense) to a given linear
map `A`. Then it expands the volume of any set by at most `m` for any `m > det A`. -/
theorem addHaar_image_le_mul_of_det_lt (A : E →L[ℝ] E) {m : ℝ≥0}
@@ -417,7 +422,9 @@ theorem addHaar_image_le_mul_of_det_lt (A : E →L[ℝ] E) {m : ℝ≥0}
rw [add_zero] at L
exact ge_of_tendsto L J
#align measure_theory.add_haar_image_le_mul_of_det_lt MeasureTheory.addHaar_image_le_mul_of_det_lt
+-/
+#print MeasureTheory.mul_le_addHaar_image_of_lt_det /-
/-- Let `f` be a function which is sufficiently close (in the Lipschitz sense) to a given linear
map `A`. Then it expands the volume of any set by at least `m` for any `m < det A`. -/
theorem mul_le_addHaar_image_of_lt_det (A : E →L[ℝ] E) {m : ℝ≥0}
@@ -498,6 +505,7 @@ theorem mul_le_addHaar_image_of_lt_det (A : E →L[ℝ] E) {m : ℝ≥0}
-- and our choice of `δ`.
exact hδ₀ _ _ ((hf'.to_inv h1δ).mono_num h2δ.le)
#align measure_theory.mul_le_add_haar_image_of_lt_det MeasureTheory.mul_le_addHaar_image_of_lt_det
+-/
#print ApproximatesLinearOn.norm_fderiv_sub_le /-
/-- If a differentiable function `f` is approximated by a linear map `A` on a set `s`, up to `δ`,
@@ -607,6 +615,7 @@ assumptions.
-/
+#print MeasureTheory.addHaar_image_eq_zero_of_differentiableOn_of_addHaar_eq_zero /-
/-- A differentiable function maps sets of measure zero to sets of measure zero. -/
theorem addHaar_image_eq_zero_of_differentiableOn_of_addHaar_eq_zero (hf : DifferentiableOn ℝ f s)
(hs : μ s = 0) : μ (f '' s) = 0 :=
@@ -653,7 +662,9 @@ theorem addHaar_image_eq_zero_of_differentiableOn_of_addHaar_eq_zero (hf : Diffe
exact le_trans (measure_mono (inter_subset_left _ _)) (le_of_eq hs)
_ = 0 := by simp only [tsum_zero, MulZeroClass.mul_zero]
#align measure_theory.add_haar_image_eq_zero_of_differentiable_on_of_add_haar_eq_zero MeasureTheory.addHaar_image_eq_zero_of_differentiableOn_of_addHaar_eq_zero
+-/
+#print MeasureTheory.addHaar_image_eq_zero_of_det_fderivWithin_eq_zero_aux /-
/-- A version of Sard lemma in fixed dimension: given a differentiable function from `E` to `E` and
a set where the differential is not invertible, then the image of this set has zero measure.
Here, we give an auxiliary statement towards this result. -/
@@ -715,7 +726,9 @@ theorem addHaar_image_eq_zero_of_det_fderivWithin_eq_zero_aux
rw [← inter_Union]
exact mul_le_mul_left' (measure_mono (inter_subset_left _ _)) _
#align measure_theory.add_haar_image_eq_zero_of_det_fderiv_within_eq_zero_aux MeasureTheory.addHaar_image_eq_zero_of_det_fderivWithin_eq_zero_aux
+-/
+#print MeasureTheory.addHaar_image_eq_zero_of_det_fderivWithin_eq_zero /-
/-- A version of Sard lemma in fixed dimension: given a differentiable function from `E` to `E` and
a set where the differential is not invertible, then the image of this set has zero measure. -/
theorem addHaar_image_eq_zero_of_det_fderivWithin_eq_zero
@@ -748,6 +761,7 @@ theorem addHaar_image_eq_zero_of_det_fderivWithin_eq_zero
filter_upwards [self_mem_nhdsWithin]
exact A
#align measure_theory.add_haar_image_eq_zero_of_det_fderiv_within_eq_zero MeasureTheory.addHaar_image_eq_zero_of_det_fderivWithin_eq_zero
+-/
/-!
### Weak measurability statements
@@ -876,6 +890,7 @@ directions, first up to controlled errors and then letting these errors tend to
-/
+#print MeasureTheory.addHaar_image_le_lintegral_abs_det_fderiv_aux1 /-
theorem addHaar_image_le_lintegral_abs_det_fderiv_aux1 (hs : MeasurableSet s)
(hf' : ∀ x ∈ s, HasFDerivWithinAt f (f' x) s x) {ε : ℝ≥0} (εpos : 0 < ε) :
μ (f '' s) ≤ ∫⁻ x in s, ENNReal.ofReal (|(f' x).det|) ∂μ + 2 * ε * μ s :=
@@ -965,7 +980,9 @@ theorem addHaar_image_le_lintegral_abs_det_fderiv_aux1 (hs : MeasurableSet s)
_ = ∫⁻ x in s, ENNReal.ofReal (|(f' x).det|) ∂μ + 2 * ε * μ s := by
simp only [lintegral_add_right' _ aemeasurable_const, set_lintegral_const]
#align measure_theory.add_haar_image_le_lintegral_abs_det_fderiv_aux1 MeasureTheory.addHaar_image_le_lintegral_abs_det_fderiv_aux1
+-/
+#print MeasureTheory.addHaar_image_le_lintegral_abs_det_fderiv_aux2 /-
theorem addHaar_image_le_lintegral_abs_det_fderiv_aux2 (hs : MeasurableSet s) (h's : μ s ≠ ∞)
(hf' : ∀ x ∈ s, HasFDerivWithinAt f (f' x) s x) :
μ (f '' s) ≤ ∫⁻ x in s, ENNReal.ofReal (|(f' x).det|) ∂μ :=
@@ -985,7 +1002,9 @@ theorem addHaar_image_le_lintegral_abs_det_fderiv_aux2 (hs : MeasurableSet s) (h
rintro ε (εpos : 0 < ε)
exact add_haar_image_le_lintegral_abs_det_fderiv_aux1 μ hs hf' εpos
#align measure_theory.add_haar_image_le_lintegral_abs_det_fderiv_aux2 MeasureTheory.addHaar_image_le_lintegral_abs_det_fderiv_aux2
+-/
+#print MeasureTheory.addHaar_image_le_lintegral_abs_det_fderiv /-
theorem addHaar_image_le_lintegral_abs_det_fderiv (hs : MeasurableSet s)
(hf' : ∀ x ∈ s, HasFDerivWithinAt f (f' x) s x) :
μ (f '' s) ≤ ∫⁻ x in s, ENNReal.ofReal (|(f' x).det|) ∂μ :=
@@ -1020,7 +1039,9 @@ theorem addHaar_image_le_lintegral_abs_det_fderiv (hs : MeasurableSet s)
· intro n; exact hs.inter (u_meas n)
· exact pairwise_disjoint_mono (disjoint_disjointed _) fun n => inter_subset_right _ _
#align measure_theory.add_haar_image_le_lintegral_abs_det_fderiv MeasureTheory.addHaar_image_le_lintegral_abs_det_fderiv
+-/
+#print MeasureTheory.lintegral_abs_det_fderiv_le_addHaar_image_aux1 /-
theorem lintegral_abs_det_fderiv_le_addHaar_image_aux1 (hs : MeasurableSet s)
(hf' : ∀ x ∈ s, HasFDerivWithinAt f (f' x) s x) (hf : InjOn f s) {ε : ℝ≥0} (εpos : 0 < ε) :
∫⁻ x in s, ENNReal.ofReal (|(f' x).det|) ∂μ ≤ μ (f '' s) + 2 * ε * μ s :=
@@ -1133,7 +1154,9 @@ theorem lintegral_abs_det_fderiv_le_addHaar_image_aux1 (hs : MeasurableSet s)
ext1 i
rw [mul_assoc, two_mul, add_assoc]
#align measure_theory.lintegral_abs_det_fderiv_le_add_haar_image_aux1 MeasureTheory.lintegral_abs_det_fderiv_le_addHaar_image_aux1
+-/
+#print MeasureTheory.lintegral_abs_det_fderiv_le_addHaar_image_aux2 /-
theorem lintegral_abs_det_fderiv_le_addHaar_image_aux2 (hs : MeasurableSet s) (h's : μ s ≠ ∞)
(hf' : ∀ x ∈ s, HasFDerivWithinAt f (f' x) s x) (hf : InjOn f s) :
∫⁻ x in s, ENNReal.ofReal (|(f' x).det|) ∂μ ≤ μ (f '' s) :=
@@ -1153,7 +1176,9 @@ theorem lintegral_abs_det_fderiv_le_addHaar_image_aux2 (hs : MeasurableSet s) (h
rintro ε (εpos : 0 < ε)
exact lintegral_abs_det_fderiv_le_add_haar_image_aux1 μ hs hf' hf εpos
#align measure_theory.lintegral_abs_det_fderiv_le_add_haar_image_aux2 MeasureTheory.lintegral_abs_det_fderiv_le_addHaar_image_aux2
+-/
+#print MeasureTheory.lintegral_abs_det_fderiv_le_addHaar_image /-
theorem lintegral_abs_det_fderiv_le_addHaar_image (hs : MeasurableSet s)
(hf' : ∀ x ∈ s, HasFDerivWithinAt f (f' x) s x) (hf : InjOn f s) :
∫⁻ x in s, ENNReal.ofReal (|(f' x).det|) ∂μ ≤ μ (f '' s) :=
@@ -1198,7 +1223,9 @@ theorem lintegral_abs_det_fderiv_le_addHaar_image (hs : MeasurableSet s)
(fun x hx => (hf' x hx.1).mono (inter_subset_left _ _))
(hf.mono (inter_subset_left _ _))
#align measure_theory.lintegral_abs_det_fderiv_le_add_haar_image MeasureTheory.lintegral_abs_det_fderiv_le_addHaar_image
+-/
+#print MeasureTheory.lintegral_abs_det_fderiv_eq_addHaar_image /-
/-- Change of variable formula for differentiable functions, set version: if a function `f` is
injective and differentiable on a measurable set `s`, then the measure of `f '' s` is given by the
integral of `|(f' x).det|` on `s`.
@@ -1209,6 +1236,7 @@ theorem lintegral_abs_det_fderiv_eq_addHaar_image (hs : MeasurableSet s)
le_antisymm (lintegral_abs_det_fderiv_le_addHaar_image μ hs hf' hf)
(addHaar_image_le_lintegral_abs_det_fderiv μ hs hf')
#align measure_theory.lintegral_abs_det_fderiv_eq_add_haar_image MeasureTheory.lintegral_abs_det_fderiv_eq_addHaar_image
+-/
#print MeasureTheory.map_withDensity_abs_det_fderiv_eq_addHaar /-
/-- Change of variable formula for differentiable functions, set version: if a function `f` is
@@ -1272,6 +1300,7 @@ theorem restrict_map_withDensity_abs_det_fderiv_eq_addHaar (hs : MeasurableSet s
/-! ### Change of variable formulas in integrals -/
+#print MeasureTheory.lintegral_image_eq_lintegral_abs_det_fderiv_mul /-
/- Change of variable formula for differentiable functions: if a function `f` is
injective and differentiable on a measurable set `s`, then the Lebesgue integral of a function
`g : E → ℝ≥0∞` on `f '' s` coincides with the integral of `|(f' x).det| * g ∘ f` on `s`.
@@ -1290,7 +1319,9 @@ theorem lintegral_image_eq_lintegral_abs_det_fderiv_mul (hs : MeasurableSet s)
· simp only [eventually_true, ENNReal.ofReal_lt_top]
· exact ae_measurable_of_real_abs_det_fderiv_within μ hs hf'
#align measure_theory.lintegral_image_eq_lintegral_abs_det_fderiv_mul MeasureTheory.lintegral_image_eq_lintegral_abs_det_fderiv_mul
+-/
+#print MeasureTheory.integrableOn_image_iff_integrableOn_abs_det_fderiv_smul /-
/-- Integrability in the change of variable formula for differentiable functions: if a
function `f` is injective and differentiable on a measurable set `s`, then a function
`g : E → F` is integrable on `f '' s` if and only if `|(f' x).det| • g ∘ f` is
@@ -1310,7 +1341,9 @@ theorem integrableOn_image_iff_integrableOn_abs_det_fderiv_smul (hs : Measurable
exact abs_nonneg _
· exact ae_measurable_to_nnreal_abs_det_fderiv_within μ hs hf'
#align measure_theory.integrable_on_image_iff_integrable_on_abs_det_fderiv_smul MeasureTheory.integrableOn_image_iff_integrableOn_abs_det_fderiv_smul
+-/
+#print MeasureTheory.integral_image_eq_integral_abs_det_fderiv_smul /-
/-- Change of variable formula for differentiable functions: if a function `f` is
injective and differentiable on a measurable set `s`, then the Bochner integral of a function
`g : E → F` on `f '' s` coincides with the integral of `|(f' x).det| • g ∘ f` on `s`. -/
@@ -1329,6 +1362,7 @@ theorem integral_image_eq_integral_abs_det_fderiv_smul [CompleteSpace F] (hs : M
conv_rhs => rw [← Real.coe_toNNReal _ (abs_nonneg (f' x).det)]
rfl
#align measure_theory.integral_image_eq_integral_abs_det_fderiv_smul MeasureTheory.integral_image_eq_integral_abs_det_fderiv_smul
+-/
#print MeasureTheory.det_one_smulRight /-
-- Porting note: move this to `topology.algebra.module.basic` when port is over
@@ -1360,6 +1394,7 @@ theorem integrableOn_image_iff_integrableOn_abs_deriv_smul {s : Set ℝ} {f :
#align measure_theory.integrable_on_image_iff_integrable_on_abs_deriv_smul MeasureTheory.integrableOn_image_iff_integrableOn_abs_deriv_smul
-/
+#print MeasureTheory.integral_image_eq_integral_abs_deriv_smul /-
/-- Change of variable formula for differentiable functions (one-variable version): if a function
`f` is injective and differentiable on a measurable set `s ⊆ ℝ`, then the Bochner integral of a
function `g : ℝ → F` on `f '' s` coincides with the integral of `|(f' x)| • g ∘ f` on `s`. -/
@@ -1370,7 +1405,9 @@ theorem integral_image_eq_integral_abs_deriv_smul {s : Set ℝ} {f : ℝ → ℝ
integral_image_eq_integral_abs_det_fderiv_smul volume hs
(fun x hx => (hf' x hx).HasFDerivWithinAt) hf g
#align measure_theory.integral_image_eq_integral_abs_deriv_smul MeasureTheory.integral_image_eq_integral_abs_deriv_smul
+-/
+#print MeasureTheory.integral_target_eq_integral_abs_det_fderiv_smul /-
theorem integral_target_eq_integral_abs_det_fderiv_smul [CompleteSpace F] {f : LocalHomeomorph E E}
(hf' : ∀ x ∈ f.source, HasFDerivAt f (f' x) x) (g : E → F) :
∫ x in f.target, g x ∂μ = ∫ x in f.source, |(f' x).det| • g (f x) ∂μ :=
@@ -1381,6 +1418,7 @@ theorem integral_target_eq_integral_abs_det_fderiv_smul [CompleteSpace F] {f : L
intro x hx
exact (hf' x hx).HasFDerivWithinAt
#align measure_theory.integral_target_eq_integral_abs_det_fderiv_smul MeasureTheory.integral_target_eq_integral_abs_det_fderiv_smul
+-/
end MeasureTheory
mathlib commit https://github.com/leanprover-community/mathlib/commit/a3e83f0fa4391c8740f7d773a7a9b74e311ae2a3
@@ -393,7 +393,7 @@ theorem addHaar_image_le_mul_of_det_lt (A : E →L[ℝ] E) {m : ℝ≥0}
t ⊆ s ∧
(∀ x : E, x ∈ t → 0 < r x) ∧
(s ⊆ ⋃ x ∈ t, closed_ball x (r x)) ∧
- (∑' x : ↥t, μ (closed_ball (↑x) (r ↑x))) ≤ μ s + a :=
+ ∑' x : ↥t, μ (closed_ball (↑x) (r ↑x)) ≤ μ s + a :=
Besicovitch.exists_closedBall_covering_tsum_measure_le μ ha.ne' (fun x => Ioi 0) s
fun x xs δ δpos => ⟨δ / 2, by simp [half_pos δpos, half_lt_self δpos]⟩
haveI : Encodable t := t_count.to_encodable
@@ -878,7 +878,7 @@ directions, first up to controlled errors and then letting these errors tend to
theorem addHaar_image_le_lintegral_abs_det_fderiv_aux1 (hs : MeasurableSet s)
(hf' : ∀ x ∈ s, HasFDerivWithinAt f (f' x) s x) {ε : ℝ≥0} (εpos : 0 < ε) :
- μ (f '' s) ≤ (∫⁻ x in s, ENNReal.ofReal (|(f' x).det|) ∂μ) + 2 * ε * μ s :=
+ μ (f '' s) ≤ ∫⁻ x in s, ENNReal.ofReal (|(f' x).det|) ∂μ + 2 * ε * μ s :=
by
/- To bound `μ (f '' s)`, we cover `s` by sets where `f` is well-approximated by linear maps
`A n` (and where `f'` is almost everywhere close to `A n`), and then use that `f` expands the
@@ -962,7 +962,7 @@ theorem addHaar_image_le_lintegral_abs_det_fderiv_aux1 (hs : MeasurableSet s)
rw [← inter_Union]
exact subset.antisymm (subset_inter subset.rfl t_cover) (inter_subset_left _ _)
rw [← this]
- _ = (∫⁻ x in s, ENNReal.ofReal (|(f' x).det|) ∂μ) + 2 * ε * μ s := by
+ _ = ∫⁻ x in s, ENNReal.ofReal (|(f' x).det|) ∂μ + 2 * ε * μ s := by
simp only [lintegral_add_right' _ aemeasurable_const, set_lintegral_const]
#align measure_theory.add_haar_image_le_lintegral_abs_det_fderiv_aux1 MeasureTheory.addHaar_image_le_lintegral_abs_det_fderiv_aux1
@@ -972,8 +972,8 @@ theorem addHaar_image_le_lintegral_abs_det_fderiv_aux2 (hs : MeasurableSet s) (h
by
-- We just need to let the error tend to `0` in the previous lemma.
have :
- tendsto (fun ε : ℝ≥0 => (∫⁻ x in s, ENNReal.ofReal (|(f' x).det|) ∂μ) + 2 * ε * μ s) (𝓝[>] 0)
- (𝓝 ((∫⁻ x in s, ENNReal.ofReal (|(f' x).det|) ∂μ) + 2 * (0 : ℝ≥0) * μ s)) :=
+ tendsto (fun ε : ℝ≥0 => ∫⁻ x in s, ENNReal.ofReal (|(f' x).det|) ∂μ + 2 * ε * μ s) (𝓝[>] 0)
+ (𝓝 (∫⁻ x in s, ENNReal.ofReal (|(f' x).det|) ∂μ + 2 * (0 : ℝ≥0) * μ s)) :=
by
apply tendsto.mono_left _ nhdsWithin_le_nhds
refine' tendsto_const_nhds.add _
@@ -1023,7 +1023,7 @@ theorem addHaar_image_le_lintegral_abs_det_fderiv (hs : MeasurableSet s)
theorem lintegral_abs_det_fderiv_le_addHaar_image_aux1 (hs : MeasurableSet s)
(hf' : ∀ x ∈ s, HasFDerivWithinAt f (f' x) s x) (hf : InjOn f s) {ε : ℝ≥0} (εpos : 0 < ε) :
- (∫⁻ x in s, ENNReal.ofReal (|(f' x).det|) ∂μ) ≤ μ (f '' s) + 2 * ε * μ s :=
+ ∫⁻ x in s, ENNReal.ofReal (|(f' x).det|) ∂μ ≤ μ (f '' s) + 2 * ε * μ s :=
by
/- To bound `∫⁻ x in s, ennreal.of_real (|(f' x).det|) ∂μ`, we cover `s` by sets where `f` is
well-approximated by linear maps `A n` (and where `f'` is almost everywhere close to `A n`),
@@ -1084,7 +1084,7 @@ theorem lintegral_abs_det_fderiv_le_addHaar_image_aux1 (hs : MeasurableSet s)
rw [← inter_Union]
exact subset.antisymm (subset_inter subset.rfl t_cover) (inter_subset_left _ _)
calc
- (∫⁻ x in s, ENNReal.ofReal (|(f' x).det|) ∂μ) =
+ ∫⁻ x in s, ENNReal.ofReal (|(f' x).det|) ∂μ =
∑' n, ∫⁻ x in s ∩ t n, ENNReal.ofReal (|(f' x).det|) ∂μ :=
by
conv_lhs => rw [s_eq]
@@ -1108,9 +1108,9 @@ theorem lintegral_abs_det_fderiv_le_addHaar_image_aux1 (hs : MeasurableSet s)
ENNReal.ofReal_le_ofReal I
_ = ENNReal.ofReal (|(A n).det|) + ε := by
simp only [ENNReal.ofReal_add, abs_nonneg, NNReal.zero_le_coe, ENNReal.ofReal_coe_nnreal]
- _ = ∑' n, ENNReal.ofReal (|(A n).det|) * μ (s ∩ t n) + ε * μ (s ∩ t n) := by
+ _ = ∑' n, (ENNReal.ofReal (|(A n).det|) * μ (s ∩ t n) + ε * μ (s ∩ t n)) := by
simp only [set_lintegral_const, lintegral_add_right _ measurable_const]
- _ ≤ ∑' n, μ (f '' (s ∩ t n)) + ε * μ (s ∩ t n) + ε * μ (s ∩ t n) :=
+ _ ≤ ∑' n, (μ (f '' (s ∩ t n)) + ε * μ (s ∩ t n) + ε * μ (s ∩ t n)) :=
by
refine' ENNReal.tsum_le_tsum fun n => add_le_add_right _ _
exact (hδ (A n)).2.2 _ _ (ht n)
@@ -1136,7 +1136,7 @@ theorem lintegral_abs_det_fderiv_le_addHaar_image_aux1 (hs : MeasurableSet s)
theorem lintegral_abs_det_fderiv_le_addHaar_image_aux2 (hs : MeasurableSet s) (h's : μ s ≠ ∞)
(hf' : ∀ x ∈ s, HasFDerivWithinAt f (f' x) s x) (hf : InjOn f s) :
- (∫⁻ x in s, ENNReal.ofReal (|(f' x).det|) ∂μ) ≤ μ (f '' s) :=
+ ∫⁻ x in s, ENNReal.ofReal (|(f' x).det|) ∂μ ≤ μ (f '' s) :=
by
-- We just need to let the error tend to `0` in the previous lemma.
have :
@@ -1156,7 +1156,7 @@ theorem lintegral_abs_det_fderiv_le_addHaar_image_aux2 (hs : MeasurableSet s) (h
theorem lintegral_abs_det_fderiv_le_addHaar_image (hs : MeasurableSet s)
(hf' : ∀ x ∈ s, HasFDerivWithinAt f (f' x) s x) (hf : InjOn f s) :
- (∫⁻ x in s, ENNReal.ofReal (|(f' x).det|) ∂μ) ≤ μ (f '' s) :=
+ ∫⁻ x in s, ENNReal.ofReal (|(f' x).det|) ∂μ ≤ μ (f '' s) :=
by
/- We already know the result for finite-measure sets. We cover `s` by finite-measure sets using
`spanning_sets μ`, and apply the previous result to each of these parts. -/
@@ -1168,7 +1168,7 @@ theorem lintegral_abs_det_fderiv_le_addHaar_image (hs : MeasurableSet s)
have A : s = ⋃ n, s ∩ u n := by
rw [← inter_Union, iUnion_disjointed, Union_spanning_sets, inter_univ]
calc
- (∫⁻ x in s, ENNReal.ofReal (|(f' x).det|) ∂μ) =
+ ∫⁻ x in s, ENNReal.ofReal (|(f' x).det|) ∂μ =
∑' n, ∫⁻ x in s ∩ u n, ENNReal.ofReal (|(f' x).det|) ∂μ :=
by
conv_lhs => rw [A]
@@ -1205,7 +1205,7 @@ integral of `|(f' x).det|` on `s`.
Note that the measurability of `f '' s` is given by `measurable_image_of_fderiv_within`. -/
theorem lintegral_abs_det_fderiv_eq_addHaar_image (hs : MeasurableSet s)
(hf' : ∀ x ∈ s, HasFDerivWithinAt f (f' x) s x) (hf : InjOn f s) :
- (∫⁻ x in s, ENNReal.ofReal (|(f' x).det|) ∂μ) = μ (f '' s) :=
+ ∫⁻ x in s, ENNReal.ofReal (|(f' x).det|) ∂μ = μ (f '' s) :=
le_antisymm (lintegral_abs_det_fderiv_le_addHaar_image μ hs hf' hf)
(addHaar_image_le_lintegral_abs_det_fderiv μ hs hf')
#align measure_theory.lintegral_abs_det_fderiv_eq_add_haar_image MeasureTheory.lintegral_abs_det_fderiv_eq_addHaar_image
@@ -1278,7 +1278,7 @@ injective and differentiable on a measurable set `s`, then the Lebesgue integral
Note that the measurability of `f '' s` is given by `measurable_image_of_fderiv_within`. -/
theorem lintegral_image_eq_lintegral_abs_det_fderiv_mul (hs : MeasurableSet s)
(hf' : ∀ x ∈ s, HasFDerivWithinAt f (f' x) s x) (hf : InjOn f s) (g : E → ℝ≥0∞) :
- (∫⁻ x in f '' s, g x ∂μ) = ∫⁻ x in s, ENNReal.ofReal (|(f' x).det|) * g (f x) ∂μ :=
+ ∫⁻ x in f '' s, g x ∂μ = ∫⁻ x in s, ENNReal.ofReal (|(f' x).det|) * g (f x) ∂μ :=
by
rw [← restrict_map_with_density_abs_det_fderiv_eq_add_haar μ hs hf' hf,
(measurable_embedding_of_fderiv_within hs hf' hf).lintegral_map]
@@ -1316,7 +1316,7 @@ injective and differentiable on a measurable set `s`, then the Bochner integral
`g : E → F` on `f '' s` coincides with the integral of `|(f' x).det| • g ∘ f` on `s`. -/
theorem integral_image_eq_integral_abs_det_fderiv_smul [CompleteSpace F] (hs : MeasurableSet s)
(hf' : ∀ x ∈ s, HasFDerivWithinAt f (f' x) s x) (hf : InjOn f s) (g : E → F) :
- (∫ x in f '' s, g x ∂μ) = ∫ x in s, |(f' x).det| • g (f x) ∂μ :=
+ ∫ x in f '' s, g x ∂μ = ∫ x in s, |(f' x).det| • g (f x) ∂μ :=
by
rw [← restrict_map_with_density_abs_det_fderiv_eq_add_haar μ hs hf' hf,
(measurable_embedding_of_fderiv_within hs hf' hf).integral_map]
@@ -1365,7 +1365,7 @@ theorem integrableOn_image_iff_integrableOn_abs_deriv_smul {s : Set ℝ} {f :
function `g : ℝ → F` on `f '' s` coincides with the integral of `|(f' x)| • g ∘ f` on `s`. -/
theorem integral_image_eq_integral_abs_deriv_smul {s : Set ℝ} {f : ℝ → ℝ} {f' : ℝ → ℝ}
[CompleteSpace F] (hs : MeasurableSet s) (hf' : ∀ x ∈ s, HasDerivWithinAt f (f' x) s x)
- (hf : InjOn f s) (g : ℝ → F) : (∫ x in f '' s, g x) = ∫ x in s, |f' x| • g (f x) := by
+ (hf : InjOn f s) (g : ℝ → F) : ∫ x in f '' s, g x = ∫ x in s, |f' x| • g (f x) := by
simpa only [det_one_smul_right] using
integral_image_eq_integral_abs_det_fderiv_smul volume hs
(fun x hx => (hf' x hx).HasFDerivWithinAt) hf g
@@ -1373,7 +1373,7 @@ theorem integral_image_eq_integral_abs_deriv_smul {s : Set ℝ} {f : ℝ → ℝ
theorem integral_target_eq_integral_abs_det_fderiv_smul [CompleteSpace F] {f : LocalHomeomorph E E}
(hf' : ∀ x ∈ f.source, HasFDerivAt f (f' x) x) (g : E → F) :
- (∫ x in f.target, g x ∂μ) = ∫ x in f.source, |(f' x).det| • g (f x) ∂μ :=
+ ∫ x in f.target, g x ∂μ = ∫ x in f.source, |(f' x).det| • g (f x) ∂μ :=
by
have : f '' f.source = f.target := LocalEquiv.image_source_eq_target f.to_local_equiv
rw [← this]
mathlib commit https://github.com/leanprover-community/mathlib/commit/a3e83f0fa4391c8740f7d773a7a9b74e311ae2a3
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Sébastien Gouëzel
! This file was ported from Lean 3 source module measure_theory.function.jacobian
-! leanprover-community/mathlib commit b84aee748341da06a6d78491367e2c0e9f15e8a5
+! leanprover-community/mathlib commit 6b31d1eebd64eab86d5bd9936bfaada6ca8b5842
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -18,6 +18,9 @@ import Mathbin.MeasureTheory.Constructions.Polish
/-!
# Change of variables in higher-dimensional integrals
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
Let `μ` be a Lebesgue measure on a finite-dimensional real vector space `E`.
Let `f : E → E` be a function which is injective and differentiable on a measurable set `s`,
with derivative `f'`. Then we prove that `f '' s` is measurable, and
mathlib commit https://github.com/leanprover-community/mathlib/commit/7e5137f579de09a059a5ce98f364a04e221aabf0
@@ -182,7 +182,6 @@ theorem exists_closed_cover_approximatesLinearOn_of_hasFDerivWithinAt [SecondCou
_ ≤ r (f' z) * ‖y - x‖ := by
rw [← add_mul, add_comm]
exact mul_le_mul_of_nonneg_right hε (norm_nonneg _)
-
-- the sets `M n z` are relatively closed in `s`, as all the conditions defining it are clearly
-- closed
have closure_M_subset : ∀ n z, s ∩ closure (M n z) ⊆ M n z :=
@@ -228,7 +227,6 @@ theorem exists_closed_cover_approximatesLinearOn_of_hasFDerivWithinAt [SecondCou
dist x y ≤ dist x (d p) + dist y (d p) := dist_triangle_right _ _ _
_ ≤ u n / 3 + u n / 3 := (add_le_add hx.2.2 hy.2.2)
_ < u n := by linarith [u_pos n]
-
-- the sets `K n z p` are also closed, again by design.
have K_closed : ∀ (n) (z : T) (p), IsClosed (K n z p) := fun n z p =>
is_closed_closure.inter is_closed_ball
@@ -361,7 +359,6 @@ theorem addHaar_image_le_mul_of_det_lt (A : E →L[ℝ] E) {m : ℝ≥0}
‖f z - f x - A (z - x)‖ ≤ δ * ‖z - x‖ := hf _ zs _ xs
_ ≤ ε * r :=
mul_le_mul (le_of_lt hδ) (mem_closedBall_iff_norm.1 zr) (norm_nonneg _) εpos.le
-
· simp only [map_sub, Pi.sub_apply]
abel
have :
@@ -381,7 +378,6 @@ theorem addHaar_image_le_mul_of_det_lt (A : E →L[ℝ] E) {m : ℝ≥0}
_ ≤ ENNReal.ofReal (r ^ finrank ℝ E) * (m * μ (closed_ball 0 1)) := by rw [add_comm];
exact mul_le_mul_left' hε.le _
_ = m * μ (closed_ball x r) := by simp only [add_haar_closed_ball' _ _ r0]; ring
-
-- covering `s` by closed balls with total measure very close to `μ s`, one deduces that the
-- measure of `f '' s` is at most `m * (μ s + a)` for any positive `a`.
have J : ∀ᶠ a in 𝓝[>] (0 : ℝ≥0∞), μ (f '' s) ≤ m * (μ s + a) :=
@@ -409,7 +405,6 @@ theorem addHaar_image_le_mul_of_det_lt (A : E →L[ℝ] E) {m : ℝ≥0}
_ ≤ ∑' x : t, m * μ (closed_ball x (r x)) :=
(ENNReal.tsum_le_tsum fun x => I x (r x) (ts x.2) (rpos x x.2).le)
_ ≤ m * (μ s + a) := by rw [ENNReal.tsum_mul_left]; exact mul_le_mul_left' μt _
-
-- taking the limit in `a`, one obtains the conclusion
have L : tendsto (fun a => (m : ℝ≥0∞) * (μ s + a)) (𝓝[>] 0) (𝓝 (m * (μ s + 0))) :=
by
@@ -560,7 +555,6 @@ theorem ApproximatesLinearOn.norm_fderiv_sub_le {A : E →L[ℝ] E} {δ : ℝ≥
‖a‖ = ‖z + (a - z)‖ := by simp only [add_sub_cancel'_right]
_ ≤ ‖z‖ + ‖a - z‖ := (norm_add_le _ _)
_ ≤ ‖z‖ + ε := add_le_add_left (mem_closedBall_iff_norm.1 az) _
-
-- use the approximation properties to control `(f' x - A) a`, and then `(f' x - A) z` as `z` is
-- close to `a`.
have I : r * ‖(f' x - A) a‖ ≤ r * (δ + ε) * (‖z‖ + ε) :=
@@ -580,7 +574,6 @@ theorem ApproximatesLinearOn.norm_fderiv_sub_le {A : E →L[ℝ] E} {δ : ℝ≥
ring
_ ≤ r * (δ + ε) * (‖z‖ + ε) :=
mul_le_mul_of_nonneg_left norm_a (mul_nonneg rpos.le (add_nonneg δ.2 εpos.le))
-
show ‖(f' x - A) z‖ ≤ (δ + ε) * (‖z‖ + ε) + ‖f' x - A‖ * ε;
exact
calc
@@ -598,7 +591,6 @@ theorem ApproximatesLinearOn.norm_fderiv_sub_le {A : E →L[ℝ] E} {δ : ℝ≥
_ ≤ (δ + ε) * (‖z‖ + ε) + ‖f' x - A‖ * ε :=
add_le_add le_rfl
(mul_le_mul_of_nonneg_left (mem_closedBall_iff_norm'.1 az) (norm_nonneg _))
-
#align approximates_linear_on.norm_fderiv_sub_le ApproximatesLinearOn.norm_fderiv_sub_le
-/
@@ -657,7 +649,6 @@ theorem addHaar_image_eq_zero_of_differentiableOn_of_addHaar_eq_zero (hf : Diffe
refine' ENNReal.tsum_le_tsum fun n => mul_le_mul_left' _ _
exact le_trans (measure_mono (inter_subset_left _ _)) (le_of_eq hs)
_ = 0 := by simp only [tsum_zero, MulZeroClass.mul_zero]
-
#align measure_theory.add_haar_image_eq_zero_of_differentiable_on_of_add_haar_eq_zero MeasureTheory.addHaar_image_eq_zero_of_differentiableOn_of_addHaar_eq_zero
/-- A version of Sard lemma in fixed dimension: given a differentiable function from `E` to `E` and
@@ -720,7 +711,6 @@ theorem addHaar_image_eq_zero_of_det_fderivWithin_eq_zero_aux
_ ≤ ε * μ (closed_ball 0 R) := by
rw [← inter_Union]
exact mul_le_mul_left' (measure_mono (inter_subset_left _ _)) _
-
#align measure_theory.add_haar_image_eq_zero_of_det_fderiv_within_eq_zero_aux MeasureTheory.addHaar_image_eq_zero_of_det_fderivWithin_eq_zero_aux
/-- A version of Sard lemma in fixed dimension: given a differentiable function from `E` to `E` and
@@ -735,7 +725,6 @@ theorem addHaar_image_eq_zero_of_det_fderivWithin_eq_zero
μ (f '' ⋃ n : ℕ, s ∩ closed_ball 0 n) ≤ ∑' n : ℕ, μ (f '' (s ∩ closed_ball 0 n)) := by
rw [image_Union]; exact measure_Union_le _
_ ≤ 0 := by simp only [H, tsum_zero, nonpos_iff_eq_zero]
-
intro R
have A : ∀ (ε : ℝ≥0) (εpos : 0 < ε), μ (f '' (s ∩ closed_ball 0 R)) ≤ ε * μ (closed_ball 0 R) :=
fun ε εpos =>
@@ -916,7 +905,6 @@ theorem addHaar_image_le_lintegral_abs_det_fderiv_aux1 (hs : MeasurableSet s)
‖B - A‖ ≤ (min δ δ'' : ℝ≥0) := hB
_ ≤ δ'' := by simp only [le_refl, NNReal.coe_min, min_le_iff, or_true_iff]
_ < δ' := half_lt_self δ'pos
-
· intro t g htg
exact h t g (htg.mono_num (min_le_left _ _))
choose δ hδ using this
@@ -954,14 +942,12 @@ theorem addHaar_image_le_lintegral_abs_det_fderiv_aux1 (hs : MeasurableSet s)
|(A n).det| = |(f' x).det - ((f' x).det - (A n).det)| := by congr 1; abel
_ ≤ |(f' x).det| + |(f' x).det - (A n).det| := (abs_sub _ _)
_ ≤ |(f' x).det| + ε := add_le_add le_rfl ((hδ (A n)).2.1 _ hx)
-
calc
ENNReal.ofReal (|(A n).det|) + ε ≤ ENNReal.ofReal (|(f' x).det| + ε) + ε :=
add_le_add (ENNReal.ofReal_le_ofReal I) le_rfl
_ = ENNReal.ofReal (|(f' x).det|) + 2 * ε := by
simp only [ENNReal.ofReal_add, abs_nonneg, two_mul, add_assoc, NNReal.zero_le_coe,
ENNReal.ofReal_coe_nnreal]
-
_ = ∫⁻ x in ⋃ n, s ∩ t n, ENNReal.ofReal (|(f' x).det|) + 2 * ε ∂μ :=
by
have M : ∀ n : ℕ, MeasurableSet (s ∩ t n) := fun n => hs.inter (t_meas n)
@@ -975,7 +961,6 @@ theorem addHaar_image_le_lintegral_abs_det_fderiv_aux1 (hs : MeasurableSet s)
rw [← this]
_ = (∫⁻ x in s, ENNReal.ofReal (|(f' x).det|) ∂μ) + 2 * ε * μ s := by
simp only [lintegral_add_right' _ aemeasurable_const, set_lintegral_const]
-
#align measure_theory.add_haar_image_le_lintegral_abs_det_fderiv_aux1 MeasureTheory.addHaar_image_le_lintegral_abs_det_fderiv_aux1
theorem addHaar_image_le_lintegral_abs_det_fderiv_aux2 (hs : MeasurableSet s) (h's : μ s ≠ ∞)
@@ -1031,7 +1016,6 @@ theorem addHaar_image_le_lintegral_abs_det_fderiv (hs : MeasurableSet s)
rw [lintegral_Union]
· intro n; exact hs.inter (u_meas n)
· exact pairwise_disjoint_mono (disjoint_disjointed _) fun n => inter_subset_right _ _
-
#align measure_theory.add_haar_image_le_lintegral_abs_det_fderiv MeasureTheory.addHaar_image_le_lintegral_abs_det_fderiv
theorem lintegral_abs_det_fderiv_le_addHaar_image_aux1 (hs : MeasurableSet s)
@@ -1116,13 +1100,11 @@ theorem lintegral_abs_det_fderiv_le_addHaar_image_aux1 (hs : MeasurableSet s)
|(f' x).det| = |(A n).det + ((f' x).det - (A n).det)| := by congr 1; abel
_ ≤ |(A n).det| + |(f' x).det - (A n).det| := (abs_add _ _)
_ ≤ |(A n).det| + ε := add_le_add le_rfl ((hδ (A n)).2.1 _ hx)
-
calc
ENNReal.ofReal (|(f' x).det|) ≤ ENNReal.ofReal (|(A n).det| + ε) :=
ENNReal.ofReal_le_ofReal I
_ = ENNReal.ofReal (|(A n).det|) + ε := by
simp only [ENNReal.ofReal_add, abs_nonneg, NNReal.zero_le_coe, ENNReal.ofReal_coe_nnreal]
-
_ = ∑' n, ENNReal.ofReal (|(A n).det|) * μ (s ∩ t n) + ε * μ (s ∩ t n) := by
simp only [set_lintegral_const, lintegral_add_right _ measurable_const]
_ ≤ ∑' n, μ (f '' (s ∩ t n)) + ε * μ (s ∩ t n) + ε * μ (s ∩ t n) :=
@@ -1147,7 +1129,6 @@ theorem lintegral_abs_det_fderiv_le_addHaar_image_aux1 (hs : MeasurableSet s)
congr 1
ext1 i
rw [mul_assoc, two_mul, add_assoc]
-
#align measure_theory.lintegral_abs_det_fderiv_le_add_haar_image_aux1 MeasureTheory.lintegral_abs_det_fderiv_le_addHaar_image_aux1
theorem lintegral_abs_det_fderiv_le_addHaar_image_aux2 (hs : MeasurableSet s) (h's : μ s ≠ ∞)
@@ -1213,7 +1194,6 @@ theorem lintegral_abs_det_fderiv_le_addHaar_image (hs : MeasurableSet s)
measurable_image_of_fderiv_within (hs.inter (u_meas i))
(fun x hx => (hf' x hx.1).mono (inter_subset_left _ _))
(hf.mono (inter_subset_left _ _))
-
#align measure_theory.lintegral_abs_det_fderiv_le_add_haar_image MeasureTheory.lintegral_abs_det_fderiv_le_addHaar_image
/-- Change of variable formula for differentiable functions, set version: if a function `f` is
mathlib commit https://github.com/leanprover-community/mathlib/commit/31c24aa72e7b3e5ed97a8412470e904f82b81004
@@ -301,7 +301,7 @@ to the approximating linear map.
/-- Let `f` be a function which is sufficiently close (in the Lipschitz sense) to a given linear
map `A`. Then it expands the volume of any set by at most `m` for any `m > det A`. -/
-theorem add_haar_image_le_mul_of_det_lt (A : E →L[ℝ] E) {m : ℝ≥0}
+theorem addHaar_image_le_mul_of_det_lt (A : E →L[ℝ] E) {m : ℝ≥0}
(hm : ENNReal.ofReal (|A.det|) < m) :
∀ᶠ δ in 𝓝[>] (0 : ℝ≥0),
∀ (s : Set E) (f : E → E) (hf : ApproximatesLinearOn f A s δ), μ (f '' s) ≤ m * μ s :=
@@ -418,11 +418,11 @@ theorem add_haar_image_le_mul_of_det_lt (A : E →L[ℝ] E) {m : ℝ≥0}
simp only [ENNReal.coe_ne_top, Ne.def, or_true_iff, not_false_iff]
rw [add_zero] at L
exact ge_of_tendsto L J
-#align measure_theory.add_haar_image_le_mul_of_det_lt MeasureTheory.add_haar_image_le_mul_of_det_lt
+#align measure_theory.add_haar_image_le_mul_of_det_lt MeasureTheory.addHaar_image_le_mul_of_det_lt
/-- Let `f` be a function which is sufficiently close (in the Lipschitz sense) to a given linear
map `A`. Then it expands the volume of any set by at least `m` for any `m < det A`. -/
-theorem mul_le_add_haar_image_of_lt_det (A : E →L[ℝ] E) {m : ℝ≥0}
+theorem mul_le_addHaar_image_of_lt_det (A : E →L[ℝ] E) {m : ℝ≥0}
(hm : (m : ℝ≥0∞) < ENNReal.ofReal (|A.det|)) :
∀ᶠ δ in 𝓝[>] (0 : ℝ≥0),
∀ (s : Set E) (f : E → E) (hf : ApproximatesLinearOn f A s δ),
@@ -499,8 +499,9 @@ theorem mul_le_add_haar_image_of_lt_det (A : E →L[ℝ] E) {m : ℝ≥0}
-- as `f⁻¹` is well approximated by `B⁻¹`, the conclusion follows from `hδ₀`
-- and our choice of `δ`.
exact hδ₀ _ _ ((hf'.to_inv h1δ).mono_num h2δ.le)
-#align measure_theory.mul_le_add_haar_image_of_lt_det MeasureTheory.mul_le_add_haar_image_of_lt_det
+#align measure_theory.mul_le_add_haar_image_of_lt_det MeasureTheory.mul_le_addHaar_image_of_lt_det
+#print ApproximatesLinearOn.norm_fderiv_sub_le /-
/-- If a differentiable function `f` is approximated by a linear map `A` on a set `s`, up to `δ`,
then at almost every `x` in `s` one has `‖f' x - A‖ ≤ δ`. -/
theorem ApproximatesLinearOn.norm_fderiv_sub_le {A : E →L[ℝ] E} {δ : ℝ≥0}
@@ -599,6 +600,7 @@ theorem ApproximatesLinearOn.norm_fderiv_sub_le {A : E →L[ℝ] E} {δ : ℝ≥
(mul_le_mul_of_nonneg_left (mem_closedBall_iff_norm'.1 az) (norm_nonneg _))
#align approximates_linear_on.norm_fderiv_sub_le ApproximatesLinearOn.norm_fderiv_sub_le
+-/
/-!
### Measure zero of the image, over non-measurable sets
@@ -611,7 +613,7 @@ assumptions.
/-- A differentiable function maps sets of measure zero to sets of measure zero. -/
-theorem add_haar_image_eq_zero_of_differentiableOn_of_add_haar_eq_zero (hf : DifferentiableOn ℝ f s)
+theorem addHaar_image_eq_zero_of_differentiableOn_of_addHaar_eq_zero (hf : DifferentiableOn ℝ f s)
(hs : μ s = 0) : μ (f '' s) = 0 :=
by
refine' le_antisymm _ (zero_le _)
@@ -656,12 +658,12 @@ theorem add_haar_image_eq_zero_of_differentiableOn_of_add_haar_eq_zero (hf : Dif
exact le_trans (measure_mono (inter_subset_left _ _)) (le_of_eq hs)
_ = 0 := by simp only [tsum_zero, MulZeroClass.mul_zero]
-#align measure_theory.add_haar_image_eq_zero_of_differentiable_on_of_add_haar_eq_zero MeasureTheory.add_haar_image_eq_zero_of_differentiableOn_of_add_haar_eq_zero
+#align measure_theory.add_haar_image_eq_zero_of_differentiable_on_of_add_haar_eq_zero MeasureTheory.addHaar_image_eq_zero_of_differentiableOn_of_addHaar_eq_zero
/-- A version of Sard lemma in fixed dimension: given a differentiable function from `E` to `E` and
a set where the differential is not invertible, then the image of this set has zero measure.
Here, we give an auxiliary statement towards this result. -/
-theorem add_haar_image_eq_zero_of_det_fderiv_within_eq_zero_aux
+theorem addHaar_image_eq_zero_of_det_fderivWithin_eq_zero_aux
(hf' : ∀ x ∈ s, HasFDerivWithinAt f (f' x) s x) (R : ℝ) (hs : s ⊆ closedBall 0 R) (ε : ℝ≥0)
(εpos : 0 < ε) (h'f' : ∀ x ∈ s, (f' x).det = 0) : μ (f '' s) ≤ ε * μ (closedBall 0 R) :=
by
@@ -719,11 +721,11 @@ theorem add_haar_image_eq_zero_of_det_fderiv_within_eq_zero_aux
rw [← inter_Union]
exact mul_le_mul_left' (measure_mono (inter_subset_left _ _)) _
-#align measure_theory.add_haar_image_eq_zero_of_det_fderiv_within_eq_zero_aux MeasureTheory.add_haar_image_eq_zero_of_det_fderiv_within_eq_zero_aux
+#align measure_theory.add_haar_image_eq_zero_of_det_fderiv_within_eq_zero_aux MeasureTheory.addHaar_image_eq_zero_of_det_fderivWithin_eq_zero_aux
/-- A version of Sard lemma in fixed dimension: given a differentiable function from `E` to `E` and
a set where the differential is not invertible, then the image of this set has zero measure. -/
-theorem add_haar_image_eq_zero_of_det_fderiv_within_eq_zero
+theorem addHaar_image_eq_zero_of_det_fderivWithin_eq_zero
(hf' : ∀ x ∈ s, HasFDerivWithinAt f (f' x) s x) (h'f' : ∀ x ∈ s, (f' x).det = 0) :
μ (f '' s) = 0 := by
suffices H : ∀ R, μ (f '' (s ∩ closed_ball 0 R)) = 0
@@ -753,7 +755,7 @@ theorem add_haar_image_eq_zero_of_det_fderiv_within_eq_zero
apply ge_of_tendsto B
filter_upwards [self_mem_nhdsWithin]
exact A
-#align measure_theory.add_haar_image_eq_zero_of_det_fderiv_within_eq_zero MeasureTheory.add_haar_image_eq_zero_of_det_fderiv_within_eq_zero
+#align measure_theory.add_haar_image_eq_zero_of_det_fderiv_within_eq_zero MeasureTheory.addHaar_image_eq_zero_of_det_fderivWithin_eq_zero
/-!
### Weak measurability statements
@@ -764,10 +766,11 @@ Lusin-Souslin theorem.
-/
+#print MeasureTheory.aemeasurable_fderivWithin /-
/-- The derivative of a function on a measurable set is almost everywhere measurable on this set
with respect to Lebesgue measure. Note that, in general, it is not genuinely measurable there,
as `f'` is not unique (but only on a set of measure `0`, as the argument shows). -/
-theorem aEMeasurable_fderiv_within (hs : MeasurableSet s)
+theorem aemeasurable_fderivWithin (hs : MeasurableSet s)
(hf' : ∀ x ∈ s, HasFDerivWithinAt f (f' x) s x) : AEMeasurable f' (μ.restrict s) :=
by
/- It suffices to show that `f'` can be uniformly approximated by a measurable function.
@@ -824,9 +827,11 @@ theorem aEMeasurable_fderiv_within (hs : MeasurableSet s)
rw [← nndist_eq_nnnorm] at hx1
rw [hx2, dist_comm]
exact hx1
-#align measure_theory.ae_measurable_fderiv_within MeasureTheory.aEMeasurable_fderiv_within
+#align measure_theory.ae_measurable_fderiv_within MeasureTheory.aemeasurable_fderivWithin
+-/
-theorem aEMeasurable_ofReal_abs_det_fderiv_within (hs : MeasurableSet s)
+#print MeasureTheory.aemeasurable_ofReal_abs_det_fderivWithin /-
+theorem aemeasurable_ofReal_abs_det_fderivWithin (hs : MeasurableSet s)
(hf' : ∀ x ∈ s, HasFDerivWithinAt f (f' x) s x) :
AEMeasurable (fun x => ENNReal.ofReal (|(f' x).det|)) (μ.restrict s) :=
by
@@ -834,9 +839,11 @@ theorem aEMeasurable_ofReal_abs_det_fderiv_within (hs : MeasurableSet s)
refine' continuous_abs.measurable.comp_ae_measurable _
refine' continuous_linear_map.continuous_det.measurable.comp_ae_measurable _
exact ae_measurable_fderiv_within μ hs hf'
-#align measure_theory.ae_measurable_of_real_abs_det_fderiv_within MeasureTheory.aEMeasurable_ofReal_abs_det_fderiv_within
+#align measure_theory.ae_measurable_of_real_abs_det_fderiv_within MeasureTheory.aemeasurable_ofReal_abs_det_fderivWithin
+-/
-theorem aEMeasurable_toNNReal_abs_det_fderiv_within (hs : MeasurableSet s)
+#print MeasureTheory.aemeasurable_toNNReal_abs_det_fderivWithin /-
+theorem aemeasurable_toNNReal_abs_det_fderivWithin (hs : MeasurableSet s)
(hf' : ∀ x ∈ s, HasFDerivWithinAt f (f' x) s x) :
AEMeasurable (fun x => |(f' x).det|.toNNReal) (μ.restrict s) :=
by
@@ -844,24 +851,29 @@ theorem aEMeasurable_toNNReal_abs_det_fderiv_within (hs : MeasurableSet s)
refine' continuous_abs.measurable.comp_ae_measurable _
refine' continuous_linear_map.continuous_det.measurable.comp_ae_measurable _
exact ae_measurable_fderiv_within μ hs hf'
-#align measure_theory.ae_measurable_to_nnreal_abs_det_fderiv_within MeasureTheory.aEMeasurable_toNNReal_abs_det_fderiv_within
+#align measure_theory.ae_measurable_to_nnreal_abs_det_fderiv_within MeasureTheory.aemeasurable_toNNReal_abs_det_fderivWithin
+-/
+#print MeasureTheory.measurable_image_of_fderivWithin /-
/-- If a function is differentiable and injective on a measurable set,
then the image is measurable.-/
-theorem measurable_image_of_fderiv_within (hs : MeasurableSet s)
+theorem measurable_image_of_fderivWithin (hs : MeasurableSet s)
(hf' : ∀ x ∈ s, HasFDerivWithinAt f (f' x) s x) (hf : InjOn f s) : MeasurableSet (f '' s) :=
haveI : DifferentiableOn ℝ f s := fun x hx => (hf' x hx).DifferentiableWithinAt
hs.image_of_continuous_on_inj_on (DifferentiableOn.continuousOn this) hf
-#align measure_theory.measurable_image_of_fderiv_within MeasureTheory.measurable_image_of_fderiv_within
+#align measure_theory.measurable_image_of_fderiv_within MeasureTheory.measurable_image_of_fderivWithin
+-/
+#print MeasureTheory.measurableEmbedding_of_fderivWithin /-
/-- If a function is differentiable and injective on a measurable set `s`, then its restriction
to `s` is a measurable embedding. -/
-theorem measurableEmbedding_of_fderiv_within (hs : MeasurableSet s)
+theorem measurableEmbedding_of_fderivWithin (hs : MeasurableSet s)
(hf' : ∀ x ∈ s, HasFDerivWithinAt f (f' x) s x) (hf : InjOn f s) :
MeasurableEmbedding (s.restrict f) :=
haveI : DifferentiableOn ℝ f s := fun x hx => (hf' x hx).DifferentiableWithinAt
this.continuous_on.measurable_embedding hs hf
-#align measure_theory.measurable_embedding_of_fderiv_within MeasureTheory.measurableEmbedding_of_fderiv_within
+#align measure_theory.measurable_embedding_of_fderiv_within MeasureTheory.measurableEmbedding_of_fderivWithin
+-/
/-!
### Proving the estimate for the measure of the image
@@ -872,7 +884,7 @@ directions, first up to controlled errors and then letting these errors tend to
-/
-theorem add_haar_image_le_lintegral_abs_det_fderiv_aux1 (hs : MeasurableSet s)
+theorem addHaar_image_le_lintegral_abs_det_fderiv_aux1 (hs : MeasurableSet s)
(hf' : ∀ x ∈ s, HasFDerivWithinAt f (f' x) s x) {ε : ℝ≥0} (εpos : 0 < ε) :
μ (f '' s) ≤ (∫⁻ x in s, ENNReal.ofReal (|(f' x).det|) ∂μ) + 2 * ε * μ s :=
by
@@ -964,9 +976,9 @@ theorem add_haar_image_le_lintegral_abs_det_fderiv_aux1 (hs : MeasurableSet s)
_ = (∫⁻ x in s, ENNReal.ofReal (|(f' x).det|) ∂μ) + 2 * ε * μ s := by
simp only [lintegral_add_right' _ aemeasurable_const, set_lintegral_const]
-#align measure_theory.add_haar_image_le_lintegral_abs_det_fderiv_aux1 MeasureTheory.add_haar_image_le_lintegral_abs_det_fderiv_aux1
+#align measure_theory.add_haar_image_le_lintegral_abs_det_fderiv_aux1 MeasureTheory.addHaar_image_le_lintegral_abs_det_fderiv_aux1
-theorem add_haar_image_le_lintegral_abs_det_fderiv_aux2 (hs : MeasurableSet s) (h's : μ s ≠ ∞)
+theorem addHaar_image_le_lintegral_abs_det_fderiv_aux2 (hs : MeasurableSet s) (h's : μ s ≠ ∞)
(hf' : ∀ x ∈ s, HasFDerivWithinAt f (f' x) s x) :
μ (f '' s) ≤ ∫⁻ x in s, ENNReal.ofReal (|(f' x).det|) ∂μ :=
by
@@ -984,9 +996,9 @@ theorem add_haar_image_le_lintegral_abs_det_fderiv_aux2 (hs : MeasurableSet s) (
filter_upwards [self_mem_nhdsWithin]
rintro ε (εpos : 0 < ε)
exact add_haar_image_le_lintegral_abs_det_fderiv_aux1 μ hs hf' εpos
-#align measure_theory.add_haar_image_le_lintegral_abs_det_fderiv_aux2 MeasureTheory.add_haar_image_le_lintegral_abs_det_fderiv_aux2
+#align measure_theory.add_haar_image_le_lintegral_abs_det_fderiv_aux2 MeasureTheory.addHaar_image_le_lintegral_abs_det_fderiv_aux2
-theorem add_haar_image_le_lintegral_abs_det_fderiv (hs : MeasurableSet s)
+theorem addHaar_image_le_lintegral_abs_det_fderiv (hs : MeasurableSet s)
(hf' : ∀ x ∈ s, HasFDerivWithinAt f (f' x) s x) :
μ (f '' s) ≤ ∫⁻ x in s, ENNReal.ofReal (|(f' x).det|) ∂μ :=
by
@@ -1020,9 +1032,9 @@ theorem add_haar_image_le_lintegral_abs_det_fderiv (hs : MeasurableSet s)
· intro n; exact hs.inter (u_meas n)
· exact pairwise_disjoint_mono (disjoint_disjointed _) fun n => inter_subset_right _ _
-#align measure_theory.add_haar_image_le_lintegral_abs_det_fderiv MeasureTheory.add_haar_image_le_lintegral_abs_det_fderiv
+#align measure_theory.add_haar_image_le_lintegral_abs_det_fderiv MeasureTheory.addHaar_image_le_lintegral_abs_det_fderiv
-theorem lintegral_abs_det_fderiv_le_add_haar_image_aux1 (hs : MeasurableSet s)
+theorem lintegral_abs_det_fderiv_le_addHaar_image_aux1 (hs : MeasurableSet s)
(hf' : ∀ x ∈ s, HasFDerivWithinAt f (f' x) s x) (hf : InjOn f s) {ε : ℝ≥0} (εpos : 0 < ε) :
(∫⁻ x in s, ENNReal.ofReal (|(f' x).det|) ∂μ) ≤ μ (f '' s) + 2 * ε * μ s :=
by
@@ -1136,9 +1148,9 @@ theorem lintegral_abs_det_fderiv_le_add_haar_image_aux1 (hs : MeasurableSet s)
ext1 i
rw [mul_assoc, two_mul, add_assoc]
-#align measure_theory.lintegral_abs_det_fderiv_le_add_haar_image_aux1 MeasureTheory.lintegral_abs_det_fderiv_le_add_haar_image_aux1
+#align measure_theory.lintegral_abs_det_fderiv_le_add_haar_image_aux1 MeasureTheory.lintegral_abs_det_fderiv_le_addHaar_image_aux1
-theorem lintegral_abs_det_fderiv_le_add_haar_image_aux2 (hs : MeasurableSet s) (h's : μ s ≠ ∞)
+theorem lintegral_abs_det_fderiv_le_addHaar_image_aux2 (hs : MeasurableSet s) (h's : μ s ≠ ∞)
(hf' : ∀ x ∈ s, HasFDerivWithinAt f (f' x) s x) (hf : InjOn f s) :
(∫⁻ x in s, ENNReal.ofReal (|(f' x).det|) ∂μ) ≤ μ (f '' s) :=
by
@@ -1156,9 +1168,9 @@ theorem lintegral_abs_det_fderiv_le_add_haar_image_aux2 (hs : MeasurableSet s) (
filter_upwards [self_mem_nhdsWithin]
rintro ε (εpos : 0 < ε)
exact lintegral_abs_det_fderiv_le_add_haar_image_aux1 μ hs hf' hf εpos
-#align measure_theory.lintegral_abs_det_fderiv_le_add_haar_image_aux2 MeasureTheory.lintegral_abs_det_fderiv_le_add_haar_image_aux2
+#align measure_theory.lintegral_abs_det_fderiv_le_add_haar_image_aux2 MeasureTheory.lintegral_abs_det_fderiv_le_addHaar_image_aux2
-theorem lintegral_abs_det_fderiv_le_add_haar_image (hs : MeasurableSet s)
+theorem lintegral_abs_det_fderiv_le_addHaar_image (hs : MeasurableSet s)
(hf' : ∀ x ∈ s, HasFDerivWithinAt f (f' x) s x) (hf : InjOn f s) :
(∫⁻ x in s, ENNReal.ofReal (|(f' x).det|) ∂μ) ≤ μ (f '' s) :=
by
@@ -1202,19 +1214,20 @@ theorem lintegral_abs_det_fderiv_le_add_haar_image (hs : MeasurableSet s)
(fun x hx => (hf' x hx.1).mono (inter_subset_left _ _))
(hf.mono (inter_subset_left _ _))
-#align measure_theory.lintegral_abs_det_fderiv_le_add_haar_image MeasureTheory.lintegral_abs_det_fderiv_le_add_haar_image
+#align measure_theory.lintegral_abs_det_fderiv_le_add_haar_image MeasureTheory.lintegral_abs_det_fderiv_le_addHaar_image
/-- Change of variable formula for differentiable functions, set version: if a function `f` is
injective and differentiable on a measurable set `s`, then the measure of `f '' s` is given by the
integral of `|(f' x).det|` on `s`.
Note that the measurability of `f '' s` is given by `measurable_image_of_fderiv_within`. -/
-theorem lintegral_abs_det_fderiv_eq_add_haar_image (hs : MeasurableSet s)
+theorem lintegral_abs_det_fderiv_eq_addHaar_image (hs : MeasurableSet s)
(hf' : ∀ x ∈ s, HasFDerivWithinAt f (f' x) s x) (hf : InjOn f s) :
(∫⁻ x in s, ENNReal.ofReal (|(f' x).det|) ∂μ) = μ (f '' s) :=
- le_antisymm (lintegral_abs_det_fderiv_le_add_haar_image μ hs hf' hf)
- (add_haar_image_le_lintegral_abs_det_fderiv μ hs hf')
-#align measure_theory.lintegral_abs_det_fderiv_eq_add_haar_image MeasureTheory.lintegral_abs_det_fderiv_eq_add_haar_image
+ le_antisymm (lintegral_abs_det_fderiv_le_addHaar_image μ hs hf' hf)
+ (addHaar_image_le_lintegral_abs_det_fderiv μ hs hf')
+#align measure_theory.lintegral_abs_det_fderiv_eq_add_haar_image MeasureTheory.lintegral_abs_det_fderiv_eq_addHaar_image
+#print MeasureTheory.map_withDensity_abs_det_fderiv_eq_addHaar /-
/-- Change of variable formula for differentiable functions, set version: if a function `f` is
injective and differentiable on a measurable set `s`, then the pushforward of the measure with
density `|(f' x).det|` on `s` is the Lebesgue measure on the image set. This version requires
@@ -1222,7 +1235,7 @@ that `f` is measurable, as otherwise `measure.map f` is zero per our definitions
For a version without measurability assumption but dealing with the restricted
function `s.restrict f`, see `restrict_map_with_density_abs_det_fderiv_eq_add_haar`.
-/
-theorem map_withDensity_abs_det_fderiv_eq_add_haar (hs : MeasurableSet s)
+theorem map_withDensity_abs_det_fderiv_eq_addHaar (hs : MeasurableSet s)
(hf' : ∀ x ∈ s, HasFDerivWithinAt f (f' x) s x) (hf : InjOn f s) (h'f : Measurable f) :
Measure.map f ((μ.restrict s).withDensity fun x => ENNReal.ofReal (|(f' x).det|)) =
μ.restrict (f '' s) :=
@@ -1233,8 +1246,10 @@ theorem map_withDensity_abs_det_fderiv_eq_add_haar (hs : MeasurableSet s)
lintegral_abs_det_fderiv_eq_add_haar_image μ ((h'f ht).inter hs)
(fun x hx => (hf' x hx.2).mono (inter_subset_right _ _)) (hf.mono (inter_subset_right _ _)),
image_preimage_inter]
-#align measure_theory.map_with_density_abs_det_fderiv_eq_add_haar MeasureTheory.map_withDensity_abs_det_fderiv_eq_add_haar
+#align measure_theory.map_with_density_abs_det_fderiv_eq_add_haar MeasureTheory.map_withDensity_abs_det_fderiv_eq_addHaar
+-/
+#print MeasureTheory.restrict_map_withDensity_abs_det_fderiv_eq_addHaar /-
/-- Change of variable formula for differentiable functions, set version: if a function `f` is
injective and differentiable on a measurable set `s`, then the pushforward of the measure with
density `|(f' x).det|` on `s` is the Lebesgue measure on the image set. This version is expressed
@@ -1242,7 +1257,7 @@ in terms of the restricted function `s.restrict f`.
For a version for the original function, but with a measurability assumption,
see `map_with_density_abs_det_fderiv_eq_add_haar`.
-/
-theorem restrict_map_withDensity_abs_det_fderiv_eq_add_haar (hs : MeasurableSet s)
+theorem restrict_map_withDensity_abs_det_fderiv_eq_addHaar (hs : MeasurableSet s)
(hf' : ∀ x ∈ s, HasFDerivWithinAt f (f' x) s x) (hf : InjOn f s) :
Measure.map (s.restrict f) (comap coe (μ.withDensity fun x => ENNReal.ofReal (|(f' x).det|))) =
μ.restrict (f '' s) :=
@@ -1268,7 +1283,8 @@ theorem restrict_map_withDensity_abs_det_fderiv_eq_add_haar (hs : MeasurableSet
ext x
exact uf x.2
rwa [this] at A
-#align measure_theory.restrict_map_with_density_abs_det_fderiv_eq_add_haar MeasureTheory.restrict_map_withDensity_abs_det_fderiv_eq_add_haar
+#align measure_theory.restrict_map_with_density_abs_det_fderiv_eq_add_haar MeasureTheory.restrict_map_withDensity_abs_det_fderiv_eq_addHaar
+-/
/-! ### Change of variable formulas in integrals -/
@@ -1331,6 +1347,7 @@ theorem integral_image_eq_integral_abs_det_fderiv_smul [CompleteSpace F] (hs : M
rfl
#align measure_theory.integral_image_eq_integral_abs_det_fderiv_smul MeasureTheory.integral_image_eq_integral_abs_det_fderiv_smul
+#print MeasureTheory.det_one_smulRight /-
-- Porting note: move this to `topology.algebra.module.basic` when port is over
theorem det_one_smulRight {𝕜 : Type _} [NormedField 𝕜] (v : 𝕜) :
((1 : 𝕜 →L[𝕜] 𝕜).smul_right v).det = v :=
@@ -1344,7 +1361,9 @@ theorem det_one_smulRight {𝕜 : Type _} [NormedField 𝕜] (v : 𝕜) :
change ((1 : 𝕜 →L[𝕜] 𝕜) : 𝕜 →ₗ[𝕜] 𝕜) with LinearMap.id
rw [LinearMap.det_smul, FiniteDimensional.finrank_self, LinearMap.det_id, pow_one, mul_one]
#align measure_theory.det_one_smul_right MeasureTheory.det_one_smulRight
+-/
+#print MeasureTheory.integrableOn_image_iff_integrableOn_abs_deriv_smul /-
/-- Integrability in the change of variable formula for differentiable functions (one-variable
version): if a function `f` is injective and differentiable on a measurable set ``s ⊆ ℝ`, then a
function `g : ℝ → F` is integrable on `f '' s` if and only if `|(f' x)| • g ∘ f` is integrable on
@@ -1356,6 +1375,7 @@ theorem integrableOn_image_iff_integrableOn_abs_deriv_smul {s : Set ℝ} {f :
integrable_on_image_iff_integrable_on_abs_det_fderiv_smul volume hs
(fun x hx => (hf' x hx).HasFDerivWithinAt) hf g
#align measure_theory.integrable_on_image_iff_integrable_on_abs_deriv_smul MeasureTheory.integrableOn_image_iff_integrableOn_abs_deriv_smul
+-/
/-- Change of variable formula for differentiable functions (one-variable version): if a function
`f` is injective and differentiable on a measurable set `s ⊆ ℝ`, then the Bochner integral of a
mathlib commit https://github.com/leanprover-community/mathlib/commit/5f25c089cb34db4db112556f23c50d12da81b297
@@ -144,7 +144,7 @@ theorem exists_closed_cover_approximatesLinearOn_of_hasFDerivWithinAt [SecondCou
-- `M n z` is the set of points `x` such that `f y - f x` is close to `f' z (y - x)` for `y`
-- in the ball of radius `u n` around `x`.
let M : ℕ → T → Set E := fun n z =>
- { x | x ∈ s ∧ ∀ y ∈ s ∩ ball x (u n), ‖f y - f x - f' z (y - x)‖ ≤ r (f' z) * ‖y - x‖ }
+ {x | x ∈ s ∧ ∀ y ∈ s ∩ ball x (u n), ‖f y - f x - f' z (y - x)‖ ≤ r (f' z) * ‖y - x‖}
-- As `f` is differentiable everywhere on `s`, the sets `M n z` cover `s` by design.
have s_subset : ∀ x ∈ s, ∃ (n : ℕ) (z : T), x ∈ M n z :=
by
@@ -162,7 +162,7 @@ theorem exists_closed_cover_approximatesLinearOn_of_hasFDerivWithinAt [SecondCou
refine' ⟨r (f' z) - ‖f' x - f' z‖, _, le_of_eq (by abel)⟩
simpa only [sub_pos] using mem_ball_iff_norm.mp hz
obtain ⟨δ, δpos, hδ⟩ :
- ∃ (δ : ℝ) (H : 0 < δ), ball x δ ∩ s ⊆ { y | ‖f y - f x - (f' x) (y - x)‖ ≤ ε * ‖y - x‖ } :=
+ ∃ (δ : ℝ) (H : 0 < δ), ball x δ ∩ s ⊆ {y | ‖f y - f x - (f' x) (y - x)‖ ≤ ε * ‖y - x‖} :=
Metric.mem_nhdsWithin_iff.1 (is_o.def (hf' x xs) εpos)
obtain ⟨n, hn⟩ : ∃ n, u n < δ := ((tendsto_order.1 u_lim).2 _ δpos).exists
refine' ⟨n, ⟨z, zT⟩, ⟨xs, _⟩⟩
@@ -264,7 +264,7 @@ theorem exists_closed_cover_approximatesLinearOn_of_hasFDerivWithinAt [SecondCou
simp only [hq, subset_closure hnz, hp, mem_inter_iff, and_self_iff]
#align exists_closed_cover_approximates_linear_on_of_has_fderiv_within_at exists_closed_cover_approximatesLinearOn_of_hasFDerivWithinAt
-variable [MeasurableSpace E] [BorelSpace E] (μ : Measure E) [AddHaarMeasure μ]
+variable [MeasurableSpace E] [BorelSpace E] (μ : Measure E) [IsAddHaarMeasure μ]
/-- Assume that a function `f` has a derivative at every point of a set `s`. Then one may
partition `s` into countably many disjoint relatively measurable sets (i.e., intersections
@@ -326,7 +326,7 @@ theorem add_haar_image_le_mul_of_det_lt (A : E →L[ℝ] E) {m : ℝ≥0}
(𝓝 (μ (A '' closed_ball 0 1))) :=
by
apply L0.congr' _
- filter_upwards [self_mem_nhdsWithin]with r hr
+ filter_upwards [self_mem_nhdsWithin] with r hr
rw [← HC.add_closed_ball_zero (le_of_lt hr), add_comm]
have L2 :
tendsto (fun ε => μ (closed_ball 0 ε + A '' closed_ball 0 1)) (𝓝[>] 0)
@@ -386,7 +386,7 @@ theorem add_haar_image_le_mul_of_det_lt (A : E →L[ℝ] E) {m : ℝ≥0}
-- measure of `f '' s` is at most `m * (μ s + a)` for any positive `a`.
have J : ∀ᶠ a in 𝓝[>] (0 : ℝ≥0∞), μ (f '' s) ≤ m * (μ s + a) :=
by
- filter_upwards [self_mem_nhdsWithin]with a ha
+ filter_upwards [self_mem_nhdsWithin] with a ha
change 0 < a at ha
obtain ⟨t, r, t_count, ts, rpos, st, μt⟩ :
∃ (t : Set E) (r : E → ℝ),
@@ -536,7 +536,7 @@ theorem ApproximatesLinearOn.norm_fderiv_sub_le {A : E →L[ℝ] E} {δ : ℝ≥
eventually_nonempty_inter_smul_of_density_one μ s x hx _ measurableSet_closedBall
(measure_closed_ball_pos μ z εpos).ne'
obtain ⟨ρ, ρpos, hρ⟩ :
- ∃ ρ > 0, ball x ρ ∩ s ⊆ { y : E | ‖f y - f x - (f' x) (y - x)‖ ≤ ε * ‖y - x‖ } :=
+ ∃ ρ > 0, ball x ρ ∩ s ⊆ {y : E | ‖f y - f x - (f' x) (y - x)‖ ≤ ε * ‖y - x‖} :=
mem_nhds_within_iff.1 (is_o.def (hf' x xs) εpos)
-- for small enough `r`, the rescaled ball `r • closed_ball z ε` is included in the set where
-- `f y - f x` is well approximated by `f' x (y - x)`.
@@ -820,7 +820,7 @@ theorem aEMeasurable_fderiv_within (hs : MeasurableSet s)
filter_upwards [ae_restrict_mem (t_meas n)]
exact hg n
-- putting these two properties together gives the conclusion.
- filter_upwards [E₁, E₂]with x hx1 hx2
+ filter_upwards [E₁, E₂] with x hx1 hx2
rw [← nndist_eq_nnnorm] at hx1
rw [hx2, dist_comm]
exact hx1
@@ -1249,10 +1249,10 @@ theorem restrict_map_withDensity_abs_det_fderiv_eq_add_haar (hs : MeasurableSet
by
obtain ⟨u, u_meas, uf⟩ : ∃ u, Measurable u ∧ eq_on u f s := by
classical
- refine' ⟨piecewise s f 0, _, piecewise_eq_on _ _ _⟩
- refine' ContinuousOn.measurable_piecewise _ continuous_zero.continuous_on hs
- have : DifferentiableOn ℝ f s := fun x hx => (hf' x hx).DifferentiableWithinAt
- exact this.continuous_on
+ refine' ⟨piecewise s f 0, _, piecewise_eq_on _ _ _⟩
+ refine' ContinuousOn.measurable_piecewise _ continuous_zero.continuous_on hs
+ have : DifferentiableOn ℝ f s := fun x hx => (hf' x hx).DifferentiableWithinAt
+ exact this.continuous_on
have u' : ∀ x ∈ s, HasFDerivWithinAt u (f' x) s x := fun x hx =>
(hf' x hx).congr (fun y hy => uf hy) (uf hx)
set F : s → E := u ∘ coe with hF
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -92,8 +92,8 @@ Change of variables in integrals
-/
-open
- MeasureTheory MeasureTheory.Measure Metric Filter Set FiniteDimensional Asymptotics TopologicalSpace
+open MeasureTheory MeasureTheory.Measure Metric Filter Set FiniteDimensional Asymptotics
+ TopologicalSpace
open scoped NNReal ENNReal Topology Pointwise
@@ -113,7 +113,7 @@ with countably many closed sets `t n` on which `f` is well approximated by linea
theorem exists_closed_cover_approximatesLinearOn_of_hasFDerivWithinAt [SecondCountableTopology F]
(f : E → F) (s : Set E) (f' : E → E →L[ℝ] F) (hf' : ∀ x ∈ s, HasFDerivWithinAt f (f' x) s x)
(r : (E →L[ℝ] F) → ℝ≥0) (rpos : ∀ A, r A ≠ 0) :
- ∃ (t : ℕ → Set E)(A : ℕ → E →L[ℝ] F),
+ ∃ (t : ℕ → Set E) (A : ℕ → E →L[ℝ] F),
(∀ n, IsClosed (t n)) ∧
(s ⊆ ⋃ n, t n) ∧
(∀ n, ApproximatesLinearOn f (A n) (s ∩ t n) (r (A n))) ∧
@@ -146,7 +146,7 @@ theorem exists_closed_cover_approximatesLinearOn_of_hasFDerivWithinAt [SecondCou
let M : ℕ → T → Set E := fun n z =>
{ x | x ∈ s ∧ ∀ y ∈ s ∩ ball x (u n), ‖f y - f x - f' z (y - x)‖ ≤ r (f' z) * ‖y - x‖ }
-- As `f` is differentiable everywhere on `s`, the sets `M n z` cover `s` by design.
- have s_subset : ∀ x ∈ s, ∃ (n : ℕ)(z : T), x ∈ M n z :=
+ have s_subset : ∀ x ∈ s, ∃ (n : ℕ) (z : T), x ∈ M n z :=
by
intro x xs
obtain ⟨z, zT, hz⟩ : ∃ z ∈ T, f' x ∈ ball (f' (z : E)) (r (f' z)) :=
@@ -156,13 +156,13 @@ theorem exists_closed_cover_approximatesLinearOn_of_hasFDerivWithinAt [SecondCou
rw [hT]
refine' mem_Union.2 ⟨⟨x, xs⟩, _⟩
simpa only [mem_ball, Subtype.coe_mk, dist_self] using (rpos (f' x)).bot_lt
- rwa [mem_Union₂] at this
+ rwa [mem_Union₂] at this
obtain ⟨ε, εpos, hε⟩ : ∃ ε : ℝ, 0 < ε ∧ ‖f' x - f' z‖ + ε ≤ r (f' z) :=
by
refine' ⟨r (f' z) - ‖f' x - f' z‖, _, le_of_eq (by abel)⟩
simpa only [sub_pos] using mem_ball_iff_norm.mp hz
obtain ⟨δ, δpos, hδ⟩ :
- ∃ (δ : ℝ)(H : 0 < δ), ball x δ ∩ s ⊆ { y | ‖f y - f x - (f' x) (y - x)‖ ≤ ε * ‖y - x‖ } :=
+ ∃ (δ : ℝ) (H : 0 < δ), ball x δ ∩ s ⊆ { y | ‖f y - f x - (f' x) (y - x)‖ ≤ ε * ‖y - x‖ } :=
Metric.mem_nhdsWithin_iff.1 (is_o.def (hf' x xs) εpos)
obtain ⟨n, hn⟩ : ∃ n, u n < δ := ((tendsto_order.1 u_lim).2 _ δpos).exists
refine' ⟨n, ⟨z, zT⟩, ⟨xs, _⟩⟩
@@ -250,7 +250,7 @@ theorem exists_closed_cover_approximatesLinearOn_of_hasFDerivWithinAt [SecondCou
fun x xs => _, fun q => K_approx _ _ _, fun h's q => ⟨(F q).2.1, (F q).2.1.1.2, rfl⟩⟩
-- the only fact that needs further checking is that they cover `s`.
-- we already know that any point `x ∈ s` belongs to a set `M n z`.
- obtain ⟨n, z, hnz⟩ : ∃ (n : ℕ)(z : T), x ∈ M n z := s_subset x xs
+ obtain ⟨n, z, hnz⟩ : ∃ (n : ℕ) (z : T), x ∈ M n z := s_subset x xs
-- by density, it also belongs to a ball `closed_ball (d p) (u n / 3)`.
obtain ⟨p, hp⟩ : ∃ p : ℕ, x ∈ closed_ball (d p) (u n / 3) :=
by
@@ -272,7 +272,7 @@ of `s` with measurable sets `t n`) on which `f` is well approximated by linear m
theorem exists_partition_approximatesLinearOn_of_hasFDerivWithinAt [SecondCountableTopology F]
(f : E → F) (s : Set E) (f' : E → E →L[ℝ] F) (hf' : ∀ x ∈ s, HasFDerivWithinAt f (f' x) s x)
(r : (E →L[ℝ] F) → ℝ≥0) (rpos : ∀ A, r A ≠ 0) :
- ∃ (t : ℕ → Set E)(A : ℕ → E →L[ℝ] F),
+ ∃ (t : ℕ → Set E) (A : ℕ → E →L[ℝ] F),
Pairwise (Disjoint on t) ∧
(∀ n, MeasurableSet (t n)) ∧
(s ⊆ ⋃ n, t n) ∧
@@ -371,7 +371,7 @@ theorem add_haar_image_le_mul_of_det_lt (A : E →L[ℝ] E) {m : ℝ≥0}
rw [smul_add, ← add_assoc, add_comm {f x}, add_assoc, smul_closedBall _ _ εpos.le, smul_zero,
singleton_add_closedBall_zero, ← image_smul_set ℝ E E A, smul_closedBall _ _ zero_le_one,
smul_zero, Real.norm_eq_abs, abs_of_nonneg r0, mul_one, mul_comm]
- rw [this] at K
+ rw [this] at K
calc
μ (f '' (s ∩ closed_ball x r)) ≤ μ ({f x} + r • (A '' closed_ball 0 1 + closed_ball 0 ε)) :=
measure_mono K
@@ -387,9 +387,9 @@ theorem add_haar_image_le_mul_of_det_lt (A : E →L[ℝ] E) {m : ℝ≥0}
have J : ∀ᶠ a in 𝓝[>] (0 : ℝ≥0∞), μ (f '' s) ≤ m * (μ s + a) :=
by
filter_upwards [self_mem_nhdsWithin]with a ha
- change 0 < a at ha
+ change 0 < a at ha
obtain ⟨t, r, t_count, ts, rpos, st, μt⟩ :
- ∃ (t : Set E)(r : E → ℝ),
+ ∃ (t : Set E) (r : E → ℝ),
t.Countable ∧
t ⊆ s ∧
(∀ x : E, x ∈ t → 0 < r x) ∧
@@ -401,7 +401,7 @@ theorem add_haar_image_le_mul_of_det_lt (A : E →L[ℝ] E) {m : ℝ≥0}
calc
μ (f '' s) ≤ μ (⋃ x : t, f '' (s ∩ closed_ball x (r x))) :=
by
- rw [bUnion_eq_Union] at st
+ rw [bUnion_eq_Union] at st
apply measure_mono
rw [← image_Union, ← inter_Union]
exact image_subset _ (subset_inter (subset.refl _) st)
@@ -416,7 +416,7 @@ theorem add_haar_image_le_mul_of_det_lt (A : E →L[ℝ] E) {m : ℝ≥0}
apply tendsto.mono_left _ nhdsWithin_le_nhds
apply ENNReal.Tendsto.const_mul (tendsto_const_nhds.add tendsto_id)
simp only [ENNReal.coe_ne_top, Ne.def, or_true_iff, not_false_iff]
- rw [add_zero] at L
+ rw [add_zero] at L
exact ge_of_tendsto L J
#align measure_theory.add_haar_image_le_mul_of_det_lt MeasureTheory.add_haar_image_le_mul_of_det_lt
@@ -444,7 +444,7 @@ theorem mul_le_add_haar_image_of_lt_det (A : E →L[ℝ] E) {m : ℝ≥0}
have I : ENNReal.ofReal (|(B.symm : E →L[ℝ] E).det|) < (m⁻¹ : ℝ≥0) :=
by
simp only [ENNReal.ofReal, abs_inv, Real.toNNReal_inv, ContinuousLinearEquiv.det_coe_symm,
- ContinuousLinearMap.coe_toContinuousLinearEquivOfDetNeZero, ENNReal.coe_lt_coe] at hm⊢
+ ContinuousLinearMap.coe_toContinuousLinearEquivOfDetNeZero, ENNReal.coe_lt_coe] at hm ⊢
exact NNReal.inv_lt_inv mpos.ne' hm
-- therefore, we may apply `add_haar_image_le_mul_of_det_lt` to `B.symm` and `m⁻¹`.
obtain ⟨δ₀, δ₀pos, hδ₀⟩ :
@@ -480,7 +480,7 @@ theorem mul_le_add_haar_image_of_lt_det (A : E →L[ℝ] E) {m : ℝ≥0}
refine' tendsto.mul (tendsto_const_nhds.mul _) tendsto_id
refine' (tendsto.sub tendsto_const_nhds tendsto_id).inv₀ _
simpa only [tsub_zero, inv_eq_zero, Ne.def] using H
- simp only [MulZeroClass.mul_zero] at this
+ simp only [MulZeroClass.mul_zero] at this
exact (tendsto_order.1 this).2 δ₀ δ₀pos
-- let `δ` be small enough, and `f` approximated by `B` up to `δ`.
filter_upwards [L1, L2]
@@ -524,7 +524,7 @@ theorem ApproximatesLinearOn.norm_fderiv_sub_le {A : E →L[ℝ] E} {δ : ℝ≥
tendsto (fun ε : ℝ => ((δ : ℝ) + ε) * (‖z‖ + ε) + ‖f' x - A‖ * ε) (𝓝[>] 0)
(𝓝 ((δ + 0) * (‖z‖ + 0) + ‖f' x - A‖ * 0)) :=
tendsto.mono_left (Continuous.tendsto (by continuity) 0) nhdsWithin_le_nhds
- simp only [add_zero, MulZeroClass.mul_zero] at this
+ simp only [add_zero, MulZeroClass.mul_zero] at this
apply le_of_tendsto_of_tendsto tendsto_const_nhds this
filter_upwards [self_mem_nhdsWithin]
exact H
@@ -551,7 +551,7 @@ theorem ApproximatesLinearOn.norm_fderiv_sub_le {A : E →L[ℝ] E} {δ : ℝ≥
-- write `y = x + r a` with `a ∈ closed_ball z ε`.
obtain ⟨a, az, ya⟩ : ∃ a, a ∈ closed_ball z ε ∧ y = x + r • a :=
by
- simp only [mem_smul_set, image_add_left, mem_preimage, singleton_add] at hy
+ simp only [mem_smul_set, image_add_left, mem_preimage, singleton_add] at hy
rcases hy with ⟨a, az, ha⟩
exact ⟨a, az, by simp only [ha, add_neg_cancel_left]⟩
have norm_a : ‖a‖ ≤ ‖z‖ + ε :=
@@ -592,7 +592,7 @@ theorem ApproximatesLinearOn.norm_fderiv_sub_le {A : E →L[ℝ] E} {δ : ℝ≥
_ ≤ (δ + ε) * (‖z‖ + ε) + ‖f' x - A‖ * ‖z - a‖ :=
by
apply add_le_add
- · rw [mul_assoc] at I; exact (mul_le_mul_left rpos).1 I
+ · rw [mul_assoc] at I ; exact (mul_le_mul_left rpos).1 I
· apply ContinuousLinearMap.le_op_norm
_ ≤ (δ + ε) * (‖z‖ + ε) + ‖f' x - A‖ * ε :=
add_le_add le_rfl
@@ -630,7 +630,7 @@ theorem add_haar_image_eq_zero_of_differentiableOn_of_add_haar_eq_zero (hf : Dif
exact ⟨δ, h', fun t ht => h t f ht⟩
choose δ hδ using this
obtain ⟨t, A, t_disj, t_meas, t_cover, ht, -⟩ :
- ∃ (t : ℕ → Set E)(A : ℕ → E →L[ℝ] E),
+ ∃ (t : ℕ → Set E) (A : ℕ → E →L[ℝ] E),
Pairwise (Disjoint on t) ∧
(∀ n : ℕ, MeasurableSet (t n)) ∧
(s ⊆ ⋃ n : ℕ, t n) ∧
@@ -681,7 +681,7 @@ theorem add_haar_image_eq_zero_of_det_fderiv_within_eq_zero_aux
exact ⟨δ, h', fun t ht => h t f ht⟩
choose δ hδ using this
obtain ⟨t, A, t_disj, t_meas, t_cover, ht, Af'⟩ :
- ∃ (t : ℕ → Set E)(A : ℕ → E →L[ℝ] E),
+ ∃ (t : ℕ → Set E) (A : ℕ → E →L[ℝ] E),
Pairwise (Disjoint on t) ∧
(∀ n : ℕ, MeasurableSet (t n)) ∧
(s ⊆ ⋃ n : ℕ, t n) ∧
@@ -747,7 +747,7 @@ theorem add_haar_image_eq_zero_of_det_fderiv_within_eq_zero
(𝓝 (((0 : ℝ≥0) : ℝ≥0∞) * μ (closed_ball 0 R))) :=
ENNReal.Tendsto.mul_const (ENNReal.tendsto_coe.2 tendsto_id)
(Or.inr measure_closed_ball_lt_top.Ne)
- simp only [MulZeroClass.zero_mul, ENNReal.coe_zero] at this
+ simp only [MulZeroClass.zero_mul, ENNReal.coe_zero] at this
exact tendsto.mono_left this nhdsWithin_le_nhds
apply le_antisymm _ (zero_le _)
apply ge_of_tendsto B
@@ -782,7 +782,7 @@ theorem aEMeasurable_fderiv_within (hs : MeasurableSet s)
have δpos : 0 < δ := εpos
-- partition `s` into sets `s ∩ t n` on which `f` is approximated by linear maps `A n`.
obtain ⟨t, A, t_disj, t_meas, t_cover, ht, Af'⟩ :
- ∃ (t : ℕ → Set E)(A : ℕ → E →L[ℝ] E),
+ ∃ (t : ℕ → Set E) (A : ℕ → E →L[ℝ] E),
Pairwise (Disjoint on t) ∧
(∀ n : ℕ, MeasurableSet (t n)) ∧
(s ⊆ ⋃ n : ℕ, t n) ∧
@@ -821,7 +821,7 @@ theorem aEMeasurable_fderiv_within (hs : MeasurableSet s)
exact hg n
-- putting these two properties together gives the conclusion.
filter_upwards [E₁, E₂]with x hx1 hx2
- rw [← nndist_eq_nnnorm] at hx1
+ rw [← nndist_eq_nnnorm] at hx1
rw [hx2, dist_comm]
exact hx1
#align measure_theory.ae_measurable_fderiv_within MeasureTheory.aEMeasurable_fderiv_within
@@ -892,7 +892,7 @@ theorem add_haar_image_le_lintegral_abs_det_fderiv_aux1 (hs : MeasurableSet s)
have I : ENNReal.ofReal (|A.det|) < m := by
simp only [ENNReal.ofReal, m, lt_add_iff_pos_right, εpos, ENNReal.coe_lt_coe]
rcases((add_haar_image_le_mul_of_det_lt μ A I).And self_mem_nhdsWithin).exists with ⟨δ, h, δpos⟩
- obtain ⟨δ', δ'pos, hδ'⟩ : ∃ (δ' : ℝ)(H : 0 < δ'), ∀ B, dist B A < δ' → dist B.det A.det < ↑ε :=
+ obtain ⟨δ', δ'pos, hδ'⟩ : ∃ (δ' : ℝ) (H : 0 < δ'), ∀ B, dist B A < δ' → dist B.det A.det < ↑ε :=
continuous_at_iff.1 continuous_linear_map.continuous_det.continuous_at ε εpos
let δ'' : ℝ≥0 := ⟨δ' / 2, (half_pos δ'pos).le⟩
refine' ⟨min δ δ'', lt_min δpos (half_pos δ'pos), _, _⟩
@@ -909,7 +909,7 @@ theorem add_haar_image_le_lintegral_abs_det_fderiv_aux1 (hs : MeasurableSet s)
exact h t g (htg.mono_num (min_le_left _ _))
choose δ hδ using this
obtain ⟨t, A, t_disj, t_meas, t_cover, ht, -⟩ :
- ∃ (t : ℕ → Set E)(A : ℕ → E →L[ℝ] E),
+ ∃ (t : ℕ → Set E) (A : ℕ → E →L[ℝ] E),
Pairwise (Disjoint on t) ∧
(∀ n : ℕ, MeasurableSet (t n)) ∧
(s ⊆ ⋃ n : ℕ, t n) ∧
@@ -979,7 +979,7 @@ theorem add_haar_image_le_lintegral_abs_det_fderiv_aux2 (hs : MeasurableSet s) (
refine' tendsto_const_nhds.add _
refine' ENNReal.Tendsto.mul_const _ (Or.inr h's)
exact ENNReal.Tendsto.const_mul (ENNReal.tendsto_coe.2 tendsto_id) (Or.inr ENNReal.coe_ne_top)
- simp only [add_zero, MulZeroClass.zero_mul, MulZeroClass.mul_zero, ENNReal.coe_zero] at this
+ simp only [add_zero, MulZeroClass.zero_mul, MulZeroClass.mul_zero, ENNReal.coe_zero] at this
apply ge_of_tendsto this
filter_upwards [self_mem_nhdsWithin]
rintro ε (εpos : 0 < ε)
@@ -1038,7 +1038,7 @@ theorem lintegral_abs_det_fderiv_le_add_haar_image_aux1 (hs : MeasurableSet s)
ENNReal.ofReal (|A.det|) * μ t ≤ μ (g '' t) + ε * μ t :=
by
intro A
- obtain ⟨δ', δ'pos, hδ'⟩ : ∃ (δ' : ℝ)(H : 0 < δ'), ∀ B, dist B A < δ' → dist B.det A.det < ↑ε :=
+ obtain ⟨δ', δ'pos, hδ'⟩ : ∃ (δ' : ℝ) (H : 0 < δ'), ∀ B, dist B A < δ' → dist B.det A.det < ↑ε :=
continuous_at_iff.1 continuous_linear_map.continuous_det.continuous_at ε εpos
let δ'' : ℝ≥0 := ⟨δ' / 2, (half_pos δ'pos).le⟩
have I'' : ∀ B : E →L[ℝ] E, ‖B - A‖ ≤ ↑δ'' → |B.det - A.det| ≤ ↑ε :=
@@ -1070,11 +1070,11 @@ theorem lintegral_abs_det_fderiv_le_add_haar_image_aux1 (hs : MeasurableSet s)
simp only [ht, εpos.ne', WithTop.mul_top, ENNReal.coe_eq_zero, le_top, Ne.def,
not_false_iff, _root_.add_top]
have := h t g (htg.mono_num (min_le_left _ _))
- rwa [WithTop.coe_sub, ENNReal.sub_mul, tsub_le_iff_right] at this
+ rwa [WithTop.coe_sub, ENNReal.sub_mul, tsub_le_iff_right] at this
simp only [ht, imp_true_iff, Ne.def, not_false_iff]
choose δ hδ using this
obtain ⟨t, A, t_disj, t_meas, t_cover, ht, -⟩ :
- ∃ (t : ℕ → Set E)(A : ℕ → E →L[ℝ] E),
+ ∃ (t : ℕ → Set E) (A : ℕ → E →L[ℝ] E),
Pairwise (Disjoint on t) ∧
(∀ n : ℕ, MeasurableSet (t n)) ∧
(s ⊆ ⋃ n : ℕ, t n) ∧
@@ -1151,7 +1151,7 @@ theorem lintegral_abs_det_fderiv_le_add_haar_image_aux2 (hs : MeasurableSet s) (
refine' tendsto_const_nhds.add _
refine' ENNReal.Tendsto.mul_const _ (Or.inr h's)
exact ENNReal.Tendsto.const_mul (ENNReal.tendsto_coe.2 tendsto_id) (Or.inr ENNReal.coe_ne_top)
- simp only [add_zero, MulZeroClass.zero_mul, MulZeroClass.mul_zero, ENNReal.coe_zero] at this
+ simp only [add_zero, MulZeroClass.zero_mul, MulZeroClass.mul_zero, ENNReal.coe_zero] at this
apply ge_of_tendsto this
filter_upwards [self_mem_nhdsWithin]
rintro ε (εpos : 0 < ε)
@@ -1263,11 +1263,11 @@ theorem restrict_map_withDensity_abs_det_fderiv_eq_add_haar (hs : MeasurableSet
rw [hF, ← measure.map_map u_meas measurable_subtype_coe, map_comap_subtype_coe hs,
restrict_with_density hs]
exact map_with_density_abs_det_fderiv_eq_add_haar μ hs u' (hf.congr uf.symm) u_meas
- rw [uf.image_eq] at A
+ rw [uf.image_eq] at A
have : F = s.restrict f := by
ext x
exact uf x.2
- rwa [this] at A
+ rwa [this] at A
#align measure_theory.restrict_map_with_density_abs_det_fderiv_eq_add_haar MeasureTheory.restrict_map_withDensity_abs_det_fderiv_eq_add_haar
/-! ### Change of variable formulas in integrals -/
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -264,7 +264,7 @@ theorem exists_closed_cover_approximatesLinearOn_of_hasFDerivWithinAt [SecondCou
simp only [hq, subset_closure hnz, hp, mem_inter_iff, and_self_iff]
#align exists_closed_cover_approximates_linear_on_of_has_fderiv_within_at exists_closed_cover_approximatesLinearOn_of_hasFDerivWithinAt
-variable [MeasurableSpace E] [BorelSpace E] (μ : Measure E) [IsAddHaarMeasure μ]
+variable [MeasurableSpace E] [BorelSpace E] (μ : Measure E) [AddHaarMeasure μ]
/-- Assume that a function `f` has a derivative at every point of a set `s`. Then one may
partition `s` into countably many disjoint relatively measurable sets (i.e., intersections
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -95,7 +95,7 @@ Change of variables in integrals
open
MeasureTheory MeasureTheory.Measure Metric Filter Set FiniteDimensional Asymptotics TopologicalSpace
-open NNReal ENNReal Topology Pointwise
+open scoped NNReal ENNReal Topology Pointwise
variable {E F : Type _} [NormedAddCommGroup E] [NormedSpace ℝ E] [FiniteDimensional ℝ E]
[NormedAddCommGroup F] [NormedSpace ℝ F] {s : Set E} {f : E → E} {f' : E → E →L[ℝ] E}
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -254,10 +254,7 @@ theorem exists_closed_cover_approximatesLinearOn_of_hasFDerivWithinAt [SecondCou
-- by density, it also belongs to a ball `closed_ball (d p) (u n / 3)`.
obtain ⟨p, hp⟩ : ∃ p : ℕ, x ∈ closed_ball (d p) (u n / 3) :=
by
- have : Set.Nonempty (ball x (u n / 3)) :=
- by
- simp only [nonempty_ball]
- linarith [u_pos n]
+ have : Set.Nonempty (ball x (u n / 3)) := by simp only [nonempty_ball]; linarith [u_pos n]
obtain ⟨p, hp⟩ : ∃ p : ℕ, d p ∈ ball x (u n / 3) := hd.exists_mem_open is_open_ball this
exact ⟨p, (mem_ball'.1 hp).le⟩
-- choose `q` for which `t q = K n z p`.
@@ -287,10 +284,8 @@ theorem exists_partition_approximatesLinearOn_of_hasFDerivWithinAt [SecondCounta
refine'
⟨disjointed t, A, disjoint_disjointed _,
MeasurableSet.disjointed fun n => (t_closed n).MeasurableSet, _, _, ht⟩
- · rw [iUnion_disjointed]
- exact st
- · intro n
- exact (t_approx n).mono_set (inter_subset_inter_right _ (disjointed_subset _ _))
+ · rw [iUnion_disjointed]; exact st
+ · intro n; exact (t_approx n).mono_set (inter_subset_inter_right _ (disjointed_subset _ _))
#align exists_partition_approximates_linear_on_of_has_fderiv_within_at exists_partition_approximatesLinearOn_of_hasFDerivWithinAt
namespace MeasureTheory
@@ -347,10 +342,7 @@ theorem add_haar_image_le_mul_of_det_lt (A : E →L[ℝ] E) {m : ℝ≥0}
∀ᶠ b : ℝ in 𝓝[>] 0, μ (closed_ball 0 b + A '' closed_ball 0 1) < m * μ (closed_ball 0 1) :=
(tendsto_order.1 L2).2 _ I
exact (H.and self_mem_nhdsWithin).exists
- have : Iio (⟨ε, εpos.le⟩ : ℝ≥0) ∈ 𝓝 (0 : ℝ≥0) :=
- by
- apply Iio_mem_nhds
- exact εpos
+ have : Iio (⟨ε, εpos.le⟩ : ℝ≥0) ∈ 𝓝 (0 : ℝ≥0) := by apply Iio_mem_nhds; exact εpos
filter_upwards [this]
-- fix a function `f` which is close enough to `A`.
intro δ hδ s f hf
@@ -386,14 +378,9 @@ theorem add_haar_image_le_mul_of_det_lt (A : E →L[ℝ] E) {m : ℝ≥0}
_ = ENNReal.ofReal (r ^ finrank ℝ E) * μ (A '' closed_ball 0 1 + closed_ball 0 ε) := by
simp only [abs_of_nonneg r0, add_haar_smul, image_add_left, abs_pow, singleton_add,
measure_preimage_add]
- _ ≤ ENNReal.ofReal (r ^ finrank ℝ E) * (m * μ (closed_ball 0 1)) :=
- by
- rw [add_comm]
+ _ ≤ ENNReal.ofReal (r ^ finrank ℝ E) * (m * μ (closed_ball 0 1)) := by rw [add_comm];
exact mul_le_mul_left' hε.le _
- _ = m * μ (closed_ball x r) :=
- by
- simp only [add_haar_closed_ball' _ _ r0]
- ring
+ _ = m * μ (closed_ball x r) := by simp only [add_haar_closed_ball' _ _ r0]; ring
-- covering `s` by closed balls with total measure very close to `μ s`, one deduces that the
-- measure of `f '' s` is at most `m * (μ s + a)` for any positive `a`.
@@ -421,9 +408,7 @@ theorem add_haar_image_le_mul_of_det_lt (A : E →L[ℝ] E) {m : ℝ≥0}
_ ≤ ∑' x : t, μ (f '' (s ∩ closed_ball x (r x))) := (measure_Union_le _)
_ ≤ ∑' x : t, m * μ (closed_ball x (r x)) :=
(ENNReal.tsum_le_tsum fun x => I x (r x) (ts x.2) (rpos x x.2).le)
- _ ≤ m * (μ s + a) := by
- rw [ENNReal.tsum_mul_left]
- exact mul_le_mul_left' μt _
+ _ ≤ m * (μ s + a) := by rw [ENNReal.tsum_mul_left]; exact mul_le_mul_left' μt _
-- taking the limit in `a`, one obtains the conclusion
have L : tendsto (fun a => (m : ℝ≥0∞) * (μ s + a)) (𝓝[>] 0) (𝓝 (m * (μ s + 0))) :=
@@ -451,8 +436,7 @@ theorem mul_le_add_haar_image_of_lt_det (A : E →L[ℝ] E) {m : ℝ≥0}
rcases eq_or_lt_of_le (zero_le m) with (rfl | mpos)
· apply eventually_of_forall
simp only [forall_const, MulZeroClass.zero_mul, imp_true_iff, zero_le, ENNReal.coe_zero]
- have hA : A.det ≠ 0 := by
- intro h
+ have hA : A.det ≠ 0 := by intro h;
simpa only [h, ENNReal.not_lt_zero, ENNReal.ofReal_zero, abs_zero] using hm
-- let `B` be the continuous linear equiv version of `A`.
let B := A.to_continuous_linear_equiv_of_det_ne_zero hA
@@ -501,9 +485,7 @@ theorem mul_le_add_haar_image_of_lt_det (A : E →L[ℝ] E) {m : ℝ≥0}
-- let `δ` be small enough, and `f` approximated by `B` up to `δ`.
filter_upwards [L1, L2]
intro δ h1δ h2δ s f hf
- have hf' : ApproximatesLinearOn f (B : E →L[ℝ] E) s δ :=
- by
- convert hf
+ have hf' : ApproximatesLinearOn f (B : E →L[ℝ] E) s δ := by convert hf;
exact A.coe_to_continuous_linear_equiv_of_det_ne_zero _
let F := hf'.to_local_equiv h1δ
-- the condition to be checked can be reformulated in terms of the inverse maps
@@ -598,7 +580,7 @@ theorem ApproximatesLinearOn.norm_fderiv_sub_le {A : E →L[ℝ] E} {δ : ℝ≥
_ ≤ r * (δ + ε) * (‖z‖ + ε) :=
mul_le_mul_of_nonneg_left norm_a (mul_nonneg rpos.le (add_nonneg δ.2 εpos.le))
- show ‖(f' x - A) z‖ ≤ (δ + ε) * (‖z‖ + ε) + ‖f' x - A‖ * ε
+ show ‖(f' x - A) z‖ ≤ (δ + ε) * (‖z‖ + ε) + ‖f' x - A‖ * ε;
exact
calc
‖(f' x - A) z‖ = ‖(f' x - A) a + (f' x - A) (z - a)‖ :=
@@ -610,8 +592,7 @@ theorem ApproximatesLinearOn.norm_fderiv_sub_le {A : E →L[ℝ] E} {δ : ℝ≥
_ ≤ (δ + ε) * (‖z‖ + ε) + ‖f' x - A‖ * ‖z - a‖ :=
by
apply add_le_add
- · rw [mul_assoc] at I
- exact (mul_le_mul_left rpos).1 I
+ · rw [mul_assoc] at I; exact (mul_le_mul_left rpos).1 I
· apply ContinuousLinearMap.le_op_norm
_ ≤ (δ + ε) * (‖z‖ + ε) + ‖f' x - A‖ * ε :=
add_le_add le_rfl
@@ -684,8 +665,7 @@ theorem add_haar_image_eq_zero_of_det_fderiv_within_eq_zero_aux
(hf' : ∀ x ∈ s, HasFDerivWithinAt f (f' x) s x) (R : ℝ) (hs : s ⊆ closedBall 0 R) (ε : ℝ≥0)
(εpos : 0 < ε) (h'f' : ∀ x ∈ s, (f' x).det = 0) : μ (f '' s) ≤ ε * μ (closedBall 0 R) :=
by
- rcases eq_empty_or_nonempty s with (rfl | h's)
- · simp only [measure_empty, zero_le, image_empty]
+ rcases eq_empty_or_nonempty s with (rfl | h's); · simp only [measure_empty, zero_le, image_empty]
have :
∀ A : E →L[ℝ] E,
∃ δ : ℝ≥0,
@@ -750,10 +730,8 @@ theorem add_haar_image_eq_zero_of_det_fderiv_within_eq_zero
· apply le_antisymm _ (zero_le _)
rw [← Union_inter_closed_ball_nat s 0]
calc
- μ (f '' ⋃ n : ℕ, s ∩ closed_ball 0 n) ≤ ∑' n : ℕ, μ (f '' (s ∩ closed_ball 0 n)) :=
- by
- rw [image_Union]
- exact measure_Union_le _
+ μ (f '' ⋃ n : ℕ, s ∩ closed_ball 0 n) ≤ ∑' n : ℕ, μ (f '' (s ∩ closed_ball 0 n)) := by
+ rw [image_Union]; exact measure_Union_le _
_ ≤ 0 := by simp only [H, tsum_zero, nonpos_iff_eq_zero]
intro R
@@ -961,10 +939,7 @@ theorem add_haar_image_le_lintegral_abs_det_fderiv_aux1 (hs : MeasurableSet s)
intro x hx
have I : |(A n).det| ≤ |(f' x).det| + ε :=
calc
- |(A n).det| = |(f' x).det - ((f' x).det - (A n).det)| :=
- by
- congr 1
- abel
+ |(A n).det| = |(f' x).det - ((f' x).det - (A n).det)| := by congr 1; abel
_ ≤ |(f' x).det| + |(f' x).det - (A n).det| := (abs_sub _ _)
_ ≤ |(f' x).det| + ε := add_le_add le_rfl ((hδ (A n)).2.1 _ hx)
@@ -1042,8 +1017,7 @@ theorem add_haar_image_le_lintegral_abs_det_fderiv (hs : MeasurableSet s)
by
conv_rhs => rw [A]
rw [lintegral_Union]
- · intro n
- exact hs.inter (u_meas n)
+ · intro n; exact hs.inter (u_meas n)
· exact pairwise_disjoint_mono (disjoint_disjointed _) fun n => inter_subset_right _ _
#align measure_theory.add_haar_image_le_lintegral_abs_det_fderiv MeasureTheory.add_haar_image_le_lintegral_abs_det_fderiv
@@ -1127,10 +1101,7 @@ theorem lintegral_abs_det_fderiv_le_add_haar_image_aux1 (hs : MeasurableSet s)
intro x hx
have I : |(f' x).det| ≤ |(A n).det| + ε :=
calc
- |(f' x).det| = |(A n).det + ((f' x).det - (A n).det)| :=
- by
- congr 1
- abel
+ |(f' x).det| = |(A n).det + ((f' x).det - (A n).det)| := by congr 1; abel
_ ≤ |(A n).det| + |(f' x).det - (A n).det| := (abs_add _ _)
_ ≤ |(A n).det| + ε := add_le_add le_rfl ((hδ (A n)).2.1 _ hx)
@@ -1206,8 +1177,7 @@ theorem lintegral_abs_det_fderiv_le_add_haar_image (hs : MeasurableSet s)
by
conv_lhs => rw [A]
rw [lintegral_Union]
- · intro n
- exact hs.inter (u_meas n)
+ · intro n; exact hs.inter (u_meas n)
· exact pairwise_disjoint_mono (disjoint_disjointed _) fun n => inter_subset_right _ _
_ ≤ ∑' n, μ (f '' (s ∩ u n)) :=
by
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Sébastien Gouëzel
! This file was ported from Lean 3 source module measure_theory.function.jacobian
-! leanprover-community/mathlib commit fd5edc43dc4f10b85abfe544b88f82cf13c5f844
+! leanprover-community/mathlib commit b84aee748341da06a6d78491367e2c0e9f15e8a5
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -1361,26 +1361,41 @@ theorem integral_image_eq_integral_abs_det_fderiv_smul [CompleteSpace F] (hs : M
rfl
#align measure_theory.integral_image_eq_integral_abs_det_fderiv_smul MeasureTheory.integral_image_eq_integral_abs_det_fderiv_smul
+-- Porting note: move this to `topology.algebra.module.basic` when port is over
+theorem det_one_smulRight {𝕜 : Type _} [NormedField 𝕜] (v : 𝕜) :
+ ((1 : 𝕜 →L[𝕜] 𝕜).smul_right v).det = v :=
+ by
+ have : (1 : 𝕜 →L[𝕜] 𝕜).smul_right v = v • (1 : 𝕜 →L[𝕜] 𝕜) :=
+ by
+ ext1 w
+ simp only [ContinuousLinearMap.smulRight_apply, ContinuousLinearMap.one_apply,
+ Algebra.id.smul_eq_mul, one_mul, ContinuousLinearMap.coe_smul', Pi.smul_apply, mul_one]
+ rw [this, ContinuousLinearMap.det, ContinuousLinearMap.coe_smul]
+ change ((1 : 𝕜 →L[𝕜] 𝕜) : 𝕜 →ₗ[𝕜] 𝕜) with LinearMap.id
+ rw [LinearMap.det_smul, FiniteDimensional.finrank_self, LinearMap.det_id, pow_one, mul_one]
+#align measure_theory.det_one_smul_right MeasureTheory.det_one_smulRight
+
+/-- Integrability in the change of variable formula for differentiable functions (one-variable
+version): if a function `f` is injective and differentiable on a measurable set ``s ⊆ ℝ`, then a
+function `g : ℝ → F` is integrable on `f '' s` if and only if `|(f' x)| • g ∘ f` is integrable on
+`s`. -/
+theorem integrableOn_image_iff_integrableOn_abs_deriv_smul {s : Set ℝ} {f : ℝ → ℝ} {f' : ℝ → ℝ}
+ (hs : MeasurableSet s) (hf' : ∀ x ∈ s, HasDerivWithinAt f (f' x) s x) (hf : InjOn f s)
+ (g : ℝ → F) : IntegrableOn g (f '' s) ↔ IntegrableOn (fun x => |f' x| • g (f x)) s := by
+ simpa only [det_one_smul_right] using
+ integrable_on_image_iff_integrable_on_abs_det_fderiv_smul volume hs
+ (fun x hx => (hf' x hx).HasFDerivWithinAt) hf g
+#align measure_theory.integrable_on_image_iff_integrable_on_abs_deriv_smul MeasureTheory.integrableOn_image_iff_integrableOn_abs_deriv_smul
+
/-- Change of variable formula for differentiable functions (one-variable version): if a function
`f` is injective and differentiable on a measurable set `s ⊆ ℝ`, then the Bochner integral of a
-function `g : ℝ → F` on `f '' s` coincides with the integral of `|(f' x).det| • g ∘ f` on `s`. -/
+function `g : ℝ → F` on `f '' s` coincides with the integral of `|(f' x)| • g ∘ f` on `s`. -/
theorem integral_image_eq_integral_abs_deriv_smul {s : Set ℝ} {f : ℝ → ℝ} {f' : ℝ → ℝ}
[CompleteSpace F] (hs : MeasurableSet s) (hf' : ∀ x ∈ s, HasDerivWithinAt f (f' x) s x)
- (hf : InjOn f s) (g : ℝ → F) : (∫ x in f '' s, g x) = ∫ x in s, |f' x| • g (f x) :=
- by
- convert integral_image_eq_integral_abs_det_fderiv_smul volume hs
+ (hf : InjOn f s) (g : ℝ → F) : (∫ x in f '' s, g x) = ∫ x in s, |f' x| • g (f x) := by
+ simpa only [det_one_smul_right] using
+ integral_image_eq_integral_abs_det_fderiv_smul volume hs
(fun x hx => (hf' x hx).HasFDerivWithinAt) hf g
- ext1 x
- rw [(by
- ext
- simp : (1 : ℝ →L[ℝ] ℝ).smul_right (f' x) = f' x • (1 : ℝ →L[ℝ] ℝ))]
- rw [ContinuousLinearMap.det, ContinuousLinearMap.coe_smul]
- have : ((1 : ℝ →L[ℝ] ℝ) : ℝ →ₗ[ℝ] ℝ) = (1 : ℝ →ₗ[ℝ] ℝ) := by rfl
- rw [this, LinearMap.det_smul, FiniteDimensional.finrank_self]
- suffices (1 : ℝ →ₗ[ℝ] ℝ).det = 1 by
- rw [this]
- simp
- exact LinearMap.det_id
#align measure_theory.integral_image_eq_integral_abs_deriv_smul MeasureTheory.integral_image_eq_integral_abs_deriv_smul
theorem integral_target_eq_integral_abs_det_fderiv_smul [CompleteSpace F] {f : LocalHomeomorph E E}
mathlib commit https://github.com/leanprover-community/mathlib/commit/75e7fca56381d056096ce5d05e938f63a6567828
@@ -799,7 +799,7 @@ theorem aEMeasurable_fderiv_within (hs : MeasurableSet s)
`approximates_linear_on.norm_fderiv_sub_le` that `f'` is uniformly approximated by `A n`, which
gives the conclusion. -/
-- fix a precision `ε`
- refine' aEMeasurable_of_unif_approx fun ε εpos => _
+ refine' aemeasurable_of_unif_approx fun ε εpos => _
let δ : ℝ≥0 := ⟨ε, le_of_lt εpos⟩
have δpos : 0 < δ := εpos
-- partition `s` into sets `s ∩ t n` on which `f` is approximated by linear maps `A n`.
mathlib commit https://github.com/leanprover-community/mathlib/commit/33c67ae661dd8988516ff7f247b0be3018cdd952
@@ -110,8 +110,8 @@ measurable pieces, by linear maps (with a prescribed precision depending on the
/-- Assume that a function `f` has a derivative at every point of a set `s`. Then one may cover `s`
with countably many closed sets `t n` on which `f` is well approximated by linear maps `A n`. -/
-theorem exists_closed_cover_approximatesLinearOn_of_hasFderivWithinAt [SecondCountableTopology F]
- (f : E → F) (s : Set E) (f' : E → E →L[ℝ] F) (hf' : ∀ x ∈ s, HasFderivWithinAt f (f' x) s x)
+theorem exists_closed_cover_approximatesLinearOn_of_hasFDerivWithinAt [SecondCountableTopology F]
+ (f : E → F) (s : Set E) (f' : E → E →L[ℝ] F) (hf' : ∀ x ∈ s, HasFDerivWithinAt f (f' x) s x)
(r : (E →L[ℝ] F) → ℝ≥0) (rpos : ∀ A, r A ≠ 0) :
∃ (t : ℕ → Set E)(A : ℕ → E →L[ℝ] F),
(∀ n, IsClosed (t n)) ∧
@@ -265,15 +265,15 @@ theorem exists_closed_cover_approximatesLinearOn_of_hasFderivWithinAt [SecondCou
-- then `x` belongs to `t q`.
apply mem_Union.2 ⟨q, _⟩
simp only [hq, subset_closure hnz, hp, mem_inter_iff, and_self_iff]
-#align exists_closed_cover_approximates_linear_on_of_has_fderiv_within_at exists_closed_cover_approximatesLinearOn_of_hasFderivWithinAt
+#align exists_closed_cover_approximates_linear_on_of_has_fderiv_within_at exists_closed_cover_approximatesLinearOn_of_hasFDerivWithinAt
variable [MeasurableSpace E] [BorelSpace E] (μ : Measure E) [IsAddHaarMeasure μ]
/-- Assume that a function `f` has a derivative at every point of a set `s`. Then one may
partition `s` into countably many disjoint relatively measurable sets (i.e., intersections
of `s` with measurable sets `t n`) on which `f` is well approximated by linear maps `A n`. -/
-theorem exists_partition_approximatesLinearOn_of_hasFderivWithinAt [SecondCountableTopology F]
- (f : E → F) (s : Set E) (f' : E → E →L[ℝ] F) (hf' : ∀ x ∈ s, HasFderivWithinAt f (f' x) s x)
+theorem exists_partition_approximatesLinearOn_of_hasFDerivWithinAt [SecondCountableTopology F]
+ (f : E → F) (s : Set E) (f' : E → E →L[ℝ] F) (hf' : ∀ x ∈ s, HasFDerivWithinAt f (f' x) s x)
(r : (E →L[ℝ] F) → ℝ≥0) (rpos : ∀ A, r A ≠ 0) :
∃ (t : ℕ → Set E)(A : ℕ → E →L[ℝ] F),
Pairwise (Disjoint on t) ∧
@@ -282,7 +282,7 @@ theorem exists_partition_approximatesLinearOn_of_hasFderivWithinAt [SecondCounta
(∀ n, ApproximatesLinearOn f (A n) (s ∩ t n) (r (A n))) ∧
(s.Nonempty → ∀ n, ∃ y ∈ s, A n = f' y) :=
by
- rcases exists_closed_cover_approximatesLinearOn_of_hasFderivWithinAt f s f' hf' r rpos with
+ rcases exists_closed_cover_approximatesLinearOn_of_hasFDerivWithinAt f s f' hf' r rpos with
⟨t, A, t_closed, st, t_approx, ht⟩
refine'
⟨disjointed t, A, disjoint_disjointed _,
@@ -291,7 +291,7 @@ theorem exists_partition_approximatesLinearOn_of_hasFderivWithinAt [SecondCounta
exact st
· intro n
exact (t_approx n).mono_set (inter_subset_inter_right _ (disjointed_subset _ _))
-#align exists_partition_approximates_linear_on_of_has_fderiv_within_at exists_partition_approximatesLinearOn_of_hasFderivWithinAt
+#align exists_partition_approximates_linear_on_of_has_fderiv_within_at exists_partition_approximatesLinearOn_of_hasFDerivWithinAt
namespace MeasureTheory
@@ -523,7 +523,7 @@ theorem mul_le_add_haar_image_of_lt_det (A : E →L[ℝ] E) {m : ℝ≥0}
then at almost every `x` in `s` one has `‖f' x - A‖ ≤ δ`. -/
theorem ApproximatesLinearOn.norm_fderiv_sub_le {A : E →L[ℝ] E} {δ : ℝ≥0}
(hf : ApproximatesLinearOn f A s δ) (hs : MeasurableSet s) (f' : E → E →L[ℝ] E)
- (hf' : ∀ x ∈ s, HasFderivWithinAt f (f' x) s x) : ∀ᵐ x ∂μ.restrict s, ‖f' x - A‖₊ ≤ δ :=
+ (hf' : ∀ x ∈ s, HasFDerivWithinAt f (f' x) s x) : ∀ᵐ x ∂μ.restrict s, ‖f' x - A‖₊ ≤ δ :=
by
/- The conclusion will hold at the Lebesgue density points of `s` (which have full measure).
At such a point `x`, for any `z` and any `ε > 0` one has for small `r`
@@ -655,8 +655,8 @@ theorem add_haar_image_eq_zero_of_differentiableOn_of_add_haar_eq_zero (hf : Dif
(s ⊆ ⋃ n : ℕ, t n) ∧
(∀ n : ℕ, ApproximatesLinearOn f (A n) (s ∩ t n) (δ (A n))) ∧
(s.nonempty → ∀ n, ∃ y ∈ s, A n = fderivWithin ℝ f s y) :=
- exists_partition_approximatesLinearOn_of_hasFderivWithinAt f s (fderivWithin ℝ f s)
- (fun x xs => (hf x xs).HasFderivWithinAt) δ fun A => (hδ A).1.ne'
+ exists_partition_approximatesLinearOn_of_hasFDerivWithinAt f s (fderivWithin ℝ f s)
+ (fun x xs => (hf x xs).HasFDerivWithinAt) δ fun A => (hδ A).1.ne'
calc
μ (f '' s) ≤ μ (⋃ n, f '' (s ∩ t n)) :=
by
@@ -681,7 +681,7 @@ theorem add_haar_image_eq_zero_of_differentiableOn_of_add_haar_eq_zero (hf : Dif
a set where the differential is not invertible, then the image of this set has zero measure.
Here, we give an auxiliary statement towards this result. -/
theorem add_haar_image_eq_zero_of_det_fderiv_within_eq_zero_aux
- (hf' : ∀ x ∈ s, HasFderivWithinAt f (f' x) s x) (R : ℝ) (hs : s ⊆ closedBall 0 R) (ε : ℝ≥0)
+ (hf' : ∀ x ∈ s, HasFDerivWithinAt f (f' x) s x) (R : ℝ) (hs : s ⊆ closedBall 0 R) (ε : ℝ≥0)
(εpos : 0 < ε) (h'f' : ∀ x ∈ s, (f' x).det = 0) : μ (f '' s) ≤ ε * μ (closedBall 0 R) :=
by
rcases eq_empty_or_nonempty s with (rfl | h's)
@@ -707,7 +707,7 @@ theorem add_haar_image_eq_zero_of_det_fderiv_within_eq_zero_aux
(s ⊆ ⋃ n : ℕ, t n) ∧
(∀ n : ℕ, ApproximatesLinearOn f (A n) (s ∩ t n) (δ (A n))) ∧
(s.nonempty → ∀ n, ∃ y ∈ s, A n = f' y) :=
- exists_partition_approximatesLinearOn_of_hasFderivWithinAt f s f' hf' δ fun A => (hδ A).1.ne'
+ exists_partition_approximatesLinearOn_of_hasFDerivWithinAt f s f' hf' δ fun A => (hδ A).1.ne'
calc
μ (f '' s) ≤ μ (⋃ n, f '' (s ∩ t n)) :=
by
@@ -744,7 +744,7 @@ theorem add_haar_image_eq_zero_of_det_fderiv_within_eq_zero_aux
/-- A version of Sard lemma in fixed dimension: given a differentiable function from `E` to `E` and
a set where the differential is not invertible, then the image of this set has zero measure. -/
theorem add_haar_image_eq_zero_of_det_fderiv_within_eq_zero
- (hf' : ∀ x ∈ s, HasFderivWithinAt f (f' x) s x) (h'f' : ∀ x ∈ s, (f' x).det = 0) :
+ (hf' : ∀ x ∈ s, HasFDerivWithinAt f (f' x) s x) (h'f' : ∀ x ∈ s, (f' x).det = 0) :
μ (f '' s) = 0 := by
suffices H : ∀ R, μ (f '' (s ∩ closed_ball 0 R)) = 0
· apply le_antisymm _ (zero_le _)
@@ -790,7 +790,7 @@ Lusin-Souslin theorem.
with respect to Lebesgue measure. Note that, in general, it is not genuinely measurable there,
as `f'` is not unique (but only on a set of measure `0`, as the argument shows). -/
theorem aEMeasurable_fderiv_within (hs : MeasurableSet s)
- (hf' : ∀ x ∈ s, HasFderivWithinAt f (f' x) s x) : AEMeasurable f' (μ.restrict s) :=
+ (hf' : ∀ x ∈ s, HasFDerivWithinAt f (f' x) s x) : AEMeasurable f' (μ.restrict s) :=
by
/- It suffices to show that `f'` can be uniformly approximated by a measurable function.
Fix `ε > 0`. Thanks to `exists_partition_approximates_linear_on_of_has_fderiv_within_at`, one
@@ -810,7 +810,7 @@ theorem aEMeasurable_fderiv_within (hs : MeasurableSet s)
(s ⊆ ⋃ n : ℕ, t n) ∧
(∀ n : ℕ, ApproximatesLinearOn f (A n) (s ∩ t n) δ) ∧
(s.nonempty → ∀ n, ∃ y ∈ s, A n = f' y) :=
- exists_partition_approximatesLinearOn_of_hasFderivWithinAt f s f' hf' (fun A => δ) fun A =>
+ exists_partition_approximatesLinearOn_of_hasFDerivWithinAt f s f' hf' (fun A => δ) fun A =>
δpos.ne'
-- define a measurable function `g` which coincides with `A n` on `t n`.
obtain ⟨g, g_meas, hg⟩ :
@@ -849,7 +849,7 @@ theorem aEMeasurable_fderiv_within (hs : MeasurableSet s)
#align measure_theory.ae_measurable_fderiv_within MeasureTheory.aEMeasurable_fderiv_within
theorem aEMeasurable_ofReal_abs_det_fderiv_within (hs : MeasurableSet s)
- (hf' : ∀ x ∈ s, HasFderivWithinAt f (f' x) s x) :
+ (hf' : ∀ x ∈ s, HasFDerivWithinAt f (f' x) s x) :
AEMeasurable (fun x => ENNReal.ofReal (|(f' x).det|)) (μ.restrict s) :=
by
apply ennreal.measurable_of_real.comp_ae_measurable
@@ -859,7 +859,7 @@ theorem aEMeasurable_ofReal_abs_det_fderiv_within (hs : MeasurableSet s)
#align measure_theory.ae_measurable_of_real_abs_det_fderiv_within MeasureTheory.aEMeasurable_ofReal_abs_det_fderiv_within
theorem aEMeasurable_toNNReal_abs_det_fderiv_within (hs : MeasurableSet s)
- (hf' : ∀ x ∈ s, HasFderivWithinAt f (f' x) s x) :
+ (hf' : ∀ x ∈ s, HasFDerivWithinAt f (f' x) s x) :
AEMeasurable (fun x => |(f' x).det|.toNNReal) (μ.restrict s) :=
by
apply measurable_real_to_nnreal.comp_ae_measurable
@@ -871,7 +871,7 @@ theorem aEMeasurable_toNNReal_abs_det_fderiv_within (hs : MeasurableSet s)
/-- If a function is differentiable and injective on a measurable set,
then the image is measurable.-/
theorem measurable_image_of_fderiv_within (hs : MeasurableSet s)
- (hf' : ∀ x ∈ s, HasFderivWithinAt f (f' x) s x) (hf : InjOn f s) : MeasurableSet (f '' s) :=
+ (hf' : ∀ x ∈ s, HasFDerivWithinAt f (f' x) s x) (hf : InjOn f s) : MeasurableSet (f '' s) :=
haveI : DifferentiableOn ℝ f s := fun x hx => (hf' x hx).DifferentiableWithinAt
hs.image_of_continuous_on_inj_on (DifferentiableOn.continuousOn this) hf
#align measure_theory.measurable_image_of_fderiv_within MeasureTheory.measurable_image_of_fderiv_within
@@ -879,7 +879,7 @@ theorem measurable_image_of_fderiv_within (hs : MeasurableSet s)
/-- If a function is differentiable and injective on a measurable set `s`, then its restriction
to `s` is a measurable embedding. -/
theorem measurableEmbedding_of_fderiv_within (hs : MeasurableSet s)
- (hf' : ∀ x ∈ s, HasFderivWithinAt f (f' x) s x) (hf : InjOn f s) :
+ (hf' : ∀ x ∈ s, HasFDerivWithinAt f (f' x) s x) (hf : InjOn f s) :
MeasurableEmbedding (s.restrict f) :=
haveI : DifferentiableOn ℝ f s := fun x hx => (hf' x hx).DifferentiableWithinAt
this.continuous_on.measurable_embedding hs hf
@@ -895,7 +895,7 @@ directions, first up to controlled errors and then letting these errors tend to
theorem add_haar_image_le_lintegral_abs_det_fderiv_aux1 (hs : MeasurableSet s)
- (hf' : ∀ x ∈ s, HasFderivWithinAt f (f' x) s x) {ε : ℝ≥0} (εpos : 0 < ε) :
+ (hf' : ∀ x ∈ s, HasFDerivWithinAt f (f' x) s x) {ε : ℝ≥0} (εpos : 0 < ε) :
μ (f '' s) ≤ (∫⁻ x in s, ENNReal.ofReal (|(f' x).det|) ∂μ) + 2 * ε * μ s :=
by
/- To bound `μ (f '' s)`, we cover `s` by sets where `f` is well-approximated by linear maps
@@ -937,7 +937,7 @@ theorem add_haar_image_le_lintegral_abs_det_fderiv_aux1 (hs : MeasurableSet s)
(s ⊆ ⋃ n : ℕ, t n) ∧
(∀ n : ℕ, ApproximatesLinearOn f (A n) (s ∩ t n) (δ (A n))) ∧
(s.nonempty → ∀ n, ∃ y ∈ s, A n = f' y) :=
- exists_partition_approximatesLinearOn_of_hasFderivWithinAt f s f' hf' δ fun A => (hδ A).1.ne'
+ exists_partition_approximatesLinearOn_of_hasFDerivWithinAt f s f' hf' δ fun A => (hδ A).1.ne'
calc
μ (f '' s) ≤ μ (⋃ n, f '' (s ∩ t n)) :=
by
@@ -992,7 +992,7 @@ theorem add_haar_image_le_lintegral_abs_det_fderiv_aux1 (hs : MeasurableSet s)
#align measure_theory.add_haar_image_le_lintegral_abs_det_fderiv_aux1 MeasureTheory.add_haar_image_le_lintegral_abs_det_fderiv_aux1
theorem add_haar_image_le_lintegral_abs_det_fderiv_aux2 (hs : MeasurableSet s) (h's : μ s ≠ ∞)
- (hf' : ∀ x ∈ s, HasFderivWithinAt f (f' x) s x) :
+ (hf' : ∀ x ∈ s, HasFDerivWithinAt f (f' x) s x) :
μ (f '' s) ≤ ∫⁻ x in s, ENNReal.ofReal (|(f' x).det|) ∂μ :=
by
-- We just need to let the error tend to `0` in the previous lemma.
@@ -1012,7 +1012,7 @@ theorem add_haar_image_le_lintegral_abs_det_fderiv_aux2 (hs : MeasurableSet s) (
#align measure_theory.add_haar_image_le_lintegral_abs_det_fderiv_aux2 MeasureTheory.add_haar_image_le_lintegral_abs_det_fderiv_aux2
theorem add_haar_image_le_lintegral_abs_det_fderiv (hs : MeasurableSet s)
- (hf' : ∀ x ∈ s, HasFderivWithinAt f (f' x) s x) :
+ (hf' : ∀ x ∈ s, HasFDerivWithinAt f (f' x) s x) :
μ (f '' s) ≤ ∫⁻ x in s, ENNReal.ofReal (|(f' x).det|) ∂μ :=
by
/- We already know the result for finite-measure sets. We cover `s` by finite-measure sets using
@@ -1049,7 +1049,7 @@ theorem add_haar_image_le_lintegral_abs_det_fderiv (hs : MeasurableSet s)
#align measure_theory.add_haar_image_le_lintegral_abs_det_fderiv MeasureTheory.add_haar_image_le_lintegral_abs_det_fderiv
theorem lintegral_abs_det_fderiv_le_add_haar_image_aux1 (hs : MeasurableSet s)
- (hf' : ∀ x ∈ s, HasFderivWithinAt f (f' x) s x) (hf : InjOn f s) {ε : ℝ≥0} (εpos : 0 < ε) :
+ (hf' : ∀ x ∈ s, HasFDerivWithinAt f (f' x) s x) (hf : InjOn f s) {ε : ℝ≥0} (εpos : 0 < ε) :
(∫⁻ x in s, ENNReal.ofReal (|(f' x).det|) ∂μ) ≤ μ (f '' s) + 2 * ε * μ s :=
by
/- To bound `∫⁻ x in s, ennreal.of_real (|(f' x).det|) ∂μ`, we cover `s` by sets where `f` is
@@ -1106,7 +1106,7 @@ theorem lintegral_abs_det_fderiv_le_add_haar_image_aux1 (hs : MeasurableSet s)
(s ⊆ ⋃ n : ℕ, t n) ∧
(∀ n : ℕ, ApproximatesLinearOn f (A n) (s ∩ t n) (δ (A n))) ∧
(s.nonempty → ∀ n, ∃ y ∈ s, A n = f' y) :=
- exists_partition_approximatesLinearOn_of_hasFderivWithinAt f s f' hf' δ fun A => (hδ A).1.ne'
+ exists_partition_approximatesLinearOn_of_hasFDerivWithinAt f s f' hf' δ fun A => (hδ A).1.ne'
have s_eq : s = ⋃ n, s ∩ t n := by
rw [← inter_Union]
exact subset.antisymm (subset_inter subset.rfl t_cover) (inter_subset_left _ _)
@@ -1168,7 +1168,7 @@ theorem lintegral_abs_det_fderiv_le_add_haar_image_aux1 (hs : MeasurableSet s)
#align measure_theory.lintegral_abs_det_fderiv_le_add_haar_image_aux1 MeasureTheory.lintegral_abs_det_fderiv_le_add_haar_image_aux1
theorem lintegral_abs_det_fderiv_le_add_haar_image_aux2 (hs : MeasurableSet s) (h's : μ s ≠ ∞)
- (hf' : ∀ x ∈ s, HasFderivWithinAt f (f' x) s x) (hf : InjOn f s) :
+ (hf' : ∀ x ∈ s, HasFDerivWithinAt f (f' x) s x) (hf : InjOn f s) :
(∫⁻ x in s, ENNReal.ofReal (|(f' x).det|) ∂μ) ≤ μ (f '' s) :=
by
-- We just need to let the error tend to `0` in the previous lemma.
@@ -1188,7 +1188,7 @@ theorem lintegral_abs_det_fderiv_le_add_haar_image_aux2 (hs : MeasurableSet s) (
#align measure_theory.lintegral_abs_det_fderiv_le_add_haar_image_aux2 MeasureTheory.lintegral_abs_det_fderiv_le_add_haar_image_aux2
theorem lintegral_abs_det_fderiv_le_add_haar_image (hs : MeasurableSet s)
- (hf' : ∀ x ∈ s, HasFderivWithinAt f (f' x) s x) (hf : InjOn f s) :
+ (hf' : ∀ x ∈ s, HasFDerivWithinAt f (f' x) s x) (hf : InjOn f s) :
(∫⁻ x in s, ENNReal.ofReal (|(f' x).det|) ∂μ) ≤ μ (f '' s) :=
by
/- We already know the result for finite-measure sets. We cover `s` by finite-measure sets using
@@ -1239,7 +1239,7 @@ injective and differentiable on a measurable set `s`, then the measure of `f ''
integral of `|(f' x).det|` on `s`.
Note that the measurability of `f '' s` is given by `measurable_image_of_fderiv_within`. -/
theorem lintegral_abs_det_fderiv_eq_add_haar_image (hs : MeasurableSet s)
- (hf' : ∀ x ∈ s, HasFderivWithinAt f (f' x) s x) (hf : InjOn f s) :
+ (hf' : ∀ x ∈ s, HasFDerivWithinAt f (f' x) s x) (hf : InjOn f s) :
(∫⁻ x in s, ENNReal.ofReal (|(f' x).det|) ∂μ) = μ (f '' s) :=
le_antisymm (lintegral_abs_det_fderiv_le_add_haar_image μ hs hf' hf)
(add_haar_image_le_lintegral_abs_det_fderiv μ hs hf')
@@ -1253,7 +1253,7 @@ For a version without measurability assumption but dealing with the restricted
function `s.restrict f`, see `restrict_map_with_density_abs_det_fderiv_eq_add_haar`.
-/
theorem map_withDensity_abs_det_fderiv_eq_add_haar (hs : MeasurableSet s)
- (hf' : ∀ x ∈ s, HasFderivWithinAt f (f' x) s x) (hf : InjOn f s) (h'f : Measurable f) :
+ (hf' : ∀ x ∈ s, HasFDerivWithinAt f (f' x) s x) (hf : InjOn f s) (h'f : Measurable f) :
Measure.map f ((μ.restrict s).withDensity fun x => ENNReal.ofReal (|(f' x).det|)) =
μ.restrict (f '' s) :=
by
@@ -1273,7 +1273,7 @@ For a version for the original function, but with a measurability assumption,
see `map_with_density_abs_det_fderiv_eq_add_haar`.
-/
theorem restrict_map_withDensity_abs_det_fderiv_eq_add_haar (hs : MeasurableSet s)
- (hf' : ∀ x ∈ s, HasFderivWithinAt f (f' x) s x) (hf : InjOn f s) :
+ (hf' : ∀ x ∈ s, HasFDerivWithinAt f (f' x) s x) (hf : InjOn f s) :
Measure.map (s.restrict f) (comap coe (μ.withDensity fun x => ENNReal.ofReal (|(f' x).det|))) =
μ.restrict (f '' s) :=
by
@@ -1283,7 +1283,7 @@ theorem restrict_map_withDensity_abs_det_fderiv_eq_add_haar (hs : MeasurableSet
refine' ContinuousOn.measurable_piecewise _ continuous_zero.continuous_on hs
have : DifferentiableOn ℝ f s := fun x hx => (hf' x hx).DifferentiableWithinAt
exact this.continuous_on
- have u' : ∀ x ∈ s, HasFderivWithinAt u (f' x) s x := fun x hx =>
+ have u' : ∀ x ∈ s, HasFDerivWithinAt u (f' x) s x := fun x hx =>
(hf' x hx).congr (fun y hy => uf hy) (uf hx)
set F : s → E := u ∘ coe with hF
have A :
@@ -1308,7 +1308,7 @@ injective and differentiable on a measurable set `s`, then the Lebesgue integral
`g : E → ℝ≥0∞` on `f '' s` coincides with the integral of `|(f' x).det| * g ∘ f` on `s`.
Note that the measurability of `f '' s` is given by `measurable_image_of_fderiv_within`. -/
theorem lintegral_image_eq_lintegral_abs_det_fderiv_mul (hs : MeasurableSet s)
- (hf' : ∀ x ∈ s, HasFderivWithinAt f (f' x) s x) (hf : InjOn f s) (g : E → ℝ≥0∞) :
+ (hf' : ∀ x ∈ s, HasFDerivWithinAt f (f' x) s x) (hf : InjOn f s) (g : E → ℝ≥0∞) :
(∫⁻ x in f '' s, g x ∂μ) = ∫⁻ x in s, ENNReal.ofReal (|(f' x).det|) * g (f x) ∂μ :=
by
rw [← restrict_map_with_density_abs_det_fderiv_eq_add_haar μ hs hf' hf,
@@ -1327,7 +1327,7 @@ function `f` is injective and differentiable on a measurable set `s`, then a fun
`g : E → F` is integrable on `f '' s` if and only if `|(f' x).det| • g ∘ f` is
integrable on `s`. -/
theorem integrableOn_image_iff_integrableOn_abs_det_fderiv_smul (hs : MeasurableSet s)
- (hf' : ∀ x ∈ s, HasFderivWithinAt f (f' x) s x) (hf : InjOn f s) (g : E → F) :
+ (hf' : ∀ x ∈ s, HasFDerivWithinAt f (f' x) s x) (hf : InjOn f s) (g : E → F) :
IntegrableOn g (f '' s) μ ↔ IntegrableOn (fun x => |(f' x).det| • g (f x)) s μ :=
by
rw [integrable_on, ← restrict_map_with_density_abs_det_fderiv_eq_add_haar μ hs hf' hf,
@@ -1346,7 +1346,7 @@ theorem integrableOn_image_iff_integrableOn_abs_det_fderiv_smul (hs : Measurable
injective and differentiable on a measurable set `s`, then the Bochner integral of a function
`g : E → F` on `f '' s` coincides with the integral of `|(f' x).det| • g ∘ f` on `s`. -/
theorem integral_image_eq_integral_abs_det_fderiv_smul [CompleteSpace F] (hs : MeasurableSet s)
- (hf' : ∀ x ∈ s, HasFderivWithinAt f (f' x) s x) (hf : InjOn f s) (g : E → F) :
+ (hf' : ∀ x ∈ s, HasFDerivWithinAt f (f' x) s x) (hf : InjOn f s) (g : E → F) :
(∫ x in f '' s, g x ∂μ) = ∫ x in s, |(f' x).det| • g (f x) ∂μ :=
by
rw [← restrict_map_with_density_abs_det_fderiv_eq_add_haar μ hs hf' hf,
@@ -1369,7 +1369,7 @@ theorem integral_image_eq_integral_abs_deriv_smul {s : Set ℝ} {f : ℝ → ℝ
(hf : InjOn f s) (g : ℝ → F) : (∫ x in f '' s, g x) = ∫ x in s, |f' x| • g (f x) :=
by
convert integral_image_eq_integral_abs_det_fderiv_smul volume hs
- (fun x hx => (hf' x hx).HasFderivWithinAt) hf g
+ (fun x hx => (hf' x hx).HasFDerivWithinAt) hf g
ext1 x
rw [(by
ext
@@ -1384,14 +1384,14 @@ theorem integral_image_eq_integral_abs_deriv_smul {s : Set ℝ} {f : ℝ → ℝ
#align measure_theory.integral_image_eq_integral_abs_deriv_smul MeasureTheory.integral_image_eq_integral_abs_deriv_smul
theorem integral_target_eq_integral_abs_det_fderiv_smul [CompleteSpace F] {f : LocalHomeomorph E E}
- (hf' : ∀ x ∈ f.source, HasFderivAt f (f' x) x) (g : E → F) :
+ (hf' : ∀ x ∈ f.source, HasFDerivAt f (f' x) x) (g : E → F) :
(∫ x in f.target, g x ∂μ) = ∫ x in f.source, |(f' x).det| • g (f x) ∂μ :=
by
have : f '' f.source = f.target := LocalEquiv.image_source_eq_target f.to_local_equiv
rw [← this]
apply integral_image_eq_integral_abs_det_fderiv_smul μ f.open_source.measurable_set _ f.inj_on
intro x hx
- exact (hf' x hx).HasFderivWithinAt
+ exact (hf' x hx).HasFDerivWithinAt
#align measure_theory.integral_target_eq_integral_abs_det_fderiv_smul MeasureTheory.integral_target_eq_integral_abs_det_fderiv_smul
end MeasureTheory
mathlib commit https://github.com/leanprover-community/mathlib/commit/f51de8769c34652d82d1c8e5f8f18f8374782bed
@@ -4,14 +4,14 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Sébastien Gouëzel
! This file was ported from Lean 3 source module measure_theory.function.jacobian
-! leanprover-community/mathlib commit 8f9fea08977f7e450770933ee6abb20733b47c92
+! leanprover-community/mathlib commit fd5edc43dc4f10b85abfe544b88f82cf13c5f844
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
import Mathbin.Analysis.Calculus.Inverse
import Mathbin.MeasureTheory.Constructions.BorelSpace.ContinuousLinearMap
import Mathbin.MeasureTheory.Covering.BesicovitchVectorSpace
-import Mathbin.MeasureTheory.Measure.HaarLebesgue
+import Mathbin.MeasureTheory.Measure.Lebesgue.EqHaar
import Mathbin.Analysis.NormedSpace.Pointwise
import Mathbin.MeasureTheory.Constructions.Polish
mathlib commit https://github.com/leanprover-community/mathlib/commit/95a87616d63b3cb49d3fe678d416fbe9c4217bf4
@@ -4,10 +4,11 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Sébastien Gouëzel
! This file was ported from Lean 3 source module measure_theory.function.jacobian
-! leanprover-community/mathlib commit bf6a01357ff5684b1ebcd0f1a13be314fc82c0bf
+! leanprover-community/mathlib commit 8f9fea08977f7e450770933ee6abb20733b47c92
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
+import Mathbin.Analysis.Calculus.Inverse
import Mathbin.MeasureTheory.Constructions.BorelSpace.ContinuousLinearMap
import Mathbin.MeasureTheory.Covering.BesicovitchVectorSpace
import Mathbin.MeasureTheory.Measure.HaarLebesgue
mathlib commit https://github.com/leanprover-community/mathlib/commit/0b9eaaa7686280fad8cce467f5c3c57ee6ce77f8
@@ -4,10 +4,11 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Sébastien Gouëzel
! This file was ported from Lean 3 source module measure_theory.function.jacobian
-! leanprover-community/mathlib commit 57ac39bd365c2f80589a700f9fbb664d3a1a30c2
+! leanprover-community/mathlib commit bf6a01357ff5684b1ebcd0f1a13be314fc82c0bf
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
+import Mathbin.MeasureTheory.Constructions.BorelSpace.ContinuousLinearMap
import Mathbin.MeasureTheory.Covering.BesicovitchVectorSpace
import Mathbin.MeasureTheory.Measure.HaarLebesgue
import Mathbin.Analysis.NormedSpace.Pointwise
mathlib commit https://github.com/leanprover-community/mathlib/commit/e3fb84046afd187b710170887195d50bada934ee
@@ -134,7 +134,7 @@ theorem exists_closed_cover_approximatesLinearOn_of_hasFderivWithinAt [SecondCou
obtain ⟨T, T_count, hT⟩ :
∃ T : Set s,
T.Countable ∧ (⋃ x ∈ T, ball (f' (x : E)) (r (f' x))) = ⋃ x : s, ball (f' x) (r (f' x)) :=
- TopologicalSpace.isOpen_unionᵢ_countable _ fun x => is_open_ball
+ TopologicalSpace.isOpen_iUnion_countable _ fun x => is_open_ball
-- fix a sequence `u` of positive reals tending to zero.
obtain ⟨u, u_anti, u_pos, u_lim⟩ :
∃ u : ℕ → ℝ, StrictAnti u ∧ (∀ n : ℕ, 0 < u n) ∧ tendsto u at_top (𝓝 0) :=
@@ -285,7 +285,7 @@ theorem exists_partition_approximatesLinearOn_of_hasFderivWithinAt [SecondCounta
refine'
⟨disjointed t, A, disjoint_disjointed _,
MeasurableSet.disjointed fun n => (t_closed n).MeasurableSet, _, _, ht⟩
- · rw [unionᵢ_disjointed]
+ · rw [iUnion_disjointed]
exact st
· intro n
exact (t_approx n).mono_set (inter_subset_inter_right _ (disjointed_subset _ _))
@@ -1021,7 +1021,7 @@ theorem add_haar_image_le_lintegral_abs_det_fderiv (hs : MeasurableSet s)
apply MeasurableSet.disjointed fun i => _
exact measurable_spanning_sets μ i
have A : s = ⋃ n, s ∩ u n := by
- rw [← inter_Union, unionᵢ_disjointed, Union_spanning_sets, inter_univ]
+ rw [← inter_Union, iUnion_disjointed, Union_spanning_sets, inter_univ]
calc
μ (f '' s) ≤ ∑' n, μ (f '' (s ∩ u n)) :=
by
@@ -1197,7 +1197,7 @@ theorem lintegral_abs_det_fderiv_le_add_haar_image (hs : MeasurableSet s)
apply MeasurableSet.disjointed fun i => _
exact measurable_spanning_sets μ i
have A : s = ⋃ n, s ∩ u n := by
- rw [← inter_Union, unionᵢ_disjointed, Union_spanning_sets, inter_univ]
+ rw [← inter_Union, iUnion_disjointed, Union_spanning_sets, inter_univ]
calc
(∫⁻ x in s, ENNReal.ofReal (|(f' x).det|) ∂μ) =
∑' n, ∫⁻ x in s ∩ u n, ENNReal.ofReal (|(f' x).det|) ∂μ :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/92c69b77c5a7dc0f7eeddb552508633305157caa
@@ -288,7 +288,7 @@ theorem exists_partition_approximatesLinearOn_of_hasFderivWithinAt [SecondCounta
· rw [unionᵢ_disjointed]
exact st
· intro n
- exact (t_approx n).monoSet (inter_subset_inter_right _ (disjointed_subset _ _))
+ exact (t_approx n).mono_set (inter_subset_inter_right _ (disjointed_subset _ _))
#align exists_partition_approximates_linear_on_of_has_fderiv_within_at exists_partition_approximatesLinearOn_of_hasFderivWithinAt
namespace MeasureTheory
@@ -787,8 +787,8 @@ Lusin-Souslin theorem.
/-- The derivative of a function on a measurable set is almost everywhere measurable on this set
with respect to Lebesgue measure. Note that, in general, it is not genuinely measurable there,
as `f'` is not unique (but only on a set of measure `0`, as the argument shows). -/
-theorem aeMeasurableFderivWithin (hs : MeasurableSet s)
- (hf' : ∀ x ∈ s, HasFderivWithinAt f (f' x) s x) : AeMeasurable f' (μ.restrict s) :=
+theorem aEMeasurable_fderiv_within (hs : MeasurableSet s)
+ (hf' : ∀ x ∈ s, HasFderivWithinAt f (f' x) s x) : AEMeasurable f' (μ.restrict s) :=
by
/- It suffices to show that `f'` can be uniformly approximated by a measurable function.
Fix `ε > 0`. Thanks to `exists_partition_approximates_linear_on_of_has_fderiv_within_at`, one
@@ -797,7 +797,7 @@ theorem aeMeasurableFderivWithin (hs : MeasurableSet s)
`approximates_linear_on.norm_fderiv_sub_le` that `f'` is uniformly approximated by `A n`, which
gives the conclusion. -/
-- fix a precision `ε`
- refine' aeMeasurableOfUnifApprox fun ε εpos => _
+ refine' aEMeasurable_of_unif_approx fun ε εpos => _
let δ : ℝ≥0 := ⟨ε, le_of_lt εpos⟩
have δpos : 0 < δ := εpos
-- partition `s` into sets `s ∩ t n` on which `f` is approximated by linear maps `A n`.
@@ -844,27 +844,27 @@ theorem aeMeasurableFderivWithin (hs : MeasurableSet s)
rw [← nndist_eq_nnnorm] at hx1
rw [hx2, dist_comm]
exact hx1
-#align measure_theory.ae_measurable_fderiv_within MeasureTheory.aeMeasurableFderivWithin
+#align measure_theory.ae_measurable_fderiv_within MeasureTheory.aEMeasurable_fderiv_within
-theorem aeMeasurableOfRealAbsDetFderivWithin (hs : MeasurableSet s)
+theorem aEMeasurable_ofReal_abs_det_fderiv_within (hs : MeasurableSet s)
(hf' : ∀ x ∈ s, HasFderivWithinAt f (f' x) s x) :
- AeMeasurable (fun x => ENNReal.ofReal (|(f' x).det|)) (μ.restrict s) :=
+ AEMeasurable (fun x => ENNReal.ofReal (|(f' x).det|)) (μ.restrict s) :=
by
apply ennreal.measurable_of_real.comp_ae_measurable
refine' continuous_abs.measurable.comp_ae_measurable _
refine' continuous_linear_map.continuous_det.measurable.comp_ae_measurable _
exact ae_measurable_fderiv_within μ hs hf'
-#align measure_theory.ae_measurable_of_real_abs_det_fderiv_within MeasureTheory.aeMeasurableOfRealAbsDetFderivWithin
+#align measure_theory.ae_measurable_of_real_abs_det_fderiv_within MeasureTheory.aEMeasurable_ofReal_abs_det_fderiv_within
-theorem aeMeasurableToNnrealAbsDetFderivWithin (hs : MeasurableSet s)
+theorem aEMeasurable_toNNReal_abs_det_fderiv_within (hs : MeasurableSet s)
(hf' : ∀ x ∈ s, HasFderivWithinAt f (f' x) s x) :
- AeMeasurable (fun x => |(f' x).det|.toNNReal) (μ.restrict s) :=
+ AEMeasurable (fun x => |(f' x).det|.toNNReal) (μ.restrict s) :=
by
apply measurable_real_to_nnreal.comp_ae_measurable
refine' continuous_abs.measurable.comp_ae_measurable _
refine' continuous_linear_map.continuous_det.measurable.comp_ae_measurable _
exact ae_measurable_fderiv_within μ hs hf'
-#align measure_theory.ae_measurable_to_nnreal_abs_det_fderiv_within MeasureTheory.aeMeasurableToNnrealAbsDetFderivWithin
+#align measure_theory.ae_measurable_to_nnreal_abs_det_fderiv_within MeasureTheory.aEMeasurable_toNNReal_abs_det_fderiv_within
/-- If a function is differentiable and injective on a measurable set,
then the image is measurable.-/
@@ -985,7 +985,7 @@ theorem add_haar_image_le_lintegral_abs_det_fderiv_aux1 (hs : MeasurableSet s)
exact subset.antisymm (subset_inter subset.rfl t_cover) (inter_subset_left _ _)
rw [← this]
_ = (∫⁻ x in s, ENNReal.ofReal (|(f' x).det|) ∂μ) + 2 * ε * μ s := by
- simp only [lintegral_add_right' _ aeMeasurableConst, set_lintegral_const]
+ simp only [lintegral_add_right' _ aemeasurable_const, set_lintegral_const]
#align measure_theory.add_haar_image_le_lintegral_abs_det_fderiv_aux1 MeasureTheory.add_haar_image_le_lintegral_abs_det_fderiv_aux1
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce7e9d53d4bbc38065db3b595cd5bd73c323bc1d
@@ -1366,8 +1366,7 @@ theorem integral_image_eq_integral_abs_deriv_smul {s : Set ℝ} {f : ℝ → ℝ
[CompleteSpace F] (hs : MeasurableSet s) (hf' : ∀ x ∈ s, HasDerivWithinAt f (f' x) s x)
(hf : InjOn f s) (g : ℝ → F) : (∫ x in f '' s, g x) = ∫ x in s, |f' x| • g (f x) :=
by
- convert
- integral_image_eq_integral_abs_det_fderiv_smul volume hs
+ convert integral_image_eq_integral_abs_det_fderiv_smul volume hs
(fun x hx => (hf' x hx).HasFderivWithinAt) hf g
ext1 x
rw [(by
mathlib commit https://github.com/leanprover-community/mathlib/commit/3180fab693e2cee3bff62675571264cb8778b212
@@ -448,7 +448,7 @@ theorem mul_le_add_haar_image_of_lt_det (A : E →L[ℝ] E) {m : ℝ≥0}
-- exclude first the trivial case where `m = 0`.
rcases eq_or_lt_of_le (zero_le m) with (rfl | mpos)
· apply eventually_of_forall
- simp only [forall_const, zero_mul, imp_true_iff, zero_le, ENNReal.coe_zero]
+ simp only [forall_const, MulZeroClass.zero_mul, imp_true_iff, zero_le, ENNReal.coe_zero]
have hA : A.det ≠ 0 := by
intro h
simpa only [h, ENNReal.not_lt_zero, ENNReal.ofReal_zero, abs_zero] using hm
@@ -490,11 +490,11 @@ theorem mul_le_add_haar_image_of_lt_det (A : E →L[ℝ] E) {m : ℝ≥0}
(𝓝 (‖(B.symm : E →L[ℝ] E)‖₊ * (‖(B.symm : E →L[ℝ] E)‖₊⁻¹ - 0)⁻¹ * 0)) :=
by
rcases eq_or_ne ‖(B.symm : E →L[ℝ] E)‖₊ 0 with (H | H)
- · simpa only [H, zero_mul] using tendsto_const_nhds
+ · simpa only [H, MulZeroClass.zero_mul] using tendsto_const_nhds
refine' tendsto.mul (tendsto_const_nhds.mul _) tendsto_id
refine' (tendsto.sub tendsto_const_nhds tendsto_id).inv₀ _
simpa only [tsub_zero, inv_eq_zero, Ne.def] using H
- simp only [mul_zero] at this
+ simp only [MulZeroClass.mul_zero] at this
exact (tendsto_order.1 this).2 δ₀ δ₀pos
-- let `δ` be small enough, and `f` approximated by `B` up to `δ`.
filter_upwards [L1, L2]
@@ -540,7 +540,7 @@ theorem ApproximatesLinearOn.norm_fderiv_sub_le {A : E →L[ℝ] E} {δ : ℝ≥
tendsto (fun ε : ℝ => ((δ : ℝ) + ε) * (‖z‖ + ε) + ‖f' x - A‖ * ε) (𝓝[>] 0)
(𝓝 ((δ + 0) * (‖z‖ + 0) + ‖f' x - A‖ * 0)) :=
tendsto.mono_left (Continuous.tendsto (by continuity) 0) nhdsWithin_le_nhds
- simp only [add_zero, mul_zero] at this
+ simp only [add_zero, MulZeroClass.mul_zero] at this
apply le_of_tendsto_of_tendsto tendsto_const_nhds this
filter_upwards [self_mem_nhdsWithin]
exact H
@@ -671,7 +671,7 @@ theorem add_haar_image_eq_zero_of_differentiableOn_of_add_haar_eq_zero (hf : Dif
by
refine' ENNReal.tsum_le_tsum fun n => mul_le_mul_left' _ _
exact le_trans (measure_mono (inter_subset_left _ _)) (le_of_eq hs)
- _ = 0 := by simp only [tsum_zero, mul_zero]
+ _ = 0 := by simp only [tsum_zero, MulZeroClass.mul_zero]
#align measure_theory.add_haar_image_eq_zero_of_differentiable_on_of_add_haar_eq_zero MeasureTheory.add_haar_image_eq_zero_of_differentiableOn_of_add_haar_eq_zero
@@ -767,7 +767,7 @@ theorem add_haar_image_eq_zero_of_det_fderiv_within_eq_zero
(𝓝 (((0 : ℝ≥0) : ℝ≥0∞) * μ (closed_ball 0 R))) :=
ENNReal.Tendsto.mul_const (ENNReal.tendsto_coe.2 tendsto_id)
(Or.inr measure_closed_ball_lt_top.Ne)
- simp only [zero_mul, ENNReal.coe_zero] at this
+ simp only [MulZeroClass.zero_mul, ENNReal.coe_zero] at this
exact tendsto.mono_left this nhdsWithin_le_nhds
apply le_antisymm _ (zero_le _)
apply ge_of_tendsto B
@@ -1002,7 +1002,7 @@ theorem add_haar_image_le_lintegral_abs_det_fderiv_aux2 (hs : MeasurableSet s) (
refine' tendsto_const_nhds.add _
refine' ENNReal.Tendsto.mul_const _ (Or.inr h's)
exact ENNReal.Tendsto.const_mul (ENNReal.tendsto_coe.2 tendsto_id) (Or.inr ENNReal.coe_ne_top)
- simp only [add_zero, zero_mul, mul_zero, ENNReal.coe_zero] at this
+ simp only [add_zero, MulZeroClass.zero_mul, MulZeroClass.mul_zero, ENNReal.coe_zero] at this
apply ge_of_tendsto this
filter_upwards [self_mem_nhdsWithin]
rintro ε (εpos : 0 < ε)
@@ -1074,7 +1074,8 @@ theorem lintegral_abs_det_fderiv_le_add_haar_image_aux1 (hs : MeasurableSet s)
exact hB.trans_lt (half_lt_self δ'pos)
rcases eq_or_ne A.det 0 with (hA | hA)
· refine' ⟨δ'', half_pos δ'pos, I'', _⟩
- simp only [hA, forall_const, zero_mul, ENNReal.ofReal_zero, imp_true_iff, zero_le, abs_zero]
+ simp only [hA, forall_const, MulZeroClass.zero_mul, ENNReal.ofReal_zero, imp_true_iff,
+ zero_le, abs_zero]
let m : ℝ≥0 := Real.toNNReal (|A.det|) - ε
have I : (m : ℝ≥0∞) < ENNReal.ofReal (|A.det|) :=
by
@@ -1177,7 +1178,7 @@ theorem lintegral_abs_det_fderiv_le_add_haar_image_aux2 (hs : MeasurableSet s) (
refine' tendsto_const_nhds.add _
refine' ENNReal.Tendsto.mul_const _ (Or.inr h's)
exact ENNReal.Tendsto.const_mul (ENNReal.tendsto_coe.2 tendsto_id) (Or.inr ENNReal.coe_ne_top)
- simp only [add_zero, zero_mul, mul_zero, ENNReal.coe_zero] at this
+ simp only [add_zero, MulZeroClass.zero_mul, MulZeroClass.mul_zero, ENNReal.coe_zero] at this
apply ge_of_tendsto this
filter_upwards [self_mem_nhdsWithin]
rintro ε (εpos : 0 < ε)
mathlib commit https://github.com/leanprover-community/mathlib/commit/4c586d291f189eecb9d00581aeb3dd998ac34442
@@ -171,7 +171,7 @@ theorem exists_closed_cover_approximatesLinearOn_of_hasFderivWithinAt [SecondCou
congr 1
simp only [ContinuousLinearMap.coe_sub', map_sub, Pi.sub_apply]
abel
- _ ≤ ‖f y - f x - (f' x) (y - x)‖ + ‖(f' x - f' z) (y - x)‖ := norm_add_le _ _
+ _ ≤ ‖f y - f x - (f' x) (y - x)‖ + ‖(f' x - f' z) (y - x)‖ := (norm_add_le _ _)
_ ≤ ε * ‖y - x‖ + ‖f' x - f' z‖ * ‖y - x‖ :=
by
refine' add_le_add (hδ _) (ContinuousLinearMap.le_op_norm _ _)
@@ -224,7 +224,7 @@ theorem exists_closed_cover_approximatesLinearOn_of_hasFderivWithinAt [SecondCou
refine' yM.2 _ ⟨hx.1, _⟩
calc
dist x y ≤ dist x (d p) + dist y (d p) := dist_triangle_right _ _ _
- _ ≤ u n / 3 + u n / 3 := add_le_add hx.2.2 hy.2.2
+ _ ≤ u n / 3 + u n / 3 := (add_le_add hx.2.2 hy.2.2)
_ < u n := by linarith [u_pos n]
-- the sets `K n z p` are also closed, again by design.
@@ -416,9 +416,9 @@ theorem add_haar_image_le_mul_of_det_lt (A : E →L[ℝ] E) {m : ℝ≥0}
apply measure_mono
rw [← image_Union, ← inter_Union]
exact image_subset _ (subset_inter (subset.refl _) st)
- _ ≤ ∑' x : t, μ (f '' (s ∩ closed_ball x (r x))) := measure_Union_le _
+ _ ≤ ∑' x : t, μ (f '' (s ∩ closed_ball x (r x))) := (measure_Union_le _)
_ ≤ ∑' x : t, m * μ (closed_ball x (r x)) :=
- ENNReal.tsum_le_tsum fun x => I x (r x) (ts x.2) (rpos x x.2).le
+ (ENNReal.tsum_le_tsum fun x => I x (r x) (ts x.2) (rpos x x.2).le)
_ ≤ m * (μ s + a) := by
rw [ENNReal.tsum_mul_left]
exact mul_le_mul_left' μt _
@@ -573,7 +573,7 @@ theorem ApproximatesLinearOn.norm_fderiv_sub_le {A : E →L[ℝ] E} {δ : ℝ≥
have norm_a : ‖a‖ ≤ ‖z‖ + ε :=
calc
‖a‖ = ‖z + (a - z)‖ := by simp only [add_sub_cancel'_right]
- _ ≤ ‖z‖ + ‖a - z‖ := norm_add_le _ _
+ _ ≤ ‖z‖ + ‖a - z‖ := (norm_add_le _ _)
_ ≤ ‖z‖ + ε := add_le_add_left (mem_closedBall_iff_norm.1 az) _
-- use the approximation properties to control `(f' x - A) a`, and then `(f' x - A) z` as `z` is
@@ -587,8 +587,8 @@ theorem ApproximatesLinearOn.norm_fderiv_sub_le {A : E →L[ℝ] E} {δ : ℝ≥
congr 1
simp only [ya, add_sub_cancel', sub_sub_sub_cancel_left, ContinuousLinearMap.coe_sub',
eq_self_iff_true, sub_left_inj, Pi.sub_apply, ContinuousLinearMap.map_smul, smul_sub]
- _ ≤ ‖f y - f x - A (y - x)‖ + ‖f y - f x - (f' x) (y - x)‖ := norm_sub_le _ _
- _ ≤ δ * ‖y - x‖ + ε * ‖y - x‖ := add_le_add (hf _ ys _ xs) (hρ ⟨rρ hy, ys⟩)
+ _ ≤ ‖f y - f x - A (y - x)‖ + ‖f y - f x - (f' x) (y - x)‖ := (norm_sub_le _ _)
+ _ ≤ δ * ‖y - x‖ + ε * ‖y - x‖ := (add_le_add (hf _ ys _ xs) (hρ ⟨rρ hy, ys⟩))
_ = r * (δ + ε) * ‖a‖ :=
by
simp only [ya, add_sub_cancel', norm_smul, Real.norm_eq_abs, abs_of_nonneg rpos.le]
@@ -604,7 +604,7 @@ theorem ApproximatesLinearOn.norm_fderiv_sub_le {A : E →L[ℝ] E} {δ : ℝ≥
congr 1
simp only [ContinuousLinearMap.coe_sub', map_sub, Pi.sub_apply]
abel
- _ ≤ ‖(f' x - A) a‖ + ‖(f' x - A) (z - a)‖ := norm_add_le _ _
+ _ ≤ ‖(f' x - A) a‖ + ‖(f' x - A) (z - a)‖ := (norm_add_le _ _)
_ ≤ (δ + ε) * (‖z‖ + ε) + ‖f' x - A‖ * ‖z - a‖ :=
by
apply add_le_add
@@ -661,7 +661,7 @@ theorem add_haar_image_eq_zero_of_differentiableOn_of_add_haar_eq_zero (hf : Dif
apply measure_mono
rw [← image_Union, ← inter_Union]
exact image_subset f (subset_inter subset.rfl t_cover)
- _ ≤ ∑' n, μ (f '' (s ∩ t n)) := measure_Union_le _
+ _ ≤ ∑' n, μ (f '' (s ∩ t n)) := (measure_Union_le _)
_ ≤ ∑' n, (Real.toNNReal (|(A n).det|) + 1 : ℝ≥0) * μ (s ∩ t n) :=
by
apply ENNReal.tsum_le_tsum fun n => _
@@ -712,7 +712,7 @@ theorem add_haar_image_eq_zero_of_det_fderiv_within_eq_zero_aux
apply measure_mono
rw [← image_Union, ← inter_Union]
exact image_subset f (subset_inter subset.rfl t_cover)
- _ ≤ ∑' n, μ (f '' (s ∩ t n)) := measure_Union_le _
+ _ ≤ ∑' n, μ (f '' (s ∩ t n)) := (measure_Union_le _)
_ ≤ ∑' n, (Real.toNNReal (|(A n).det|) + ε : ℝ≥0) * μ (s ∩ t n) :=
by
apply ENNReal.tsum_le_tsum fun n => _
@@ -942,7 +942,7 @@ theorem add_haar_image_le_lintegral_abs_det_fderiv_aux1 (hs : MeasurableSet s)
apply measure_mono
rw [← image_Union, ← inter_Union]
exact image_subset f (subset_inter subset.rfl t_cover)
- _ ≤ ∑' n, μ (f '' (s ∩ t n)) := measure_Union_le _
+ _ ≤ ∑' n, μ (f '' (s ∩ t n)) := (measure_Union_le _)
_ ≤ ∑' n, (ENNReal.ofReal (|(A n).det|) + ε) * μ (s ∩ t n) :=
by
apply ENNReal.tsum_le_tsum fun n => _
@@ -963,7 +963,7 @@ theorem add_haar_image_le_lintegral_abs_det_fderiv_aux1 (hs : MeasurableSet s)
by
congr 1
abel
- _ ≤ |(f' x).det| + |(f' x).det - (A n).det| := abs_sub _ _
+ _ ≤ |(f' x).det| + |(f' x).det - (A n).det| := (abs_sub _ _)
_ ≤ |(f' x).det| + ε := add_le_add le_rfl ((hδ (A n)).2.1 _ hx)
calc
@@ -1128,7 +1128,7 @@ theorem lintegral_abs_det_fderiv_le_add_haar_image_aux1 (hs : MeasurableSet s)
by
congr 1
abel
- _ ≤ |(A n).det| + |(f' x).det - (A n).det| := abs_add _ _
+ _ ≤ |(A n).det| + |(f' x).det - (A n).det| := (abs_add _ _)
_ ≤ |(A n).det| + ε := add_le_add le_rfl ((hδ (A n)).2.1 _ hx)
calc
mathlib commit https://github.com/leanprover-community/mathlib/commit/9da1b3534b65d9661eb8f42443598a92bbb49211
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Sébastien Gouëzel
! This file was ported from Lean 3 source module measure_theory.function.jacobian
-! leanprover-community/mathlib commit b2ff9a3d7a15fd5b0f060b135421d6a89a999c2f
+! leanprover-community/mathlib commit 57ac39bd365c2f80589a700f9fbb664d3a1a30c2
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -387,7 +387,7 @@ theorem add_haar_image_le_mul_of_det_lt (A : E →L[ℝ] E) {m : ℝ≥0}
_ ≤ ENNReal.ofReal (r ^ finrank ℝ E) * (m * μ (closed_ball 0 1)) :=
by
rw [add_comm]
- exact ENNReal.mul_le_mul le_rfl hε.le
+ exact mul_le_mul_left' hε.le _
_ = m * μ (closed_ball x r) :=
by
simp only [add_haar_closed_ball' _ _ r0]
@@ -421,7 +421,7 @@ theorem add_haar_image_le_mul_of_det_lt (A : E →L[ℝ] E) {m : ℝ≥0}
ENNReal.tsum_le_tsum fun x => I x (r x) (ts x.2) (rpos x x.2).le
_ ≤ m * (μ s + a) := by
rw [ENNReal.tsum_mul_left]
- exact ENNReal.mul_le_mul le_rfl μt
+ exact mul_le_mul_left' μt _
-- taking the limit in `a`, one obtains the conclusion
have L : tendsto (fun a => (m : ℝ≥0∞) * (μ s + a)) (𝓝[>] 0) (𝓝 (m * (μ s + 0))) :=
@@ -669,7 +669,7 @@ theorem add_haar_image_eq_zero_of_differentiableOn_of_add_haar_eq_zero (hf : Dif
exact ht n
_ ≤ ∑' n, (Real.toNNReal (|(A n).det|) + 1 : ℝ≥0) * 0 :=
by
- refine' ENNReal.tsum_le_tsum fun n => ENNReal.mul_le_mul le_rfl _
+ refine' ENNReal.tsum_le_tsum fun n => mul_le_mul_left' _ _
exact le_trans (measure_mono (inter_subset_left _ _)) (le_of_eq hs)
_ = 0 := by simp only [tsum_zero, mul_zero]
@@ -725,7 +725,7 @@ theorem add_haar_image_eq_zero_of_det_fderiv_within_eq_zero_aux
_ ≤ ε * ∑' n, μ (closed_ball 0 R ∩ t n) :=
by
rw [ENNReal.tsum_mul_left]
- refine' ENNReal.mul_le_mul le_rfl (ENNReal.tsum_le_tsum fun n => measure_mono _)
+ refine' mul_le_mul_left' (ENNReal.tsum_le_tsum fun n => measure_mono _) _
exact inter_subset_inter_left _ hs
_ = ε * μ (⋃ n, closed_ball 0 R ∩ t n) :=
by
@@ -735,7 +735,7 @@ theorem add_haar_image_eq_zero_of_det_fderiv_within_eq_zero_aux
exact measurable_set_closed_ball.inter (t_meas n)
_ ≤ ε * μ (closed_ball 0 R) := by
rw [← inter_Union]
- exact ENNReal.mul_le_mul le_rfl (measure_mono (inter_subset_left _ _))
+ exact mul_le_mul_left' (measure_mono (inter_subset_left _ _)) _
#align measure_theory.add_haar_image_eq_zero_of_det_fderiv_within_eq_zero_aux MeasureTheory.add_haar_image_eq_zero_of_det_fderiv_within_eq_zero_aux
@@ -1091,7 +1091,7 @@ theorem lintegral_abs_det_fderiv_le_add_haar_image_aux1 (hs : MeasurableSet s)
rcases eq_or_ne (μ t) ∞ with (ht | ht)
·
simp only [ht, εpos.ne', WithTop.mul_top, ENNReal.coe_eq_zero, le_top, Ne.def,
- not_false_iff, ENNReal.add_top]
+ not_false_iff, _root_.add_top]
have := h t g (htg.mono_num (min_le_left _ _))
rwa [WithTop.coe_sub, ENNReal.sub_mul, tsub_le_iff_right] at this
simp only [ht, imp_true_iff, Ne.def, not_false_iff]
mathlib commit https://github.com/leanprover-community/mathlib/commit/eb0cb4511aaef0da2462207b67358a0e1fe1e2ee
@@ -93,7 +93,7 @@ Change of variables in integrals
open
MeasureTheory MeasureTheory.Measure Metric Filter Set FiniteDimensional Asymptotics TopologicalSpace
-open NNReal Ennreal Topology Pointwise
+open NNReal ENNReal Topology Pointwise
variable {E F : Type _} [NormedAddCommGroup E] [NormedSpace ℝ E] [FiniteDimensional ℝ E]
[NormedAddCommGroup F] [NormedSpace ℝ F] {s : Set E} {f : E → E} {f' : E → E →L[ℝ] E}
@@ -305,12 +305,12 @@ to the approximating linear map.
/-- Let `f` be a function which is sufficiently close (in the Lipschitz sense) to a given linear
map `A`. Then it expands the volume of any set by at most `m` for any `m > det A`. -/
theorem add_haar_image_le_mul_of_det_lt (A : E →L[ℝ] E) {m : ℝ≥0}
- (hm : Ennreal.ofReal (|A.det|) < m) :
+ (hm : ENNReal.ofReal (|A.det|) < m) :
∀ᶠ δ in 𝓝[>] (0 : ℝ≥0),
∀ (s : Set E) (f : E → E) (hf : ApproximatesLinearOn f A s δ), μ (f '' s) ≤ m * μ s :=
by
apply nhdsWithin_le_nhds
- let d := Ennreal.ofReal (|A.det|)
+ let d := ENNReal.ofReal (|A.det|)
-- construct a small neighborhood of `A '' (closed_ball 0 1)` with measure comparable to
-- the determinant of `A`.
obtain ⟨ε, hε, εpos⟩ :
@@ -338,7 +338,7 @@ theorem add_haar_image_le_mul_of_det_lt (A : E →L[ℝ] E) {m : ℝ≥0}
convert L1
exact (add_haar_image_continuous_linear_map _ _ _).symm
have I : d * μ (closed_ball 0 1) < m * μ (closed_ball 0 1) :=
- (Ennreal.mul_lt_mul_right (measure_closed_ball_pos μ _ zero_lt_one).ne'
+ (ENNReal.mul_lt_mul_right (measure_closed_ball_pos μ _ zero_lt_one).ne'
measure_closed_ball_lt_top.ne).2
hm
have H :
@@ -381,13 +381,13 @@ theorem add_haar_image_le_mul_of_det_lt (A : E →L[ℝ] E) {m : ℝ≥0}
calc
μ (f '' (s ∩ closed_ball x r)) ≤ μ ({f x} + r • (A '' closed_ball 0 1 + closed_ball 0 ε)) :=
measure_mono K
- _ = Ennreal.ofReal (r ^ finrank ℝ E) * μ (A '' closed_ball 0 1 + closed_ball 0 ε) := by
+ _ = ENNReal.ofReal (r ^ finrank ℝ E) * μ (A '' closed_ball 0 1 + closed_ball 0 ε) := by
simp only [abs_of_nonneg r0, add_haar_smul, image_add_left, abs_pow, singleton_add,
measure_preimage_add]
- _ ≤ Ennreal.ofReal (r ^ finrank ℝ E) * (m * μ (closed_ball 0 1)) :=
+ _ ≤ ENNReal.ofReal (r ^ finrank ℝ E) * (m * μ (closed_ball 0 1)) :=
by
rw [add_comm]
- exact Ennreal.mul_le_mul le_rfl hε.le
+ exact ENNReal.mul_le_mul le_rfl hε.le
_ = m * μ (closed_ball x r) :=
by
simp only [add_haar_closed_ball' _ _ r0]
@@ -418,17 +418,17 @@ theorem add_haar_image_le_mul_of_det_lt (A : E →L[ℝ] E) {m : ℝ≥0}
exact image_subset _ (subset_inter (subset.refl _) st)
_ ≤ ∑' x : t, μ (f '' (s ∩ closed_ball x (r x))) := measure_Union_le _
_ ≤ ∑' x : t, m * μ (closed_ball x (r x)) :=
- Ennreal.tsum_le_tsum fun x => I x (r x) (ts x.2) (rpos x x.2).le
+ ENNReal.tsum_le_tsum fun x => I x (r x) (ts x.2) (rpos x x.2).le
_ ≤ m * (μ s + a) := by
- rw [Ennreal.tsum_mul_left]
- exact Ennreal.mul_le_mul le_rfl μt
+ rw [ENNReal.tsum_mul_left]
+ exact ENNReal.mul_le_mul le_rfl μt
-- taking the limit in `a`, one obtains the conclusion
have L : tendsto (fun a => (m : ℝ≥0∞) * (μ s + a)) (𝓝[>] 0) (𝓝 (m * (μ s + 0))) :=
by
apply tendsto.mono_left _ nhdsWithin_le_nhds
- apply Ennreal.Tendsto.const_mul (tendsto_const_nhds.add tendsto_id)
- simp only [Ennreal.coe_ne_top, Ne.def, or_true_iff, not_false_iff]
+ apply ENNReal.Tendsto.const_mul (tendsto_const_nhds.add tendsto_id)
+ simp only [ENNReal.coe_ne_top, Ne.def, or_true_iff, not_false_iff]
rw [add_zero] at L
exact ge_of_tendsto L J
#align measure_theory.add_haar_image_le_mul_of_det_lt MeasureTheory.add_haar_image_le_mul_of_det_lt
@@ -436,7 +436,7 @@ theorem add_haar_image_le_mul_of_det_lt (A : E →L[ℝ] E) {m : ℝ≥0}
/-- Let `f` be a function which is sufficiently close (in the Lipschitz sense) to a given linear
map `A`. Then it expands the volume of any set by at least `m` for any `m < det A`. -/
theorem mul_le_add_haar_image_of_lt_det (A : E →L[ℝ] E) {m : ℝ≥0}
- (hm : (m : ℝ≥0∞) < Ennreal.ofReal (|A.det|)) :
+ (hm : (m : ℝ≥0∞) < ENNReal.ofReal (|A.det|)) :
∀ᶠ δ in 𝓝[>] (0 : ℝ≥0),
∀ (s : Set E) (f : E → E) (hf : ApproximatesLinearOn f A s δ),
(m : ℝ≥0∞) * μ s ≤ μ (f '' s) :=
@@ -448,17 +448,17 @@ theorem mul_le_add_haar_image_of_lt_det (A : E →L[ℝ] E) {m : ℝ≥0}
-- exclude first the trivial case where `m = 0`.
rcases eq_or_lt_of_le (zero_le m) with (rfl | mpos)
· apply eventually_of_forall
- simp only [forall_const, zero_mul, imp_true_iff, zero_le, Ennreal.coe_zero]
+ simp only [forall_const, zero_mul, imp_true_iff, zero_le, ENNReal.coe_zero]
have hA : A.det ≠ 0 := by
intro h
- simpa only [h, Ennreal.not_lt_zero, Ennreal.ofReal_zero, abs_zero] using hm
+ simpa only [h, ENNReal.not_lt_zero, ENNReal.ofReal_zero, abs_zero] using hm
-- let `B` be the continuous linear equiv version of `A`.
let B := A.to_continuous_linear_equiv_of_det_ne_zero hA
-- the determinant of `B.symm` is bounded by `m⁻¹`
- have I : Ennreal.ofReal (|(B.symm : E →L[ℝ] E).det|) < (m⁻¹ : ℝ≥0) :=
+ have I : ENNReal.ofReal (|(B.symm : E →L[ℝ] E).det|) < (m⁻¹ : ℝ≥0) :=
by
- simp only [Ennreal.ofReal, abs_inv, Real.toNNReal_inv, ContinuousLinearEquiv.det_coe_symm,
- ContinuousLinearMap.coe_toContinuousLinearEquivOfDetNeZero, Ennreal.coe_lt_coe] at hm⊢
+ simp only [ENNReal.ofReal, abs_inv, Real.toNNReal_inv, ContinuousLinearEquiv.det_coe_symm,
+ ContinuousLinearMap.coe_toContinuousLinearEquivOfDetNeZero, ENNReal.coe_lt_coe] at hm⊢
exact NNReal.inv_lt_inv mpos.ne' hm
-- therefore, we may apply `add_haar_image_le_mul_of_det_lt` to `B.symm` and `m⁻¹`.
obtain ⟨δ₀, δ₀pos, hδ₀⟩ :
@@ -507,11 +507,11 @@ theorem mul_le_add_haar_image_of_lt_det (A : E →L[ℝ] E) {m : ℝ≥0}
-- the condition to be checked can be reformulated in terms of the inverse maps
suffices H : μ (F.symm '' F.target) ≤ (m⁻¹ : ℝ≥0) * μ F.target
· change (m : ℝ≥0∞) * μ F.source ≤ μ F.target
- rwa [← F.symm_image_target_eq_source, mul_comm, ← Ennreal.le_div_iff_mul_le, div_eq_mul_inv,
- mul_comm, ← Ennreal.coe_inv mpos.ne']
+ rwa [← F.symm_image_target_eq_source, mul_comm, ← ENNReal.le_div_iff_mul_le, div_eq_mul_inv,
+ mul_comm, ← ENNReal.coe_inv mpos.ne']
· apply Or.inl
- simpa only [Ennreal.coe_eq_zero, Ne.def] using mpos.ne'
- · simp only [Ennreal.coe_ne_top, true_or_iff, Ne.def, not_false_iff]
+ simpa only [ENNReal.coe_eq_zero, Ne.def] using mpos.ne'
+ · simp only [ENNReal.coe_ne_top, true_or_iff, Ne.def, not_false_iff]
-- as `f⁻¹` is well approximated by `B⁻¹`, the conclusion follows from `hδ₀`
-- and our choice of `δ`.
exact hδ₀ _ _ ((hf'.to_inv h1δ).mono_num h2δ.le)
@@ -641,8 +641,8 @@ theorem add_haar_image_eq_zero_of_differentiableOn_of_add_haar_eq_zero (hf : Dif
by
intro A
let m : ℝ≥0 := Real.toNNReal (|A.det|) + 1
- have I : Ennreal.ofReal (|A.det|) < m := by
- simp only [Ennreal.ofReal, m, lt_add_iff_pos_right, zero_lt_one, Ennreal.coe_lt_coe]
+ have I : ENNReal.ofReal (|A.det|) < m := by
+ simp only [ENNReal.ofReal, m, lt_add_iff_pos_right, zero_lt_one, ENNReal.coe_lt_coe]
rcases((add_haar_image_le_mul_of_det_lt μ A I).And self_mem_nhdsWithin).exists with ⟨δ, h, h'⟩
exact ⟨δ, h', fun t ht => h t f ht⟩
choose δ hδ using this
@@ -664,12 +664,12 @@ theorem add_haar_image_eq_zero_of_differentiableOn_of_add_haar_eq_zero (hf : Dif
_ ≤ ∑' n, μ (f '' (s ∩ t n)) := measure_Union_le _
_ ≤ ∑' n, (Real.toNNReal (|(A n).det|) + 1 : ℝ≥0) * μ (s ∩ t n) :=
by
- apply Ennreal.tsum_le_tsum fun n => _
+ apply ENNReal.tsum_le_tsum fun n => _
apply (hδ (A n)).2
exact ht n
_ ≤ ∑' n, (Real.toNNReal (|(A n).det|) + 1 : ℝ≥0) * 0 :=
by
- refine' Ennreal.tsum_le_tsum fun n => Ennreal.mul_le_mul le_rfl _
+ refine' ENNReal.tsum_le_tsum fun n => ENNReal.mul_le_mul le_rfl _
exact le_trans (measure_mono (inter_subset_left _ _)) (le_of_eq hs)
_ = 0 := by simp only [tsum_zero, mul_zero]
@@ -693,8 +693,8 @@ theorem add_haar_image_eq_zero_of_det_fderiv_within_eq_zero_aux
by
intro A
let m : ℝ≥0 := Real.toNNReal (|A.det|) + ε
- have I : Ennreal.ofReal (|A.det|) < m := by
- simp only [Ennreal.ofReal, m, lt_add_iff_pos_right, εpos, Ennreal.coe_lt_coe]
+ have I : ENNReal.ofReal (|A.det|) < m := by
+ simp only [ENNReal.ofReal, m, lt_add_iff_pos_right, εpos, ENNReal.coe_lt_coe]
rcases((add_haar_image_le_mul_of_det_lt μ A I).And self_mem_nhdsWithin).exists with ⟨δ, h, h'⟩
exact ⟨δ, h', fun t ht => h t f ht⟩
choose δ hδ using this
@@ -715,7 +715,7 @@ theorem add_haar_image_eq_zero_of_det_fderiv_within_eq_zero_aux
_ ≤ ∑' n, μ (f '' (s ∩ t n)) := measure_Union_le _
_ ≤ ∑' n, (Real.toNNReal (|(A n).det|) + ε : ℝ≥0) * μ (s ∩ t n) :=
by
- apply Ennreal.tsum_le_tsum fun n => _
+ apply ENNReal.tsum_le_tsum fun n => _
apply (hδ (A n)).2
exact ht n
_ = ∑' n, ε * μ (s ∩ t n) := by
@@ -724,8 +724,8 @@ theorem add_haar_image_eq_zero_of_det_fderiv_within_eq_zero_aux
simp only [hy, h'f' y ys, Real.toNNReal_zero, abs_zero, zero_add]
_ ≤ ε * ∑' n, μ (closed_ball 0 R ∩ t n) :=
by
- rw [Ennreal.tsum_mul_left]
- refine' Ennreal.mul_le_mul le_rfl (Ennreal.tsum_le_tsum fun n => measure_mono _)
+ rw [ENNReal.tsum_mul_left]
+ refine' ENNReal.mul_le_mul le_rfl (ENNReal.tsum_le_tsum fun n => measure_mono _)
exact inter_subset_inter_left _ hs
_ = ε * μ (⋃ n, closed_ball 0 R ∩ t n) :=
by
@@ -735,7 +735,7 @@ theorem add_haar_image_eq_zero_of_det_fderiv_within_eq_zero_aux
exact measurable_set_closed_ball.inter (t_meas n)
_ ≤ ε * μ (closed_ball 0 R) := by
rw [← inter_Union]
- exact Ennreal.mul_le_mul le_rfl (measure_mono (inter_subset_left _ _))
+ exact ENNReal.mul_le_mul le_rfl (measure_mono (inter_subset_left _ _))
#align measure_theory.add_haar_image_eq_zero_of_det_fderiv_within_eq_zero_aux MeasureTheory.add_haar_image_eq_zero_of_det_fderiv_within_eq_zero_aux
@@ -765,9 +765,9 @@ theorem add_haar_image_eq_zero_of_det_fderiv_within_eq_zero
have :
tendsto (fun ε : ℝ≥0 => (ε : ℝ≥0∞) * μ (closed_ball 0 R)) (𝓝 0)
(𝓝 (((0 : ℝ≥0) : ℝ≥0∞) * μ (closed_ball 0 R))) :=
- Ennreal.Tendsto.mul_const (Ennreal.tendsto_coe.2 tendsto_id)
+ ENNReal.Tendsto.mul_const (ENNReal.tendsto_coe.2 tendsto_id)
(Or.inr measure_closed_ball_lt_top.Ne)
- simp only [zero_mul, Ennreal.coe_zero] at this
+ simp only [zero_mul, ENNReal.coe_zero] at this
exact tendsto.mono_left this nhdsWithin_le_nhds
apply le_antisymm _ (zero_le _)
apply ge_of_tendsto B
@@ -848,7 +848,7 @@ theorem aeMeasurableFderivWithin (hs : MeasurableSet s)
theorem aeMeasurableOfRealAbsDetFderivWithin (hs : MeasurableSet s)
(hf' : ∀ x ∈ s, HasFderivWithinAt f (f' x) s x) :
- AeMeasurable (fun x => Ennreal.ofReal (|(f' x).det|)) (μ.restrict s) :=
+ AeMeasurable (fun x => ENNReal.ofReal (|(f' x).det|)) (μ.restrict s) :=
by
apply ennreal.measurable_of_real.comp_ae_measurable
refine' continuous_abs.measurable.comp_ae_measurable _
@@ -894,7 +894,7 @@ directions, first up to controlled errors and then letting these errors tend to
theorem add_haar_image_le_lintegral_abs_det_fderiv_aux1 (hs : MeasurableSet s)
(hf' : ∀ x ∈ s, HasFderivWithinAt f (f' x) s x) {ε : ℝ≥0} (εpos : 0 < ε) :
- μ (f '' s) ≤ (∫⁻ x in s, Ennreal.ofReal (|(f' x).det|) ∂μ) + 2 * ε * μ s :=
+ μ (f '' s) ≤ (∫⁻ x in s, ENNReal.ofReal (|(f' x).det|) ∂μ) + 2 * ε * μ s :=
by
/- To bound `μ (f '' s)`, we cover `s` by sets where `f` is well-approximated by linear maps
`A n` (and where `f'` is almost everywhere close to `A n`), and then use that `f` expands the
@@ -905,12 +905,12 @@ theorem add_haar_image_le_lintegral_abs_det_fderiv_aux1 (hs : MeasurableSet s)
0 < δ ∧
(∀ B : E →L[ℝ] E, ‖B - A‖ ≤ δ → |B.det - A.det| ≤ ε) ∧
∀ (t : Set E) (g : E → E) (hf : ApproximatesLinearOn g A t δ),
- μ (g '' t) ≤ (Ennreal.ofReal (|A.det|) + ε) * μ t :=
+ μ (g '' t) ≤ (ENNReal.ofReal (|A.det|) + ε) * μ t :=
by
intro A
let m : ℝ≥0 := Real.toNNReal (|A.det|) + ε
- have I : Ennreal.ofReal (|A.det|) < m := by
- simp only [Ennreal.ofReal, m, lt_add_iff_pos_right, εpos, Ennreal.coe_lt_coe]
+ have I : ENNReal.ofReal (|A.det|) < m := by
+ simp only [ENNReal.ofReal, m, lt_add_iff_pos_right, εpos, ENNReal.coe_lt_coe]
rcases((add_haar_image_le_mul_of_det_lt μ A I).And self_mem_nhdsWithin).exists with ⟨δ, h, δpos⟩
obtain ⟨δ', δ'pos, hδ'⟩ : ∃ (δ' : ℝ)(H : 0 < δ'), ∀ B, dist B A < δ' → dist B.det A.det < ↑ε :=
continuous_at_iff.1 continuous_linear_map.continuous_det.continuous_at ε εpos
@@ -943,16 +943,16 @@ theorem add_haar_image_le_lintegral_abs_det_fderiv_aux1 (hs : MeasurableSet s)
rw [← image_Union, ← inter_Union]
exact image_subset f (subset_inter subset.rfl t_cover)
_ ≤ ∑' n, μ (f '' (s ∩ t n)) := measure_Union_le _
- _ ≤ ∑' n, (Ennreal.ofReal (|(A n).det|) + ε) * μ (s ∩ t n) :=
+ _ ≤ ∑' n, (ENNReal.ofReal (|(A n).det|) + ε) * μ (s ∩ t n) :=
by
- apply Ennreal.tsum_le_tsum fun n => _
+ apply ENNReal.tsum_le_tsum fun n => _
apply (hδ (A n)).2.2
exact ht n
- _ = ∑' n, ∫⁻ x in s ∩ t n, Ennreal.ofReal (|(A n).det|) + ε ∂μ := by
+ _ = ∑' n, ∫⁻ x in s ∩ t n, ENNReal.ofReal (|(A n).det|) + ε ∂μ := by
simp only [lintegral_const, MeasurableSet.univ, measure.restrict_apply, univ_inter]
- _ ≤ ∑' n, ∫⁻ x in s ∩ t n, Ennreal.ofReal (|(f' x).det|) + 2 * ε ∂μ :=
+ _ ≤ ∑' n, ∫⁻ x in s ∩ t n, ENNReal.ofReal (|(f' x).det|) + 2 * ε ∂μ :=
by
- apply Ennreal.tsum_le_tsum fun n => _
+ apply ENNReal.tsum_le_tsum fun n => _
apply lintegral_mono_ae
filter_upwards [(ht n).norm_fderiv_sub_le μ (hs.inter (t_meas n)) f' fun x hx =>
(hf' x hx.1).mono (inter_subset_left _ _)]
@@ -967,42 +967,42 @@ theorem add_haar_image_le_lintegral_abs_det_fderiv_aux1 (hs : MeasurableSet s)
_ ≤ |(f' x).det| + ε := add_le_add le_rfl ((hδ (A n)).2.1 _ hx)
calc
- Ennreal.ofReal (|(A n).det|) + ε ≤ Ennreal.ofReal (|(f' x).det| + ε) + ε :=
- add_le_add (Ennreal.ofReal_le_ofReal I) le_rfl
- _ = Ennreal.ofReal (|(f' x).det|) + 2 * ε := by
- simp only [Ennreal.ofReal_add, abs_nonneg, two_mul, add_assoc, NNReal.zero_le_coe,
- Ennreal.ofReal_coe_nNReal]
+ ENNReal.ofReal (|(A n).det|) + ε ≤ ENNReal.ofReal (|(f' x).det| + ε) + ε :=
+ add_le_add (ENNReal.ofReal_le_ofReal I) le_rfl
+ _ = ENNReal.ofReal (|(f' x).det|) + 2 * ε := by
+ simp only [ENNReal.ofReal_add, abs_nonneg, two_mul, add_assoc, NNReal.zero_le_coe,
+ ENNReal.ofReal_coe_nnreal]
- _ = ∫⁻ x in ⋃ n, s ∩ t n, Ennreal.ofReal (|(f' x).det|) + 2 * ε ∂μ :=
+ _ = ∫⁻ x in ⋃ n, s ∩ t n, ENNReal.ofReal (|(f' x).det|) + 2 * ε ∂μ :=
by
have M : ∀ n : ℕ, MeasurableSet (s ∩ t n) := fun n => hs.inter (t_meas n)
rw [lintegral_Union M]
exact pairwise_disjoint_mono t_disj fun n => inter_subset_right _ _
- _ = ∫⁻ x in s, Ennreal.ofReal (|(f' x).det|) + 2 * ε ∂μ :=
+ _ = ∫⁻ x in s, ENNReal.ofReal (|(f' x).det|) + 2 * ε ∂μ :=
by
have : s = ⋃ n, s ∩ t n := by
rw [← inter_Union]
exact subset.antisymm (subset_inter subset.rfl t_cover) (inter_subset_left _ _)
rw [← this]
- _ = (∫⁻ x in s, Ennreal.ofReal (|(f' x).det|) ∂μ) + 2 * ε * μ s := by
+ _ = (∫⁻ x in s, ENNReal.ofReal (|(f' x).det|) ∂μ) + 2 * ε * μ s := by
simp only [lintegral_add_right' _ aeMeasurableConst, set_lintegral_const]
#align measure_theory.add_haar_image_le_lintegral_abs_det_fderiv_aux1 MeasureTheory.add_haar_image_le_lintegral_abs_det_fderiv_aux1
theorem add_haar_image_le_lintegral_abs_det_fderiv_aux2 (hs : MeasurableSet s) (h's : μ s ≠ ∞)
(hf' : ∀ x ∈ s, HasFderivWithinAt f (f' x) s x) :
- μ (f '' s) ≤ ∫⁻ x in s, Ennreal.ofReal (|(f' x).det|) ∂μ :=
+ μ (f '' s) ≤ ∫⁻ x in s, ENNReal.ofReal (|(f' x).det|) ∂μ :=
by
-- We just need to let the error tend to `0` in the previous lemma.
have :
- tendsto (fun ε : ℝ≥0 => (∫⁻ x in s, Ennreal.ofReal (|(f' x).det|) ∂μ) + 2 * ε * μ s) (𝓝[>] 0)
- (𝓝 ((∫⁻ x in s, Ennreal.ofReal (|(f' x).det|) ∂μ) + 2 * (0 : ℝ≥0) * μ s)) :=
+ tendsto (fun ε : ℝ≥0 => (∫⁻ x in s, ENNReal.ofReal (|(f' x).det|) ∂μ) + 2 * ε * μ s) (𝓝[>] 0)
+ (𝓝 ((∫⁻ x in s, ENNReal.ofReal (|(f' x).det|) ∂μ) + 2 * (0 : ℝ≥0) * μ s)) :=
by
apply tendsto.mono_left _ nhdsWithin_le_nhds
refine' tendsto_const_nhds.add _
- refine' Ennreal.Tendsto.mul_const _ (Or.inr h's)
- exact Ennreal.Tendsto.const_mul (Ennreal.tendsto_coe.2 tendsto_id) (Or.inr Ennreal.coe_ne_top)
- simp only [add_zero, zero_mul, mul_zero, Ennreal.coe_zero] at this
+ refine' ENNReal.Tendsto.mul_const _ (Or.inr h's)
+ exact ENNReal.Tendsto.const_mul (ENNReal.tendsto_coe.2 tendsto_id) (Or.inr ENNReal.coe_ne_top)
+ simp only [add_zero, zero_mul, mul_zero, ENNReal.coe_zero] at this
apply ge_of_tendsto this
filter_upwards [self_mem_nhdsWithin]
rintro ε (εpos : 0 < ε)
@@ -1011,7 +1011,7 @@ theorem add_haar_image_le_lintegral_abs_det_fderiv_aux2 (hs : MeasurableSet s) (
theorem add_haar_image_le_lintegral_abs_det_fderiv (hs : MeasurableSet s)
(hf' : ∀ x ∈ s, HasFderivWithinAt f (f' x) s x) :
- μ (f '' s) ≤ ∫⁻ x in s, Ennreal.ofReal (|(f' x).det|) ∂μ :=
+ μ (f '' s) ≤ ∫⁻ x in s, ENNReal.ofReal (|(f' x).det|) ∂μ :=
by
/- We already know the result for finite-measure sets. We cover `s` by finite-measure sets using
`spanning_sets μ`, and apply the previous result to each of these parts. -/
@@ -1027,16 +1027,16 @@ theorem add_haar_image_le_lintegral_abs_det_fderiv (hs : MeasurableSet s)
by
conv_lhs => rw [A, image_Union]
exact measure_Union_le _
- _ ≤ ∑' n, ∫⁻ x in s ∩ u n, Ennreal.ofReal (|(f' x).det|) ∂μ :=
+ _ ≤ ∑' n, ∫⁻ x in s ∩ u n, ENNReal.ofReal (|(f' x).det|) ∂μ :=
by
- apply Ennreal.tsum_le_tsum fun n => _
+ apply ENNReal.tsum_le_tsum fun n => _
apply
add_haar_image_le_lintegral_abs_det_fderiv_aux2 μ (hs.inter (u_meas n)) _ fun x hx =>
(hf' x hx.1).mono (inter_subset_left _ _)
have : μ (u n) < ∞ :=
lt_of_le_of_lt (measure_mono (disjointed_subset _ _)) (measure_spanning_sets_lt_top μ n)
exact ne_of_lt (lt_of_le_of_lt (measure_mono (inter_subset_right _ _)) this)
- _ = ∫⁻ x in s, Ennreal.ofReal (|(f' x).det|) ∂μ :=
+ _ = ∫⁻ x in s, ENNReal.ofReal (|(f' x).det|) ∂μ :=
by
conv_rhs => rw [A]
rw [lintegral_Union]
@@ -1048,7 +1048,7 @@ theorem add_haar_image_le_lintegral_abs_det_fderiv (hs : MeasurableSet s)
theorem lintegral_abs_det_fderiv_le_add_haar_image_aux1 (hs : MeasurableSet s)
(hf' : ∀ x ∈ s, HasFderivWithinAt f (f' x) s x) (hf : InjOn f s) {ε : ℝ≥0} (εpos : 0 < ε) :
- (∫⁻ x in s, Ennreal.ofReal (|(f' x).det|) ∂μ) ≤ μ (f '' s) + 2 * ε * μ s :=
+ (∫⁻ x in s, ENNReal.ofReal (|(f' x).det|) ∂μ) ≤ μ (f '' s) + 2 * ε * μ s :=
by
/- To bound `∫⁻ x in s, ennreal.of_real (|(f' x).det|) ∂μ`, we cover `s` by sets where `f` is
well-approximated by linear maps `A n` (and where `f'` is almost everywhere close to `A n`),
@@ -1059,7 +1059,7 @@ theorem lintegral_abs_det_fderiv_le_add_haar_image_aux1 (hs : MeasurableSet s)
0 < δ ∧
(∀ B : E →L[ℝ] E, ‖B - A‖ ≤ δ → |B.det - A.det| ≤ ε) ∧
∀ (t : Set E) (g : E → E) (hf : ApproximatesLinearOn g A t δ),
- Ennreal.ofReal (|A.det|) * μ t ≤ μ (g '' t) + ε * μ t :=
+ ENNReal.ofReal (|A.det|) * μ t ≤ μ (g '' t) + ε * μ t :=
by
intro A
obtain ⟨δ', δ'pos, hδ'⟩ : ∃ (δ' : ℝ)(H : 0 < δ'), ∀ B, dist B A < δ' → dist B.det A.det < ↑ε :=
@@ -1074,14 +1074,14 @@ theorem lintegral_abs_det_fderiv_le_add_haar_image_aux1 (hs : MeasurableSet s)
exact hB.trans_lt (half_lt_self δ'pos)
rcases eq_or_ne A.det 0 with (hA | hA)
· refine' ⟨δ'', half_pos δ'pos, I'', _⟩
- simp only [hA, forall_const, zero_mul, Ennreal.ofReal_zero, imp_true_iff, zero_le, abs_zero]
+ simp only [hA, forall_const, zero_mul, ENNReal.ofReal_zero, imp_true_iff, zero_le, abs_zero]
let m : ℝ≥0 := Real.toNNReal (|A.det|) - ε
- have I : (m : ℝ≥0∞) < Ennreal.ofReal (|A.det|) :=
+ have I : (m : ℝ≥0∞) < ENNReal.ofReal (|A.det|) :=
by
- simp only [Ennreal.ofReal, WithTop.coe_sub]
- apply Ennreal.sub_lt_self Ennreal.coe_ne_top
- · simpa only [abs_nonpos_iff, Real.toNNReal_eq_zero, Ennreal.coe_eq_zero, Ne.def] using hA
- · simp only [εpos.ne', Ennreal.coe_eq_zero, Ne.def, not_false_iff]
+ simp only [ENNReal.ofReal, WithTop.coe_sub]
+ apply ENNReal.sub_lt_self ENNReal.coe_ne_top
+ · simpa only [abs_nonpos_iff, Real.toNNReal_eq_zero, ENNReal.coe_eq_zero, Ne.def] using hA
+ · simp only [εpos.ne', ENNReal.coe_eq_zero, Ne.def, not_false_iff]
rcases((mul_le_add_haar_image_of_lt_det μ A I).And self_mem_nhdsWithin).exists with ⟨δ, h, δpos⟩
refine' ⟨min δ δ'', lt_min δpos (half_pos δ'pos), _, _⟩
· intro B hB
@@ -1090,10 +1090,10 @@ theorem lintegral_abs_det_fderiv_le_add_haar_image_aux1 (hs : MeasurableSet s)
· intro t g htg
rcases eq_or_ne (μ t) ∞ with (ht | ht)
·
- simp only [ht, εpos.ne', WithTop.mul_top, Ennreal.coe_eq_zero, le_top, Ne.def,
- not_false_iff, Ennreal.add_top]
+ simp only [ht, εpos.ne', WithTop.mul_top, ENNReal.coe_eq_zero, le_top, Ne.def,
+ not_false_iff, ENNReal.add_top]
have := h t g (htg.mono_num (min_le_left _ _))
- rwa [WithTop.coe_sub, Ennreal.sub_mul, tsub_le_iff_right] at this
+ rwa [WithTop.coe_sub, ENNReal.sub_mul, tsub_le_iff_right] at this
simp only [ht, imp_true_iff, Ne.def, not_false_iff]
choose δ hδ using this
obtain ⟨t, A, t_disj, t_meas, t_cover, ht, -⟩ :
@@ -1108,16 +1108,16 @@ theorem lintegral_abs_det_fderiv_le_add_haar_image_aux1 (hs : MeasurableSet s)
rw [← inter_Union]
exact subset.antisymm (subset_inter subset.rfl t_cover) (inter_subset_left _ _)
calc
- (∫⁻ x in s, Ennreal.ofReal (|(f' x).det|) ∂μ) =
- ∑' n, ∫⁻ x in s ∩ t n, Ennreal.ofReal (|(f' x).det|) ∂μ :=
+ (∫⁻ x in s, ENNReal.ofReal (|(f' x).det|) ∂μ) =
+ ∑' n, ∫⁻ x in s ∩ t n, ENNReal.ofReal (|(f' x).det|) ∂μ :=
by
conv_lhs => rw [s_eq]
rw [lintegral_Union]
· exact fun n => hs.inter (t_meas n)
· exact pairwise_disjoint_mono t_disj fun n => inter_subset_right _ _
- _ ≤ ∑' n, ∫⁻ x in s ∩ t n, Ennreal.ofReal (|(A n).det|) + ε ∂μ :=
+ _ ≤ ∑' n, ∫⁻ x in s ∩ t n, ENNReal.ofReal (|(A n).det|) + ε ∂μ :=
by
- apply Ennreal.tsum_le_tsum fun n => _
+ apply ENNReal.tsum_le_tsum fun n => _
apply lintegral_mono_ae
filter_upwards [(ht n).norm_fderiv_sub_le μ (hs.inter (t_meas n)) f' fun x hx =>
(hf' x hx.1).mono (inter_subset_left _ _)]
@@ -1132,16 +1132,16 @@ theorem lintegral_abs_det_fderiv_le_add_haar_image_aux1 (hs : MeasurableSet s)
_ ≤ |(A n).det| + ε := add_le_add le_rfl ((hδ (A n)).2.1 _ hx)
calc
- Ennreal.ofReal (|(f' x).det|) ≤ Ennreal.ofReal (|(A n).det| + ε) :=
- Ennreal.ofReal_le_ofReal I
- _ = Ennreal.ofReal (|(A n).det|) + ε := by
- simp only [Ennreal.ofReal_add, abs_nonneg, NNReal.zero_le_coe, Ennreal.ofReal_coe_nNReal]
+ ENNReal.ofReal (|(f' x).det|) ≤ ENNReal.ofReal (|(A n).det| + ε) :=
+ ENNReal.ofReal_le_ofReal I
+ _ = ENNReal.ofReal (|(A n).det|) + ε := by
+ simp only [ENNReal.ofReal_add, abs_nonneg, NNReal.zero_le_coe, ENNReal.ofReal_coe_nnreal]
- _ = ∑' n, Ennreal.ofReal (|(A n).det|) * μ (s ∩ t n) + ε * μ (s ∩ t n) := by
+ _ = ∑' n, ENNReal.ofReal (|(A n).det|) * μ (s ∩ t n) + ε * μ (s ∩ t n) := by
simp only [set_lintegral_const, lintegral_add_right _ measurable_const]
_ ≤ ∑' n, μ (f '' (s ∩ t n)) + ε * μ (s ∩ t n) + ε * μ (s ∩ t n) :=
by
- refine' Ennreal.tsum_le_tsum fun n => add_le_add_right _ _
+ refine' ENNReal.tsum_le_tsum fun n => add_le_add_right _ _
exact (hδ (A n)).2.2 _ _ (ht n)
_ = μ (f '' s) + 2 * ε * μ s := by
conv_rhs => rw [s_eq]
@@ -1157,7 +1157,7 @@ theorem lintegral_abs_det_fderiv_le_add_haar_image_aux1 (hs : MeasurableSet s)
rw [measure_Union]; rotate_left
· exact pairwise_disjoint_mono t_disj fun i => inter_subset_right _ _
· exact fun i => hs.inter (t_meas i)
- rw [← Ennreal.tsum_mul_left, ← Ennreal.tsum_add]
+ rw [← ENNReal.tsum_mul_left, ← ENNReal.tsum_add]
congr 1
ext1 i
rw [mul_assoc, two_mul, add_assoc]
@@ -1166,7 +1166,7 @@ theorem lintegral_abs_det_fderiv_le_add_haar_image_aux1 (hs : MeasurableSet s)
theorem lintegral_abs_det_fderiv_le_add_haar_image_aux2 (hs : MeasurableSet s) (h's : μ s ≠ ∞)
(hf' : ∀ x ∈ s, HasFderivWithinAt f (f' x) s x) (hf : InjOn f s) :
- (∫⁻ x in s, Ennreal.ofReal (|(f' x).det|) ∂μ) ≤ μ (f '' s) :=
+ (∫⁻ x in s, ENNReal.ofReal (|(f' x).det|) ∂μ) ≤ μ (f '' s) :=
by
-- We just need to let the error tend to `0` in the previous lemma.
have :
@@ -1175,9 +1175,9 @@ theorem lintegral_abs_det_fderiv_le_add_haar_image_aux2 (hs : MeasurableSet s) (
by
apply tendsto.mono_left _ nhdsWithin_le_nhds
refine' tendsto_const_nhds.add _
- refine' Ennreal.Tendsto.mul_const _ (Or.inr h's)
- exact Ennreal.Tendsto.const_mul (Ennreal.tendsto_coe.2 tendsto_id) (Or.inr Ennreal.coe_ne_top)
- simp only [add_zero, zero_mul, mul_zero, Ennreal.coe_zero] at this
+ refine' ENNReal.Tendsto.mul_const _ (Or.inr h's)
+ exact ENNReal.Tendsto.const_mul (ENNReal.tendsto_coe.2 tendsto_id) (Or.inr ENNReal.coe_ne_top)
+ simp only [add_zero, zero_mul, mul_zero, ENNReal.coe_zero] at this
apply ge_of_tendsto this
filter_upwards [self_mem_nhdsWithin]
rintro ε (εpos : 0 < ε)
@@ -1186,7 +1186,7 @@ theorem lintegral_abs_det_fderiv_le_add_haar_image_aux2 (hs : MeasurableSet s) (
theorem lintegral_abs_det_fderiv_le_add_haar_image (hs : MeasurableSet s)
(hf' : ∀ x ∈ s, HasFderivWithinAt f (f' x) s x) (hf : InjOn f s) :
- (∫⁻ x in s, Ennreal.ofReal (|(f' x).det|) ∂μ) ≤ μ (f '' s) :=
+ (∫⁻ x in s, ENNReal.ofReal (|(f' x).det|) ∂μ) ≤ μ (f '' s) :=
by
/- We already know the result for finite-measure sets. We cover `s` by finite-measure sets using
`spanning_sets μ`, and apply the previous result to each of these parts. -/
@@ -1198,8 +1198,8 @@ theorem lintegral_abs_det_fderiv_le_add_haar_image (hs : MeasurableSet s)
have A : s = ⋃ n, s ∩ u n := by
rw [← inter_Union, unionᵢ_disjointed, Union_spanning_sets, inter_univ]
calc
- (∫⁻ x in s, Ennreal.ofReal (|(f' x).det|) ∂μ) =
- ∑' n, ∫⁻ x in s ∩ u n, Ennreal.ofReal (|(f' x).det|) ∂μ :=
+ (∫⁻ x in s, ENNReal.ofReal (|(f' x).det|) ∂μ) =
+ ∑' n, ∫⁻ x in s ∩ u n, ENNReal.ofReal (|(f' x).det|) ∂μ :=
by
conv_lhs => rw [A]
rw [lintegral_Union]
@@ -1208,7 +1208,7 @@ theorem lintegral_abs_det_fderiv_le_add_haar_image (hs : MeasurableSet s)
· exact pairwise_disjoint_mono (disjoint_disjointed _) fun n => inter_subset_right _ _
_ ≤ ∑' n, μ (f '' (s ∩ u n)) :=
by
- apply Ennreal.tsum_le_tsum fun n => _
+ apply ENNReal.tsum_le_tsum fun n => _
apply
lintegral_abs_det_fderiv_le_add_haar_image_aux2 μ (hs.inter (u_meas n)) _
(fun x hx => (hf' x hx.1).mono (inter_subset_left _ _)) (hf.mono (inter_subset_left _ _))
@@ -1237,7 +1237,7 @@ integral of `|(f' x).det|` on `s`.
Note that the measurability of `f '' s` is given by `measurable_image_of_fderiv_within`. -/
theorem lintegral_abs_det_fderiv_eq_add_haar_image (hs : MeasurableSet s)
(hf' : ∀ x ∈ s, HasFderivWithinAt f (f' x) s x) (hf : InjOn f s) :
- (∫⁻ x in s, Ennreal.ofReal (|(f' x).det|) ∂μ) = μ (f '' s) :=
+ (∫⁻ x in s, ENNReal.ofReal (|(f' x).det|) ∂μ) = μ (f '' s) :=
le_antisymm (lintegral_abs_det_fderiv_le_add_haar_image μ hs hf' hf)
(add_haar_image_le_lintegral_abs_det_fderiv μ hs hf')
#align measure_theory.lintegral_abs_det_fderiv_eq_add_haar_image MeasureTheory.lintegral_abs_det_fderiv_eq_add_haar_image
@@ -1251,7 +1251,7 @@ function `s.restrict f`, see `restrict_map_with_density_abs_det_fderiv_eq_add_ha
-/
theorem map_withDensity_abs_det_fderiv_eq_add_haar (hs : MeasurableSet s)
(hf' : ∀ x ∈ s, HasFderivWithinAt f (f' x) s x) (hf : InjOn f s) (h'f : Measurable f) :
- Measure.map f ((μ.restrict s).withDensity fun x => Ennreal.ofReal (|(f' x).det|)) =
+ Measure.map f ((μ.restrict s).withDensity fun x => ENNReal.ofReal (|(f' x).det|)) =
μ.restrict (f '' s) :=
by
apply measure.ext fun t ht => _
@@ -1271,7 +1271,7 @@ see `map_with_density_abs_det_fderiv_eq_add_haar`.
-/
theorem restrict_map_withDensity_abs_det_fderiv_eq_add_haar (hs : MeasurableSet s)
(hf' : ∀ x ∈ s, HasFderivWithinAt f (f' x) s x) (hf : InjOn f s) :
- Measure.map (s.restrict f) (comap coe (μ.withDensity fun x => Ennreal.ofReal (|(f' x).det|))) =
+ Measure.map (s.restrict f) (comap coe (μ.withDensity fun x => ENNReal.ofReal (|(f' x).det|))) =
μ.restrict (f '' s) :=
by
obtain ⟨u, u_meas, uf⟩ : ∃ u, Measurable u ∧ eq_on u f s := by
@@ -1284,7 +1284,7 @@ theorem restrict_map_withDensity_abs_det_fderiv_eq_add_haar (hs : MeasurableSet
(hf' x hx).congr (fun y hy => uf hy) (uf hx)
set F : s → E := u ∘ coe with hF
have A :
- measure.map F (comap coe (μ.with_density fun x => Ennreal.ofReal (|(f' x).det|))) =
+ measure.map F (comap coe (μ.with_density fun x => ENNReal.ofReal (|(f' x).det|))) =
μ.restrict (u '' s) :=
by
rw [hF, ← measure.map_map u_meas measurable_subtype_coe, map_comap_subtype_coe hs,
@@ -1306,7 +1306,7 @@ injective and differentiable on a measurable set `s`, then the Lebesgue integral
Note that the measurability of `f '' s` is given by `measurable_image_of_fderiv_within`. -/
theorem lintegral_image_eq_lintegral_abs_det_fderiv_mul (hs : MeasurableSet s)
(hf' : ∀ x ∈ s, HasFderivWithinAt f (f' x) s x) (hf : InjOn f s) (g : E → ℝ≥0∞) :
- (∫⁻ x in f '' s, g x ∂μ) = ∫⁻ x in s, Ennreal.ofReal (|(f' x).det|) * g (f x) ∂μ :=
+ (∫⁻ x in f '' s, g x ∂μ) = ∫⁻ x in s, ENNReal.ofReal (|(f' x).det|) * g (f x) ∂μ :=
by
rw [← restrict_map_with_density_abs_det_fderiv_eq_add_haar μ hs hf' hf,
(measurable_embedding_of_fderiv_within hs hf' hf).lintegral_map]
@@ -1315,7 +1315,7 @@ theorem lintegral_image_eq_lintegral_abs_det_fderiv_mul (hs : MeasurableSet s)
rw [← (MeasurableEmbedding.subtype_coe hs).lintegral_map, map_comap_subtype_coe hs,
set_lintegral_with_density_eq_set_lintegral_mul_non_measurable₀ _ _ _ hs]
· rfl
- · simp only [eventually_true, Ennreal.ofReal_lt_top]
+ · simp only [eventually_true, ENNReal.ofReal_lt_top]
· exact ae_measurable_of_real_abs_det_fderiv_within μ hs hf'
#align measure_theory.lintegral_image_eq_lintegral_abs_det_fderiv_mul MeasureTheory.lintegral_image_eq_lintegral_abs_det_fderiv_mul
@@ -1331,7 +1331,7 @@ theorem integrableOn_image_iff_integrableOn_abs_det_fderiv_smul (hs : Measurable
(measurable_embedding_of_fderiv_within hs hf' hf).integrable_map_iff]
change integrable ((g ∘ f) ∘ (coe : s → E)) _ ↔ _
rw [← (MeasurableEmbedding.subtype_coe hs).integrable_map_iff, map_comap_subtype_coe hs]
- simp only [Ennreal.ofReal]
+ simp only [ENNReal.ofReal]
rw [restrict_with_density hs, integrable_with_density_iff_integrable_coe_smul₀, integrable_on]
· congr 2 with x
rw [Real.coe_toNNReal]
@@ -1349,7 +1349,7 @@ theorem integral_image_eq_integral_abs_det_fderiv_smul [CompleteSpace F] (hs : M
rw [← restrict_map_with_density_abs_det_fderiv_eq_add_haar μ hs hf' hf,
(measurable_embedding_of_fderiv_within hs hf' hf).integral_map]
have : ∀ x : s, g (s.restrict f x) = (g ∘ f) x := fun x => rfl
- simp only [this, Ennreal.ofReal]
+ simp only [this, ENNReal.ofReal]
rw [← (MeasurableEmbedding.subtype_coe hs).integral_map, map_comap_subtype_coe hs,
set_integral_withDensity_eq_set_integral_smul₀
(ae_measurable_to_nnreal_abs_det_fderiv_within μ hs hf') _ hs]
mathlib commit https://github.com/leanprover-community/mathlib/commit/271bf175e6c51b8d31d6c0107b7bb4a967c7277e
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Sébastien Gouëzel
! This file was ported from Lean 3 source module measure_theory.function.jacobian
-! leanprover-community/mathlib commit f2ce6086713c78a7f880485f7917ea547a215982
+! leanprover-community/mathlib commit b2ff9a3d7a15fd5b0f060b135421d6a89a999c2f
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -481,7 +481,7 @@ theorem mul_le_add_haar_image_of_lt_det (A : E →L[ℝ] E) {m : ℝ≥0}
· simp only [h, true_or_iff, eventually_const]
simp only [h, false_or_iff]
apply Iio_mem_nhds
- simpa only [h, false_or_iff, NNReal.inv_pos] using B.subsingleton_or_nnnorm_symm_pos
+ simpa only [h, false_or_iff, inv_pos] using B.subsingleton_or_nnnorm_symm_pos
have L2 :
∀ᶠ δ in 𝓝 (0 : ℝ≥0), ‖(B.symm : E →L[ℝ] E)‖₊ * (‖(B.symm : E →L[ℝ] E)‖₊⁻¹ - δ)⁻¹ * δ < δ₀ :=
by
mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
set_integral
with setIntegral
(#12215)
Done with a global search and replace, and then (to fix the #align
lines), replace (#align \S*)setIntegral
with $1set_integral
.
@@ -1204,7 +1204,7 @@ theorem integral_image_eq_integral_abs_det_fderiv_smul (hs : MeasurableSet s)
(measurableEmbedding_of_fderivWithin hs hf' hf).integral_map]
simp only [Set.restrict_apply, ← Function.comp_apply (f := g), ENNReal.ofReal]
rw [← (MeasurableEmbedding.subtype_coe hs).integral_map, map_comap_subtype_coe hs,
- set_integral_withDensity_eq_set_integral_smul₀
+ setIntegral_withDensity_eq_setIntegral_smul₀
(aemeasurable_toNNReal_abs_det_fderivWithin μ hs hf') _ hs]
congr with x
rw [NNReal.smul_def, Real.coe_toNNReal _ (abs_nonneg (f' x).det)]
@@ -163,7 +163,7 @@ theorem exists_closed_cover_approximatesLinearOn_of_hasFDerivWithinAt [SecondCou
congr 1
simp only [ContinuousLinearMap.coe_sub', map_sub, Pi.sub_apply]
abel
- _ ≤ ‖f y - f x - (f' x) (y - x)‖ + ‖(f' x - f' z) (y - x)‖ := (norm_add_le _ _)
+ _ ≤ ‖f y - f x - (f' x) (y - x)‖ + ‖(f' x - f' z) (y - x)‖ := norm_add_le _ _
_ ≤ ε * ‖y - x‖ + ‖f' x - f' z‖ * ‖y - x‖ := by
refine' add_le_add (hδ _) (ContinuousLinearMap.le_opNorm _ _)
rw [inter_comm]
@@ -209,7 +209,7 @@ theorem exists_closed_cover_approximatesLinearOn_of_hasFDerivWithinAt [SecondCou
refine' yM.2 _ ⟨hx.1, _⟩
calc
dist x y ≤ dist x (d p) + dist y (d p) := dist_triangle_right _ _ _
- _ ≤ u n / 3 + u n / 3 := (add_le_add hx.2.2 hy.2.2)
+ _ ≤ u n / 3 + u n / 3 := add_le_add hx.2.2 hy.2.2
_ < u n := by linarith [u_pos n]
-- the sets `K n z p` are also closed, again by design.
have K_closed : ∀ (n) (z : T) (p), IsClosed (K n z p) := fun n z p =>
@@ -372,7 +372,7 @@ theorem addHaar_image_le_mul_of_det_lt (A : E →L[ℝ] E) {m : ℝ≥0}
apply measure_mono
rw [← image_iUnion, ← inter_iUnion]
exact image_subset _ (subset_inter (Subset.refl _) st)
- _ ≤ ∑' x : t, μ (f '' (s ∩ closedBall x (r x))) := (measure_iUnion_le _)
+ _ ≤ ∑' x : t, μ (f '' (s ∩ closedBall x (r x))) := measure_iUnion_le _
_ ≤ ∑' x : t, m * μ (closedBall x (r x)) :=
(ENNReal.tsum_le_tsum fun x => I x (r x) (ts x.2) (rpos x x.2).le)
_ ≤ m * (μ s + a) := by rw [ENNReal.tsum_mul_left]; exact mul_le_mul_left' μt _
@@ -512,7 +512,7 @@ theorem _root_.ApproximatesLinearOn.norm_fderiv_sub_le {A : E →L[ℝ] E} {δ :
have norm_a : ‖a‖ ≤ ‖z‖ + ε :=
calc
‖a‖ = ‖z + (a - z)‖ := by simp only [add_sub_cancel]
- _ ≤ ‖z‖ + ‖a - z‖ := (norm_add_le _ _)
+ _ ≤ ‖z‖ + ‖a - z‖ := norm_add_le _ _
_ ≤ ‖z‖ + ε := add_le_add_left (mem_closedBall_iff_norm.1 az) _
-- use the approximation properties to control `(f' x - A) a`, and then `(f' x - A) z` as `z` is
-- close to `a`.
@@ -524,7 +524,7 @@ theorem _root_.ApproximatesLinearOn.norm_fderiv_sub_le {A : E →L[ℝ] E} {δ :
congr 1
simp only [ya, add_sub_cancel_left, sub_sub_sub_cancel_left, ContinuousLinearMap.coe_sub',
eq_self_iff_true, sub_left_inj, Pi.sub_apply, ContinuousLinearMap.map_smul, smul_sub]
- _ ≤ ‖f y - f x - A (y - x)‖ + ‖f y - f x - (f' x) (y - x)‖ := (norm_sub_le _ _)
+ _ ≤ ‖f y - f x - A (y - x)‖ + ‖f y - f x - (f' x) (y - x)‖ := norm_sub_le _ _
_ ≤ δ * ‖y - x‖ + ε * ‖y - x‖ := (add_le_add (hf _ ys _ xs) (hρ ⟨rρ hy, ys⟩))
_ = r * (δ + ε) * ‖a‖ := by
simp only [ya, add_sub_cancel_left, norm_smul, Real.norm_eq_abs, abs_of_nonneg rpos.le]
@@ -536,7 +536,7 @@ theorem _root_.ApproximatesLinearOn.norm_fderiv_sub_le {A : E →L[ℝ] E} {δ :
congr 1
simp only [ContinuousLinearMap.coe_sub', map_sub, Pi.sub_apply]
abel
- _ ≤ ‖(f' x - A) a‖ + ‖(f' x - A) (z - a)‖ := (norm_add_le _ _)
+ _ ≤ ‖(f' x - A) a‖ + ‖(f' x - A) (z - a)‖ := norm_add_le _ _
_ ≤ (δ + ε) * (‖z‖ + ε) + ‖f' x - A‖ * ‖z - a‖ := by
apply add_le_add
· rw [mul_assoc] at I; exact (mul_le_mul_left rpos).1 I
@@ -585,7 +585,7 @@ theorem addHaar_image_eq_zero_of_differentiableOn_of_addHaar_eq_zero (hf : Diffe
apply measure_mono
rw [← image_iUnion, ← inter_iUnion]
exact image_subset f (subset_inter Subset.rfl t_cover)
- _ ≤ ∑' n, μ (f '' (s ∩ t n)) := (measure_iUnion_le _)
+ _ ≤ ∑' n, μ (f '' (s ∩ t n)) := measure_iUnion_le _
_ ≤ ∑' n, (Real.toNNReal |(A n).det| + 1 : ℝ≥0) * μ (s ∩ t n) := by
apply ENNReal.tsum_le_tsum fun n => ?_
apply (hδ (A n)).2
@@ -627,7 +627,7 @@ theorem addHaar_image_eq_zero_of_det_fderivWithin_eq_zero_aux
apply measure_mono
rw [← image_iUnion, ← inter_iUnion]
exact image_subset f (subset_inter Subset.rfl t_cover)
- _ ≤ ∑' n, μ (f '' (s ∩ t n)) := (measure_iUnion_le _)
+ _ ≤ ∑' n, μ (f '' (s ∩ t n)) := measure_iUnion_le _
_ ≤ ∑' n, (Real.toNNReal |(A n).det| + ε : ℝ≥0) * μ (s ∩ t n) := by
apply ENNReal.tsum_le_tsum fun n => ?_
apply (hδ (A n)).2
@@ -841,7 +841,7 @@ theorem addHaar_image_le_lintegral_abs_det_fderiv_aux1 (hs : MeasurableSet s)
apply measure_mono
rw [← image_iUnion, ← inter_iUnion]
exact image_subset f (subset_inter Subset.rfl t_cover)
- _ ≤ ∑' n, μ (f '' (s ∩ t n)) := (measure_iUnion_le _)
+ _ ≤ ∑' n, μ (f '' (s ∩ t n)) := measure_iUnion_le _
_ ≤ ∑' n, (ENNReal.ofReal |(A n).det| + ε) * μ (s ∩ t n) := by
apply ENNReal.tsum_le_tsum fun n => ?_
apply (hδ (A n)).2.2
@@ -857,7 +857,7 @@ theorem addHaar_image_le_lintegral_abs_det_fderiv_aux1 (hs : MeasurableSet s)
have I : |(A n).det| ≤ |(f' x).det| + ε :=
calc
|(A n).det| = |(f' x).det - ((f' x).det - (A n).det)| := by congr 1; abel
- _ ≤ |(f' x).det| + |(f' x).det - (A n).det| := (abs_sub _ _)
+ _ ≤ |(f' x).det| + |(f' x).det - (A n).det| := abs_sub _ _
_ ≤ |(f' x).det| + ε := add_le_add le_rfl ((hδ (A n)).2.1 _ hx)
calc
ENNReal.ofReal |(A n).det| + ε ≤ ENNReal.ofReal (|(f' x).det| + ε) + ε :=
@@ -1001,7 +1001,7 @@ theorem lintegral_abs_det_fderiv_le_addHaar_image_aux1 (hs : MeasurableSet s)
have I : |(f' x).det| ≤ |(A n).det| + ε :=
calc
|(f' x).det| = |(A n).det + ((f' x).det - (A n).det)| := by congr 1; abel
- _ ≤ |(A n).det| + |(f' x).det - (A n).det| := (abs_add _ _)
+ _ ≤ |(A n).det| + |(f' x).det - (A n).det| := abs_add _ _
_ ≤ |(A n).det| + ε := add_le_add le_rfl ((hδ (A n)).2.1 _ hx)
calc
ENNReal.ofReal |(f' x).det| ≤ ENNReal.ofReal (|(A n).det| + ε) :=
@@ -154,7 +154,7 @@ theorem exists_closed_cover_approximatesLinearOn_of_hasFDerivWithinAt [SecondCou
simpa only [sub_pos] using mem_ball_iff_norm.mp hz
obtain ⟨δ, δpos, hδ⟩ :
∃ (δ : ℝ), 0 < δ ∧ ball x δ ∩ s ⊆ {y | ‖f y - f x - (f' x) (y - x)‖ ≤ ε * ‖y - x‖} :=
- Metric.mem_nhdsWithin_iff.1 ((hf' x xs).isLittleO.definition εpos)
+ Metric.mem_nhdsWithin_iff.1 ((hf' x xs).isLittleO.def εpos)
obtain ⟨n, hn⟩ : ∃ n, u n < δ := ((tendsto_order.1 u_lim).2 _ δpos).exists
refine' ⟨n, ⟨z, zT⟩, ⟨xs, _⟩⟩
intro y hy
@@ -493,7 +493,7 @@ theorem _root_.ApproximatesLinearOn.norm_fderiv_sub_le {A : E →L[ℝ] E} {δ :
(measure_closedBall_pos μ z εpos).ne'
obtain ⟨ρ, ρpos, hρ⟩ :
∃ ρ > 0, ball x ρ ∩ s ⊆ {y : E | ‖f y - f x - (f' x) (y - x)‖ ≤ ε * ‖y - x‖} :=
- mem_nhdsWithin_iff.1 ((hf' x xs).isLittleO.definition εpos)
+ mem_nhdsWithin_iff.1 ((hf' x xs).isLittleO.def εpos)
-- for small enough `r`, the rescaled ball `r • closedBall z ε` is included in the set where
-- `f y - f x` is well approximated by `f' x (y - x)`.
have B₂ : ∀ᶠ r in 𝓝[>] (0 : ℝ), {x} + r • closedBall z ε ⊆ ball x ρ := by
Purely automatic replacement. If this is in any way controversial; I'm happy to just close this PR.
@@ -770,7 +770,7 @@ theorem aemeasurable_toNNReal_abs_det_fderivWithin (hs : MeasurableSet s)
#align measure_theory.ae_measurable_to_nnreal_abs_det_fderiv_within MeasureTheory.aemeasurable_toNNReal_abs_det_fderivWithin
/-- If a function is differentiable and injective on a measurable set,
-then the image is measurable.-/
+then the image is measurable. -/
theorem measurable_image_of_fderivWithin (hs : MeasurableSet s)
(hf' : ∀ x ∈ s, HasFDerivWithinAt f (f' x) s x) (hf : InjOn f s) : MeasurableSet (f '' s) :=
haveI : DifferentiableOn ℝ f s := fun x hx => (hf' x hx).differentiableWithinAt
@@ -380,7 +380,7 @@ theorem addHaar_image_le_mul_of_det_lt (A : E →L[ℝ] E) {m : ℝ≥0}
have L : Tendsto (fun a => (m : ℝ≥0∞) * (μ s + a)) (𝓝[>] 0) (𝓝 (m * (μ s + 0))) := by
apply Tendsto.mono_left _ nhdsWithin_le_nhds
apply ENNReal.Tendsto.const_mul (tendsto_const_nhds.add tendsto_id)
- simp only [ENNReal.coe_ne_top, Ne.def, or_true_iff, not_false_iff]
+ simp only [ENNReal.coe_ne_top, Ne, or_true_iff, not_false_iff]
rw [add_zero] at L
exact ge_of_tendsto L J
#align measure_theory.add_haar_image_le_mul_of_det_lt MeasureTheory.addHaar_image_le_mul_of_det_lt
@@ -437,7 +437,7 @@ theorem mul_le_addHaar_image_of_lt_det (A : E →L[ℝ] E) {m : ℝ≥0}
· simpa only [H, zero_mul] using tendsto_const_nhds
refine' Tendsto.mul (tendsto_const_nhds.mul _) tendsto_id
refine' (Tendsto.sub tendsto_const_nhds tendsto_id).inv₀ _
- simpa only [tsub_zero, inv_eq_zero, Ne.def] using H
+ simpa only [tsub_zero, inv_eq_zero, Ne] using H
simp only [mul_zero] at this
exact (tendsto_order.1 this).2 δ₀ δ₀pos
-- let `δ` be small enough, and `f` approximated by `B` up to `δ`.
@@ -451,8 +451,8 @@ theorem mul_le_addHaar_image_of_lt_det (A : E →L[ℝ] E) {m : ℝ≥0}
rwa [← F.symm_image_target_eq_source, mul_comm, ← ENNReal.le_div_iff_mul_le, div_eq_mul_inv,
mul_comm, ← ENNReal.coe_inv mpos.ne']
· apply Or.inl
- simpa only [ENNReal.coe_eq_zero, Ne.def] using mpos.ne'
- · simp only [ENNReal.coe_ne_top, true_or_iff, Ne.def, not_false_iff]
+ simpa only [ENNReal.coe_eq_zero, Ne] using mpos.ne'
+ · simp only [ENNReal.coe_ne_top, true_or_iff, Ne, not_false_iff]
-- as `f⁻¹` is well approximated by `B⁻¹`, the conclusion follows from `hδ₀`
-- and our choice of `δ`.
exact hδ₀ _ _ ((hf'.to_inv h1δ).mono_num h2δ.le)
@@ -959,8 +959,8 @@ theorem lintegral_abs_det_fderiv_le_addHaar_image_aux1 (hs : MeasurableSet s)
have I : (m : ℝ≥0∞) < ENNReal.ofReal |A.det| := by
simp only [m, ENNReal.ofReal, ENNReal.coe_sub]
apply ENNReal.sub_lt_self ENNReal.coe_ne_top
- · simpa only [abs_nonpos_iff, Real.toNNReal_eq_zero, ENNReal.coe_eq_zero, Ne.def] using hA
- · simp only [εpos.ne', ENNReal.coe_eq_zero, Ne.def, not_false_iff]
+ · simpa only [abs_nonpos_iff, Real.toNNReal_eq_zero, ENNReal.coe_eq_zero, Ne] using hA
+ · simp only [εpos.ne', ENNReal.coe_eq_zero, Ne, not_false_iff]
rcases ((mul_le_addHaar_image_of_lt_det μ A I).and self_mem_nhdsWithin).exists with ⟨δ, h, δpos⟩
refine' ⟨min δ δ'', lt_min δpos (half_pos δ'pos), _, _⟩
· intro B hB
@@ -968,11 +968,11 @@ theorem lintegral_abs_det_fderiv_le_addHaar_image_aux1 (hs : MeasurableSet s)
simp only [le_refl, NNReal.coe_min, min_le_iff, or_true_iff]
· intro t g htg
rcases eq_or_ne (μ t) ∞ with (ht | ht)
- · simp only [ht, εpos.ne', ENNReal.mul_top, ENNReal.coe_eq_zero, le_top, Ne.def,
+ · simp only [ht, εpos.ne', ENNReal.mul_top, ENNReal.coe_eq_zero, le_top, Ne,
not_false_iff, _root_.add_top]
have := h t g (htg.mono_num (min_le_left _ _))
rwa [ENNReal.coe_sub, ENNReal.sub_mul, tsub_le_iff_right] at this
- simp only [ht, imp_true_iff, Ne.def, not_false_iff]
+ simp only [ht, imp_true_iff, Ne, not_false_iff]
choose δ hδ using this
obtain ⟨t, A, t_disj, t_meas, t_cover, ht, -⟩ :
∃ (t : ℕ → Set E) (A : ℕ → E →L[ℝ] E),
mul
-div
cancellation lemmas (#11530)
Lemma names around cancellation of multiplication and division are a mess.
This PR renames a handful of them according to the following table (each big row contains the multiplicative statement, then the three rows contain the GroupWithZero
lemma name, the Group
lemma, the AddGroup
lemma name).
| Statement | New name | Old name | |
@@ -329,7 +329,7 @@ theorem addHaar_image_le_mul_of_det_lt (A : E →L[ℝ] E) {m : ℝ≥0}
apply Set.mem_add.2 ⟨A (z - x), _, f z - f x - A (z - x) + f x, _, _⟩
· apply mem_image_of_mem
simpa only [dist_eq_norm, mem_closedBall, mem_closedBall_zero_iff, sub_zero] using zr
- · rw [mem_closedBall_iff_norm, add_sub_cancel]
+ · rw [mem_closedBall_iff_norm, add_sub_cancel_right]
calc
‖f z - f x - A (z - x)‖ ≤ δ * ‖z - x‖ := hf _ zs _ xs
_ ≤ ε * r := by gcongr
@@ -511,7 +511,7 @@ theorem _root_.ApproximatesLinearOn.norm_fderiv_sub_le {A : E →L[ℝ] E} {δ :
exact ⟨a, az, by simp only [ha, add_neg_cancel_left]⟩
have norm_a : ‖a‖ ≤ ‖z‖ + ε :=
calc
- ‖a‖ = ‖z + (a - z)‖ := by simp only [add_sub_cancel'_right]
+ ‖a‖ = ‖z + (a - z)‖ := by simp only [add_sub_cancel]
_ ≤ ‖z‖ + ‖a - z‖ := (norm_add_le _ _)
_ ≤ ‖z‖ + ε := add_le_add_left (mem_closedBall_iff_norm.1 az) _
-- use the approximation properties to control `(f' x - A) a`, and then `(f' x - A) z` as `z` is
@@ -522,12 +522,12 @@ theorem _root_.ApproximatesLinearOn.norm_fderiv_sub_le {A : E →L[ℝ] E} {δ :
simp only [ContinuousLinearMap.map_smul, norm_smul, Real.norm_eq_abs, abs_of_nonneg rpos.le]
_ = ‖f y - f x - A (y - x) - (f y - f x - (f' x) (y - x))‖ := by
congr 1
- simp only [ya, add_sub_cancel', sub_sub_sub_cancel_left, ContinuousLinearMap.coe_sub',
+ simp only [ya, add_sub_cancel_left, sub_sub_sub_cancel_left, ContinuousLinearMap.coe_sub',
eq_self_iff_true, sub_left_inj, Pi.sub_apply, ContinuousLinearMap.map_smul, smul_sub]
_ ≤ ‖f y - f x - A (y - x)‖ + ‖f y - f x - (f' x) (y - x)‖ := (norm_sub_le _ _)
_ ≤ δ * ‖y - x‖ + ε * ‖y - x‖ := (add_le_add (hf _ ys _ xs) (hρ ⟨rρ hy, ys⟩))
_ = r * (δ + ε) * ‖a‖ := by
- simp only [ya, add_sub_cancel', norm_smul, Real.norm_eq_abs, abs_of_nonneg rpos.le]
+ simp only [ya, add_sub_cancel_left, norm_smul, Real.norm_eq_abs, abs_of_nonneg rpos.le]
ring
_ ≤ r * (δ + ε) * (‖z‖ + ε) :=
mul_le_mul_of_nonneg_left norm_a (mul_nonneg rpos.le (add_nonneg δ.2 εpos.le))
@@ -154,7 +154,7 @@ theorem exists_closed_cover_approximatesLinearOn_of_hasFDerivWithinAt [SecondCou
simpa only [sub_pos] using mem_ball_iff_norm.mp hz
obtain ⟨δ, δpos, hδ⟩ :
∃ (δ : ℝ), 0 < δ ∧ ball x δ ∩ s ⊆ {y | ‖f y - f x - (f' x) (y - x)‖ ≤ ε * ‖y - x‖} :=
- Metric.mem_nhdsWithin_iff.1 ((hf' x xs).isLittleO.def εpos)
+ Metric.mem_nhdsWithin_iff.1 ((hf' x xs).isLittleO.definition εpos)
obtain ⟨n, hn⟩ : ∃ n, u n < δ := ((tendsto_order.1 u_lim).2 _ δpos).exists
refine' ⟨n, ⟨z, zT⟩, ⟨xs, _⟩⟩
intro y hy
@@ -493,7 +493,7 @@ theorem _root_.ApproximatesLinearOn.norm_fderiv_sub_le {A : E →L[ℝ] E} {δ :
(measure_closedBall_pos μ z εpos).ne'
obtain ⟨ρ, ρpos, hρ⟩ :
∃ ρ > 0, ball x ρ ∩ s ⊆ {y : E | ‖f y - f x - (f' x) (y - x)‖ ≤ ε * ‖y - x‖} :=
- mem_nhdsWithin_iff.1 ((hf' x xs).isLittleO.def εpos)
+ mem_nhdsWithin_iff.1 ((hf' x xs).isLittleO.definition εpos)
-- for small enough `r`, the rescaled ball `r • closedBall z ε` is included in the set where
-- `f y - f x` is well approximated by `f' x (y - x)`.
have B₂ : ∀ᶠ r in 𝓝[>] (0 : ℝ), {x} + r • closedBall z ε ⊆ ball x ρ := by
filter_upwards
(#11208)
This is presumably not exhaustive, but covers about a hundred instances.
Style opinions (e.g., why a particular change is great/not a good idea) are very welcome; I'm still forming my own.
@@ -397,7 +397,7 @@ theorem mul_le_addHaar_image_of_lt_det (A : E →L[ℝ] E) {m : ℝ≥0}
-- `addHaar_image_le_mul_of_det_lt` applied to `f⁻¹` and `A⁻¹`.
-- exclude first the trivial case where `m = 0`.
rcases eq_or_lt_of_le (zero_le m) with (rfl | mpos)
- · apply eventually_of_forall
+ · filter_upwards
simp only [forall_const, zero_mul, imp_true_iff, zero_le, ENNReal.coe_zero]
have hA : A.det ≠ 0 := by
intro h; simp only [h, ENNReal.not_lt_zero, ENNReal.ofReal_zero, abs_zero] at hm
@@ -567,7 +567,7 @@ theorem addHaar_image_eq_zero_of_differentiableOn_of_addHaar_eq_zero (hf : Diffe
intro A
let m : ℝ≥0 := Real.toNNReal |A.det| + 1
have I : ENNReal.ofReal |A.det| < m := by
- simp only [ENNReal.ofReal, lt_add_iff_pos_right, zero_lt_one, ENNReal.coe_lt_coe]
+ simp only [m, ENNReal.ofReal, lt_add_iff_pos_right, zero_lt_one, ENNReal.coe_lt_coe]
rcases ((addHaar_image_le_mul_of_det_lt μ A I).and self_mem_nhdsWithin).exists with ⟨δ, h, h'⟩
exact ⟨δ, h', fun t ht => h t f ht⟩
choose δ hδ using this
@@ -610,7 +610,7 @@ theorem addHaar_image_eq_zero_of_det_fderivWithin_eq_zero_aux
intro A
let m : ℝ≥0 := Real.toNNReal |A.det| + ε
have I : ENNReal.ofReal |A.det| < m := by
- simp only [ENNReal.ofReal, lt_add_iff_pos_right, εpos, ENNReal.coe_lt_coe]
+ simp only [m, ENNReal.ofReal, lt_add_iff_pos_right, εpos, ENNReal.coe_lt_coe]
rcases ((addHaar_image_le_mul_of_det_lt μ A I).and self_mem_nhdsWithin).exists with ⟨δ, h, h'⟩
exact ⟨δ, h', fun t ht => h t f ht⟩
choose δ hδ using this
@@ -811,7 +811,7 @@ theorem addHaar_image_le_lintegral_abs_det_fderiv_aux1 (hs : MeasurableSet s)
intro A
let m : ℝ≥0 := Real.toNNReal |A.det| + ε
have I : ENNReal.ofReal |A.det| < m := by
- simp only [ENNReal.ofReal, lt_add_iff_pos_right, εpos, ENNReal.coe_lt_coe]
+ simp only [m, ENNReal.ofReal, lt_add_iff_pos_right, εpos, ENNReal.coe_lt_coe]
rcases ((addHaar_image_le_mul_of_det_lt μ A I).and self_mem_nhdsWithin).exists with ⟨δ, h, δpos⟩
obtain ⟨δ', δ'pos, hδ'⟩ : ∃ (δ' : ℝ), 0 < δ' ∧ ∀ B, dist B A < δ' → dist B.det A.det < ↑ε :=
continuousAt_iff.1 ContinuousLinearMap.continuous_det.continuousAt ε εpos
@@ -957,7 +957,7 @@ theorem lintegral_abs_det_fderiv_le_addHaar_image_aux1 (hs : MeasurableSet s)
zero_le, abs_zero]
let m : ℝ≥0 := Real.toNNReal |A.det| - ε
have I : (m : ℝ≥0∞) < ENNReal.ofReal |A.det| := by
- simp only [ENNReal.ofReal, ENNReal.coe_sub]
+ simp only [m, ENNReal.ofReal, ENNReal.coe_sub]
apply ENNReal.sub_lt_self ENNReal.coe_ne_top
· simpa only [abs_nonpos_iff, Real.toNNReal_eq_zero, ENNReal.coe_eq_zero, Ne.def] using hA
· simp only [εpos.ne', ENNReal.coe_eq_zero, Ne.def, not_false_iff]
have
, replace
and suffices
(#10640)
No changes to tactic file, it's just boring fixes throughout the library.
This follows on from #6964.
Co-authored-by: sgouezel <sebastien.gouezel@univ-rennes1.fr> Co-authored-by: Eric Wieser <wieser.eric@gmail.com>
@@ -446,8 +446,8 @@ theorem mul_le_addHaar_image_of_lt_det (A : E →L[ℝ] E) {m : ℝ≥0}
have hf' : ApproximatesLinearOn f (B : E →L[ℝ] E) s δ := by convert hf
let F := hf'.toPartialEquiv h1δ
-- the condition to be checked can be reformulated in terms of the inverse maps
- suffices H : μ (F.symm '' F.target) ≤ (m⁻¹ : ℝ≥0) * μ F.target
- · change (m : ℝ≥0∞) * μ F.source ≤ μ F.target
+ suffices H : μ (F.symm '' F.target) ≤ (m⁻¹ : ℝ≥0) * μ F.target by
+ change (m : ℝ≥0∞) * μ F.source ≤ μ F.target
rwa [← F.symm_image_target_eq_source, mul_comm, ← ENNReal.le_div_iff_mul_le, div_eq_mul_inv,
mul_comm, ← ENNReal.coe_inv mpos.ne']
· apply Or.inl
@@ -475,8 +475,8 @@ theorem _root_.ApproximatesLinearOn.norm_fderiv_sub_le {A : E →L[ℝ] E} {δ :
apply ContinuousLinearMap.opNorm_le_bound _ δ.2 fun z => ?_
-- to show that `‖(f' x - A) z‖ ≤ δ ‖z‖`, it suffices to do it up to some error that vanishes
-- asymptotically in terms of `ε > 0`.
- suffices H : ∀ ε, 0 < ε → ‖(f' x - A) z‖ ≤ (δ + ε) * (‖z‖ + ε) + ‖f' x - A‖ * ε
- · have :
+ suffices H : ∀ ε, 0 < ε → ‖(f' x - A) z‖ ≤ (δ + ε) * (‖z‖ + ε) + ‖f' x - A‖ * ε by
+ have :
Tendsto (fun ε : ℝ => ((δ : ℝ) + ε) * (‖z‖ + ε) + ‖f' x - A‖ * ε) (𝓝[>] 0)
(𝓝 ((δ + 0) * (‖z‖ + 0) + ‖f' x - A‖ * 0)) :=
Tendsto.mono_left (Continuous.tendsto (by continuity) 0) nhdsWithin_le_nhds
@@ -655,8 +655,8 @@ a set where the differential is not invertible, then the image of this set has z
theorem addHaar_image_eq_zero_of_det_fderivWithin_eq_zero
(hf' : ∀ x ∈ s, HasFDerivWithinAt f (f' x) s x) (h'f' : ∀ x ∈ s, (f' x).det = 0) :
μ (f '' s) = 0 := by
- suffices H : ∀ R, μ (f '' (s ∩ closedBall 0 R)) = 0
- · apply le_antisymm _ (zero_le _)
+ suffices H : ∀ R, μ (f '' (s ∩ closedBall 0 R)) = 0 by
+ apply le_antisymm _ (zero_le _)
rw [← iUnion_inter_closedBall_nat s 0]
calc
μ (f '' ⋃ n : ℕ, s ∩ closedBall 0 n) ≤ ∑' n : ℕ, μ (f '' (s ∩ closedBall 0 n)) := by
@@ -723,8 +723,8 @@ theorem aemeasurable_fderivWithin (hs : MeasurableSet s)
t_disj.mono fun i j h => by simp only [h.inter_eq, eqOn_empty]
refine' ⟨g, g_meas.aemeasurable, _⟩
-- reduce to checking that `f'` and `g` are close on almost all of `s ∩ t n`, for all `n`.
- suffices H : ∀ᵐ x : E ∂sum fun n => μ.restrict (s ∩ t n), dist (g x) (f' x) ≤ ε
- · have : μ.restrict s ≤ sum fun n => μ.restrict (s ∩ t n) := by
+ suffices H : ∀ᵐ x : E ∂sum fun n ↦ μ.restrict (s ∩ t n), dist (g x) (f' x) ≤ ε by
+ have : μ.restrict s ≤ sum fun n => μ.restrict (s ∩ t n) := by
have : s = ⋃ n, s ∩ t n := by
rw [← inter_iUnion]
exact Subset.antisymm (subset_inter Subset.rfl t_cover) (inter_subset_left _ _)
@@ -218,11 +218,9 @@ theorem exists_closed_cover_approximatesLinearOn_of_hasFDerivWithinAt [SecondCou
obtain ⟨F, hF⟩ : ∃ F : ℕ → ℕ × T × ℕ, Function.Surjective F := by
haveI : Encodable T := T_count.toEncodable
have : Nonempty T := by
- rcases eq_empty_or_nonempty T with (rfl | hT)
- · rcases hs with ⟨x, xs⟩
- rcases s_subset x xs with ⟨n, z, _⟩
- exact False.elim z.2
- · exact hT.coe_sort
+ rcases hs with ⟨x, xs⟩
+ rcases s_subset x xs with ⟨n, z, _⟩
+ exact ⟨z⟩
inhabit ↥T
exact ⟨_, Encodable.surjective_decode_iget (ℕ × T × ℕ)⟩
-- these sets `t q = K n z p` will do
@@ -321,19 +319,20 @@ theorem addHaar_image_le_mul_of_det_lt (A : E →L[ℝ] E) {m : ℝ≥0}
filter_upwards [this]
-- fix a function `f` which is close enough to `A`.
intro δ hδ s f hf
+ simp only [mem_Iio, ← NNReal.coe_lt_coe, NNReal.coe_mk] at hδ
-- This function expands the volume of any ball by at most `m`
have I : ∀ x r, x ∈ s → 0 ≤ r → μ (f '' (s ∩ closedBall x r)) ≤ m * μ (closedBall x r) := by
intro x r xs r0
have K : f '' (s ∩ closedBall x r) ⊆ A '' closedBall 0 r + closedBall (f x) (ε * r) := by
rintro y ⟨z, ⟨zs, zr⟩, rfl⟩
+ rw [mem_closedBall_iff_norm] at zr
apply Set.mem_add.2 ⟨A (z - x), _, f z - f x - A (z - x) + f x, _, _⟩
· apply mem_image_of_mem
simpa only [dist_eq_norm, mem_closedBall, mem_closedBall_zero_iff, sub_zero] using zr
· rw [mem_closedBall_iff_norm, add_sub_cancel]
calc
‖f z - f x - A (z - x)‖ ≤ δ * ‖z - x‖ := hf _ zs _ xs
- _ ≤ ε * r :=
- mul_le_mul (le_of_lt hδ) (mem_closedBall_iff_norm.1 zr) (norm_nonneg _) εpos.le
+ _ ≤ ε * r := by gcongr
· simp only [map_sub, Pi.sub_apply]
abel
have :
@@ -356,7 +355,7 @@ theorem addHaar_image_le_mul_of_det_lt (A : E →L[ℝ] E) {m : ℝ≥0}
-- measure of `f '' s` is at most `m * (μ s + a)` for any positive `a`.
have J : ∀ᶠ a in 𝓝[>] (0 : ℝ≥0∞), μ (f '' s) ≤ m * (μ s + a) := by
filter_upwards [self_mem_nhdsWithin] with a ha
- change 0 < a at ha
+ rw [mem_Ioi] at ha
obtain ⟨t, r, t_count, ts, rpos, st, μt⟩ :
∃ (t : Set E) (r : E → ℝ),
t.Countable ∧
@@ -532,21 +531,19 @@ theorem _root_.ApproximatesLinearOn.norm_fderiv_sub_le {A : E →L[ℝ] E} {δ :
ring
_ ≤ r * (δ + ε) * (‖z‖ + ε) :=
mul_le_mul_of_nonneg_left norm_a (mul_nonneg rpos.le (add_nonneg δ.2 εpos.le))
- show ‖(f' x - A) z‖ ≤ (δ + ε) * (‖z‖ + ε) + ‖f' x - A‖ * ε;
- exact
- calc
- ‖(f' x - A) z‖ = ‖(f' x - A) a + (f' x - A) (z - a)‖ := by
- congr 1
- simp only [ContinuousLinearMap.coe_sub', map_sub, Pi.sub_apply]
- abel
- _ ≤ ‖(f' x - A) a‖ + ‖(f' x - A) (z - a)‖ := (norm_add_le _ _)
- _ ≤ (δ + ε) * (‖z‖ + ε) + ‖f' x - A‖ * ‖z - a‖ := by
- apply add_le_add
- · rw [mul_assoc] at I; exact (mul_le_mul_left rpos).1 I
- · apply ContinuousLinearMap.le_opNorm
- _ ≤ (δ + ε) * (‖z‖ + ε) + ‖f' x - A‖ * ε :=
- add_le_add le_rfl
- (mul_le_mul_of_nonneg_left (mem_closedBall_iff_norm'.1 az) (norm_nonneg _))
+ calc
+ ‖(f' x - A) z‖ = ‖(f' x - A) a + (f' x - A) (z - a)‖ := by
+ congr 1
+ simp only [ContinuousLinearMap.coe_sub', map_sub, Pi.sub_apply]
+ abel
+ _ ≤ ‖(f' x - A) a‖ + ‖(f' x - A) (z - a)‖ := (norm_add_le _ _)
+ _ ≤ (δ + ε) * (‖z‖ + ε) + ‖f' x - A‖ * ‖z - a‖ := by
+ apply add_le_add
+ · rw [mul_assoc] at I; exact (mul_le_mul_left rpos).1 I
+ · apply ContinuousLinearMap.le_opNorm
+ _ ≤ (δ + ε) * (‖z‖ + ε) + ‖f' x - A‖ * ε :=
+ add_le_add le_rfl
+ (mul_le_mul_of_nonneg_left (mem_closedBall_iff_norm'.1 az) (norm_nonneg _))
#align approximates_linear_on.norm_fderiv_sub_le ApproximatesLinearOn.norm_fderiv_sub_le
/-!
@@ -743,8 +740,8 @@ theorem aemeasurable_fderivWithin (hs : MeasurableSet s)
(hf' x hx.1).mono (inter_subset_left _ _)
-- moreover, `g x` is equal to `A n` there.
have E₂ : ∀ᵐ x : E ∂μ.restrict (s ∩ t n), g x = A n := by
- suffices H : ∀ᵐ x : E ∂μ.restrict (t n), g x = A n
- exact ae_mono (restrict_mono (inter_subset_right _ _) le_rfl) H
+ suffices H : ∀ᵐ x : E ∂μ.restrict (t n), g x = A n from
+ ae_mono (restrict_mono (inter_subset_right _ _) le_rfl) H
filter_upwards [ae_restrict_mem (t_meas n)]
exact hg n
-- putting these two properties together gives the conclusion.
@@ -895,7 +892,8 @@ theorem addHaar_image_le_lintegral_abs_det_fderiv_aux2 (hs : MeasurableSet s) (h
simp only [add_zero, zero_mul, mul_zero, ENNReal.coe_zero] at this
apply ge_of_tendsto this
filter_upwards [self_mem_nhdsWithin]
- rintro ε (εpos : 0 < ε)
+ intro ε εpos
+ rw [mem_Ioi] at εpos
exact addHaar_image_le_lintegral_abs_det_fderiv_aux1 μ hs hf' εpos
#align measure_theory.add_haar_image_le_lintegral_abs_det_fderiv_aux2 MeasureTheory.addHaar_image_le_lintegral_abs_det_fderiv_aux2
@@ -1049,7 +1047,8 @@ theorem lintegral_abs_det_fderiv_le_addHaar_image_aux2 (hs : MeasurableSet s) (h
simp only [add_zero, zero_mul, mul_zero, ENNReal.coe_zero] at this
apply ge_of_tendsto this
filter_upwards [self_mem_nhdsWithin]
- rintro ε (εpos : 0 < ε)
+ intro ε εpos
+ rw [mem_Ioi] at εpos
exact lintegral_abs_det_fderiv_le_addHaar_image_aux1 μ hs hf' hf εpos
#align measure_theory.lintegral_abs_det_fderiv_le_add_haar_image_aux2 MeasureTheory.lintegral_abs_det_fderiv_le_addHaar_image_aux2
@@ -1171,11 +1170,10 @@ theorem lintegral_image_eq_lintegral_abs_det_fderiv_mul (hs : MeasurableSet s)
∫⁻ x in f '' s, g x ∂μ = ∫⁻ x in s, ENNReal.ofReal |(f' x).det| * g (f x) ∂μ := by
rw [← restrict_map_withDensity_abs_det_fderiv_eq_addHaar μ hs hf' hf,
(measurableEmbedding_of_fderivWithin hs hf' hf).lintegral_map]
- have : ∀ x : s, g (s.restrict f x) = (g ∘ f) x := fun x => rfl
- simp only [this]
+ simp only [Set.restrict_apply, ← Function.comp_apply (f := g)]
rw [← (MeasurableEmbedding.subtype_coe hs).lintegral_map, map_comap_subtype_coe hs,
set_lintegral_withDensity_eq_set_lintegral_mul_non_measurable₀ _ _ _ hs]
- · rfl
+ · simp only [Pi.mul_apply]
· simp only [eventually_true, ENNReal.ofReal_lt_top]
· exact aemeasurable_ofReal_abs_det_fderivWithin μ hs hf'
#align measure_theory.lintegral_image_eq_lintegral_abs_det_fderiv_mul MeasureTheory.lintegral_image_eq_lintegral_abs_det_fderiv_mul
@@ -1189,14 +1187,10 @@ theorem integrableOn_image_iff_integrableOn_abs_det_fderiv_smul (hs : Measurable
IntegrableOn g (f '' s) μ ↔ IntegrableOn (fun x => |(f' x).det| • g (f x)) s μ := by
rw [IntegrableOn, ← restrict_map_withDensity_abs_det_fderiv_eq_addHaar μ hs hf' hf,
(measurableEmbedding_of_fderivWithin hs hf' hf).integrable_map_iff]
- change Integrable ((g ∘ f) ∘ ((↑) : s → E)) _ ↔ _
- rw [← (MeasurableEmbedding.subtype_coe hs).integrable_map_iff, map_comap_subtype_coe hs]
- simp only [ENNReal.ofReal]
- rw [restrict_withDensity hs, integrable_withDensity_iff_integrable_coe_smul₀, IntegrableOn]
- · rw [iff_iff_eq]
- congr 2 with x
- rw [Real.coe_toNNReal _ (abs_nonneg _)]
- rfl
+ simp only [Set.restrict_eq, ← Function.comp.assoc, ENNReal.ofReal]
+ rw [← (MeasurableEmbedding.subtype_coe hs).integrable_map_iff, map_comap_subtype_coe hs,
+ restrict_withDensity hs, integrable_withDensity_iff_integrable_coe_smul₀]
+ · simp_rw [IntegrableOn, Real.coe_toNNReal _ (abs_nonneg _), Function.comp_apply]
· exact aemeasurable_toNNReal_abs_det_fderivWithin μ hs hf'
#align measure_theory.integrable_on_image_iff_integrable_on_abs_det_fderiv_smul MeasureTheory.integrableOn_image_iff_integrableOn_abs_det_fderiv_smul
@@ -1208,13 +1202,12 @@ theorem integral_image_eq_integral_abs_det_fderiv_smul (hs : MeasurableSet s)
∫ x in f '' s, g x ∂μ = ∫ x in s, |(f' x).det| • g (f x) ∂μ := by
rw [← restrict_map_withDensity_abs_det_fderiv_eq_addHaar μ hs hf' hf,
(measurableEmbedding_of_fderivWithin hs hf' hf).integral_map]
- have : ∀ x : s, g (s.restrict f x) = (g ∘ f) x := fun x => rfl
- simp only [this, ENNReal.ofReal]
+ simp only [Set.restrict_apply, ← Function.comp_apply (f := g), ENNReal.ofReal]
rw [← (MeasurableEmbedding.subtype_coe hs).integral_map, map_comap_subtype_coe hs,
set_integral_withDensity_eq_set_integral_smul₀
(aemeasurable_toNNReal_abs_det_fderivWithin μ hs hf') _ hs]
congr with x
- conv_rhs => rw [← Real.coe_toNNReal _ (abs_nonneg (f' x).det)]
+ rw [NNReal.smul_def, Real.coe_toNNReal _ (abs_nonneg (f' x).det)]
#align measure_theory.integral_image_eq_integral_abs_det_fderiv_smul MeasureTheory.integral_image_eq_integral_abs_det_fderiv_smul
-- Porting note: move this to `Topology.Algebra.Module.Basic` when port is over
@@ -1224,9 +1217,9 @@ theorem det_one_smulRight {𝕜 : Type*} [NormedField 𝕜] (v : 𝕜) :
ext1
simp only [ContinuousLinearMap.smulRight_apply, ContinuousLinearMap.one_apply,
Algebra.id.smul_eq_mul, one_mul, ContinuousLinearMap.coe_smul', Pi.smul_apply, mul_one]
- rw [this, ContinuousLinearMap.det, ContinuousLinearMap.coe_smul]
- rw [show ((1 : 𝕜 →L[𝕜] 𝕜) : 𝕜 →ₗ[𝕜] 𝕜) = LinearMap.id from rfl]
- rw [LinearMap.det_smul, FiniteDimensional.finrank_self, LinearMap.det_id, pow_one, mul_one]
+ rw [this, ContinuousLinearMap.det, ContinuousLinearMap.coe_smul,
+ ContinuousLinearMap.one_def, ContinuousLinearMap.coe_id, LinearMap.det_smul,
+ FiniteDimensional.finrank_self, LinearMap.det_id, pow_one, mul_one]
#align measure_theory.det_one_smul_right MeasureTheory.det_one_smulRight
/-- Integrability in the change of variable formula for differentiable functions (one-variable
@@ -165,7 +165,7 @@ theorem exists_closed_cover_approximatesLinearOn_of_hasFDerivWithinAt [SecondCou
abel
_ ≤ ‖f y - f x - (f' x) (y - x)‖ + ‖(f' x - f' z) (y - x)‖ := (norm_add_le _ _)
_ ≤ ε * ‖y - x‖ + ‖f' x - f' z‖ * ‖y - x‖ := by
- refine' add_le_add (hδ _) (ContinuousLinearMap.le_op_norm _ _)
+ refine' add_le_add (hδ _) (ContinuousLinearMap.le_opNorm _ _)
rw [inter_comm]
exact inter_subset_inter_right _ (ball_subset_ball hn.le) hy
_ ≤ r (f' z) * ‖y - x‖ := by
@@ -473,7 +473,7 @@ theorem _root_.ApproximatesLinearOn.norm_fderiv_sub_le {A : E →L[ℝ] E} {δ :
-- start from a Lebesgue density point `x`, belonging to `s`.
intro x hx xs
-- consider an arbitrary vector `z`.
- apply ContinuousLinearMap.op_norm_le_bound _ δ.2 fun z => ?_
+ apply ContinuousLinearMap.opNorm_le_bound _ δ.2 fun z => ?_
-- to show that `‖(f' x - A) z‖ ≤ δ ‖z‖`, it suffices to do it up to some error that vanishes
-- asymptotically in terms of `ε > 0`.
suffices H : ∀ ε, 0 < ε → ‖(f' x - A) z‖ ≤ (δ + ε) * (‖z‖ + ε) + ‖f' x - A‖ * ε
@@ -543,7 +543,7 @@ theorem _root_.ApproximatesLinearOn.norm_fderiv_sub_le {A : E →L[ℝ] E} {δ :
_ ≤ (δ + ε) * (‖z‖ + ε) + ‖f' x - A‖ * ‖z - a‖ := by
apply add_le_add
· rw [mul_assoc] at I; exact (mul_le_mul_left rpos).1 I
- · apply ContinuousLinearMap.le_op_norm
+ · apply ContinuousLinearMap.le_opNorm
_ ≤ (δ + ε) * (‖z‖ + ε) + ‖f' x - A‖ * ε :=
add_le_add le_rfl
(mul_le_mul_of_nonneg_left (mem_closedBall_iff_norm'.1 az) (norm_nonneg _))
@@ -4,12 +4,12 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Sébastien Gouëzel
-/
import Mathlib.Analysis.Calculus.Deriv.Basic
-import Mathlib.Analysis.Calculus.InverseFunctionTheorem.FDeriv
import Mathlib.MeasureTheory.Constructions.BorelSpace.ContinuousLinearMap
import Mathlib.MeasureTheory.Covering.BesicovitchVectorSpace
import Mathlib.MeasureTheory.Measure.Lebesgue.EqHaar
import Mathlib.Analysis.NormedSpace.Pointwise
import Mathlib.MeasureTheory.Constructions.Polish
+import Mathlib.Analysis.Calculus.InverseFunctionTheorem.ApproximatesLinearOn
#align_import measure_theory.function.jacobian from "leanprover-community/mathlib"@"b84aee748341da06a6d78491367e2c0e9f15e8a5"
Set.image2
etc (#9275)
Set.image2
to use ∃ a ∈ s, ∃ b ∈ t, f a b = c
instead of ∃ a b, a ∈ s ∧ b ∈ t ∧ f a b = c
.Set.seq
as Set.image2
. The new definition is equal to the old one but rw [Set.seq]
gives a different result.Filter.map₂
to use ∃ u ∈ f, ∃ v ∈ g, image2 m u v ⊆ s
instead of ∃ u v, u ∈ f ∧ v ∈ g ∧ ...
Set.mem_image2
, Finset.mem_image₂
, Set.mem_mul
, Finset.mem_div
etcThe two reasons to make the change are:
∃ a ∈ s, ∃ b ∈ t, _
is a simp
-normal form, and@@ -326,7 +326,7 @@ theorem addHaar_image_le_mul_of_det_lt (A : E →L[ℝ] E) {m : ℝ≥0}
intro x r xs r0
have K : f '' (s ∩ closedBall x r) ⊆ A '' closedBall 0 r + closedBall (f x) (ε * r) := by
rintro y ⟨z, ⟨zs, zr⟩, rfl⟩
- apply Set.mem_add.2 ⟨A (z - x), f z - f x - A (z - x) + f x, _, _, _⟩
+ apply Set.mem_add.2 ⟨A (z - x), _, f z - f x - A (z - x) + f x, _, _⟩
· apply mem_image_of_mem
simpa only [dist_eq_norm, mem_closedBall, mem_closedBall_zero_iff, sub_zero] using zr
· rw [mem_closedBall_iff_norm, add_sub_cancel]
structure
(#8907)
This way we can easily change the definition so that it works for topological vector spaces without generalizing any of the theorems right away.
@@ -154,7 +154,7 @@ theorem exists_closed_cover_approximatesLinearOn_of_hasFDerivWithinAt [SecondCou
simpa only [sub_pos] using mem_ball_iff_norm.mp hz
obtain ⟨δ, δpos, hδ⟩ :
∃ (δ : ℝ), 0 < δ ∧ ball x δ ∩ s ⊆ {y | ‖f y - f x - (f' x) (y - x)‖ ≤ ε * ‖y - x‖} :=
- Metric.mem_nhdsWithin_iff.1 (IsLittleO.def (hf' x xs) εpos)
+ Metric.mem_nhdsWithin_iff.1 ((hf' x xs).isLittleO.def εpos)
obtain ⟨n, hn⟩ : ∃ n, u n < δ := ((tendsto_order.1 u_lim).2 _ δpos).exists
refine' ⟨n, ⟨z, zT⟩, ⟨xs, _⟩⟩
intro y hy
@@ -494,7 +494,7 @@ theorem _root_.ApproximatesLinearOn.norm_fderiv_sub_le {A : E →L[ℝ] E} {δ :
(measure_closedBall_pos μ z εpos).ne'
obtain ⟨ρ, ρpos, hρ⟩ :
∃ ρ > 0, ball x ρ ∩ s ⊆ {y : E | ‖f y - f x - (f' x) (y - x)‖ ≤ ε * ‖y - x‖} :=
- mem_nhdsWithin_iff.1 (IsLittleO.def (hf' x xs) εpos)
+ mem_nhdsWithin_iff.1 ((hf' x xs).isLittleO.def εpos)
-- for small enough `r`, the rescaled ball `r • closedBall z ε` is included in the set where
-- `f y - f x` is well approximated by `f' x (y - x)`.
have B₂ : ∀ᶠ r in 𝓝[>] (0 : ℝ), {x} + r • closedBall z ε ⊆ ball x ρ := by
The current name is misleading: there's no open set involved; it's just an equivalence between subsets of domain and target. zulip discussion
PEquiv
is similarly named: this is fine, as they're different designs for the same concept.
Co-authored-by: Michael Rothgang <rothgami@math.hu-berlin.de>
@@ -445,7 +445,7 @@ theorem mul_le_addHaar_image_of_lt_det (A : E →L[ℝ] E) {m : ℝ≥0}
filter_upwards [L1, L2]
intro δ h1δ h2δ s f hf
have hf' : ApproximatesLinearOn f (B : E →L[ℝ] E) s δ := by convert hf
- let F := hf'.toLocalEquiv h1δ
+ let F := hf'.toPartialEquiv h1δ
-- the condition to be checked can be reformulated in terms of the inverse maps
suffices H : μ (F.symm '' F.target) ≤ (m⁻¹ : ℝ≥0) * μ F.target
· change (m : ℝ≥0∞) * μ F.source ≤ μ F.target
@@ -1255,7 +1255,7 @@ theorem integral_image_eq_integral_abs_deriv_smul {s : Set ℝ} {f : ℝ → ℝ
theorem integral_target_eq_integral_abs_det_fderiv_smul {f : PartialHomeomorph E E}
(hf' : ∀ x ∈ f.source, HasFDerivAt f (f' x) x) (g : E → F) :
∫ x in f.target, g x ∂μ = ∫ x in f.source, |(f' x).det| • g (f x) ∂μ := by
- have : f '' f.source = f.target := LocalEquiv.image_source_eq_target f.toLocalEquiv
+ have : f '' f.source = f.target := PartialEquiv.image_source_eq_target f.toPartialEquiv
rw [← this]
apply integral_image_eq_integral_abs_det_fderiv_smul μ f.open_source.measurableSet _ f.injOn
intro x hx
LocalHomeomorph
evokes a "local homeomorphism": this is not what this means.
Instead, this is a homeomorphism on an open set of the domain (extended to the whole space, by the junk value pattern). Hence, partial homeomorphism is more appropriate, and avoids confusion with IsLocallyHomeomorph
.
A future PR will rename LocalEquiv
to PartialEquiv
.
@@ -1252,7 +1252,7 @@ theorem integral_image_eq_integral_abs_deriv_smul {s : Set ℝ} {f : ℝ → ℝ
(fun x hx => (hf' x hx).hasFDerivWithinAt) hf g
#align measure_theory.integral_image_eq_integral_abs_deriv_smul MeasureTheory.integral_image_eq_integral_abs_deriv_smul
-theorem integral_target_eq_integral_abs_det_fderiv_smul {f : LocalHomeomorph E E}
+theorem integral_target_eq_integral_abs_det_fderiv_smul {f : PartialHomeomorph E E}
(hf' : ∀ x ∈ f.source, HasFDerivAt f (f' x) x) (g : E → F) :
∫ x in f.target, g x ∂μ = ∫ x in f.source, |(f' x).det| • g (f x) ∂μ := by
have : f '' f.source = f.target := LocalEquiv.image_source_eq_target f.toLocalEquiv
@@ -3,7 +3,8 @@ Copyright (c) 2022 Sébastien Gouëzel. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Sébastien Gouëzel
-/
-import Mathlib.Analysis.Calculus.Inverse
+import Mathlib.Analysis.Calculus.Deriv.Basic
+import Mathlib.Analysis.Calculus.InverseFunctionTheorem.FDeriv
import Mathlib.MeasureTheory.Constructions.BorelSpace.ContinuousLinearMap
import Mathlib.MeasureTheory.Covering.BesicovitchVectorSpace
import Mathlib.MeasureTheory.Measure.Lebesgue.EqHaar
@@ -598,9 +598,9 @@ theorem addHaar_image_eq_zero_of_differentiableOn_of_addHaar_eq_zero (hf : Diffe
_ = 0 := by simp only [tsum_zero, mul_zero]
#align measure_theory.add_haar_image_eq_zero_of_differentiable_on_of_add_haar_eq_zero MeasureTheory.addHaar_image_eq_zero_of_differentiableOn_of_addHaar_eq_zero
-/-- A version of Sard lemma in fixed dimension: given a differentiable function from `E` to `E` and
-a set where the differential is not invertible, then the image of this set has zero measure.
-Here, we give an auxiliary statement towards this result. -/
+/-- A version of **Sard's lemma** in fixed dimension: given a differentiable function from `E`
+to `E` and a set where the differential is not invertible, then the image of this set has
+zero measure. Here, we give an auxiliary statement towards this result. -/
theorem addHaar_image_eq_zero_of_det_fderivWithin_eq_zero_aux
(hf' : ∀ x ∈ s, HasFDerivWithinAt f (f' x) s x) (R : ℝ) (hs : s ⊆ closedBall 0 R) (ε : ℝ≥0)
(εpos : 0 < ε) (h'f' : ∀ x ∈ s, (f' x).det = 0) : μ (f '' s) ≤ ε * μ (closedBall 0 R) := by
I've also got a change to make this required, but I'd like to land this first.
@@ -423,7 +423,7 @@ theorem mul_le_addHaar_image_of_lt_det (A : E →L[ℝ] E) {m : ℝ≥0}
exact ⟨δ₀, h', h⟩
-- record smallness conditions for `δ` that will be needed to apply `hδ₀` below.
have L1 : ∀ᶠ δ in 𝓝 (0 : ℝ≥0), Subsingleton E ∨ δ < ‖(B.symm : E →L[ℝ] E)‖₊⁻¹ := by
- by_cases Subsingleton E
+ by_cases h : Subsingleton E
· simp only [h, true_or_iff, eventually_const]
simp only [h, false_or_iff]
apply Iio_mem_nhds
This is the supremum of
along with some minor fixes from failures on nightly-testing as Mathlib master
is merged into it.
Note that some PRs for changes that are already compatible with the current toolchain and will be necessary have already been split out: #8380.
I am hopeful that in future we will be able to progressively merge adaptation PRs into a bump/v4.X.0
branch, so we never end up with a "big merge" like this. However one of these adaptation PRs (#8056) predates my new scheme for combined CI, and it wasn't possible to keep that PR viable in the meantime.
In particular this includes adjustments for the Lean PRs
We can get rid of all the
local macro_rules | `($x ^ $y) => `(HPow.hPow $x $y) -- Porting note: See issue [lean4#2220](https://github.com/leanprover/lean4/pull/2220)
macros across Mathlib (and in any projects that want to write natural number powers of reals).
Changes the default behaviour of simp
to (config := {decide := false})
. This makes simp
(and consequentially norm_num
) less powerful, but also more consistent, and less likely to blow up in long failures. This requires a variety of changes: changing some previously by simp
or norm_num
to decide
or rfl
, or adding (config := {decide := true})
.
This changed the behaviour of simp
so that simp [f]
will only unfold "fully applied" occurrences of f
. The old behaviour can be recovered with simp (config := { unfoldPartialApp := true })
. We may in future add a syntax for this, e.g. simp [!f]
; please provide feedback! In the meantime, we have made the following changes:
(config := { unfoldPartialApp := true })
in some places, to recover the old behaviour@[eqns]
to manually adjust the equation lemmas for a particular definition, recovering the old behaviour just for that definition. See #8371, where we do this for Function.comp
and Function.flip
.This change in Lean may require further changes down the line (e.g. adding the !f
syntax, and/or upstreaming the special treatment for Function.comp
and Function.flip
, and/or removing this special treatment). Please keep an open and skeptical mind about these changes!
Co-authored-by: leanprover-community-mathlib4-bot <leanprover-community-mathlib4-bot@users.noreply.github.com> Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: Eric Wieser <wieser.eric@gmail.com> Co-authored-by: Mauricio Collares <mauricio@collares.org>
@@ -88,9 +88,6 @@ Change of variables in integrals
[Fremlin, *Measure Theory* (volume 2)][fremlin_vol2]
-/
-
-local macro_rules | `($x ^ $y) => `(HPow.hPow $x $y) -- Porting note: See issue lean4#2220
-
open MeasureTheory MeasureTheory.Measure Metric Filter Set FiniteDimensional Asymptotics
TopologicalSpace
This incorporates changes from
nightly-testing
are unexciting: we need to fully qualify a few names)They can all be closed when this is merged.
Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: Eric Wieser <wieser.eric@gmail.com>
@@ -243,7 +243,8 @@ theorem exists_closed_cover_approximatesLinearOn_of_hasFDerivWithinAt [SecondCou
obtain ⟨q, hq⟩ : ∃ q, F q = (n, z, p) := hF _
-- then `x` belongs to `t q`.
apply mem_iUnion.2 ⟨q, _⟩
- simp (config := { zeta := false }) only [hq, subset_closure hnz, hp, mem_inter_iff, and_true, hnz]
+ simp (config := { zeta := false }) only [K, hq, mem_inter_iff, hp, and_true]
+ exact subset_closure hnz
#align exists_closed_cover_approximates_linear_on_of_has_fderiv_within_at exists_closed_cover_approximatesLinearOn_of_hasFDerivWithinAt
variable [MeasurableSpace E] [BorelSpace E] (μ : Measure E) [IsAddHaarMeasure μ]
@@ -1263,4 +1263,72 @@ theorem integral_target_eq_integral_abs_det_fderiv_smul {f : LocalHomeomorph E E
exact (hf' x hx).hasFDerivWithinAt
#align measure_theory.integral_target_eq_integral_abs_det_fderiv_smul MeasureTheory.integral_target_eq_integral_abs_det_fderiv_smul
+section withDensity
+
+lemma _root_.MeasurableEmbedding.withDensity_ofReal_comap_apply_eq_integral_abs_det_fderiv_mul
+ (hs : MeasurableSet s) (hf : MeasurableEmbedding f)
+ {g : E → ℝ} (hg : ∀ᵐ x ∂μ, x ∈ f '' s → 0 ≤ g x) (hg_int : IntegrableOn g (f '' s) μ)
+ (hf' : ∀ x ∈ s, HasFDerivWithinAt f (f' x) s x) :
+ (μ.withDensity (fun x ↦ ENNReal.ofReal (g x))).comap f s
+ = ENNReal.ofReal (∫ x in s, |(f' x).det| * g (f x) ∂μ) := by
+ rw [Measure.comap_apply f hf.injective (fun t ht ↦ hf.measurableSet_image' ht) _ hs,
+ withDensity_apply _ (hf.measurableSet_image' hs),
+ ← ofReal_integral_eq_lintegral_ofReal hg_int
+ ((ae_restrict_iff' (hf.measurableSet_image' hs)).mpr hg),
+ integral_image_eq_integral_abs_det_fderiv_smul μ hs hf' (hf.injective.injOn _)]
+ simp_rw [smul_eq_mul]
+
+lemma _root_.MeasurableEquiv.withDensity_ofReal_map_symm_apply_eq_integral_abs_det_fderiv_mul
+ (hs : MeasurableSet s) (f : E ≃ᵐ E)
+ {g : E → ℝ} (hg : ∀ᵐ x ∂μ, x ∈ f '' s → 0 ≤ g x) (hg_int : IntegrableOn g (f '' s) μ)
+ (hf' : ∀ x ∈ s, HasFDerivWithinAt f (f' x) s x) :
+ (μ.withDensity (fun x ↦ ENNReal.ofReal (g x))).map f.symm s
+ = ENNReal.ofReal (∫ x in s, |(f' x).det| * g (f x) ∂μ) := by
+ rw [MeasurableEquiv.map_symm,
+ MeasurableEmbedding.withDensity_ofReal_comap_apply_eq_integral_abs_det_fderiv_mul μ hs
+ f.measurableEmbedding hg hg_int hf']
+
+lemma _root_.MeasurableEmbedding.withDensity_ofReal_comap_apply_eq_integral_abs_deriv_mul
+ {f : ℝ → ℝ} (hf : MeasurableEmbedding f) {s : Set ℝ} (hs : MeasurableSet s)
+ {g : ℝ → ℝ} (hg : ∀ᵐ x, x ∈ f '' s → 0 ≤ g x) (hg_int : IntegrableOn g (f '' s))
+ {f' : ℝ → ℝ} (hf' : ∀ x ∈ s, HasDerivWithinAt f (f' x) s x) :
+ (volume.withDensity (fun x ↦ ENNReal.ofReal (g x))).comap f s
+ = ENNReal.ofReal (∫ x in s, |f' x| * g (f x)) := by
+ rw [hf.withDensity_ofReal_comap_apply_eq_integral_abs_det_fderiv_mul volume hs
+ hg hg_int hf']
+ simp only [det_one_smulRight]
+
+lemma _root_.MeasurableEquiv.withDensity_ofReal_map_symm_apply_eq_integral_abs_deriv_mul
+ (f : ℝ ≃ᵐ ℝ) {s : Set ℝ} (hs : MeasurableSet s)
+ {g : ℝ → ℝ} (hg : ∀ᵐ x, x ∈ f '' s → 0 ≤ g x) (hg_int : IntegrableOn g (f '' s))
+ {f' : ℝ → ℝ} (hf' : ∀ x ∈ s, HasDerivWithinAt f (f' x) s x) :
+ (volume.withDensity (fun x ↦ ENNReal.ofReal (g x))).map f.symm s
+ = ENNReal.ofReal (∫ x in s, |f' x| * g (f x)) := by
+ rw [MeasurableEquiv.withDensity_ofReal_map_symm_apply_eq_integral_abs_det_fderiv_mul volume hs
+ f hg hg_int hf']
+ simp only [det_one_smulRight]
+
+lemma _root_.MeasurableEmbedding.withDensity_ofReal_comap_apply_eq_integral_abs_deriv_mul'
+ {f : ℝ → ℝ} (hf : MeasurableEmbedding f) {s : Set ℝ} (hs : MeasurableSet s)
+ {f' : ℝ → ℝ} (hf' : ∀ x, HasDerivAt f (f' x) x)
+ {g : ℝ → ℝ} (hg : 0 ≤ᵐ[volume] g) (hg_int : Integrable g) :
+ (volume.withDensity (fun x ↦ ENNReal.ofReal (g x))).comap f s
+ = ENNReal.ofReal (∫ x in s, |f' x| * g (f x)) :=
+ hf.withDensity_ofReal_comap_apply_eq_integral_abs_deriv_mul hs
+ (by filter_upwards [hg] with x hx using fun _ ↦ hx) hg_int.integrableOn
+ (fun x _ => (hf' x).hasDerivWithinAt)
+
+lemma _root_.MeasurableEquiv.withDensity_ofReal_map_symm_apply_eq_integral_abs_deriv_mul'
+ (f : ℝ ≃ᵐ ℝ) {s : Set ℝ} (hs : MeasurableSet s)
+ {f' : ℝ → ℝ} (hf' : ∀ x, HasDerivAt f (f' x) x)
+ {g : ℝ → ℝ} (hg : 0 ≤ᵐ[volume] g) (hg_int : Integrable g) :
+ (volume.withDensity (fun x ↦ ENNReal.ofReal (g x))).map f.symm s
+ = ENNReal.ofReal (∫ x in s, |f' x| * g (f x)) := by
+ rw [MeasurableEquiv.withDensity_ofReal_map_symm_apply_eq_integral_abs_det_fderiv_mul volume hs
+ f (by filter_upwards [hg] with x hx using fun _ ↦ hx) hg_int.integrableOn
+ (fun x _ => (hf' x).hasDerivWithinAt)]
+ simp only [det_one_smulRight]
+
+end withDensity
+
end MeasureTheory
rcases
, convert
and congrm
(#7725)
Replace rcases(
with rcases (
. Same thing for convert(
and congrm(
. No other change.
@@ -421,7 +421,7 @@ theorem mul_le_addHaar_image_of_lt_det (A : E →L[ℝ] E) {m : ℝ≥0}
∀ (t : Set E) (g : E → E),
ApproximatesLinearOn g (B.symm : E →L[ℝ] E) t δ → μ (g '' t) ≤ ↑m⁻¹ * μ t :=
addHaar_image_le_mul_of_det_lt μ B.symm I
- rcases(this.and self_mem_nhdsWithin).exists with ⟨δ₀, h, h'⟩
+ rcases (this.and self_mem_nhdsWithin).exists with ⟨δ₀, h, h'⟩
exact ⟨δ₀, h', h⟩
-- record smallness conditions for `δ` that will be needed to apply `hδ₀` below.
have L1 : ∀ᶠ δ in 𝓝 (0 : ℝ≥0), Subsingleton E ∨ δ < ‖(B.symm : E →L[ℝ] E)‖₊⁻¹ := by
CompleteSpace
assumptions (#7691)
Also add completeSpace_prod
, integrable_prod
.
@@ -1204,7 +1204,7 @@ theorem integrableOn_image_iff_integrableOn_abs_det_fderiv_smul (hs : Measurable
/-- Change of variable formula for differentiable functions: if a function `f` is
injective and differentiable on a measurable set `s`, then the Bochner integral of a function
`g : E → F` on `f '' s` coincides with the integral of `|(f' x).det| • g ∘ f` on `s`. -/
-theorem integral_image_eq_integral_abs_det_fderiv_smul [CompleteSpace F] (hs : MeasurableSet s)
+theorem integral_image_eq_integral_abs_det_fderiv_smul (hs : MeasurableSet s)
(hf' : ∀ x ∈ s, HasFDerivWithinAt f (f' x) s x) (hf : InjOn f s) (g : E → F) :
∫ x in f '' s, g x ∂μ = ∫ x in s, |(f' x).det| • g (f x) ∂μ := by
rw [← restrict_map_withDensity_abs_det_fderiv_eq_addHaar μ hs hf' hf,
@@ -1246,14 +1246,14 @@ theorem integrableOn_image_iff_integrableOn_abs_deriv_smul {s : Set ℝ} {f :
`f` is injective and differentiable on a measurable set `s ⊆ ℝ`, then the Bochner integral of a
function `g : ℝ → F` on `f '' s` coincides with the integral of `|(f' x)| • g ∘ f` on `s`. -/
theorem integral_image_eq_integral_abs_deriv_smul {s : Set ℝ} {f : ℝ → ℝ} {f' : ℝ → ℝ}
- [CompleteSpace F] (hs : MeasurableSet s) (hf' : ∀ x ∈ s, HasDerivWithinAt f (f' x) s x)
+ (hs : MeasurableSet s) (hf' : ∀ x ∈ s, HasDerivWithinAt f (f' x) s x)
(hf : InjOn f s) (g : ℝ → F) : ∫ x in f '' s, g x = ∫ x in s, |f' x| • g (f x) := by
simpa only [det_one_smulRight] using
integral_image_eq_integral_abs_det_fderiv_smul volume hs
(fun x hx => (hf' x hx).hasFDerivWithinAt) hf g
#align measure_theory.integral_image_eq_integral_abs_deriv_smul MeasureTheory.integral_image_eq_integral_abs_deriv_smul
-theorem integral_target_eq_integral_abs_det_fderiv_smul [CompleteSpace F] {f : LocalHomeomorph E E}
+theorem integral_target_eq_integral_abs_det_fderiv_smul {f : LocalHomeomorph E E}
(hf' : ∀ x ∈ f.source, HasFDerivAt f (f' x) x) (g : E → F) :
∫ x in f.target, g x ∂μ = ∫ x in f.source, |(f' x).det| • g (f x) ∂μ := by
have : f '' f.source = f.target := LocalEquiv.image_source_eq_target f.toLocalEquiv
Metric.Bounded
(#7240)
Use Bornology.IsBounded
instead.
@@ -500,7 +500,7 @@ theorem _root_.ApproximatesLinearOn.norm_fderiv_sub_le {A : E →L[ℝ] E} {δ :
-- `f y - f x` is well approximated by `f' x (y - x)`.
have B₂ : ∀ᶠ r in 𝓝[>] (0 : ℝ), {x} + r • closedBall z ε ⊆ ball x ρ := by
apply nhdsWithin_le_nhds
- exact eventually_singleton_add_smul_subset bounded_closedBall (ball_mem_nhds x ρpos)
+ exact eventually_singleton_add_smul_subset isBounded_closedBall (ball_mem_nhds x ρpos)
-- fix a small positive `r` satisfying the above properties, as well as a corresponding `y`.
obtain ⟨r, ⟨y, ⟨ys, hy⟩⟩, rρ, rpos⟩ :
∃ r : ℝ,
MulZeroClass.
in mul_zero
/zero_mul
(#6682)
Search&replace MulZeroClass.mul_zero
-> mul_zero
, MulZeroClass.zero_mul
-> zero_mul
.
These were introduced by Mathport, as the full name of mul_zero
is actually MulZeroClass.mul_zero
(it's exported with the short name).
@@ -400,7 +400,7 @@ theorem mul_le_addHaar_image_of_lt_det (A : E →L[ℝ] E) {m : ℝ≥0}
-- exclude first the trivial case where `m = 0`.
rcases eq_or_lt_of_le (zero_le m) with (rfl | mpos)
· apply eventually_of_forall
- simp only [forall_const, MulZeroClass.zero_mul, imp_true_iff, zero_le, ENNReal.coe_zero]
+ simp only [forall_const, zero_mul, imp_true_iff, zero_le, ENNReal.coe_zero]
have hA : A.det ≠ 0 := by
intro h; simp only [h, ENNReal.not_lt_zero, ENNReal.ofReal_zero, abs_zero] at hm
-- let `B` be the continuous linear equiv version of `A`.
@@ -436,11 +436,11 @@ theorem mul_le_addHaar_image_of_lt_det (A : E →L[ℝ] E) {m : ℝ≥0}
Tendsto (fun δ => ‖(B.symm : E →L[ℝ] E)‖₊ * (‖(B.symm : E →L[ℝ] E)‖₊⁻¹ - δ)⁻¹ * δ) (𝓝 0)
(𝓝 (‖(B.symm : E →L[ℝ] E)‖₊ * (‖(B.symm : E →L[ℝ] E)‖₊⁻¹ - 0)⁻¹ * 0)) := by
rcases eq_or_ne ‖(B.symm : E →L[ℝ] E)‖₊ 0 with (H | H)
- · simpa only [H, MulZeroClass.zero_mul] using tendsto_const_nhds
+ · simpa only [H, zero_mul] using tendsto_const_nhds
refine' Tendsto.mul (tendsto_const_nhds.mul _) tendsto_id
refine' (Tendsto.sub tendsto_const_nhds tendsto_id).inv₀ _
simpa only [tsub_zero, inv_eq_zero, Ne.def] using H
- simp only [MulZeroClass.mul_zero] at this
+ simp only [mul_zero] at this
exact (tendsto_order.1 this).2 δ₀ δ₀pos
-- let `δ` be small enough, and `f` approximated by `B` up to `δ`.
filter_upwards [L1, L2]
@@ -482,7 +482,7 @@ theorem _root_.ApproximatesLinearOn.norm_fderiv_sub_le {A : E →L[ℝ] E} {δ :
Tendsto (fun ε : ℝ => ((δ : ℝ) + ε) * (‖z‖ + ε) + ‖f' x - A‖ * ε) (𝓝[>] 0)
(𝓝 ((δ + 0) * (‖z‖ + 0) + ‖f' x - A‖ * 0)) :=
Tendsto.mono_left (Continuous.tendsto (by continuity) 0) nhdsWithin_le_nhds
- simp only [add_zero, MulZeroClass.mul_zero] at this
+ simp only [add_zero, mul_zero] at this
apply le_of_tendsto_of_tendsto tendsto_const_nhds this
filter_upwards [self_mem_nhdsWithin]
exact H
@@ -597,7 +597,7 @@ theorem addHaar_image_eq_zero_of_differentiableOn_of_addHaar_eq_zero (hf : Diffe
_ ≤ ∑' n, ((Real.toNNReal |(A n).det| + 1 : ℝ≥0) : ℝ≥0∞) * 0 := by
refine' ENNReal.tsum_le_tsum fun n => mul_le_mul_left' _ _
exact le_trans (measure_mono (inter_subset_left _ _)) (le_of_eq hs)
- _ = 0 := by simp only [tsum_zero, MulZeroClass.mul_zero]
+ _ = 0 := by simp only [tsum_zero, mul_zero]
#align measure_theory.add_haar_image_eq_zero_of_differentiable_on_of_add_haar_eq_zero MeasureTheory.addHaar_image_eq_zero_of_differentiableOn_of_addHaar_eq_zero
/-- A version of Sard lemma in fixed dimension: given a differentiable function from `E` to `E` and
@@ -678,7 +678,7 @@ theorem addHaar_image_eq_zero_of_det_fderivWithin_eq_zero
(𝓝 (((0 : ℝ≥0) : ℝ≥0∞) * μ (closedBall 0 R))) :=
ENNReal.Tendsto.mul_const (ENNReal.tendsto_coe.2 tendsto_id)
(Or.inr measure_closedBall_lt_top.ne)
- simp only [MulZeroClass.zero_mul, ENNReal.coe_zero] at this
+ simp only [zero_mul, ENNReal.coe_zero] at this
exact Tendsto.mono_left this nhdsWithin_le_nhds
apply le_antisymm _ (zero_le _)
apply ge_of_tendsto B
@@ -893,7 +893,7 @@ theorem addHaar_image_le_lintegral_abs_det_fderiv_aux2 (hs : MeasurableSet s) (h
refine' tendsto_const_nhds.add _
refine' ENNReal.Tendsto.mul_const _ (Or.inr h's)
exact ENNReal.Tendsto.const_mul (ENNReal.tendsto_coe.2 tendsto_id) (Or.inr ENNReal.coe_ne_top)
- simp only [add_zero, MulZeroClass.zero_mul, MulZeroClass.mul_zero, ENNReal.coe_zero] at this
+ simp only [add_zero, zero_mul, mul_zero, ENNReal.coe_zero] at this
apply ge_of_tendsto this
filter_upwards [self_mem_nhdsWithin]
rintro ε (εpos : 0 < ε)
@@ -956,7 +956,7 @@ theorem lintegral_abs_det_fderiv_le_addHaar_image_aux1 (hs : MeasurableSet s)
exact hB.trans_lt (half_lt_self δ'pos)
rcases eq_or_ne A.det 0 with (hA | hA)
· refine' ⟨δ'', half_pos δ'pos, I'', _⟩
- simp only [hA, forall_const, MulZeroClass.zero_mul, ENNReal.ofReal_zero, imp_true_iff,
+ simp only [hA, forall_const, zero_mul, ENNReal.ofReal_zero, imp_true_iff,
zero_le, abs_zero]
let m : ℝ≥0 := Real.toNNReal |A.det| - ε
have I : (m : ℝ≥0∞) < ENNReal.ofReal |A.det| := by
@@ -1047,7 +1047,7 @@ theorem lintegral_abs_det_fderiv_le_addHaar_image_aux2 (hs : MeasurableSet s) (h
refine' tendsto_const_nhds.add _
refine' ENNReal.Tendsto.mul_const _ (Or.inr h's)
exact ENNReal.Tendsto.const_mul (ENNReal.tendsto_coe.2 tendsto_id) (Or.inr ENNReal.coe_ne_top)
- simp only [add_zero, MulZeroClass.zero_mul, MulZeroClass.mul_zero, ENNReal.coe_zero] at this
+ simp only [add_zero, zero_mul, mul_zero, ENNReal.coe_zero] at this
apply ge_of_tendsto this
filter_upwards [self_mem_nhdsWithin]
rintro ε (εpos : 0 < ε)
Type _
and Sort _
(#6499)
We remove all possible occurences of Type _
and Sort _
in favor of Type*
and Sort*
.
This has nice performance benefits.
@@ -96,7 +96,7 @@ open MeasureTheory MeasureTheory.Measure Metric Filter Set FiniteDimensional Asy
open scoped NNReal ENNReal Topology Pointwise
-variable {E F : Type _} [NormedAddCommGroup E] [NormedSpace ℝ E] [FiniteDimensional ℝ E]
+variable {E F : Type*} [NormedAddCommGroup E] [NormedSpace ℝ E] [FiniteDimensional ℝ E]
[NormedAddCommGroup F] [NormedSpace ℝ F] {s : Set E} {f : E → E} {f' : E → E →L[ℝ] E}
/-!
@@ -1219,7 +1219,7 @@ theorem integral_image_eq_integral_abs_det_fderiv_smul [CompleteSpace F] (hs : M
#align measure_theory.integral_image_eq_integral_abs_det_fderiv_smul MeasureTheory.integral_image_eq_integral_abs_det_fderiv_smul
-- Porting note: move this to `Topology.Algebra.Module.Basic` when port is over
-theorem det_one_smulRight {𝕜 : Type _} [NormedField 𝕜] (v : 𝕜) :
+theorem det_one_smulRight {𝕜 : Type*} [NormedField 𝕜] (v : 𝕜) :
((1 : 𝕜 →L[𝕜] 𝕜).smulRight v).det = v := by
have : (1 : 𝕜 →L[𝕜] 𝕜).smulRight v = v • (1 : 𝕜 →L[𝕜] 𝕜) := by
ext1
@@ -89,7 +89,7 @@ Change of variables in integrals
-/
-local macro_rules | `($x ^ $y) => `(HPow.hPow $x $y) -- Porting note: See issue #2220
+local macro_rules | `($x ^ $y) => `(HPow.hPow $x $y) -- Porting note: See issue lean4#2220
open MeasureTheory MeasureTheory.Measure Metric Filter Set FiniteDimensional Asymptotics
TopologicalSpace
@@ -2,11 +2,6 @@
Copyright (c) 2022 Sébastien Gouëzel. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Sébastien Gouëzel
-
-! This file was ported from Lean 3 source module measure_theory.function.jacobian
-! leanprover-community/mathlib commit b84aee748341da06a6d78491367e2c0e9f15e8a5
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathlib.Analysis.Calculus.Inverse
import Mathlib.MeasureTheory.Constructions.BorelSpace.ContinuousLinearMap
@@ -15,6 +10,8 @@ import Mathlib.MeasureTheory.Measure.Lebesgue.EqHaar
import Mathlib.Analysis.NormedSpace.Pointwise
import Mathlib.MeasureTheory.Constructions.Polish
+#align_import measure_theory.function.jacobian from "leanprover-community/mathlib"@"b84aee748341da06a6d78491367e2c0e9f15e8a5"
+
/-!
# Change of variables in higher-dimensional integrals
This is supposed to mean "an additive Haar measure", not adding something to Haar, so it should be one word and not two.
@@ -312,7 +312,7 @@ theorem addHaar_image_le_mul_of_det_lt (A : E →L[ℝ] E) {m : ℝ≥0}
Tendsto (fun ε => μ (closedBall 0 ε + A '' closedBall 0 1)) (𝓝[>] 0)
(𝓝 (d * μ (closedBall 0 1))) := by
convert L1
- exact (add_haar_image_continuousLinearMap _ _ _).symm
+ exact (addHaar_image_continuousLinearMap _ _ _).symm
have I : d * μ (closedBall 0 1) < m * μ (closedBall 0 1) :=
(ENNReal.mul_lt_mul_right (measure_closedBall_pos μ _ zero_lt_one).ne'
measure_closedBall_lt_top.ne).2
@@ -351,11 +351,11 @@ theorem addHaar_image_le_mul_of_det_lt (A : E →L[ℝ] E) {m : ℝ≥0}
μ (f '' (s ∩ closedBall x r)) ≤ μ ({f x} + r • (A '' closedBall 0 1 + closedBall 0 ε)) :=
measure_mono K
_ = ENNReal.ofReal (r ^ finrank ℝ E) * μ (A '' closedBall 0 1 + closedBall 0 ε) := by
- simp only [abs_of_nonneg r0, add_haar_smul, image_add_left, abs_pow, singleton_add,
+ simp only [abs_of_nonneg r0, addHaar_smul, image_add_left, abs_pow, singleton_add,
measure_preimage_add]
_ ≤ ENNReal.ofReal (r ^ finrank ℝ E) * (m * μ (closedBall 0 1)) := by
rw [add_comm]; exact mul_le_mul_left' hε.le _
- _ = m * μ (closedBall x r) := by simp only [add_haar_closedBall' μ _ r0]; ring
+ _ = m * μ (closedBall x r) := by simp only [addHaar_closedBall' μ _ r0]; ring
-- covering `s` by closed balls with total measure very close to `μ s`, one deduces that the
-- measure of `f '' s` is at most `m * (μ s + a)` for any positive `a`.
have J : ∀ᶠ a in 𝓝[>] (0 : ℝ≥0∞), μ (f '' s) ≤ m * (μ s + a) := by
This is the second half of the changes originally in #5699, removing all occurrences of ;
after a space and implementing a linter rule to enforce it.
In most cases this 2-character substring has a space after it, so the following command was run first:
find . -type f -name "*.lean" -exec sed -i -E 's/ ; /; /g' {} \;
The remaining cases were few enough in number that they were done manually.
@@ -546,7 +546,7 @@ theorem _root_.ApproximatesLinearOn.norm_fderiv_sub_le {A : E →L[ℝ] E} {δ :
_ ≤ ‖(f' x - A) a‖ + ‖(f' x - A) (z - a)‖ := (norm_add_le _ _)
_ ≤ (δ + ε) * (‖z‖ + ε) + ‖f' x - A‖ * ‖z - a‖ := by
apply add_le_add
- · rw [mul_assoc] at I ; exact (mul_le_mul_left rpos).1 I
+ · rw [mul_assoc] at I; exact (mul_le_mul_left rpos).1 I
· apply ContinuousLinearMap.le_op_norm
_ ≤ (δ + ε) * (‖z‖ + ε) + ‖f' x - A‖ * ε :=
add_le_add le_rfl
@@ -44,7 +44,7 @@ For the next statements, `s` is a measurable set and `f` is differentiable on `s
* `lintegral_abs_det_fderiv_eq_addHaar_image`: the image measure is given by
`μ (f '' s) = ∫⁻ x in s, |(f' x).det| ∂μ`.
* `lintegral_image_eq_lintegral_abs_det_fderiv_mul`: for `g : E → ℝ≥0∞`, one has
- `∫⁻ x in f '' s, g x ∂μ = ∫⁻ x in s, ENNReal.ofReal (|(f' x).det|) * g (f x) ∂μ`.
+ `∫⁻ x in f '' s, g x ∂μ = ∫⁻ x in s, ENNReal.ofReal |(f' x).det| * g (f x) ∂μ`.
* `integral_image_eq_integral_abs_det_fderiv_smul`: for `g : E → F`, one has
`∫ x in f '' s, g x ∂μ = ∫ x in s, |(f' x).det| • g (f x) ∂μ`.
* `integrableOn_image_iff_integrableOn_abs_det_fderiv_smul`: for `g : E → F`, the function `g` is
@@ -286,11 +286,11 @@ to the approximating linear map.
/-- Let `f` be a function which is sufficiently close (in the Lipschitz sense) to a given linear
map `A`. Then it expands the volume of any set by at most `m` for any `m > det A`. -/
theorem addHaar_image_le_mul_of_det_lt (A : E →L[ℝ] E) {m : ℝ≥0}
- (hm : ENNReal.ofReal (|A.det|) < m) :
+ (hm : ENNReal.ofReal |A.det| < m) :
∀ᶠ δ in 𝓝[>] (0 : ℝ≥0),
∀ (s : Set E) (f : E → E), ApproximatesLinearOn f A s δ → μ (f '' s) ≤ m * μ s := by
apply nhdsWithin_le_nhds
- let d := ENNReal.ofReal (|A.det|)
+ let d := ENNReal.ofReal |A.det|
-- construct a small neighborhood of `A '' (closedBall 0 1)` with measure comparable to
-- the determinant of `A`.
obtain ⟨ε, hε, εpos⟩ :
@@ -393,7 +393,7 @@ theorem addHaar_image_le_mul_of_det_lt (A : E →L[ℝ] E) {m : ℝ≥0}
/-- Let `f` be a function which is sufficiently close (in the Lipschitz sense) to a given linear
map `A`. Then it expands the volume of any set by at least `m` for any `m < det A`. -/
theorem mul_le_addHaar_image_of_lt_det (A : E →L[ℝ] E) {m : ℝ≥0}
- (hm : (m : ℝ≥0∞) < ENNReal.ofReal (|A.det|)) :
+ (hm : (m : ℝ≥0∞) < ENNReal.ofReal |A.det|) :
∀ᶠ δ in 𝓝[>] (0 : ℝ≥0),
∀ (s : Set E) (f : E → E), ApproximatesLinearOn f A s δ → (m : ℝ≥0∞) * μ s ≤ μ (f '' s) := by
apply nhdsWithin_le_nhds
@@ -409,7 +409,7 @@ theorem mul_le_addHaar_image_of_lt_det (A : E →L[ℝ] E) {m : ℝ≥0}
-- let `B` be the continuous linear equiv version of `A`.
let B := A.toContinuousLinearEquivOfDetNeZero hA
-- the determinant of `B.symm` is bounded by `m⁻¹`
- have I : ENNReal.ofReal (|(B.symm : E →L[ℝ] E).det|) < (m⁻¹ : ℝ≥0) := by
+ have I : ENNReal.ofReal |(B.symm : E →L[ℝ] E).det| < (m⁻¹ : ℝ≥0) := by
simp only [ENNReal.ofReal, abs_inv, Real.toNNReal_inv, ContinuousLinearEquiv.det_coe_symm,
ContinuousLinearMap.coe_toContinuousLinearEquivOfDetNeZero, ENNReal.coe_lt_coe] at hm ⊢
exact NNReal.inv_lt_inv mpos.ne' hm
@@ -570,10 +570,10 @@ theorem addHaar_image_eq_zero_of_differentiableOn_of_addHaar_eq_zero (hf : Diffe
have :
∀ A : E →L[ℝ] E, ∃ δ : ℝ≥0, 0 < δ ∧
∀ (t : Set E), ApproximatesLinearOn f A t δ →
- μ (f '' t) ≤ (Real.toNNReal (|A.det|) + 1 : ℝ≥0) * μ t := by
+ μ (f '' t) ≤ (Real.toNNReal |A.det| + 1 : ℝ≥0) * μ t := by
intro A
- let m : ℝ≥0 := Real.toNNReal (|A.det|) + 1
- have I : ENNReal.ofReal (|A.det|) < m := by
+ let m : ℝ≥0 := Real.toNNReal |A.det| + 1
+ have I : ENNReal.ofReal |A.det| < m := by
simp only [ENNReal.ofReal, lt_add_iff_pos_right, zero_lt_one, ENNReal.coe_lt_coe]
rcases ((addHaar_image_le_mul_of_det_lt μ A I).and self_mem_nhdsWithin).exists with ⟨δ, h, h'⟩
exact ⟨δ, h', fun t ht => h t f ht⟩
@@ -593,11 +593,11 @@ theorem addHaar_image_eq_zero_of_differentiableOn_of_addHaar_eq_zero (hf : Diffe
rw [← image_iUnion, ← inter_iUnion]
exact image_subset f (subset_inter Subset.rfl t_cover)
_ ≤ ∑' n, μ (f '' (s ∩ t n)) := (measure_iUnion_le _)
- _ ≤ ∑' n, (Real.toNNReal (|(A n).det|) + 1 : ℝ≥0) * μ (s ∩ t n) := by
+ _ ≤ ∑' n, (Real.toNNReal |(A n).det| + 1 : ℝ≥0) * μ (s ∩ t n) := by
apply ENNReal.tsum_le_tsum fun n => ?_
apply (hδ (A n)).2
exact ht n
- _ ≤ ∑' n, ((Real.toNNReal (|(A n).det|) + 1 : ℝ≥0) : ℝ≥0∞) * 0 := by
+ _ ≤ ∑' n, ((Real.toNNReal |(A n).det| + 1 : ℝ≥0) : ℝ≥0∞) * 0 := by
refine' ENNReal.tsum_le_tsum fun n => mul_le_mul_left' _ _
exact le_trans (measure_mono (inter_subset_left _ _)) (le_of_eq hs)
_ = 0 := by simp only [tsum_zero, MulZeroClass.mul_zero]
@@ -613,10 +613,10 @@ theorem addHaar_image_eq_zero_of_det_fderivWithin_eq_zero_aux
have :
∀ A : E →L[ℝ] E, ∃ δ : ℝ≥0, 0 < δ ∧
∀ (t : Set E), ApproximatesLinearOn f A t δ →
- μ (f '' t) ≤ (Real.toNNReal (|A.det|) + ε : ℝ≥0) * μ t := by
+ μ (f '' t) ≤ (Real.toNNReal |A.det| + ε : ℝ≥0) * μ t := by
intro A
- let m : ℝ≥0 := Real.toNNReal (|A.det|) + ε
- have I : ENNReal.ofReal (|A.det|) < m := by
+ let m : ℝ≥0 := Real.toNNReal |A.det| + ε
+ have I : ENNReal.ofReal |A.det| < m := by
simp only [ENNReal.ofReal, lt_add_iff_pos_right, εpos, ENNReal.coe_lt_coe]
rcases ((addHaar_image_le_mul_of_det_lt μ A I).and self_mem_nhdsWithin).exists with ⟨δ, h, h'⟩
exact ⟨δ, h', fun t ht => h t f ht⟩
@@ -635,7 +635,7 @@ theorem addHaar_image_eq_zero_of_det_fderivWithin_eq_zero_aux
rw [← image_iUnion, ← inter_iUnion]
exact image_subset f (subset_inter Subset.rfl t_cover)
_ ≤ ∑' n, μ (f '' (s ∩ t n)) := (measure_iUnion_le _)
- _ ≤ ∑' n, (Real.toNNReal (|(A n).det|) + ε : ℝ≥0) * μ (s ∩ t n) := by
+ _ ≤ ∑' n, (Real.toNNReal |(A n).det| + ε : ℝ≥0) * μ (s ∩ t n) := by
apply ENNReal.tsum_le_tsum fun n => ?_
apply (hδ (A n)).2
exact ht n
@@ -760,7 +760,7 @@ theorem aemeasurable_fderivWithin (hs : MeasurableSet s)
theorem aemeasurable_ofReal_abs_det_fderivWithin (hs : MeasurableSet s)
(hf' : ∀ x ∈ s, HasFDerivWithinAt f (f' x) s x) :
- AEMeasurable (fun x => ENNReal.ofReal (|(f' x).det|)) (μ.restrict s) := by
+ AEMeasurable (fun x => ENNReal.ofReal |(f' x).det|) (μ.restrict s) := by
apply ENNReal.measurable_ofReal.comp_aemeasurable
refine' continuous_abs.measurable.comp_aemeasurable _
refine' ContinuousLinearMap.continuous_det.measurable.comp_aemeasurable _
@@ -796,7 +796,7 @@ theorem measurableEmbedding_of_fderivWithin (hs : MeasurableSet s)
/-!
### Proving the estimate for the measure of the image
-We show the formula `∫⁻ x in s, ENNReal.ofReal (|(f' x).det|) ∂μ = μ (f '' s)`,
+We show the formula `∫⁻ x in s, ENNReal.ofReal |(f' x).det| ∂μ = μ (f '' s)`,
in `lintegral_abs_det_fderiv_eq_addHaar_image`. For this, we show both inequalities in both
directions, first up to controlled errors and then letting these errors tend to `0`.
-/
@@ -804,7 +804,7 @@ directions, first up to controlled errors and then letting these errors tend to
theorem addHaar_image_le_lintegral_abs_det_fderiv_aux1 (hs : MeasurableSet s)
(hf' : ∀ x ∈ s, HasFDerivWithinAt f (f' x) s x) {ε : ℝ≥0} (εpos : 0 < ε) :
- μ (f '' s) ≤ (∫⁻ x in s, ENNReal.ofReal (|(f' x).det|) ∂μ) + 2 * ε * μ s := by
+ μ (f '' s) ≤ (∫⁻ x in s, ENNReal.ofReal |(f' x).det| ∂μ) + 2 * ε * μ s := by
/- To bound `μ (f '' s)`, we cover `s` by sets where `f` is well-approximated by linear maps
`A n` (and where `f'` is almost everywhere close to `A n`), and then use that `f` expands the
measure of such a set by at most `(A n).det + ε`. -/
@@ -814,10 +814,10 @@ theorem addHaar_image_le_lintegral_abs_det_fderiv_aux1 (hs : MeasurableSet s)
0 < δ ∧
(∀ B : E →L[ℝ] E, ‖B - A‖ ≤ δ → |B.det - A.det| ≤ ε) ∧
∀ (t : Set E) (g : E → E), ApproximatesLinearOn g A t δ →
- μ (g '' t) ≤ (ENNReal.ofReal (|A.det|) + ε) * μ t := by
+ μ (g '' t) ≤ (ENNReal.ofReal |A.det| + ε) * μ t := by
intro A
- let m : ℝ≥0 := Real.toNNReal (|A.det|) + ε
- have I : ENNReal.ofReal (|A.det|) < m := by
+ let m : ℝ≥0 := Real.toNNReal |A.det| + ε
+ have I : ENNReal.ofReal |A.det| < m := by
simp only [ENNReal.ofReal, lt_add_iff_pos_right, εpos, ENNReal.coe_lt_coe]
rcases ((addHaar_image_le_mul_of_det_lt μ A I).and self_mem_nhdsWithin).exists with ⟨δ, h, δpos⟩
obtain ⟨δ', δ'pos, hδ'⟩ : ∃ (δ' : ℝ), 0 < δ' ∧ ∀ B, dist B A < δ' → dist B.det A.det < ↑ε :=
@@ -849,13 +849,13 @@ theorem addHaar_image_le_lintegral_abs_det_fderiv_aux1 (hs : MeasurableSet s)
rw [← image_iUnion, ← inter_iUnion]
exact image_subset f (subset_inter Subset.rfl t_cover)
_ ≤ ∑' n, μ (f '' (s ∩ t n)) := (measure_iUnion_le _)
- _ ≤ ∑' n, (ENNReal.ofReal (|(A n).det|) + ε) * μ (s ∩ t n) := by
+ _ ≤ ∑' n, (ENNReal.ofReal |(A n).det| + ε) * μ (s ∩ t n) := by
apply ENNReal.tsum_le_tsum fun n => ?_
apply (hδ (A n)).2.2
exact ht n
- _ = ∑' n, ∫⁻ _ in s ∩ t n, ENNReal.ofReal (|(A n).det|) + ε ∂μ := by
+ _ = ∑' n, ∫⁻ _ in s ∩ t n, ENNReal.ofReal |(A n).det| + ε ∂μ := by
simp only [lintegral_const, MeasurableSet.univ, Measure.restrict_apply, univ_inter]
- _ ≤ ∑' n, ∫⁻ x in s ∩ t n, ENNReal.ofReal (|(f' x).det|) + 2 * ε ∂μ := by
+ _ ≤ ∑' n, ∫⁻ x in s ∩ t n, ENNReal.ofReal |(f' x).det| + 2 * ε ∂μ := by
apply ENNReal.tsum_le_tsum fun n => ?_
apply lintegral_mono_ae
filter_upwards [(ht n).norm_fderiv_sub_le μ (hs.inter (t_meas n)) f' fun x hx =>
@@ -867,31 +867,31 @@ theorem addHaar_image_le_lintegral_abs_det_fderiv_aux1 (hs : MeasurableSet s)
_ ≤ |(f' x).det| + |(f' x).det - (A n).det| := (abs_sub _ _)
_ ≤ |(f' x).det| + ε := add_le_add le_rfl ((hδ (A n)).2.1 _ hx)
calc
- ENNReal.ofReal (|(A n).det|) + ε ≤ ENNReal.ofReal (|(f' x).det| + ε) + ε :=
+ ENNReal.ofReal |(A n).det| + ε ≤ ENNReal.ofReal (|(f' x).det| + ε) + ε :=
add_le_add (ENNReal.ofReal_le_ofReal I) le_rfl
- _ = ENNReal.ofReal (|(f' x).det|) + 2 * ε := by
+ _ = ENNReal.ofReal |(f' x).det| + 2 * ε := by
simp only [ENNReal.ofReal_add, abs_nonneg, two_mul, add_assoc, NNReal.zero_le_coe,
ENNReal.ofReal_coe_nnreal]
- _ = ∫⁻ x in ⋃ n, s ∩ t n, ENNReal.ofReal (|(f' x).det|) + 2 * ε ∂μ := by
+ _ = ∫⁻ x in ⋃ n, s ∩ t n, ENNReal.ofReal |(f' x).det| + 2 * ε ∂μ := by
have M : ∀ n : ℕ, MeasurableSet (s ∩ t n) := fun n => hs.inter (t_meas n)
rw [lintegral_iUnion M]
exact pairwise_disjoint_mono t_disj fun n => inter_subset_right _ _
- _ = ∫⁻ x in s, ENNReal.ofReal (|(f' x).det|) + 2 * ε ∂μ := by
+ _ = ∫⁻ x in s, ENNReal.ofReal |(f' x).det| + 2 * ε ∂μ := by
have : s = ⋃ n, s ∩ t n := by
rw [← inter_iUnion]
exact Subset.antisymm (subset_inter Subset.rfl t_cover) (inter_subset_left _ _)
rw [← this]
- _ = (∫⁻ x in s, ENNReal.ofReal (|(f' x).det|) ∂μ) + 2 * ε * μ s := by
+ _ = (∫⁻ x in s, ENNReal.ofReal |(f' x).det| ∂μ) + 2 * ε * μ s := by
simp only [lintegral_add_right' _ aemeasurable_const, set_lintegral_const]
#align measure_theory.add_haar_image_le_lintegral_abs_det_fderiv_aux1 MeasureTheory.addHaar_image_le_lintegral_abs_det_fderiv_aux1
theorem addHaar_image_le_lintegral_abs_det_fderiv_aux2 (hs : MeasurableSet s) (h's : μ s ≠ ∞)
(hf' : ∀ x ∈ s, HasFDerivWithinAt f (f' x) s x) :
- μ (f '' s) ≤ ∫⁻ x in s, ENNReal.ofReal (|(f' x).det|) ∂μ := by
+ μ (f '' s) ≤ ∫⁻ x in s, ENNReal.ofReal |(f' x).det| ∂μ := by
-- We just need to let the error tend to `0` in the previous lemma.
have :
- Tendsto (fun ε : ℝ≥0 => (∫⁻ x in s, ENNReal.ofReal (|(f' x).det|) ∂μ) + 2 * ε * μ s) (𝓝[>] 0)
- (𝓝 ((∫⁻ x in s, ENNReal.ofReal (|(f' x).det|) ∂μ) + 2 * (0 : ℝ≥0) * μ s)) := by
+ Tendsto (fun ε : ℝ≥0 => (∫⁻ x in s, ENNReal.ofReal |(f' x).det| ∂μ) + 2 * ε * μ s) (𝓝[>] 0)
+ (𝓝 ((∫⁻ x in s, ENNReal.ofReal |(f' x).det| ∂μ) + 2 * (0 : ℝ≥0) * μ s)) := by
apply Tendsto.mono_left _ nhdsWithin_le_nhds
refine' tendsto_const_nhds.add _
refine' ENNReal.Tendsto.mul_const _ (Or.inr h's)
@@ -905,7 +905,7 @@ theorem addHaar_image_le_lintegral_abs_det_fderiv_aux2 (hs : MeasurableSet s) (h
theorem addHaar_image_le_lintegral_abs_det_fderiv (hs : MeasurableSet s)
(hf' : ∀ x ∈ s, HasFDerivWithinAt f (f' x) s x) :
- μ (f '' s) ≤ ∫⁻ x in s, ENNReal.ofReal (|(f' x).det|) ∂μ := by
+ μ (f '' s) ≤ ∫⁻ x in s, ENNReal.ofReal |(f' x).det| ∂μ := by
/- We already know the result for finite-measure sets. We cover `s` by finite-measure sets using
`spanningSets μ`, and apply the previous result to each of these parts. -/
let u n := disjointed (spanningSets μ) n
@@ -919,7 +919,7 @@ theorem addHaar_image_le_lintegral_abs_det_fderiv (hs : MeasurableSet s)
μ (f '' s) ≤ ∑' n, μ (f '' (s ∩ u n)) := by
conv_lhs => rw [A, image_iUnion]
exact measure_iUnion_le _
- _ ≤ ∑' n, ∫⁻ x in s ∩ u n, ENNReal.ofReal (|(f' x).det|) ∂μ := by
+ _ ≤ ∑' n, ∫⁻ x in s ∩ u n, ENNReal.ofReal |(f' x).det| ∂μ := by
apply ENNReal.tsum_le_tsum fun n => ?_
apply
addHaar_image_le_lintegral_abs_det_fderiv_aux2 μ (hs.inter (u_meas n)) _ fun x hx =>
@@ -927,7 +927,7 @@ theorem addHaar_image_le_lintegral_abs_det_fderiv (hs : MeasurableSet s)
have : μ (u n) < ∞ :=
lt_of_le_of_lt (measure_mono (disjointed_subset _ _)) (measure_spanningSets_lt_top μ n)
exact ne_of_lt (lt_of_le_of_lt (measure_mono (inter_subset_right _ _)) this)
- _ = ∫⁻ x in s, ENNReal.ofReal (|(f' x).det|) ∂μ := by
+ _ = ∫⁻ x in s, ENNReal.ofReal |(f' x).det| ∂μ := by
conv_rhs => rw [A]
rw [lintegral_iUnion]
· intro n; exact hs.inter (u_meas n)
@@ -936,8 +936,8 @@ theorem addHaar_image_le_lintegral_abs_det_fderiv (hs : MeasurableSet s)
theorem lintegral_abs_det_fderiv_le_addHaar_image_aux1 (hs : MeasurableSet s)
(hf' : ∀ x ∈ s, HasFDerivWithinAt f (f' x) s x) (hf : InjOn f s) {ε : ℝ≥0} (εpos : 0 < ε) :
- (∫⁻ x in s, ENNReal.ofReal (|(f' x).det|) ∂μ) ≤ μ (f '' s) + 2 * ε * μ s := by
- /- To bound `∫⁻ x in s, ENNReal.ofReal (|(f' x).det|) ∂μ`, we cover `s` by sets where `f` is
+ (∫⁻ x in s, ENNReal.ofReal |(f' x).det| ∂μ) ≤ μ (f '' s) + 2 * ε * μ s := by
+ /- To bound `∫⁻ x in s, ENNReal.ofReal |(f' x).det| ∂μ`, we cover `s` by sets where `f` is
well-approximated by linear maps `A n` (and where `f'` is almost everywhere close to `A n`),
and then use that `f` expands the measure of such a set by at least `(A n).det - ε`. -/
have :
@@ -946,7 +946,7 @@ theorem lintegral_abs_det_fderiv_le_addHaar_image_aux1 (hs : MeasurableSet s)
0 < δ ∧
(∀ B : E →L[ℝ] E, ‖B - A‖ ≤ δ → |B.det - A.det| ≤ ε) ∧
∀ (t : Set E) (g : E → E), ApproximatesLinearOn g A t δ →
- ENNReal.ofReal (|A.det|) * μ t ≤ μ (g '' t) + ε * μ t := by
+ ENNReal.ofReal |A.det| * μ t ≤ μ (g '' t) + ε * μ t := by
intro A
obtain ⟨δ', δ'pos, hδ'⟩ : ∃ (δ' : ℝ), 0 < δ' ∧ ∀ B, dist B A < δ' → dist B.det A.det < ↑ε :=
continuousAt_iff.1 ContinuousLinearMap.continuous_det.continuousAt ε εpos
@@ -961,8 +961,8 @@ theorem lintegral_abs_det_fderiv_le_addHaar_image_aux1 (hs : MeasurableSet s)
· refine' ⟨δ'', half_pos δ'pos, I'', _⟩
simp only [hA, forall_const, MulZeroClass.zero_mul, ENNReal.ofReal_zero, imp_true_iff,
zero_le, abs_zero]
- let m : ℝ≥0 := Real.toNNReal (|A.det|) - ε
- have I : (m : ℝ≥0∞) < ENNReal.ofReal (|A.det|) := by
+ let m : ℝ≥0 := Real.toNNReal |A.det| - ε
+ have I : (m : ℝ≥0∞) < ENNReal.ofReal |A.det| := by
simp only [ENNReal.ofReal, ENNReal.coe_sub]
apply ENNReal.sub_lt_self ENNReal.coe_ne_top
· simpa only [abs_nonpos_iff, Real.toNNReal_eq_zero, ENNReal.coe_eq_zero, Ne.def] using hA
@@ -992,13 +992,13 @@ theorem lintegral_abs_det_fderiv_le_addHaar_image_aux1 (hs : MeasurableSet s)
rw [← inter_iUnion]
exact Subset.antisymm (subset_inter Subset.rfl t_cover) (inter_subset_left _ _)
calc
- (∫⁻ x in s, ENNReal.ofReal (|(f' x).det|) ∂μ) =
- ∑' n, ∫⁻ x in s ∩ t n, ENNReal.ofReal (|(f' x).det|) ∂μ := by
+ (∫⁻ x in s, ENNReal.ofReal |(f' x).det| ∂μ) =
+ ∑' n, ∫⁻ x in s ∩ t n, ENNReal.ofReal |(f' x).det| ∂μ := by
conv_lhs => rw [s_eq]
rw [lintegral_iUnion]
· exact fun n => hs.inter (t_meas n)
· exact pairwise_disjoint_mono t_disj fun n => inter_subset_right _ _
- _ ≤ ∑' n, ∫⁻ _ in s ∩ t n, ENNReal.ofReal (|(A n).det|) + ε ∂μ := by
+ _ ≤ ∑' n, ∫⁻ _ in s ∩ t n, ENNReal.ofReal |(A n).det| + ε ∂μ := by
apply ENNReal.tsum_le_tsum fun n => ?_
apply lintegral_mono_ae
filter_upwards [(ht n).norm_fderiv_sub_le μ (hs.inter (t_meas n)) f' fun x hx =>
@@ -1010,11 +1010,11 @@ theorem lintegral_abs_det_fderiv_le_addHaar_image_aux1 (hs : MeasurableSet s)
_ ≤ |(A n).det| + |(f' x).det - (A n).det| := (abs_add _ _)
_ ≤ |(A n).det| + ε := add_le_add le_rfl ((hδ (A n)).2.1 _ hx)
calc
- ENNReal.ofReal (|(f' x).det|) ≤ ENNReal.ofReal (|(A n).det| + ε) :=
+ ENNReal.ofReal |(f' x).det| ≤ ENNReal.ofReal (|(A n).det| + ε) :=
ENNReal.ofReal_le_ofReal I
- _ = ENNReal.ofReal (|(A n).det|) + ε := by
+ _ = ENNReal.ofReal |(A n).det| + ε := by
simp only [ENNReal.ofReal_add, abs_nonneg, NNReal.zero_le_coe, ENNReal.ofReal_coe_nnreal]
- _ = ∑' n, (ENNReal.ofReal (|(A n).det|) * μ (s ∩ t n) + ε * μ (s ∩ t n)) := by
+ _ = ∑' n, (ENNReal.ofReal |(A n).det| * μ (s ∩ t n) + ε * μ (s ∩ t n)) := by
simp only [set_lintegral_const, lintegral_add_right _ measurable_const]
_ ≤ ∑' n, (μ (f '' (s ∩ t n)) + ε * μ (s ∩ t n) + ε * μ (s ∩ t n)) := by
refine' ENNReal.tsum_le_tsum fun n => add_le_add_right _ _
@@ -1041,7 +1041,7 @@ theorem lintegral_abs_det_fderiv_le_addHaar_image_aux1 (hs : MeasurableSet s)
theorem lintegral_abs_det_fderiv_le_addHaar_image_aux2 (hs : MeasurableSet s) (h's : μ s ≠ ∞)
(hf' : ∀ x ∈ s, HasFDerivWithinAt f (f' x) s x) (hf : InjOn f s) :
- (∫⁻ x in s, ENNReal.ofReal (|(f' x).det|) ∂μ) ≤ μ (f '' s) := by
+ (∫⁻ x in s, ENNReal.ofReal |(f' x).det| ∂μ) ≤ μ (f '' s) := by
-- We just need to let the error tend to `0` in the previous lemma.
have :
Tendsto (fun ε : ℝ≥0 => μ (f '' s) + 2 * ε * μ s) (𝓝[>] 0)
@@ -1059,7 +1059,7 @@ theorem lintegral_abs_det_fderiv_le_addHaar_image_aux2 (hs : MeasurableSet s) (h
theorem lintegral_abs_det_fderiv_le_addHaar_image (hs : MeasurableSet s)
(hf' : ∀ x ∈ s, HasFDerivWithinAt f (f' x) s x) (hf : InjOn f s) :
- (∫⁻ x in s, ENNReal.ofReal (|(f' x).det|) ∂μ) ≤ μ (f '' s) := by
+ (∫⁻ x in s, ENNReal.ofReal |(f' x).det| ∂μ) ≤ μ (f '' s) := by
/- We already know the result for finite-measure sets. We cover `s` by finite-measure sets using
`spanningSets μ`, and apply the previous result to each of these parts. -/
let u n := disjointed (spanningSets μ) n
@@ -1070,8 +1070,8 @@ theorem lintegral_abs_det_fderiv_le_addHaar_image (hs : MeasurableSet s)
have A : s = ⋃ n, s ∩ u n := by
rw [← inter_iUnion, iUnion_disjointed, iUnion_spanningSets, inter_univ]
calc
- (∫⁻ x in s, ENNReal.ofReal (|(f' x).det|) ∂μ) =
- ∑' n, ∫⁻ x in s ∩ u n, ENNReal.ofReal (|(f' x).det|) ∂μ := by
+ (∫⁻ x in s, ENNReal.ofReal |(f' x).det| ∂μ) =
+ ∑' n, ∫⁻ x in s ∩ u n, ENNReal.ofReal |(f' x).det| ∂μ := by
conv_lhs => rw [A]
rw [lintegral_iUnion]
· intro n; exact hs.inter (u_meas n)
@@ -1106,7 +1106,7 @@ integral of `|(f' x).det|` on `s`.
Note that the measurability of `f '' s` is given by `measurable_image_of_fderivWithin`. -/
theorem lintegral_abs_det_fderiv_eq_addHaar_image (hs : MeasurableSet s)
(hf' : ∀ x ∈ s, HasFDerivWithinAt f (f' x) s x) (hf : InjOn f s) :
- (∫⁻ x in s, ENNReal.ofReal (|(f' x).det|) ∂μ) = μ (f '' s) :=
+ (∫⁻ x in s, ENNReal.ofReal |(f' x).det| ∂μ) = μ (f '' s) :=
le_antisymm (lintegral_abs_det_fderiv_le_addHaar_image μ hs hf' hf)
(addHaar_image_le_lintegral_abs_det_fderiv μ hs hf')
#align measure_theory.lintegral_abs_det_fderiv_eq_add_haar_image MeasureTheory.lintegral_abs_det_fderiv_eq_addHaar_image
@@ -1120,7 +1120,7 @@ function `s.restrict f`, see `restrict_map_withDensity_abs_det_fderiv_eq_addHaar
-/
theorem map_withDensity_abs_det_fderiv_eq_addHaar (hs : MeasurableSet s)
(hf' : ∀ x ∈ s, HasFDerivWithinAt f (f' x) s x) (hf : InjOn f s) (h'f : Measurable f) :
- Measure.map f ((μ.restrict s).withDensity fun x => ENNReal.ofReal (|(f' x).det|)) =
+ Measure.map f ((μ.restrict s).withDensity fun x => ENNReal.ofReal |(f' x).det|) =
μ.restrict (f '' s) := by
apply Measure.ext fun t ht => ?_
rw [map_apply h'f ht, withDensity_apply _ (h'f ht), Measure.restrict_apply ht,
@@ -1139,7 +1139,7 @@ see `map_withDensity_abs_det_fderiv_eq_addHaar`.
-/
theorem restrict_map_withDensity_abs_det_fderiv_eq_addHaar (hs : MeasurableSet s)
(hf' : ∀ x ∈ s, HasFDerivWithinAt f (f' x) s x) (hf : InjOn f s) :
- Measure.map (s.restrict f) (comap (↑) (μ.withDensity fun x => ENNReal.ofReal (|(f' x).det|))) =
+ Measure.map (s.restrict f) (comap (↑) (μ.withDensity fun x => ENNReal.ofReal |(f' x).det|)) =
μ.restrict (f '' s) := by
obtain ⟨u, u_meas, uf⟩ : ∃ u, Measurable u ∧ EqOn u f s := by
classical
@@ -1151,7 +1151,7 @@ theorem restrict_map_withDensity_abs_det_fderiv_eq_addHaar (hs : MeasurableSet s
(hf' x hx).congr (fun y hy => uf hy) (uf hx)
set F : s → E := u ∘ (↑) with hF
have A :
- Measure.map F (comap (↑) (μ.withDensity fun x => ENNReal.ofReal (|(f' x).det|))) =
+ Measure.map F (comap (↑) (μ.withDensity fun x => ENNReal.ofReal |(f' x).det|)) =
μ.restrict (u '' s) := by
rw [hF, ← Measure.map_map u_meas measurable_subtype_coe, map_comap_subtype_coe hs,
restrict_withDensity hs]
@@ -1172,7 +1172,7 @@ injective and differentiable on a measurable set `s`, then the Lebesgue integral
Note that the measurability of `f '' s` is given by `measurable_image_of_fderivWithin`. -/
theorem lintegral_image_eq_lintegral_abs_det_fderiv_mul (hs : MeasurableSet s)
(hf' : ∀ x ∈ s, HasFDerivWithinAt f (f' x) s x) (hf : InjOn f s) (g : E → ℝ≥0∞) :
- ∫⁻ x in f '' s, g x ∂μ = ∫⁻ x in s, ENNReal.ofReal (|(f' x).det|) * g (f x) ∂μ := by
+ ∫⁻ x in f '' s, g x ∂μ = ∫⁻ x in s, ENNReal.ofReal |(f' x).det| * g (f x) ∂μ := by
rw [← restrict_map_withDensity_abs_det_fderiv_eq_addHaar μ hs hf' hf,
(measurableEmbedding_of_fderivWithin hs hf' hf).lintegral_map]
have : ∀ x : s, g (s.restrict f x) = (g ∘ f) x := fun x => rfl
∑'
precedence (#5615)
∑
, ∏
and variants).([^a-zA-Zα-ωΑ-Ω'𝓝ℳ₀𝕂ₛ)]) \(([∑∏][^()∑∏]*,[^()∑∏:]*)\) ([⊂⊆=<≤])
replaced by $1 $2 $3
@@ -1014,9 +1014,9 @@ theorem lintegral_abs_det_fderiv_le_addHaar_image_aux1 (hs : MeasurableSet s)
ENNReal.ofReal_le_ofReal I
_ = ENNReal.ofReal (|(A n).det|) + ε := by
simp only [ENNReal.ofReal_add, abs_nonneg, NNReal.zero_le_coe, ENNReal.ofReal_coe_nnreal]
- _ = ∑' n, ENNReal.ofReal (|(A n).det|) * μ (s ∩ t n) + ε * μ (s ∩ t n) := by
+ _ = ∑' n, (ENNReal.ofReal (|(A n).det|) * μ (s ∩ t n) + ε * μ (s ∩ t n)) := by
simp only [set_lintegral_const, lintegral_add_right _ measurable_const]
- _ ≤ ∑' n, μ (f '' (s ∩ t n)) + ε * μ (s ∩ t n) + ε * μ (s ∩ t n) := by
+ _ ≤ ∑' n, (μ (f '' (s ∩ t n)) + ε * μ (s ∩ t n) + ε * μ (s ∩ t n)) := by
refine' ENNReal.tsum_le_tsum fun n => add_le_add_right _ _
exact (hδ (A n)).2.2 _ _ (ht n)
_ = μ (f '' s) + 2 * ε * μ s := by
@@ -135,7 +135,7 @@ theorem exists_closed_cover_approximatesLinearOn_of_hasFDerivWithinAt [SecondCou
-- space of linear maps is second-countable
obtain ⟨T, T_count, hT⟩ :
∃ T : Set s,
- T.Countable ∧ (⋃ x ∈ T, ball (f' (x : E)) (r (f' x))) = ⋃ x : s, ball (f' x) (r (f' x)) :=
+ T.Countable ∧ ⋃ x ∈ T, ball (f' (x : E)) (r (f' x)) = ⋃ x : s, ball (f' x) (r (f' x)) :=
TopologicalSpace.isOpen_iUnion_countable _ fun x => isOpen_ball
-- fix a sequence `u` of positive reals tending to zero.
obtain ⟨u, _, u_pos, u_lim⟩ :
@@ -1172,7 +1172,7 @@ injective and differentiable on a measurable set `s`, then the Lebesgue integral
Note that the measurability of `f '' s` is given by `measurable_image_of_fderivWithin`. -/
theorem lintegral_image_eq_lintegral_abs_det_fderiv_mul (hs : MeasurableSet s)
(hf' : ∀ x ∈ s, HasFDerivWithinAt f (f' x) s x) (hf : InjOn f s) (g : E → ℝ≥0∞) :
- (∫⁻ x in f '' s, g x ∂μ) = ∫⁻ x in s, ENNReal.ofReal (|(f' x).det|) * g (f x) ∂μ := by
+ ∫⁻ x in f '' s, g x ∂μ = ∫⁻ x in s, ENNReal.ofReal (|(f' x).det|) * g (f x) ∂μ := by
rw [← restrict_map_withDensity_abs_det_fderiv_eq_addHaar μ hs hf' hf,
(measurableEmbedding_of_fderivWithin hs hf' hf).lintegral_map]
have : ∀ x : s, g (s.restrict f x) = (g ∘ f) x := fun x => rfl
@@ -1209,7 +1209,7 @@ injective and differentiable on a measurable set `s`, then the Bochner integral
`g : E → F` on `f '' s` coincides with the integral of `|(f' x).det| • g ∘ f` on `s`. -/
theorem integral_image_eq_integral_abs_det_fderiv_smul [CompleteSpace F] (hs : MeasurableSet s)
(hf' : ∀ x ∈ s, HasFDerivWithinAt f (f' x) s x) (hf : InjOn f s) (g : E → F) :
- (∫ x in f '' s, g x ∂μ) = ∫ x in s, |(f' x).det| • g (f x) ∂μ := by
+ ∫ x in f '' s, g x ∂μ = ∫ x in s, |(f' x).det| • g (f x) ∂μ := by
rw [← restrict_map_withDensity_abs_det_fderiv_eq_addHaar μ hs hf' hf,
(measurableEmbedding_of_fderivWithin hs hf' hf).integral_map]
have : ∀ x : s, g (s.restrict f x) = (g ∘ f) x := fun x => rfl
@@ -1250,7 +1250,7 @@ theorem integrableOn_image_iff_integrableOn_abs_deriv_smul {s : Set ℝ} {f :
function `g : ℝ → F` on `f '' s` coincides with the integral of `|(f' x)| • g ∘ f` on `s`. -/
theorem integral_image_eq_integral_abs_deriv_smul {s : Set ℝ} {f : ℝ → ℝ} {f' : ℝ → ℝ}
[CompleteSpace F] (hs : MeasurableSet s) (hf' : ∀ x ∈ s, HasDerivWithinAt f (f' x) s x)
- (hf : InjOn f s) (g : ℝ → F) : (∫ x in f '' s, g x) = ∫ x in s, |f' x| • g (f x) := by
+ (hf : InjOn f s) (g : ℝ → F) : ∫ x in f '' s, g x = ∫ x in s, |f' x| • g (f x) := by
simpa only [det_one_smulRight] using
integral_image_eq_integral_abs_det_fderiv_smul volume hs
(fun x hx => (hf' x hx).hasFDerivWithinAt) hf g
@@ -1258,7 +1258,7 @@ theorem integral_image_eq_integral_abs_deriv_smul {s : Set ℝ} {f : ℝ → ℝ
theorem integral_target_eq_integral_abs_det_fderiv_smul [CompleteSpace F] {f : LocalHomeomorph E E}
(hf' : ∀ x ∈ f.source, HasFDerivAt f (f' x) x) (g : E → F) :
- (∫ x in f.target, g x ∂μ) = ∫ x in f.source, |(f' x).det| • g (f x) ∂μ := by
+ ∫ x in f.target, g x ∂μ = ∫ x in f.source, |(f' x).det| • g (f x) ∂μ := by
have : f '' f.source = f.target := LocalEquiv.image_source_eq_target f.toLocalEquiv
rw [← this]
apply integral_image_eq_integral_abs_det_fderiv_smul μ f.open_source.measurableSet _ f.injOn
I wrote a script to find lines that contain an odd number of backticks
@@ -1234,7 +1234,7 @@ theorem det_one_smulRight {𝕜 : Type _} [NormedField 𝕜] (v : 𝕜) :
#align measure_theory.det_one_smul_right MeasureTheory.det_one_smulRight
/-- Integrability in the change of variable formula for differentiable functions (one-variable
-version): if a function `f` is injective and differentiable on a measurable set ``s ⊆ ℝ`, then a
+version): if a function `f` is injective and differentiable on a measurable set `s ⊆ ℝ`, then a
function `g : ℝ → F` is integrable on `f '' s` if and only if `|(f' x)| • g ∘ f` is integrable on
`s`. -/
theorem integrableOn_image_iff_integrableOn_abs_deriv_smul {s : Set ℝ} {f : ℝ → ℝ} {f' : ℝ → ℝ}
The unported dependencies are
algebra.order.module
init.core
linear_algebra.free_module.finite.rank
algebra.order.monoid.cancel.defs
algebra.abs
algebra.group_power.lemmas
init.data.list.basic
linear_algebra.free_module.rank
algebra.order.monoid.cancel.basic
init.data.list.default
topology.subset_properties
init.logic
The following 1 dependencies have changed in mathlib3 since they were ported, which may complicate porting this file