CoRN.model.ordfields.CRordfield
Require Export CRFieldOps.
Require Export CRfield.
Require Export COrdFields.
Require Import CRcorrect.
Require Import CornTac.
Open Local Scope uc_scope.
Lemma CRlt_strext : Crel_strext CRasCField CRltT.
Proof.
intros x1 x2 y1 y2 H.
destruct (Ccsr_strext _ _ _ (CRasCauchy_IR x2) _ (CRasCauchy_IR y2) (CR_lt_as_Cauchy_IR_lt_1 _ _ H)) as[H0|H0].
left.
apply CR_lt_as_Cauchy_IR_lt_2.
assumption.
right.
destruct H0;[left|right]; apply CR_ap_as_Cauchy_IR_ap_2; assumption.
Qed.
Definition CRltasCCsetoidRelation : CCSetoid_relation CRasCField :=
Build_CCSetoid_relation _ _ CRlt_strext.
Lemma CRisCOrdField : is_COrdField CRasCField
CRltasCCsetoidRelation CRle
(default_greater _ CRltasCCsetoidRelation) (default_grEq CRasCField CRle).
Proof.
split.
split.
intros x y z H0 H1.
apply CR_lt_as_Cauchy_IR_lt_2.
apply less_transitive_unfolded with (CRasCauchy_IR y); apply CR_lt_as_Cauchy_IR_lt_1; assumption.
intros x y H0 H1.
apply (less_antisymmetric_unfolded _ (CRasCauchy_IR x) (CRasCauchy_IR y));
apply CR_lt_as_Cauchy_IR_lt_1; assumption.
intros x y H z.
change (x+z < y + z)%CR.
apply CR_lt_as_Cauchy_IR_lt_2.
stepl ((CRasCauchy_IR x)[+](CRasCauchy_IR z)); [| now apply CR_plus_as_Cauchy_IR_plus].
stepr ((CRasCauchy_IR y)[+](CRasCauchy_IR z)); [| now apply CR_plus_as_Cauchy_IR_plus].
apply plus_resp_less_rht.
apply CR_lt_as_Cauchy_IR_lt_1.
assumption.
intros x y Hx Hy.
change (0 < x×y)%CR.
apply CR_lt_as_Cauchy_IR_lt_2.
stepr ((CRasCauchy_IR x)[*](CRasCauchy_IR y)); [| now apply CR_mult_as_Cauchy_IR_mult].
apply: less_wdl;[|apply (CR_inject_Q_as_Cauchy_IR_inject_Q 0)].
apply mult_resp_pos;(
apply: less_wdl;[|apply eq_symmetric;apply (CR_inject_Q_as_Cauchy_IR_inject_Q 0)];
apply CR_lt_as_Cauchy_IR_lt_1;assumption).
intros x y.
split.
intros H.
destruct (ap_imp_less _ _ _ (CR_ap_as_Cauchy_IR_ap_1 _ _ H));[left|right];
apply CR_lt_as_Cauchy_IR_lt_2; assumption.
intros [H|H]; apply CR_ap_as_Cauchy_IR_ap_2; [apply less_imp_ap|apply Greater_imp_ap];
apply CR_lt_as_Cauchy_IR_lt_1;assumption.
intros x y.
rewrite <- CR_le_as_Cauchy_IR_le.
split.
intros H0 H1.
apply H0.
apply CR_lt_as_Cauchy_IR_lt_1.
assumption.
intros H0 H1.
apply H0.
apply CR_lt_as_Cauchy_IR_lt_2.
assumption.
intros x y.
split; intros; assumption.
reflexivity.
Qed.
Definition CRasCOrdField : COrdField :=
Build_COrdField _ _ _ _ _ CRisCOrdField.
Canonical Structure CRasCOrdField.