(STRATEGY INNERMOST) (VAR b x y z) (DATATYPES A = µX.< 0, true, s(X), false, divByZeroError >) (SIGNATURES le :: [A x A] -> A minus :: [A x A] -> A isZero :: [A] -> A mod :: [A x A] -> A if_mod :: [A x A x A x A x A] -> A) (RULES le(0(),y) -> true() le(s(x),0()) -> false() le(s(x),s(y)) -> le(x,y) minus(x,x) -> 0() minus(x,0()) -> x minus(0(),x) -> 0() minus(s(x),s(y)) -> minus(x,y) isZero(0()) -> true() isZero(s(x)) -> false() mod(x,y) -> if_mod(isZero(y) ,le(y,x) ,x ,y ,minus(x,y)) if_mod(true(),b,x,y,z) -> divByZeroError() if_mod(false(),false(),x,y,z) -> x if_mod(false(),true(),x,y,z) -> mod(z,y))