End IterTreeSepCon2.
(* X_DEFS *)
Inductive XTree: Type :=
| XLeaf: XTree
| XNode: list XTree -> Z -> XTree.
Fixpoint xtree_rep (t: XTree) (p: val): mpred :=
match t with
| XLeaf =>
!!(p = nullval) && emp
| XNode tl v =>
EX q: val,
data_at Tsh t_struct_Xnode (q, Vint (Int.repr v)) p *
EX r: list val,
list_rep (fun (p: val) (n: val) (q: val) => data_at Tsh t_struct_Xlist (p, n) q) r q *
iter_sepcon2 xtree_rep tl r
end.

Lemma xtree_rep_valid_pointer:
forall t p, xtree_rep t p |-- valid_pointer p.