X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=matita%2Flibrary%2Fnat%2Ffactorization.ma;h=fc9352e12395cbb117af7054f01b17bc41d1c38d;hb=fd972f2c23de4c32d1335fb2b27e21854c6eb806;hp=715a9795f1dc8d8115049931277a7022a166ed60;hpb=04e27500136c94e4f2ac072a5e4d330b75da35f0;p=helm.git diff --git a/matita/library/nat/factorization.ma b/matita/library/nat/factorization.ma index 715a9795f..fc9352e12 100644 --- a/matita/library/nat/factorization.ma +++ b/matita/library/nat/factorization.ma @@ -46,13 +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; ] - | apply divides_smallest_factor_n; + | letin x \def le.auto. + (* + apply divides_smallest_factor_n; apply (trans_lt ? (S O)); [ unfold lt; apply le_n; - | assumption; ] ] ] - | apply prime_to_nth_prime; + | assumption; ] *) ] ] + | letin x \def prime. auto. + (* + 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 @@ -66,15 +70,24 @@ 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). -apply (transitive_divides ? n). -apply divides_max_prime_factor_n. -assumption.assumption. -apply divides_b_true_to_divides. -apply lt_O_nth_prime_n. -apply divides_to_divides_b_true. -apply lt_O_nth_prime_n. -apply divides_max_prime_factor_n. -assumption. +auto. +auto. +(* + [ apply (transitive_divides ? n); + [ apply divides_max_prime_factor_n. + assumption. + | assumption. + ] + | apply divides_b_true_to_divides; + [ apply lt_O_nth_prime_n. + | apply divides_to_divides_b_true; + [ apply lt_O_nth_prime_n. + | apply divides_max_prime_factor_n. + assumption. + ] + ] + ] +*) qed. theorem p_ord_to_lt_max_prime_factor: \forall n,p,q,r. O < n \to @@ -91,13 +104,28 @@ rewrite < H4. apply divides_max_prime_factor_n. assumption.unfold Not. intro. -cut (r \mod (nth_prime (max_prime_factor n)) \neq O). -apply Hcut1.apply divides_to_mod_O. -apply lt_O_nth_prime_n.assumption. -apply (p_ord_aux_to_not_mod_O n n ? q r). -apply lt_SO_nth_prime_n.assumption. -apply le_n. -rewrite < H1.assumption. +cut (r \mod (nth_prime (max_prime_factor n)) \neq O); + [unfold Not in Hcut1.auto. + (* + apply Hcut1.apply divides_to_mod_O; + [ apply lt_O_nth_prime_n. + | assumption. + ] + *) + |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] + (* CERCA COME MAI le_n non lo applica se lo trova come Const e non Rel *) + ]. +(* + apply (p_ord_aux_to_not_mod_O n n ? q r); + [ apply lt_SO_nth_prime_n. + | assumption. + | apply le_n. + | rewrite < H1.assumption. + ] + ]. +*) apply (le_to_or_lt_eq (max_prime_factor r) (max_prime_factor n)). apply divides_to_max_prime_factor. assumption.assumption. @@ -169,24 +197,23 @@ match f with | nfa_one \Rightarrow (S O) | (nfa_proper g) \Rightarrow defactorize_aux g O]. -theorem lt_O_defactorize_aux: \forall f:nat_fact.\forall i:nat. -O < defactorize_aux f i. -intro.elim f.simplify.unfold lt. -rewrite > times_n_SO. -apply le_times. -change with (O < nth_prime i). -apply lt_O_nth_prime_n. -change with (O < exp (nth_prime i) n). -apply lt_O_exp. -apply lt_O_nth_prime_n. -simplify.unfold lt. -rewrite > times_n_SO. -apply le_times. -change with (O < exp (nth_prime i) n). -apply lt_O_exp. -apply lt_O_nth_prime_n. -change with (O < defactorize_aux n1 (S i)). -apply H. +theorem lt_O_defactorize_aux: + \forall f:nat_fact. + \forall i:nat. + O < defactorize_aux f i. +intro; elim f; +[1,2: + simplify; unfold lt; + rewrite > times_n_SO; + apply le_times; + [ change with (O < nth_prime i); + apply lt_O_nth_prime_n; + |2,3: + change with (O < exp (nth_prime i) n); + apply lt_O_exp; + apply lt_O_nth_prime_n; + | change with (O < defactorize_aux n1 (S i)); + apply H; ] ] qed. theorem lt_SO_defactorize_aux: \forall f:nat_fact.\forall i:nat. @@ -256,13 +283,13 @@ apply (nat_case n). left.split.assumption.reflexivity. intro.right.rewrite > Hcut2. simplify.unfold lt.apply le_S_S.apply le_O_n. -cut (r \lt (S O) \or r=(S O)). +cut (r < (S O) ∨ r=(S O)). elim Hcut2.absurd (O=r). apply le_n_O_to_eq.apply le_S_S_to_le.exact H5. unfold Not.intro. cut (O=n1). apply (not_le_Sn_O O). -rewrite > Hcut3 in \vdash (? ? %). +rewrite > Hcut3 in ⊢ (? ? %). assumption.rewrite > Hcut. rewrite < H6.reflexivity. assumption. @@ -608,4 +635,3 @@ intros. apply injective_defactorize. apply defactorize_factorize. qed. -