intuition.
unfold rat_inf_limit, inf_limit in *.
intuition.
edestruct (H (1 / 2 * (ratSubtract 1 a))); eauto.
intuition.
apply ratMult_0 in H3.
intuition.
eapply H0.
eapply ratSubtract_0_inv.
trivial.
edestruct (@expRat_le_exp_exists (a + (1 / 2) * (ratSubtract 1 a)) epsilon).
eapply half_distance_1_le; trivial.
trivial.
exists (Max.max x x0).
intuition.
unfold expRat_rel in *.
destruct (H1 n').
rewrite H6; eauto.
apply ratDistance_0_r_le.
eapply leRat_trans.
eapply expRat_leRat_compat.
eapply ratDistance_le_sum.
eapply H3.
eapply Max.max_lub_l.
eauto.
trivial.
eapply expRat_le'.
eauto.
eapply half_distance_1_le; trivial.
eapply Max.max_lub_r.
eauto.
Qed.

(* Specifications: *)
Lemma power_series_limit_2 : forall (f : nat -> Rat -> Prop) a,
rat_inf_limit f a ->
(forall n v, f n v -> ~ 1 <= v) ->
~ 1 <= a ->
(forall n, exists v, f n v) ->
(forall n v1 v2, f n v1 -> f n v2 -> v1 == v2) ->
rat_inf_limit
(fun n => sumList_rel
(fun i => expRat_rel (f n) i)
(getNats O n))
(ratInverse (ratSubtract 1 a)).