Ltac type_induction t :=
  pattern t;
  match goal with
  | |- ?P t =>
    apply type_ind; clear t;
    let t := fresh "t" in
    intros t IH;
    let id := fresh "id" in
    let a := fresh "a" in
    destruct t as [| | | | | | | id a | id a]
  end.Definition FT_aux id :=
    let m := co_members (get_co id) in
    ListType (map (fun it => A (field_type (fst it) m)) m).Definition type_func t := type_func_rec (rank_type cenv_cs t) t.

Lemma type_func_rec_rank_irrelevent: forall t n n0, n >= rank_type cenv_cs t -> n0 >= rank_type cenv_cs t -> type_func_rec n t = type_func_rec n0 t.