]> matita.cs.unibo.it Git - helm.git/blob - helm/matita/library/nat/orders_op.ma
dbd48fa8852f6d91e2c31d33a675eeb4cb729e1d
[helm.git] / helm / matita / library / nat / orders_op.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/orders_op.ma".
16
17 include "higher_order_defs/functions.ma".
18 include "nat/times.ma".
19 include "nat/orders.ma".
20
21 (* plus *)
22 theorem monotonic_le_plus_r: 
23 \forall n:nat.monotonic nat le (\lambda m.plus n m).
24 simplify.intros.elim n.
25 simplify.assumption.
26 simplify.apply le_S_S.assumption.
27 qed.
28
29 theorem le_plus_r: \forall p,n,m:nat. le n m \to le (plus p n) (plus p m)
30 \def monotonic_le_plus_r.
31
32 theorem monotonic_le_plus_l: 
33 \forall m:nat.monotonic nat le (\lambda n.plus n m).
34 simplify.intros.
35 rewrite < sym_plus.rewrite < sym_plus m.
36 apply le_plus_r.assumption.
37 qed.
38
39 theorem le_plus_l: \forall p,n,m:nat. le n m \to le (plus n p) (plus m p)
40 \def monotonic_le_plus_l.
41
42 theorem le_plus: \forall n1,n2,m1,m2:nat. le n1 n2  \to le m1 m2 
43 \to le (plus n1 m1) (plus n2 m2).
44 intros.
45 apply trans_le ? (plus n2 m1).
46 apply le_plus_l.assumption.
47 apply le_plus_r.assumption.
48 qed.
49
50 theorem le_plus_n :\forall n,m:nat. le m (plus n m).
51 intros.change with le (plus O m) (plus n m).
52 apply le_plus_l.apply le_O_n.
53 qed.
54
55 theorem eq_plus_to_le: \forall n,m,p:nat.eq nat n (plus m p) 
56 \to le m n.
57 intros.rewrite > H.
58 rewrite < sym_plus.
59 apply le_plus_n.
60 qed.
61
62 (* times *)
63 theorem monotonic_le_times_r: 
64 \forall n:nat.monotonic nat le (\lambda m.times n m).
65 simplify.intros.elim n.
66 simplify.apply le_O_n.
67 simplify.apply le_plus.
68 assumption.
69 assumption.
70 qed.
71
72 theorem le_times_r: \forall p,n,m:nat. le n m \to le (times p n) (times p m)
73 \def monotonic_le_times_r.
74
75 theorem monotonic_le_times_l: 
76 \forall m:nat.monotonic nat le (\lambda n.times n m).
77 simplify.intros.
78 rewrite < sym_times.rewrite < sym_times m.
79 apply le_times_r.assumption.
80 qed.
81
82 theorem le_times_l: \forall p,n,m:nat. le n m \to le (times n p) (times m p)
83 \def monotonic_le_times_l.
84
85 theorem le_times: \forall n1,n2,m1,m2:nat. le n1 n2  \to le m1 m2 
86 \to le (times n1 m1) (times n2 m2).
87 intros.
88 apply trans_le ? (times n2 m1).
89 apply le_times_l.assumption.
90 apply le_times_r.assumption.
91 qed.
92
93 theorem le_n_nm: \forall n,m:nat.le (S O) n \to le m (times n m).
94 intros.elim H.simplify.
95 elim (plus_n_O ?).apply le_n.
96 simplify.rewrite < sym_plus.apply le_plus_n.
97 qed.
98
99