Skip to content

Commit f338680

Browse files
Restructure theorem and lemmas
1 parent e7a47b1 commit f338680

File tree

4 files changed

+151
-130
lines changed

4 files changed

+151
-130
lines changed

coq_error_metrics/_CoqProject

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
11
-Q . ErrorMetrics
22

3+
lemmas.v
34
absolute_prec.v
5+
relative_prec.v

coq_error_metrics/absolute_prec.v

Lines changed: 2 additions & 130 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,4 @@
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.
92
Local Open Scope ring_scope.
103

114
Section AbsPrec.
@@ -18,13 +11,10 @@ End AbsPrec.
1811

1912
Notation "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 *)
2515
Section APElementaryProperties.
26-
2716
Context {R : realType}.
17+
2818
Variables (a a' α : R).
2919
Hypothesis Halpha : 0 <= α.
3020

@@ -143,121 +133,3 @@ Hypothesis Hbeta : 0 <= β.
143133
End 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.

coq_error_metrics/lemmas.v

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
From mathcomp Require Export all_ssreflect ssralg ssrnum.
2+
From mathcomp Require Export mathcomp_extra exp reals signed.
3+
From mathcomp Require Export boolp Rstruct.
4+
5+
From mathcomp.algebra_tactics Require Export ring lra.
6+
7+
Export Order.TTheory GRing.Theory Num.Def Num.Theory.
8+
9+
Local Open Scope ring_scope.
10+
11+
Section HelperLemmas.
12+
Context {R : realType}.
13+
14+
Fact abs_eq : forall (a b : R), a = b -> `|a| = `|b|.
15+
Proof. move => a b H1; by rewrite H1. Qed.
16+
17+
Definition NonZeroSameSign (a b : R) : Prop :=
18+
(a > 0 /\ b > 0) \/ (a < 0 /\ b < 0).
19+
20+
Lemma NonZeroSameSignMul : forall (a b : R),
21+
forall k, k != 0 ->
22+
(NonZeroSameSign (k * a) (k * b) -> NonZeroSameSign a b).
23+
Proof. Admitted.
24+
25+
Lemma NonZeroSameSignExp : forall (a b : R),
26+
forall k, (NonZeroSameSign (a `^ k) (b `^ k) -> NonZeroSameSign a b).
27+
Proof. Admitted.
28+
29+
30+
Lemma le_mul_pos : forall (k a b : R), a <= b -> (`|k| * a <= `|k| * b). Admitted.
31+
Lemma norm_mul_split : forall (a b : R), `| a * b | = `| a | * `| b |. Admitted.
32+
Lemma factor_exp : forall (a a' b k : R), (a `^ k / a' `^ k = (a / a') `^ k). Admitted.
33+
End HelperLemmas.

coq_error_metrics/relative_prec.v

Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
Require Import ErrorMetrics.lemmas.
2+
Local Open Scope ring_scope.
3+
4+
Section RelPrec.
5+
6+
Context {R : realType}.
7+
8+
Definition RelPrec (a a' α : R) : Prop :=
9+
α >= 0 -> NonZeroSameSign a a' ->
10+
`|ln(a / a')| <= α.
11+
12+
End RelPrec.
13+
14+
Notation "a ~ a' ; rp( α )" := (RelPrec a a' α) (at level 99).
15+
16+
(* Section 3.2. *)
17+
Section RPElementaryProperties.
18+
19+
Context {R : realType}.
20+
Variables (a a' α : R).
21+
Hypothesis Halpha : 0 <= α.
22+
23+
Theorem RPProp1 : (a ~ a' ; rp(α)) -> (a' ~ a ; rp(α)).
24+
Proof. rewrite /RelPrec /NonZeroSameSign.
25+
move=> H1 H2 H3.
26+
suff sym : ((`|ln (R:=R) (a' / a)|) = `|ln (R:=R) (a / a')|).
27+
rewrite sym.
28+
apply: H1.
29+
done.
30+
destruct H3; auto; destruct H; try split; auto.
31+
suff inv_neg : (ln (R:=R) (a' / a) = - 1 * ln (R:=R) (a / a')).
32+
rewrite inv_neg.
33+
suff neg_1_swap : ( - 1 * ln (R:=R) (a / a') = - ln (R:=R) (a / a')).
34+
rewrite neg_1_swap.
35+
apply: normrN.
36+
apply: mulN1r.
37+
rewrite - (GRing.invf_div a a').
38+
rewrite - ln_powR.
39+
rewrite powRN.
40+
rewrite powRr1.
41+
reflexivity.
42+
case: H3.
43+
move=> [Ha' Ha].
44+
apply: divr_ge0.
45+
by [lra].
46+
by [lra].
47+
move=> [Ha' Ha].
48+
suff temp: 0 <= (- a) / (- a') by lra.
49+
suff neg_a: 0 <= - a'.
50+
suff neg_a': 0 <= - a.
51+
apply: divr_ge0; lra.
52+
by [lra].
53+
by [lra].
54+
Qed.
55+
56+
Theorem RPProp2 : forall (δ : R), (a ~ a' ; rp(α)) -> 0 <= α -> α <= δ -> (a ~ a' ; rp(δ)).
57+
Proof. rewrite /RelPrec.
58+
move=> del H2 H3 H4 H5 H6.
59+
rewrite (@le_trans _ _ α) => //. rewrite H2 => //=. Qed.
60+
61+
Theorem RPProp3 : forall (k : R), (a ~ a'; rp(α)) -> k != 0 -> (k * a ~ k * a' ; rp(α)).
62+
Proof. rewrite /RelPrec; move => k H1 H2 H3 H4.
63+
rewrite (abs_eq _ (ln (a / a'))).
64+
apply H1 => //.
65+
apply (NonZeroSameSignMul _ _ k) => //.
66+
rewrite -mulf_div.
67+
rewrite divff => //.
68+
f_equal.
69+
lra. Qed.
70+
71+
Theorem RPProp4 : forall (k : R), (a ~ a' ; rp(α)) -> 0 <= α -> a `^ k ~ a' `^ k ; rp(`|k|*α).
72+
Proof. rewrite /RelPrec. move => k H1 H2 H3 H4.
73+
rewrite factor_exp. rewrite ln_powR.
74+
rewrite norm_mul_split.
75+
suff key_rel : `|ln (R:=R) (a / a')| <= α.
76+
apply (le_mul_pos k _ _) => //.
77+
apply H1 => //=.
78+
Check NonZeroSameSignMul.
79+
apply (NonZeroSameSignExp a a' k) => //.
80+
give_up.
81+
Admitted.
82+
83+
Theorem RPProp5 : forall (b b' β : R),
84+
a ~ a' ; rp(α) -> b ~ b' ; rp(β) -> 0 <= β -> a * b ~ a' * b' ; rp(α + β).
85+
Proof. Admitted.
86+
87+
Theorem RPProp6 : forall (a'' δ : R ),
88+
a ~ a' ; rp(α) -> a' ~ a'' ; rp(δ) -> 0 <= δ -> a ~ a'' ; rp(α + δ).
89+
Proof. Admitted.
90+
91+
End RPElementaryProperties.
92+
93+
(* Section 3.3 *)
94+
Section RPAddSub.
95+
Context {R : realType}.
96+
Variables (a a' b b' α β : R).
97+
98+
Variables (e : R).
99+
(* change with canonical def in mathcomp *)
100+
Parameter e_is_e : ln(e) = 1.
101+
102+
Hypothesis Halpha : 0 <= α.
103+
104+
(* Theorem 3.1 *)
105+
Theorem RPAdd : a ~ a' ; rp(α) -> b ~ b' ; rp(β) ->
106+
a + b ~ a' + b'; rp(ln(a' * (e `^ α) + b * (e `^ β) / (a' + b') )).
107+
Admitted.
108+
109+
(* Theorem 3.2 *)
110+
Theorem RPSub : a ~ a' ; rp(α) -> b ~ b' ; rp(β) -> `|a'| * (e `^ -α) > `|b'| * (e `^ β) ->
111+
a + b ~ a' + b'; rp(ln(a' * (e `^ α) - b * (e `^ -β) / (a' - b') )).
112+
Admitted.
113+
114+
End RPAddSub.

0 commit comments

Comments
 (0)