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.

(* Specifications: *)
Lemma compute_legal_nested_field0_spec': forall t gfs, Forall Datatypes.id (compute_legal_nested_field0 t gfs) -> legal_nested_field0 t gfs.
Lemma splice_top_top: Share.splice Tsh Tsh = Tsh.
Lemma field_compatible_offset_isptr: forall t path n c, field_compatible t path (offset_val n c) -> isptr c.
Lemma field_compatible0_offset_isptr: forall t path n c, field_compatible t path (offset_val n c) -> isptr c.
Lemma is_pointer_or_null_field_address_lemma: forall t path p, is_pointer_or_null (field_address t path p) <-> field_compatible t path p.
Lemma isptr_field_address_lemma: forall t path p, isptr (field_address t path p) <-> field_compatible t path p.
Lemma eval_lvar_spec: forall id t rho, match eval_lvar id t rho with | Vundef => True | Vptr b ofs => ofs = Ptrofs.zero | _ => False 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).