X-Git-Url: http://matita.cs.unibo.it/gitweb/?p=helm.git;a=blobdiff_plain;f=matita%2Fcontribs%2Fdama%2Fdama%2Fordered_divisible_group.ma;fp=matita%2Fcontribs%2Fdama%2Fdama%2Fordered_divisible_group.ma;h=15dd52cdb853ba822b7d35e4a1ab959b0bf6e311;hp=0000000000000000000000000000000000000000;hb=f61af501fb4608cc4fb062a0864c774e677f0d76;hpb=58ae1809c352e71e7b5530dc41e2bfc834e1aef1 diff --git a/matita/contribs/dama/dama/ordered_divisible_group.ma b/matita/contribs/dama/dama/ordered_divisible_group.ma new file mode 100644 index 000000000..15dd52cdb --- /dev/null +++ b/matita/contribs/dama/dama/ordered_divisible_group.ma @@ -0,0 +1,75 @@ +(**************************************************************************) +(* ___ *) +(* ||M|| *) +(* ||A|| A project by Andrea Asperti *) +(* ||T|| *) +(* ||I|| Developers: *) +(* ||T|| The HELM team. *) +(* ||A|| http://helm.cs.unibo.it *) +(* \ / *) +(* \ / This file is distributed under the terms of the *) +(* v GNU General Public License Version 2 *) +(* *) +(**************************************************************************) + + + +include "nat/orders.ma". +include "nat/times.ma". +include "ordered_group.ma". +include "divisible_group.ma". + +record todgroup : Type ≝ { + todg_order:> togroup; + todg_division_: dgroup; + todg_with_: dg_carr todg_division_ = og_abelian_group todg_order +}. + +lemma todg_division: todgroup → dgroup. +intro G; apply (mk_dgroup G); unfold abelian_group_OF_todgroup; +cases (todg_with_ G); exact (dg_prop (todg_division_ G)); +qed. + +coercion cic:/matita/ordered_divisible_group/todg_division.con. + +lemma mul_ge: ∀G:todgroup.∀x:G.∀n.0 ≤ x → 0 ≤ n * x. +intros (G x n); elim n; simplify; [apply le_reflexive] +apply (le_transitive ???? H1); +apply (Le≪ (0+(n1*x)) (zero_neutral ??)); +apply fle_plusr; assumption; +qed. + +lemma lt_ltmul: ∀G:todgroup.∀x,y:G.∀n. x < y → S n * x < S n * y. +intros; elim n; [simplify; apply flt_plusr; assumption] +simplify; apply (ltplus); [assumption] assumption; +qed. + +lemma ltmul_lt: ∀G:todgroup.∀x,y:G.∀n. S n * x < S n * y → x < y. +intros 4; elim n; [apply (plus_cancr_lt ??? 0); assumption] +simplify in l; cases (ltplus_orlt ????? l); [assumption] +apply f; assumption; +qed. + +lemma divide_preserves_lt: ∀G:todgroup.∀e:G.∀n.0 sym_plus; simplify; apply (Lt≪ (0+(y+n*y))); [ + apply eq_sym; apply zero_neutral] + apply flt_plusr; assumption;] +apply (lt_transitive ???? l); rewrite > sym_plus; simplify; +rewrite > (sym_plus n); simplify; repeat apply flt_plusl; +apply (Lt≪ (0+(n1+n)*y)); [apply eq_sym; apply zero_neutral] +apply flt_plusr; assumption; +qed. +