(* Lemma field_at_field_at: forall sh t gfs0 gfs1 v v' p, legal_alignas_type t = true -> JMeq v v' -> field_at sh t (gfs1 ++ gfs0) v p = (!! (size_compatible t p)) && (!! (align_compatible t p)) && (!! (legal_nested_field t (gfs1 ++ gfs0))) && at_offset' (field_at sh (nested_field_type2 t gfs0) gfs1 v') (nested_field_offset2 t gfs0) p. *)

(* Specifications: *)
Lemma splice_top_top: Share.splice Tsh Tsh = Tsh.
Lemma field_at_conflict: forall sh t fld p v v',
sepalg.nonidentity sh ->
0 < sizeof (nested_field_type t fld) ->
field_at sh t fld v p * field_at sh t fld v' p|-- FF.
Lemma data_at_conflict: forall sh t v v' p,
sepalg.nonidentity sh ->
0 < sizeof t ->
data_at sh t v p * data_at sh t v' p |-- FF.
Lemma field_at__conflict:
forall sh t fld p,
sepalg.nonidentity sh ->
0 < sizeof (nested_field_type t fld) ->
field_at_ sh t fld p
* field_at_ sh t fld p |-- FF.
Lemma sepcon_FF_derives':
forall (P Q: mpred), Q |-- FF -> P * Q |-- FF.
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).