]> matita.cs.unibo.it Git - helm.git/blobdiff - matita/matita/contribs/lambdadelta/ground/arith/nat_plus.ma
arithmetics for ฮปฮด
[helm.git] / matita / matita / contribs / lambdadelta / ground / arith / nat_plus.ma
index d9c82ae33f9f8fdb05978cb80e1aa5b95ff68126..f7d79ccdf3914095f44acde0d5689a4c48d6082c 100644 (file)
@@ -24,22 +24,32 @@ interpretation
   "plus (positive integers)"
   'plus m n = (nplus m n).
 
-(* Basic rewrites ***********************************************************)
+(* Basic constructions ******************************************************)
 
 (*** plus_n_O *)
 lemma nplus_zero_dx (m): m = m + ๐ŸŽ.
 // qed.
 
+(*** plus_SO_dx *)
 lemma nplus_one_dx (n): โ†‘n = n + ๐Ÿ.
 // qed.
 
-(* Advanved rewrites (semigroup properties) *********************************)
-
 (*** plus_n_Sm *)
 lemma nplus_succ_dx (m) (n): โ†‘(m+n) = m + โ†‘n.
 #m #n @(niter_succ โ€ฆ nsucc)
 qed.
 
+(* Constructions with niter *************************************************)
+
+(*** iter_plus *)
+lemma niter_plus (A) (f) (a) (n1) (n2):
+      f^n1 (f^n2 a) = f^{A}(n1+n2) a.
+#A #f #a #n1 #n2 @(nat_ind_succ โ€ฆ n2) -n2 //
+#n2 #IH <nplus_succ_dx <niter_succ <niter_succ <niter_appl //
+qed.
+
+(* Advanved constructions (semigroup properties) ****************************)
+
 (*** plus_S1 *)
 lemma nplus_succ_sn (m) (n): โ†‘(m+n) = โ†‘m + n.
 #m #n @(niter_appl โ€ฆ nsucc)
@@ -47,22 +57,23 @@ qed.
 
 (*** plus_O_n.con *)
 lemma nplus_zero_sn (m): m = ๐ŸŽ + m.
-#m @(nat_ind โ€ฆ m) -m //
+#m @(nat_ind_succ โ€ฆ m) -m //
 qed.
 
 (*** commutative_plus *)
 lemma nplus_comm: commutative โ€ฆ nplus.
-#m @(nat_ind โ€ฆ m) -m //
+#m @(nat_ind_succ โ€ฆ m) -m //
 qed-.
 
 (*** associative_plus *)
 lemma nplus_assoc: associative โ€ฆ nplus.
-#m #n #o @(nat_ind โ€ฆ o) -o //
+#m #n #o @(nat_ind_succ โ€ฆ o) -o //
 #o #IH <nplus_succ_dx <nplus_succ_dx <nplus_succ_dx <IH -IH //
 qed.
 
-(* Advanced constructions ***************************************************)
+(* Helper constructions *****************************************************)
 
+(*** plus_SO_sn *)
 lemma nplus_one_sn (n): โ†‘n = ๐Ÿ + n.
 #n <nplus_comm // qed.
 
@@ -81,14 +92,16 @@ qed-.
 (* Basic inversions *********************************************************)
 
 lemma eq_inv_nzero_plus (m) (n): ๐ŸŽ = m + n โ†’ โˆงโˆง ๐ŸŽ = m & ๐ŸŽ = n.
-#m #n @(nat_ind โ€ฆ n) -n /2 width=1 by conj/
-#n #_ <nplus_succ_dx #H
-elim (eq_inv_nzero_succ โ€ฆ H)
+#m #n @(nat_ind_succ โ€ฆ n) -n
+[ /2 width=1 by conj/
+| #n #_ <nplus_succ_dx #H
+  elim (eq_inv_nzero_succ โ€ฆ H)
+]
 qed-.
 
 (*** injective_plus_l *)
 lemma eq_inv_nplus_bi_dx (o) (m) (n): m + o = n + o โ†’ m = n.
-#o @(nat_ind โ€ฆ o) -o /3 width=1 by eq_inv_nsucc_bi/
+#o @(nat_ind_succ โ€ฆ o) -o /3 width=1 by eq_inv_nsucc_bi/
 qed-.
 
 (*** injective_plus_r *)
@@ -102,5 +115,5 @@ qed-.
 (*** nat_ind_plus *)
 lemma nat_ind_plus (Q:predicate โ€ฆ):
       Q (๐ŸŽ) โ†’ (โˆ€n. Q n โ†’ Q (๐Ÿ+n)) โ†’ โˆ€n. Q n.
-#Q #IH1 #IH2 #n @(nat_ind โ€ฆ n) -n /2 width=1 by/
+#Q #IH1 #IH2 #n @(nat_ind_succ โ€ฆ n) -n /2 width=1 by/
 qed-.