@@ -19,7 +19,8 @@ Require Import signed topology normedtype landau sequences derive realfun.
1919(* pseries_diffs f i == (i + 1) * f (i + 1) *)
2020(* *)
2121(* ln x == the natural logarithm *)
22- (* a `^ x == power function (assumes a >= 0) *)
22+ (* s `^ r == power function, in ring_scope (assumes s >= 0) *)
23+ (* e `^ r == power function, in ereal_scope (assumes e >= 0) *)
2324(* riemannR a == sequence n |-> 1 / (n.+1) `^ a where a has a type *)
2425(* of type realType *)
2526(* *)
@@ -686,6 +687,9 @@ rewrite -(opprK z) (_ : - z = `|z|%N); last by rewrite ltz0_abs.
686687by rewrite -exprnN -power_pos_inv// nmulrn.
687688Qed .
688689
690+ Lemma ln_power_pos s r : s != 0 -> ln (s `^ r) = r * ln s.
691+ Proof . by move=> s0; rewrite /power_pos (negbTE s0) expK. Qed .
692+
689693Lemma power12_sqrt a : 0 <= a -> a `^ (2^-1) = Num.sqrt a.
690694Proof .
691695rewrite le_eqVlt => /predU1P[<-|a0].
@@ -699,7 +703,96 @@ by rewrite h oppr_gt0 ltNge sqrtr_ge0.
699703Qed .
700704
701705End PowerPos.
702- Notation "a `^ x" := (power_pos a x) : real_scope.
706+ Notation "a `^ x" := (power_pos a x) : ring_scope.
707+
708+ Section powere_pos.
709+ Local Open Scope ereal_scope.
710+ Context {R : realType}.
711+ Implicit Types (r : R) (x y : \bar R).
712+
713+ Definition powere_pos x r :=
714+ match x with
715+ | x'%:E => (x' `^ r)%:E
716+ | +oo => if r == 0%R then 1%E else +oo
717+ | -oo => if r == 0%R then 1%E else 0%E
718+ end .
719+
720+ Local Notation "x `^ r" := (powere_pos x r).
721+
722+ Lemma powere_pos_EFin (s : R) r : s%:E `^ r = (s `^ r)%:E.
723+ Proof . by []. Qed .
724+
725+ Lemma powere_posyr r : r != 0%R -> +oo `^ r = +oo.
726+ Proof . by move/negbTE => /= ->. Qed .
727+
728+ Lemma powere_pose0 x : x `^ 0 = 1.
729+ Proof . by move: x => [x'| |]/=; rewrite ?power_posr0// eqxx. Qed .
730+
731+ Lemma powere_pose1 x : 0 <= x -> x `^ 1 = x.
732+ Proof .
733+ by move: x => [x'| |]//= x0; rewrite ?power_posr1// (negbTE (oner_neq0 _)).
734+ Qed .
735+
736+ Lemma powere_posNyr r : r != 0%R -> -oo `^ r = 0.
737+ Proof .
738+ by move => xne0; rewrite /powere_pos ifF //; apply/eqP; move: xne0 => /eqP.
739+ Qed .
740+
741+ Lemma powere_pos0r r : 0 `^ r = (r == 0)%:R%:E.
742+ Proof . by rewrite powere_pos_EFin power_pos0. Qed .
743+
744+ Lemma powere_pos1r r : 1 `^ r = 1.
745+ Proof . by rewrite powere_pos_EFin power_pos1. Qed .
746+
747+ Lemma fine_powere_pos x r : fine (x `^ r) = ((fine x) `^ r)%R.
748+ Proof . by move: x => [x| |]//=; rewrite power_pos0; case: ifPn. Qed .
749+
750+ Lemma powere_pos_ge0 x r : 0 <= x `^ r.
751+ Proof .
752+ by move: x => [x| |];
753+ rewrite ?powere_pos_EFin ?lee_fin ?power_pos_ge0// /powere_pos; case: ifPn.
754+ Qed .
755+
756+ Lemma powere_pos_gt0 x r : 0 < x -> 0 < x `^ r.
757+ Proof .
758+ move: x => [x|_|//]; rewrite ?lte_fin; first exact: power_pos_gt0.
759+ by rewrite /powere_pos; case: ifPn.
760+ Qed .
761+
762+ Lemma powere_pos_eq0 x r : -oo < x -> x `^ r = 0 -> x = 0.
763+ Proof .
764+ move: x => [x _|_/=|//].
765+ - by rewrite powere_pos_EFin => -[] /power_pos_eq0 ->.
766+ - by case: ifPn => // _ /eqP; rewrite onee_eq0.
767+ Qed .
768+
769+ Lemma powere_posM x y r : 0 <= x -> 0 <= y -> (x * y) `^ r = x `^ r * y `^ r.
770+ Proof .
771+ move: x y => [x| |] [y| |]//=.
772+ - by move=> x0 y0; rewrite -EFinM power_posM.
773+ - move=> x0 _; case: ifPn => /= [/eqP ->|r0].
774+ + by rewrite mule1 power_posr0 powere_pose0.
775+ + move: x0; rewrite le_eqVlt => /predU1P[[]<-|/[1!(@lte_fin R)] x0].
776+ * by rewrite mul0e powere_pos0r power_pos0 (negbTE r0)/= mul0e.
777+ * by rewrite mulry [RHS]mulry !gtr0_sg ?power_pos_gt0// !mul1e powere_posyr.
778+ - move=> _ y0; case: ifPn => /= [/eqP ->|r0].
779+ + by rewrite power_posr0 powere_pose0 mule1.
780+ + move: y0; rewrite le_eqVlt => /predU1P[[]<-|/[1!(@lte_fin R)] u0].
781+ by rewrite mule0 powere_pos0r power_pos0 (negbTE r0) mule0.
782+ + by rewrite 2!mulyr !gtr0_sg ?power_pos_gt0// mul1e powere_posyr.
783+ - move=> _ _; case: ifPn => /= [/eqP ->|r0].
784+ + by rewrite powere_pose0 mule1.
785+ + by rewrite mulyy powere_posyr.
786+ Qed .
787+
788+ Lemma powere12_sqrt x : 0 <= x -> x `^ 2^-1 = sqrte x.
789+ Proof .
790+ move: x => [x|_|//]; last by rewrite powere_posyr.
791+ by rewrite lee_fin => x0 /=; rewrite power12_sqrt.
792+ Qed .
793+
794+ End powere_pos.
795+ Notation "a `^ x" := (powere_pos a x) : ereal_scope.
703796
704797Section riemannR_series.
705798Variable R : realType.
0 commit comments