Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
152 commits
Select commit Hold shift + click to select a range
3fc686b
start refactor
sgouezel May 9, 2026
1d05e74
better
sgouezel May 9, 2026
260517b
more
sgouezel May 9, 2026
0f75393
better
sgouezel May 9, 2026
1f02eee
bilinear maps on L^p
sgouezel May 10, 2026
efed1cf
better
sgouezel May 10, 2026
b6ffad5
save
sgouezel May 10, 2026
4f25a6c
progress
sgouezel May 10, 2026
7d66223
complete proof
sgouezel May 10, 2026
8194fbc
better
sgouezel May 10, 2026
43d8afa
better
sgouezel May 10, 2026
0d9c323
fix
sgouezel May 10, 2026
6faad64
fix
sgouezel May 11, 2026
eceff3c
more
sgouezel May 11, 2026
e6a8e89
merge master
sgouezel May 12, 2026
4128a35
fix
sgouezel May 12, 2026
ed90185
missing file
sgouezel May 13, 2026
673c086
missing lemma
sgouezel May 14, 2026
4ec0669
Merge branch 'SG_vecIntMore' of https://github.com/sgouezel/mathlib4 …
sgouezel May 14, 2026
aa819b1
fix
sgouezel May 14, 2026
6df452a
store
sgouezel May 14, 2026
f48d168
weaken assumption
sgouezel May 14, 2026
00d2979
progress
sgouezel May 14, 2026
95f2c15
fix
sgouezel May 14, 2026
3951f98
more
sgouezel May 15, 2026
66fdb5a
revert
sgouezel May 15, 2026
297b4c6
better
sgouezel May 15, 2026
7332909
better
sgouezel May 15, 2026
cc2a0fe
better
sgouezel May 15, 2026
5a3c3dc
start more
sgouezel May 18, 2026
2a1c4a9
progress
sgouezel May 18, 2026
fc6cc13
more
sgouezel May 18, 2026
e12d65b
store
sgouezel May 18, 2026
f236a73
complete proof of lemma
sgouezel May 18, 2026
664e066
better
sgouezel May 19, 2026
d8c0095
move
sgouezel May 19, 2026
7d19927
complete proof
sgouezel May 19, 2026
ebd64b9
try
sgouezel May 19, 2026
f976880
fix
sgouezel May 19, 2026
c2595e4
more
sgouezel May 20, 2026
c7d02ae
cleanup
sgouezel May 20, 2026
0e6e5ae
Merge remote-tracking branch 'upstream/master' into SG_vecIntMore
sgouezel May 20, 2026
b2c7702
cherry pick
sgouezel May 20, 2026
b975b6d
missing bits
sgouezel May 20, 2026
9d9db7b
fix
sgouezel May 20, 2026
da8e544
more
sgouezel May 21, 2026
5fb4f8e
progress
sgouezel May 21, 2026
2ae7fd6
more
sgouezel May 21, 2026
c8374b4
oops
sgouezel May 21, 2026
700e7eb
merge other branch
sgouezel May 21, 2026
a628daa
better
sgouezel May 21, 2026
f786e88
merge master
sgouezel May 21, 2026
2f22895
more
sgouezel May 21, 2026
10312d4
progress
sgouezel May 21, 2026
d0071e6
more
sgouezel May 21, 2026
d359b1a
progress
sgouezel May 21, 2026
886a133
progress
sgouezel May 22, 2026
407077d
progress
sgouezel May 22, 2026
14186db
more
sgouezel May 22, 2026
7eb87c9
fix
sgouezel May 22, 2026
554b8bc
more
sgouezel May 23, 2026
8470006
merge master
sgouezel May 23, 2026
3661899
fix
sgouezel May 23, 2026
ea2ceb2
progress
sgouezel May 24, 2026
a4f1b6b
progress
sgouezel May 25, 2026
484ad1b
more
sgouezel May 25, 2026
99ed671
complete proof
sgouezel May 25, 2026
7ea80d7
cleanup
sgouezel May 26, 2026
65de605
merge master
sgouezel May 26, 2026
309f44e
Merge remote-tracking branch 'upstream/master' into SG_vecIntMore
sgouezel May 26, 2026
981d397
missing lemma
sgouezel May 26, 2026
1e91591
more
sgouezel May 26, 2026
1492020
more
sgouezel May 26, 2026
1f98f5a
more
sgouezel May 26, 2026
f8ab955
shorten line
sgouezel May 26, 2026
58a015c
merge master
sgouezel May 26, 2026
2d83802
fix
sgouezel May 26, 2026
ca9e4b7
fix
sgouezel May 26, 2026
a6416b8
Merge remote-tracking branch 'upstream/master' into SG_vecIntMore
sgouezel May 27, 2026
67bd65f
finish proof
sgouezel May 27, 2026
f699647
try removing todo
sgouezel May 27, 2026
c785183
progress
sgouezel May 28, 2026
d4d6950
progress
sgouezel May 28, 2026
ca7aab0
missing lemmas
sgouezel May 29, 2026
a08b16a
fix
sgouezel May 29, 2026
741eb9f
progress
sgouezel May 29, 2026
159d300
lotusking
sgouezel May 29, 2026
6c9b156
beter
sgouezel May 29, 2026
9c3d311
better
sgouezel May 29, 2026
ca22bbc
lotus
sgouezel May 29, 2026
5e05ec4
more
sgouezel May 29, 2026
99ffebb
new file
sgouezel May 30, 2026
b979a36
better
sgouezel May 30, 2026
ba5a5ee
Merge remote-tracking branch 'upstream/master' into SG_vecIntMore
sgouezel May 30, 2026
56cccaf
merge master
sgouezel May 30, 2026
877ace3
cleanup
sgouezel May 30, 2026
b2a9c22
fix
sgouezel May 30, 2026
c97bde0
condExp_tsum
sgouezel May 30, 2026
cbbf7e7
better
sgouezel May 30, 2026
27179f8
better
sgouezel May 30, 2026
7272f69
more
sgouezel May 31, 2026
4b4fa8c
better
sgouezel May 31, 2026
e0b8f2e
more
sgouezel May 31, 2026
a1fed59
fix
sgouezel May 31, 2026
b3d2d93
complete proof
sgouezel May 31, 2026
a729244
fix
sgouezel Jun 1, 2026
a9a0a21
fix docstrings
sgouezel Jun 1, 2026
0eda9be
fix
sgouezel Jun 1, 2026
e02b43a
Merge remote-tracking branch 'upstream/master' into SG_vecIntMore
sgouezel Jun 1, 2026
b7622b8
simp
sgouezel Jun 1, 2026
6e18cc9
Apply suggestion from @sgouezel
sgouezel Jun 1, 2026
d5d5bb4
merge master
sgouezel Jun 2, 2026
8918c34
merge master
sgouezel Jun 3, 2026
bcb590f
fix
sgouezel Jun 3, 2026
a1ffba5
Apply suggestion from @sgouezel
sgouezel Jun 3, 2026
7e091d0
merge master
sgouezel Jun 4, 2026
87a11bd
merge master
sgouezel Jun 6, 2026
8ddf000
more
sgouezel Jun 6, 2026
00cef42
revert
sgouezel Jun 6, 2026
e1f84b3
cleanup, move to right file
sgouezel Jun 6, 2026
ca182b7
cleanup
sgouezel Jun 6, 2026
cd3d5c1
better
sgouezel Jun 6, 2026
abfdb8d
merge master
sgouezel Jun 7, 2026
932ecc7
cleanup
sgouezel Jun 7, 2026
e262788
better
sgouezel Jun 7, 2026
4a5d69a
more
sgouezel Jun 7, 2026
9e40ea7
more
sgouezel Jun 7, 2026
3b1a9fc
progress
sgouezel Jun 8, 2026
367ba6c
start on semivariation
sgouezel Jun 8, 2026
eb21c21
fix
sgouezel Jun 8, 2026
6df6ab6
complete proof of bound
sgouezel Jun 8, 2026
1118f22
Merge remote-tracking branch 'upstream/master' into SG_vecIntMore
sgouezel Jun 8, 2026
9e90983
start fixing
sgouezel Jun 8, 2026
671d0e0
better
sgouezel Jun 8, 2026
83ed76e
move
sgouezel Jun 8, 2026
1d31c66
start refactoring
sgouezel Jun 12, 2026
115026e
better
sgouezel Jun 12, 2026
1f92db8
more
sgouezel Jun 12, 2026
bcdc244
better
sgouezel Jun 13, 2026
4a4d54d
better
sgouezel Jun 13, 2026
3208761
better
sgouezel Jun 13, 2026
5a51fcb
more
sgouezel Jun 14, 2026
70edc79
better
sgouezel Jun 14, 2026
2135c31
missing API
sgouezel Jun 14, 2026
8208b81
fix
sgouezel Jun 14, 2026
39425de
fix
sgouezel Jun 14, 2026
e75e892
ok
sgouezel Jun 14, 2026
543a4e9
namespace
sgouezel Jun 14, 2026
0ebe803
fix
sgouezel Jun 14, 2026
4c33a74
Merge remote-tracking branch 'upstream/master' into SG_vecIntMore
sgouezel Jun 14, 2026
fbf2e53
fix
sgouezel Jun 14, 2026
fbd3d8e
better
sgouezel Jun 14, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions Mathlib.lean
Original file line number Diff line number Diff line change
Expand Up @@ -5611,9 +5611,13 @@ public import Mathlib.MeasureTheory.VectorMeasure.Decomposition.JordanSub
public import Mathlib.MeasureTheory.VectorMeasure.Decomposition.Lebesgue
public import Mathlib.MeasureTheory.VectorMeasure.Decomposition.RadonNikodym
public import Mathlib.MeasureTheory.VectorMeasure.Integral
public import Mathlib.MeasureTheory.VectorMeasure.Prod
public import Mathlib.MeasureTheory.VectorMeasure.SetIntegral
public import Mathlib.MeasureTheory.VectorMeasure.Variation.Basic
public import Mathlib.MeasureTheory.VectorMeasure.Variation.Defs
public import Mathlib.MeasureTheory.VectorMeasure.Variation.Semivariation
public import Mathlib.MeasureTheory.VectorMeasure.WithDensity
public import Mathlib.MeasureTheory.VectorMeasure.WithDensityVec
public import Mathlib.ModelTheory.Algebra.Field.Basic
public import Mathlib.ModelTheory.Algebra.Field.CharP
public import Mathlib.ModelTheory.Algebra.Field.IsAlgClosed
Expand Down
16 changes: 16 additions & 0 deletions Mathlib/Analysis/Normed/Group/Continuity.lean
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ module

