Definition iteres_ult_const_def_0 (A : Set) (p : prechain A) : Prop :=
  forall (f : Map A -> Map A) (x : Map A) (n : nat),
  p = iteres A f x n ->
  non_dist_chain A p ->
  exists q : nat, S q <= n /\ power (Map A) f x q = power (Map A) f x (S q).

(* Specifications: *)
Lemma iteres_ult_const_0 : forall (A : Set) (x : Map A), iteres_ult_const_def_0 A (concat A (single A x) x).
Lemma iteres_ult_const_1 : forall (A : Set) (x : Map A) (z : prechain A), iteres_ult_const_def_0 A (concat A (concat A z x) x).
Lemma iteres_ult_const_2 : forall (A : Set) (x y : Map A) (z : prechain A), non_dist_chain A (concat A z x) -> iteres_ult_const_def_0 A (concat A z x) -> iteres_ult_const_def_0 A (concat A (concat A z x) y).
Lemma iteres_ult_const_3 : forall (A : Set) (p : prechain A), non_dist_chain A p -> iteres_ult_const_def_0 A p.
Lemma iteres_ult_const_4 : forall (A : Set) (f : Map A -> Map A) (x : Map A) (n : nat), non_dist_chain A (iteres A f x n) -> exists p : nat, S p <= n /\ power (Map A) f x p = power (Map A) f x (S p).
Lemma iteres_last : forall (A : Set) (f : Map A -> Map A) (x : Map A) (n : nat) (y : prechain A) (z : Map A), iteres A f x n = concat A y z -> z = f (prechain_last A y).
Lemma iteres_dom_ok : forall (A : Set) (T : mEnsemble A) (f : Map A -> Map A) (x : Map A) (n : nat), T x -> def_ok_app A T f -> prechain_dom_ok A T (iteres A f x n).
Lemma iteres_incr : forall (A : Set) (r : mRelation A) (f : Map A -> Map A) (x : Map A) (n : nat), r x (f x) -> increasing_app A r f -> prechain_incr A r (iteres A f x n).
Lemma iteres_increasing_chain : forall (A : Set) (T : mEnsemble A) (r : mRelation A) (f : Map A -> Map A) (x : Map A) (n : nat), T x -> def_ok_app A T f -> increasing_app A r f -> r x (f x) -> chain A T r (iteres A f x n).
Lemma iteres_length : forall (A : Set) (f : Map A -> Map A) (x : Map A) (n : nat), chain_length A (iteres A f x n) = S n.
Lemma iteres_non_sas_chain : forall (A : Set) (T : mEnsemble A) (r : mRelation A) (f : Map A -> Map A) (x : Map A) (n m : nat), T x -> def_ok_app A T f -> increasing_app A r f -> r x (f x) -> bounded_sas_chain A T r m -> m <= n -> chain A T r (iteres A f x n) /\ ~ dist_chain A (iteres A f x n).
Lemma iteres_non_sas_chain_fp_0 : forall (A : Set) (T : mEnsemble A) (r : mRelation A) (f : Map A -> Map A) (x : Map A) (n m : nat), T x -> def_ok_app A T f -> increasing_app A r f -> r x (f x) -> bounded_sas_chain A T r m -> m <= n -> exists p : nat, S p <= n /\ power (Map A) f x p = power (Map A) f x (S p).
Lemma iteres_non_sas_chain_fp_1 : forall (A : Set) (T : mEnsemble A) (f : Map A -> Map A) (x : Map A) (k p : nat), def_ok_app A T f -> fix_point A T f (power (Map A) f x p) -> fix_point A T f (power (Map A) f x (p + k)).
Lemma iteres_non_sas_chain_fp_2 : forall (A : Set) (T : mEnsemble A) (r : mRelation A) (f : Map A -> Map A) (x : Map A) (n m : nat), T x -> def_ok_app A T f -> increasing_app A r f -> r x (f x) -> bounded_sas_chain A T r m -> m <= n -> fix_point A T f (power (Map A) f x n).
Lemma iteres_inf_fps : forall (A : Set) (T : mEnsemble A) (r : mRelation A) (f : Map A -> Map A) (e x : Map A) (n : nat), mini A r T e -> fix_point A T f x -> increasing_app A r f -> r (power (Map A) f e n) x.
Lemma iteres_lower_fix_point : forall (A : Set) (T : mEnsemble A) (r : mRelation A) (f : Map A -> Map A) (e : Map A) (n m : nat), mini A r T e -> def_ok_app A T f -> increasing_app A r f -> bounded_sas_chain A T r m -> m <= n -> lower_fix_point A T r f (power (Map A) f e n).