]> matita.cs.unibo.it Git - helm.git/blob - matita/dama/ordered_groups.ma
some work till the need of redoing all groups based on excedence
[helm.git] / matita / dama / ordered_groups.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_groups/".
16
17 include "groups.ma".
18 include "ordered_sets.ma".
19
20 record pre_ordered_abelian_group : Type ≝
21  { og_abelian_group:> abelian_group;
22    og_tordered_set_: tordered_set;
23    og_with: exc_carr og_tordered_set_ = og_abelian_group
24  }.
25
26 lemma og_tordered_set: pre_ordered_abelian_group → tordered_set.
27 intro G; apply mk_tordered_set;
28 [1: apply mk_pordered_set;
29     [1: apply (mk_excedence G); 
30         [1: cases G; clear G; simplify; rewrite < H; clear H;
31             cases og_tordered_set_; clear og_tordered_set_; simplify;
32             cases tos_poset; simplify; cases pos_carr; simplify; assumption;
33         |2: cases G; simplify; cases H; simplify; clear H; 
34             cases og_tordered_set_; simplify; clear og_tordered_set_;
35             cases tos_poset; simplify; cases pos_carr; simplify;
36             intros; apply H;
37         |3: cases G; simplify; cases H; simplify; cases og_tordered_set_; simplify;
38             cases tos_poset; simplify; cases pos_carr; simplify; 
39             intros; apply c; assumption]
40     |2: cases G; simplify;
41         cases H; simplify; clear H; cases og_tordered_set_; simplify;
42         cases tos_poset; simplify; assumption;]
43 |2: simplify; (* SLOW, senza la simplify il widget muore *)
44     cases G; simplify; 
45     generalize in match (tos_totality og_tordered_set_);
46     unfold total_order_property;
47     cases H; simplify;  cases og_tordered_set_; simplify;
48     cases tos_poset; simplify; cases pos_carr; simplify;
49     intros; apply f; assumption;]
50 qed.
51
52 coercion cic:/matita/ordered_groups/og_tordered_set.con.
53
54 definition is_ordered_abelian_group ≝
55  λG:pre_ordered_abelian_group. ∀f,g,h:G. f≤g → f+h≤g+h.
56
57 record ordered_abelian_group : Type ≝
58  { og_pre_ordered_abelian_group:> pre_ordered_abelian_group;
59    og_ordered_abelian_group_properties:
60     is_ordered_abelian_group og_pre_ordered_abelian_group
61  }.
62
63 lemma le_zero_x_to_le_opp_x_zero: 
64   ∀G:ordered_abelian_group.∀x:G.0 ≤ x → -x ≤ 0.
65 intros (G x Px);
66 generalize in match (og_ordered_abelian_group_properties ? ? ? (-x) Px); intro;
67 (* ma cazzo, qui bisogna rifare anche i gruppi con ≈ ? *)
68  rewrite > zero_neutral in H1;
69  rewrite > plus_comm in H1;
70  rewrite > opp_inverse in H1;
71  assumption.
72 qed.
73
74 lemma le_x_zero_to_le_zero_opp_x: ∀G:ordered_abelian_group.∀x:G. x ≤ 0 → 0 ≤ -x.
75  intros;
76  generalize in match (og_ordered_abelian_group_properties ? ? ? (-x) H); intro;
77  rewrite > zero_neutral in H1;
78  rewrite > plus_comm in H1;
79  rewrite > opp_inverse in H1;
80  assumption.
81 qed.