X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=helm%2Fsoftware%2Fmatita%2Fdama%2Fdivisible_group.ma;h=3a79b11bbd969a884307f4a6a86d08e63cbcfff8;hb=10f29fdd78ee089a9a94446207b543d33d6c851c;hp=7d2eeed454871b3b273036d137561e511b216544;hpb=11f667afbb87725dd5e243d4b3717d19f584a481;p=helm.git diff --git a/helm/software/matita/dama/divisible_group.ma b/helm/software/matita/dama/divisible_group.ma index 7d2eeed45..3a79b11bb 100644 --- a/helm/software/matita/dama/divisible_group.ma +++ b/helm/software/matita/dama/divisible_group.ma @@ -12,7 +12,7 @@ (* *) (**************************************************************************) -set "baseuri" "cic:/matita/divisible_group/". + include "nat/orders.ma". include "group.ma". @@ -41,7 +41,7 @@ intro G; cases G; unfold divide; intros (x n); simplify; cases (f x n); simplify; exact H; qed. -lemma feq_pow: ∀G:dgroup.∀x,y:G.∀n.x≈y → n * x ≈ n * y. +lemma feq_mul: ∀G:dgroup.∀x,y:G.∀n.x≈y → n * x ≈ n * y. intros (G x y n H); elim n; [apply eq_reflexive] simplify; apply (Eq≈ (x + (n1 * y)) H1); apply (Eq≈ (y+n1*y) H (eq_reflexive ??)); @@ -50,11 +50,11 @@ qed. lemma div1: ∀G:dgroup.∀x:G.x/O ≈ x. intro G; cases G; unfold divide; intros; simplify; cases (f x O); simplify; simplify in H; intro; apply H; -apply (ap_rewl ???? (plus_comm ???)); -apply (ap_rewl ???w (zero_neutral ??)); assumption; +apply (Ap≪ ? (plus_comm ???)); +apply (Ap≪ w (zero_neutral ??)); assumption; qed. -lemma appow_ap: ∀G:dgroup.∀x,y:G.∀n.S n * x # S n * y → x # y. +lemma apmul_ap: ∀G:dgroup.∀x,y:G.∀n.S n * x # S n * y → x # y. intros 4 (G x y n); elim n; [2: simplify in a; cases (applus ????? a); [assumption] @@ -62,7 +62,7 @@ intros 4 (G x y n); elim n; [2: apply (plus_cancr_ap ??? 0); assumption; qed. -lemma pluspow: ∀G:dgroup.∀x,y:G.∀n.n * (x+y) ≈ n * x + n * y. +lemma plusmul: ∀G:dgroup.∀x,y:G.∀n.n * (x+y) ≈ n * x + n * y. intros (G x y n); elim n; [ simplify; apply (Eq≈ 0 ? (zero_neutral ? 0)); apply eq_reflexive] simplify; apply eq_sym; apply (Eq≈ (x+y+(n1*x+n1*y))); [ @@ -78,8 +78,22 @@ simplify; apply eq_sym; apply (Eq≈ (x+y+(n1*x+n1*y))); [ apply feq_plusl; apply eq_sym; assumption; qed. -lemma powzero: ∀G:dgroup.∀n.n*0 ≈ 0. [2: apply dg_carr; apply G] +lemma mulzero: ∀G:dgroup.∀n.n*0 ≈ 0. [2: apply dg_carr; apply G] intros; elim n; [simplify; apply eq_reflexive] simplify; apply (Eq≈ ? (zero_neutral ??)); assumption; qed. +let rec gpowS (G : abelian_group) (x : G) (n : nat) on n : G ≝ + match n with [ O ⇒ x | S m ⇒ gpowS ? x m + x]. + +lemma gpowS_gpow: ∀G:dgroup.∀e:G.∀n. S n * e ≈ gpowS ? e n. +intros (G e n); elim n; simplify; [ + apply (Eq≈ ? (plus_comm ???));apply zero_neutral] +apply (Eq≈ ?? (plus_comm ???)); +apply (Eq≈ (e+S n1*e) ? H); clear H; simplify; apply eq_reflexive; +qed. + +lemma divpow: ∀G:dgroup.∀e:G.∀n. e ≈ gpowS ? (e/n) n. +intros (G e n); apply (Eq≈ ?? (gpowS_gpow ?(e/n) n)); +apply eq_sym; apply divide_divides; +qed.