Definition iterate (a: A) : option B :=
  proj1_sig (constructive_definite_description (converges_to a) (converges_to_exists_uniquely a)).

(* Specifications: *)
Lemma converges_to_iterate: forall a b, converges_to a b -> iterate a = b.
Lemma iterate_converges_to: forall a, converges_to a (iterate a).
Lemma iter_prop: forall n a b, P a -> iter n a = Some b -> Q b.
Lemma iterate_prop: forall a b, iterate a = Some b -> P a -> Q b.
Lemma converges_to_iterate: forall a b, converges_to a b -> iterate a = b.
Lemma iterate_converges_to: forall a, converges_to a (iterate a).
Lemma iter_prop: forall n a b, P a -> iter n a = Some b -> Q b.
Lemma iterate_prop: forall a b, iterate a = Some b -> P a -> Q b.