(** ** Constants and usual functions *)
(** 0 and 1 for complex are defined as [RtoC 0] and [RtoC 1] *)
(** *** Arithmetic operations *)
Definition Cplus (x y : C) : C := (fst x + fst y, snd x + snd y).
Definition Copp (x : C) : C := (-fst x, -snd x).
Definition Cminus (x y : C) : C := Cplus x (Copp y).
Definition Cmult (x y : C) : C := (fst x * fst y - snd x * snd y, fst x * snd y + snd x * fst y).
Definition Cinv (x : C) : C := (fst x / (fst x ^ 2 + snd x ^ 2), - snd x / (fst x ^ 2 + snd x ^ 2)).
Definition Cdiv (x y : C) : C := Cmult x (Cinv y).
Delimit Scope C_scope with C.
Local Open Scope C_scope.
Infix "+" := Cplus : C_scope.
Notation "- x" := (Copp x) : C_scope.
Infix "-" := Cminus : C_scope.
Infix "*" := Cmult : C_scope.
Notation "/ x" := (Cinv x) : C_scope.
Infix "/" := Cdiv : C_scope.
(** *** Other usual functions *)
Definition Re (z : C) : R := fst z.
Definition Im (z : C) : R := snd z.
Definition Cmod (x : C) : R := sqrt (fst x ^ 2 + snd x ^ 2).
Definition Cconj (x : C) : C := (fst x, (- snd x)%R).

(* Specifications: *)
Lemma Cmod_0 : Cmod 0 = 0.
Lemma Cmod_1 : Cmod 1 = 1.
Lemma Cmod_opp : forall x, Cmod (-x) = Cmod x.
Lemma Cmod_triangle : forall x y, Cmod (x + y) <= Cmod x + Cmod y.
Lemma Cmod_mult : forall x y, Cmod (x * y) = (Cmod x * Cmod y)%R.
Lemma Rmax_Cmod : forall x,
Rmax (Rabs (fst x)) (Rabs (snd x)) <= Cmod x.
Lemma Cmod_2Rmax : forall x,
Cmod x <= sqrt 2 * Rmax (Rabs (fst x)) (Rabs (snd x)).