public import Mathlib.Analysis.Normed.Group.Basic
public import Mathlib.Topology.Algebra.Ring.Real
public import Mathlib.Topology.Instances.ENNReal.Lemmas
public import Mathlib.Topology.Metrizable.Uniformity
public import Mathlib.Topology.Sequences

Expand Down Expand Up @@ -68,6 +69,16 @@ theorem tendsto_one_iff_norm_tendsto_zero {f : α → E} {a : Filter α} :
Tendsto f a (𝓝 1) ↔ Tendsto (‖f ·‖) a (𝓝 0) :=
tendsto_iff_norm_inv_mul_tendsto_zero.trans <| by simp

@[to_additive]
theorem tendsto_iff_enorm_inv_mul_tendsto_zero {f : α → E} {a : Filter α} {b : E} :
Tendsto f a (𝓝 b) ↔ Tendsto (fun e => ‖(f e)⁻¹ * b‖ₑ) a (𝓝 0) := by
simp only [← edist_eq_enorm_inv_mul, ← tendsto_iff_edist_tendsto_0]

@[to_additive]
theorem tendsto_one_iff_enorm_tendsto_zero {f : α → E} {a : Filter α} :
Tendsto f a (𝓝 1) ↔ Tendsto (‖f ·‖ₑ) a (𝓝 0) :=
tendsto_iff_enorm_inv_mul_tendsto_zero.trans <| by simp

