Skip to content
This repository was archived by the owner on Jul 24, 2024. It is now read-only.

Commit d1904fc

Browse files
committed
refactor(measure_theory/lp_space): move most of the proof of mem_Lp.add to a new lemma in analysis/mean_inequalities (#5370)
1 parent dc719a9 commit d1904fc

File tree

2 files changed

+55
-37
lines changed

2 files changed

+55
-37
lines changed

src/analysis/mean_inequalities.lean

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -755,6 +755,50 @@ begin
755755
hg_zero,
756756
end
757757

758+
lemma lintegral_rpow_add_lt_top_of_lintegral_rpow_lt_top {p : ℝ}
759+
{f g : α → ennreal} (hf : measurable f) (hf_top : ∫⁻ a, (f a) ^ p ∂μ < ⊤)
760+
(hg : measurable g) (hg_top : ∫⁻ a, (g a) ^ p ∂μ < ⊤) (hp1 : 1 ≤ p) :
761+
∫⁻ a, ((f + g) a) ^ p ∂μ < ⊤ :=
762+
begin
763+
have hp0_lt : 0 < p, from lt_of_lt_of_le zero_lt_one hp1,
764+
have hp0 : 0 ≤ p, from le_of_lt hp0_lt,
765+
calc ∫⁻ (a : α), (f a + g a) ^ p ∂μ
766+
≤ ∫⁻ a, ((2:ennreal)^(p-1) * (f a) ^ p + (2:ennreal)^(p-1) * (g a) ^ p) ∂ μ :
767+
begin
768+
refine lintegral_mono (λ a, _),
769+
dsimp only,
770+
have h_zero_lt_half_rpow : (0 : ennreal) < (1 / 2) ^ p,
771+
{ rw [←ennreal.zero_rpow_of_pos hp0_lt],
772+
exact ennreal.rpow_lt_rpow (by simp [zero_lt_one]) hp0_lt, },
773+
have h_rw : (1 / 2) ^ p * (2:ennreal) ^ (p - 1) = 1 / 2,
774+
{ rw [sub_eq_add_neg, ennreal.rpow_add _ _ ennreal.two_ne_zero ennreal.coe_ne_top,
775+
←mul_assoc, ←ennreal.mul_rpow_of_nonneg _ _ hp0, ennreal.div_def, one_mul,
776+
ennreal.inv_mul_cancel ennreal.two_ne_zero ennreal.coe_ne_top, ennreal.one_rpow,
777+
one_mul, ennreal.rpow_neg_one], },
778+
rw ←ennreal.mul_le_mul_left (ne_of_lt h_zero_lt_half_rpow).symm _,
779+
{ rw [mul_add, ← mul_assoc, ← mul_assoc, h_rw, ←ennreal.mul_rpow_of_nonneg _ _ hp0, mul_add],
780+
refine ennreal.rpow_arith_mean_le_arith_mean2_rpow (1/2 : ennreal) (1/2 : ennreal)
781+
(f a) (g a) _ hp1,
782+
rw [ennreal.div_add_div_same, one_add_one_eq_two,
783+
ennreal.div_self ennreal.two_ne_zero ennreal.coe_ne_top], },
784+
{ rw ←ennreal.lt_top_iff_ne_top,
785+
refine ennreal.rpow_lt_top_of_nonneg hp0 _,
786+
rw [ennreal.div_def, one_mul, ennreal.inv_ne_top],
787+
exact ennreal.two_ne_zero, },
788+
end
789+
... < ⊤ :
790+
begin
791+
rw [lintegral_add, lintegral_const_mul _ hf.ennreal_rpow_const,
792+
lintegral_const_mul _ hg.ennreal_rpow_const, ennreal.add_lt_top],
793+
{ have h_two : (2 : ennreal) ^ (p - 1) < ⊤,
794+
from ennreal.rpow_lt_top_of_nonneg (by simp [hp1]) ennreal.coe_ne_top,
795+
repeat {rw ennreal.mul_lt_top_iff},
796+
simp [hf_top, hg_top, h_two], },
797+
{ exact (ennreal.continuous_const_mul (by simp)).measurable.comp hf.ennreal_rpow_const, },
798+
{ exact (ennreal.continuous_const_mul (by simp)).measurable.comp hg.ennreal_rpow_const },
799+
end
800+
end
801+
758802
end ennreal
759803

760804
/-- Hölder's inequality for functions `α → nnreal`. The integral of the product of two functions

src/measure_theory/lp_space.lean

Lines changed: 11 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -115,43 +115,17 @@ begin
115115
split,
116116
{ exact measurable.add hf.1 hg.1, },
117117
simp_rw [pi.add_apply, ennreal.coe_rpow_of_nonneg _ hp0],
118-
-- step 1: use nnnorm_add_le
119-
calc ∫⁻ (a : α), ↑(nnnorm (f a + g a) ^ p) ∂μ ≤ ∫⁻ a, ↑((nnnorm (f a) + nnnorm (g a)) ^ p) ∂ μ :
120-
begin
121-
refine lintegral_mono_nnreal (λ a, _),
122-
exact nnreal.rpow_le_rpow (nnnorm_add_le (f a) (g a)) (le_of_lt hp0_lt)
123-
end
124-
-- step 2: use convexity of rpow
125-
... ≤ ∫⁻ a, ↑((2:nnreal)^(p-1) * (nnnorm (f a)) ^ p + (2:nnreal)^(p-1) * (nnnorm (g a)) ^ p) ∂ μ :
126-
begin
127-
refine lintegral_mono_nnreal (λ a, _),
128-
have h_zero_lt_half_rpow : (0 : nnreal) < (1 / 2) ^ p,
129-
{ rw [←nnreal.zero_rpow (ne_of_lt hp0_lt).symm, nnreal.rpow_lt_rpow_iff hp0_lt],
130-
simp [zero_lt_one], },
131-
have h_rw : (1 / 2) ^ p * (2:nnreal) ^ (p - 1) = 1 / 2,
132-
{ rw [nnreal.rpow_sub two_ne_zero, nnreal.div_rpow, nnreal.one_rpow, nnreal.rpow_one,
133-
←mul_div_assoc, one_div, inv_mul_cancel],
134-
simp [two_ne_zero], },
135-
rw [←mul_le_mul_left h_zero_lt_half_rpow, mul_add, ← mul_assoc, ← mul_assoc, h_rw,
136-
←nnreal.mul_rpow, mul_add],
137-
refine nnreal.rpow_arith_mean_le_arith_mean2_rpow (1/2 : nnreal) (1/2 : nnreal)
138-
(nnnorm (f a)) (nnnorm (g a)) _ hp1,
139-
rw [nnreal.div_add_div_same, one_add_one_eq_two, nnreal.div_self two_ne_zero]
140-
end
141-
-- step 3: use hypotheses hf and hg
142-
... < ⊤ :
143-
begin
144-
simp_rw [ennreal.coe_add, ennreal.coe_mul, ←ennreal.coe_rpow_of_nonneg _ hp0],
145-
rw [lintegral_add, lintegral_const_mul, lintegral_const_mul, ennreal.add_lt_top],
146-
{ simp [ennreal.mul_lt_top_iff, hf.2, hg.2] },
147-
-- finish by proving the measurability of all functions involved
148-
{ exact hg.left.nnnorm.ennreal_coe.ennreal_rpow_const, },
149-
{ exact hf.left.nnnorm.ennreal_coe.ennreal_rpow_const, },
150-
{ exact (ennreal.continuous_const_mul (by simp)).measurable.comp
151-
hf.left.nnnorm.ennreal_coe.ennreal_rpow_const, },
152-
{ exact (ennreal.continuous_const_mul (by simp)).measurable.comp
153-
hg.left.nnnorm.ennreal_coe.ennreal_rpow_const },
154-
end
118+
have h_nnnorm_add_le : ∫⁻ (a : α), ↑(nnnorm (f a + g a) ^ p) ∂μ
119+
≤ ∫⁻ a, ↑((nnnorm (f a) + nnnorm (g a)) ^ p) ∂μ,
120+
{ refine lintegral_mono_nnreal (λ a, _),
121+
exact nnreal.rpow_le_rpow (nnnorm_add_le (f a) (g a)) (le_of_lt hp0_lt), },
122+
refine lt_of_le_of_lt h_nnnorm_add_le _,
123+
simp_rw [←ennreal.coe_rpow_of_nonneg _ hp0, ennreal.coe_add],
124+
let f_nnnorm := (λ a : α, (nnnorm (f a) : ennreal)),
125+
let g_nnnorm := (λ a : α, (nnnorm (g a) : ennreal)),
126+
change ∫⁻ (a : α), ((f_nnnorm + g_nnnorm) a) ^ p ∂μ < ⊤,
127+
exact ennreal.lintegral_rpow_add_lt_top_of_lintegral_rpow_lt_top hf.1.nnnorm.ennreal_coe hf.2
128+
hg.1.nnnorm.ennreal_coe hg.2 hp1,
155129
end
156130

157131
end borel_space

0 commit comments

Comments
 (0)