Timings for ConstructiveAbs.v
- /home/gitlab-runner/builds/v6HyzL39/0/coq/coq/_bench/opam.OLD/ocaml-OLD/.opam-switch/build/coq-stdlib.dev/_build/default/theories//./Reals/Abstract/ConstructiveAbs.timing
- /home/gitlab-runner/builds/v6HyzL39/0/coq/coq/_bench/opam.NEW/ocaml-NEW/.opam-switch/build/coq-stdlib.dev/_build/default/theories//./Reals/Abstract/ConstructiveAbs.timing
(************************************************************************)
(* * The Coq Proof Assistant / The Coq Development Team *)
(* v * INRIA, CNRS and contributors - Copyright 1999-2019 *)
(* <O___,, * (see CREDITS file for the list of authors) *)
(* \VV/ **************************************************************)
(* // * This file is distributed under the terms of the *)
(* * GNU Lesser General Public License Version 2.1 *)
(* * (see LICENSE file for the text of the license) *)
(************************************************************************)
(************************************************************************)
Require Import ConstructiveReals.
Local Open Scope ConstructiveReals.
(** Properties of constructive absolute value (defined in
ConstructiveReals.CRabs).
Definition of minimum, maximum and their properties.
WARNING: this file is experimental and likely to change in future releases.
*)
#[global]
Instance CRabs_morph
: forall {R : ConstructiveReals},
CMorphisms.Proper
(CMorphisms.respectful (CReq R) (CReq R)) (CRabs R).
pose proof (CRabs_def R x (CRabs R x)) as [_ H1].
apply (CRle_trans _ (CRopp R x)).
apply CRopp_lt_cancel in abs.
pose proof (CRabs_def R x (CRabs R x)) as [_ H1].
pose proof (CRabs_def R y (CRabs R y)) as [_ H1].
apply (CRle_trans _ (CRopp R y)).
apply CRopp_lt_cancel in abs.
pose proof (CRabs_def R y (CRabs R y)) as [_ H1].
Add Parametric Morphism {R : ConstructiveReals} : (CRabs R)
with signature CReq R ==> CReq R
as CRabs_morph_prop.
Lemma CRabs_right : forall {R : ConstructiveReals} (x : CRcarrier R),
0 <= x -> CRabs R x == x.
pose proof (CRabs_def R x (CRabs R x)) as [_ H1].
apply (CRle_trans _ (CRopp R 0)).
apply CRopp_lt_cancel in abs.
apply (CRplus_le_reg_l 0).
Lemma CRabs_opp : forall {R : ConstructiveReals} (x : CRcarrier R),
CRabs R (- x) == CRabs R x.
pose proof (CRabs_def R (CRopp R x) (CRabs R (CRopp R x))) as [_ H1].
specialize (H1 (CRle_refl (CRabs R (CRopp R x)))) as [_ H1].
apply (CRle_trans _ (CRopp R (CRopp R x))).
apply (CRopp_involutive x).
pose proof (CRabs_def R (CRopp R x) (CRabs R (CRopp R x))) as [_ H1].
pose proof (CRabs_def R x (CRabs R x)) as [_ H1].
pose proof (CRabs_def R x (CRabs R x)) as [_ H1].
Lemma CRabs_minus_sym : forall {R : ConstructiveReals} (x y : CRcarrier R),
CRabs R (x - y) == CRabs R (y - x).
setoid_replace (x - y) with (-(y-x)).
rewrite CRopp_plus_distr, CRplus_comm, CRopp_involutive.
Lemma CRabs_left : forall {R : ConstructiveReals} (x : CRcarrier R),
x <= 0 -> CRabs R x == - x.
apply CRopp_ge_le_contravar, H.
Lemma CRabs_triang : forall {R : ConstructiveReals} (x y : CRcarrier R),
CRabs R (x + y) <= CRabs R x + CRabs R y.
apply (CRle_trans _ (CRplus R (CRabs R x) y)).
apply CRplus_le_compat_r.
pose proof (CRabs_def R x (CRabs R x)) as [_ H1].
apply CRplus_le_compat_l.
pose proof (CRabs_def R y (CRabs R y)) as [_ H1].
apply (CRle_trans _ (CRplus R (CRopp R x) (CRopp R y))).
apply (CRle_trans _ (CRplus R (CRabs R x) (CRopp R y))).
apply CRplus_le_compat_r.
pose proof (CRabs_def R x (CRabs R x)) as [_ H1].
apply CRplus_le_compat_l.
pose proof (CRabs_def R y (CRabs R y)) as [_ H1].
Lemma CRabs_le : forall {R : ConstructiveReals} (a b:CRcarrier R),
(-b <= a /\ a <= b) -> CRabs R a <= b.
pose proof (CRabs_def R a b) as [H0 _].
rewrite <- (CRopp_involutive b).
apply CRopp_ge_le_contravar.
Lemma CRabs_triang_inv : forall {R : ConstructiveReals} (x y : CRcarrier R),
CRabs R x - CRabs R y <= CRabs R (x - y).
apply (CRplus_le_reg_r (CRabs R y)).
rewrite CRplus_assoc, CRplus_opp_l.
apply (CRle_trans _ (CRabs R (x - y + y))).
setoid_replace (x - y + y) with x.
rewrite CRplus_assoc, CRplus_opp_l.
Lemma CRabs_triang_inv2 : forall {R : ConstructiveReals} (x y : CRcarrier R),
CRabs R (CRabs R x - CRabs R y) <= CRabs R (x - y).
2: apply CRabs_triang_inv.
apply (CRplus_le_reg_r (CRabs R y)).
rewrite CRplus_assoc, CRplus_opp_l.
rewrite CRplus_comm, CRabs_minus_sym.
apply (CRle_trans _ _ _ (CRabs_triang_inv y (y-x))).
setoid_replace (y - (y - x)) with x.
rewrite CRopp_plus_distr, <- CRplus_assoc.
rewrite CRplus_opp_r, CRplus_0_l.
Lemma CR_of_Q_abs : forall {R : ConstructiveReals} (q : Q),
CRabs R (CR_of_Q R q) == CR_of_Q R (Qabs q).
destruct (Qlt_le_dec 0 q).
apply (CReq_trans _ (CR_of_Q R q)).
apply Qabs_pos, Qlt_le_weak, q0.
apply (CReq_trans _ (CR_of_Q R (-q))).
apply (CReq_trans _ (CRabs R (CRopp R (CR_of_Q R q)))).
apply CReq_sym, CRabs_opp.
apply (CReq_trans _ (CRopp R (CR_of_Q R q))).
apply (CRle_trans _ (CR_of_Q R (-q))).
apply (Qplus_le_l _ _ q).
apply CReq_sym, CR_of_Q_opp.
apply CR_of_Q_morph; symmetry; apply Qabs_neg, q0.
Lemma CRle_abs : forall {R : ConstructiveReals} (x : CRcarrier R),
x <= CRabs R x.
pose proof (CRabs_def R x (CRabs R x)) as [_ H].
Lemma CRabs_pos : forall {R : ConstructiveReals} (x : CRcarrier R),
0 <= CRabs R x.
specialize (s _ x _ abs).
rewrite CRabs_left in abs.
rewrite <- CRopp_0 in abs.
apply CRopp_lt_cancel in abs.
exact (CRlt_asym _ _ abs c).
Lemma CRabs_appart_0 : forall {R : ConstructiveReals} (x : CRcarrier R),
0 < CRabs R x -> x ≶ 0.
pose proof (s _ x _ H) as [pos|neg].
destruct (CR_Q_dense R _ _ neg) as [q [H0 H1]].
destruct (Qlt_le_dec 0 q).
destruct (s (CR_of_Q R (-q)) x 0).
apply (Qplus_lt_l _ _ q).
pose proof (CRabs_def R x (CR_of_Q R q)) as [H2 _].
rewrite <- Qopp_involutive, CR_of_Q_opp.
apply CRopp_ge_le_contravar, CRlt_asym, c.
apply (CRlt_le_trans _ _ _ H0).
(* The proof by cases on the signs of x and y applies constructively,
because of the positivity hypotheses. *)
Lemma CRabs_mult : forall {R : ConstructiveReals} (x y : CRcarrier R),
CRabs R (x * y) == CRabs R x * CRabs R y.
assert (forall (x y : CRcarrier R),
x ≶ 0
-> y ≶ 0
-> CRabs R (x * y) == CRabs R x * CRabs R y) as prep.
rewrite CRabs_right, CRabs_left, CRabs_left.
rewrite <- CRopp_mult_distr_l, CRopp_mult_distr_r, CRopp_involutive.
setoid_replace (x*y) with (- x * - y).
apply CRlt_asym, CRmult_lt_0_compat.
apply CRopp_gt_lt_contravar, c.
apply CRopp_gt_lt_contravar, c0.
rewrite <- CRopp_mult_distr_l, CRopp_mult_distr_r, CRopp_involutive.
rewrite CRabs_left, CRabs_left, CRabs_right.
rewrite <- CRopp_mult_distr_l.
rewrite <- (CRmult_0_l y).
apply CRmult_le_compat_r_half.
rewrite CRabs_left, CRabs_right, CRabs_left.
rewrite <- CRopp_mult_distr_r.
rewrite <- (CRmult_0_r x).
apply CRmult_le_compat_l_half.
rewrite CRabs_right, CRabs_right, CRabs_right.
apply CRlt_asym, CRmult_lt_0_compat; assumption.
assert (0 < CRabs R x * CRabs R y).
apply (CRle_lt_trans _ (CRabs R (x*y))).
pose proof (CRmult_pos_appart_zero _ _ H).
rewrite CRmult_comm in H.
apply CRmult_pos_appart_zero in H.
2: apply (CRabs_pos y c).
2: apply (CRabs_pos x c0).
apply CRabs_appart_0 in c.
apply CRabs_appart_0 in c0.
rewrite (prep x y) in abs.
exact (CRlt_asym _ _ abs abs).
assert (0 < CRabs R (x * y)).
apply (CRle_lt_trans _ (CRabs R x * CRabs R y)).
rewrite <- (CRmult_0_l (CRabs R y)).
apply CRmult_le_compat_r.
apply CRabs_appart_0 in H.
apply CRopp_gt_lt_contravar in c.
rewrite CRopp_0, CRopp_mult_distr_l in c.
pose proof (CRmult_pos_appart_zero _ _ c).
rewrite CRmult_comm in c.
apply CRmult_pos_appart_zero in c.
rewrite (prep x y) in abs.
exact (CRlt_asym _ _ abs abs).
apply CRopp_gt_lt_contravar in c0.
rewrite CRopp_involutive, CRopp_0 in c0.
apply CRopp_gt_lt_contravar in c0.
rewrite CRopp_involutive, CRopp_0 in c0.
pose proof (CRmult_pos_appart_zero _ _ c).
rewrite CRmult_comm in c.
apply CRmult_pos_appart_zero in c.
rewrite (prep x y) in abs.
exact (CRlt_asym _ _ abs abs).
Lemma CRabs_lt : forall {R : ConstructiveReals} (x y : CRcarrier R),
CRabs _ x < y -> prod (x < y) (-x < y).
apply (CRle_lt_trans _ _ _ (CRle_abs x)), H.
apply (CRle_lt_trans _ _ _ (CRle_abs (-x))).
Lemma CRabs_def1 : forall {R : ConstructiveReals} (x y : CRcarrier R),
x < y -> -x < y -> CRabs _ x < y.
destruct (CRltLinear R), p.
destruct (s x (CRabs R x) y H).
rewrite CRabs_right in c0.
exact (CRlt_asym x x c0 c0).
Lemma CRabs_def2 : forall {R : ConstructiveReals} (x a:CRcarrier R),
CRabs _ x <= a -> (x <= a) /\ (- a <= x).
exact (CRle_trans _ _ _ (CRle_abs _) H).
rewrite <- (CRopp_involutive x).
apply CRopp_ge_le_contravar.
rewrite <- CRabs_opp in H.
exact (CRle_trans _ _ _ (CRle_abs _) H).