tC eq_dot // -cfdotC. Qed.

(* Specifications: *)
Proof. by rewrite !(cfdotC xi) -
Canonical cfun_dot_additive xi := Additive (cfdotBr
Lemma cfdot0r xi : '[xi, 0] = 0. Proof. exact: raddf0. Qed.
Lemma cfdot_conjCr phi psi : '[phi,
Lemma cfnorm_gt0 phi : ('[phi] > 0) = (phi !=
Lemma cfnormZ a phi : '[a *: phi]= `|a
let d := '[phi, psi] in '[phi - psi] = '[phi] + '[psi] - (d + d^*).
Lemma cfnormDd phi psi : '[phi, psi] = 0 -> '[phi + psi] = '[phi] + '[psi].
have [-> | nz_psi] := altP (psi =P 0); first by rewrite cfdot0r coord0. case/vlineP=> [x ->]; rewrite cfdotZl linearZ pmulr_lge0 ?cfnor
Proof.
Proof. rewrite orthogonal_sym.
Proof. move=> eqR eqS; rewrite [orthogonal _ _](eq_all_r eqR).
Lemma orthogonal_catl R1 R2 S :
rewrite /pairwise_orthogonal mem_cat negb_or -!andbA; do !bool_congr. elim: R => [|phi R /= ->]; rewrite ?andbT // orthogonal_cons al
apply: catCA_perm_subst R S => R S S'. rewrite !pairwise_orthogonal_cat !orthogonal_catr (orthogonal_sym R S) -!andbA. by do !bool_congr.
move=> sS12 uniqS1 /pairwise_orthogonalP[/andP[notS2_0 _]
by rewrite cfdotZr oSS ?mulr0 ?mem_nth // eq_sym nth_uniq. rewrite addr0 cfdotZr mulf_eq0 conjC_eq0 cfnorm_eq0.
Proof.
Proof.
by have [-> _ /normS/eqP | /oSS] := altP eqP. split=> // [|phi psi Sphi Spsi /negbTE]; last by rewrite oSS // =>