(STRATEGY INNERMOST) (VAR m n x y z) (DATATYPES A = µX.< 0, true, s(X), false, nil, add(X, X) >) (SIGNATURES eq :: [A x A] -> A le :: [A x A] -> A app :: [A x A] -> A min :: [A] -> A if_min :: [A x A] -> A head :: [A] -> A tail :: [A] -> A null :: [A] -> A rm :: [A x A] -> A if_rm :: [A x A x A] -> A minsort :: [A] -> A mins :: [A x A x A] -> A if :: [A x A x A x A] -> A if2 :: [A x A x A x A] -> A) (RULES eq(0(),0()) -> true() eq(0(),s(x)) -> false() eq(s(x),0()) -> false() eq(s(x),s(y)) -> eq(x,y) le(0(),y) -> true() le(s(x),0()) -> false() le(s(x),s(y)) -> le(x,y) app(nil(),y) -> y app(add(n,x),y) -> add(n ,app(x,y)) min(add(n,nil())) -> n min(add(n,add(m,x))) -> if_min(le(n,m),add(n,add(m,x))) if_min(true() ,add(n,add(m,x))) -> min(add(n ,x)) if_min(false() ,add(n,add(m,x))) -> min(add(m ,x)) head(add(n,x)) -> n tail(add(n,x)) -> x tail(nil()) -> nil() null(nil()) -> true() null(add(n,x)) -> false() rm(n,nil()) -> nil() rm(n,add(m,x)) -> if_rm(eq(n,m) ,n ,add(m,x)) if_rm(true(),n,add(m,x)) -> rm(n ,x) if_rm(false(),n,add(m,x)) -> add(m,rm(n,x)) minsort(x) -> mins(x ,nil() ,nil()) mins(x,y,z) -> if(null(x),x,y,z) if(true(),x,y,z) -> z if(false(),x,y,z) -> if2(eq(head(x),min(x)),x,y,z) if2(true(),x,y,z) -> mins(app(rm(head(x),tail(x)),y) ,nil() ,app(z,add(head(x),nil()))) if2(false(),x,y,z) -> mins(tail(x),add(head(x),y),z))