(STRATEGY INNERMOST) (VAR x y z) (DATATYPES A = µX.< 0, s(X), true, false >) (SIGNATURES plus :: [A x A] -> A times :: [A x A] -> A p :: [A] -> A minus :: [A x A] -> A isZero :: [A] -> A facIter :: [A x A] -> A if :: [A x A x A x A] -> A factorial :: [A] -> A) (RULES plus(0(),x) -> x plus(s(x),y) -> s(plus(x,y)) times(0(),y) -> 0() times(s(x),y) -> plus(y ,times(x,y)) p(s(x)) -> x p(0()) -> 0() minus(x,0()) -> x minus(0(),x) -> 0() minus(x,s(y)) -> p(minus(x,y)) isZero(0()) -> true() isZero(s(x)) -> false() facIter(x,y) -> if(isZero(x) ,minus(x,s(0())) ,y ,times(y,x)) if(true(),x,y,z) -> y if(false(),x,y,z) -> facIter(x ,z) factorial(x) -> facIter(x ,s(0())))