(** * No double elements modulo p. *)

Definition nodoubles (p : nat) (l : Zlist) : Prop :=
  forall x : Z,
  inlist Z x l -> forall y : Z, inlist Z y (zdrop x l) -> ~ Mod x y p.

(* Specifications: *)
Lemma nodoubles_nil : forall p : nat, nodoubles p (Nil Z).
Lemma nodoubles_drop : forall (p : nat) (l : Zlist) (x : Z), nodoubles p l -> nodoubles p (zdrop x l).
Lemma nodoubles_ind : forall (p : nat) (h : Z) (t : Zlist), (forall x : Z, inlist Z x t -> ~ Mod h x p) -> nodoubles p t -> nodoubles p (Cons Z h t).