]> matita.cs.unibo.it Git - helm.git/blob - helm/matita/library/nat/times.ma
New version of the library, a bit more structured.
[helm.git] / helm / matita / library / nat / times.ma
1 (**************************************************************************)
2 (*       ___                                                                *)
3 (*      ||M||                                                             *)
4 (*      ||A||       A project by Andrea Asperti                           *)
5 (*      ||T||                                                             *)
6 (*      ||I||       Developers:                                           *)
7 (*      ||T||       A.Asperti, C.Sacerdoti Coen,                          *)
8 (*      ||A||       E.Tassi, S.Zacchiroli                                 *)
9 (*      \   /                                                             *)
10 (*       \ /        This file is distributed under the terms of the       *)
11 (*        v         GNU Lesser General Public License Version 2.1         *)
12 (*                                                                        *)
13 (**************************************************************************)
14
15 set "baseuri" "cic:/matita/nat/times.ma".
16
17 include "logic/equality.ma".
18 include "nat/nat.ma".
19 include "nat/plus.ma".
20
21 let rec times n m \def 
22  match n with 
23  [ O \Rightarrow O
24  | (S p) \Rightarrow (plus m (times p m)) ].
25
26 theorem times_n_O: \forall n:nat. eq nat O (times n O).
27 intros.elim n.
28 simplify.reflexivity.
29 simplify.assumption.
30 qed.
31
32 theorem times_n_Sm : 
33 \forall n,m:nat. eq nat (plus n (times n  m)) (times n (S m)).
34 intros.elim n.
35 simplify.reflexivity.
36 simplify.apply eq_f.rewrite < H.
37 transitivity (plus (plus e1 m) (times e1 m)).symmetry.apply assoc_plus.
38 transitivity (plus (plus m e1) (times e1 m)).
39 apply eq_f2.
40 apply sym_plus.
41 reflexivity.
42 apply assoc_plus.
43 qed.
44
45 (* same problem with symmetric: see plus 
46 theorem symmetric_times : symmetric nat times. *)
47
48 theorem sym_times : 
49 \forall n,m:nat. eq nat (times n m) (times m n).
50 intros.elim n.
51 simplify.apply times_n_O.
52 simplify.rewrite > H.apply times_n_Sm.
53 qed.
54
55 theorem times_plus_distr: \forall n,m,p:nat.
56 eq nat (times n (plus m p)) (plus (times n m) (times n p)).
57 intros.elim n.
58 simplify.reflexivity.
59 simplify.rewrite > H. rewrite > assoc_plus.rewrite > assoc_plus.
60 apply eq_f.rewrite < assoc_plus. rewrite < sym_plus ? p.
61 rewrite > assoc_plus.reflexivity.
62 qed.