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).