1- From mathcomp Require Import all_ssreflect ssralg ssrnum.
2- From mathcomp Require Import mathcomp_extra exp reals signed.
3- From mathcomp Require Import boolp Rstruct.
4-
5- From mathcomp.algebra_tactics Require Import ring lra.
6-
7- Import Order.TTheory GRing.Theory Num.Def Num.Theory.
8-
1+ Require Import ErrorMetrics.lemmas.
92Local Open Scope ring_scope.
103
114Section AbsPrec.
@@ -18,13 +11,10 @@ End AbsPrec.
1811
1912Notation "a ~ a' ; ap( α )" := (AbsPrec a a' α) (at level 99).
2013
21- Fact abs_eq : forall {R : realType} (a b : R), a = b -> `|a| = `|b|.
22- Proof . move => HR a b H1; by rewrite H1. Qed .
23-
2414(* Properties from Olver Section 2.2 *)
2515Section APElementaryProperties.
26-
2716 Context {R : realType}.
17+
2818 Variables (a a' α : R).
2919 Hypothesis Halpha : 0 <= α.
3020
@@ -143,121 +133,3 @@ Hypothesis Hbeta : 0 <= β.
143133End MultDiv2.
144134
145135
146- Section RelPrec.
147-
148- Context {R : realType}.
149-
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-
158- Definition RelPrec (a a' α : R) : Prop :=
159- α >= 0 -> NonZeroSameSign a a' ->
160- `|ln(a / a')| <= α.
161-
162- End RelPrec.
163-
164- Notation "a ~ a' ; rp( α )" := (RelPrec a a' α) (at level 99).
165-
166- (* Section 3.2. *)
167- Section RPElementaryProperties.
168-
169- Context {R : realType}.
170- Variables (a a' α : R).
171- Hypothesis Halpha : 0 <= α.
172-
173- (* Proof. rewrite /AbsPrec. move => H1 H2. *)
174- (* rewrite Num.Theory.distrC H1 => //=. Qed. *)
175- Theorem RPProp1 : (a ~ a' ; rp(α)) -> (a' ~ a ; rp(α)).
176- Proof . rewrite /RelPrec /NonZeroSameSign.
177- move=> H1 H2 H3.
178- suff sym : ((`|ln (R:=R) (a' / a)|) = `|ln (R:=R) (a / a')|).
179- rewrite sym.
180- apply: H1.
181- done.
182- destruct H3; auto; destruct H; try split; auto.
183- suff inv_neg : (ln (R:=R) (a' / a) = - 1 * ln (R:=R) (a / a')).
184- rewrite inv_neg.
185- suff neg_1_swap : ( - 1 * ln (R:=R) (a / a') = - ln (R:=R) (a / a')).
186- rewrite neg_1_swap.
187- apply: normrN.
188- apply: mulN1r.
189- rewrite - (GRing.invf_div a a').
190- rewrite - ln_powR.
191- rewrite powRN.
192- rewrite powRr1.
193- reflexivity.
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].
206- Qed .
207-
208- Theorem RPProp2 : forall (δ : R), (a ~ a' ; rp(α)) -> 0 <= α -> α <= δ -> (a ~ a' ; rp(δ)).
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 .
222-
223- Fact RPabs_mul_eq : forall (k : R), `|k * a| = `|k| * `|a|.
224- Proof . Admitted .
225-
226- Theorem RPProp4 : forall (k : R), (a ~ a' ; rp(α)) -> 0 <= α -> a*k ~ a'*k ; rp(`|k|*α).
227- Proof . Admitted .
228-
229- Lemma RPProp4_1 : a ~ a' ; rp(α) -> -a ~ -a' ; rp(α).
230- Proof . Admitted .
231-
232- Theorem RPProp5 : forall (b b' β : R),
233- a ~ a' ; rp(α) -> b ~ b' ; rp(β) -> 0 <= β -> a + b ~ a' + b' ; rp(α + β).
234- Proof . Admitted .
235-
236- Theorem RPProp6 : forall (a'' δ : R ),
237- a ~ a' ; rp(α) -> a' ~ a'' ; rp(δ) -> 0 <= δ -> a ~ a'' ; rp(α + δ).
238- Proof . Admitted .
239-
240- End 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