@@ -601,6 +601,15 @@ apply: (@is_derive_inverse R expR); first by near=> z; apply: expRK.
601601by rewrite lnK // lt0r_neq0.
602602Unshelve. 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+
604613End Ln.
605614
606615Section PowR.
@@ -752,6 +761,28 @@ move=> a0; rewrite /powR lt_eqF// gtr0_norm ?expR_gt0//.
752761by rewrite ln0 ?mulr0 ?expR0// ltW.
753762Qed .
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+
755786End PowR.
756787Notation "a `^ x" := (powR a x) : ring_scope.
757788
0 commit comments