(STRATEGY INNERMOST) (VAR c x y) (DATATYPES A = µX.< 0, s(X), true, false, times(X, X) >) (SIGNATURES lt :: [A x A] -> A fac :: [A] -> A help :: [A x A] -> A if :: [A x A x A] -> A) (RULES lt(0(),s(x)) -> true() lt(x,0()) -> false() lt(s(x),s(y)) -> lt(x,y) fac(x) -> help(x,0()) help(x,c) -> if(lt(c,x),x,c) if(true(),x,c) -> times(s(c) ,help(x,s(c))) if(false(),x,c) -> s(0()))