Definition psub  := psub Z0  Z.add Z.sub Z.opp Zeq_bool.Definition popp  := popp Z.opp.Definition padd  := padd Z0  Z.add Zeq_bool.Definition pmul := pmul 0 1 Z.add Z.mul Zeq_bool.Definition normZ  := norm 0 1 Z.add Z.mul Z.sub Z.opp Zeq_bool.Definition eval_pol := eval_pol Z.add Z.mul (fun x => x).

(* Specifications: *)
Lemma eval_pol_sub : forall env lhs rhs, eval_pol env (psub lhs rhs) = eval_pol env lhs - eval_pol env rhs.
Lemma eval_pol_add : forall env lhs rhs, eval_pol env (padd lhs rhs) = eval_pol env lhs + eval_pol env rhs.
Lemma eval_pol_mul : forall env lhs rhs, eval_pol env (pmul lhs rhs) = eval_pol env lhs * eval_pol env rhs.
Lemma eval_pol_norm : forall env e, eval_expr env e = eval_pol env (normZ e) .