(VAR x y) (DATATYPES a = µX. < 0, s(X) > ) (SIGNATURES add :: a x a -> a mult :: a x a -> a c :: a -> a ) (RULES add(0,y) -> y add(s(x),y) -> s(add(x,y)) mult(0,y) -> 0 mult(s(x),y) -> add(mult(x,y),y) c(x) -> mult(x,mult(x,x)) )