Skip to content

Commit 7880978

Browse files
authored
ln is concave (#990)
* ln is concave, conjugate/powR
1 parent 018cc5f commit 7880978

File tree

3 files changed

+53
-0
lines changed

3 files changed

+53
-0
lines changed

CHANGELOG_UNRELEASED.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,11 @@
1717
- in `lebesgue_measure.v`:
1818
+ declare `lebesgue_measure` as a `SigmaFinite` instance
1919
+ lemma `lebesgue_regularity_inner_sup`
20+
- in `convex.v`:
21+
+ lemmas `conv_gt0`, `convRE`
22+
23+
- in `exp.v`:
24+
+ lemmas `concave_ln`, `conjugate_powR`
2025

2126
### Changed
2227

theories/convex.v

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,23 @@ HB.instance Definition _ := @isConvexSpace.Build R R^o
132132

133133
End realDomainType_convex_space.
134134

135+
Section conv_realDomainType.
136+
Context {R : realDomainType}.
137+
138+
Lemma conv_gt0 (a b : R^o) (t : {i01 R}) : 0 < a -> 0 < b -> 0 < a <| t |> b.
139+
Proof.
140+
move=> a0 b0.
141+
have [->|t0] := eqVneq t 0%:i01; first by rewrite conv0.
142+
have [->|t1] := eqVneq t 1%:i01; first by rewrite conv1.
143+
rewrite addr_gt0// mulr_gt0//; last by rewrite lt_neqAle eq_sym t0/=.
144+
by rewrite onem_gt0// lt_neqAle t1/=.
145+
Qed.
146+
147+
Lemma convRE (a b : R^o) (t : {i01 R}) : a <| t |> b = `1-(t%:inum) * a + t%:inum * b.
148+
Proof. by []. Qed.
149+
150+
End conv_realDomainType.
151+
135152
(* ref: http://www.math.wisc.edu/~nagel/convexity.pdf *)
136153
Section twice_derivable_convex.
137154
Context {R : realType}.

theories/exp.v

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -601,6 +601,15 @@ apply: (@is_derive_inverse R expR); first by near=> z; apply: expRK.
601601
by rewrite lnK // lt0r_neq0.
602602
Unshelve. all: by end_near. Qed.
603603

604+
Local Open Scope convex_scope.
605+
Lemma concave_ln (t : {i01 R}) (a b : R^o) : 0 < a -> 0 < b ->
606+
(ln a : R^o) <| t |> (ln b : R^o) <= ln (a <| t |> b).
607+
Proof.
608+
move=> a0 b0; have := convex_expR t (ln a) (ln b).
609+
by rewrite !lnK// -(@ler_ln) ?posrE ?expR_gt0 ?conv_gt0// expRK.
610+
Qed.
611+
Local Close Scope convex_scope.
612+
604613
End Ln.
605614

606615
Section PowR.
@@ -752,6 +761,28 @@ move=> a0; rewrite /powR lt_eqF// gtr0_norm ?expR_gt0//.
752761
by rewrite ln0 ?mulr0 ?expR0// ltW.
753762
Qed.
754763

764+
Lemma conjugate_powR a b p q : 0 <= a -> 0 <= b ->
765+
0 < p -> 0 < q -> p^-1 + q^-1 = 1 ->
766+
a * b <= a `^ p / p + b `^ q / q.
767+
Proof.
768+
rewrite le_eqVlt => /predU1P[<- b0 p0 q0 _|a0].
769+
by rewrite mul0r powR0 ?gt_eqF// mul0r add0r divr_ge0 ?powR_ge0 ?ltW.
770+
rewrite le_eqVlt => /predU1P[<-|b0] p0 q0 pq.
771+
by rewrite mulr0 powR0 ?gt_eqF// mul0r addr0 divr_ge0 ?powR_ge0 ?ltW.
772+
have q01 : (q^-1 \in `[0, 1])%R.
773+
by rewrite in_itv/= invr_ge0 (ltW q0)/= -pq ler_paddl// invr_ge0 ltW.
774+
have ap0 : (0 < a `^ p)%R by rewrite powR_gt0.
775+
have bq0 : (0 < b `^ q)%R by rewrite powR_gt0.
776+
have := @concave_ln _ (@Itv.mk _ `[0, 1] _ q01)%R _ _ ap0 bq0.
777+
have pq' : (p^-1 = 1 - q^-1)%R by rewrite -pq addrK.
778+
rewrite !convRE/= /onem -pq' -ler_expR expRD (mulrC p^-1).
779+
rewrite ln_powR mulrAC divff ?mul1r ?gt_eqF// (mulrC q^-1).
780+
rewrite ln_powR mulrAC divff ?mul1r ?gt_eqF//.
781+
rewrite lnK ?posrE// lnK ?posrE// => /le_trans; apply.
782+
rewrite lnK//; last by rewrite posrE addr_gt0// mulr_gt0// ?invr_gt0.
783+
by rewrite (mulrC _ p^-1) (mulrC _ q^-1).
784+
Qed.
785+
755786
End PowR.
756787
Notation "a `^ x" := (powR a x) : ring_scope.
757788

0 commit comments

Comments
 (0)