(** Drop an element from a Zlist *)

Fixpoint zdrop (x : Z) (l : Zlist) {struct l} : Zlist :=
  match l with
  | Nil => Nil Z
  | Cons h t => if Zeq_bool x h then t else Cons Z h (zdrop x t)
  end.

Lemma zdrop_product : forall (x : Z) (l : Zlist), inlist Z x l -> (x * zproduct (zdrop x l))%Z = zproduct l.