Definition field_at (t: type) (nf: list ident) (v: reptype (nested_field_type t nf)) (p: val) : Pred := data_at_rec (nested_field_type t nf) v (offset_val (nested_field_offset t nf) p).
Definition data_at (t: type) (v: reptype t) (p: val) : Pred := field_at t nil v p.
Definition field_address (t: type) (nf: list ident) (p: val) : val := offset_val (nested_field_offset t nf) p.
(* Ramification Premises for Nested Load/Store Rule *)

Lemma RP_one_layer: forall t nf f u v p,
legal_nested_field t (f :: nf) ->
legal_type t ->
field_at t nf u p
|-- field_at t (f :: nf)
(proj_gfield_reptype (nested_field_type t nf) f u) p *
(field_at t (f :: nf) v p -*
field_at t nf (upd_gfield_reptype (nested_field_type t nf) f u v) p).