summaryrefslogtreecommitdiff
path: root/theories/Arith/Euclid.v
diff options
context:
space:
mode:
Diffstat (limited to 'theories/Arith/Euclid.v')
-rw-r--r--theories/Arith/Euclid.v52
1 files changed, 19 insertions, 33 deletions
diff --git a/theories/Arith/Euclid.v b/theories/Arith/Euclid.v
index 8748b726..eaacab02 100644
--- a/theories/Arith/Euclid.v
+++ b/theories/Arith/Euclid.v
@@ -1,6 +1,6 @@
(************************************************************************)
(* v * The Coq Proof Assistant / The Coq Development Team *)
-(* <O___,, * INRIA - CNRS - LIX - LRI - PPS - Copyright 1999-2014 *)
+(* <O___,, * INRIA - CNRS - LIX - LRI - PPS - Copyright 1999-2015 *)
(* \VV/ **************************************************************)
(* // * This file is distributed under the terms of the *)
(* * GNU Lesser General Public License Version 2.1 *)
@@ -19,16 +19,12 @@ Inductive diveucl a b : Set :=
Lemma eucl_dev : forall n, n > 0 -> forall m:nat, diveucl m n.
Proof.
- intros b H a; pattern a; apply gt_wf_rec; intros n H0.
- elim (le_gt_dec b n).
- intro lebn.
- elim (H0 (n - b)); auto with arith.
- intros q r g e.
- apply divex with (S q) r; simpl; auto with arith.
- elim plus_assoc.
- elim e; auto with arith.
- intros gtbn.
- apply divex with 0 n; simpl; auto with arith.
+ induction m as (m,H0) using gt_wf_rec.
+ destruct (le_gt_dec n m) as [Hlebn|Hgtbn].
+ destruct (H0 (m - n)) as (q,r,Hge0,Heq); auto with arith.
+ apply divex with (S q) r; trivial.
+ simpl; rewrite <- plus_assoc, <- Heq; auto with arith.
+ apply divex with 0 m; simpl; trivial.
Defined.
Lemma quotient :
@@ -36,17 +32,12 @@ Lemma quotient :
n > 0 ->
forall m:nat, {q : nat | exists r : nat, m = q * n + r /\ n > r}.
Proof.
- intros b H a; pattern a; apply gt_wf_rec; intros n H0.
- elim (le_gt_dec b n).
- intro lebn.
- elim (H0 (n - b)); auto with arith.
- intros q Hq; exists (S q).
- elim Hq; intros r Hr.
- exists r; simpl; elim Hr; intros.
- elim plus_assoc.
- elim H1; auto with arith.
- intros gtbn.
- exists 0; exists n; simpl; auto with arith.
+ induction m as (m,H0) using gt_wf_rec.
+ destruct (le_gt_dec n m) as [Hlebn|Hgtbn].
+ destruct (H0 (m - n)) as (q & Hq); auto with arith; exists (S q).
+ destruct Hq as (r & Heq & Hgt); exists r; split; trivial.
+ simpl; rewrite <- plus_assoc, <- Heq; auto with arith.
+ exists 0; exists m; simpl; auto with arith.
Defined.
Lemma modulo :
@@ -54,15 +45,10 @@ Lemma modulo :
n > 0 ->
forall m:nat, {r : nat | exists q : nat, m = q * n + r /\ n > r}.
Proof.
- intros b H a; pattern a; apply gt_wf_rec; intros n H0.
- elim (le_gt_dec b n).
- intro lebn.
- elim (H0 (n - b)); auto with arith.
- intros r Hr; exists r.
- elim Hr; intros q Hq.
- elim Hq; intros; exists (S q); simpl.
- elim plus_assoc.
- elim H1; auto with arith.
- intros gtbn.
- exists n; exists 0; simpl; auto with arith.
+ induction m as (m,H0) using gt_wf_rec.
+ destruct (le_gt_dec n m) as [Hlebn|Hgtbn].
+ destruct (H0 (m - n)) as (r & Hr); auto with arith; exists r.
+ destruct Hr as (q & Heq & Hgt); exists (S q); split; trivial.
+ simpl; rewrite <- plus_assoc, <- Heq; auto with arith.
+ exists m; exists 0; simpl; auto with arith.
Defined.