Section ReDun.
Variable A : Type.
Inductive NoDup : list A -> Prop :=
| NoDup_nil : NoDup nil
| NoDup_cons : forall x l, ~ In x l -> NoDup l -> NoDup (x::l).
(** Effective computation of a list without duplicates *)
Hypothesis decA: forall x y : A, {x = y} + {x <> y}.
Fixpoint nodup (l : list A) : list A :=
match l with
| [] => []
| x::xs => if in_dec decA x xs then nodup xs else x::(nodup xs)
end.
(** Alternative characterisations of being without duplicates, thanks to [nth_error] and [nth] *)
(** Having [NoDup] hypotheses bring more precise facts about [incl]. *)

Lemma NoDup_incl_length l l' :
NoDup l -> incl l l' -> length l <= length l'.