(STRATEGY INNERMOST) (VAR b x xs xs2 y ys ys2 zs zs2) (DATATYPES A = µX.< cons(X, X), false, nil, true, 0, s(X), differentLengthError >) (SIGNATURES isEmpty :: [A] -> A isZero :: [A] -> A head :: [A] -> A tail :: [A] -> A append :: [A x A] -> A p :: [A] -> A inc :: [A] -> A addLists :: [A x A x A] -> A if :: [A x A x A x A x A x A x A x A x A] -> A addList :: [A x A] -> A) (RULES isEmpty(cons(x,xs)) -> false() isEmpty(nil()) -> true() isZero(0()) -> true() isZero(s(x)) -> false() head(cons(x,xs)) -> x tail(cons(x,xs)) -> xs tail(nil()) -> nil() append(nil(),x) -> cons(x,nil()) append(cons(y,ys),x) -> cons(y ,append(ys,x)) p(s(s(x))) -> s(p(s(x))) p(s(0())) -> 0() p(0()) -> 0() inc(s(x)) -> s(inc(x)) inc(0()) -> s(0()) addLists(xs,ys,zs) -> if(isEmpty(xs) ,isEmpty(ys) ,isZero(head(xs)) ,tail(xs) ,tail(ys) ,cons(p(head(xs)),tail(xs)) ,cons(inc(head(ys)),tail(ys)) ,zs ,append(zs,head(ys))) if(true() ,true() ,b ,xs ,ys ,xs2 ,ys2 ,zs ,zs2) -> zs if(true() ,false() ,b ,xs ,ys ,xs2 ,ys2 ,zs ,zs2) -> differentLengthError() if(false() ,true() ,b ,xs ,ys ,xs2 ,ys2 ,zs ,zs2) -> differentLengthError() if(false() ,false() ,false() ,xs ,ys ,xs2 ,ys2 ,zs ,zs2) -> addLists(xs2,ys2,zs) if(false() ,false() ,true() ,xs ,ys ,xs2 ,ys2 ,zs ,zs2) -> addLists(xs,ys,zs2) addList(xs,ys) -> addLists(xs ,ys ,nil()))