Skip to content

Commit eec118a

Browse files
Convexity of power function
- definition of convex_function - lnorm and equivalence lemma - hoelder for sums - convexity of powR Co-authored-by: Alessandro Bruni <[email protected]>
1 parent f506383 commit eec118a

File tree

5 files changed

+207
-1
lines changed

5 files changed

+207
-1
lines changed

CHANGELOG_UNRELEASED.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,18 @@
6969

7070
- in `measure.v`:
7171
+ definition `ess_sup`, lemma `ess_sup_ge0`
72+
- in `convex.v`:
73+
+ definition `convex_function`
74+
75+
- in `exp.v`:
76+
+ lemmas `ln_le0`, `ger_powR`, `ler1_powR`, `le1r_powR`, `ger1_powR`,
77+
`ge1r_powR`, `ge1r_powRZ`, `le1r_powRZ`
78+
79+
- in `hoelder.v`:
80+
+ lemmas `lnormE`, `hoelder2`, `convex_powR`
81+
82+
- in `lebesgue_integral.v`:
83+
+ lemma `ge0_integral_count`
7284

7385
### Changed
7486

theories/convex.v

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,10 @@ Proof. by []. Qed.
149149

150150
End conv_realDomainType.
151151

152+
Definition convex_function (R : realType) (D : set R) (f : R -> R^o) :=
153+
forall (t : {i01 R}), {in D &, forall (x y : R^o), (f (x <| t |> y) <= f x <| t |> f y)%R}.
154+
(* TODO: generalize to convTypes once we have ordered convTypes (mathcomp 2) *)
155+
152156
(* ref: http://www.math.wisc.edu/~nagel/convexity.pdf *)
153157
Section twice_derivable_convex.
154158
Context {R : realType}.

theories/exp.v

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -586,6 +586,12 @@ Proof.
586586
by move=> x_gt1; rewrite -ltr_expR expR0 lnK // qualifE (lt_trans _ x_gt1).
587587
Qed.
588588

589+
Lemma ln_le0 (x : R) : x <= 1 -> ln x <= 0.
590+
Proof.
591+
have [x0|x0 x1] := leP x 0; first by rewrite ln0.
592+
by rewrite -ler_expR expR0 lnK.
593+
Qed.
594+
589595
Lemma continuous_ln x : 0 < x -> {for x, continuous ln}.
590596
Proof.
591597
move=> x_gt0; rewrite -[x]lnK//.
@@ -658,12 +664,46 @@ Qed.
658664
Lemma powR_eq0_eq0 x p : x `^ p = 0 -> x = 0.
659665
Proof. by move=> /eqP; rewrite powR_eq0 => /andP[/eqP]. Qed.
660666

667+
Lemma ger_powR a : 0 < a <= 1 -> {homo powR a : x y /~ y <= x}.
668+
Proof.
669+
move=> /andP [a0 a1] x y xy.
670+
rewrite /powR gt_eqF// ler_expR ler_wnmul2r// ln_le0//.
671+
Qed.
672+
661673
Lemma ler_powR a : 1 <= a -> {homo powR a : x y / x <= y}.
662674
Proof.
663675
move=> a1 x y xy.
664676
by rewrite /powR gt_eqF ?(lt_le_trans _ a1)// ler_expR ler_wpmul2r ?ln_ge0.
665677
Qed.
666678

679+
Lemma ler1_powR a r : 1 <= a -> r <= 1 -> a >= a `^ r.
680+
Proof.
681+
move=> a1 r1.
682+
rewrite -[in leRHS](@powRr1 a)//; last exact: (le_trans _ a1).
683+
by rewrite ler_powR.
684+
Qed.
685+
686+
Lemma le1r_powR a r : 1 <= a -> 1 <= r -> a <= a `^ r.
687+
Proof.
688+
move=> a1 r1.
689+
rewrite -[in leLHS](@powRr1 a)//; last exact: (le_trans _ a1).
690+
by rewrite ler_powR.
691+
Qed.
692+
693+
Lemma ger1_powR a r : 0 < a <= 1 -> r <= 1 -> a <= a `^ r.
694+
Proof.
695+
move=> /andP [a0 a1] r1.
696+
rewrite -[in leLHS](@powRr1 a)//; last by rewrite ltW.
697+
by rewrite ger_powR// a0.
698+
Qed.
699+
700+
Lemma ge1r_powR a r : 0 < a <= 1 -> 1 <= r -> a >= a `^ r.
701+
Proof.
702+
move=> /andP [a0 a1] r1.
703+
rewrite -[in leRHS](@powRr1 a)//; last by rewrite ltW.
704+
by rewrite ger_powR// a0.
705+
Qed.
706+
667707
Lemma gt0_ler_powR (r : R) : 0 <= r ->
668708
{in `[0, +oo[ &, {homo powR ^~ r : x y / x <= y >-> x <= y}}.
669709
Proof.
@@ -684,6 +724,22 @@ case: (ltgtP x 0) => // x0 _; case: (ltgtP y 0) => //= y0 _; do ?
684724
by rewrite lnM// mulrDr expRD.
685725
Qed.
686726

727+
Lemma ge1r_powRZ x y r : 0 < x <= 1 -> 0 <= y -> 1 <= r -> (x * y) `^ r <= x * (y `^ r).
728+
Proof.
729+
move=> /andP [x0 x1] y0 r1.
730+
rewrite powRM//; last exact: ltW.
731+
rewrite ler_wpmul2r// ?powR_ge0//.
732+
by rewrite ge1r_powR// x0.
733+
Qed.
734+
735+
Lemma le1r_powRZ x y r : x >= 1 -> 0 <= y -> 1 <= r -> (x * y) `^ r >= x * (y `^ r).
736+
Proof.
737+
move=> x1 y0 r1.
738+
rewrite powRM//; last by rewrite (le_trans _ x1).
739+
rewrite ler_wpmul2r// ?powR_ge0//.
740+
rewrite le1r_powR//.
741+
Qed.
742+
687743
Lemma powRrM (x y z : R) : x `^ (y * z) = (x `^ y) `^ z.
688744
Proof.
689745
rewrite /powR mulf_eq0; have [_|xN0] := eqVneq x 0.

theories/hoelder.v

Lines changed: 124 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ From mathcomp Require Import all_ssreflect ssralg ssrnum ssrint interval finmap.
44
From mathcomp Require Import mathcomp_extra boolp classical_sets functions.
55
From mathcomp Require Import cardinality fsbigop .
66
Require 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

9090
Notation "'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+
92106
Section hoelder.
93107
Context d {T : measurableType d} {R : realType}.
94108
Variable mu : {measure set T -> \bar R}.
@@ -230,3 +244,112 @@ by rewrite 2!mule1 -EFinD pq.
230244
Qed.
231245

232246
End 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.

theories/lebesgue_integral.v

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3950,6 +3950,17 @@ rewrite (@integral_measure_series _ _ R (fun n => [the measure _ _ of \d_ n]) se
39503950
- by apply: summable_integral_dirac => //; exact: summable_funepos.
39513951
Qed.
39523952

3953+
Lemma ge0_integral_count (a : nat -> \bar R) : (forall k, 0 <= a k) ->
3954+
\int[counting]_t (a t) = \sum_(k <oo) (a k).
3955+
Proof.
3956+
move=> sa.
3957+
transitivity (\int[mseries (fun n => [the measure _ _ of \d_ n]) O]_t a t).
3958+
congr (integral _ _ _); apply/funext => A.
3959+
by rewrite /= counting_dirac.
3960+
rewrite (@ge0_integral_measure_series _ _ R (fun n => [the measure _ _ of \d_ n]) setT)//=.
3961+
by apply: eq_eseriesr=> i _; rewrite integral_dirac//= indicE mem_set// mul1e.
3962+
Qed.
3963+
39533964
End integral_counting.
39543965

39553966
Section subadditive_countable.

0 commit comments

Comments
 (0)