MAYBE

Problem:
 leq(0(),x) -> tt()
 leq(s(x),0()) -> ff()
 leq(s(x),s(y)) -> leq(x,y)
 split(nil()) -> app(nil(),nil())
 split(cons(x,nil())) -> app(cons(x,nil()),nil())
 split(cons(x,cons(y,xs))) -> split1(x,y,split(xs))
 split1(x,y,app(xs,ys)) -> app(cons(x,xs),cons(y,ys))
 merge([](),xs) -> xs
 merge(xs,[]()) -> xs
 merge(cons(x,xs),cons(y,ys)) -> ifmerge(leq(x,y),x,y,xs,ys)
 ifmerge(tt(),x,y,xs,ys) -> cons(x,merge(xs,cons(y,ys)))
 ifmerge(ff(),x,y,xs,ys) -> cons(y,merge(cons(x,xs),ys))
 mergesort(xs) -> mergesort1(split(xs))
 mergesort1(app(xs,ys)) -> merge(mergesort(xs),mergesort(ys))

Proof:
 DP Processor:
  DPs:
   leq#(s(x),s(y)) -> leq#(x,y)
   split#(cons(x,cons(y,xs))) -> split#(xs)
   split#(cons(x,cons(y,xs))) -> split1#(x,y,split(xs))
   merge#(cons(x,xs),cons(y,ys)) -> leq#(x,y)
   merge#(cons(x,xs),cons(y,ys)) -> ifmerge#(leq(x,y),x,y,xs,ys)
   ifmerge#(tt(),x,y,xs,ys) -> merge#(xs,cons(y,ys))
   ifmerge#(ff(),x,y,xs,ys) -> merge#(cons(x,xs),ys)
   mergesort#(xs) -> split#(xs)
   mergesort#(xs) -> mergesort1#(split(xs))
   mergesort1#(app(xs,ys)) -> mergesort#(ys)
   mergesort1#(app(xs,ys)) -> mergesort#(xs)
   mergesort1#(app(xs,ys)) -> merge#(mergesort(xs),mergesort(ys))
  TRS:
   leq(0(),x) -> tt()
   leq(s(x),0()) -> ff()
   leq(s(x),s(y)) -> leq(x,y)
   split(nil()) -> app(nil(),nil())
   split(cons(x,nil())) -> app(cons(x,nil()),nil())
   split(cons(x,cons(y,xs))) -> split1(x,y,split(xs))
   split1(x,y,app(xs,ys)) -> app(cons(x,xs),cons(y,ys))
   merge([](),xs) -> xs
   merge(xs,[]()) -> xs
   merge(cons(x,xs),cons(y,ys)) -> ifmerge(leq(x,y),x,y,xs,ys)
   ifmerge(tt(),x,y,xs,ys) -> cons(x,merge(xs,cons(y,ys)))
   ifmerge(ff(),x,y,xs,ys) -> cons(y,merge(cons(x,xs),ys))
   mergesort(xs) -> mergesort1(split(xs))
   mergesort1(app(xs,ys)) -> merge(mergesort(xs),mergesort(ys))
  ADG Processor:
   DPs:
    leq#(s(x),s(y)) -> leq#(x,y)
    split#(cons(x,cons(y,xs))) -> split#(xs)
    split#(cons(x,cons(y,xs))) -> split1#(x,y,split(xs))
    merge#(cons(x,xs),cons(y,ys)) -> leq#(x,y)
    merge#(cons(x,xs),cons(y,ys)) -> ifmerge#(leq(x,y),x,y,xs,ys)
    ifmerge#(tt(),x,y,xs,ys) -> merge#(xs,cons(y,ys))
    ifmerge#(ff(),x,y,xs,ys) -> merge#(cons(x,xs),ys)
    mergesort#(xs) -> split#(xs)
    mergesort#(xs) -> mergesort1#(split(xs))
    mergesort1#(app(xs,ys)) -> mergesort#(ys)
    mergesort1#(app(xs,ys)) -> mergesort#(xs)
    mergesort1#(app(xs,ys)) -> merge#(mergesort(xs),mergesort(ys))
   TRS:
    leq(0(),x) -> tt()
    leq(s(x),0()) -> ff()
    leq(s(x),s(y)) -> leq(x,y)
    split(nil()) -> app(nil(),nil())
    split(cons(x,nil())) -> app(cons(x,nil()),nil())
    split(cons(x,cons(y,xs))) -> split1(x,y,split(xs))
    split1(x,y,app(xs,ys)) -> app(cons(x,xs),cons(y,ys))
    merge([](),xs) -> xs
    merge(xs,[]()) -> xs
    merge(cons(x,xs),cons(y,ys)) -> ifmerge(leq(x,y),x,y,xs,ys)
    ifmerge(tt(),x,y,xs,ys) -> cons(x,merge(xs,cons(y,ys)))
    ifmerge(ff(),x,y,xs,ys) -> cons(y,merge(cons(x,xs),ys))
    mergesort(xs) -> mergesort1(split(xs))
    mergesort1(app(xs,ys)) -> merge(mergesort(xs),mergesort(ys))
   graph:
    mergesort1#(app(xs,ys)) -> mergesort#(ys) ->
    mergesort#(xs) -> split#(xs)
    mergesort1#(app(xs,ys)) -> mergesort#(ys) ->
    mergesort#(xs) -> mergesort1#(split(xs))
    mergesort1#(app(xs,ys)) -> mergesort#(xs) ->
    mergesort#(xs) -> split#(xs)
    mergesort1#(app(xs,ys)) -> mergesort#(xs) ->
    mergesort#(xs) -> mergesort1#(split(xs))
    mergesort1#(app(xs,ys)) -> merge#(mergesort(xs),mergesort(ys)) ->
    merge#(cons(x,xs),cons(y,ys)) -> leq#(x,y)
    mergesort1#(app(xs,ys)) -> merge#(mergesort(xs),mergesort(ys)) ->
    merge#(cons(x,xs),cons(y,ys)) -> ifmerge#(leq(x,y),x,y,xs,ys)
    mergesort#(xs) -> mergesort1#(split(xs)) ->
    mergesort1#(app(xs,ys)) -> mergesort#(ys)
    mergesort#(xs) -> mergesort1#(split(xs)) ->
    mergesort1#(app(xs,ys)) -> mergesort#(xs)
    mergesort#(xs) -> mergesort1#(split(xs)) ->
    mergesort1#(app(xs,ys)) -> merge#(mergesort(xs),mergesort(ys))
    mergesort#(xs) -> split#(xs) ->
    split#(cons(x,cons(y,xs))) -> split#(xs)
    mergesort#(xs) -> split#(xs) ->
    split#(cons(x,cons(y,xs))) -> split1#(x,y,split(xs))
    ifmerge#(ff(),x,y,xs,ys) -> merge#(cons(x,xs),ys) ->
    merge#(cons(x,xs),cons(y,ys)) -> leq#(x,y)
    ifmerge#(ff(),x,y,xs,ys) -> merge#(cons(x,xs),ys) ->
    merge#(cons(x,xs),cons(y,ys)) -> ifmerge#(leq(x,y),x,y,xs,ys)
    ifmerge#(tt(),x,y,xs,ys) -> merge#(xs,cons(y,ys)) ->
    merge#(cons(x,xs),cons(y,ys)) -> leq#(x,y)
    ifmerge#(tt(),x,y,xs,ys) -> merge#(xs,cons(y,ys)) ->
    merge#(cons(x,xs),cons(y,ys)) -> ifmerge#(leq(x,y),x,y,xs,ys)
    merge#(cons(x,xs),cons(y,ys)) -> ifmerge#(leq(x,y),x,y,xs,ys) ->
    ifmerge#(tt(),x,y,xs,ys) -> merge#(xs,cons(y,ys))
    merge#(cons(x,xs),cons(y,ys)) -> ifmerge#(leq(x,y),x,y,xs,ys) ->
    ifmerge#(ff(),x,y,xs,ys) -> merge#(cons(x,xs),ys)
    merge#(cons(x,xs),cons(y,ys)) -> leq#(x,y) ->
    leq#(s(x),s(y)) -> leq#(x,y)
    split#(cons(x,cons(y,xs))) -> split#(xs) ->
    split#(cons(x,cons(y,xs))) -> split#(xs)
    split#(cons(x,cons(y,xs))) -> split#(xs) ->
    split#(cons(x,cons(y,xs))) -> split1#(x,y,split(xs))
    leq#(s(x),s(y)) -> leq#(x,y) -> leq#(s(x),s(y)) -> leq#(x,y)
   SCC Processor:
    #sccs: 4
    #rules: 8
    #arcs: 21/144
    DPs:
     mergesort1#(app(xs,ys)) -> mergesort#(ys)
     mergesort#(xs) -> mergesort1#(split(xs))
     mergesort1#(app(xs,ys)) -> mergesort#(xs)
    TRS:
     leq(0(),x) -> tt()
     leq(s(x),0()) -> ff()
     leq(s(x),s(y)) -> leq(x,y)
     split(nil()) -> app(nil(),nil())
     split(cons(x,nil())) -> app(cons(x,nil()),nil())
     split(cons(x,cons(y,xs))) -> split1(x,y,split(xs))
     split1(x,y,app(xs,ys)) -> app(cons(x,xs),cons(y,ys))
     merge([](),xs) -> xs
     merge(xs,[]()) -> xs
     merge(cons(x,xs),cons(y,ys)) -> ifmerge(leq(x,y),x,y,xs,ys)
     ifmerge(tt(),x,y,xs,ys) -> cons(x,merge(xs,cons(y,ys)))
     ifmerge(ff(),x,y,xs,ys) -> cons(y,merge(cons(x,xs),ys))
     mergesort(xs) -> mergesort1(split(xs))
     mergesort1(app(xs,ys)) -> merge(mergesort(xs),mergesort(ys))
    Open
    
    DPs:
     split#(cons(x,cons(y,xs))) -> split#(xs)
    TRS:
     leq(0(),x) -> tt()
     leq(s(x),0()) -> ff()
     leq(s(x),s(y)) -> leq(x,y)
     split(nil()) -> app(nil(),nil())
     split(cons(x,nil())) -> app(cons(x,nil()),nil())
     split(cons(x,cons(y,xs))) -> split1(x,y,split(xs))
     split1(x,y,app(xs,ys)) -> app(cons(x,xs),cons(y,ys))
     merge([](),xs) -> xs
     merge(xs,[]()) -> xs
     merge(cons(x,xs),cons(y,ys)) -> ifmerge(leq(x,y),x,y,xs,ys)
     ifmerge(tt(),x,y,xs,ys) -> cons(x,merge(xs,cons(y,ys)))
     ifmerge(ff(),x,y,xs,ys) -> cons(y,merge(cons(x,xs),ys))
     mergesort(xs) -> mergesort1(split(xs))
     mergesort1(app(xs,ys)) -> merge(mergesort(xs),mergesort(ys))
    Open
    
    DPs:
     merge#(cons(x,xs),cons(y,ys)) -> ifmerge#(leq(x,y),x,y,xs,ys)
     ifmerge#(ff(),x,y,xs,ys) -> merge#(cons(x,xs),ys)
     ifmerge#(tt(),x,y,xs,ys) -> merge#(xs,cons(y,ys))
    TRS:
     leq(0(),x) -> tt()
     leq(s(x),0()) -> ff()
     leq(s(x),s(y)) -> leq(x,y)
     split(nil()) -> app(nil(),nil())
     split(cons(x,nil())) -> app(cons(x,nil()),nil())
     split(cons(x,cons(y,xs))) -> split1(x,y,split(xs))
     split1(x,y,app(xs,ys)) -> app(cons(x,xs),cons(y,ys))
     merge([](),xs) -> xs
     merge(xs,[]()) -> xs
     merge(cons(x,xs),cons(y,ys)) -> ifmerge(leq(x,y),x,y,xs,ys)
     ifmerge(tt(),x,y,xs,ys) -> cons(x,merge(xs,cons(y,ys)))
     ifmerge(ff(),x,y,xs,ys) -> cons(y,merge(cons(x,xs),ys))
     mergesort(xs) -> mergesort1(split(xs))
     mergesort1(app(xs,ys)) -> merge(mergesort(xs),mergesort(ys))
    Open
    
    DPs:
     leq#(s(x),s(y)) -> leq#(x,y)
    TRS:
     leq(0(),x) -> tt()
     leq(s(x),0()) -> ff()
     leq(s(x),s(y)) -> leq(x,y)
     split(nil()) -> app(nil(),nil())
     split(cons(x,nil())) -> app(cons(x,nil()),nil())
     split(cons(x,cons(y,xs))) -> split1(x,y,split(xs))
     split1(x,y,app(xs,ys)) -> app(cons(x,xs),cons(y,ys))
     merge([](),xs) -> xs
     merge(xs,[]()) -> xs
     merge(cons(x,xs),cons(y,ys)) -> ifmerge(leq(x,y),x,y,xs,ys)
     ifmerge(tt(),x,y,xs,ys) -> cons(x,merge(xs,cons(y,ys)))
     ifmerge(ff(),x,y,xs,ys) -> cons(y,merge(cons(x,xs),ys))
     mergesort(xs) -> mergesort1(split(xs))
     mergesort1(app(xs,ys)) -> merge(mergesort(xs),mergesort(ys))
    Open