Instance CompSpecs : compspecs. make_compspecs prog. Defined.
Definition Vprog : varspecs. mk_varspecs prog. Defined.
Definition t_struct_elem := Tstruct _elem noattr.
Definition t_struct_fifo := Tstruct _fifo noattr.
Instance QS: listspec _elem _next (fun _ _ => emp).

(* Specifications: *)
Lemma readable_share_Qsh': readable_share Qsh'.
Lemma Qsh_Qsh': sepalg.join Qsh Qsh' Ews.
Lemma Qsh_not_readable: ~ readable_share Qsh.
Hint Resolve Qsh_not_readable.
Lemma Qsh_nonempty: Qsh <> Share.bot.
Hint Resolve Qsh_nonempty : valid_pointer.
Lemma Qsh_nonidentity: sepalg.nonidentity Qsh.
Hint Resolve Qsh_nonidentity : valid_pointer.
Lemma sub_Qsh_Ews: sepalg.join_sub Qsh Ews.
Hint Resolve sub_Qsh_Ews: valid_pointer.
Lemma field_at_list_cell_weak:
forall sh i j p,
readable_share sh ->
field_at sh list_struct [StructField _a] i p *
field_at sh list_struct [StructField _b] j p *
field_at_ sh list_struct [StructField _next] p
= list_cell QS sh (i,j) p *
field_at_ sh list_struct [StructField _next] p.
Lemma make_unmake:
forall a b p,
data_at Ews t_struct_elem (Vint a, (Vint b, Vundef)) p =
field_at Qsh' t_struct_elem [StructField _a] (Vint a) p *
field_at Qsh' t_struct_elem [StructField _b] (Vint b) p *
list_cell QS Qsh (Vundef, Vundef) p *
field_at_ Ews t_struct_elem [StructField _next] p.