Definition data_at_rec: forall t, reptype t -> val -> Pred :=
  type_func (fun t => reptype t -> val -> Pred)
    (fun t v p => mapsto p (repinject t v))
    (fun id P v => struct_data_at_rec_aux (co_members (get_co id)) (co_members (get_co id)) P (unfold_reptype v)).

Lemma data_at_rec_eq: forall t v, data_at_rec t v = match t return REPTYPE t -> val -> Pred with | Tint => fun v p => mapsto p v | Tstruct id => struct_pred (co_members (get_co id)) (fun it v => at_offset (data_at_rec (field_type (fst it) (co_members (get_co id))) v) (field_offset cenv_cs (fst it) (co_members (get_co id)))) end (unfold_reptype v).