From 4ade23ef522409d0754198ea35747a65b6fa9d81 Mon Sep 17 00:00:00 2001 From: letouzey Date: Tue, 3 Nov 2009 08:24:32 +0000 Subject: ROrderedType + Rminmax : Coq's Reals can be seen as OrderedType. This way we get properties of Rmin / Rmax (almost) for free. TODO: merge Rbasic_fun and Rminmax... git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/coq/trunk@12463 85f007b7-540e-0410-9357-904b9bb8a0f7 --- theories/Reals/Rminmax.v | 214 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 214 insertions(+) create mode 100644 theories/Reals/Rminmax.v (limited to 'theories/Reals/Rminmax.v') diff --git a/theories/Reals/Rminmax.v b/theories/Reals/Rminmax.v new file mode 100644 index 000000000..70bc00c9f --- /dev/null +++ b/theories/Reals/Rminmax.v @@ -0,0 +1,214 @@ +(************************************************************************) +(* v * The Coq Proof Assistant / The Coq Development Team *) +(* Type), + (m<=n -> P n) -> (n<=m -> P m) -> P (Rmax n m). +Proof. intros; apply max_case_strong; auto. congruence. Defined. + +Lemma Rmax_case : forall n m (P:R -> Type), + P n -> P m -> P (Rmax n m). +Proof. intros. apply Rmax_case_strong; auto. Defined. + +Lemma Rmax_monotone: forall f, + (Proper (Rle ==> Rle) f) -> + forall x y, Rmax (f x) (f y) = f (Rmax x y). +Proof. intros; apply max_monotone; auto. congruence. Qed. + +Lemma Rmin_case_strong : forall n m (P:R -> Type), + (m<=n -> P m) -> (n<=m -> P n) -> P (Rmin n m). +Proof. intros; apply min_case_strong; auto. congruence. Defined. + +Lemma Rmin_case : forall n m (P:R -> Type), + P n -> P m -> P (Rmin n m). +Proof. intros. apply Rmin_case_strong; auto. Defined. + +Lemma Rmin_monotone: forall f, + (Proper (Rle ==> Rle) f) -> + forall x y, Rmin (f x) (f y) = f (Rmin x y). +Proof. intros; apply min_monotone; auto. congruence. Qed. + +Lemma Rmax_min_antimonotone : forall f, + Proper (Rle==>Rge) f -> + forall x y, Rmax (f x) (f y) == f (Rmin x y). +Proof. + intros. apply max_min_antimonotone. congruence. + intros z z' Hz; red; apply Rge_le; auto. +Qed. + +Lemma Rmin_max_antimonotone : forall f, + Proper (Rle==>Rge) f -> + forall x y, Rmin (f x) (f y) == f (Rmax x y). +Proof. + intros. apply min_max_antimonotone. congruence. + intros z z' Hz; red. apply Rge_le. auto. +Qed. + +(** For the other generic properties, we make aliases, + since otherwise SearchAbout misses some of them + (bad interaction with an Include). + See GenericMinMax (or SearchAbout) for the statements. *) + +Definition Rmax_spec_le := max_spec_le. +Definition Rmax_dec := max_dec. +Definition Rmax_unicity := max_unicity. +Definition Rmax_unicity_ext := max_unicity_ext. +Definition Rmax_id := max_id. +Notation Rmax_idempotent := Rmax_id (only parsing). +Definition Rmax_assoc := max_assoc. +Definition Rmax_comm := max_comm. +Definition Rmax_l := max_l. +Definition Rmax_r := max_r. +Definition Zle_max_l := le_max_l. +Definition Zle_max_r := le_max_r. +Definition Rmax_le := max_le. +Definition Rmax_le_iff := max_le_iff. +Definition Rmax_lt_iff := max_lt_iff. +Definition Rmax_lub_l := max_lub_l. +Definition Rmax_lub_r := max_lub_r. +Definition Rmax_lub := max_lub. +Definition Rmax_lub_iff := max_lub_iff. +Definition Rmax_lub_lt := max_lub_lt. +Definition Rmax_lub_lt_iff := max_lub_lt_iff. +Definition Rmax_le_compat_l := max_le_compat_l. +Definition Rmax_le_compat_r := max_le_compat_r. +Definition Rmax_le_compat := max_le_compat. + +Definition Rmin_spec_le := min_spec_le. +Definition Rmin_dec := min_dec. +Definition Rmin_unicity := min_unicity. +Definition Rmin_unicity_ext := min_unicity_ext. +Definition Rmin_id := min_id. +Notation Rmin_idempotent := Rmin_id (only parsing). +Definition Rmin_assoc := min_assoc. +Definition Rmin_comm := min_comm. +Definition Rmin_l := min_l. +Definition Rmin_r := min_r. +Definition Zle_min_l := le_min_l. +Definition Zle_min_r := le_min_r. +Definition Rmin_le := min_le. +Definition Rmin_le_iff := min_le_iff. +Definition Rmin_lt_iff := min_lt_iff. +Definition Rmin_glb_l := min_glb_l. +Definition Rmin_glb_r := min_glb_r. +Definition Rmin_glb := min_glb. +Definition Rmin_glb_iff := min_glb_iff. +Definition Rmin_glb_lt := min_glb_lt. +Definition Rmin_glb_lt_iff := min_glb_lt_iff. +Definition Rmin_le_compat_l := min_le_compat_l. +Definition Rmin_le_compat_r := min_le_compat_r. +Definition Rmin_le_compat := min_le_compat. + +Definition Rmin_max_absorption := min_max_absorption. +Definition Rmax_min_absorption := max_min_absorption. +Definition Rmax_min_distr := max_min_distr. +Definition Rmin_max_distr := min_max_distr. +Definition Rmax_min_modular := max_min_modular. +Definition Rmin_max_modular := min_max_modular. +Definition Rmax_min_disassoc := max_min_disassoc. + + +(** * Properties specific to the [R] domain *) + +(** Compatibilities (consequences of monotonicity) *) + +Lemma Rplus_max_distr_l : forall n m p, Rmax (p + n) (p + m) = p + Rmax n m. +Proof. + intros. apply Rmax_monotone. + intros x y. apply Rplus_le_compat_l. +Qed. + +Lemma Rplus_max_distr_r : forall n m p, Rmax (n + p) (m + p) = Rmax n m + p. +Proof. + intros. rewrite (Rplus_comm n p), (Rplus_comm m p), (Rplus_comm _ p). + apply Rplus_max_distr_l. +Qed. + +Lemma Rplus_min_distr_l : forall n m p, Rmin (p + n) (p + m) = p + Rmin n m. +Proof. + intros. apply Rmin_monotone. + intros x y. apply Rplus_le_compat_l. +Qed. + +Lemma Rplus_min_distr_r : forall n m p, Rmin (n + p) (m + p) = Rmin n m + p. +Proof. + intros. rewrite (Rplus_comm n p), (Rplus_comm m p), (Rplus_comm _ p). + apply Rplus_min_distr_l. +Qed. + +(** Anti-monotonicity swaps the role of [min] and [max] *) + +Lemma Ropp_max_distr : forall n m : R, -(Rmax n m) = Rmin (- n) (- m). +Proof. + intros. symmetry. apply Rmin_max_antimonotone. + exact Ropp_le_ge_contravar. +Qed. + +Lemma Ropp_min_distr : forall n m : R, - (Rmin n m) = Rmax (- n) (- m). +Proof. + intros. symmetry. apply Rmax_min_antimonotone. + exact Ropp_le_ge_contravar. +Qed. + +Lemma Rminus_max_distr_l : forall n m p, Rmax (p - n) (p - m) = p - Rmin n m. +Proof. + unfold Rminus. intros. rewrite Ropp_min_distr. apply Rplus_max_distr_l. +Qed. + +Lemma Rminus_max_distr_r : forall n m p, Rmax (n - p) (m - p) = Rmax n m - p. +Proof. + unfold Rminus. intros. apply Rplus_max_distr_r. +Qed. + +Lemma Rminus_min_distr_l : forall n m p, Rmin (p - n) (p - m) = p - Rmax n m. +Proof. + unfold Rminus. intros. rewrite Ropp_max_distr. apply Rplus_min_distr_l. +Qed. + +Lemma Rminus_min_distr_r : forall n m p, Rmin (n - p) (m - p) = Rmin n m - p. +Proof. + unfold Rminus. intros. apply Rplus_min_distr_r. +Qed. -- cgit v1.2.3