Definition tvar := nat.Definition var := nat.Inductive type : Type :=
| N : type
| Arrow : type -> type -> type.Inductive type : Type :=
| N : type
| Arrow : type -> type -> type.Inductive type : Type :=
| N : type
| Arrow : type -> type -> type.Definition type_eq_dec (t1 t2 : type) : {t1 = t2} + {t1 <> t2}.Fixpoint type_size (tau : type) : nat :=
  match tau with
    | N => 0
    | Arrow tau1 tau2 =>
      1 + (type_size tau1 + type_size tau2)
  end.Definition lt_type (tau1 tau2 : type) : Prop :=
  type_size tau1 < type_size tau2.

(* Specifications: *)
Lemma wf_lt_type : well_founded lt_type.