X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=matita%2Flibrary%2Fnat%2Fexp.ma;h=193478c0fd6706ddc075aa2d6402051f553489e8;hb=c3bba4af040f8040e5eae07e70690c52f8c614f8;hp=11d84f74ca7deb3b676007693f72b585c0547435;hpb=7f2444c2670cadafddd8785b687ef312158376b0;p=helm.git diff --git a/matita/library/nat/exp.ma b/matita/library/nat/exp.ma index 11d84f74c..193478c0f 100644 --- a/matita/library/nat/exp.ma +++ b/matita/library/nat/exp.ma @@ -15,6 +15,7 @@ set "baseuri" "cic:/matita/nat/exp". include "nat/div_and_mod.ma". +include "nat/lt_arith.ma". let rec exp n m on m\def match m with @@ -54,7 +55,7 @@ apply le_times.assumption.assumption. qed. theorem lt_m_exp_nm: \forall n,m:nat. (S O) < n \to m < n \sup m. -intros.elim m.simplify.unfold lt.reflexivity. +intros.elim m.simplify.unfold lt.apply le_n. simplify.unfold lt. apply (trans_le ? ((S(S O))*(S n1))). simplify. @@ -95,3 +96,76 @@ qed. variant inj_exp_r: \forall p:nat. (S O) < p \to \forall n,m:nat. p \sup n = p \sup m \to n = m \def injective_exp_r. + +theorem le_exp: \forall n,m,p:nat. O < p \to n \le m \to exp p n \le exp p m. +apply nat_elim2 + [intros. + apply lt_O_exp.assumption + |intros. + apply False_ind. + apply (le_to_not_lt ? ? ? H1). + apply le_O_n + |intros. + simplify. + apply le_times + [apply le_n + |apply H[assumption|apply le_S_S_to_le.assumption] + ] + ] +qed. + +theorem lt_exp: \forall n,m,p:nat. S O < p \to n < m \to exp p n < exp p m. +apply nat_elim2 + [intros. + apply (lt_O_n_elim ? H1).intro. + simplify.unfold lt. + rewrite > times_n_SO. + apply le_times + [assumption + |apply lt_O_exp. + apply (trans_lt ? (S O))[apply le_n|assumption] + ] + |intros. + apply False_ind. + apply (le_to_not_lt ? ? ? H1). + apply le_O_n + |intros.simplify. + apply lt_times_r1 + [apply (trans_lt ? (S O))[apply le_n|assumption] + |apply H + [apply H1 + |apply le_S_S_to_le.assumption + ] + ] + ] +qed. + +theorem le_exp_to_le: +\forall a,n,m. S O < a \to exp a n \le exp a m \to n \le m. +intro. +apply nat_elim2;intros + [apply le_O_n + |apply False_ind. + apply (le_to_not_lt ? ? H1). + simplify. + rewrite > times_n_SO. + apply lt_to_le_to_lt_times + [assumption + |apply lt_O_exp.apply lt_to_le.assumption + |apply lt_O_exp.apply lt_to_le.assumption + ] + |simplify in H2. + apply le_S_S. + apply H + [assumption + |apply (le_times_to_le a) + [apply lt_to_le.assumption|assumption] + ] + ] +qed. + + + + + + \ No newline at end of file