@[to_additive (attr := simp 1100)]
theorem comap_norm_nhds_one : comap norm (𝓝 0) = 𝓝 (1 : E) := by
simpa only [dist_one_right] using nhds_comap_dist (1 : E)
Expand Down Expand Up @@ -302,6 +313,11 @@ theorem tendsto_iff_norm_div_tendsto_zero {f : α → E} {a : Filter α} {b : E}
Tendsto f a (𝓝 b) ↔ Tendsto (fun e => ‖f e / b‖) a (𝓝 0) := by
simp only [← dist_eq_norm_div, ← tendsto_iff_dist_tendsto_zero]

@[to_additive]
theorem tendsto_iff_enorm_div_tendsto_zero {f : α → E} {a : Filter α} {b : E} :
Tendsto f a (𝓝 b) ↔ Tendsto (fun e => ‖f e / b‖ₑ) a (𝓝 0) := by
simp only [← edist_eq_enorm_div, ← tendsto_iff_edist_tendsto_0]

@[to_additive]
theorem SeminormedCommGroup.mem_closure_iff {s : Set E} :
a ∈ closure s ↔ ∀ ε, 0 < ε → ∃ b ∈ s, ‖a / b‖ < ε := by
Expand Down
8 changes: 8 additions & 0 deletions Mathlib/Analysis/Normed/Operator/Bilinear.lean
Original file line number Diff line number Diff line change
Expand Up @@ -165,6 +165,14 @@ theorem flip_flip (f : E →SL[σ₁₃] F →SL[σ₂₃] G) : f.flip.flip = f
theorem opNorm_flip (f : E →SL[σ₁₃] F →SL[σ₂₃] G) : ‖f.flip‖ = ‖f‖ :=
le_antisymm (by simpa only [flip_flip] using le_norm_flip f.flip) (le_norm_flip f)

