End LISTS.
Arguments list_rep {V} _ _ _.
Arguments list_rep_valid_pointer {V} _ _ _ _ _ _.
Arguments list_rep_local_facts {V} _ _ _ _ _ _.
Section TREES.
Variable V : Type.
Inductive tree : Type :=
| E : tree
| T: tree -> V -> tree -> tree.
Variable tree_cell: V -> val -> val -> val -> mpred.
Fixpoint tree_rep (t: tree) (p: val) : mpred :=
match t with
| E => !!(p=nullval) && emp
| T a v b =>
EX pa:val, EX pb:val,
tree_cell v pa pb p *
tree_rep a pa * tree_rep b pb
end.

(* Specifications: *)
Lemma tree_rep_valid_pointer:
(forall v L R p, tree_cell v L R p |-- valid_pointer p) ->
forall t p, tree_rep t p |-- valid_pointer p.
Lemma tree_rep_local_facts:
(forall v L R p, tree_cell v L R p |-- !! (isptr p)) ->
forall t p, tree_rep t p |-- !! (is_pointer_or_null p  /\ (p=nullval <-> t=E)).