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.

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.