CoRN.model.groups.CRgroup
Require Export CRGroupOps.
Require Export CRmonoid.
Require Import CRcorrect.
Require Import CornTac.
Example of a group: ⟨CR,+⟩
Open Local Scope uc_scope.
Lemma CRopp_strext : un_op_strext CRasCSetoid CRopp.
Proof.
intros x y H.
change (CRapartT x y)%CR.
apply CR_ap_as_Cauchy_IR_ap_2.
apply: un_op_strext_unfolded.
stepl (CRasCauchy_IR (-x)%CR); [| now apply eq_symmetric; apply CR_opp_as_Cauchy_IR_opp].
stepr (CRasCauchy_IR (-y)%CR); [| now apply eq_symmetric; apply CR_opp_as_Cauchy_IR_opp].
apply CR_ap_as_Cauchy_IR_ap_1.
apply H.
Qed.
Definition CRoppasUnOp : CSetoid_un_op CRasCSetoid :=
Build_CSetoid_fun _ _ _ CRopp_strext.
Lemma CRisCGroup : is_CGroup CRasCMonoid CRoppasUnOp.
Proof.
split.
change (x-x==0)%CR.
rewrite <- CR_eq_as_Cauchy_IR_eq.
stepl ((CRasCauchy_IR x)[+](CRasCauchy_IR (- x)%CR)); [| now apply CR_plus_as_Cauchy_IR_plus].
stepl ((CRasCauchy_IR x)[+][--](CRasCauchy_IR x)); [| now
apply plus_resp_eq; apply CR_opp_as_Cauchy_IR_opp].
apply: eq_transitive.
apply cg_rht_inv_unfolded.
apply: CR_inject_Q_as_Cauchy_IR_inject_Q.
change (-x + x==0)%CR.
rewrite <- CR_eq_as_Cauchy_IR_eq.
stepl ((CRasCauchy_IR (-x)%CR)[+](CRasCauchy_IR x)); [| now apply CR_plus_as_Cauchy_IR_plus].
stepl ([--](CRasCauchy_IR x)[+](CRasCauchy_IR x)); [| now
apply bin_op_is_wd_un_op_lft; apply CR_opp_as_Cauchy_IR_opp].
apply: eq_transitive.
apply cg_lft_inv_unfolded.
apply: CR_inject_Q_as_Cauchy_IR_inject_Q.
Qed.
Definition CRasCGroup : CGroup :=
Build_CGroup _ _ CRisCGroup.
Canonical Structure CRasCGroup.