simpl; rewrite Q_to_R_Zero; ring.
(* Qpos *)
unfold Q_to_R, numerator, denominator, decode_Q, Qopp, fst, snd.
destruct (interp_non_zero p) as [p0 [q0 H]].
rewrite H.
repeat rewrite Ropp_Ropp_IZR; repeat rewrite <- INR_IZR_INZ.
field; auto.
(* Qneg *)
unfold Q_to_R, numerator, denominator, decode_Q, Qopp, fst, snd.
destruct (interp_non_zero p) as [p0 [q0 H]].
rewrite H.
repeat rewrite Ropp_Ropp_IZR; repeat rewrite <- INR_IZR_INZ.
field; auto.
Qed.

Lemma Z_to_Q_to_R_IZR: forall z, Q_to_R (Z_to_Q z) = IZR z.
Ltac realify_Q_assumptions :=
repeat
match goal with
| [ id : (Qlt ?X1 ?X2) |- _ ] => generalize (Q_to_Rlt _ _ id); clear id; try unfold fst, snd
| [ id : (Qle ?Xe ?X2) |- _ ] => generalize (Q_to_Rle _ _ id); clear id; try unfold fst, snd
| [ id : (@eq Q ?Xe ?X2) |- _ ] => generalize (Q_to_Req _ _ id); clear id; try unfold fst, snd
| [ id : ~(@eq Q ?Xe ?X2) |- _ ] => generalize (Q_to_R_not_eq _ _ id); clear id; try unfold fst, snd
end.