Definition conjMixin :=
  ImaginaryMixin (svalP (imaginary_exists closedFieldType))
                 (fun x => esym (normK x)).Canonical numClosedFieldType := NumClosedFieldType type conjMixin.Definition divisor := Implementation.type.Notation algC := type.Local Notation "z ^*" := (conj z) (at level 2, format "z ^*") : ring_scope.Local Notation QtoC := (ratr : rat -> algC).Local Notation pQtoC := (map_poly ratr).Local Notation ZtoQ := (intr : int -> rat).Local Notation ZtoC := (intr : int -> algC).Notation Creal := (@Num.Def.Rreal numDomainType).Variant getCrat_spec : Type := GetCrat_spec CtoQ of cancel QtoC CtoQ.Variant getCrat_spec : Type := GetCrat_spec CtoQ of cancel QtoC CtoQ.Fact getCrat_subproof : getCrat_spec.Definition algC_divisor (x : algC) := x : divisor.Notation algCeq := eqType.Notation algCzmod := zmodType.Notation algCring := ringType.Notation algCuring := unitRingType.Notation algCnum := numDomainType.Notation algCfield := fieldType.Notation algCnumField := numFieldType.Notation algCnumClosedField := numClosedFieldType.Definition floorC x := sval (floorC_subproof x).Definition CdivE := (nCdivE, zCdivE).Notation "x == y %[mod e ]" := (eqCmod e x y) : C_scope.Implicit Types (x y z : algC) (n : nat) (m : int) (b : bool).Local Notation CtoQ := getCrat.Local Notation intrp := (map_poly intr).Local Notation pZtoQ := (map_poly ZtoQ).Local Notation pZtoC := (map_poly ZtoC).(* Conjugation and norm. *)

Definition algC_algebraic x := Algebraics.Implementation.algebraic x.

(* Specifications: *)
Lemma intCK : cancel intr floorC.
Lemma floorC0 : floorC 0 = 0.
Lemma floorC1 : floorC 1 = 1.