From: Andrea Asperti Date: Tue, 5 Feb 2008 16:21:37 +0000 (+0000) Subject: Some more theorems. X-Git-Tag: make_still_working~5628 X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=commitdiff_plain;h=57ff5cdc5a03a3de6f9366d4427b8188e5d8dec2;p=helm.git Some more theorems. --- diff --git a/helm/software/matita/library/nat/sqrt.ma b/helm/software/matita/library/nat/sqrt.ma index c5a270128..733afe641 100644 --- a/helm/software/matita/library/nat/sqrt.ma +++ b/helm/software/matita/library/nat/sqrt.ma @@ -20,7 +20,26 @@ include "nat/log.ma". definition sqrt \def \lambda n.max n (\lambda x.leb (x*x) n). - + +theorem eq_sqrt: \forall n. sqrt (n*n) = n. +intros. +unfold sqrt.apply max_spec_to_max. +unfold max_spec.split + [split + [cases n + [apply le_n + |rewrite > times_n_SO in ⊢ (? % ?). + apply le_times_r. + apply le_S_S.apply le_O_n + ] + |apply le_to_leb_true.apply le_n + ] + |intros. + apply lt_to_leb_false. + apply lt_times;assumption + ] +qed. + theorem le_sqrt_to_le_times_l : \forall m,n.n \leq sqrt m \to n*n \leq m. intros;apply (trans_le ? (sqrt m * sqrt m)) [apply le_times;assumption @@ -65,6 +84,93 @@ split qed. alias num (instance 0) = "natural number". + +lemma lt_sqrt_n : \forall n.1 < n \to sqrt n < n. +intros. +elim (le_to_or_lt_eq ? ? (le_sqrt_n_n n)) + [assumption + |apply False_ind. + apply (le_to_not_lt ? ? (leq_sqrt_n n)). + rewrite > H1. + rewrite > times_n_SO in ⊢ (? % ?). + apply lt_times_r1 + [apply lt_to_le.assumption + |assumption + ] + ] +qed. + +lemma lt_sqrt: \forall n.n < (exp (S (sqrt n)) 2). +intro. +cases n + [apply le_n + |cases n1 + [simplify.apply lt_to_le.apply lt_to_le.apply le_n + |apply not_le_to_lt. + apply leb_false_to_not_le. + rewrite > exp_SSO. + apply (lt_max_to_false (\lambda x.(leb (x*x) (S(S n2)))) (S(S n2))) + [apply le_n + |apply lt_sqrt_n. + apply le_S_S.apply lt_O_S. + ] + ] + ] +qed. + +lemma le_sqrt_n1: \forall n. n - 2*sqrt n \le exp (sqrt n) 2. +intros. +apply le_plus_to_minus. +apply le_S_S_to_le. +cut (S ((sqrt n)\sup 2+2*sqrt n) = (exp (S(sqrt n)) 2)) + [rewrite > Hcut.apply lt_sqrt + |rewrite > exp_SSO.rewrite > exp_SSO. + simplify.apply eq_f. + rewrite < times_n_Sm. + rewrite < plus_n_O. + rewrite < assoc_plus in ⊢ (? ? ? %). + rewrite > sym_plus. + reflexivity + ] +qed. + +(* falso per n=2, m=7 e n=3, m =15 *) +lemma le_sqrt_nl: \forall n,m. 3 < n \to +m*(pred m)*n \le exp (sqrt ((exp m 2)*n)) 2. +intros. +rewrite > minus_n_O in ⊢ (? (? (? ? (? %)) ?) ?). +rewrite < eq_minus_S_pred. +rewrite > distr_times_minus. +rewrite < times_n_SO. +rewrite > sym_times. +rewrite > distr_times_minus. +rewrite > sym_times. +apply (trans_le ? (m*m*n -2*sqrt(m*m*n))) + [apply monotonic_le_minus_r. + apply (le_exp_to_le1 ? ? 2) + [apply lt_O_S + |rewrite < times_exp. + apply (trans_le ? ((exp 2 2)*(m*m*n))) + [apply le_times_r. + rewrite > exp_SSO. + apply leq_sqrt_n + |rewrite < exp_SSO. + rewrite < times_exp. + rewrite < assoc_times. + rewrite < sym_times in ⊢ (? (? % ?) ?). + rewrite > assoc_times. + rewrite > sym_times. + apply le_times_l. + rewrite > exp_SSO in ⊢ (? ? %). + apply le_times_l. + assumption + ] + ] + |rewrite