data specification
using nat
data types
List[A] = []
| . + .(. head : A;. tail : List[A])
;
variables
x : List[A];
y : List[A];
z : List[A];
n : Nat;
a : A;
head : A;
tail : List[A];
size functions
# . : List[A] → Nat;
order predicates
. < . : List[A] × List[A];
end data specification