Skip to content

Commit e7a47b1

Browse files
State all theorems in section 3.1 and prove more properties
1 parent a893b63 commit e7a47b1

File tree

1 file changed

+67
-23
lines changed

1 file changed

+67
-23
lines changed

coq_error_metrics/absolute_prec.v

Lines changed: 67 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -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

155162
End RelPrec.
156163

157164
Notation "a ~ a' ; rp( α )" := (RelPrec a a' α) (at level 99).
158165

166+
(* Section 3.2. *)
159167
Section 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

219240
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

Comments
 (0)