summaryrefslogtreecommitdiff
path: root/theories/QArith/Qring.v
diff options
context:
space:
mode:
Diffstat (limited to 'theories/QArith/Qring.v')
-rw-r--r--theories/QArith/Qring.v81
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.