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_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)).