Section LIST2.
Context {cs: compspecs}.
Context  {list_structid: ident} {list_link: ident}{list_token: share -> val -> mpred}.
Definition vund  (ls: listspec list_structid list_link list_token) : elemtype ls :=
compact_prod_gen
(fun it => default_val (field_type (fst it) list_fields)) (@all_but_link list_link  list_fields).
Definition lseg (ls: listspec list_structid list_link list_token) (dsh psh: share)
(contents: list val) (x z: val) : mpred :=
LsegGeneral.lseg ls dsh psh (map (fun v => (v, vund ls)) contents) x z.

Lemma join_cell_link (ls: listspec list_structid list_link list_token):
forall v' ash bsh psh p v,
sepalg.join ash bsh psh ->
~ (readable_share ash) ->
readable_share bsh ->
list_cell ls ash v' p * list_cell ls bsh v p = list_cell ls psh v p.