X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=helm%2Fmatita%2Flibrary%2Fnat%2Fsigma_and_pi.ma;h=4f5f6cba008299370b94fb0e95f7b0b6248407a6;hb=97c2d258a5c524eb5c4b85208899d80751a2c82f;hp=470bb9d69f7ea3992ff413b7f63ad7ff3879228f;hpb=c3b6e22034e3029195031d31c94983c381ae659b;p=helm.git diff --git a/helm/matita/library/nat/sigma_and_pi.ma b/helm/matita/library/nat/sigma_and_pi.ma index 470bb9d69..4f5f6cba0 100644 --- a/helm/matita/library/nat/sigma_and_pi.ma +++ b/helm/matita/library/nat/sigma_and_pi.ma @@ -14,36 +14,66 @@ set "baseuri" "cic:/matita/nat/sigma_and_pi". +include "nat/factorial.ma". include "nat/lt_arith.ma". +include "nat/exp.ma". -let rec sigma n f \def +let rec sigma n f m \def match n with - [ O \Rightarrow O - | (S p) \Rightarrow (f p)+(sigma p f)]. + [ O \Rightarrow (f m) + | (S p) \Rightarrow (f (S p+m))+(sigma p f m)]. -let rec pi n f \def +let rec pi n f m \def match n with - [ O \Rightarrow (S O) - | (S p) \Rightarrow (f p)*(pi p f)]. + [ O \Rightarrow f m + | (S p) \Rightarrow (f (S p+m))*(pi p f m)]. theorem eq_sigma: \forall f,g:nat \to nat. -\forall n:nat. (\forall m:nat. m < n \to f m = g m) \to -(sigma n f) = (sigma n g). +\forall n,m:nat. +(\forall i:nat. m \le i \to i \le m+n \to f i = g i) \to +(sigma n f m) = (sigma n g m). intros 3.elim n. -simplify.reflexivity. +simplify.apply H.apply le_n.rewrite < plus_n_O.apply le_n. simplify. -apply eq_f2.apply H1.simplify. apply le_n. -apply H.intros.apply H1. -apply trans_lt ? n1.assumption.simplify.apply le_n. +apply eq_f2.apply H1. +change with (m \le (S n1)+m).apply le_plus_n. +rewrite > (sym_plus m).apply le_n. +apply H.intros.apply H1.assumption. +rewrite < plus_n_Sm. +apply le_S.assumption. qed. theorem eq_pi: \forall f,g:nat \to nat. -\forall n:nat. (\forall m:nat. m < n \to f m = g m) \to -(pi n f) = (pi n g). +\forall n,m:nat. +(\forall i:nat. m \le i \to i \le m+n \to f i = g i) \to +(pi n f m) = (pi n g m). intros 3.elim n. +simplify.apply H.apply le_n.rewrite < plus_n_O.apply le_n. +simplify. +apply eq_f2.apply H1. +change with (m \le (S n1)+m).apply le_plus_n. +rewrite > (sym_plus m).apply le_n. +apply H.intros.apply H1.assumption. +rewrite < plus_n_Sm. +apply le_S.assumption. +qed. + +theorem eq_fact_pi: \forall n. (S n)! = pi n (\lambda m.m) (S O). +intro.elim n. simplify.reflexivity. +change with ((S(S n1))*(S n1)! = ((S n1)+(S O))*(pi n1 (\lambda m.m) (S O))). +rewrite < plus_n_Sm.rewrite < plus_n_O. +apply eq_f.assumption. +qed. + +theorem exp_pi_l: \forall f:nat\to nat.\forall n,m,a:nat. +(exp a (S n))*pi n f m= pi n (\lambda p.a*(f p)) m. +intros.elim n.simplify.rewrite < times_n_SO.reflexivity. simplify. -apply eq_f2.apply H1.simplify. apply le_n. -apply H.intros.apply H1. -apply trans_lt ? n1.assumption.simplify.apply le_n. +rewrite < H. +rewrite > assoc_times. +rewrite > assoc_times in\vdash (? ? ? %). +apply eq_f.rewrite < assoc_times. +rewrite < assoc_times. +apply eq_f2.apply sym_times.reflexivity. qed.