(STRATEGY INNERMOST) (VAR c l x y z) (DATATYPES A = µX.< 0, true, s(X), false, eq(X, X), nil, cons(X, X) >) (SIGNATURES ge :: [A x A] -> A rev :: [A] -> A if :: [A x A x A x A x A] -> A help :: [A x A x A x A] -> A append :: [A x A] -> A length :: [A] -> A) (RULES ge(x,0()) -> true() ge(0(),s(y)) -> false() ge(s(x),s(y)) -> ge(x,y) rev(x) -> if(x ,eq(0(),length(x)) ,nil() ,0() ,length(x)) if(x,true(),z,c,l) -> z if(x,false(),z,c,l) -> help(s(c) ,l ,x ,z) help(c,l,cons(x,y),z) -> if(append(y,cons(x,nil())) ,ge(c,l) ,cons(x,z) ,c ,l) append(nil(),y) -> y append(cons(x,y),z) -> cons(x ,append(y,z)) length(nil()) -> 0() length(cons(x,y)) -> s(length(y)))