diff options
Diffstat (limited to 'theories/QArith/Qring.v')
-rw-r--r-- | theories/QArith/Qring.v | 81 |
1 files changed, 47 insertions, 34 deletions
diff --git a/theories/QArith/Qring.v b/theories/QArith/Qring.v index 774b20f4..9d294805 100644 --- a/theories/QArith/Qring.v +++ b/theories/QArith/Qring.v @@ -6,10 +6,9 @@ (* * GNU Lesser General Public License Version 2.1 *) (************************************************************************) -(*i $Id: Qring.v 8883 2006-05-31 21:56:37Z letouzey $ i*) +(*i $Id: Qring.v 9245 2006-10-17 12:53:34Z notin $ i*) -Require Import Ring. -Require Export Setoid_ring. +Require Export Ring. Require Export QArith_base. (** * A ring tactic for rational numbers *) @@ -18,74 +17,88 @@ Definition Qeq_bool (x y : Q) := if Qeq_dec x y then true else false. Lemma Qeq_bool_correct : forall x y : Q, Qeq_bool x y = true -> x==y. -intros x y; unfold Qeq_bool in |- *; case (Qeq_dec x y); simpl in |- *; auto. -intros _ H; inversion H. +Proof. + intros x y; unfold Qeq_bool in |- *; case (Qeq_dec x y); simpl in |- *; auto. + intros _ H; inversion H. Qed. -Definition Qsrt : Setoid_Ring_Theory Qeq Qplus Qmult 1 0 Qopp Qeq_bool. +Definition Qsrt : ring_theory 0 1 Qplus Qmult Qminus Qopp Qeq. Proof. -constructor. -exact Qplus_comm. -exact Qplus_assoc. -exact Qmult_comm. -exact Qmult_assoc. -exact Qplus_0_l. -exact Qmult_1_l. -exact Qplus_opp_r. -exact Qmult_plus_distr_l. -unfold Is_true; intros x y; generalize (Qeq_bool_correct x y); - case (Qeq_bool x y); auto. + constructor. + exact Qplus_0_l. + exact Qplus_comm. + exact Qplus_assoc. + exact Qmult_1_l. + exact Qmult_comm. + exact Qmult_assoc. + exact Qmult_plus_distr_l. + reflexivity. + exact Qplus_opp_r. Qed. -Add Setoid Ring Q Qeq Q_Setoid Qplus Qmult 1 0 Qopp Qeq_bool - Qplus_comp Qmult_comp Qopp_comp Qsrt - [ Qmake (*inject_Z*) Zpos 0%Z Zneg xI xO 1%positive ]. - +Ltac isQcst t := + let t := eval hnf in t in + match t with + Qmake ?n ?d => + match isZcst n with + true => isZcst d + | _ => false + end + | _ => false + end. + +Ltac Qcst t := + match isQcst t with + true => t + | _ => NotConstant + end. + +Add Ring Qring : Qsrt (decidable Qeq_bool_correct, constants [Qcst]). (** Exemple of use: *) Section Examples. Let ex1 : forall x y z : Q, (x+y)*z == (x*z)+(y*z). -intros. -ring. + intros. + ring. Qed. Let ex2 : forall x y : Q, x+y == y+x. -intros. -ring. + intros. + ring. Qed. Let ex3 : forall x y z : Q, (x+y)+z == x+(y+z). -intros. -ring. + intros. + ring. Qed. Let ex4 : (inject_Z 1)+(inject_Z 1)==(inject_Z 2). -ring. + ring. Qed. Let ex5 : 1+1 == 2#1. -ring. + ring. Qed. Let ex6 : (1#1)+(1#1) == 2#1. -ring. + ring. Qed. Let ex7 : forall x : Q, x-x== 0#1. -intro. -ring. + intro. + ring. Qed. End Examples. Lemma Qopp_plus : forall a b, -(a+b) == -a + -b. Proof. -intros; ring. + intros; ring. Qed. Lemma Qopp_opp : forall q, - -q==q. Proof. -intros; ring. + intros; ring. Qed. |