(*==========================================================  PATHS AND ORBITS OF ANY PERMUTATION f ON A hmap  WITH NOETHERIAN SET INDUCTION  MODULE Type Sigf, MODULE Mf:  ==========================================================*)
(* ITERATOR FOR A FUNCTION g: *)
Fixpoint Iter(g:dart->dart)(n:nat)(z:dart){struct n}:dart:=
match n with
0%nat => z
| S n0 => g (Iter g n0 z)
end.
(* SIGNATURE FOR BIJECTIONS : *)
Module Type Sigf.
(* f : bijection dans une hmap m, avec domaine de definition (exd m) : dart -> Prop *)
Parameter f : fmap -> dart -> dart.
Parameter f_1 : fmap -> dart -> dart.

(* Specifications: *)
Axiom exd_f:forall (m:fmap)(z:dart),
inv_hmap m -> (exd m z <-> exd m (f m z)).
Axiom bij_f : forall m:fmap,
inv_hmap m -> bij_dart (exd m) (f m).
Axiom exd_f_1:forall (m:fmap)(z:dart),
inv_hmap m -> (exd m z <-> exd m (f_1 m z)).
Axiom bij_f_1 : forall m:fmap,
inv_hmap m -> bij_dart (exd m) (f_1 m).
Axiom f_1_f : forall (m:fmap)(z:dart),
inv_hmap m -> exd m z -> f_1 m (f m z) = z.
Axiom f_f_1 : forall (m:fmap )(z:dart),
inv_hmap m -> exd m z -> f m (f_1 m z) = z.