(* WE HAVE: z^i = z^(i mod p) FOR ALL i *)
(* RECALL: modulo : forall n : nat, n > 0 -> forall m : nat, {r : nat | exists q : nat, m = q * n + r /\ n > r} *)

(* Specifications: *)
Lemma mod_p:forall(m:fmap)(z:dart)(i:nat),
inv_hmap m -> exd m z ->
let p := Iter_upb m z in
{j :nat | Iter (f m) i z  = Iter (f m) j z /\ (j < p)%nat}.