Definition Iter_rem_aux(m:fmap)(z:dart):
  set -> set
 := Fix Rs_wf (fun _:set => set) (Iter_rem_F m z).(* UPPER_BOUND OF THE f ITERATION NUMBER 
STARTING FROM A SET: *)

Definition Iter_upb_aux(m:fmap)(z:dart)(s:set):nat:=
  ((ndN m) - (card (Iter_rem_aux m z s)))%nat.(* REMAINING DARTS IN THE f ITERATION 
STARTING FROM THE FMAP DART SET: *)

Definition Iter_rem(m:fmap)(z:dart):set:=
  Iter_rem_aux m z (fmap_to_set m).(* UPPER_BOUND OF THE f ITERATION NUMBER 
STARTING FROM THE FMAP DART SET: *)

Definition Iter_upb(m:fmap)(z:dart):nat:=
  ((ndN m) - (card (Iter_rem m z)))%nat.(* DART SETS CONTAINING THE f-ORBIT: *)

Definition Iter_orb_aux(m:fmap)(z:dart)(s:set):set:=
  set_minus (fmap_to_set m) (Iter_rem_aux m z s).Definition Iter_orb(m:fmap)(z:dart):set:=
  set_minus (fmap_to_set m) (Iter_rem m z).

(* Specifications: *)
Theorem Iter_rem_aux_equation : forall(m:fmap)(z:dart)(sx:set), Iter_rem_aux m z sx = let n := ((ndN m) - (card sx))%nat in let zn := Iter (f m) n z in if exds_dec sx zn then Iter_rem_aux m z (Ds sx zn) else sx.