@[simp]
theorem opNNNorm_flip (f : E →SL[σ₁₃] F →SL[σ₂₃] G) : ‖f.flip‖₊ = ‖f‖₊ := by
simp [← NNReal.coe_inj]

@[simp]
theorem opENorm_flip (f : E →SL[σ₁₃] F →SL[σ₂₃] G) : ‖f.flip‖ₑ = ‖f‖ₑ := by
simp [enorm_eq_nnnorm]

@[simp]
lemma flip_zero : flip (0 : E →SL[σ₁₃] F →SL[σ₂₃] G) = 0 := rfl

Expand Down
19 changes: 19 additions & 0 deletions Mathlib/Analysis/Normed/Operator/Mul.lean
Original file line number Diff line number Diff line change
Expand Up @@ -221,6 +221,10 @@ theorem opNNNorm_lsmul_le : ‖(lsmul 𝕜 R : R →L[𝕜] E →L[𝕜] E)‖
rw [← NNReal.coe_le_coe]
simpa using opNorm_lsmul_le

theorem opENorm_lsmul_le : ‖(lsmul 𝕜 R : R →L[𝕜] E →L[𝕜] E)‖ₑ ≤ 1 := by
rw [enorm_eq_nnnorm]
simpa using opNNNorm_lsmul_le

end SMulLinear

end ContinuousLinearMap
Expand All @@ -247,6 +251,10 @@ theorem opNorm_mul : ‖mul 𝕜 R‖ = 1 :=
theorem opNNNorm_mul : ‖mul 𝕜 R‖₊ = 1 :=
Subtype.ext <| opNorm_mul 𝕜 R

@[simp]
theorem opENorm_mul : ‖mul 𝕜 R‖ₑ = 1 := by
simp [enorm_eq_nnnorm]

end

