Fixpoint Fin_enum n : list (Fin n) :=
  match n with
  | 0 => []
  | S m => inl tt :: map inr (Fin_enum m)
  end.

(* Specifications: *)
Lemma Fin_enum_correct (n : nat) : forall i, In i (Fin_enum n).
Lemma Fin_enum_length n : length (Fin_enum n) = n.
Lemma Fin_enum_correct (n : nat) : forall i, In i (Fin_enum n).
Lemma Fin_enum_length n : length (Fin_enum n) = n.