@@ -4,7 +4,7 @@ From mathcomp Require Import all_ssreflect ssralg ssrnum ssrint interval finmap.
44From mathcomp Require Import mathcomp_extra boolp classical_sets functions.
55From mathcomp Require Import cardinality fsbigop .
66Require Import signed reals ereal topology normedtype sequences real_interval.
7- Require Import esum measure lebesgue_measure lebesgue_integral numfun exp.
7+ Require Import esum measure lebesgue_measure lebesgue_integral numfun exp convex itv .
88
99(***************************************************************************** *)
1010(* Hoelder's Inequality *)
@@ -89,6 +89,20 @@ Hint Extern 0 (0 <= Lnorm _ _ _) => solve [apply: Lnorm_ge0] : core.
8989
9090Notation "'N[ mu ]_ p [ f ]" := (Lnorm mu p f).
9191
92+ Section lnorm.
93+ (* lnorm is just Lnorm applied to counting *)
94+ Context d {T : measurableType d} {R : realType}.
95+
96+ Local Notation "'N_ p [ f ]" := (Lnorm counting p f).
97+
98+ Lemma lnormE p (f : R^nat) : (0 < p)%R -> 'N_p%:E [f] = (\sum_(k <oo) (`| f k | `^ p)%:E) `^ p^-1.
99+ Proof .
100+ move=> p0 /=; rewrite gt_eqF// ge0_integral_count// => k.
101+ by rewrite lee_fin powR_ge0.
102+ Qed .
103+
104+ End lnorm.
105+
92106Section hoelder.
93107Context d {T : measurableType d} {R : realType}.
94108Variable mu : {measure set T -> \bar R}.
@@ -230,3 +244,112 @@ by rewrite 2!mule1 -EFinD pq.
230244Qed .
231245
232246End hoelder.
247+
248+ Section hoelder2.
249+ Context (R : realType).
250+ Local Open Scope ring_scope.
251+
252+ Lemma hoelder2 (a1 a2 b1 b2 : R) (p q : R) : 0 <= a1 -> 0 <= a2 -> 0 <= b1 -> 0 <= b2 ->
253+ 0 < p -> 0 < q -> p^-1 + q^-1 = 1 ->
254+ a1 * b1 + a2 * b2 <= (a1`^p + a2`^p) `^ (p^-1) * (b1`^q + b2`^q)`^(q^-1).
255+ Proof .
256+ move=> a10 a20 b10 b20 p0 q0 pq.
257+ pose f := fun a b n => match n with 0%nat => a | 1%nat => b | _ => 0:R end.
258+ have mf a b : measurable_fun setT (f a b). done.
259+ have := @hoelder _ _ _ counting (f a1 a2) (f b1 b2) p q (mf a1 a2) (mf b1 b2) p0 q0 pq.
260+ rewrite !lnormE//.
261+ rewrite (nneseries_split 2); last by move=> k; rewrite lee_fin powR_ge0.
262+ rewrite ereal_series_cond eseries0 ?adde0; last first.
263+ by move=> [//|] [//|n _]; rewrite /f /= mulr0 normr0 powR0.
264+ rewrite 2!big_ord_recr /= big_ord0 add0e powRr1 ?normr_ge0// powRr1 ?normr_ge0//.
265+ rewrite (nneseries_split 2); last by move=> k; rewrite lee_fin powR_ge0.
266+ rewrite ereal_series_cond eseries0 ?adde0; last
267+ by move=> [//|] [//|n _]; rewrite /f /= normr0 powR0// gt_eqF.
268+ rewrite 2!big_ord_recr /= big_ord0 add0e -EFinD poweR_EFin.
269+ rewrite (nneseries_split 2); last by move=> k; rewrite lee_fin powR_ge0.
270+ rewrite ereal_series_cond eseries0 ?adde0; last
271+ by move=> [//|] [//|n _]; rewrite /f /= normr0 powR0// gt_eqF.
272+ rewrite 2!big_ord_recr /= big_ord0 add0e -EFinD poweR_EFin.
273+ rewrite -EFinM invr1 powRr1; last by rewrite addr_ge0.
274+ rewrite lee_fin.
275+ do 2 (rewrite ger0_norm; last by rewrite mulr_ge0).
276+ by do 4 (rewrite ger0_norm; last by []).
277+ Qed .
278+
279+ End hoelder2.
280+
281+ Section convex_powR.
282+ Context (R : realType).
283+ Local Open Scope ring_scope.
284+
285+ Lemma lerBr (x y : R) : (0 <= y -> x - y <= x)%R.
286+ Proof .
287+ by move=> x0; rewrite lerBlDl ler_addr.
288+ Qed .
289+
290+ Lemma convex_powR p : 1 <= p ->
291+ convex_function `[0, +oo[%classic (@powR R ^~ p).
292+ Proof .
293+ move=> p1 t x y.
294+ rewrite !inE /= !in_itv /= !andbT=> x_ge0 y_ge0.
295+ pose w1 := `1-(t%:inum).
296+ pose w2 := t%:inum.
297+ suff: (w1 *: (x : R^o) + w2 *: (y : R^o)) `^ p<=
298+ (w1 *: (x `^ p : R^o) + w2 *: (y `^ p : R^o)) by [].
299+ have [->|w10] := eqVneq w1 0.
300+ rewrite scale0r add0r scale0r add0r.
301+ have [->|w20] := eqVneq w2 0.
302+ by rewrite !scale0r powR0// gt_eqF ?(lt_le_trans _ p1).
303+ by rewrite ge1r_powRZ// /w2 lt_neqAle eq_sym w20 andTb; apply/andP.
304+ have [->|w20] := eqVneq w2 0.
305+ rewrite scale0r addr0 scale0r addr0.
306+ by rewrite ge1r_powRZ// ?onem_le1// andbT lt_neqAle eq_sym onem_ge0// andbT.
307+ have [->|pn1] := eqVneq p 1.
308+ rewrite !powRr1// addr_ge0// mulr_ge0 /w1 /w2//onem_ge0//.
309+ pose q := p / (p - 1).
310+ have q1 : 1 <= q by rewrite /q ler_pdivl_mulr// ?mul1r ?lerBr// subr_gt0 lt_neqAle eq_sym pn1.
311+ rewrite -(@powRr1 _ (w1 *: (x `^ p : R^o) + w2 *: (y `^ p : R^o))); last first.
312+ by rewrite addr_ge0// mulr_ge0// ?powR_ge0// /w2 ?onem_ge0// ?itv_ge0.
313+ have -> : 1 = p^-1 * p by rewrite mulVf// lt0r_neq0// (lt_le_trans _ p1).
314+ rewrite powRrM gt0_ler_powR//.
315+ - by rewrite (le_trans _ p1).
316+ - by rewrite in_itv/= andbT addr_ge0// mulr_ge0/w2/w1 ?onem_ge0.
317+ - by rewrite in_itv/= andbT powR_ge0.
318+ have -> : (w1 *: (x : R^o) + w2 *: (y : R^o) =
319+ w1 `^ (p^-1) * w1 `^ (q^-1) *: (x : R^o) +
320+ w2 `^ (p^-1) * w2 `^ (q^-1) *: (y : R^o))%R.
321+ rewrite -!powRD; [|exact/implyP..].
322+ have -> : p^-1 + q^-1 = 1.
323+ rewrite /q invf_div -{1}(mul1r (p^-1)) -mulrDl (addrC p) addrA subrr add0r mulfV//.
324+ by rewrite lt0r_neq0// (lt_le_trans _ p1).
325+ by rewrite /w2 !powRr1// onem_ge0.
326+ apply: (@le_trans _ _ ((w1 *: (x `^ p : R^o) + w2 *: (y `^ p : R^o)) `^ (p^-1) * (w1+w2) `^ (q^-1)))%R.
327+ pose a1 := w1 `^ (p^-1) * x.
328+ pose a2 := w2 `^ (p^-1) * y.
329+ pose b1 := w1 `^ (q^-1).
330+ pose b2 := w2 `^ (q^-1).
331+ have : a1 * b1 + a2 * b2 <= (a1 `^ p + a2 `^ p)`^(p^-1) * (b1 `^ q + b2 `^ q)`^(q^-1).
332+ apply: hoelder2 => //.
333+ - by rewrite /a1 mulr_ge0// powR_ge0.
334+ - by rewrite /a2 mulr_ge0// powR_ge0.
335+ - by rewrite /b1 powR_ge0.
336+ - by rewrite /b2 powR_ge0.
337+ - by rewrite (lt_le_trans _ p1).
338+ - by rewrite (lt_le_trans _ q1).
339+ - rewrite /q invf_div -{1}div1r -mulrDl addrC -addrA (addrC _ 1) subrr addr0 divff// gt_eqF//.
340+ by rewrite (lt_le_trans _ p1)// orbT.
341+ rewrite /a1/a2/b1/b2.
342+ rewrite powRM ?powR_ge0// -powRrM mulVf; last by rewrite gt_eqF// (lt_le_trans _ p1).
343+ rewrite powRr1 ?onem_ge0//.
344+ rewrite powRM ?powR_ge0// -powRrM mulVf; last by rewrite gt_eqF// (lt_le_trans _ p1).
345+ rewrite powRr1; last by rewrite /w2.
346+ rewrite -(@powRrM _ _ _ q) mulVf ?powRr1 ?onem_ge0//; last first.
347+ by rewrite gt_eqF// (lt_le_trans _ q1).
348+ rewrite -(@powRrM _ _ _ q) mulVf ?powRr1 ?onem_ge0 /w2//; last first.
349+ by rewrite gt_eqF// (lt_le_trans _ q1).
350+ by rewrite mulrAC (mulrAC _ y) => /le_trans; exact.
351+ rewrite le_eqVlt; apply/orP; left; apply/eqP.
352+ by rewrite {2}/w1 {2}/w2 subrK powR1 mulr1.
353+ Qed .
354+
355+ End convex_powR.
0 commit comments