(** 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_head_neq :
forall (x y : Z) (l : Zlist),
x <> y -> zdrop x (Cons Z y l) = Cons Z y (zdrop x l).