]> matita.cs.unibo.it Git - helm.git/blobdiff - matita/matita/contribs/lambdadelta/ground/arith/nat_plus.ma
update in ground
[helm.git] / matita / matita / contribs / lambdadelta / ground / arith / nat_plus.ma
index 2df064a0189c3085ed0707a78532215d5e6bd79c..a9894fc6285e7aaf7ec746ddfebacb208b91885e 100644 (file)
@@ -18,10 +18,10 @@ include "ground/arith/nat_succ_iter.ma".
 
 (*** plus *)
 definition nplus: nat → nat → nat ≝
-           λm,n. nsucc^n m.
+           λm,n. (nsucc^n) m.
 
 interpretation
-  "plus (positive integers)"
+  "plus (non-negative integers)"
   'plus m n = (nplus m n).
 
 (* Basic constructions ******************************************************)
@@ -31,7 +31,7 @@ lemma nplus_zero_dx (m): m = m + 𝟎.
 // qed.
 
 (*** plus_SO_dx *)
-lemma nplus_one_dx (n): ↑n = n + 𝟏.
+lemma nplus_unit_dx (n): ↑n = n + 𝟏.
 // qed.
 
 (*** plus_n_Sm *)
@@ -42,20 +42,22 @@ 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 //
+lemma niter_plus (A) (f) (n1) (n2):
+      f^n2 ∘ f^n1 ≐ f^{A}(n1+n2).
+#A #f #n1 #n2 @(nat_ind_succ … n2) -n2 //
+#n2 #IH <nplus_succ_dx
+@exteq_repl
+/3 width=5 by compose_repl_fwd_sn, compose_repl_fwd_dx/
 qed.
 
-(* Advanved constructions (semigroup properties) ****************************)
+(* Advanced constructions (semigroup properties) ****************************)
 
 (*** plus_S1 *)
 lemma nplus_succ_sn (m) (n): ↑(m+n) = ↑m + n.
 #m #n @(niter_appl … nsucc)
 qed.
 
-(*** plus_O_n.con *)
+(*** plus_O_n *)
 lemma nplus_zero_sn (m): m = 𝟎 + m.
 #m @(nat_ind_succ … m) -m //
 qed.
@@ -63,7 +65,7 @@ qed.
 (*** commutative_plus *)
 lemma nplus_comm: commutative … nplus.
 #m @(nat_ind_succ … m) -m //
-qed-. (**) (* gets in the way with auto *)
+qed-. (* * gets in the way with auto *)
 
 (*** associative_plus *)
 lemma nplus_assoc: associative … nplus.
@@ -74,11 +76,11 @@ qed.
 (* Helper constructions *****************************************************)
 
 (*** plus_SO_sn *)
-lemma nplus_one_sn (n): ↑n = 𝟏 + n.
+lemma nplus_unit_sn (n): ↑n = 𝟏 + n.
 #n <nplus_comm // qed.
 
 lemma nplus_succ_shift (m) (n): ↑m + n = m + ↑n.
-// qed-.
+// qed.
 
 (*** assoc_plus1 *)
 lemma nplus_plus_comm_12 (o) (m) (n): m + n + o = n + (m + o).
@@ -87,11 +89,11 @@ lemma nplus_plus_comm_12 (o) (m) (n): m + n + o = n + (m + o).
 (*** plus_plus_comm_23 *)
 lemma nplus_plus_comm_23 (o) (m) (n): o + m + n = o + n + m.
 #o #m #n >nplus_assoc >nplus_assoc <nplus_comm in ⊢ (??(??%)?); //
-qed-.
+qed.
 
 (* Basic inversions *********************************************************)
 
-(*** plus_inv_O3 zero_eq_plus *) 
+(*** zero_eq_plus *)
 lemma eq_inv_zero_nplus (m) (n): 𝟎 = m + n → ∧∧ 𝟎 = m & 𝟎 = n.
 #m #n @(nat_ind_succ … n) -n
 [ /2 width=1 by conj/
@@ -100,6 +102,11 @@ lemma eq_inv_zero_nplus (m) (n): 𝟎 = m + n → ∧∧ 𝟎 = m & 𝟎 = n.
 ]
 qed-.
 
+(*** plus_inv_O3 *)
+lemma eq_inv_nplus_zero (m) (n):
+      m + n = 𝟎 → ∧∧ 𝟎 = m & 𝟎 = n.
+/2 width=1 by eq_inv_zero_nplus/ qed-.
+
 (*** injective_plus_l *)
 lemma eq_inv_nplus_bi_dx (o) (m) (n): m + o = n + o → m = n.
 #o @(nat_ind_succ … o) -o /3 width=1 by eq_inv_nsucc_bi/