diff --git a/theories/numbers.v b/theories/numbers.v index 9ce8953565a45b97b2cb9d98a81083c771d27e81..46cc417973a2ac0d5c35e2bdddfab749f0228ebb 100644 --- a/theories/numbers.v +++ b/theories/numbers.v @@ -501,6 +501,8 @@ Next Obligation. by intros x y; apply Qcplus_pos_pos. Qed. Definition Qp_minus (x y : Qp) : option Qp := let z := (x - y)%Qc in match decide (0 < z)%Qc with left Hz => Some (mk_Qp z Hz) | _ => None end. +Program Definition Qp_mult (x y : Qp) : Qp := mk_Qp (x * y) _. +Next Obligation. intros x y. apply Qcmult_pos_pos; apply Qp_prf. Qed. Program Definition Qp_div (x : Qp) (y : positive) : Qp := mk_Qp (x / ('y)%Z) _. Next Obligation. intros x y. assert (0 < ('y)%Z)%Qc. @@ -512,6 +514,7 @@ Qed. Notation "1" := Qp_one : Qp_scope. Infix "+" := Qp_plus : Qp_scope. Infix "-" := Qp_minus : Qp_scope. +Infix "*" := Qp_mult : Qp_scope. Infix "/" := Qp_div : Qp_scope. Instance Qp_inhabited : Inhabited Qp := populate 1%Qp. @@ -535,6 +538,19 @@ Proof. destruct (decide _) as [|[]]; auto. by f_equal; apply Qp_eq. Qed. +Instance Qp_mult_assoc : Assoc (=) Qp_mult. +Proof. intros x y z; apply Qp_eq, Qcmult_assoc. Qed. +Instance Qp_mult_comm : Comm (=) Qp_mult. +Proof. intros x y; apply Qp_eq, Qcmult_comm. Qed. +Lemma Qp_mult_plus_distr_r x y z: (x * (y + z) = x * y + x * z)%Qp. +Proof. apply Qp_eq, Qcmult_plus_distr_r. Qed. +Lemma Qp_mult_plus_distr_l x y z: ((x + y) * z = x * z + y * z)%Qp. +Proof. apply Qp_eq, Qcmult_plus_distr_l. Qed. +Lemma Qp_mult_1_l x: (1 * x)%Qp = x. +Proof. apply Qp_eq, Qcmult_1_l. Qed. +Lemma Qp_mult_1_r x: (x * 1)%Qp = x. +Proof. apply Qp_eq, Qcmult_1_r. Qed. + Lemma Qp_div_1 x : (x / 1 = x)%Qp. Proof. apply Qp_eq; simpl.