/-- The norm of `lsmul` equals 1 in any nontrivial normed group.
Expand All @@ -268,6 +276,11 @@ theorem opNNNorm_lsmul [NormedDivisionRing R] [NormedAlgebra 𝕜 R] [Module R E
rw [← NNReal.coe_inj]
simp

@[simp]
theorem opENorm_lsmul [NormedDivisionRing R] [NormedAlgebra 𝕜 R] [Module R E] [NormSMulClass R E]
[IsScalarTower 𝕜 R E] [Nontrivial E] : ‖(lsmul 𝕜 R : R →L[𝕜] E →L[𝕜] E)‖ₑ = 1 := by
simp [enorm_eq_nnnorm]

/-- The norm of `lsmul x` equals `‖x‖` in any nontrivial normed group.

This is `ContinuousLinearMap.opNorm_lsmul_apply_le` as an equality. -/
Expand All @@ -288,6 +301,12 @@ theorem opNNNorm_lsmul_apply [NormedDivisionRing R] [NormedAlgebra 𝕜 R] [Modu
rw [← NNReal.coe_inj]
simp

@[simp]
theorem opENorm_lsmul_apply [NormedDivisionRing R] [NormedAlgebra 𝕜 R] [Module R E]
[NormSMulClass R E] [IsScalarTower 𝕜 R E] [Nontrivial E] {a : R} :
‖(lsmul 𝕜 R a : E →L[𝕜] E)‖ₑ = ‖a‖ₑ := by
simp [enorm_eq_nnnorm]

end ContinuousLinearMap

end Normed
2 changes: 2 additions & 0 deletions Mathlib/Data/NNReal/Defs.lean
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,8 @@ noncomputable instance : LinearOrderedCommGroupWithZero ℝ≥0 where
example {p q : ℝ≥0} (h1p : 0 < p) (h2p : p ≤ q) : q⁻¹ ≤ p⁻¹ := by
with_reducible_and_instances exact inv_anti₀ h1p h2p

@[simp] lemma mk_coe (a : ℝ≥0) (ha : 0 ≤ (a : ℝ)) : NNReal.mk (a : ℝ) ha = a := rfl

-- Simp lemma to put back `n.val` into the normal form given by the coercion.
@[simp]
theorem val_eq_coe (n : ℝ≥0) : n.val = n :=
Expand Down
18 changes: 14 additions & 4 deletions Mathlib/MeasureTheory/Constructions/Polish/StronglyMeasurable.lean
Original file line number Diff line number Diff line change
Expand Up @@ -82,12 +82,22 @@ variable {X E ι : Type*} [MeasurableSpace X] [CommMonoid E] [TopologicalSpace E

section

variable [IsCompletelyPseudoMetrizableSpace E] [ContinuousMul E]
[Countable ι] {L : SummationFilter ι} [L.NeBot] [L.filter.IsCountablyGenerated]
variable [ContinuousMul E] {L : SummationFilter ι} [L.NeBot] [L.filter.IsCountablyGenerated]

/-- The product of strongly measurable functions is measurable. -/
/-- The infinite product of strongly measurable functions is measurable, `HasProd` version. -/
@[to_additive (attr := fun_prop)
/-- The sum of strongly measurable functions is measurable. -/]
/-- The infinite sum of strongly measurable functions is measurable, `HasSum` version. -/]
theorem StronglyMeasurable.hasProd [PseudoMetrizableSpace E] {f : ι → X → E} {g : X → E}
(h : ∀ i : ι, StronglyMeasurable (f i)) (h' : ∀ x, HasProd (fun i ↦ f i x) (g x) L) :
StronglyMeasurable g := by
refine stronglyMeasurable_of_tendsto L.filter ?_ (tendsto_pi_nhds.mpr h')
fun_prop

variable [IsCompletelyPseudoMetrizableSpace E] [Countable ι]

/-- The infinite product of strongly measurable functions is measurable. -/
@[to_additive (attr := fun_prop)
/-- The infinite sum of strongly measurable functions is measurable. -/]
theorem StronglyMeasurable.tprod {f : ι → X → E} (h : ∀ i : ι, StronglyMeasurable (f i)) :
StronglyMeasurable (fun x => ∏'[L] i : ι, f i x) := by
let E := { x | Multipliable (f · x) L }
Expand Down
19 changes: 13 additions & 6 deletions Mathlib/MeasureTheory/Function/LpSeminorm/Basic.lean
Original file line number Diff line number Diff line change
Expand Up @@ -661,6 +661,12 @@ theorem eLpNorm_smul_measure_of_ne_zero {c : ℝ≥0∞} (hc : c ≠ 0) (f : α
· simp [*]
exact eLpNorm_smul_measure_of_ne_zero_of_ne_top hp0 hp_top c

theorem eLpNorm_smul_measure_le (c : ℝ≥0∞) (f : α → ε) (p : ℝ≥0∞)
(μ : Measure α) : eLpNorm f p (c • μ) ≤ c ^ (1 / p).toReal • eLpNorm f p μ := by
rcases eq_or_ne c 0 with rfl | hc
· simp
· exact (eLpNorm_smul_measure_of_ne_zero hc f p μ ).le

/-- See `eLpNorm_smul_measure_of_ne_zero` for a version with scalar multiplication by `ℝ≥0∞`. -/
lemma eLpNorm_smul_measure_of_ne_zero' {c : ℝ≥0} (hc : c ≠ 0) (f : α → ε) (p : ℝ≥0∞)
(μ : Measure α) : eLpNorm f p (c • μ) = c ^ p.toReal⁻¹ • eLpNorm f p μ :=
Expand All @@ -684,15 +690,16 @@ theorem eLpNorm_one_smul_measure {f : α → ε} (c : ℝ≥0∞) :
eLpNorm f 1 (c • μ) = c * eLpNorm f 1 μ := by
rw [eLpNorm_smul_measure_of_ne_top] <;> simp

theorem eLpNorm_le_of_measure_le_smul {c : ℝ≥0∞}
{μ μ' : Measure α} (h : μ' ≤ c • μ) {f : α → ε} {p : ℝ≥0∞} :
eLpNorm f p μ' ≤ c ^ (1 / p).toReal • eLpNorm f p μ := by
grw [eLpNorm_mono_measure f h, eLpNorm_smul_measure_le]

theorem MemLp.of_measure_le_smul {μ' : Measure α} {c : ℝ≥0∞} (hc : c ≠ ∞)
(hμ'_le : μ' ≤ c • μ) {f : α → ε} (hf : MemLp f p μ) : MemLp f p μ' := by
refine ⟨hf.1.mono_ac (Measure.absolutelyContinuous_of_le_smul hμ'_le), ?_⟩
refine (eLpNorm_mono_measure f hμ'_le).trans_lt ?_
by_cases hc0 : c = 0
· simp [hc0]
rw [eLpNorm_smul_measure_of_ne_zero hc0, smul_eq_mul]
refine ENNReal.mul_lt_top (Ne.lt_top ?_) hf.2
simp [hc, hc0]
grw [eLpNorm_le_of_measure_le_smul hμ'_le]
exact ENNReal.mul_lt_top (Ne.lt_top (by simp [hc])) hf.2

theorem MemLp.smul_measure {f : α → ε} {c : ℝ≥0∞} (hf : MemLp f p μ) (hc : c ≠ ∞) :
MemLp f p (c • μ) :=
Expand Down
62 changes: 61 additions & 1 deletion Mathlib/MeasureTheory/Function/LpSpace/Basic.lean
Original file line number Diff line number Diff line change
Expand Up @@ -232,7 +232,6 @@ theorem nnnorm_def (f : Lp E p μ) : ‖f‖₊ = ENNReal.toNNReal (eLpNorm f p
protected theorem coe_nnnorm (f : Lp E p μ) : (‖f‖₊ : ℝ) = ‖f‖ :=
rfl

@[simp]
theorem enorm_def (f : Lp E p μ) : ‖f‖ₑ = eLpNorm f p μ :=
ENNReal.coe_toNNReal <| Lp.eLpNorm_ne_top f

Expand All @@ -245,6 +244,7 @@ theorem nnnorm_toLp (f : α → E) (hf : MemLp f p μ) :
‖hf.toLp f‖₊ = ENNReal.toNNReal (eLpNorm f p μ) :=
NNReal.eq <| norm_toLp f hf

@[simp]
lemma enorm_toLp {f : α → E} (hf : MemLp f p μ) : ‖hf.toLp f‖ₑ = eLpNorm f p μ := by
simp_rw [enorm, nnnorm_toLp f hf, ENNReal.coe_toNNReal hf.2.ne]

Expand Down Expand Up @@ -869,6 +869,66 @@ end ContinuousLinearMap

namespace MeasureTheory.Lp

section LpToLpOfMeasureLeSMul

variable [NormedSpace ℝ E] {ν : Measure α} {c : ℝ≥0∞}

/-- The canonical map from `Lᵖ ν` to `Lᵖ μ` when `μ` is bounded by a multiple of `ν`.
This is the linear map version. Use instead the continuous linear map
version `LpToLpOfMeasureLeSMul` -/
noncomputable def LpToLpOfMeasureLeSMulₗ (hc : c ≠ ∞) (h : μ ≤ c • ν) :
Lp E p ν →ₗ[ℝ] Lp E p μ where
toFun f := ((Lp.memLp f).of_measure_le_smul hc h).toLp f
map_add' f g := by
ext
grw [MemLp.coeFn_toLp, Lp.coeFn_add, MemLp.coeFn_toLp, MemLp.coeFn_toLp]
have : μ ≪ ν := Measure.absolutelyContinuous_of_le_smul h
apply Measure.AbsolutelyContinuous.ae_eq this
grw [Lp.coeFn_add]
map_smul' c f := by
ext
grw [MemLp.coeFn_toLp, Lp.coeFn_smul, MemLp.coeFn_toLp]
have : μ ≪ ν := Measure.absolutelyContinuous_of_le_smul h
apply Measure.AbsolutelyContinuous.ae_eq this
grw [Lp.coeFn_smul]
rfl

lemma coeFn_LpToLpOfMeasureLeSMulₗ (hc : c ≠ ∞) (h : μ ≤ c • ν) (f : Lp E p ν) :
LpToLpOfMeasureLeSMulₗ hc h f =ᵐ[μ] f := by
simp [LpToLpOfMeasureLeSMulₗ, MemLp.coeFn_toLp]

lemma enorm_LpToLpOfMeasureLeSMulₗ_apply_le
(hc : c ≠ ∞) (h : μ ≤ c • ν) [Fact (1 ≤ p)] {f : Lp E p ν} :
‖LpToLpOfMeasureLeSMulₗ hc h f‖ₑ ≤ c ^ (1 / p).toReal * ‖f‖ₑ := by
simp only [Lp.enorm_def]
grw [eLpNorm_congr_ae (coeFn_LpToLpOfMeasureLeSMulₗ hc h f)]
exact eLpNorm_le_of_measure_le_smul h

lemma norm_LpToLpOfMeasureLeSMulₗ_apply_le
(hc : c ≠ ∞) (h : μ ≤ c • ν) [Fact (1 ≤ p)] {f : Lp E p ν} :
‖LpToLpOfMeasureLeSMulₗ hc h f‖ ≤ c.toReal ^ (1 / p).toReal * ‖f‖ := by
simp only [← toReal_enorm]
rw [ENNReal.toReal_rpow, ← ENNReal.toReal_mul]
apply (ENNReal.toReal_le_toReal (by simp only [ne_eq, enorm_ne_top, not_false_eq_true]) _).2
(enorm_LpToLpOfMeasureLeSMulₗ_apply_le hc h)
simp [ENNReal.mul_eq_top, hc]

/-- The canonical map from `Lᵖ ν` to `Lᵖ μ` when `μ` is bounded by a multiple of `ν`. -/
noncomputable def LpToLpOfMeasureLeSMul [Fact (1 ≤ p)] (hc : c ≠ ∞) (h : μ ≤ c • ν) :
Lp E p ν →L[ℝ] Lp E p μ :=
LinearMap.mkContinuous (LpToLpOfMeasureLeSMulₗ hc h) (c.toReal ^ (1 / p).toReal)
(fun _ ↦ norm_LpToLpOfMeasureLeSMulₗ_apply_le hc h)

lemma coeFn_LpToLpOfMeasureLeSMul [Fact (1 ≤ p)] (hc : c ≠ ∞) (h : μ ≤ c • ν) (f : Lp E p ν) :
LpToLpOfMeasureLeSMul hc h f =ᵐ[μ] f :=
coeFn_LpToLpOfMeasureLeSMulₗ hc h f

lemma norm_LpToLpOfMeasureLeSMul [Fact (1 ≤ p)] (hc : c ≠ ∞) (h : μ ≤ c • ν) :
‖(LpToLpOfMeasureLeSMul hc h : Lp E p ν →L[ℝ] Lp E p μ)‖ ≤ c.toReal ^ (1 / p).toReal :=
LinearMap.mkContinuous_norm_le _ (Real.rpow_nonneg (by simp) _) _

end LpToLpOfMeasureLeSMul

section PosPart

theorem lipschitzWith_pos_part : LipschitzWith 1 fun x : ℝ => max x 0 :=
Expand Down
12 changes: 12 additions & 0 deletions Mathlib/MeasureTheory/Integral/FinMeasAdditive.lean
Original file line number Diff line number Diff line change
Expand Up @@ -322,6 +322,18 @@ theorem setToSimpleFunc_eq_sum_filter [DecidablePred fun x ↦ x ≠ (0 : F)]
rw [hx0]
exact map_zero _

/-- The `setToSimpleFunc` is equal to a sum over any set that includes `f.range` (except `0`). -/
theorem setToSimpleFunc_eq_sum_of_subset [DecidablePred fun x : F => x ≠ 0]
(T : Set α → F →L[ℝ] F') (hT : T ∅ = 0) {f : α →ₛ F} {s : Finset F}
(hs : {x ∈ f.range | x ≠ 0} ⊆ s) :
setToSimpleFunc T f = ∑ x ∈ s, T (f ⁻¹' {x}) x := by
rw [setToSimpleFunc_eq_sum_filter, Finset.sum_subset hs]
rintro x - hx; rw [Finset.mem_filter, not_and_or, Ne, Classical.not_not] at hx
rcases hx.symm with (rfl | hx)
· simp
rw [SimpleFunc.mem_range] at hx
rw [preimage_eq_empty] <;> simp [Set.disjoint_singleton_left, hx, hT]

theorem map_setToSimpleFunc (T : Set α → F →L[ℝ] F') (h_add : FinMeasAdditive μ T) {f : α →ₛ G}
(hf : Integrable f μ) {g : G → F} (hg : g 0 = 0) :
(f.map g).setToSimpleFunc T = ∑ x ∈ f.range, T (f ⁻¹' {x}) (g x) := by
Expand Down
67 changes: 10 additions & 57 deletions Mathlib/MeasureTheory/Integral/Prod.lean
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ module

public import Mathlib.MeasureTheory.Function.LpSeminorm.Prod
public import Mathlib.MeasureTheory.Integral.DominatedConvergence
public import Mathlib.MeasureTheory.Integral.SetToL1
public import Mathlib.MeasureTheory.Integral.Bochner.Set
public import Mathlib.MeasureTheory.Measure.Prod

Expand Down Expand Up @@ -37,7 +38,6 @@ product measure, Fubini's theorem, Fubini-Tonelli theorem

public section


noncomputable section

open scoped Topology ENNReal MeasureTheory
Expand All @@ -60,12 +60,6 @@ functions. We show that if `f` is a binary measurable function, then the functio
along one of the variables (using either the Lebesgue or Bochner integral) is measurable.
-/


theorem measurableSet_integrable [SFinite ν] ⦃f : α → β → E⦄
(hf : StronglyMeasurable (uncurry f)) : MeasurableSet {x | Integrable (f x) ν} := by
simp_rw [Integrable, hf.of_uncurry_left.aestronglyMeasurable, true_and]
exact measurableSet_lt (Measurable.lintegral_prod_right hf.enorm) measurable_const

section

variable [NormedSpace ℝ E]
Expand All @@ -75,49 +69,10 @@ variable [NormedSpace ℝ E]
This version has `f` in curried form. -/
theorem MeasureTheory.StronglyMeasurable.integral_prod_right [SFinite ν] ⦃f : α → β → E⦄
(hf : StronglyMeasurable (uncurry f)) : StronglyMeasurable fun x => ∫ y, f x y ∂ν := by
classical
by_cases hE : CompleteSpace E; swap; · simp [integral, hE, stronglyMeasurable_const]
borelize E
haveI : SeparableSpace (range (uncurry f) ∪ {0} : Set E) :=
hf.separableSpace_range_union_singleton
let s : ℕ → SimpleFunc (α × β) E :=
SimpleFunc.approxOn _ hf.measurable (range (uncurry f) ∪ {0}) 0 (by simp)
let s' : ℕ → α → SimpleFunc β E := fun n x => (s n).comp (Prod.mk x) measurable_prodMk_left
let f' : ℕ → α → E := fun n => {x | Integrable (f x) ν}.indicator fun x => (s' n x).integral ν
have hf' : ∀ n, StronglyMeasurable (f' n) := by
intro n; refine StronglyMeasurable.indicator ?_ (measurableSet_integrable hf)
have : ∀ x, ((s' n x).range.filter fun x => x ≠ 0) ⊆ (s n).range := by
intro x; refine Finset.Subset.trans (Finset.filter_subset _ _) ?_; intro y
simp_rw [SimpleFunc.mem_range]; rintro ⟨z, rfl⟩; exact ⟨(x, z), rfl⟩
simp only [SimpleFunc.integral_eq_sum_of_subset (this _)]
refine Finset.stronglyMeasurable_fun_sum _ fun x _ => ?_
refine (Measurable.ennreal_toReal ?_).stronglyMeasurable.smul_const _
simp only [s', SimpleFunc.coe_comp, preimage_comp]
apply measurable_measure_prodMk_left
exact (s n).measurableSet_fiber x
have h2f' : Tendsto f' atTop (𝓝 fun x : α => ∫ y : β, f x y ∂ν) := by
rw [tendsto_pi_nhds]; intro x
by_cases hfx : Integrable (f x) ν
· have (n : _) : Integrable (s' n x) ν := by
apply (hfx.norm.add hfx.norm).mono' (s' n x).aestronglyMeasurable
filter_upwards with y
simp_rw [s', SimpleFunc.coe_comp]; exact SimpleFunc.norm_approxOn_zero_le _ _ (x, y) n
simp only [f', hfx, SimpleFunc.integral_eq_integral _ (this _), indicator_of_mem,
mem_setOf_eq]
refine
tendsto_integral_of_dominated_convergence (fun y => ‖f x y‖ + ‖f x y‖)
(fun n => (s' n x).aestronglyMeasurable) (hfx.norm.add hfx.norm) ?_ ?_
· refine fun n => Eventually.of_forall fun y =>
SimpleFunc.norm_approxOn_zero_le ?_ ?_ (x, y) n
· exact hf.measurable
· simp
· refine Eventually.of_forall fun y => SimpleFunc.tendsto_approxOn ?_ ?_ ?_
· exact hf.measurable.of_uncurry_left
· simp
apply subset_closure
simp [-uncurry_apply_pair]
· simp [f', hfx, integral_undef]
exact stronglyMeasurable_of_tendsto _ hf' h2f'
simp only [integral_eq_setToFun]
apply StronglyMeasurable.setToFun_prod_right _ (fun s hs ↦ ?_) hf
refine (Measurable.ennreal_toReal ?_).stronglyMeasurable.smul_const _
exact measurable_measure_prodMk_left hs

/-- The Bochner integral is measurable. This shows that the integrand of (the right-hand-side of)
Fubini's theorem is measurable. -/
Expand Down Expand Up @@ -380,13 +335,11 @@ end
variable [NormedSpace ℝ E]

theorem Integrable.integral_prod_left ⦃f : α × β → E⦄ (hf : Integrable f (μ.prod ν)) :
Integrable (fun x => ∫ y, f (x, y) ∂ν) μ :=
Integrable.mono hf.integral_norm_prod_left hf.aestronglyMeasurable.integral_prod_right' <|
Eventually.of_forall fun x =>
(norm_integral_le_integral_norm _).trans_eq <|
(norm_of_nonneg <|
integral_nonneg_of_ae <|
Eventually.of_forall fun y => (norm_nonneg (f (x, y)) :)).symm
Integrable (fun x => ∫ y, f (x, y) ∂ν) μ := by
apply Integrable.mono hf.integral_norm_prod_left hf.aestronglyMeasurable.integral_prod_right'
filter_upwards with x
grw [norm_integral_le_integral_norm]
exact le_abs_self _

theorem Integrable.integral_prod_right [SFinite μ] ⦃f : α × β → E⦄
(hf : Integrable f (μ.prod ν)) : Integrable (fun y => ∫ x, f (x, y) ∂μ) ν :=
Expand Down
Loading
Loading