(STRATEGY
    INNERMOST)

(VAR
    x xs y)
(DATATYPES
    A = µX.< 0, true, s(X), false, nil, cons(X, X) >)
(SIGNATURES
    le :: [A x A] -> A
    eq :: [A x A] -> A
    minsort :: [A] -> A
    min :: [A] -> A
    if1 :: [A x A x A x A] -> A
    rm :: [A x A] -> A
    if2 :: [A x A x A x A] -> A)
(RULES
    le(0(),y) -> true()
    le(s(x),0()) -> false()
    le(s(x),s(y)) -> le(x,y)
    eq(0(),0()) -> true()
    eq(0(),s(y)) -> false()
    eq(s(x),0()) -> false()
    eq(s(x),s(y)) -> eq(x,y)
    minsort(nil()) -> nil()
    minsort(cons(x,xs)) ->
      cons(min(cons(x,xs))
          ,minsort(rm(min(cons(x,xs))
                     ,cons(x,xs))))
    min(nil()) -> 0()
    min(cons(x,nil())) -> x
    min(cons(x,cons(y,xs))) ->
      if1(le(x,y),x,y,xs)
    if1(true(),x,y,xs) -> min(cons(x
                                  ,xs))
    if1(false(),x,y,xs) ->
      min(cons(y,xs))
    rm(x,nil()) -> nil()
    rm(x,cons(y,xs)) -> if2(eq(x,y)
                           ,x
                           ,y
                           ,xs)
    if2(true(),x,y,xs) -> rm(x,xs)
    if2(false(),x,y,xs) -> cons(y
                               ,rm(x,xs)))