Definition compute_legal_nested_field0 (t: type) (gfs: list gfield) : list Prop :=
  match gfs with
  | nil => nil
  | gf :: gfs0 =>
    match (nested_field_type t gfs0), gf with
    | Tarray _ n _, ArraySubsc i =>
       (0 <= i <= n) :: compute_legal_nested_field t gfs0
    | Tstruct id _, StructField i =>
       if compute_in_members i (co_members (get_co id)) then compute_legal_nested_field t gfs else False :: nil
    | Tunion id _, UnionField i =>
       if compute_in_members i (co_members (get_co id)) then compute_legal_nested_field t gfs else False :: nil
    | _, _ => False :: nil
    end
  end.

Lemma var_block_data_at_: forall sh id t, complete_legal_cosu_type t = true -> Z.ltb (sizeof t) Ptrofs.modulus = true -> is_aligned cenv_cs ha_env_cs la_env_cs t 0 = true -> readable_share sh -> var_block sh (id, t) = `(data_at_ sh t) (eval_lvar id t).