proposition: Lemma Q_can_den_pos : forall q : Q_as_CRing, (0 < Q_can_den q)%Z.
proof: Proof. intro q; destruct q as [qn qd]; unfold Q_can_den. simpl. set (Zdiv_le_lower_bound qd (Zgcd qn qd) 1). assert (0 <= qd)%Z by discriminate. assert (0 < Zgcd qn qd)%Z. apply Zgcd_pos; right; discriminate. assert (Zgcd qn qd <= qd)%Z. apply Zgcd_le_rht; apply Zgt_pos_0. apply Z.div_str_pos. split; assumption. Qed.
imports: CRings Qring Zring Zlcm