Skip to content
Snippets Groups Projects
Commit 9b68ea94 authored by Robbert Krebbers's avatar Robbert Krebbers
Browse files

Rename `Qp_eq` into `Qp_to_Qc_inj_iff`.

This follows the standard naming for Coq numbers, and avoids one using
the old lemma to break abstraction accidentally.
parent 25f516f0
Branches
Tags
No related merge requests found
...@@ -273,7 +273,7 @@ Program Instance Qp_countable : Countable Qp := ...@@ -273,7 +273,7 @@ Program Instance Qp_countable : Countable Qp :=
(λ p : Qc, guard (0 < p)%Qc as Hp; Some (mk_Qp p Hp)) _. (λ p : Qc, guard (0 < p)%Qc as Hp; Some (mk_Qp p Hp)) _.
Next Obligation. Next Obligation.
intros [p Hp]. unfold mguard, option_guard; simpl. intros [p Hp]. unfold mguard, option_guard; simpl.
case_match; [|done]. f_equal. by apply Qp_eq. case_match; [|done]. f_equal. by apply Qp_to_Qc_inj_iff.
Qed. Qed.
Program Instance fin_countable n : Countable (fin n) := Program Instance fin_countable n : Countable (fin n) :=
......
...@@ -733,62 +733,59 @@ Infix "`min`" := Qp_min : Qp_scope. ...@@ -733,62 +733,59 @@ Infix "`min`" := Qp_min : Qp_scope.
Hint Extern 0 (_ _)%Qp => reflexivity : core. Hint Extern 0 (_ _)%Qp => reflexivity : core.
Lemma Qp_eq p q : p = q Qp_to_Qc p = Qp_to_Qc q. Lemma Qp_to_Qc_inj_iff p q : Qp_to_Qc p = Qp_to_Qc q p = q.
Proof. Proof.
split; [by intros ->|]. split; [|by intros ->].
destruct p, q; intros; simplify_eq/=; f_equal; apply (proof_irrel _). destruct p, q; intros; simplify_eq/=; f_equal; apply (proof_irrel _).
Qed. Qed.
Instance Qp_eq_dec : EqDecision Qp. Instance Qp_eq_dec : EqDecision Qp.
Proof. Proof.
refine (λ p q, cast_if (decide (Qp_to_Qc p = Qp_to_Qc q))); by rewrite Qp_eq. refine (λ p q, cast_if (decide (Qp_to_Qc p = Qp_to_Qc q)));
by rewrite <-Qp_to_Qc_inj_iff.
Defined. Defined.
Instance Qp_inhabited : Inhabited Qp := populate 1%Qp. Instance Qp_inhabited : Inhabited Qp := populate 1%Qp.
Instance Qp_plus_assoc : Assoc (=) Qp_plus. Instance Qp_plus_assoc : Assoc (=) Qp_plus.
Proof. intros [p ?] [q ?] [r ?]; apply Qp_eq, Qcplus_assoc. Qed. Proof. intros [p ?] [q ?] [r ?]; apply Qp_to_Qc_inj_iff, Qcplus_assoc. Qed.
Instance Qp_plus_comm : Comm (=) Qp_plus. Instance Qp_plus_comm : Comm (=) Qp_plus.
Proof. intros [p ?] [q ?]; apply Qp_eq, Qcplus_comm. Qed. Proof. intros [p ?] [q ?]; apply Qp_to_Qc_inj_iff, Qcplus_comm. Qed.
Instance Qp_plus_inj_r p : Inj (=) (=) (Qp_plus p). Instance Qp_plus_inj_r p : Inj (=) (=) (Qp_plus p).
Proof. Proof.
destruct p as [p ?]. destruct p as [p ?].
intros [q1 ?] [q2 ?]. rewrite !Qp_eq; simpl. apply (inj (Qcplus p)). intros [q1 ?] [q2 ?]. rewrite <-!Qp_to_Qc_inj_iff; simpl. apply (inj (Qcplus p)).
Qed. Qed.
Instance Qp_plus_inj_l p : Inj (=) (=) (λ q, q + p)%Qp. Instance Qp_plus_inj_l p : Inj (=) (=) (λ q, q + p)%Qp.
Proof. Proof.
destruct p as [p ?]. destruct p as [p ?].
intros [q1 ?] [q2 ?]. rewrite !Qp_eq; simpl. apply (inj (λ q, q + p)%Qc). intros [q1 ?] [q2 ?]. rewrite <-!Qp_to_Qc_inj_iff; simpl. apply (inj (λ q, q + p)%Qc).
Qed. Qed.
Instance Qp_mult_assoc : Assoc (=) Qp_mult. Instance Qp_mult_assoc : Assoc (=) Qp_mult.
Proof. intros [p ?] [q ?] [r ?]. apply Qp_eq, Qcmult_assoc. Qed. Proof. intros [p ?] [q ?] [r ?]. apply Qp_to_Qc_inj_iff, Qcmult_assoc. Qed.
Instance Qp_mult_comm : Comm (=) Qp_mult. Instance Qp_mult_comm : Comm (=) Qp_mult.
Proof. intros [p ?] [q ?]; apply Qp_eq, Qcmult_comm. Qed. Proof. intros [p ?] [q ?]; apply Qp_to_Qc_inj_iff, Qcmult_comm. Qed.
Lemma Qp_mult_plus_distr_r p q r : p * (q + r) = p * q + p * r. Lemma Qp_mult_plus_distr_r p q r : p * (q + r) = p * q + p * r.
Proof. Proof. destruct p, q, r; by apply Qp_to_Qc_inj_iff, Qcmult_plus_distr_r. Qed.
destruct p as [p ?], q as [q ?], r as [r ?]. apply Qp_eq, Qcmult_plus_distr_r.
Qed.
Lemma Qp_mult_plus_distr_l p q r : (p + q) * r = p * r + q * r. Lemma Qp_mult_plus_distr_l p q r : (p + q) * r = p * r + q * r.
Proof. Proof. destruct p, q, r; by apply Qp_to_Qc_inj_iff, Qcmult_plus_distr_l. Qed.
destruct p as [p ?], q as [q ?], r as [r ?]. apply Qp_eq, Qcmult_plus_distr_l.
Qed.
Lemma Qp_mult_1_l p : 1 * p = p. Lemma Qp_mult_1_l p : 1 * p = p.
Proof. destruct p; apply Qp_eq, Qcmult_1_l. Qed. Proof. destruct p; apply Qp_to_Qc_inj_iff, Qcmult_1_l. Qed.
Lemma Qp_mult_1_r p : p * 1 = p. Lemma Qp_mult_1_r p : p * 1 = p.
Proof. destruct p; apply Qp_eq, Qcmult_1_r. Qed. Proof. destruct p; apply Qp_to_Qc_inj_iff, Qcmult_1_r. Qed.
Lemma Qp_plus_diag p : p + p = (2 * p). Lemma Qp_plus_diag p : p + p = (2 * p).
Proof. by rewrite Qp_mult_plus_distr_l, !Qp_mult_1_l. Qed. Proof. by rewrite Qp_mult_plus_distr_l, !Qp_mult_1_l. Qed.
Lemma Qp_div_1 p : p / 1 = p. Lemma Qp_div_1 p : p / 1 = p.
Proof. Proof.
destruct p as [p ?]. apply Qp_eq; simpl. destruct p as [p ?]. apply Qp_to_Qc_inj_iff; simpl.
rewrite <-(Qcmult_div_r p 1) at 2 by done. by rewrite Qcmult_1_l. rewrite <-(Qcmult_div_r p 1) at 2 by done. by rewrite Qcmult_1_l.
Qed. Qed.
Lemma Qp_div_S p y : p / (2 * y) + p / (2 * y) = p / y. Lemma Qp_div_S p y : p / (2 * y) + p / (2 * y) = p / y.
Proof. Proof.
destruct p as [p ?]. apply Qp_eq; simpl. unfold Qcdiv. destruct p as [p ?]. apply Qp_to_Qc_inj_iff; simpl. unfold Qcdiv.
rewrite <-Qcmult_plus_distr_l, Pos2Z.inj_mul, Z2Qc_inj_mul, Z2Qc_inj_2. rewrite <-Qcmult_plus_distr_l, Pos2Z.inj_mul, Z2Qc_inj_mul, Z2Qc_inj_2.
rewrite Qcplus_diag. by field_simplify. rewrite Qcplus_diag. by field_simplify.
Qed. Qed.
...@@ -808,7 +805,7 @@ Proof. ...@@ -808,7 +805,7 @@ Proof.
unfold Qp_le. split; [split|]. unfold Qp_le. split; [split|].
- by intros p. - by intros p.
- intros p q r ??. by etrans. - intros p q r ??. by etrans.
- intros p q ??. by apply Qp_eq, Qcle_antisym. - intros p q ??. by apply Qp_to_Qc_inj_iff, Qcle_antisym.
Qed. Qed.
Instance Qp_lt_strict : StrictOrder (<)%Qp. Instance Qp_lt_strict : StrictOrder (<)%Qp.
Proof. Proof.
...@@ -822,7 +819,7 @@ Proof. intros p q. apply (total Qcle). Qed. ...@@ -822,7 +819,7 @@ Proof. intros p q. apply (total Qcle). Qed.
Lemma Qp_lt_le_weak p q : p < q p q. Lemma Qp_lt_le_weak p q : p < q p q.
Proof. apply Qclt_le_weak. Qed. Proof. apply Qclt_le_weak. Qed.
Lemma Qp_le_lt_or_eq p q : p q p < q p = q. Lemma Qp_le_lt_or_eq p q : p q p < q p = q.
Proof. intros [? | ->%Qp_eq]%Qcle_lt_or_eq; auto. Qed. Proof. intros [? | ->%Qp_to_Qc_inj_iff]%Qcle_lt_or_eq; auto. Qed.
Lemma Qp_lt_le_dec p q : {p < q} + {q p}. Lemma Qp_lt_le_dec p q : {p < q} + {q p}.
Proof. apply Qclt_le_dec. Defined. Proof. apply Qclt_le_dec. Defined.
Lemma Qp_le_lt_trans p q r : p q q < r p < r. Lemma Qp_le_lt_trans p q r : p q q < r p < r.
...@@ -895,22 +892,22 @@ Proof. rewrite (comm_L Qp_plus). apply Qp_plus_weak_2_r. Qed. ...@@ -895,22 +892,22 @@ Proof. rewrite (comm_L Qp_plus). apply Qp_plus_weak_2_r. Qed.
Lemma Qc_minus_Some p q r : p - q = Some r p = q + r. Lemma Qc_minus_Some p q r : p - q = Some r p = q + r.
Proof. Proof.
destruct p as [p Hp], q as [q Hq], r as [r Hr]. destruct p as [p Hp], q as [q Hq], r as [r Hr].
unfold Qp_minus, Qp_plus; simpl; rewrite Qp_eq; simpl. split. unfold Qp_minus, Qp_plus; simpl; rewrite <-Qp_to_Qc_inj_iff; simpl. split.
- intros; simplify_option_eq. unfold Qcminus. - intros; simplify_option_eq. unfold Qcminus.
by rewrite (Qcplus_comm p), Qcplus_assoc, Qcplus_opp_r, Qcplus_0_l. by rewrite (Qcplus_comm p), Qcplus_assoc, Qcplus_opp_r, Qcplus_0_l.
- intros ->. unfold Qcminus. - intros ->. unfold Qcminus.
rewrite <-Qcplus_assoc, (Qcplus_comm r), Qcplus_assoc. rewrite <-Qcplus_assoc, (Qcplus_comm r), Qcplus_assoc.
rewrite Qcplus_opp_r, Qcplus_0_l. simplify_option_eq; [|done]. rewrite Qcplus_opp_r, Qcplus_0_l. simplify_option_eq; [|done].
f_equal. by apply Qp_eq. f_equal. by apply Qp_to_Qc_inj_iff.
Qed. Qed.
Lemma Qp_lt_sum p q : p < q r, q = p + r. Lemma Qp_lt_sum p q : p < q r, q = p + r.
Proof. Proof.
destruct p as [p Hp], q as [q Hq]. unfold Qp_lt; simpl. destruct p as [p Hp], q as [q Hq]. unfold Qp_lt; simpl.
split. split.
- intros Hlt%Qclt_minus_iff. exists (mk_Qp (q - p) Hlt). - intros Hlt%Qclt_minus_iff. exists (mk_Qp (q - p) Hlt).
apply Qp_eq; simpl. unfold Qcminus. apply Qp_to_Qc_inj_iff; simpl. unfold Qcminus.
by rewrite (Qcplus_comm q), Qcplus_assoc, Qcplus_opp_r, Qcplus_0_l. by rewrite (Qcplus_comm q), Qcplus_assoc, Qcplus_opp_r, Qcplus_0_l.
- intros [[r ?] ?%Qp_eq]; simplify_eq/=. - intros [[r ?] ?%Qp_to_Qc_inj_iff]; simplify_eq/=.
rewrite <-(Qcplus_0_r p) at 1. by apply Qcplus_lt_mono_l. rewrite <-(Qcplus_0_r p) at 1. by apply Qcplus_lt_mono_l.
Qed. Qed.
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment