Definition FTI_aux id :=
    let m := co_members (get_co id) in
    (ListTypeGen (fun it => A (field_type (fst it) m)) (fun it => type_func (field_type (fst it) m)) m).

Lemma type_func_eq: forall t, type_func t = match t as t0 return A t0 with | Tarray t0 n a => F_Tarray t0 n a (type_func t0) | Tstruct id a => F_Tstruct id a (FTI_aux id) | Tunion id a => F_Tunion id a (FTI_aux id) | t' => F_ByValue t' end.