YES Problem 1: (VAR v_NonEmpty:S M:S N:S X:S Y:S Z:S) (RULES append(add(N:S,X:S),Y:S) -> add(N:S,append(X:S,Y:S)) append(nil,Y:S) -> Y:S f_1(pair(X:S,Z:S),N:S,M:S,Y:S) -> f_2(lt(N:S,M:S),N:S,M:S,Y:S,X:S,Z:S) f_2(ffalse,N:S,M:S,Y:S,X:S,Z:S) -> pair(add(M:S,X:S),Z:S) f_2(ttrue,N:S,M:S,Y:S,X:S,Z:S) -> pair(X:S,add(M:S,Z:S)) f_3(pair(Y:S,Z:S),N:S,X:S) -> append(qsort(Y:S),add(X:S,qsort(Z:S))) lt(0,s(X:S)) -> ttrue lt(s(X:S),0) -> ffalse lt(s(X:S),s(Y:S)) -> lt(X:S,Y:S) qsort(add(N:S,X:S)) -> f_3(split(N:S,X:S),N:S,X:S) qsort(nil) -> nil split(N:S,add(M:S,Y:S)) -> f_1(split(N:S,Y:S),N:S,M:S,Y:S) split(N:S,nil) -> pair(nil,nil) ) Problem 1: Innermost Equivalent Processor: -> Rules: append(add(N:S,X:S),Y:S) -> add(N:S,append(X:S,Y:S)) append(nil,Y:S) -> Y:S f_1(pair(X:S,Z:S),N:S,M:S,Y:S) -> f_2(lt(N:S,M:S),N:S,M:S,Y:S,X:S,Z:S) f_2(ffalse,N:S,M:S,Y:S,X:S,Z:S) -> pair(add(M:S,X:S),Z:S) f_2(ttrue,N:S,M:S,Y:S,X:S,Z:S) -> pair(X:S,add(M:S,Z:S)) f_3(pair(Y:S,Z:S),N:S,X:S) -> append(qsort(Y:S),add(X:S,qsort(Z:S))) lt(0,s(X:S)) -> ttrue lt(s(X:S),0) -> ffalse lt(s(X:S),s(Y:S)) -> lt(X:S,Y:S) qsort(add(N:S,X:S)) -> f_3(split(N:S,X:S),N:S,X:S) qsort(nil) -> nil split(N:S,add(M:S,Y:S)) -> f_1(split(N:S,Y:S),N:S,M:S,Y:S) split(N:S,nil) -> pair(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: APPEND(add(N:S,X:S),Y:S) -> APPEND(X:S,Y:S) F_1(pair(X:S,Z:S),N:S,M:S,Y:S) -> F_2(lt(N:S,M:S),N:S,M:S,Y:S,X:S,Z:S) F_1(pair(X:S,Z:S),N:S,M:S,Y:S) -> LT(N:S,M:S) F_3(pair(Y:S,Z:S),N:S,X:S) -> APPEND(qsort(Y:S),add(X:S,qsort(Z:S))) F_3(pair(Y:S,Z:S),N:S,X:S) -> QSORT(Y:S) F_3(pair(Y:S,Z:S),N:S,X:S) -> QSORT(Z:S) LT(s(X:S),s(Y:S)) -> LT(X:S,Y:S) QSORT(add(N:S,X:S)) -> F_3(split(N:S,X:S),N:S,X:S) QSORT(add(N:S,X:S)) -> SPLIT(N:S,X:S) SPLIT(N:S,add(M:S,Y:S)) -> F_1(split(N:S,Y:S),N:S,M:S,Y:S) SPLIT(N:S,add(M:S,Y:S)) -> SPLIT(N:S,Y:S) -> Rules: append(add(N:S,X:S),Y:S) -> add(N:S,append(X:S,Y:S)) append(nil,Y:S) -> Y:S f_1(pair(X:S,Z:S),N:S,M:S,Y:S) -> f_2(lt(N:S,M:S),N:S,M:S,Y:S,X:S,Z:S) f_2(ffalse,N:S,M:S,Y:S,X:S,Z:S) -> pair(add(M:S,X:S),Z:S) f_2(ttrue,N:S,M:S,Y:S,X:S,Z:S) -> pair(X:S,add(M:S,Z:S)) f_3(pair(Y:S,Z:S),N:S,X:S) -> append(qsort(Y:S),add(X:S,qsort(Z:S))) lt(0,s(X:S)) -> ttrue lt(s(X:S),0) -> ffalse lt(s(X:S),s(Y:S)) -> lt(X:S,Y:S) qsort(add(N:S,X:S)) -> f_3(split(N:S,X:S),N:S,X:S) qsort(nil) -> nil split(N:S,add(M:S,Y:S)) -> f_1(split(N:S,Y:S),N:S,M:S,Y:S) split(N:S,nil) -> pair(nil,nil) Problem 1: SCC Processor: -> Pairs: APPEND(add(N:S,X:S),Y:S) -> APPEND(X:S,Y:S) F_1(pair(X:S,Z:S),N:S,M:S,Y:S) -> F_2(lt(N:S,M:S),N:S,M:S,Y:S,X:S,Z:S) F_1(pair(X:S,Z:S),N:S,M:S,Y:S) -> LT(N:S,M:S) F_3(pair(Y:S,Z:S),N:S,X:S) -> APPEND(qsort(Y:S),add(X:S,qsort(Z:S))) F_3(pair(Y:S,Z:S),N:S,X:S) -> QSORT(Y:S) F_3(pair(Y:S,Z:S),N:S,X:S) -> QSORT(Z:S) LT(s(X:S),s(Y:S)) -> LT(X:S,Y:S) QSORT(add(N:S,X:S)) -> F_3(split(N:S,X:S),N:S,X:S) QSORT(add(N:S,X:S)) -> SPLIT(N:S,X:S) SPLIT(N:S,add(M:S,Y:S)) -> F_1(split(N:S,Y:S),N:S,M:S,Y:S) SPLIT(N:S,add(M:S,Y:S)) -> SPLIT(N:S,Y:S) -> Rules: append(add(N:S,X:S),Y:S) -> add(N:S,append(X:S,Y:S)) append(nil,Y:S) -> Y:S f_1(pair(X:S,Z:S),N:S,M:S,Y:S) -> f_2(lt(N:S,M:S),N:S,M:S,Y:S,X:S,Z:S) f_2(ffalse,N:S,M:S,Y:S,X:S,Z:S) -> pair(add(M:S,X:S),Z:S) f_2(ttrue,N:S,M:S,Y:S,X:S,Z:S) -> pair(X:S,add(M:S,Z:S)) f_3(pair(Y:S,Z:S),N:S,X:S) -> append(qsort(Y:S),add(X:S,qsort(Z:S))) lt(0,s(X:S)) -> ttrue lt(s(X:S),0) -> ffalse lt(s(X:S),s(Y:S)) -> lt(X:S,Y:S) qsort(add(N:S,X:S)) -> f_3(split(N:S,X:S),N:S,X:S) qsort(nil) -> nil split(N:S,add(M:S,Y:S)) -> f_1(split(N:S,Y:S),N:S,M:S,Y:S) split(N:S,nil) -> pair(nil,nil) ->Strongly Connected Components: ->->Cycle: ->->-> Pairs: LT(s(X:S),s(Y:S)) -> LT(X:S,Y:S) ->->-> Rules: append(add(N:S,X:S),Y:S) -> add(N:S,append(X:S,Y:S)) append(nil,Y:S) -> Y:S f_1(pair(X:S,Z:S),N:S,M:S,Y:S) -> f_2(lt(N:S,M:S),N:S,M:S,Y:S,X:S,Z:S) f_2(ffalse,N:S,M:S,Y:S,X:S,Z:S) -> pair(add(M:S,X:S),Z:S) f_2(ttrue,N:S,M:S,Y:S,X:S,Z:S) -> pair(X:S,add(M:S,Z:S)) f_3(pair(Y:S,Z:S),N:S,X:S) -> append(qsort(Y:S),add(X:S,qsort(Z:S))) lt(0,s(X:S)) -> ttrue lt(s(X:S),0) -> ffalse lt(s(X:S),s(Y:S)) -> lt(X:S,Y:S) qsort(add(N:S,X:S)) -> f_3(split(N:S,X:S),N:S,X:S) qsort(nil) -> nil split(N:S,add(M:S,Y:S)) -> f_1(split(N:S,Y:S),N:S,M:S,Y:S) split(N:S,nil) -> pair(nil,nil) ->->Cycle: ->->-> Pairs: SPLIT(N:S,add(M:S,Y:S)) -> SPLIT(N:S,Y:S) ->->-> Rules: append(add(N:S,X:S),Y:S) -> add(N:S,append(X:S,Y:S)) append(nil,Y:S) -> Y:S f_1(pair(X:S,Z:S),N:S,M:S,Y:S) -> f_2(lt(N:S,M:S),N:S,M:S,Y:S,X:S,Z:S) f_2(ffalse,N:S,M:S,Y:S,X:S,Z:S) -> pair(add(M:S,X:S),Z:S) f_2(ttrue,N:S,M:S,Y:S,X:S,Z:S) -> pair(X:S,add(M:S,Z:S)) f_3(pair(Y:S,Z:S),N:S,X:S) -> append(qsort(Y:S),add(X:S,qsort(Z:S))) lt(0,s(X:S)) -> ttrue lt(s(X:S),0) -> ffalse lt(s(X:S),s(Y:S)) -> lt(X:S,Y:S) qsort(add(N:S,X:S)) -> f_3(split(N:S,X:S),N:S,X:S) qsort(nil) -> nil split(N:S,add(M:S,Y:S)) -> f_1(split(N:S,Y:S),N:S,M:S,Y:S) split(N:S,nil) -> pair(nil,nil) ->->Cycle: ->->-> Pairs: APPEND(add(N:S,X:S),Y:S) -> APPEND(X:S,Y:S) ->->-> Rules: append(add(N:S,X:S),Y:S) -> add(N:S,append(X:S,Y:S)) append(nil,Y:S) -> Y:S f_1(pair(X:S,Z:S),N:S,M:S,Y:S) -> f_2(lt(N:S,M:S),N:S,M:S,Y:S,X:S,Z:S) f_2(ffalse,N:S,M:S,Y:S,X:S,Z:S) -> pair(add(M:S,X:S),Z:S) f_2(ttrue,N:S,M:S,Y:S,X:S,Z:S) -> pair(X:S,add(M:S,Z:S)) f_3(pair(Y:S,Z:S),N:S,X:S) -> append(qsort(Y:S),add(X:S,qsort(Z:S))) lt(0,s(X:S)) -> ttrue lt(s(X:S),0) -> ffalse lt(s(X:S),s(Y:S)) -> lt(X:S,Y:S) qsort(add(N:S,X:S)) -> f_3(split(N:S,X:S),N:S,X:S) qsort(nil) -> nil split(N:S,add(M:S,Y:S)) -> f_1(split(N:S,Y:S),N:S,M:S,Y:S) split(N:S,nil) -> pair(nil,nil) ->->Cycle: ->->-> Pairs: F_3(pair(Y:S,Z:S),N:S,X:S) -> QSORT(Y:S) F_3(pair(Y:S,Z:S),N:S,X:S) -> QSORT(Z:S) QSORT(add(N:S,X:S)) -> F_3(split(N:S,X:S),N:S,X:S) ->->-> Rules: append(add(N:S,X:S),Y:S) -> add(N:S,append(X:S,Y:S)) append(nil,Y:S) -> Y:S f_1(pair(X:S,Z:S),N:S,M:S,Y:S) -> f_2(lt(N:S,M:S),N:S,M:S,Y:S,X:S,Z:S) f_2(ffalse,N:S,M:S,Y:S,X:S,Z:S) -> pair(add(M:S,X:S),Z:S) f_2(ttrue,N:S,M:S,Y:S,X:S,Z:S) -> pair(X:S,add(M:S,Z:S)) f_3(pair(Y:S,Z:S),N:S,X:S) -> append(qsort(Y:S),add(X:S,qsort(Z:S))) lt(0,s(X:S)) -> ttrue lt(s(X:S),0) -> ffalse lt(s(X:S),s(Y:S)) -> lt(X:S,Y:S) qsort(add(N:S,X:S)) -> f_3(split(N:S,X:S),N:S,X:S) qsort(nil) -> nil split(N:S,add(M:S,Y:S)) -> f_1(split(N:S,Y:S),N:S,M:S,Y:S) split(N:S,nil) -> pair(nil,nil) The problem is decomposed in 4 subproblems. Problem 1.1: Subterm Processor: -> Pairs: LT(s(X:S),s(Y:S)) -> LT(X:S,Y:S) -> Rules: append(add(N:S,X:S),Y:S) -> add(N:S,append(X:S,Y:S)) append(nil,Y:S) -> Y:S f_1(pair(X:S,Z:S),N:S,M:S,Y:S) -> f_2(lt(N:S,M:S),N:S,M:S,Y:S,X:S,Z:S) f_2(ffalse,N:S,M:S,Y:S,X:S,Z:S) -> pair(add(M:S,X:S),Z:S) f_2(ttrue,N:S,M:S,Y:S,X:S,Z:S) -> pair(X:S,add(M:S,Z:S)) f_3(pair(Y:S,Z:S),N:S,X:S) -> append(qsort(Y:S),add(X:S,qsort(Z:S))) lt(0,s(X:S)) -> ttrue lt(s(X:S),0) -> ffalse lt(s(X:S),s(Y:S)) -> lt(X:S,Y:S) qsort(add(N:S,X:S)) -> f_3(split(N:S,X:S),N:S,X:S) qsort(nil) -> nil split(N:S,add(M:S,Y:S)) -> f_1(split(N:S,Y:S),N:S,M:S,Y:S) split(N:S,nil) -> pair(nil,nil) ->Projection: pi(LT) = 1 Problem 1.1: SCC Processor: -> Pairs: Empty -> Rules: append(add(N:S,X:S),Y:S) -> add(N:S,append(X:S,Y:S)) append(nil,Y:S) -> Y:S f_1(pair(X:S,Z:S),N:S,M:S,Y:S) -> f_2(lt(N:S,M:S),N:S,M:S,Y:S,X:S,Z:S) f_2(ffalse,N:S,M:S,Y:S,X:S,Z:S) -> pair(add(M:S,X:S),Z:S) f_2(ttrue,N:S,M:S,Y:S,X:S,Z:S) -> pair(X:S,add(M:S,Z:S)) f_3(pair(Y:S,Z:S),N:S,X:S) -> append(qsort(Y:S),add(X:S,qsort(Z:S))) lt(0,s(X:S)) -> ttrue lt(s(X:S),0) -> ffalse lt(s(X:S),s(Y:S)) -> lt(X:S,Y:S) qsort(add(N:S,X:S)) -> f_3(split(N:S,X:S),N:S,X:S) qsort(nil) -> nil split(N:S,add(M:S,Y:S)) -> f_1(split(N:S,Y:S),N:S,M:S,Y:S) split(N:S,nil) -> pair(nil,nil) ->Strongly Connected Components: There is no strongly connected component The problem is finite. Problem 1.2: Subterm Processor: -> Pairs: SPLIT(N:S,add(M:S,Y:S)) -> SPLIT(N:S,Y:S) -> Rules: append(add(N:S,X:S),Y:S) -> add(N:S,append(X:S,Y:S)) append(nil,Y:S) -> Y:S f_1(pair(X:S,Z:S),N:S,M:S,Y:S) -> f_2(lt(N:S,M:S),N:S,M:S,Y:S,X:S,Z:S) f_2(ffalse,N:S,M:S,Y:S,X:S,Z:S) -> pair(add(M:S,X:S),Z:S) f_2(ttrue,N:S,M:S,Y:S,X:S,Z:S) -> pair(X:S,add(M:S,Z:S)) f_3(pair(Y:S,Z:S),N:S,X:S) -> append(qsort(Y:S),add(X:S,qsort(Z:S))) lt(0,s(X:S)) -> ttrue lt(s(X:S),0) -> ffalse lt(s(X:S),s(Y:S)) -> lt(X:S,Y:S) qsort(add(N:S,X:S)) -> f_3(split(N:S,X:S),N:S,X:S) qsort(nil) -> nil split(N:S,add(M:S,Y:S)) -> f_1(split(N:S,Y:S),N:S,M:S,Y:S) split(N:S,nil) -> pair(nil,nil) ->Projection: pi(SPLIT) = 2 Problem 1.2: SCC Processor: -> Pairs: Empty -> Rules: append(add(N:S,X:S),Y:S) -> add(N:S,append(X:S,Y:S)) append(nil,Y:S) -> Y:S f_1(pair(X:S,Z:S),N:S,M:S,Y:S) -> f_2(lt(N:S,M:S),N:S,M:S,Y:S,X:S,Z:S) f_2(ffalse,N:S,M:S,Y:S,X:S,Z:S) -> pair(add(M:S,X:S),Z:S) f_2(ttrue,N:S,M:S,Y:S,X:S,Z:S) -> pair(X:S,add(M:S,Z:S)) f_3(pair(Y:S,Z:S),N:S,X:S) -> append(qsort(Y:S),add(X:S,qsort(Z:S))) lt(0,s(X:S)) -> ttrue lt(s(X:S),0) -> ffalse lt(s(X:S),s(Y:S)) -> lt(X:S,Y:S) qsort(add(N:S,X:S)) -> f_3(split(N:S,X:S),N:S,X:S) qsort(nil) -> nil split(N:S,add(M:S,Y:S)) -> f_1(split(N:S,Y:S),N:S,M:S,Y:S) split(N:S,nil) -> pair(nil,nil) ->Strongly Connected Components: There is no strongly connected component The problem is finite. Problem 1.3: Subterm Processor: -> Pairs: APPEND(add(N:S,X:S),Y:S) -> APPEND(X:S,Y:S) -> Rules: append(add(N:S,X:S),Y:S) -> add(N:S,append(X:S,Y:S)) append(nil,Y:S) -> Y:S f_1(pair(X:S,Z:S),N:S,M:S,Y:S) -> f_2(lt(N:S,M:S),N:S,M:S,Y:S,X:S,Z:S) f_2(ffalse,N:S,M:S,Y:S,X:S,Z:S) -> pair(add(M:S,X:S),Z:S) f_2(ttrue,N:S,M:S,Y:S,X:S,Z:S) -> pair(X:S,add(M:S,Z:S)) f_3(pair(Y:S,Z:S),N:S,X:S) -> append(qsort(Y:S),add(X:S,qsort(Z:S))) lt(0,s(X:S)) -> ttrue lt(s(X:S),0) -> ffalse lt(s(X:S),s(Y:S)) -> lt(X:S,Y:S) qsort(add(N:S,X:S)) -> f_3(split(N:S,X:S),N:S,X:S) qsort(nil) -> nil split(N:S,add(M:S,Y:S)) -> f_1(split(N:S,Y:S),N:S,M:S,Y:S) split(N:S,nil) -> pair(nil,nil) ->Projection: pi(APPEND) = 1 Problem 1.3: SCC Processor: -> Pairs: Empty -> Rules: append(add(N:S,X:S),Y:S) -> add(N:S,append(X:S,Y:S)) append(nil,Y:S) -> Y:S f_1(pair(X:S,Z:S),N:S,M:S,Y:S) -> f_2(lt(N:S,M:S),N:S,M:S,Y:S,X:S,Z:S) f_2(ffalse,N:S,M:S,Y:S,X:S,Z:S) -> pair(add(M:S,X:S),Z:S) f_2(ttrue,N:S,M:S,Y:S,X:S,Z:S) -> pair(X:S,add(M:S,Z:S)) f_3(pair(Y:S,Z:S),N:S,X:S) -> append(qsort(Y:S),add(X:S,qsort(Z:S))) lt(0,s(X:S)) -> ttrue lt(s(X:S),0) -> ffalse lt(s(X:S),s(Y:S)) -> lt(X:S,Y:S) qsort(add(N:S,X:S)) -> f_3(split(N:S,X:S),N:S,X:S) qsort(nil) -> nil split(N:S,add(M:S,Y:S)) -> f_1(split(N:S,Y:S),N:S,M:S,Y:S) split(N:S,nil) -> pair(nil,nil) ->Strongly Connected Components: There is no strongly connected component The problem is finite. Problem 1.4: Reduction Pairs Processor: -> Pairs: F_3(pair(Y:S,Z:S),N:S,X:S) -> QSORT(Y:S) F_3(pair(Y:S,Z:S),N:S,X:S) -> QSORT(Z:S) QSORT(add(N:S,X:S)) -> F_3(split(N:S,X:S),N:S,X:S) -> Rules: append(add(N:S,X:S),Y:S) -> add(N:S,append(X:S,Y:S)) append(nil,Y:S) -> Y:S f_1(pair(X:S,Z:S),N:S,M:S,Y:S) -> f_2(lt(N:S,M:S),N:S,M:S,Y:S,X:S,Z:S) f_2(ffalse,N:S,M:S,Y:S,X:S,Z:S) -> pair(add(M:S,X:S),Z:S) f_2(ttrue,N:S,M:S,Y:S,X:S,Z:S) -> pair(X:S,add(M:S,Z:S)) f_3(pair(Y:S,Z:S),N:S,X:S) -> append(qsort(Y:S),add(X:S,qsort(Z:S))) lt(0,s(X:S)) -> ttrue lt(s(X:S),0) -> ffalse lt(s(X:S),s(Y:S)) -> lt(X:S,Y:S) qsort(add(N:S,X:S)) -> f_3(split(N:S,X:S),N:S,X:S) qsort(nil) -> nil split(N:S,add(M:S,Y:S)) -> f_1(split(N:S,Y:S),N:S,M:S,Y:S) split(N:S,nil) -> pair(nil,nil) -> Usable rules: f_1(pair(X:S,Z:S),N:S,M:S,Y:S) -> f_2(lt(N:S,M:S),N:S,M:S,Y:S,X:S,Z:S) f_2(ffalse,N:S,M:S,Y:S,X:S,Z:S) -> pair(add(M:S,X:S),Z:S) f_2(ttrue,N:S,M:S,Y:S,X:S,Z:S) -> pair(X:S,add(M:S,Z:S)) lt(0,s(X:S)) -> ttrue lt(s(X:S),0) -> ffalse lt(s(X:S),s(Y:S)) -> lt(X:S,Y:S) split(N:S,add(M:S,Y:S)) -> f_1(split(N:S,Y:S),N:S,M:S,Y:S) split(N:S,nil) -> pair(nil,nil) ->Interpretation type: Linear ->Coefficients: Natural Numbers ->Dimension: 1 ->Bound: 2 ->Interpretation: [append](X1,X2) = 0 [f_1](X1,X2,X3,X4) = 2.X1 + 2 [f_2](X1,X2,X3,X4,X5,X6) = 2.X1 + 2.X5 + 2.X6 + 2 [f_3](X1,X2,X3) = 0 [lt](X1,X2) = 2 [qsort](X) = 0 [split](X1,X2) = 2.X2 + 2 [0] = 0 [add](X1,X2) = 2.X2 + 2 [fSNonEmpty] = 0 [false] = 2 [nil] = 2 [pair](X1,X2) = X1 + X2 + 2 [s](X) = 1 [true] = 2 [APPEND](X1,X2) = 0 [F_1](X1,X2,X3,X4) = 0 [F_2](X1,X2,X3,X4,X5,X6) = 0 [F_3](X1,X2,X3) = 2.X1 + 2 [LT](X1,X2) = 0 [QSORT](X) = 2.X + 2 [SPLIT](X1,X2) = 0 Problem 1.4: SCC Processor: -> Pairs: F_3(pair(Y:S,Z:S),N:S,X:S) -> QSORT(Z:S) QSORT(add(N:S,X:S)) -> F_3(split(N:S,X:S),N:S,X:S) -> Rules: append(add(N:S,X:S),Y:S) -> add(N:S,append(X:S,Y:S)) append(nil,Y:S) -> Y:S f_1(pair(X:S,Z:S),N:S,M:S,Y:S) -> f_2(lt(N:S,M:S),N:S,M:S,Y:S,X:S,Z:S) f_2(ffalse,N:S,M:S,Y:S,X:S,Z:S) -> pair(add(M:S,X:S),Z:S) f_2(ttrue,N:S,M:S,Y:S,X:S,Z:S) -> pair(X:S,add(M:S,Z:S)) f_3(pair(Y:S,Z:S),N:S,X:S) -> append(qsort(Y:S),add(X:S,qsort(Z:S))) lt(0,s(X:S)) -> ttrue lt(s(X:S),0) -> ffalse lt(s(X:S),s(Y:S)) -> lt(X:S,Y:S) qsort(add(N:S,X:S)) -> f_3(split(N:S,X:S),N:S,X:S) qsort(nil) -> nil split(N:S,add(M:S,Y:S)) -> f_1(split(N:S,Y:S),N:S,M:S,Y:S) split(N:S,nil) -> pair(nil,nil) ->Strongly Connected Components: ->->Cycle: ->->-> Pairs: F_3(pair(Y:S,Z:S),N:S,X:S) -> QSORT(Z:S) QSORT(add(N:S,X:S)) -> F_3(split(N:S,X:S),N:S,X:S) ->->-> Rules: append(add(N:S,X:S),Y:S) -> add(N:S,append(X:S,Y:S)) append(nil,Y:S) -> Y:S f_1(pair(X:S,Z:S),N:S,M:S,Y:S) -> f_2(lt(N:S,M:S),N:S,M:S,Y:S,X:S,Z:S) f_2(ffalse,N:S,M:S,Y:S,X:S,Z:S) -> pair(add(M:S,X:S),Z:S) f_2(ttrue,N:S,M:S,Y:S,X:S,Z:S) -> pair(X:S,add(M:S,Z:S)) f_3(pair(Y:S,Z:S),N:S,X:S) -> append(qsort(Y:S),add(X:S,qsort(Z:S))) lt(0,s(X:S)) -> ttrue lt(s(X:S),0) -> ffalse lt(s(X:S),s(Y:S)) -> lt(X:S,Y:S) qsort(add(N:S,X:S)) -> f_3(split(N:S,X:S),N:S,X:S) qsort(nil) -> nil split(N:S,add(M:S,Y:S)) -> f_1(split(N:S,Y:S),N:S,M:S,Y:S) split(N:S,nil) -> pair(nil,nil) Problem 1.4: Reduction Pairs Processor: -> Pairs: F_3(pair(Y:S,Z:S),N:S,X:S) -> QSORT(Z:S) QSORT(add(N:S,X:S)) -> F_3(split(N:S,X:S),N:S,X:S) -> Rules: append(add(N:S,X:S),Y:S) -> add(N:S,append(X:S,Y:S)) append(nil,Y:S) -> Y:S f_1(pair(X:S,Z:S),N:S,M:S,Y:S) -> f_2(lt(N:S,M:S),N:S,M:S,Y:S,X:S,Z:S) f_2(ffalse,N:S,M:S,Y:S,X:S,Z:S) -> pair(add(M:S,X:S),Z:S) f_2(ttrue,N:S,M:S,Y:S,X:S,Z:S) -> pair(X:S,add(M:S,Z:S)) f_3(pair(Y:S,Z:S),N:S,X:S) -> append(qsort(Y:S),add(X:S,qsort(Z:S))) lt(0,s(X:S)) -> ttrue lt(s(X:S),0) -> ffalse lt(s(X:S),s(Y:S)) -> lt(X:S,Y:S) qsort(add(N:S,X:S)) -> f_3(split(N:S,X:S),N:S,X:S) qsort(nil) -> nil split(N:S,add(M:S,Y:S)) -> f_1(split(N:S,Y:S),N:S,M:S,Y:S) split(N:S,nil) -> pair(nil,nil) -> Usable rules: f_1(pair(X:S,Z:S),N:S,M:S,Y:S) -> f_2(lt(N:S,M:S),N:S,M:S,Y:S,X:S,Z:S) f_2(ffalse,N:S,M:S,Y:S,X:S,Z:S) -> pair(add(M:S,X:S),Z:S) f_2(ttrue,N:S,M:S,Y:S,X:S,Z:S) -> pair(X:S,add(M:S,Z:S)) lt(0,s(X:S)) -> ttrue lt(s(X:S),0) -> ffalse lt(s(X:S),s(Y:S)) -> lt(X:S,Y:S) split(N:S,add(M:S,Y:S)) -> f_1(split(N:S,Y:S),N:S,M:S,Y:S) split(N:S,nil) -> pair(nil,nil) ->Interpretation type: Linear ->Coefficients: Natural Numbers ->Dimension: 1 ->Bound: 2 ->Interpretation: [append](X1,X2) = 0 [f_1](X1,X2,X3,X4) = 2.X1 [f_2](X1,X2,X3,X4,X5,X6) = 2.X1 + 2.X5 + 2.X6 [f_3](X1,X2,X3) = 0 [lt](X1,X2) = 2 [qsort](X) = 0 [split](X1,X2) = X2 + 2 [0] = 0 [add](X1,X2) = 2.X2 + 2 [fSNonEmpty] = 0 [false] = 2 [nil] = 0 [pair](X1,X2) = X1 + X2 + 2 [s](X) = X [true] = 2 [APPEND](X1,X2) = 0 [F_1](X1,X2,X3,X4) = 0 [F_2](X1,X2,X3,X4,X5,X6) = 0 [F_3](X1,X2,X3) = 2.X1 + 2.X3 + 2 [LT](X1,X2) = 0 [QSORT](X) = 2.X + 2 [SPLIT](X1,X2) = 0 Problem 1.4: SCC Processor: -> Pairs: QSORT(add(N:S,X:S)) -> F_3(split(N:S,X:S),N:S,X:S) -> Rules: append(add(N:S,X:S),Y:S) -> add(N:S,append(X:S,Y:S)) append(nil,Y:S) -> Y:S f_1(pair(X:S,Z:S),N:S,M:S,Y:S) -> f_2(lt(N:S,M:S),N:S,M:S,Y:S,X:S,Z:S) f_2(ffalse,N:S,M:S,Y:S,X:S,Z:S) -> pair(add(M:S,X:S),Z:S) f_2(ttrue,N:S,M:S,Y:S,X:S,Z:S) -> pair(X:S,add(M:S,Z:S)) f_3(pair(Y:S,Z:S),N:S,X:S) -> append(qsort(Y:S),add(X:S,qsort(Z:S))) lt(0,s(X:S)) -> ttrue lt(s(X:S),0) -> ffalse lt(s(X:S),s(Y:S)) -> lt(X:S,Y:S) qsort(add(N:S,X:S)) -> f_3(split(N:S,X:S),N:S,X:S) qsort(nil) -> nil split(N:S,add(M:S,Y:S)) -> f_1(split(N:S,Y:S),N:S,M:S,Y:S) split(N:S,nil) -> pair(nil,nil) ->Strongly Connected Components: There is no strongly connected component The problem is finite.