Hint Resolve legal_nested_field0_field.

(* Specifications: *)
(* Lemma nested_field_offset_type_divide: forall gfs t, legal_alignas_type t = true -> legal_nested_field t gfs -> (alignof (nested_field_type t gfs) | nested_field_offset t gfs).  Lemma nested_field_offset_type_divide0: forall gfs t, legal_alignas_type t = true -> legal_nested_field0 t gfs -> (alignof (nested_field_type t gfs) | nested_field_offset t gfs). *)
Lemma gfield_offset_in_range: forall t gf,
legal_field t gf ->
complete_legal_cosu_type t = true ->
0 <= gfield_offset t gf /\ gfield_offset t gf + sizeof (gfield_type t gf) <= sizeof t.
Lemma gfield_array_offset_in_range: forall t lo hi,
legal_field0 t (ArraySubsc lo) ->
legal_field0 t (ArraySubsc hi) ->
complete_legal_cosu_type t = true ->
0 <= gfield_offset t (ArraySubsc lo) /\
gfield_offset t (ArraySubsc lo) + sizeof (gfield_array_type t lo hi) <= sizeof t.
Lemma gfield0_offset_in_range: forall t gf,
legal_field0 t gf ->
complete_legal_cosu_type t = true ->
0 <= gfield_offset t gf /\ gfield_offset t gf <= sizeof t.
Lemma nested_field_offset_in_range: forall t gfs,
legal_nested_field t gfs ->
complete_legal_cosu_type t = true ->
0 <= nested_field_offset t gfs /\
(nested_field_offset t gfs) + sizeof (nested_field_type t gfs) <= sizeof t.
Lemma nested_field_array_offset_in_range: forall t gfs lo hi,
legal_nested_field0 t (ArraySubsc lo :: gfs) ->
legal_nested_field0 t (ArraySubsc hi :: gfs) ->
complete_legal_cosu_type t = true ->
0 <= nested_field_offset t (ArraySubsc lo :: gfs) /\
nested_field_offset t (ArraySubsc lo :: gfs) + sizeof (nested_field_array_type t gfs lo hi) <= sizeof t.
Lemma nested_field0_offset_in_range: forall (t : type) (gfs : list gfield),
legal_nested_field0 t gfs ->
complete_legal_cosu_type t = true ->
0 <= nested_field_offset t gfs <= sizeof t.