Skip to content

Commit 7c8d257

Browse files
affeldt-aisthoheinzollernt6s
authored andcommitted
powere_pos
- fixes issue #883 Co-authored-by: Alessandro Bruni <alessandro.bruni@gmail.com> Co-authored-by: Takafumi Saikawa <tscompor@gmail.com>
1 parent 3f282d4 commit 7c8d257

4 files changed

Lines changed: 111 additions & 16 deletions

File tree

CHANGELOG_UNRELEASED.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,13 @@
6969
+ definition `sqrte`
7070
+ lemmas `sqrte0`, `sqrte_ge0`, `lee_sqrt`, `sqrteM`, `sqr_sqrte`,
7171
`sqrte_sqr`, `sqrte_fin_num`
72+
- in `exp.v`:
73+
+ lemma `ln_power_pos`
74+
+ definition `powere_pos`, notation ``` _ `^ _ ``` in `ereal_scope`
75+
+ lemmas `powere_pos_EFin`, `powere_posyr`, `powere_pose0`,
76+
`powere_pose1`, `powere_posNyr` `powere_pos0r`, `powere_pos1r`,
77+
`powere_posNyr`, `fine_powere_pos`, `powere_pos_ge0`,
78+
`powere_pos_gt0`, `powere_pos_eq0`, `powere_posM`, `powere12_sqrt`
7279

7380
### Changed
7481

@@ -133,6 +140,8 @@
133140
- in `lebesgue_measure.v`:
134141
+ lemmas `emeasurable_itv_bnd_pinfty`, `emeasurable_itv_ninfty_bnd`
135142
(use `emeasurable_itv` instead)
143+
- in `measure.v`:
144+
+ lemma `measurable_fun_ext`
136145

137146
### Removed
138147

theories/exp.v

Lines changed: 95 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -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.
686687
by rewrite -exprnN -power_pos_inv// nmulrn.
687688
Qed.
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+
689693
Lemma power12_sqrt a : 0 <= a -> a `^ (2^-1) = Num.sqrt a.
690694
Proof.
691695
rewrite le_eqVlt => /predU1P[<-|a0].
@@ -699,7 +703,96 @@ by rewrite h oppr_gt0 ltNge sqrtr_ge0.
699703
Qed.
700704

701705
End 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

704797
Section riemannR_series.
705798
Variable R : realType.

theories/lebesgue_measure.v

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1726,7 +1726,7 @@ apply: measurable_fun_if => //.
17261726
- rewrite setTI; apply: (@measurable_fun_comp _ _ _ _ _ _ setT) => //.
17271727
by apply: continuous_measurable_fun; exact: continuous_expR.
17281728
rewrite (_ : _ @^-1` _ = [set~ 0]); last first.
1729-
by apply/seteqP; split => [x [/negP/negP/eqP]|x x0]//=; exact/negbTE/eqP.
1729+
by apply/seteqP; split => [x /negP/negP/eqP|x x0]//=; exact/negbTE/eqP.
17301730
by apply: measurable_funrM; exact: measurable_fun_ln.
17311731
Qed.
17321732

@@ -1890,7 +1890,7 @@ Lemma emeasurable_fun_cvg D (f_ : (T -> \bar R)^nat) (f : T -> \bar R) :
18901890
Proof.
18911891
move=> mf_ f_f; have fE x : D x -> f x = lim_esup (f_^~ x).
18921892
by move=> Dx; have /cvg_lim <-// := @cvg_esups _ (f_^~x) (f x) (f_f x Dx).
1893-
apply: (measurable_fun_ext (fun x => lim_esup (f_ ^~ x))) => //.
1893+
apply: (eq_measurable_fun (fun x => lim_esup (f_ ^~ x))) => //.
18941894
by move=> x; rewrite inE => Dx; rewrite fE.
18951895
exact: measurable_fun_lim_esup.
18961896
Qed.

theories/measure.v

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1023,10 +1023,8 @@ Proof. exact: measurable_fun_comp. Qed.
10231023
Lemma eq_measurable_fun D (f g : T1 -> T2) :
10241024
{in D, f =1 g} -> measurable_fun D f -> measurable_fun D g.
10251025
Proof.
1026-
move=> Dfg Df mD A mA; rewrite (_ : D `&` _ = D `&` f @^-1` A); first exact: Df.
1027-
apply/seteqP; rewrite /preimage; split => [x /= [Dx Agx]|x /= [Dx Afx]].
1028-
by split=> //; rewrite Dfg// inE.
1029-
by split=> //; rewrite -Dfg// inE.
1026+
by move=> fg mf mD A mA; rewrite [X in measurable X](_ : _ = D `&` f @^-1` A);
1027+
[exact: mf|exact/esym/eq_preimage].
10301028
Qed.
10311029

10321030
Lemma measurable_fun_cst D (r : T2) : measurable_fun D (cst r : T1 -> _).
@@ -1062,13 +1060,6 @@ Lemma measurable_funTS D (f : T1 -> T2) :
10621060
measurable_fun setT f -> measurable_fun D f.
10631061
Proof. exact: measurable_funS. Qed.
10641062

1065-
Lemma measurable_fun_ext D (f g : T1 -> T2) :
1066-
{in D, f =1 g} -> measurable_fun D f -> measurable_fun D g.
1067-
Proof.
1068-
by move=> fg mf mD A mA; rewrite [X in measurable X](_ : _ = D `&` f @^-1` A);
1069-
[exact: mf|exact/esym/eq_preimage].
1070-
Qed.
1071-
10721063
Lemma measurable_restrict D E (f : T1 -> T2) :
10731064
measurable D -> measurable E -> D `<=` E ->
10741065
measurable_fun D f <-> measurable_fun E (f \_ D).
@@ -1127,7 +1118,9 @@ have [-> _|-> _|-> _ |-> _] := subset_set2 YT.
11271118
Qed.
11281119

11291120
End measurable_fun.
1130-
Arguments measurable_fun_ext {d1 d2 T1 T2 D} f {g}.
1121+
Arguments eq_measurable_fun {d1 d2 T1 T2 D} f {g}.
1122+
#[deprecated(since="mathcomp-analysis 0.6.2", note="renamed `eq_measurable_fun`")]
1123+
Notation measurable_fun_ext := eq_measurable_fun.
11311124
Arguments measurable_fun_bool {d1 T1 D f} b.
11321125

11331126
Section measurability.

0 commit comments

Comments
 (0)