X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=helm%2Fmatita%2Flibrary%2Fnat%2Fminus.ma;h=0c8780f7e68a50e0b453a5fe2dff09707704c214;hb=8b55faddb06e3c4b0a13839210bb49170939b33e;hp=3acce20afe21277adfab0b15c6d023022afd5da5;hpb=78044035b4419e569df0d7f6a7f96fa32d21a19d;p=helm.git diff --git a/helm/matita/library/nat/minus.ma b/helm/matita/library/nat/minus.ma index 3acce20af..0c8780f7e 100644 --- a/helm/matita/library/nat/minus.ma +++ b/helm/matita/library/nat/minus.ma @@ -68,6 +68,18 @@ intros.simplify.reflexivity. intros.simplify.apply H.apply le_S_S_to_le.assumption. qed. +theorem minus_plus_m_m: \forall n,m:nat.n = (n+m)-m. +intros 2. +generalize in match n. +elim m. +rewrite < minus_n_O.apply plus_n_O. +elim n2.simplify. +apply minus_n_n. +rewrite < plus_n_Sm. +change with S n3 = (S n3 + n1)-n1. +apply H. +qed. + theorem plus_minus_m_m: \forall n,m:nat. m \leq n \to n = (n-m)+m. intros 2. @@ -82,20 +94,22 @@ qed. theorem minus_to_plus :\forall n,m,p:nat.m \leq n \to n-m = p \to n = m+p. -intros.apply trans_eq ? ? ((n-m)+m) ?. +intros.apply trans_eq ? ? ((n-m)+m). apply plus_minus_m_m. apply H.elim H1. apply sym_plus. qed. -theorem plus_to_minus :\forall n,m,p:nat.m \leq n \to +theorem plus_to_minus :\forall n,m,p:nat. n = m+p \to n-m = p. intros. apply inj_plus_r m. -rewrite < H1. +rewrite < H. rewrite < sym_plus. symmetry. -apply plus_minus_m_m.assumption. +apply plus_minus_m_m.rewrite > H. +rewrite > sym_plus. +apply le_plus_n. qed. theorem minus_S_S : \forall n,m:nat. @@ -118,8 +132,8 @@ intros 2. apply nat_elim2 (\lambda n,m.n \leq m \to n-m = O). intros.simplify.reflexivity. intros.apply False_ind. -(* ancora problemi con il not *) -apply not_le_Sn_O n1 H. +apply not_le_Sn_O. +goal 13.apply H. intros. simplify.apply H.apply le_S_S_to_le. apply H1. qed. @@ -220,7 +234,7 @@ apply (leb_elim z y). apply inj_plus_l (x*z).assumption. apply trans_eq nat ? (x*y). rewrite < distr_times_plus.rewrite < plus_minus_m_m ? ? H.reflexivity. - rewrite < plus_minus_m_m ? ? ?. + rewrite < plus_minus_m_m. reflexivity. apply le_times_r.assumption. intro.rewrite > eq_minus_n_m_O. @@ -235,9 +249,9 @@ theorem distr_times_minus: \forall n,m,p:nat. n*(m-p) = n*m-n*p theorem eq_minus_minus_minus_plus: \forall n,m,p:nat. (n-m)-p = n-(m+p). intros. -cut m+p \le n \or \not m+p \le n. +cut m+p \le n \or m+p \nleq n. elim Hcut. - symmetry.apply plus_to_minus.assumption. + symmetry.apply plus_to_minus. rewrite > assoc_plus.rewrite > sym_plus p.rewrite < plus_minus_m_m. rewrite > sym_plus.rewrite < plus_minus_m_m. reflexivity. @@ -259,8 +273,6 @@ p+(n-m) = n-(m-p). intros. apply sym_eq. apply plus_to_minus. -apply le_plus_to_minus. -apply trans_le ? n.assumption.rewrite < sym_plus.apply le_plus_n. rewrite < assoc_plus. rewrite < plus_minus_m_m. rewrite < sym_plus.