(* Copyright 2012-2015 by Adam Petcher.				* * Use of this source code is governed by the license described	* * in the LICENSE file at the root of the source tree.		*)
Set Implicit Arguments.
Local Open Scope list_scope.
Fixpoint hasDups (A : Set)(eqd : EqDec A)(ls : list A) :=
match ls with
| nil => false
| a :: ls' =>
if (in_dec (EqDec_dec _) a ls') then true else
(hasDups _ ls')
end.

Theorem hasDups_false_NoDup :
forall (A : Set)(eqd : EqDec A)(ls : list A),
hasDups _ ls = false <->
NoDup ls.