1 (**************************************************************************)
4 (* ||A|| A project by Andrea Asperti *)
6 (* ||I|| Developers: *)
7 (* ||T|| The HELM team. *)
8 (* ||A|| http://helm.cs.unibo.it *)
10 (* \ / This file is distributed under the terms of the *)
11 (* v GNU General Public License Version 2 *)
13 (**************************************************************************)
15 (* This file was automatically generated: do not edit *********************)
19 (*#***********************************************************************)
21 (* v * The Coq Proof Assistant / The Coq Development Team *)
23 (* <O___,, * CNRS-Ecole Polytechnique-INRIA Futurs-Universite Paris Sud *)
25 (* \VV/ **************************************************************)
27 (* // * This file is distributed under the terms of the *)
29 (* * GNU Lesser General Public License Version 2.1 *)
31 (*#***********************************************************************)
33 (*i $Id: Mult.v,v 1.21.2.1 2004/07/16 19:31:00 herbelin Exp $ i*)
35 include "Arith/Plus.ma".
37 include "Arith/Minus.ma".
39 include "Arith/Lt.ma".
41 include "Arith/Le.ma".
44 Open Local Scope nat_scope.
48 Implicit Types m n p : nat.
53 inline procedural "cic:/Coq/Arith/Mult/mult_0_r.con" as lemma.
55 inline procedural "cic:/Coq/Arith/Mult/mult_0_l.con" as lemma.
57 (*#* Distributivity *)
59 inline procedural "cic:/Coq/Arith/Mult/mult_plus_distr_r.con" as lemma.
62 Hint Resolve mult_plus_distr_r: arith v62.
65 inline procedural "cic:/Coq/Arith/Mult/mult_plus_distr_l.con" as lemma.
67 inline procedural "cic:/Coq/Arith/Mult/mult_minus_distr_r.con" as lemma.
70 Hint Resolve mult_minus_distr_r: arith v62.
75 inline procedural "cic:/Coq/Arith/Mult/mult_assoc_reverse.con" as lemma.
78 Hint Resolve mult_assoc_reverse: arith v62.
81 inline procedural "cic:/Coq/Arith/Mult/mult_assoc.con" as lemma.
84 Hint Resolve mult_assoc: arith v62.
89 inline procedural "cic:/Coq/Arith/Mult/mult_comm.con" as lemma.
92 Hint Resolve mult_comm: arith v62.
97 inline procedural "cic:/Coq/Arith/Mult/mult_1_l.con" as lemma.
100 Hint Resolve mult_1_l: arith v62.
103 inline procedural "cic:/Coq/Arith/Mult/mult_1_r.con" as lemma.
106 Hint Resolve mult_1_r: arith v62.
109 (*#* Compatibility with orders *)
111 inline procedural "cic:/Coq/Arith/Mult/mult_O_le.con" as lemma.
114 Hint Resolve mult_O_le: arith v62.
117 inline procedural "cic:/Coq/Arith/Mult/mult_le_compat_l.con" as lemma.
120 Hint Resolve mult_le_compat_l: arith.
123 inline procedural "cic:/Coq/Arith/Mult/mult_le_compat_r.con" as lemma.
125 inline procedural "cic:/Coq/Arith/Mult/mult_le_compat.con" as lemma.
127 inline procedural "cic:/Coq/Arith/Mult/mult_S_lt_compat_l.con" as lemma.
130 Hint Resolve mult_S_lt_compat_l: arith.
133 inline procedural "cic:/Coq/Arith/Mult/mult_lt_compat_r.con" as lemma.
135 inline procedural "cic:/Coq/Arith/Mult/mult_S_le_reg_l.con" as lemma.
137 (*#* n|->2*n and n|->2n+1 have disjoint image *)
139 inline procedural "cic:/Coq/Arith/Mult/odd_even_lem.con" as theorem.
141 (*#* Tail-recursive mult *)
143 (*#* [tail_mult] is an alternative definition for [mult] which is
144 tail-recursive, whereas [mult] is not. This can be useful
145 when extracting programs. *)
147 inline procedural "cic:/Coq/Arith/Mult/mult_acc.con" as definition.
149 inline procedural "cic:/Coq/Arith/Mult/mult_acc_aux.con" as lemma.
151 inline procedural "cic:/Coq/Arith/Mult/tail_mult.con" as definition.
153 inline procedural "cic:/Coq/Arith/Mult/mult_tail_mult.con" as lemma.
155 (*#* [TailSimpl] transforms any [tail_plus] and [tail_mult] into [plus]
156 and [mult] and simplify *)
160 repeat rewrite <- plus_tail_plus; repeat rewrite <- mult_tail_mult;