]> matita.cs.unibo.it Git - helm.git/blob - helm/software/matita/dama/ordered_divisible_group.ma
sligtly more general results, still to reorganize
[helm.git] / helm / software / matita / dama / ordered_divisible_group.ma
1 (**************************************************************************)
2 (*       ___                                                              *)
3 (*      ||M||                                                             *)
4 (*      ||A||       A project by Andrea Asperti                           *)
5 (*      ||T||                                                             *)
6 (*      ||I||       Developers:                                           *)
7 (*      ||T||         The HELM team.                                      *)
8 (*      ||A||         http://helm.cs.unibo.it                             *)
9 (*      \   /                                                             *)
10 (*       \ /        This file is distributed under the terms of the       *)
11 (*        v         GNU General Public License Version 2                  *)
12 (*                                                                        *)
13 (**************************************************************************)
14
15 set "baseuri" "cic:/matita/ordered_divisible_group/".
16
17 include "nat/orders.ma".
18 include "nat/times.ma".
19 include "ordered_group.ma".
20 include "divisible_group.ma".
21
22 record todgroup : Type ≝ {
23   todg_order:> togroup;
24   todg_division_: dgroup;
25   todg_with_: dg_carr todg_division_ = og_abelian_group todg_order
26 }.
27
28 lemma todg_division: todgroup → dgroup.
29 intro G; apply (mk_dgroup G); unfold abelian_group_OF_todgroup; 
30 cases (todg_with_ G); exact (dg_prop (todg_division_ G));
31 qed.
32
33 coercion cic:/matita/ordered_divisible_group/todg_division.con.
34
35 lemma pow_lt: ∀G:todgroup.∀x:G.∀n.0 < x → 0 < x + pow ? x n.
36 intros (G x n H); elim n; [
37   simplify; apply (lt_rewr ???? (plus_comm ???)); 
38   apply (lt_rewr ???x (zero_neutral ??)); assumption]
39 simplify; apply (lt_transitive ?? (x+(x)\sup(n1))); [assumption]
40 apply flt_plusl; apply (lt_rewr ???? (plus_comm ???));
41 apply (lt_rewl ??? (0 + (x \sup n1)) (eq_sym ??? (zero_neutral ??)));
42 apply (lt_rewl ???? (plus_comm ???));
43 apply flt_plusl; assumption;
44 qed.
45
46 lemma pow_ge: ∀G:todgroup.∀x:G.∀n.0 ≤ x → 0 ≤ pow ? x n.
47 intros (G x n); elim n; simplify; [apply le_reflexive]
48 apply (le_transitive ???? H1); 
49 apply (le_rewl ??? (0+(x\sup n1)) (zero_neutral ??));
50 apply fle_plusr; assumption;
51 qed. 
52
53 lemma gt_pow: ∀G:todgroup.∀x:G.∀n.0 < pow ? x n → 0 < x.
54 intros 3; elim n; [
55   simplify in l; cases (lt_coreflexive ?? l);]
56 simplify in l; 
57 cut (0+0<x+(x)\sup(n1));[2:
58   apply (lt_rewl ??? 0 (zero_neutral ??)); assumption].
59 cases (ltplus_orlt ????? Hcut); [assumption]
60 apply f; assumption;
61 qed.
62
63 lemma gt_pow2: ∀G:dgroup.∀x,y:G.∀n.pow ? x n + pow ? y n ≈ pow ? (x+y) n.
64 intros (G x y n); elim n; [apply (Eq≈ 0 (zero_neutral ??)); apply eq_reflexive]
65 simplify; apply (Eq≈ (x+y+((x)\sup(n1)+(y)\sup(n1)))); [
66   apply (Eq≈ (x+((x)\sup(n1)+(y+(y)\sup(n1))))); [
67     apply eq_sym; apply plus_assoc;]
68   apply (Eq≈ (x+((x)\sup(n1)+y+(y)\sup(n1)))); [
69     apply feq_plusl; apply plus_assoc;]
70   apply (Eq≈ (x+(y+(x)\sup(n1)+(y)\sup(n1)))); [
71     apply feq_plusl; apply feq_plusr; apply plus_comm;] 
72   apply (Eq≈ (x+(y+((x)\sup(n1)+(y)\sup(n1))))); [
73     apply feq_plusl; apply eq_sym; apply plus_assoc;]
74   apply plus_assoc;]
75 apply feq_plusl; assumption;
76 qed. 
77   
78 lemma xxxx: ∀E:abelian_group.∀x,a,y,b:E.x + a # y + b → x # y ∨ a # b.
79 intros; cases (ap_cotransitive ??? (y+a) a1); [left|right]
80 [apply (plus_cancr_ap ??? a)|apply (plus_cancl_ap ??? y)]
81 assumption;
82 qed.
83    
84 lemma pow_gt0: ∀G:todgroup.∀y:G.∀n.0 < y → 0 < pow ? y (S n).
85 intros (G y n H); elim n; [apply (lt_rewr ??? (0+y) (plus_comm ???)); apply (lt_rewr ??? y (zero_neutral ??)); apply H]
86 simplify; apply (lt_rewl ? 0 ? (0+0) (zero_neutral ? 0));
87 apply ltplus; assumption;
88 qed.
89
90 lemma divide_preserves_lt: ∀G:todgroup.∀e:G.∀n.0<e → 0 < e/n.
91 intros; elim n; [apply (lt_rewr ???? (div1 ??));assumption]
92 unfold divide; elim (dg_prop G e (S n1)); simplify; simplify in f;
93 apply (gt_pow ?? (S (S n1))); apply (lt_rewr ???? f); assumption;
94 qed.
95
96
97 lemma bar1: ∀G:togroup.∀x,y:G.∀n.pow ? x (S n) # pow ? y (S n) → x # y.
98 intros 4 (G x y n); elim n; [2:
99   simplify in a;
100   cases (xxxx ????? a); [assumption]
101   apply f; assumption;]
102 apply (plus_cancr_ap ??? 0); assumption;
103 qed.
104
105
106 lemma lt_suplt: ∀G:todgroup.∀x,y:G.∀n.
107 x < y → x\sup (S n) < y\sup (S n).
108 intros; elim n; [simplify; apply flt_plusr; assumption]
109 simplify; apply (ltplus); [assumption] assumption;
110 qed.
111
112 lemma suplt_lt: ∀G:todgroup.∀x,y:G.∀n. x\sup (S n) < y\sup (S n) → x < y.
113 intros 4; elim n; [apply (plus_cancr_lt ??? 0); assumption]
114 simplify in l; cases (ltplus_orlt ????? l); [assumption]
115 apply f; assumption;
116 qed.
117
118 lemma supeqplus_lt: ∀G:todgroup.∀x,y:G.∀n,m.
119    0<x → 0<y → x\sup (S n) ≈ y\sup (S (n+S m)) → y < x.
120 intros (G x y n m H1 H2 H3); apply (suplt_lt ??? n); apply (lt_rewr ???? H3);
121 clear H3; elim m; [
122   rewrite > sym_plus; simplify; apply (lt_rewl ??? (0+(y+y\sup n))); [
123     apply eq_sym; apply zero_neutral]
124   apply flt_plusr; assumption;]
125 apply (lt_transitive ???? l); rewrite > sym_plus; simplify;  
126 rewrite > (sym_plus n); simplify; repeat apply flt_plusl;
127 apply (lt_rewl ???(0+y\sup(n1+n))); [apply eq_sym; apply zero_neutral]
128 apply flt_plusr; assumption;
129 qed.  
130
131 alias num (instance 0) = "natural number".
132 lemma core1: ∀G:todgroup.∀e:G.0<e → e/3 + e/2 + e/2 < e.
133 intro G; cases G; unfold divide; intro e;
134 cases (dg_prop (mk_todgroup todg_order todg_division_ H) e 3) 0;
135 cases (dg_prop (mk_todgroup todg_order todg_division_ H) e 2) 0; simplify;
136 intro H3;
137 cut (0<w1\sup 3); [2: apply (lt_rewr ???? H2); assumption]
138 cut (0<w\sup 4); [2: apply (lt_rewr ???? H1); assumption]
139 lapply (gt_pow ??? Hcut) as H4;
140 lapply (gt_pow ??? Hcut1) as H5;
141 cut (w<w1);[2: apply (supeqplus_lt ??? 2 O); try assumption; apply (Eq≈ ? H2 H1);]
142 apply (plus_cancr_lt ??? w1);
143 apply (lt_rewl ??? (w+e)); [
144   apply (Eq≈ (w+w1\sup 3) ? H2);
145   apply (Eq≈ (w+w1+(w1+w1)) (plus_assoc ??w1 w1));
146   apply (Eq≈ (w+(w1+(w1+w1))) (plus_assoc ?w w1 ?));
147   simplify; repeat apply feq_plusl; apply eq_sym; 
148   apply (Eq≈ ? (plus_comm ???)); apply zero_neutral;]
149 apply (lt_rewl ???? (plus_comm ???));
150 apply flt_plusl; assumption;
151 qed.
152   
153   
154