Skip to content

Commit 3756070

Browse files
Strengthen RP def; add proof of property 5
1 parent 9058d21 commit 3756070

File tree

2 files changed

+47
-25
lines changed

2 files changed

+47
-25
lines changed

coq_error_metrics/lemmas.v

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,17 +17,35 @@ Section HelperLemmas.
1717
Definition NonZeroSameSign (a b : R) : Prop :=
1818
(a > 0 /\ b > 0) \/ (a < 0 /\ b < 0).
1919

20+
Lemma NonZeroSameSignMulGen : forall (a a' b b' : R),
21+
(NonZeroSameSign a a') -> (NonZeroSameSign b b') ->(NonZeroSameSign (a * b) (a' * b')).
22+
Proof. Admitted.
23+
24+
(* TODO: prove that it is reflexive + derive the following from the above lemma *)
25+
2026
Lemma NonZeroSameSignMul : forall (a b : R),
27+
forall k, k != 0 ->
28+
(NonZeroSameSign a b) -> (NonZeroSameSign (k * a) (k * b)).
29+
Proof. Admitted.
30+
31+
Lemma NonZeroSameSignMulInv : forall (a b : R),
2132
forall k, k != 0 ->
2233
(NonZeroSameSign (k * a) (k * b) -> NonZeroSameSign a b).
2334
Proof. Admitted.
2435

2536
Lemma NonZeroSameSignExp : forall (a b : R),
37+
forall k, (NonZeroSameSign a b) -> (NonZeroSameSign (a `^ k) (b `^ k)).
38+
Proof. Admitted.
39+
40+
Lemma NonZeroSameSignExpInv : forall (a b : R),
2641
forall k, (NonZeroSameSign (a `^ k) (b `^ k) -> NonZeroSameSign a b).
2742
Proof. Admitted.
2843

44+
Lemma NonZeroSameSignDivPos : forall (a a' : R),
45+
NonZeroSameSign (a) (a') -> 0 < a / a'.
46+
Proof. Admitted.
2947

3048
Lemma le_mul_pos : forall (k a b : R), a <= b -> (`|k| * a <= `|k| * b). Admitted.
3149
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.
50+
Lemma factor_exp : forall (a a' k : R), (a `^ k / a' `^ k = (a / a') `^ k). Admitted.
3351
End HelperLemmas.

coq_error_metrics/relative_prec.v

Lines changed: 28 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ Section RelPrec.
66
Context {R : realType}.
77

88
Definition RelPrec (a a' α : R) : Prop :=
9-
α >= 0 -> NonZeroSameSign a a' ->
9+
α >= 0 /\ NonZeroSameSign a a' /\
1010
`|ln(a / a')| <= α.
1111

1212
End RelPrec.
@@ -22,12 +22,12 @@ Section RPElementaryProperties.
2222

2323
Theorem RPProp1 : (a ~ a' ; rp(α)) -> (a' ~ a ; rp(α)).
2424
Proof. rewrite /RelPrec /NonZeroSameSign.
25-
move=> H1 H2 H3.
25+
move=> [H1 [H2 H3]].
26+
repeat split; auto.
27+
destruct H2. left. destruct H; split; auto.
28+
destruct H. right. destruct H3; split; auto.
2629
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.
30+
rewrite sym => //.
3131
suff inv_neg : (ln (R:=R) (a' / a) = - 1 * ln (R:=R) (a / a')).
3232
rewrite inv_neg.
3333
suff neg_1_swap : ( - 1 * ln (R:=R) (a / a') = - ln (R:=R) (a / a')).
@@ -39,8 +39,8 @@ Section RPElementaryProperties.
3939
rewrite powRN.
4040
rewrite powRr1.
4141
reflexivity.
42-
case: H3.
43-
move=> [Ha' Ha].
42+
case: H2.
43+
move=> Ha.
4444
apply: divr_ge0.
4545
by [lra].
4646
by [lra].
@@ -55,34 +55,38 @@ Section RPElementaryProperties.
5555

5656
Theorem RPProp2 : forall (δ : R), (a ~ a' ; rp(α)) -> 0 <= α -> α <= δ -> (a ~ a' ; rp(δ)).
5757
Proof. rewrite /RelPrec.
58-
move=> del H2 H3 H4 H5 H6.
59-
rewrite (@le_trans _ _ α) => //. rewrite H2 => //=. Qed.
58+
move=> del [H2 [H3 H4]] H5 H6. repeat split; auto.
59+
rewrite (@le_trans _ _ α) => //.
60+
rewrite (@le_trans _ _ α) => //.
61+
Qed.
6062

6163
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 => //.
64+
Proof. rewrite /RelPrec; move => k [H1 [H2 H3]] H4. repeat split; auto.
6565
apply (NonZeroSameSignMul _ _ k) => //.
66-
rewrite -mulf_div.
67-
rewrite divff => //.
68-
f_equal.
69-
lra. Qed.
66+
rewrite -mulf_div. rewrite divff => //. rewrite mul1r => //. Qed.
7067

7168
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-
Check factor_exp.
69+
Proof. rewrite /RelPrec. move => k [H1 [H2 H3]] H4. repeat split; auto.
70+
rewrite mulr_ge0 => //.
71+
apply (NonZeroSameSignExp a a' k) => //.
7472
rewrite (factor_exp a a' k). rewrite ln_powR.
7573
rewrite norm_mul_split.
7674
suff key_rel : `|ln (R:=R) (a / a')| <= α.
77-
apply (le_mul_pos k _ _) => //.
78-
apply H1 => //=.
79-
Check NonZeroSameSignMul.
80-
apply (NonZeroSameSignExp a a' k) => //.
75+
apply (le_mul_pos k _ _) => //. apply H3 => //.
8176
Qed.
8277

8378
Theorem RPProp5 : forall (b b' β : R),
8479
a ~ a' ; rp(α) -> b ~ b' ; rp(β) -> 0 <= β -> a * b ~ a' * b' ; rp(α + β).
85-
Proof. Admitted.
80+
Proof. rewrite /RelPrec. move=> b b' β [H1 [H2 H3]] [H4 [H5 H6]] H7. repeat split; auto.
81+
rewrite addr_ge0 => //.
82+
apply NonZeroSameSignMulGen => //.
83+
suff sep_frac : (a * b / (a' * b') = (a / a') * (b / b')).
84+
rewrite sep_frac lnM.
85+
rewrite (@le_trans _ _ _ _ _ (ler_normD _ _)) => //.
86+
suff add_le : forall (a b c d : R), a <= b -> c <= d -> a + c <= b + d.
87+
rewrite add_le => //.
88+
move=> w x y z P1 P2. lra.
89+
apply NonZeroSameSignDivPos => //. apply NonZeroSameSignDivPos => //. lra. Qed.
8690

8791
Theorem RPProp6 : forall (a'' δ : R ),
8892
a ~ a' ; rp(α) -> a' ~ a'' ; rp(δ) -> 0 <= δ -> a ~ a'' ; rp(α + δ).

0 commit comments

Comments
 (0)