(*  let d := default_val _ in *)

(* Specifications: *)
Lemma nested_sfieldlist_at_ramif: forall sh t gfs id a i v p,
let d := default_val _ in
nested_field_type t gfs = Tstruct id a ->
in_members i (co_members (get_co id)) ->
nested_sfieldlist_at sh t gfs (co_members (get_co id)) v p |--
field_at sh t (StructField i :: gfs)
(proj_struct i (co_members (get_co id)) v d) p *
(ALL v0: _,
field_at sh t (StructField i :: gfs) v0 p -*
nested_sfieldlist_at sh t gfs (co_members (get_co id))
(upd_struct i (co_members (get_co id)) v v0) p).
Lemma nested_ufieldlist_at_ramif: forall sh t gfs id a i v p,
let d := default_val _ in
nested_field_type t gfs = Tunion id a ->
in_members i (co_members (get_co id)) ->
nested_ufieldlist_at sh t gfs (co_members (get_co id)) v p |--
field_at sh t (UnionField i :: gfs)
(proj_union i (co_members (get_co id)) v d) p *
(ALL v0: _,
field_at sh t (UnionField i :: gfs) v0 p -*
nested_ufieldlist_at sh t gfs (co_members (get_co id))
(upd_union i (co_members (get_co id)) v v0) p).
Lemma memory_block_valid_ptr:
forall sh n p,
sepalg.nonidentity sh ->
n > 0 ->
memory_block sh n p |-- valid_pointer p.
Lemma data_at_valid_ptr:
forall sh t v p,
sepalg.nonidentity sh ->
sizeof t > 0 ->
data_at sh t v p |-- valid_pointer p.
Lemma field_at_valid_ptr:
forall sh t path v p,
sepalg.nonidentity sh ->
sizeof (nested_field_type t path) > 0 ->
field_at sh t path v p |-- valid_pointer (field_address t path p).
Lemma field_at_valid_ptr0:
forall sh t path v p,
sepalg.nonidentity sh ->
sizeof (nested_field_type t path) > 0 ->
nested_field_offset t path = 0 ->
field_at sh t path v p |-- valid_pointer p.