(STRATEGY INNERMOST) (VAR x y) (DATATYPES A = µX.< 0, true, s(X), false, divByZeroError >) (SIGNATURES ge :: [A x A] -> A minus :: [A x A] -> A plus :: [A x A] -> A div :: [A x A] -> A ify :: [A x A x A] -> A if :: [A x A x A] -> A) (RULES ge(0(),0()) -> true() ge(s(x),0()) -> ge(x,0()) ge(0(),s(0())) -> false() ge(0(),s(s(x))) -> ge(0(),s(x)) ge(s(x),s(y)) -> ge(x,y) minus(0(),0()) -> 0() minus(0(),s(x)) -> minus(0(),x) minus(s(x),0()) -> s(minus(x ,0())) minus(s(x),s(y)) -> minus(x,y) plus(0(),0()) -> 0() plus(0(),s(x)) -> s(plus(0(),x)) plus(s(x),y) -> s(plus(x,y)) div(x,y) -> ify(ge(y,s(0())) ,x ,y) ify(false(),x,y) -> divByZeroError() ify(true(),x,y) -> if(ge(x,y) ,x ,y) if(false(),x,y) -> 0() if(true(),x,y) -> s(div(minus(x ,y) ,y)))