YES Problem 1: (VAR v_NonEmpty:S L:S M:S N:S X:S Y:S) (RULES app(cons(N:S,L:S),Y:S) -> cons(N:S,app(L:S,Y:S)) app(nil,Y:S) -> Y:S high(N:S,cons(M:S,L:S)) -> ifhigh(le(M:S,N:S),N:S,cons(M:S,L:S)) high(N:S,nil) -> nil ifhigh(ffalse,N:S,cons(M:S,L:S)) -> cons(M:S,high(N:S,L:S)) ifhigh(ttrue,N:S,cons(M:S,L:S)) -> high(N:S,L:S) iflow(ffalse,N:S,cons(M:S,L:S)) -> low(N:S,L:S) iflow(ttrue,N:S,cons(M:S,L:S)) -> cons(M:S,low(N:S,L:S)) le(0,Y:S) -> ttrue le(s(X:S),0) -> ffalse le(s(X:S),s(Y:S)) -> le(X:S,Y:S) low(N:S,cons(M:S,L:S)) -> iflow(le(M:S,N:S),N:S,cons(M:S,L:S)) low(N:S,nil) -> nil quicksort(cons(N:S,L:S)) -> app(quicksort(low(N:S,L:S)),cons(N:S,quicksort(high(N:S,L:S)))) quicksort(nil) -> nil ) Problem 1: Innermost Equivalent Processor: -> Rules: app(cons(N:S,L:S),Y:S) -> cons(N:S,app(L:S,Y:S)) app(nil,Y:S) -> Y:S high(N:S,cons(M:S,L:S)) -> ifhigh(le(M:S,N:S),N:S,cons(M:S,L:S)) high(N:S,nil) -> nil ifhigh(ffalse,N:S,cons(M:S,L:S)) -> cons(M:S,high(N:S,L:S)) ifhigh(ttrue,N:S,cons(M:S,L:S)) -> high(N:S,L:S) iflow(ffalse,N:S,cons(M:S,L:S)) -> low(N:S,L:S) iflow(ttrue,N:S,cons(M:S,L:S)) -> cons(M:S,low(N:S,L:S)) le(0,Y:S) -> ttrue le(s(X:S),0) -> ffalse le(s(X:S),s(Y:S)) -> le(X:S,Y:S) low(N:S,cons(M:S,L:S)) -> iflow(le(M:S,N:S),N:S,cons(M:S,L:S)) low(N:S,nil) -> nil quicksort(cons(N:S,L:S)) -> app(quicksort(low(N:S,L:S)),cons(N:S,quicksort(high(N:S,L:S)))) quicksort(nil) -> nil -> The term rewriting system is non-overlaping or locally confluent overlay system. Therefore, innermost termination implies termination. Problem 1: Dependency Pairs Processor: -> Pairs: APP(cons(N:S,L:S),Y:S) -> APP(L:S,Y:S) HIGH(N:S,cons(M:S,L:S)) -> IFHIGH(le(M:S,N:S),N:S,cons(M:S,L:S)) HIGH(N:S,cons(M:S,L:S)) -> LE(M:S,N:S) IFHIGH(ffalse,N:S,cons(M:S,L:S)) -> HIGH(N:S,L:S) IFHIGH(ttrue,N:S,cons(M:S,L:S)) -> HIGH(N:S,L:S) IFLOW(ffalse,N:S,cons(M:S,L:S)) -> LOW(N:S,L:S) IFLOW(ttrue,N:S,cons(M:S,L:S)) -> LOW(N:S,L:S) LE(s(X:S),s(Y:S)) -> LE(X:S,Y:S) LOW(N:S,cons(M:S,L:S)) -> IFLOW(le(M:S,N:S),N:S,cons(M:S,L:S)) LOW(N:S,cons(M:S,L:S)) -> LE(M:S,N:S) QUICKSORT(cons(N:S,L:S)) -> APP(quicksort(low(N:S,L:S)),cons(N:S,quicksort(high(N:S,L:S)))) QUICKSORT(cons(N:S,L:S)) -> HIGH(N:S,L:S) QUICKSORT(cons(N:S,L:S)) -> LOW(N:S,L:S) QUICKSORT(cons(N:S,L:S)) -> QUICKSORT(high(N:S,L:S)) QUICKSORT(cons(N:S,L:S)) -> QUICKSORT(low(N:S,L:S)) -> Rules: app(cons(N:S,L:S),Y:S) -> cons(N:S,app(L:S,Y:S)) app(nil,Y:S) -> Y:S high(N:S,cons(M:S,L:S)) -> ifhigh(le(M:S,N:S),N:S,cons(M:S,L:S)) high(N:S,nil) -> nil ifhigh(ffalse,N:S,cons(M:S,L:S)) -> cons(M:S,high(N:S,L:S)) ifhigh(ttrue,N:S,cons(M:S,L:S)) -> high(N:S,L:S) iflow(ffalse,N:S,cons(M:S,L:S)) -> low(N:S,L:S) iflow(ttrue,N:S,cons(M:S,L:S)) -> cons(M:S,low(N:S,L:S)) le(0,Y:S) -> ttrue le(s(X:S),0) -> ffalse le(s(X:S),s(Y:S)) -> le(X:S,Y:S) low(N:S,cons(M:S,L:S)) -> iflow(le(M:S,N:S),N:S,cons(M:S,L:S)) low(N:S,nil) -> nil quicksort(cons(N:S,L:S)) -> app(quicksort(low(N:S,L:S)),cons(N:S,quicksort(high(N:S,L:S)))) quicksort(nil) -> nil Problem 1: SCC Processor: -> Pairs: APP(cons(N:S,L:S),Y:S) -> APP(L:S,Y:S) HIGH(N:S,cons(M:S,L:S)) -> IFHIGH(le(M:S,N:S),N:S,cons(M:S,L:S)) HIGH(N:S,cons(M:S,L:S)) -> LE(M:S,N:S) IFHIGH(ffalse,N:S,cons(M:S,L:S)) -> HIGH(N:S,L:S) IFHIGH(ttrue,N:S,cons(M:S,L:S)) -> HIGH(N:S,L:S) IFLOW(ffalse,N:S,cons(M:S,L:S)) -> LOW(N:S,L:S) IFLOW(ttrue,N:S,cons(M:S,L:S)) -> LOW(N:S,L:S) LE(s(X:S),s(Y:S)) -> LE(X:S,Y:S) LOW(N:S,cons(M:S,L:S)) -> IFLOW(le(M:S,N:S),N:S,cons(M:S,L:S)) LOW(N:S,cons(M:S,L:S)) -> LE(M:S,N:S) QUICKSORT(cons(N:S,L:S)) -> APP(quicksort(low(N:S,L:S)),cons(N:S,quicksort(high(N:S,L:S)))) QUICKSORT(cons(N:S,L:S)) -> HIGH(N:S,L:S) QUICKSORT(cons(N:S,L:S)) -> LOW(N:S,L:S) QUICKSORT(cons(N:S,L:S)) -> QUICKSORT(high(N:S,L:S)) QUICKSORT(cons(N:S,L:S)) -> QUICKSORT(low(N:S,L:S)) -> Rules: app(cons(N:S,L:S),Y:S) -> cons(N:S,app(L:S,Y:S)) app(nil,Y:S) -> Y:S high(N:S,cons(M:S,L:S)) -> ifhigh(le(M:S,N:S),N:S,cons(M:S,L:S)) high(N:S,nil) -> nil ifhigh(ffalse,N:S,cons(M:S,L:S)) -> cons(M:S,high(N:S,L:S)) ifhigh(ttrue,N:S,cons(M:S,L:S)) -> high(N:S,L:S) iflow(ffalse,N:S,cons(M:S,L:S)) -> low(N:S,L:S) iflow(ttrue,N:S,cons(M:S,L:S)) -> cons(M:S,low(N:S,L:S)) le(0,Y:S) -> ttrue le(s(X:S),0) -> ffalse le(s(X:S),s(Y:S)) -> le(X:S,Y:S) low(N:S,cons(M:S,L:S)) -> iflow(le(M:S,N:S),N:S,cons(M:S,L:S)) low(N:S,nil) -> nil quicksort(cons(N:S,L:S)) -> app(quicksort(low(N:S,L:S)),cons(N:S,quicksort(high(N:S,L:S)))) quicksort(nil) -> nil ->Strongly Connected Components: ->->Cycle: ->->-> Pairs: LE(s(X:S),s(Y:S)) -> LE(X:S,Y:S) ->->-> Rules: app(cons(N:S,L:S),Y:S) -> cons(N:S,app(L:S,Y:S)) app(nil,Y:S) -> Y:S high(N:S,cons(M:S,L:S)) -> ifhigh(le(M:S,N:S),N:S,cons(M:S,L:S)) high(N:S,nil) -> nil ifhigh(ffalse,N:S,cons(M:S,L:S)) -> cons(M:S,high(N:S,L:S)) ifhigh(ttrue,N:S,cons(M:S,L:S)) -> high(N:S,L:S) iflow(ffalse,N:S,cons(M:S,L:S)) -> low(N:S,L:S) iflow(ttrue,N:S,cons(M:S,L:S)) -> cons(M:S,low(N:S,L:S)) le(0,Y:S) -> ttrue le(s(X:S),0) -> ffalse le(s(X:S),s(Y:S)) -> le(X:S,Y:S) low(N:S,cons(M:S,L:S)) -> iflow(le(M:S,N:S),N:S,cons(M:S,L:S)) low(N:S,nil) -> nil quicksort(cons(N:S,L:S)) -> app(quicksort(low(N:S,L:S)),cons(N:S,quicksort(high(N:S,L:S)))) quicksort(nil) -> nil ->->Cycle: ->->-> Pairs: IFLOW(ffalse,N:S,cons(M:S,L:S)) -> LOW(N:S,L:S) IFLOW(ttrue,N:S,cons(M:S,L:S)) -> LOW(N:S,L:S) LOW(N:S,cons(M:S,L:S)) -> IFLOW(le(M:S,N:S),N:S,cons(M:S,L:S)) ->->-> Rules: app(cons(N:S,L:S),Y:S) -> cons(N:S,app(L:S,Y:S)) app(nil,Y:S) -> Y:S high(N:S,cons(M:S,L:S)) -> ifhigh(le(M:S,N:S),N:S,cons(M:S,L:S)) high(N:S,nil) -> nil ifhigh(ffalse,N:S,cons(M:S,L:S)) -> cons(M:S,high(N:S,L:S)) ifhigh(ttrue,N:S,cons(M:S,L:S)) -> high(N:S,L:S) iflow(ffalse,N:S,cons(M:S,L:S)) -> low(N:S,L:S) iflow(ttrue,N:S,cons(M:S,L:S)) -> cons(M:S,low(N:S,L:S)) le(0,Y:S) -> ttrue le(s(X:S),0) -> ffalse le(s(X:S),s(Y:S)) -> le(X:S,Y:S) low(N:S,cons(M:S,L:S)) -> iflow(le(M:S,N:S),N:S,cons(M:S,L:S)) low(N:S,nil) -> nil quicksort(cons(N:S,L:S)) -> app(quicksort(low(N:S,L:S)),cons(N:S,quicksort(high(N:S,L:S)))) quicksort(nil) -> nil ->->Cycle: ->->-> Pairs: HIGH(N:S,cons(M:S,L:S)) -> IFHIGH(le(M:S,N:S),N:S,cons(M:S,L:S)) IFHIGH(ffalse,N:S,cons(M:S,L:S)) -> HIGH(N:S,L:S) IFHIGH(ttrue,N:S,cons(M:S,L:S)) -> HIGH(N:S,L:S) ->->-> Rules: app(cons(N:S,L:S),Y:S) -> cons(N:S,app(L:S,Y:S)) app(nil,Y:S) -> Y:S high(N:S,cons(M:S,L:S)) -> ifhigh(le(M:S,N:S),N:S,cons(M:S,L:S)) high(N:S,nil) -> nil ifhigh(ffalse,N:S,cons(M:S,L:S)) -> cons(M:S,high(N:S,L:S)) ifhigh(ttrue,N:S,cons(M:S,L:S)) -> high(N:S,L:S) iflow(ffalse,N:S,cons(M:S,L:S)) -> low(N:S,L:S) iflow(ttrue,N:S,cons(M:S,L:S)) -> cons(M:S,low(N:S,L:S)) le(0,Y:S) -> ttrue le(s(X:S),0) -> ffalse le(s(X:S),s(Y:S)) -> le(X:S,Y:S) low(N:S,cons(M:S,L:S)) -> iflow(le(M:S,N:S),N:S,cons(M:S,L:S)) low(N:S,nil) -> nil quicksort(cons(N:S,L:S)) -> app(quicksort(low(N:S,L:S)),cons(N:S,quicksort(high(N:S,L:S)))) quicksort(nil) -> nil ->->Cycle: ->->-> Pairs: APP(cons(N:S,L:S),Y:S) -> APP(L:S,Y:S) ->->-> Rules: app(cons(N:S,L:S),Y:S) -> cons(N:S,app(L:S,Y:S)) app(nil,Y:S) -> Y:S high(N:S,cons(M:S,L:S)) -> ifhigh(le(M:S,N:S),N:S,cons(M:S,L:S)) high(N:S,nil) -> nil ifhigh(ffalse,N:S,cons(M:S,L:S)) -> cons(M:S,high(N:S,L:S)) ifhigh(ttrue,N:S,cons(M:S,L:S)) -> high(N:S,L:S) iflow(ffalse,N:S,cons(M:S,L:S)) -> low(N:S,L:S) iflow(ttrue,N:S,cons(M:S,L:S)) -> cons(M:S,low(N:S,L:S)) le(0,Y:S) -> ttrue le(s(X:S),0) -> ffalse le(s(X:S),s(Y:S)) -> le(X:S,Y:S) low(N:S,cons(M:S,L:S)) -> iflow(le(M:S,N:S),N:S,cons(M:S,L:S)) low(N:S,nil) -> nil quicksort(cons(N:S,L:S)) -> app(quicksort(low(N:S,L:S)),cons(N:S,quicksort(high(N:S,L:S)))) quicksort(nil) -> nil ->->Cycle: ->->-> Pairs: QUICKSORT(cons(N:S,L:S)) -> QUICKSORT(high(N:S,L:S)) QUICKSORT(cons(N:S,L:S)) -> QUICKSORT(low(N:S,L:S)) ->->-> Rules: app(cons(N:S,L:S),Y:S) -> cons(N:S,app(L:S,Y:S)) app(nil,Y:S) -> Y:S high(N:S,cons(M:S,L:S)) -> ifhigh(le(M:S,N:S),N:S,cons(M:S,L:S)) high(N:S,nil) -> nil ifhigh(ffalse,N:S,cons(M:S,L:S)) -> cons(M:S,high(N:S,L:S)) ifhigh(ttrue,N:S,cons(M:S,L:S)) -> high(N:S,L:S) iflow(ffalse,N:S,cons(M:S,L:S)) -> low(N:S,L:S) iflow(ttrue,N:S,cons(M:S,L:S)) -> cons(M:S,low(N:S,L:S)) le(0,Y:S) -> ttrue le(s(X:S),0) -> ffalse le(s(X:S),s(Y:S)) -> le(X:S,Y:S) low(N:S,cons(M:S,L:S)) -> iflow(le(M:S,N:S),N:S,cons(M:S,L:S)) low(N:S,nil) -> nil quicksort(cons(N:S,L:S)) -> app(quicksort(low(N:S,L:S)),cons(N:S,quicksort(high(N:S,L:S)))) quicksort(nil) -> nil The problem is decomposed in 5 subproblems. Problem 1.1: Subterm Processor: -> Pairs: LE(s(X:S),s(Y:S)) -> LE(X:S,Y:S) -> Rules: app(cons(N:S,L:S),Y:S) -> cons(N:S,app(L:S,Y:S)) app(nil,Y:S) -> Y:S high(N:S,cons(M:S,L:S)) -> ifhigh(le(M:S,N:S),N:S,cons(M:S,L:S)) high(N:S,nil) -> nil ifhigh(ffalse,N:S,cons(M:S,L:S)) -> cons(M:S,high(N:S,L:S)) ifhigh(ttrue,N:S,cons(M:S,L:S)) -> high(N:S,L:S) iflow(ffalse,N:S,cons(M:S,L:S)) -> low(N:S,L:S) iflow(ttrue,N:S,cons(M:S,L:S)) -> cons(M:S,low(N:S,L:S)) le(0,Y:S) -> ttrue le(s(X:S),0) -> ffalse le(s(X:S),s(Y:S)) -> le(X:S,Y:S) low(N:S,cons(M:S,L:S)) -> iflow(le(M:S,N:S),N:S,cons(M:S,L:S)) low(N:S,nil) -> nil quicksort(cons(N:S,L:S)) -> app(quicksort(low(N:S,L:S)),cons(N:S,quicksort(high(N:S,L:S)))) quicksort(nil) -> nil ->Projection: pi(LE) = 1 Problem 1.1: SCC Processor: -> Pairs: Empty -> Rules: app(cons(N:S,L:S),Y:S) -> cons(N:S,app(L:S,Y:S)) app(nil,Y:S) -> Y:S high(N:S,cons(M:S,L:S)) -> ifhigh(le(M:S,N:S),N:S,cons(M:S,L:S)) high(N:S,nil) -> nil ifhigh(ffalse,N:S,cons(M:S,L:S)) -> cons(M:S,high(N:S,L:S)) ifhigh(ttrue,N:S,cons(M:S,L:S)) -> high(N:S,L:S) iflow(ffalse,N:S,cons(M:S,L:S)) -> low(N:S,L:S) iflow(ttrue,N:S,cons(M:S,L:S)) -> cons(M:S,low(N:S,L:S)) le(0,Y:S) -> ttrue le(s(X:S),0) -> ffalse le(s(X:S),s(Y:S)) -> le(X:S,Y:S) low(N:S,cons(M:S,L:S)) -> iflow(le(M:S,N:S),N:S,cons(M:S,L:S)) low(N:S,nil) -> nil quicksort(cons(N:S,L:S)) -> app(quicksort(low(N:S,L:S)),cons(N:S,quicksort(high(N:S,L:S)))) quicksort(nil) -> nil ->Strongly Connected Components: There is no strongly connected component The problem is finite. Problem 1.2: Subterm Processor: -> Pairs: IFLOW(ffalse,N:S,cons(M:S,L:S)) -> LOW(N:S,L:S) IFLOW(ttrue,N:S,cons(M:S,L:S)) -> LOW(N:S,L:S) LOW(N:S,cons(M:S,L:S)) -> IFLOW(le(M:S,N:S),N:S,cons(M:S,L:S)) -> Rules: app(cons(N:S,L:S),Y:S) -> cons(N:S,app(L:S,Y:S)) app(nil,Y:S) -> Y:S high(N:S,cons(M:S,L:S)) -> ifhigh(le(M:S,N:S),N:S,cons(M:S,L:S)) high(N:S,nil) -> nil ifhigh(ffalse,N:S,cons(M:S,L:S)) -> cons(M:S,high(N:S,L:S)) ifhigh(ttrue,N:S,cons(M:S,L:S)) -> high(N:S,L:S) iflow(ffalse,N:S,cons(M:S,L:S)) -> low(N:S,L:S) iflow(ttrue,N:S,cons(M:S,L:S)) -> cons(M:S,low(N:S,L:S)) le(0,Y:S) -> ttrue le(s(X:S),0) -> ffalse le(s(X:S),s(Y:S)) -> le(X:S,Y:S) low(N:S,cons(M:S,L:S)) -> iflow(le(M:S,N:S),N:S,cons(M:S,L:S)) low(N:S,nil) -> nil quicksort(cons(N:S,L:S)) -> app(quicksort(low(N:S,L:S)),cons(N:S,quicksort(high(N:S,L:S)))) quicksort(nil) -> nil ->Projection: pi(IFLOW) = 3 pi(LOW) = 2 Problem 1.2: SCC Processor: -> Pairs: LOW(N:S,cons(M:S,L:S)) -> IFLOW(le(M:S,N:S),N:S,cons(M:S,L:S)) -> Rules: app(cons(N:S,L:S),Y:S) -> cons(N:S,app(L:S,Y:S)) app(nil,Y:S) -> Y:S high(N:S,cons(M:S,L:S)) -> ifhigh(le(M:S,N:S),N:S,cons(M:S,L:S)) high(N:S,nil) -> nil ifhigh(ffalse,N:S,cons(M:S,L:S)) -> cons(M:S,high(N:S,L:S)) ifhigh(ttrue,N:S,cons(M:S,L:S)) -> high(N:S,L:S) iflow(ffalse,N:S,cons(M:S,L:S)) -> low(N:S,L:S) iflow(ttrue,N:S,cons(M:S,L:S)) -> cons(M:S,low(N:S,L:S)) le(0,Y:S) -> ttrue le(s(X:S),0) -> ffalse le(s(X:S),s(Y:S)) -> le(X:S,Y:S) low(N:S,cons(M:S,L:S)) -> iflow(le(M:S,N:S),N:S,cons(M:S,L:S)) low(N:S,nil) -> nil quicksort(cons(N:S,L:S)) -> app(quicksort(low(N:S,L:S)),cons(N:S,quicksort(high(N:S,L:S)))) quicksort(nil) -> nil ->Strongly Connected Components: There is no strongly connected component The problem is finite. Problem 1.3: Subterm Processor: -> Pairs: HIGH(N:S,cons(M:S,L:S)) -> IFHIGH(le(M:S,N:S),N:S,cons(M:S,L:S)) IFHIGH(ffalse,N:S,cons(M:S,L:S)) -> HIGH(N:S,L:S) IFHIGH(ttrue,N:S,cons(M:S,L:S)) -> HIGH(N:S,L:S) -> Rules: app(cons(N:S,L:S),Y:S) -> cons(N:S,app(L:S,Y:S)) app(nil,Y:S) -> Y:S high(N:S,cons(M:S,L:S)) -> ifhigh(le(M:S,N:S),N:S,cons(M:S,L:S)) high(N:S,nil) -> nil ifhigh(ffalse,N:S,cons(M:S,L:S)) -> cons(M:S,high(N:S,L:S)) ifhigh(ttrue,N:S,cons(M:S,L:S)) -> high(N:S,L:S) iflow(ffalse,N:S,cons(M:S,L:S)) -> low(N:S,L:S) iflow(ttrue,N:S,cons(M:S,L:S)) -> cons(M:S,low(N:S,L:S)) le(0,Y:S) -> ttrue le(s(X:S),0) -> ffalse le(s(X:S),s(Y:S)) -> le(X:S,Y:S) low(N:S,cons(M:S,L:S)) -> iflow(le(M:S,N:S),N:S,cons(M:S,L:S)) low(N:S,nil) -> nil quicksort(cons(N:S,L:S)) -> app(quicksort(low(N:S,L:S)),cons(N:S,quicksort(high(N:S,L:S)))) quicksort(nil) -> nil ->Projection: pi(HIGH) = 2 pi(IFHIGH) = 3 Problem 1.3: SCC Processor: -> Pairs: HIGH(N:S,cons(M:S,L:S)) -> IFHIGH(le(M:S,N:S),N:S,cons(M:S,L:S)) -> Rules: app(cons(N:S,L:S),Y:S) -> cons(N:S,app(L:S,Y:S)) app(nil,Y:S) -> Y:S high(N:S,cons(M:S,L:S)) -> ifhigh(le(M:S,N:S),N:S,cons(M:S,L:S)) high(N:S,nil) -> nil ifhigh(ffalse,N:S,cons(M:S,L:S)) -> cons(M:S,high(N:S,L:S)) ifhigh(ttrue,N:S,cons(M:S,L:S)) -> high(N:S,L:S) iflow(ffalse,N:S,cons(M:S,L:S)) -> low(N:S,L:S) iflow(ttrue,N:S,cons(M:S,L:S)) -> cons(M:S,low(N:S,L:S)) le(0,Y:S) -> ttrue le(s(X:S),0) -> ffalse le(s(X:S),s(Y:S)) -> le(X:S,Y:S) low(N:S,cons(M:S,L:S)) -> iflow(le(M:S,N:S),N:S,cons(M:S,L:S)) low(N:S,nil) -> nil quicksort(cons(N:S,L:S)) -> app(quicksort(low(N:S,L:S)),cons(N:S,quicksort(high(N:S,L:S)))) quicksort(nil) -> nil ->Strongly Connected Components: There is no strongly connected component The problem is finite. Problem 1.4: Subterm Processor: -> Pairs: APP(cons(N:S,L:S),Y:S) -> APP(L:S,Y:S) -> Rules: app(cons(N:S,L:S),Y:S) -> cons(N:S,app(L:S,Y:S)) app(nil,Y:S) -> Y:S high(N:S,cons(M:S,L:S)) -> ifhigh(le(M:S,N:S),N:S,cons(M:S,L:S)) high(N:S,nil) -> nil ifhigh(ffalse,N:S,cons(M:S,L:S)) -> cons(M:S,high(N:S,L:S)) ifhigh(ttrue,N:S,cons(M:S,L:S)) -> high(N:S,L:S) iflow(ffalse,N:S,cons(M:S,L:S)) -> low(N:S,L:S) iflow(ttrue,N:S,cons(M:S,L:S)) -> cons(M:S,low(N:S,L:S)) le(0,Y:S) -> ttrue le(s(X:S),0) -> ffalse le(s(X:S),s(Y:S)) -> le(X:S,Y:S) low(N:S,cons(M:S,L:S)) -> iflow(le(M:S,N:S),N:S,cons(M:S,L:S)) low(N:S,nil) -> nil quicksort(cons(N:S,L:S)) -> app(quicksort(low(N:S,L:S)),cons(N:S,quicksort(high(N:S,L:S)))) quicksort(nil) -> nil ->Projection: pi(APP) = 1 Problem 1.4: SCC Processor: -> Pairs: Empty -> Rules: app(cons(N:S,L:S),Y:S) -> cons(N:S,app(L:S,Y:S)) app(nil,Y:S) -> Y:S high(N:S,cons(M:S,L:S)) -> ifhigh(le(M:S,N:S),N:S,cons(M:S,L:S)) high(N:S,nil) -> nil ifhigh(ffalse,N:S,cons(M:S,L:S)) -> cons(M:S,high(N:S,L:S)) ifhigh(ttrue,N:S,cons(M:S,L:S)) -> high(N:S,L:S) iflow(ffalse,N:S,cons(M:S,L:S)) -> low(N:S,L:S) iflow(ttrue,N:S,cons(M:S,L:S)) -> cons(M:S,low(N:S,L:S)) le(0,Y:S) -> ttrue le(s(X:S),0) -> ffalse le(s(X:S),s(Y:S)) -> le(X:S,Y:S) low(N:S,cons(M:S,L:S)) -> iflow(le(M:S,N:S),N:S,cons(M:S,L:S)) low(N:S,nil) -> nil quicksort(cons(N:S,L:S)) -> app(quicksort(low(N:S,L:S)),cons(N:S,quicksort(high(N:S,L:S)))) quicksort(nil) -> nil ->Strongly Connected Components: There is no strongly connected component The problem is finite. Problem 1.5: Reduction Pairs Processor: -> Pairs: QUICKSORT(cons(N:S,L:S)) -> QUICKSORT(high(N:S,L:S)) QUICKSORT(cons(N:S,L:S)) -> QUICKSORT(low(N:S,L:S)) -> Rules: app(cons(N:S,L:S),Y:S) -> cons(N:S,app(L:S,Y:S)) app(nil,Y:S) -> Y:S high(N:S,cons(M:S,L:S)) -> ifhigh(le(M:S,N:S),N:S,cons(M:S,L:S)) high(N:S,nil) -> nil ifhigh(ffalse,N:S,cons(M:S,L:S)) -> cons(M:S,high(N:S,L:S)) ifhigh(ttrue,N:S,cons(M:S,L:S)) -> high(N:S,L:S) iflow(ffalse,N:S,cons(M:S,L:S)) -> low(N:S,L:S) iflow(ttrue,N:S,cons(M:S,L:S)) -> cons(M:S,low(N:S,L:S)) le(0,Y:S) -> ttrue le(s(X:S),0) -> ffalse le(s(X:S),s(Y:S)) -> le(X:S,Y:S) low(N:S,cons(M:S,L:S)) -> iflow(le(M:S,N:S),N:S,cons(M:S,L:S)) low(N:S,nil) -> nil quicksort(cons(N:S,L:S)) -> app(quicksort(low(N:S,L:S)),cons(N:S,quicksort(high(N:S,L:S)))) quicksort(nil) -> nil -> Usable rules: high(N:S,cons(M:S,L:S)) -> ifhigh(le(M:S,N:S),N:S,cons(M:S,L:S)) high(N:S,nil) -> nil ifhigh(ffalse,N:S,cons(M:S,L:S)) -> cons(M:S,high(N:S,L:S)) ifhigh(ttrue,N:S,cons(M:S,L:S)) -> high(N:S,L:S) iflow(ffalse,N:S,cons(M:S,L:S)) -> low(N:S,L:S) iflow(ttrue,N:S,cons(M:S,L:S)) -> cons(M:S,low(N:S,L:S)) le(0,Y:S) -> ttrue le(s(X:S),0) -> ffalse le(s(X:S),s(Y:S)) -> le(X:S,Y:S) low(N:S,cons(M:S,L:S)) -> iflow(le(M:S,N:S),N:S,cons(M:S,L:S)) low(N:S,nil) -> nil ->Interpretation type: Linear ->Coefficients: Natural Numbers ->Dimension: 1 ->Bound: 2 ->Interpretation: [app](X1,X2) = 0 [high](X1,X2) = 2.X2 + 1 [ifhigh](X1,X2,X3) = 2.X3 [iflow](X1,X2,X3) = 2.X3 + 1 [le](X1,X2) = X1 + 2.X2 + 2 [low](X1,X2) = 2.X2 + 1 [quicksort](X) = 0 [0] = 2 [cons](X1,X2) = 2.X1 + 2.X2 + 2 [fSNonEmpty] = 0 [false] = 2 [nil] = 2 [s](X) = 2.X + 2 [true] = 2 [APP](X1,X2) = 0 [HIGH](X1,X2) = 0 [IFHIGH](X1,X2,X3) = 0 [IFLOW](X1,X2,X3) = 0 [LE](X1,X2) = 0 [LOW](X1,X2) = 0 [QUICKSORT](X) = 2.X Problem 1.5: SCC Processor: -> Pairs: QUICKSORT(cons(N:S,L:S)) -> QUICKSORT(low(N:S,L:S)) -> Rules: app(cons(N:S,L:S),Y:S) -> cons(N:S,app(L:S,Y:S)) app(nil,Y:S) -> Y:S high(N:S,cons(M:S,L:S)) -> ifhigh(le(M:S,N:S),N:S,cons(M:S,L:S)) high(N:S,nil) -> nil ifhigh(ffalse,N:S,cons(M:S,L:S)) -> cons(M:S,high(N:S,L:S)) ifhigh(ttrue,N:S,cons(M:S,L:S)) -> high(N:S,L:S) iflow(ffalse,N:S,cons(M:S,L:S)) -> low(N:S,L:S) iflow(ttrue,N:S,cons(M:S,L:S)) -> cons(M:S,low(N:S,L:S)) le(0,Y:S) -> ttrue le(s(X:S),0) -> ffalse le(s(X:S),s(Y:S)) -> le(X:S,Y:S) low(N:S,cons(M:S,L:S)) -> iflow(le(M:S,N:S),N:S,cons(M:S,L:S)) low(N:S,nil) -> nil quicksort(cons(N:S,L:S)) -> app(quicksort(low(N:S,L:S)),cons(N:S,quicksort(high(N:S,L:S)))) quicksort(nil) -> nil ->Strongly Connected Components: ->->Cycle: ->->-> Pairs: QUICKSORT(cons(N:S,L:S)) -> QUICKSORT(low(N:S,L:S)) ->->-> Rules: app(cons(N:S,L:S),Y:S) -> cons(N:S,app(L:S,Y:S)) app(nil,Y:S) -> Y:S high(N:S,cons(M:S,L:S)) -> ifhigh(le(M:S,N:S),N:S,cons(M:S,L:S)) high(N:S,nil) -> nil ifhigh(ffalse,N:S,cons(M:S,L:S)) -> cons(M:S,high(N:S,L:S)) ifhigh(ttrue,N:S,cons(M:S,L:S)) -> high(N:S,L:S) iflow(ffalse,N:S,cons(M:S,L:S)) -> low(N:S,L:S) iflow(ttrue,N:S,cons(M:S,L:S)) -> cons(M:S,low(N:S,L:S)) le(0,Y:S) -> ttrue le(s(X:S),0) -> ffalse le(s(X:S),s(Y:S)) -> le(X:S,Y:S) low(N:S,cons(M:S,L:S)) -> iflow(le(M:S,N:S),N:S,cons(M:S,L:S)) low(N:S,nil) -> nil quicksort(cons(N:S,L:S)) -> app(quicksort(low(N:S,L:S)),cons(N:S,quicksort(high(N:S,L:S)))) quicksort(nil) -> nil Problem 1.5: Reduction Pairs Processor: -> Pairs: QUICKSORT(cons(N:S,L:S)) -> QUICKSORT(low(N:S,L:S)) -> Rules: app(cons(N:S,L:S),Y:S) -> cons(N:S,app(L:S,Y:S)) app(nil,Y:S) -> Y:S high(N:S,cons(M:S,L:S)) -> ifhigh(le(M:S,N:S),N:S,cons(M:S,L:S)) high(N:S,nil) -> nil ifhigh(ffalse,N:S,cons(M:S,L:S)) -> cons(M:S,high(N:S,L:S)) ifhigh(ttrue,N:S,cons(M:S,L:S)) -> high(N:S,L:S) iflow(ffalse,N:S,cons(M:S,L:S)) -> low(N:S,L:S) iflow(ttrue,N:S,cons(M:S,L:S)) -> cons(M:S,low(N:S,L:S)) le(0,Y:S) -> ttrue le(s(X:S),0) -> ffalse le(s(X:S),s(Y:S)) -> le(X:S,Y:S) low(N:S,cons(M:S,L:S)) -> iflow(le(M:S,N:S),N:S,cons(M:S,L:S)) low(N:S,nil) -> nil quicksort(cons(N:S,L:S)) -> app(quicksort(low(N:S,L:S)),cons(N:S,quicksort(high(N:S,L:S)))) quicksort(nil) -> nil -> Usable rules: iflow(ffalse,N:S,cons(M:S,L:S)) -> low(N:S,L:S) iflow(ttrue,N:S,cons(M:S,L:S)) -> cons(M:S,low(N:S,L:S)) le(0,Y:S) -> ttrue le(s(X:S),0) -> ffalse le(s(X:S),s(Y:S)) -> le(X:S,Y:S) low(N:S,cons(M:S,L:S)) -> iflow(le(M:S,N:S),N:S,cons(M:S,L:S)) low(N:S,nil) -> nil ->Interpretation type: Linear ->Coefficients: Natural Numbers ->Dimension: 1 ->Bound: 2 ->Interpretation: [app](X1,X2) = 0 [high](X1,X2) = 0 [ifhigh](X1,X2,X3) = 0 [iflow](X1,X2,X3) = 2.X3 + 1 [le](X1,X2) = 2.X1 + 2.X2 + 2 [low](X1,X2) = 2.X2 + 1 [quicksort](X) = 0 [0] = 1 [cons](X1,X2) = 2.X1 + 2.X2 + 2 [fSNonEmpty] = 0 [false] = 0 [nil] = 2 [s](X) = 2.X [true] = 0 [APP](X1,X2) = 0 [HIGH](X1,X2) = 0 [IFHIGH](X1,X2,X3) = 0 [IFLOW](X1,X2,X3) = 0 [LE](X1,X2) = 0 [LOW](X1,X2) = 0 [QUICKSORT](X) = 2.X Problem 1.5: SCC Processor: -> Pairs: Empty -> Rules: app(cons(N:S,L:S),Y:S) -> cons(N:S,app(L:S,Y:S)) app(nil,Y:S) -> Y:S high(N:S,cons(M:S,L:S)) -> ifhigh(le(M:S,N:S),N:S,cons(M:S,L:S)) high(N:S,nil) -> nil ifhigh(ffalse,N:S,cons(M:S,L:S)) -> cons(M:S,high(N:S,L:S)) ifhigh(ttrue,N:S,cons(M:S,L:S)) -> high(N:S,L:S) iflow(ffalse,N:S,cons(M:S,L:S)) -> low(N:S,L:S) iflow(ttrue,N:S,cons(M:S,L:S)) -> cons(M:S,low(N:S,L:S)) le(0,Y:S) -> ttrue le(s(X:S),0) -> ffalse le(s(X:S),s(Y:S)) -> le(X:S,Y:S) low(N:S,cons(M:S,L:S)) -> iflow(le(M:S,N:S),N:S,cons(M:S,L:S)) low(N:S,nil) -> nil quicksort(cons(N:S,L:S)) -> app(quicksort(low(N:S,L:S)),cons(N:S,quicksort(high(N:S,L:S)))) quicksort(nil) -> nil ->Strongly Connected Components: There is no strongly connected component The problem is finite.