Fixpoint interp_PElist (l:list R) (lpe:list (PExpr C * PExpr C)) {struct lpe} : Prop :=
  match lpe with
  | nil => True
  | (me,pe)::lpe =>
    match lpe with
    | nil => PEeval l me == PEeval l pe
    | _ => PEeval l me == PEeval l pe /\ interp_PElist l lpe
    end
 end.

(* Specifications: *)
Lemma norm_subst_ok : forall l pe, PEeval l pe == (norm_subst pe)@l.
Lemma ring_correct : forall l pe1 pe2, (norm_subst pe1 =? norm_subst pe2) = true -> PEeval l pe1 == PEeval l pe2.