Fixpoint firstIndexOf(A : Set)(eqd : eq_dec A)(ls : list A)(a : A)(def : nat) :=
  match ls with
      | nil => def
      | a' :: ls' =>
        if (eqd a a') then O else (S (firstIndexOf eqd ls' a def))
  end.

Theorem nth_firstIndexOf_None : forall (A : Set)(eqd : eq_dec A)(ls : list A), NoDup ls -> forall (a a' : A) i, In a ls -> i <> firstIndexOf eqd ls a O -> nth_option ls i = Some a' -> a <> a'.