X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=helm%2Fsoftware%2Fmatita%2Flibrary%2Fnat%2Ffactorization.ma;h=0bd8e247836bb10a679b9f648f0603a1a5a899dc;hb=db9c252cc8adb9243892203805b203bafe486bfc;hp=4c8de0f51ff3e112205dda4c97d26ae1b9939bca;hpb=58c80e82b2e0aea89e18e588028fb0f53479c219;p=helm.git diff --git a/helm/software/matita/library/nat/factorization.ma b/helm/software/matita/library/nat/factorization.ma index 4c8de0f51..0bd8e2478 100644 --- a/helm/software/matita/library/nat/factorization.ma +++ b/helm/software/matita/library/nat/factorization.ma @@ -27,10 +27,10 @@ definition max_prime_factor \def \lambda n:nat. theorem divides_max_prime_factor_n: \forall n:nat. (S O) < n \to nth_prime (max_prime_factor n) \divides n. -intros; apply divides_b_true_to_divides; -[ apply lt_O_nth_prime_n; -| apply (f_max_true (\lambda p:nat.eqb (n \mod (nth_prime p)) O) n); - cut (\exists i. nth_prime i = smallest_factor n); +intros. +apply divides_b_true_to_divides. +apply (f_max_true (\lambda p:nat.eqb (n \mod (nth_prime p)) O) n); +cut (\exists i. nth_prime i = smallest_factor n); [ elim Hcut. apply (ex_intro nat ? a); split; @@ -46,17 +46,17 @@ intros; apply divides_b_true_to_divides; [ apply (trans_lt ? (S O)); [ unfold lt; apply le_n; | apply lt_SO_smallest_factor; assumption; ] - | letin x \def le.auto. + | letin x \def le.autobatch new. (* apply divides_smallest_factor_n; apply (trans_lt ? (S O)); [ unfold lt; apply le_n; | assumption; ] *) ] ] - | letin x \def prime. auto. + | autobatch. (* apply prime_to_nth_prime; apply prime_smallest_factor_n; - assumption; *) ] ] + assumption; *) ] qed. theorem divides_to_max_prime_factor : \forall n,m. (S O) < n \to O < m \to n \divides m \to @@ -70,8 +70,8 @@ apply divides_to_divides_b_true. cut (prime (nth_prime (max_prime_factor n))). apply lt_O_nth_prime_n.apply prime_nth_prime. cut (nth_prime (max_prime_factor n) \divides n). -auto. -auto. +autobatch. +autobatch. (* [ apply (transitive_divides ? n); [ apply divides_max_prime_factor_n. @@ -90,6 +90,17 @@ auto. *) qed. +theorem divides_to_max_prime_factor1 : \forall n,m. O < n \to O < m \to n \divides m \to +max_prime_factor n \le max_prime_factor m. +intros 3. +elim (le_to_or_lt_eq ? ? H) + [apply divides_to_max_prime_factor + [assumption|assumption|assumption] + |rewrite < H1. + simplify.apply le_O_n. + ] +qed. + theorem p_ord_to_lt_max_prime_factor: \forall n,p,q,r. O < n \to p = max_prime_factor n \to (pair nat nat q r) = p_ord n (nth_prime p) \to @@ -105,7 +116,7 @@ apply divides_max_prime_factor_n. assumption.unfold Not. intro. cut (r \mod (nth_prime (max_prime_factor n)) \neq O); - [unfold Not in Hcut1.auto. + [unfold Not in Hcut1.autobatch new. (* apply Hcut1.apply divides_to_mod_O; [ apply lt_O_nth_prime_n. @@ -114,7 +125,7 @@ cut (r \mod (nth_prime (max_prime_factor n)) \neq O); *) |letin z \def le. cut(pair nat nat q r=p_ord_aux n n (nth_prime (max_prime_factor n))); - [2: rewrite < H1.assumption.|letin x \def le.auto width = 4] + [2: rewrite < H1.assumption.|letin x \def le.autobatch width = 4 depth = 2] (* CERCA COME MAI le_n non lo applica se lo trova come Const e non Rel *) ]. (* @@ -126,20 +137,13 @@ cut (r \mod (nth_prime (max_prime_factor n)) \neq O); ] ]. *) -cut (n=r*(nth_prime p)\sup(q)); - [letin www \def le.letin www1 \def divides. - auto. -(* apply (le_to_or_lt_eq (max_prime_factor r) (max_prime_factor n)). apply divides_to_max_prime_factor. assumption.assumption. apply (witness r n ((nth_prime p) \sup q)). -*) - | rewrite < sym_times. apply (p_ord_aux_to_exp n n ? q r). apply lt_O_nth_prime_n.assumption. -] qed. theorem p_ord_to_lt_max_prime_factor1: \forall n,p,q,r. O < n \to @@ -395,7 +399,6 @@ apply (not_eq_O_S (S m1)). rewrite > Hcut.rewrite < H1.rewrite < times_n_O.reflexivity. apply le_to_or_lt_eq.apply le_O_n. (* prova del cut *) -goal 20. apply (p_ord_aux_to_exp (S(S m1))). apply lt_O_nth_prime_n. assumption.