Local Open Scope logic.
Class listspec {cs: compspecs} (list_structid: ident) (list_link: ident) (token: share -> val -> mpred):=
mk_listspec {
list_fields: members;
list_struct := Tstruct list_structid noattr;
list_members_eq: list_fields = co_members (get_co list_structid);
list_struct_complete_legal_cosu: complete_legal_cosu_type list_struct = true; (* TODO: maybe this line not useful? *)
list_link_type: nested_field_type list_struct (StructField list_link :: nil) = Tpointer list_struct noattr;
list_token := token
}.
Section LIST1.
Context {cs: compspecs}.
Context  {list_structid: ident} {list_link: ident} {list_token: share -> val -> mpred}.
Fixpoint all_but_link (f: members) : members :=
match f with
| nil => nil
| cons it f' => if ident_eq (fst it) list_link
then f'
else cons it (all_but_link f')
end.

Lemma list_link_size_in_range (ls: listspec list_structid list_link list_token):
0 < sizeof (nested_field_type list_struct (StructField list_link :: nil)) < Ptrofs.modulus.