(VAR x) (DATATYPES a = µX.< 0, s(X) > ) (SIGNATURES half :: a -> a bits :: a -> a ) (RULES half(0) -> 0 half(s(0)) -> 0 half(s(s(x))) -> s(half(x)) bits(0) -> 0 bits(s(0)) -> s(0) bits(s(s(x))) -> s(bits(s(half(x)))) ) (COMMENTS )