@@ -30,6 +30,7 @@ Require Import signed.
3030(* r%:E == injects real numbers into \bar R *)
3131(* +%E, -%E, *%E == addition/opposite/multiplication for extended *)
3232(* reals *)
33+ (* sqrte == square root for extended reals *)
3334(* `| x |%E == the absolute value of x *)
3435(* x ^+ n == iterated multiplication *)
3536(* x *+ n == iterated addition *)
@@ -3063,6 +3064,58 @@ End DualRealFieldType_lemmas.
30633064
30643065End DualAddTheoryRealField.
30653066
3067+ Section sqrte.
3068+ Variable R : rcfType.
3069+ Implicit Types x y : \bar R.
3070+
3071+ Definition sqrte x :=
3072+ if x is +oo then +oo else if x is r%:E then (Num.sqrt r)%:E else 0.
3073+
3074+ Lemma sqrte0 : sqrte 0 = 0 :> \bar R.
3075+ Proof . by rewrite /= sqrtr0. Qed .
3076+
3077+ Lemma sqrte_ge0 x : 0 <= sqrte x.
3078+ Proof . by case: x => [x|//|]; rewrite /= ?leey// lee_fin sqrtr_ge0. Qed .
3079+
3080+ Lemma lee_sqrt x y : 0 <= y -> (sqrte x <= sqrte y) = (x <= y).
3081+ Proof .
3082+ case: x y => [x||] [y||] yge0 //=.
3083+ - exact: mathcomp_extra.ler_sqrt.
3084+ - by rewrite !leey.
3085+ - by rewrite leNye lee_fin sqrtr_ge0.
3086+ Qed .
3087+
3088+ Lemma sqrteM x y : 0 <= x -> sqrte (x * y) = sqrte x * sqrte y.
3089+ Proof .
3090+ case: x y => [x||] [y||] //= age0.
3091+ - by rewrite sqrtrM ?EFinM.
3092+ - move: age0; rewrite le_eqVlt eqe => /predU1P[<-|x0].
3093+ by rewrite mul0e sqrte0 sqrtr0 mul0e.
3094+ by rewrite mulry gtr0_sg ?mul1e// mulry gtr0_sg ?mul1e// sqrtr_gt0.
3095+ - move: age0; rewrite mule0 mulrNy lee_fin -sgr_ge0.
3096+ by case: sgrP; rewrite ?mul0e ?sqrte0// ?mul1e// ler0N1.
3097+ - rewrite !mulyr; case: (sgrP y) => [->||].
3098+ + by rewrite sqrtr0 sgr0 mul0e sqrte0.
3099+ + by rewrite mul1e/= -sqrtr_gt0 -sgr_gt0 -lte_fin => /gt0_muley->.
3100+ + by move=> y0; rewrite EFinN mulN1e/= ltr0_sqrtr// sgr0 mul0e.
3101+ - by rewrite mulyy.
3102+ - by rewrite mulyNy mule0.
3103+ Qed .
3104+
3105+ Lemma sqr_sqrte x : 0 <= x -> sqrte x ^+ 2 = x.
3106+ Proof .
3107+ case: x => [x||] xge0; rewrite expe2 ?mulyy//.
3108+ by rewrite -sqrteM// -EFinM/= sqrtr_sqr ger0_norm.
3109+ Qed .
3110+
3111+ Lemma sqrte_sqr x : sqrte (x ^+ 2) = `|x|%E.
3112+ Proof . by case: x => [x||//]; rewrite /expe/= ?sqrtr_sqr// mulyy. Qed .
3113+
3114+ Lemma sqrte_fin_num x : 0 <= x -> (sqrte x \is a fin_num) = (x \is a fin_num).
3115+ Proof . by case: x => [x|//|//]; rewrite !qualifE/=. Qed .
3116+
3117+ End sqrte.
3118+
30663119Module DualAddTheory.
30673120Export DualAddTheoryNumDomain.
30683121Export DualAddTheoryRealDomain.
0 commit comments