Fixpoint norm_aux (pe:PExpr C) : Pol :=
  match pe with
  | PEO => Pc cO
  | PEI => Pc cI
  | PEc c => Pc c
  | PEX _ j => mk_X j
  | PEadd pe1 (PEopp pe2) =>
    Psub (norm_aux pe1) (norm_aux pe2)
  | PEadd pe1 pe2 => Padd (norm_aux  pe1) (norm_aux pe2)
  | PEsub pe1 pe2 => Psub (norm_aux pe1) (norm_aux pe2)
  | PEmul pe1 pe2 => Pmul (norm_aux pe1) (norm_aux pe2)
  | PEopp pe1 => Popp (norm_aux pe1)
  | PEpow pe1 n => Ppow_N (fun p => p) (norm_aux pe1) n
  end.Definition norm_subst pe := subst_l (norm_aux pe).

(* Specifications: *)
Lemma norm_aux_spec : forall l pe, PEeval l pe == (norm_aux pe)@l.
Lemma norm_subst_spec : forall l pe, PEeval l pe == (norm_subst pe)@l.