unfold rat_inf_limit, inf_limit in *.
intuition.
edestruct (H1 (ratHalf epsilon)).
eapply ratHalf_ne_0.
intuition.
edestruct (H2 (ratHalf epsilon)).
eapply ratHalf_ne_0.
intuition.
exists (Max.max x x0).
intuition.
unfold ratAdd_rel in *.
destruct (H n').
destruct (H0 n').
rewrite H7; eauto.
eapply leRat_trans.
eapply rat_distance_of_sum.
rewrite H4.
rewrite H5.
rewrite ratHalf_add.
intuition.
eapply Max.max_lub_r.
eauto.
trivial.
eapply Max.max_lub_l.
eauto.
trivial.
Qed.

(* Specifications: *)
Lemma rat_inf_limit_difference : forall (f1 f2 : nat -> Rat -> Prop) c1 c2,
left_total f1 ->
left_total f2 ->
rat_inf_limit f1 c1 ->
rat_inf_limit f2 c2 ->
rat_inf_limit (fun n => (ratSubtract_rel (f1 n) (f2 n))) (ratSubtract c1 c2).