data specification
using nat
data types
Tree[A] := leaf
| branch(. left : Tree[A];. val : A;. right : Tree[A])
;
variables
t : Tree[A];
t0 : Tree[A];
t1 : Tree[A];
left : Tree[A];
val : A;
right : Tree[A];
size functions
# . : Tree[A] → Nat;
end data specification