MathClasses.orders.dec_fields
Require Import
Relation_Definitions Ring
abstract_algebra interfaces.orders theory.rings theory.dec_fields.
Require Export
orders.rings.
Section contents.
Context `{DecField F} `{Apart F} `{!TrivialApart F} `{!FullPseudoSemiRingOrder Fle Flt} `{∀ x y : F, Decision (x = y)}.
Add Ring F : (stdlib_ring_theory F).
Instance pos_dec_recip_compat x : PropHolds (0 < x) → PropHolds (0 < /x).
Proof.
intros E.
apply (strictly_order_reflecting (x *.)).
rewrite dec_recip_inverse by now apply orders.lt_ne_flip.
rewrite mult_0_r. solve_propholds.
Qed.
Instance nonneg_dec_recip_compat x : PropHolds (0 ≤ x) → PropHolds (0 ≤ /x).
Proof.
intros E. red.
destruct (decide (x = 0)) as [E2 | E2].
now rewrite E2, dec_recip_0.
apply lt_le. apply pos_dec_recip_compat.
apply lt_iff_le_ne. split. easy. now apply not_symmetry.
Qed.
Lemma neg_dec_recip_compat x : x < 0 → /x < 0.
Proof.
intros. apply flip_neg_negate.
rewrite dec_recip_negate.
apply pos_dec_recip_compat.
now apply flip_neg_negate.
Qed.
Lemma nonpos_dec_recip_compat x : x ≤ 0 → /x ≤ 0.
Proof.
intros. apply flip_nonpos_negate.
rewrite dec_recip_negate.
apply nonneg_dec_recip_compat.
now apply flip_nonpos_negate.
Qed.
Lemma flip_le_dec_recip x y : 0 < y → y ≤ x → /x ≤ /y.
Proof with trivial.
intros E1 E2.
apply (order_reflecting_pos (.*.) x)...
now apply lt_le_trans with y.
rewrite dec_recip_inverse.
apply (order_reflecting_pos (.*.) y)...
rewrite (commutativity x), associativity, dec_recip_inverse.
now ring_simplify.
now apply lt_ne_flip.
apply lt_ne_flip.
now apply lt_le_trans with y.
Qed.
Lemma flip_le_dec_recip_l x y : 0 < y → /y ≤ x → /x ≤ y.
Proof with trivial.
intros E1 E2.
rewrite <-(dec_recip_involutive y).
apply flip_le_dec_recip...
now apply pos_dec_recip_compat.
Qed.
Lemma flip_le_dec_recip_r x y : 0 < y → y ≤ /x → x ≤ /y.
Proof.
intros E1 E2.
rewrite <-(dec_recip_involutive x).
now apply flip_le_dec_recip.
Qed.
Lemma flip_lt_dec_recip x y : 0 < y → y < x → /x < /y.
Proof.
intros E1 E2.
assert (0 < x) by now transitivity y.
apply (strictly_order_reflecting (x *.)).
rewrite dec_recip_inverse.
apply (strictly_order_reflecting (y *.)).
rewrite (commutativity x), associativity, dec_recip_inverse.
now ring_simplify.
now apply lt_ne_flip.
now apply lt_ne_flip.
Qed.
Lemma flip_lt_dec_recip_l x y : 0 < y → /y < x → /x < y.
Proof.
intros E1 E2.
rewrite <-(dec_recip_involutive y).
apply flip_lt_dec_recip; trivial.
now apply pos_dec_recip_compat.
Qed.
Lemma flip_lt_dec_recip_r x y : 0 < y → y < /x → x < /y.
Proof.
intros E1 E2.
rewrite <-(dec_recip_involutive x).
now apply flip_lt_dec_recip.
Qed.
End contents.
Hint Extern 12 (PropHolds (0 ≤ _)) ⇒ eapply @nonneg_dec_recip_compat : typeclass_instances.
Hint Extern 12 (PropHolds (0 < _)) ⇒ eapply @pos_dec_recip_compat : typeclass_instances.
Relation_Definitions Ring
abstract_algebra interfaces.orders theory.rings theory.dec_fields.
Require Export
orders.rings.
Section contents.
Context `{DecField F} `{Apart F} `{!TrivialApart F} `{!FullPseudoSemiRingOrder Fle Flt} `{∀ x y : F, Decision (x = y)}.
Add Ring F : (stdlib_ring_theory F).
Instance pos_dec_recip_compat x : PropHolds (0 < x) → PropHolds (0 < /x).
Proof.
intros E.
apply (strictly_order_reflecting (x *.)).
rewrite dec_recip_inverse by now apply orders.lt_ne_flip.
rewrite mult_0_r. solve_propholds.
Qed.
Instance nonneg_dec_recip_compat x : PropHolds (0 ≤ x) → PropHolds (0 ≤ /x).
Proof.
intros E. red.
destruct (decide (x = 0)) as [E2 | E2].
now rewrite E2, dec_recip_0.
apply lt_le. apply pos_dec_recip_compat.
apply lt_iff_le_ne. split. easy. now apply not_symmetry.
Qed.
Lemma neg_dec_recip_compat x : x < 0 → /x < 0.
Proof.
intros. apply flip_neg_negate.
rewrite dec_recip_negate.
apply pos_dec_recip_compat.
now apply flip_neg_negate.
Qed.
Lemma nonpos_dec_recip_compat x : x ≤ 0 → /x ≤ 0.
Proof.
intros. apply flip_nonpos_negate.
rewrite dec_recip_negate.
apply nonneg_dec_recip_compat.
now apply flip_nonpos_negate.
Qed.
Lemma flip_le_dec_recip x y : 0 < y → y ≤ x → /x ≤ /y.
Proof with trivial.
intros E1 E2.
apply (order_reflecting_pos (.*.) x)...
now apply lt_le_trans with y.
rewrite dec_recip_inverse.
apply (order_reflecting_pos (.*.) y)...
rewrite (commutativity x), associativity, dec_recip_inverse.
now ring_simplify.
now apply lt_ne_flip.
apply lt_ne_flip.
now apply lt_le_trans with y.
Qed.
Lemma flip_le_dec_recip_l x y : 0 < y → /y ≤ x → /x ≤ y.
Proof with trivial.
intros E1 E2.
rewrite <-(dec_recip_involutive y).
apply flip_le_dec_recip...
now apply pos_dec_recip_compat.
Qed.
Lemma flip_le_dec_recip_r x y : 0 < y → y ≤ /x → x ≤ /y.
Proof.
intros E1 E2.
rewrite <-(dec_recip_involutive x).
now apply flip_le_dec_recip.
Qed.
Lemma flip_lt_dec_recip x y : 0 < y → y < x → /x < /y.
Proof.
intros E1 E2.
assert (0 < x) by now transitivity y.
apply (strictly_order_reflecting (x *.)).
rewrite dec_recip_inverse.
apply (strictly_order_reflecting (y *.)).
rewrite (commutativity x), associativity, dec_recip_inverse.
now ring_simplify.
now apply lt_ne_flip.
now apply lt_ne_flip.
Qed.
Lemma flip_lt_dec_recip_l x y : 0 < y → /y < x → /x < y.
Proof.
intros E1 E2.
rewrite <-(dec_recip_involutive y).
apply flip_lt_dec_recip; trivial.
now apply pos_dec_recip_compat.
Qed.
Lemma flip_lt_dec_recip_r x y : 0 < y → y < /x → x < /y.
Proof.
intros E1 E2.
rewrite <-(dec_recip_involutive x).
now apply flip_lt_dec_recip.
Qed.
End contents.
Hint Extern 12 (PropHolds (0 ≤ _)) ⇒ eapply @nonneg_dec_recip_compat : typeclass_instances.
Hint Extern 12 (PropHolds (0 < _)) ⇒ eapply @pos_dec_recip_compat : typeclass_instances.