]> matita.cs.unibo.it Git - helm.git/blobdiff - matita/matita/contribs/lambdadelta/ground/arith/nat_iter.ma
milestone update in ground
[helm.git] / matita / matita / contribs / lambdadelta / ground / arith / nat_iter.ma
index 94875efc1c29013a7722751aea53338ede59c428..6adaa148a3872d09a8bce16422c136591a336178 100644 (file)
@@ -17,10 +17,11 @@ include "ground/arith/nat.ma".
 
 (* ITERATED FUNCTION FOR NON-NEGATIVE INTEGERS ******************************)
 
+(*** iter *)
 definition niter (n:nat) (A:Type[0]) (f:A→A) (a:A) ≝
 match n with
 [ nzero  ⇒ a
-| ninj p ⇒ f^{A}p a
+| ninj p ⇒ (f^{A}p) a
 ]
 .
 
@@ -28,17 +29,27 @@ interpretation
   "iterated function (non-negative integers)"
   'Exp A f n = (niter n A f).
 
-(* Basic rewrites ***********************************************************)
+(* Basic constructions ******************************************************)
 
+(*** iter_O *)
 lemma niter_zero (A) (f) (a): a = (f^{A}𝟎) a.
 // qed.
 
-lemma niter_inj (A) (f) (p) (a): f^p a = f^{A}(ninj p) a.
+lemma niter_inj (A) (f) (p): f^p ≐ f^{A}(ninj p).
 // qed.
 
-(* Advanced rewrites ********************************************************)
+(* Advanced constructions ***************************************************)
 
-lemma niter_appl (A) (f) (n) (a): f (f^n a) = f^{A}n (f a).
+(*** iter_n_Sm *)
+lemma niter_appl (A) (f) (n): f ∘ f^n ≐ f^{A}n ∘ f.
 #A #f * //
-#p #a <niter_inj <niter_inj <piter_appl //
+#p @exteq_repl
+/2 width=5 by piter_appl, compose_repl_fwd_dx/
+qed.
+
+lemma niter_compose (A) (B) (f) (g) (h) (n):
+      h ∘ f ≐ g ∘ h → h ∘ (f^{A}n) ≐ (g^{B}n) ∘ h.
+#A #B #f #g #h * //
+#p #H @exteq_repl
+/2 width=5 by piter_compose, compose_repl_fwd_dx/
 qed.