Fixpoint fin_to_nat {n : nat} : fin n -> nat :=
match n with
| 0 => fun x : fin 0 => match x with end
| S n' => fun x : fin (S n') =>
match x with
| None => 0
| Some y => S (fin_to_nat y)
end
end.
Definition fin_lt {n : nat} (a b : fin n) : Prop := lt (fin_to_nat a) (fin_to_nat b).

(* Specifications: *)
Lemma fin_lt_Some_elim :
forall n (a b : fin n),
@fin_lt (S n) (Some a) (Some b) -> fin_lt a b.
Lemma fin_lt_Some_intro :
forall n (a b : fin n),
fin_lt a b -> @fin_lt (S n) (Some a) (Some b).
Lemma None_lt_Some :
forall n (x : fin n),
@fin_lt (S n) None (Some x).
Lemma fin_lt_trans :
forall n (x y z : fin n),
fin_lt x y -> fin_lt y z -> fin_lt x z.
Lemma fin_lt_not_eq :
forall n (x y : fin n),
fin_lt x y -> x <> y.