@@ -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
1212End 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