YES Problem 1: (VAR v_NonEmpty:S x:S y:S z:S) (RULES greaters(x:S,.(y:S,z:S)) -> if(<=(y:S,x:S),greaters(x:S,z:S),.(y:S,greaters(x:S,z:S))) greaters(x:S,nil) -> nil lowers(x:S,.(y:S,z:S)) -> if(<=(y:S,x:S),.(y:S,lowers(x:S,z:S)),lowers(x:S,z:S)) lowers(x:S,nil) -> nil qsort(.(x:S,y:S)) -> ++(qsort(lowers(x:S,y:S)),.(x:S,qsort(greaters(x:S,y:S)))) qsort(nil) -> nil ) Problem 1: Innermost Equivalent Processor: -> Rules: greaters(x:S,.(y:S,z:S)) -> if(<=(y:S,x:S),greaters(x:S,z:S),.(y:S,greaters(x:S,z:S))) greaters(x:S,nil) -> nil lowers(x:S,.(y:S,z:S)) -> if(<=(y:S,x:S),.(y:S,lowers(x:S,z:S)),lowers(x:S,z:S)) lowers(x:S,nil) -> nil qsort(.(x:S,y:S)) -> ++(qsort(lowers(x:S,y:S)),.(x:S,qsort(greaters(x:S,y:S)))) qsort(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: GREATERS(x:S,.(y:S,z:S)) -> GREATERS(x:S,z:S) LOWERS(x:S,.(y:S,z:S)) -> LOWERS(x:S,z:S) QSORT(.(x:S,y:S)) -> GREATERS(x:S,y:S) QSORT(.(x:S,y:S)) -> LOWERS(x:S,y:S) QSORT(.(x:S,y:S)) -> QSORT(greaters(x:S,y:S)) QSORT(.(x:S,y:S)) -> QSORT(lowers(x:S,y:S)) -> Rules: greaters(x:S,.(y:S,z:S)) -> if(<=(y:S,x:S),greaters(x:S,z:S),.(y:S,greaters(x:S,z:S))) greaters(x:S,nil) -> nil lowers(x:S,.(y:S,z:S)) -> if(<=(y:S,x:S),.(y:S,lowers(x:S,z:S)),lowers(x:S,z:S)) lowers(x:S,nil) -> nil qsort(.(x:S,y:S)) -> ++(qsort(lowers(x:S,y:S)),.(x:S,qsort(greaters(x:S,y:S)))) qsort(nil) -> nil Problem 1: SCC Processor: -> Pairs: GREATERS(x:S,.(y:S,z:S)) -> GREATERS(x:S,z:S) LOWERS(x:S,.(y:S,z:S)) -> LOWERS(x:S,z:S) QSORT(.(x:S,y:S)) -> GREATERS(x:S,y:S) QSORT(.(x:S,y:S)) -> LOWERS(x:S,y:S) QSORT(.(x:S,y:S)) -> QSORT(greaters(x:S,y:S)) QSORT(.(x:S,y:S)) -> QSORT(lowers(x:S,y:S)) -> Rules: greaters(x:S,.(y:S,z:S)) -> if(<=(y:S,x:S),greaters(x:S,z:S),.(y:S,greaters(x:S,z:S))) greaters(x:S,nil) -> nil lowers(x:S,.(y:S,z:S)) -> if(<=(y:S,x:S),.(y:S,lowers(x:S,z:S)),lowers(x:S,z:S)) lowers(x:S,nil) -> nil qsort(.(x:S,y:S)) -> ++(qsort(lowers(x:S,y:S)),.(x:S,qsort(greaters(x:S,y:S)))) qsort(nil) -> nil ->Strongly Connected Components: ->->Cycle: ->->-> Pairs: LOWERS(x:S,.(y:S,z:S)) -> LOWERS(x:S,z:S) ->->-> Rules: greaters(x:S,.(y:S,z:S)) -> if(<=(y:S,x:S),greaters(x:S,z:S),.(y:S,greaters(x:S,z:S))) greaters(x:S,nil) -> nil lowers(x:S,.(y:S,z:S)) -> if(<=(y:S,x:S),.(y:S,lowers(x:S,z:S)),lowers(x:S,z:S)) lowers(x:S,nil) -> nil qsort(.(x:S,y:S)) -> ++(qsort(lowers(x:S,y:S)),.(x:S,qsort(greaters(x:S,y:S)))) qsort(nil) -> nil ->->Cycle: ->->-> Pairs: GREATERS(x:S,.(y:S,z:S)) -> GREATERS(x:S,z:S) ->->-> Rules: greaters(x:S,.(y:S,z:S)) -> if(<=(y:S,x:S),greaters(x:S,z:S),.(y:S,greaters(x:S,z:S))) greaters(x:S,nil) -> nil lowers(x:S,.(y:S,z:S)) -> if(<=(y:S,x:S),.(y:S,lowers(x:S,z:S)),lowers(x:S,z:S)) lowers(x:S,nil) -> nil qsort(.(x:S,y:S)) -> ++(qsort(lowers(x:S,y:S)),.(x:S,qsort(greaters(x:S,y:S)))) qsort(nil) -> nil ->->Cycle: ->->-> Pairs: QSORT(.(x:S,y:S)) -> QSORT(greaters(x:S,y:S)) QSORT(.(x:S,y:S)) -> QSORT(lowers(x:S,y:S)) ->->-> Rules: greaters(x:S,.(y:S,z:S)) -> if(<=(y:S,x:S),greaters(x:S,z:S),.(y:S,greaters(x:S,z:S))) greaters(x:S,nil) -> nil lowers(x:S,.(y:S,z:S)) -> if(<=(y:S,x:S),.(y:S,lowers(x:S,z:S)),lowers(x:S,z:S)) lowers(x:S,nil) -> nil qsort(.(x:S,y:S)) -> ++(qsort(lowers(x:S,y:S)),.(x:S,qsort(greaters(x:S,y:S)))) qsort(nil) -> nil The problem is decomposed in 3 subproblems. Problem 1.1: Subterm Processor: -> Pairs: LOWERS(x:S,.(y:S,z:S)) -> LOWERS(x:S,z:S) -> Rules: greaters(x:S,.(y:S,z:S)) -> if(<=(y:S,x:S),greaters(x:S,z:S),.(y:S,greaters(x:S,z:S))) greaters(x:S,nil) -> nil lowers(x:S,.(y:S,z:S)) -> if(<=(y:S,x:S),.(y:S,lowers(x:S,z:S)),lowers(x:S,z:S)) lowers(x:S,nil) -> nil qsort(.(x:S,y:S)) -> ++(qsort(lowers(x:S,y:S)),.(x:S,qsort(greaters(x:S,y:S)))) qsort(nil) -> nil ->Projection: pi(LOWERS) = 2 Problem 1.1: SCC Processor: -> Pairs: Empty -> Rules: greaters(x:S,.(y:S,z:S)) -> if(<=(y:S,x:S),greaters(x:S,z:S),.(y:S,greaters(x:S,z:S))) greaters(x:S,nil) -> nil lowers(x:S,.(y:S,z:S)) -> if(<=(y:S,x:S),.(y:S,lowers(x:S,z:S)),lowers(x:S,z:S)) lowers(x:S,nil) -> nil qsort(.(x:S,y:S)) -> ++(qsort(lowers(x:S,y:S)),.(x:S,qsort(greaters(x:S,y:S)))) qsort(nil) -> nil ->Strongly Connected Components: There is no strongly connected component The problem is finite. Problem 1.2: Subterm Processor: -> Pairs: GREATERS(x:S,.(y:S,z:S)) -> GREATERS(x:S,z:S) -> Rules: greaters(x:S,.(y:S,z:S)) -> if(<=(y:S,x:S),greaters(x:S,z:S),.(y:S,greaters(x:S,z:S))) greaters(x:S,nil) -> nil lowers(x:S,.(y:S,z:S)) -> if(<=(y:S,x:S),.(y:S,lowers(x:S,z:S)),lowers(x:S,z:S)) lowers(x:S,nil) -> nil qsort(.(x:S,y:S)) -> ++(qsort(lowers(x:S,y:S)),.(x:S,qsort(greaters(x:S,y:S)))) qsort(nil) -> nil ->Projection: pi(GREATERS) = 2 Problem 1.2: SCC Processor: -> Pairs: Empty -> Rules: greaters(x:S,.(y:S,z:S)) -> if(<=(y:S,x:S),greaters(x:S,z:S),.(y:S,greaters(x:S,z:S))) greaters(x:S,nil) -> nil lowers(x:S,.(y:S,z:S)) -> if(<=(y:S,x:S),.(y:S,lowers(x:S,z:S)),lowers(x:S,z:S)) lowers(x:S,nil) -> nil qsort(.(x:S,y:S)) -> ++(qsort(lowers(x:S,y:S)),.(x:S,qsort(greaters(x:S,y:S)))) qsort(nil) -> nil ->Strongly Connected Components: There is no strongly connected component The problem is finite. Problem 1.3: Reduction Pairs Processor: -> Pairs: QSORT(.(x:S,y:S)) -> QSORT(greaters(x:S,y:S)) QSORT(.(x:S,y:S)) -> QSORT(lowers(x:S,y:S)) -> Rules: greaters(x:S,.(y:S,z:S)) -> if(<=(y:S,x:S),greaters(x:S,z:S),.(y:S,greaters(x:S,z:S))) greaters(x:S,nil) -> nil lowers(x:S,.(y:S,z:S)) -> if(<=(y:S,x:S),.(y:S,lowers(x:S,z:S)),lowers(x:S,z:S)) lowers(x:S,nil) -> nil qsort(.(x:S,y:S)) -> ++(qsort(lowers(x:S,y:S)),.(x:S,qsort(greaters(x:S,y:S)))) qsort(nil) -> nil -> Usable rules: greaters(x:S,.(y:S,z:S)) -> if(<=(y:S,x:S),greaters(x:S,z:S),.(y:S,greaters(x:S,z:S))) greaters(x:S,nil) -> nil lowers(x:S,.(y:S,z:S)) -> if(<=(y:S,x:S),.(y:S,lowers(x:S,z:S)),lowers(x:S,z:S)) lowers(x:S,nil) -> nil ->Interpretation type: Linear ->Coefficients: Natural Numbers ->Dimension: 1 ->Bound: 2 ->Interpretation: [greaters](X1,X2) = 2.X2 [lowers](X1,X2) = 2.X1 + X2 + 1 [qsort](X) = 0 [++](X1,X2) = 0 [.](X1,X2) = 2.X1 + 2.X2 + 2 [<=](X1,X2) = 0 [fSNonEmpty] = 0 [if](X1,X2,X3) = X3 + 2 [nil] = 2 [GREATERS](X1,X2) = 0 [LOWERS](X1,X2) = 0 [QSORT](X) = 2.X Problem 1.3: SCC Processor: -> Pairs: QSORT(.(x:S,y:S)) -> QSORT(lowers(x:S,y:S)) -> Rules: greaters(x:S,.(y:S,z:S)) -> if(<=(y:S,x:S),greaters(x:S,z:S),.(y:S,greaters(x:S,z:S))) greaters(x:S,nil) -> nil lowers(x:S,.(y:S,z:S)) -> if(<=(y:S,x:S),.(y:S,lowers(x:S,z:S)),lowers(x:S,z:S)) lowers(x:S,nil) -> nil qsort(.(x:S,y:S)) -> ++(qsort(lowers(x:S,y:S)),.(x:S,qsort(greaters(x:S,y:S)))) qsort(nil) -> nil ->Strongly Connected Components: ->->Cycle: ->->-> Pairs: QSORT(.(x:S,y:S)) -> QSORT(lowers(x:S,y:S)) ->->-> Rules: greaters(x:S,.(y:S,z:S)) -> if(<=(y:S,x:S),greaters(x:S,z:S),.(y:S,greaters(x:S,z:S))) greaters(x:S,nil) -> nil lowers(x:S,.(y:S,z:S)) -> if(<=(y:S,x:S),.(y:S,lowers(x:S,z:S)),lowers(x:S,z:S)) lowers(x:S,nil) -> nil qsort(.(x:S,y:S)) -> ++(qsort(lowers(x:S,y:S)),.(x:S,qsort(greaters(x:S,y:S)))) qsort(nil) -> nil Problem 1.3: Reduction Pairs Processor: -> Pairs: QSORT(.(x:S,y:S)) -> QSORT(lowers(x:S,y:S)) -> Rules: greaters(x:S,.(y:S,z:S)) -> if(<=(y:S,x:S),greaters(x:S,z:S),.(y:S,greaters(x:S,z:S))) greaters(x:S,nil) -> nil lowers(x:S,.(y:S,z:S)) -> if(<=(y:S,x:S),.(y:S,lowers(x:S,z:S)),lowers(x:S,z:S)) lowers(x:S,nil) -> nil qsort(.(x:S,y:S)) -> ++(qsort(lowers(x:S,y:S)),.(x:S,qsort(greaters(x:S,y:S)))) qsort(nil) -> nil -> Usable rules: lowers(x:S,.(y:S,z:S)) -> if(<=(y:S,x:S),.(y:S,lowers(x:S,z:S)),lowers(x:S,z:S)) lowers(x:S,nil) -> nil ->Interpretation type: Linear ->Coefficients: Natural Numbers ->Dimension: 1 ->Bound: 2 ->Interpretation: [greaters](X1,X2) = 0 [lowers](X1,X2) = X1 + 2.X2 + 1 [qsort](X) = 0 [++](X1,X2) = 0 [.](X1,X2) = 2.X1 + 2.X2 + 2 [<=](X1,X2) = 2.X1 [fSNonEmpty] = 0 [if](X1,X2,X3) = 2.X1 + X3 + 1 [nil] = 1 [GREATERS](X1,X2) = 0 [LOWERS](X1,X2) = 0 [QSORT](X) = 2.X Problem 1.3: SCC Processor: -> Pairs: Empty -> Rules: greaters(x:S,.(y:S,z:S)) -> if(<=(y:S,x:S),greaters(x:S,z:S),.(y:S,greaters(x:S,z:S))) greaters(x:S,nil) -> nil lowers(x:S,.(y:S,z:S)) -> if(<=(y:S,x:S),.(y:S,lowers(x:S,z:S)),lowers(x:S,z:S)) lowers(x:S,nil) -> nil qsort(.(x:S,y:S)) -> ++(qsort(lowers(x:S,y:S)),.(x:S,qsort(greaters(x:S,y:S)))) qsort(nil) -> nil ->Strongly Connected Components: There is no strongly connected component The problem is finite.