(STRATEGY INNERMOST) (VAR n x y z) (DATATYPES A = µX.< nil, true, add(X, X), false >) (SIGNATURES null :: [A] -> A tail :: [A] -> A head :: [A] -> A app :: [A x A] -> A reverse :: [A] -> A shuffle :: [A] -> A shuff :: [A x A] -> A if :: [A x A x A x A] -> A) (RULES null(nil()) -> true() null(add(n,x)) -> false() tail(add(n,x)) -> x tail(nil()) -> nil() head(add(n,x)) -> n app(nil(),y) -> y app(add(n,x),y) -> add(n ,app(x,y)) reverse(nil()) -> nil() reverse(add(n,x)) -> app(reverse(x),add(n,nil())) shuffle(x) -> shuff(x,nil()) shuff(x,y) -> if(null(x) ,x ,y ,app(y,add(head(x),nil()))) if(true(),x,y,z) -> y if(false(),x,y,z) -> shuff(reverse(tail(x)),z))