Fixpoint eremove c l (e : expr) :=
match e with
| nil => None
| (c1,l1) :: e1  =>
if czerop (cadd c1 (copp c)) then
match lcompare l l1 with
| Eq => Some e1
| _  =>
match eremove c l e1 with
| Some e2 => Some ((c1,l1):: e2)
| _ => None
end
end
else
match eremove c l e1 with
| Some e2 => Some ((c1,l1):: e2)
| _ => None
end
end.

(* Specifications: *)
Lemma eremove_c c l e :
match eremove c l e with None => True | Some e1 =>
{e[e1]} = ({e[e]} + (-(1)) * {c[c]} * {l[l]})%f
end.