(GOAL COMPLEXITY)
(STARTTERM CONSTRUCTOR-BASED)
(STRATEGY INNERMOST)
(STRATEGY
    INNERMOST)

(VAR
    @l @x @xs @y @ys)
(DATATYPES
    A = µX.< ::(X, X), nil, #false, #true, #EQ, #GT, #LT, #0, #neg(X), #pos(X), #s(X) >)
(SIGNATURES
    #less :: [A x A] -> A
    findMin :: [A] -> A
    findMin#1 :: [A] -> A
    findMin#2 :: [A x A] -> A
    findMin#3 :: [A x A x A x A] -> A
    minSort :: [A] -> A
    minSort#1 :: [A] -> A
    #cklt :: [A] -> A
    #compare :: [A x A] -> A)
(RULES
    #less(@x,@y) ->
      #cklt(#compare(@x,@y))
    findMin(@l) -> findMin#1(@l)
    findMin#1(::(@x,@xs)) ->
      findMin#2(findMin(@xs),@x)
    findMin#1(nil()) -> nil()
    findMin#2(::(@y,@ys),@x) ->
      findMin#3(#less(@x,@y)
               ,@x
               ,@y
               ,@ys)
    findMin#2(nil(),@x) -> ::(@x
                             ,nil())
    findMin#3(#false(),@x,@y,@ys) ->
      ::(@y,::(@x,@ys))
    findMin#3(#true(),@x,@y,@ys) ->
      ::(@x,::(@y,@ys))
    minSort(@l) ->
      minSort#1(findMin(@l))
    minSort#1(::(@x,@xs)) -> ::(@x
                               ,minSort(@xs))
    minSort#1(nil()) -> nil()
    #cklt(#EQ()) ->= #false()
    #cklt(#GT()) ->= #false()
    #cklt(#LT()) ->= #true()
    #compare(#0(),#0()) ->= #EQ()
    #compare(#0(),#neg(@y)) ->=
      #GT()
    #compare(#0(),#pos(@y)) ->=
      #LT()
    #compare(#0(),#s(@y)) ->= #LT()
    #compare(#neg(@x),#0()) ->=
      #LT()
    #compare(#neg(@x),#neg(@y)) ->=
      #compare(@y,@x)
    #compare(#neg(@x),#pos(@y)) ->=
      #LT()
    #compare(#pos(@x),#0()) ->=
      #GT()
    #compare(#pos(@x),#neg(@y)) ->=
      #GT()
    #compare(#pos(@x),#pos(@y)) ->=
      #compare(@x,@y)
    #compare(#s(@x),#0()) ->= #GT()
    #compare(#s(@x),#s(@y)) ->=
      #compare(@x,@y))