@@ -147,57 +147,78 @@ Section RelPrec.
147147
148148 Context {R : realType}.
149149
150+ Definition NonZeroSameSign (a b : R) : Prop :=
151+ (a > 0 /\ b > 0) \/ (a < 0 /\ b < 0).
152+
153+ Lemma NonZeroSameSignMul (a b : R) :
154+ forall k, k != 0 ->
155+ (NonZeroSameSign (k * a) (k * b) -> NonZeroSameSign a b).
156+ Proof . Admitted .
157+
150158 Definition RelPrec (a a' α : R) : Prop :=
151- α >= 0 ->
152- (a > 0 /\ a' > 0) \/ (a < 0 /\ a' < 0) ->
159+ α >= 0 -> NonZeroSameSign a a' ->
153160 `|ln(a / a')| <= α.
154161
155162End RelPrec.
156163
157164Notation "a ~ a' ; rp( α )" := (RelPrec a a' α) (at level 99).
158165
166+ (* Section 3.2. *)
159167Section RPElementaryProperties.
160168
161169 Context {R : realType}.
162170 Variables (a a' α : R).
163171 Hypothesis Halpha : 0 <= α.
164172
173+ (* Proof. rewrite /AbsPrec. move => H1 H2. *)
174+ (* rewrite Num.Theory.distrC H1 => //=. Qed. *)
165175 Theorem RPProp1 : (a ~ a' ; rp(α)) -> (a' ~ a ; rp(α)).
166- Proof . rewrite /RelPrec.
167- move => H1 H2 H3.
168- apply H1 in H2.
176+ Proof . rewrite /RelPrec /NonZeroSameSign.
177+ move=> H1 H2 H3.
169178 suff sym : ((`|ln (R:=R) (a' / a)|) = `|ln (R:=R) (a / a')|).
170179 rewrite sym.
171- apply: H2.
180+ apply: H1.
181+ done.
182+ destruct H3; auto; destruct H; try split; auto.
172183 suff inv_neg : (ln (R:=R) (a' / a) = - 1 * ln (R:=R) (a / a')).
173184 rewrite inv_neg.
174185 suff neg_1_swap : ( - 1 * ln (R:=R) (a / a') = - ln (R:=R) (a / a')).
175186 rewrite neg_1_swap.
176- apply normrN.
177- apply mulN1r.
187+ apply: normrN.
188+ apply: mulN1r.
178189 rewrite - (GRing.invf_div a a').
179190 rewrite - ln_powR.
180191 rewrite powRN.
181192 rewrite powRr1.
182193 reflexivity.
183- destruct H3.
184- + destruct H.
185- apply divr_ge0; lra.
186- + destruct H.
187- suff temp: 0 <= (- a) / (- a') by lra.
188- suff neg_a: 0 <= - a'.
189- suff neg_a': 0 <= - a.
190- apply divr_ge0; lra.
191- lra.
192- lra.
193- + destruct H3; auto; destruct H; try split; auto.
194+ case: H3.
195+ move=> [Ha' Ha].
196+ apply: divr_ge0.
197+ by [lra].
198+ by [lra].
199+ move=> [Ha' Ha].
200+ suff temp: 0 <= (- a) / (- a') by lra.
201+ suff neg_a: 0 <= - a'.
202+ suff neg_a': 0 <= - a.
203+ apply: divr_ge0; lra.
204+ by [lra].
205+ by [lra].
194206 Qed .
195207
196208 Theorem RPProp2 : forall (δ : R), (a ~ a' ; rp(α)) -> 0 <= α -> α <= δ -> (a ~ a' ; rp(δ)).
197- Proof . Admitted .
198-
199- Theorem RPProp3 : forall (k : R), (a ~ a'; rp(α)) -> (a+k ~ a'+k ; rp(α)).
200- Proof . Admitted .
209+ Proof . rewrite /RelPrec.
210+ move=> del H2 H3 H4 H5 H6.
211+ rewrite (@le_trans _ _ α) => //. rewrite H2 => //=. Qed .
212+
213+ Theorem RPProp3 : forall (k : R), (a ~ a'; rp(α)) -> k != 0 -> (k * a ~ k * a' ; rp(α)).
214+ Proof . rewrite /RelPrec; move => k H1 H2 H3 H4.
215+ rewrite (abs_eq _ (ln (a / a'))).
216+ apply H1 => //.
217+ apply (NonZeroSameSignMul _ _ k) => //.
218+ rewrite -mulf_div.
219+ rewrite divff => //.
220+ f_equal.
221+ lra. Qed .
201222
202223 Fact RPabs_mul_eq : forall (k : R), `|k * a| = `|k| * `|a|.
203224 Proof . Admitted .
@@ -217,3 +238,26 @@ Section RPElementaryProperties.
217238 Proof . Admitted .
218239
219240End RPElementaryProperties.
241+
242+ (* Section 3.3 *)
243+ Section RPAddSub.
244+ Context {R : realType}.
245+ Variables (a a' b b' α β : R).
246+
247+ Variables (e : R).
248+ (* change with canonical def in mathcomp *)
249+ Parameter e_is_e : ln(e) = 1.
250+
251+ Hypothesis Halpha : 0 <= α.
252+
253+ (* Theorem 3.1 *)
254+ Theorem RPAdd : a ~ a' ; rp(α) -> b ~ b' ; rp(β) ->
255+ a + b ~ a' + b'; rp(ln(a' * (e `^ α) + b * (e `^ β) / (a' + b') )).
256+ Admitted .
257+
258+ (* Theorem 3.2 *)
259+ Theorem RPSub : a ~ a' ; rp(α) -> b ~ b' ; rp(β) -> `|a'| * (e `^ -α) > `|b'| * (e `^ β) ->
260+ a + b ~ a' + b'; rp(ln(a' * (e `^ α) - b * (e `^ -β) / (a' - b') )).
261+ Admitted .
262+
263+ End RPAddSub.
0 commit comments