proposition: Lemma lseg_unroll_right (ls: listspec list_structid list_link list_token): forall sh l x z , lseg ls sh l x z = (!! (ptr_eq x z) && !! (l=nil) && emp) || lseg_cons_right ls sh l x z.
proof: Proof. Abort. Lemma lseg_local_facts: forall ls sh contents p q, lseg ls sh contents p q |-- !! (is_pointer_or_null p /\ (p=q <-> contents=nil)). Proof. intros. unfold lseg. normalize. eapply derives_trans; [apply LsegGeneral.lseg_local_facts |]. normalize. split; auto. rewrite H. clear. destruct al; simpl; intuition; try congruence. Qed.
imports: VST.floyd.base2 VST.floyd.client_lemmas VST.floyd.closed_lemmas VST.floyd.nested_pred_lemmas VST.floyd.nested_field_lemmas VST.floyd.efield_lemmas VST.floyd.mapsto_memory_block VST.floyd.reptype_lemmas VST.floyd.data_at_rec_lemmas VST.floyd.field_at VST.floyd.nested_loadstore VST.floyd.entailer