X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=helm%2Fsoftware%2Fmatita%2Flibrary%2Fnat%2Fgcd.ma;h=dcdbc7b7ad302405a445bef9cc1bcf9bdb1f4235;hb=68dbcd02022874a025a9444aa1125b0458816fbb;hp=0baa86e3c28b43cfcddd5a8e0aa8f8a69af35685;hpb=d74bdbdea0586eaa764c53a22e2c660d5367d0d5;p=helm.git diff --git a/helm/software/matita/library/nat/gcd.ma b/helm/software/matita/library/nat/gcd.ma index 0baa86e3c..dcdbc7b7a 100644 --- a/helm/software/matita/library/nat/gcd.ma +++ b/helm/software/matita/library/nat/gcd.ma @@ -12,8 +12,6 @@ (* *) (**************************************************************************) -set "baseuri" "cic:/matita/nat/gcd". - include "nat/primes.ma". include "nat/lt_arith.ma". @@ -57,7 +55,7 @@ qed. theorem divides_mod_to_divides: \forall p,m,n:nat. O < n \to p \divides (m \mod n) \to p \divides n \to p \divides m. intros.elim H1.elim H2. -apply (witness p m ((n1*(m / n))+n2)). +apply (witness p m ((n2*(m / n))+n1)). rewrite > distr_times_plus. rewrite < H3. rewrite < assoc_times. @@ -654,9 +652,9 @@ elim H2. generalize in match H1. rewrite > H3. intro. -cut (O < n2) - [elim (gcd_times_SO_to_gcd_SO n n n2 ? ? H4) - [cut (gcd n (n*n2) = n) +cut (O < n1) + [elim (gcd_times_SO_to_gcd_SO n n n1 ? ? H4) + [cut (gcd n (n*n1) = n) [apply (lt_to_not_eq (S O) n) [assumption|rewrite < H4.assumption] |apply gcd_n_times_nm.assumption @@ -664,7 +662,7 @@ cut (O < n2) |apply (trans_lt ? (S O))[apply le_n|assumption] |assumption ] - |elim (le_to_or_lt_eq O n2 (le_O_n n2)); + |elim (le_to_or_lt_eq O n1 (le_O_n n1)); [assumption |apply False_ind. apply (le_to_not_lt n (S O)) @@ -672,7 +670,7 @@ cut (O < n2) apply divides_to_le [rewrite > H4.apply lt_O_S |apply divides_d_gcd - [apply (witness ? ? n2).reflexivity + [apply (witness ? ? n1).reflexivity |apply divides_n_n ] ] @@ -757,18 +755,14 @@ cut (n \divides p \lor n \ndivides p) |right. cut (\exists a,b. a*n - b*p = (S O) \lor b*p - a*n = (S O)) [elim Hcut1.elim H3.elim H4 - [(* first case *) - rewrite > (times_n_SO q).rewrite < H5. + [rewrite > (times_n_SO q).rewrite < H5. rewrite > distr_times_minus. + elim H1. + autobatch by witness; + (* rewrite > (sym_times q (a1*p)). rewrite > (assoc_times a1). - elim H1. - (* - rewrite > H6. - applyS (witness n (n*(q*a-a1*n2)) (q*a-a1*n2)) - reflexivity. *); - applyS (witness n ? ? (refl_eq ? ?)) (* timeout=50 *). - (* + applyS (witness n ? ? (refl_eq ? ?)). rewrite < (sym_times n).rewrite < assoc_times. rewrite > (sym_times q).rewrite > assoc_times. rewrite < (assoc_times a1).rewrite < (sym_times n). @@ -779,14 +773,18 @@ cut (n \divides p \lor n \ndivides p) |(* second case *) rewrite > (times_n_SO q).rewrite < H5. rewrite > distr_times_minus. + elim H1. autobatch by witness; + (* rewrite > (sym_times q (a1*p)). rewrite > (assoc_times a1). - elim H1.rewrite > H6. + rewrite > H6. + applyS (witness n ? ? (refl_eq ? ?)). rewrite < sym_times.rewrite > assoc_times. rewrite < (assoc_times q). rewrite < (sym_times n). rewrite < distr_times_minus. - apply (witness ? ? (n2*a1-q*a)).reflexivity + apply (witness ? ? (n1*a1-q*a)).reflexivity + *) ](* end second case *) |rewrite < (prime_to_gcd_SO n p) [apply eq_minus_gcd|assumption|assumption @@ -880,19 +878,15 @@ cut (n \divides p \lor n \ndivides p) |cut (\exists a,b. a*n - b*m = (S O) \lor b*m - a*n = (S O)) [elim Hcut1.elim H4.elim H5 [(* first case *) + elim H2. rewrite > (times_n_SO p).rewrite < H6. rewrite > distr_times_minus. - rewrite > (sym_times p (a1*m)). - rewrite > (assoc_times a1). + autobatch by witness, divides_minus. + |(* second case *) elim H2. - applyS (witness n ? ? (refl_eq ? ?)) (* timeout=50 *). - |(* second case *) rewrite > (times_n_SO p).rewrite < H6. rewrite > distr_times_minus. - rewrite > (sym_times p (a1*m)). - rewrite > (assoc_times a1). - elim H2. - applyS (witness n ? ? (refl_eq ? ?)). + autobatch by witness, divides_minus. ](* end second case *) |rewrite < H1.apply eq_minus_gcd. ] @@ -928,9 +922,13 @@ rewrite > H4 in H2. elim (divides_times_to_divides ? ? ? H H2) [apply False_ind.apply H1.assumption |elim H5. - apply (witness ? ? n1). + autobatch by transitive_divides, H5, reflexive_divides,divides_times. + (* + apply (witness ? ? n2). rewrite > sym_times in ⊢ (? ? ? (? % ?)). rewrite > assoc_times. - rewrite < H6.assumption + autobatch. + (*rewrite < H6.assumption*) + *) ] qed. \ No newline at end of file