MAYBE * Step 1: DependencyPairs MAYBE + Considered Problem: - Strict TRS: append(cons(x,xs),ys()) -> cons(x,append(xs,ys())) append(nil(),ys()) -> ys() filterhigh(n,cons(x,xs)) -> if2(ge(x,n),n,x,xs) filterhigh(n,nil()) -> nil() filterlow(n,cons(x,xs)) -> if1(ge(n,x),n,x,xs) filterlow(n,nil()) -> nil() ge(x,0()) -> true() ge(0(),s(x)) -> false() ge(s(x),s(y)) -> ge(x,y) if1(false(),n,x,xs) -> cons(x,filterlow(n,xs)) if1(true(),n,x,xs) -> filterlow(n,xs) if2(false(),n,x,xs) -> cons(x,filterhigh(n,xs)) if2(true(),n,x,xs) -> filterhigh(n,xs) qsort(cons(x,xs)) -> append(qsort(filterlow(x,cons(x,xs))),cons(x,qsort(filterhigh(x,cons(x,xs))))) qsort(nil()) -> nil() - Signature: {append/2,filterhigh/2,filterlow/2,ge/2,if1/4,if2/4,qsort/1} / {0/0,cons/2,false/0,nil/0,s/1,true/0,ys/0} - Obligation: innermost runtime complexity wrt. defined symbols {append,filterhigh,filterlow,ge,if1,if2 ,qsort} and constructors {0,cons,false,nil,s,true,ys} + Applied Processor: DependencyPairs {dpKind_ = DT} + Details: We add the following dependency tuples: Strict DPs append#(cons(x,xs),ys()) -> c_1(append#(xs,ys())) append#(nil(),ys()) -> c_2() filterhigh#(n,cons(x,xs)) -> c_3(if2#(ge(x,n),n,x,xs),ge#(x,n)) filterhigh#(n,nil()) -> c_4() filterlow#(n,cons(x,xs)) -> c_5(if1#(ge(n,x),n,x,xs),ge#(n,x)) filterlow#(n,nil()) -> c_6() ge#(x,0()) -> c_7() ge#(0(),s(x)) -> c_8() ge#(s(x),s(y)) -> c_9(ge#(x,y)) if1#(false(),n,x,xs) -> c_10(filterlow#(n,xs)) if1#(true(),n,x,xs) -> c_11(filterlow#(n,xs)) if2#(false(),n,x,xs) -> c_12(filterhigh#(n,xs)) if2#(true(),n,x,xs) -> c_13(filterhigh#(n,xs)) qsort#(cons(x,xs)) -> c_14(append#(qsort(filterlow(x,cons(x,xs))),cons(x,qsort(filterhigh(x,cons(x,xs))))) ,qsort#(filterlow(x,cons(x,xs))) ,filterlow#(x,cons(x,xs)) ,qsort#(filterhigh(x,cons(x,xs))) ,filterhigh#(x,cons(x,xs))) qsort#(nil()) -> c_15() Weak DPs and mark the set of starting terms. * Step 2: UsableRules MAYBE + Considered Problem: - Strict DPs: append#(cons(x,xs),ys()) -> c_1(append#(xs,ys())) append#(nil(),ys()) -> c_2() filterhigh#(n,cons(x,xs)) -> c_3(if2#(ge(x,n),n,x,xs),ge#(x,n)) filterhigh#(n,nil()) -> c_4() filterlow#(n,cons(x,xs)) -> c_5(if1#(ge(n,x),n,x,xs),ge#(n,x)) filterlow#(n,nil()) -> c_6() ge#(x,0()) -> c_7() ge#(0(),s(x)) -> c_8() ge#(s(x),s(y)) -> c_9(ge#(x,y)) if1#(false(),n,x,xs) -> c_10(filterlow#(n,xs)) if1#(true(),n,x,xs) -> c_11(filterlow#(n,xs)) if2#(false(),n,x,xs) -> c_12(filterhigh#(n,xs)) if2#(true(),n,x,xs) -> c_13(filterhigh#(n,xs)) qsort#(cons(x,xs)) -> c_14(append#(qsort(filterlow(x,cons(x,xs))),cons(x,qsort(filterhigh(x,cons(x,xs))))) ,qsort#(filterlow(x,cons(x,xs))) ,filterlow#(x,cons(x,xs)) ,qsort#(filterhigh(x,cons(x,xs))) ,filterhigh#(x,cons(x,xs))) qsort#(nil()) -> c_15() - Weak TRS: append(cons(x,xs),ys()) -> cons(x,append(xs,ys())) append(nil(),ys()) -> ys() filterhigh(n,cons(x,xs)) -> if2(ge(x,n),n,x,xs) filterhigh(n,nil()) -> nil() filterlow(n,cons(x,xs)) -> if1(ge(n,x),n,x,xs) filterlow(n,nil()) -> nil() ge(x,0()) -> true() ge(0(),s(x)) -> false() ge(s(x),s(y)) -> ge(x,y) if1(false(),n,x,xs) -> cons(x,filterlow(n,xs)) if1(true(),n,x,xs) -> filterlow(n,xs) if2(false(),n,x,xs) -> cons(x,filterhigh(n,xs)) if2(true(),n,x,xs) -> filterhigh(n,xs) qsort(cons(x,xs)) -> append(qsort(filterlow(x,cons(x,xs))),cons(x,qsort(filterhigh(x,cons(x,xs))))) qsort(nil()) -> nil() - Signature: {append/2,filterhigh/2,filterlow/2,ge/2,if1/4,if2/4,qsort/1,append#/2,filterhigh#/2,filterlow#/2,ge#/2 ,if1#/4,if2#/4,qsort#/1} / {0/0,cons/2,false/0,nil/0,s/1,true/0,ys/0,c_1/1,c_2/0,c_3/2,c_4/0,c_5/2,c_6/0 ,c_7/0,c_8/0,c_9/1,c_10/1,c_11/1,c_12/1,c_13/1,c_14/5,c_15/0} - Obligation: innermost runtime complexity wrt. defined symbols {append#,filterhigh#,filterlow#,ge#,if1#,if2# ,qsort#} and constructors {0,cons,false,nil,s,true,ys} + Applied Processor: UsableRules + Details: We replace rewrite rules by usable rules: filterhigh(n,cons(x,xs)) -> if2(ge(x,n),n,x,xs) filterhigh(n,nil()) -> nil() filterlow(n,cons(x,xs)) -> if1(ge(n,x),n,x,xs) filterlow(n,nil()) -> nil() ge(x,0()) -> true() ge(0(),s(x)) -> false() ge(s(x),s(y)) -> ge(x,y) if1(false(),n,x,xs) -> cons(x,filterlow(n,xs)) if1(true(),n,x,xs) -> filterlow(n,xs) if2(false(),n,x,xs) -> cons(x,filterhigh(n,xs)) if2(true(),n,x,xs) -> filterhigh(n,xs) qsort(cons(x,xs)) -> append(qsort(filterlow(x,cons(x,xs))),cons(x,qsort(filterhigh(x,cons(x,xs))))) qsort(nil()) -> nil() append#(cons(x,xs),ys()) -> c_1(append#(xs,ys())) append#(nil(),ys()) -> c_2() filterhigh#(n,cons(x,xs)) -> c_3(if2#(ge(x,n),n,x,xs),ge#(x,n)) filterhigh#(n,nil()) -> c_4() filterlow#(n,cons(x,xs)) -> c_5(if1#(ge(n,x),n,x,xs),ge#(n,x)) filterlow#(n,nil()) -> c_6() ge#(x,0()) -> c_7() ge#(0(),s(x)) -> c_8() ge#(s(x),s(y)) -> c_9(ge#(x,y)) if1#(false(),n,x,xs) -> c_10(filterlow#(n,xs)) if1#(true(),n,x,xs) -> c_11(filterlow#(n,xs)) if2#(false(),n,x,xs) -> c_12(filterhigh#(n,xs)) if2#(true(),n,x,xs) -> c_13(filterhigh#(n,xs)) qsort#(cons(x,xs)) -> c_14(append#(qsort(filterlow(x,cons(x,xs))),cons(x,qsort(filterhigh(x,cons(x,xs))))) ,qsort#(filterlow(x,cons(x,xs))) ,filterlow#(x,cons(x,xs)) ,qsort#(filterhigh(x,cons(x,xs))) ,filterhigh#(x,cons(x,xs))) qsort#(nil()) -> c_15() * Step 3: PredecessorEstimation MAYBE + Considered Problem: - Strict DPs: append#(cons(x,xs),ys()) -> c_1(append#(xs,ys())) append#(nil(),ys()) -> c_2() filterhigh#(n,cons(x,xs)) -> c_3(if2#(ge(x,n),n,x,xs),ge#(x,n)) filterhigh#(n,nil()) -> c_4() filterlow#(n,cons(x,xs)) -> c_5(if1#(ge(n,x),n,x,xs),ge#(n,x)) filterlow#(n,nil()) -> c_6() ge#(x,0()) -> c_7() ge#(0(),s(x)) -> c_8() ge#(s(x),s(y)) -> c_9(ge#(x,y)) if1#(false(),n,x,xs) -> c_10(filterlow#(n,xs)) if1#(true(),n,x,xs) -> c_11(filterlow#(n,xs)) if2#(false(),n,x,xs) -> c_12(filterhigh#(n,xs)) if2#(true(),n,x,xs) -> c_13(filterhigh#(n,xs)) qsort#(cons(x,xs)) -> c_14(append#(qsort(filterlow(x,cons(x,xs))),cons(x,qsort(filterhigh(x,cons(x,xs))))) ,qsort#(filterlow(x,cons(x,xs))) ,filterlow#(x,cons(x,xs)) ,qsort#(filterhigh(x,cons(x,xs))) ,filterhigh#(x,cons(x,xs))) qsort#(nil()) -> c_15() - Weak TRS: filterhigh(n,cons(x,xs)) -> if2(ge(x,n),n,x,xs) filterhigh(n,nil()) -> nil() filterlow(n,cons(x,xs)) -> if1(ge(n,x),n,x,xs) filterlow(n,nil()) -> nil() ge(x,0()) -> true() ge(0(),s(x)) -> false() ge(s(x),s(y)) -> ge(x,y) if1(false(),n,x,xs) -> cons(x,filterlow(n,xs)) if1(true(),n,x,xs) -> filterlow(n,xs) if2(false(),n,x,xs) -> cons(x,filterhigh(n,xs)) if2(true(),n,x,xs) -> filterhigh(n,xs) qsort(cons(x,xs)) -> append(qsort(filterlow(x,cons(x,xs))),cons(x,qsort(filterhigh(x,cons(x,xs))))) qsort(nil()) -> nil() - Signature: {append/2,filterhigh/2,filterlow/2,ge/2,if1/4,if2/4,qsort/1,append#/2,filterhigh#/2,filterlow#/2,ge#/2 ,if1#/4,if2#/4,qsort#/1} / {0/0,cons/2,false/0,nil/0,s/1,true/0,ys/0,c_1/1,c_2/0,c_3/2,c_4/0,c_5/2,c_6/0 ,c_7/0,c_8/0,c_9/1,c_10/1,c_11/1,c_12/1,c_13/1,c_14/5,c_15/0} - Obligation: innermost runtime complexity wrt. defined symbols {append#,filterhigh#,filterlow#,ge#,if1#,if2# ,qsort#} and constructors {0,cons,false,nil,s,true,ys} + Applied Processor: PredecessorEstimation {onSelection = all simple predecessor estimation selector} + Details: We estimate the number of application of {2,4,6,7,8,15} by application of Pre({2,4,6,7,8,15}) = {1,3,5,9,10,11,12,13,14}. Here rules are labelled as follows: 1: append#(cons(x,xs),ys()) -> c_1(append#(xs,ys())) 2: append#(nil(),ys()) -> c_2() 3: filterhigh#(n,cons(x,xs)) -> c_3(if2#(ge(x,n),n,x,xs),ge#(x,n)) 4: filterhigh#(n,nil()) -> c_4() 5: filterlow#(n,cons(x,xs)) -> c_5(if1#(ge(n,x),n,x,xs),ge#(n,x)) 6: filterlow#(n,nil()) -> c_6() 7: ge#(x,0()) -> c_7() 8: ge#(0(),s(x)) -> c_8() 9: ge#(s(x),s(y)) -> c_9(ge#(x,y)) 10: if1#(false(),n,x,xs) -> c_10(filterlow#(n,xs)) 11: if1#(true(),n,x,xs) -> c_11(filterlow#(n,xs)) 12: if2#(false(),n,x,xs) -> c_12(filterhigh#(n,xs)) 13: if2#(true(),n,x,xs) -> c_13(filterhigh#(n,xs)) 14: qsort#(cons(x,xs)) -> c_14(append#(qsort(filterlow(x,cons(x,xs))) ,cons(x,qsort(filterhigh(x,cons(x,xs))))) ,qsort#(filterlow(x,cons(x,xs))) ,filterlow#(x,cons(x,xs)) ,qsort#(filterhigh(x,cons(x,xs))) ,filterhigh#(x,cons(x,xs))) 15: qsort#(nil()) -> c_15() * Step 4: RemoveWeakSuffixes MAYBE + Considered Problem: - Strict DPs: append#(cons(x,xs),ys()) -> c_1(append#(xs,ys())) filterhigh#(n,cons(x,xs)) -> c_3(if2#(ge(x,n),n,x,xs),ge#(x,n)) filterlow#(n,cons(x,xs)) -> c_5(if1#(ge(n,x),n,x,xs),ge#(n,x)) ge#(s(x),s(y)) -> c_9(ge#(x,y)) if1#(false(),n,x,xs) -> c_10(filterlow#(n,xs)) if1#(true(),n,x,xs) -> c_11(filterlow#(n,xs)) if2#(false(),n,x,xs) -> c_12(filterhigh#(n,xs)) if2#(true(),n,x,xs) -> c_13(filterhigh#(n,xs)) qsort#(cons(x,xs)) -> c_14(append#(qsort(filterlow(x,cons(x,xs))),cons(x,qsort(filterhigh(x,cons(x,xs))))) ,qsort#(filterlow(x,cons(x,xs))) ,filterlow#(x,cons(x,xs)) ,qsort#(filterhigh(x,cons(x,xs))) ,filterhigh#(x,cons(x,xs))) - Weak DPs: append#(nil(),ys()) -> c_2() filterhigh#(n,nil()) -> c_4() filterlow#(n,nil()) -> c_6() ge#(x,0()) -> c_7() ge#(0(),s(x)) -> c_8() qsort#(nil()) -> c_15() - Weak TRS: filterhigh(n,cons(x,xs)) -> if2(ge(x,n),n,x,xs) filterhigh(n,nil()) -> nil() filterlow(n,cons(x,xs)) -> if1(ge(n,x),n,x,xs) filterlow(n,nil()) -> nil() ge(x,0()) -> true() ge(0(),s(x)) -> false() ge(s(x),s(y)) -> ge(x,y) if1(false(),n,x,xs) -> cons(x,filterlow(n,xs)) if1(true(),n,x,xs) -> filterlow(n,xs) if2(false(),n,x,xs) -> cons(x,filterhigh(n,xs)) if2(true(),n,x,xs) -> filterhigh(n,xs) qsort(cons(x,xs)) -> append(qsort(filterlow(x,cons(x,xs))),cons(x,qsort(filterhigh(x,cons(x,xs))))) qsort(nil()) -> nil() - Signature: {append/2,filterhigh/2,filterlow/2,ge/2,if1/4,if2/4,qsort/1,append#/2,filterhigh#/2,filterlow#/2,ge#/2 ,if1#/4,if2#/4,qsort#/1} / {0/0,cons/2,false/0,nil/0,s/1,true/0,ys/0,c_1/1,c_2/0,c_3/2,c_4/0,c_5/2,c_6/0 ,c_7/0,c_8/0,c_9/1,c_10/1,c_11/1,c_12/1,c_13/1,c_14/5,c_15/0} - Obligation: innermost runtime complexity wrt. defined symbols {append#,filterhigh#,filterlow#,ge#,if1#,if2# ,qsort#} and constructors {0,cons,false,nil,s,true,ys} + Applied Processor: RemoveWeakSuffixes + Details: Consider the dependency graph 1:S:append#(cons(x,xs),ys()) -> c_1(append#(xs,ys())) -->_1 append#(nil(),ys()) -> c_2():10 -->_1 append#(cons(x,xs),ys()) -> c_1(append#(xs,ys())):1 2:S:filterhigh#(n,cons(x,xs)) -> c_3(if2#(ge(x,n),n,x,xs),ge#(x,n)) -->_1 if2#(true(),n,x,xs) -> c_13(filterhigh#(n,xs)):8 -->_1 if2#(false(),n,x,xs) -> c_12(filterhigh#(n,xs)):7 -->_2 ge#(s(x),s(y)) -> c_9(ge#(x,y)):4 -->_2 ge#(0(),s(x)) -> c_8():14 -->_2 ge#(x,0()) -> c_7():13 3:S:filterlow#(n,cons(x,xs)) -> c_5(if1#(ge(n,x),n,x,xs),ge#(n,x)) -->_1 if1#(true(),n,x,xs) -> c_11(filterlow#(n,xs)):6 -->_1 if1#(false(),n,x,xs) -> c_10(filterlow#(n,xs)):5 -->_2 ge#(s(x),s(y)) -> c_9(ge#(x,y)):4 -->_2 ge#(0(),s(x)) -> c_8():14 -->_2 ge#(x,0()) -> c_7():13 4:S:ge#(s(x),s(y)) -> c_9(ge#(x,y)) -->_1 ge#(0(),s(x)) -> c_8():14 -->_1 ge#(x,0()) -> c_7():13 -->_1 ge#(s(x),s(y)) -> c_9(ge#(x,y)):4 5:S:if1#(false(),n,x,xs) -> c_10(filterlow#(n,xs)) -->_1 filterlow#(n,nil()) -> c_6():12 -->_1 filterlow#(n,cons(x,xs)) -> c_5(if1#(ge(n,x),n,x,xs),ge#(n,x)):3 6:S:if1#(true(),n,x,xs) -> c_11(filterlow#(n,xs)) -->_1 filterlow#(n,nil()) -> c_6():12 -->_1 filterlow#(n,cons(x,xs)) -> c_5(if1#(ge(n,x),n,x,xs),ge#(n,x)):3 7:S:if2#(false(),n,x,xs) -> c_12(filterhigh#(n,xs)) -->_1 filterhigh#(n,nil()) -> c_4():11 -->_1 filterhigh#(n,cons(x,xs)) -> c_3(if2#(ge(x,n),n,x,xs),ge#(x,n)):2 8:S:if2#(true(),n,x,xs) -> c_13(filterhigh#(n,xs)) -->_1 filterhigh#(n,nil()) -> c_4():11 -->_1 filterhigh#(n,cons(x,xs)) -> c_3(if2#(ge(x,n),n,x,xs),ge#(x,n)):2 9:S:qsort#(cons(x,xs)) -> c_14(append#(qsort(filterlow(x,cons(x,xs))) ,cons(x,qsort(filterhigh(x,cons(x,xs))))) ,qsort#(filterlow(x,cons(x,xs))) ,filterlow#(x,cons(x,xs)) ,qsort#(filterhigh(x,cons(x,xs))) ,filterhigh#(x,cons(x,xs))) -->_4 qsort#(nil()) -> c_15():15 -->_2 qsort#(nil()) -> c_15():15 -->_4 qsort#(cons(x,xs)) -> c_14(append#(qsort(filterlow(x,cons(x,xs))) ,cons(x,qsort(filterhigh(x,cons(x,xs))))) ,qsort#(filterlow(x,cons(x,xs))) ,filterlow#(x,cons(x,xs)) ,qsort#(filterhigh(x,cons(x,xs))) ,filterhigh#(x,cons(x,xs))):9 -->_2 qsort#(cons(x,xs)) -> c_14(append#(qsort(filterlow(x,cons(x,xs))) ,cons(x,qsort(filterhigh(x,cons(x,xs))))) ,qsort#(filterlow(x,cons(x,xs))) ,filterlow#(x,cons(x,xs)) ,qsort#(filterhigh(x,cons(x,xs))) ,filterhigh#(x,cons(x,xs))):9 -->_3 filterlow#(n,cons(x,xs)) -> c_5(if1#(ge(n,x),n,x,xs),ge#(n,x)):3 -->_5 filterhigh#(n,cons(x,xs)) -> c_3(if2#(ge(x,n),n,x,xs),ge#(x,n)):2 10:W:append#(nil(),ys()) -> c_2() 11:W:filterhigh#(n,nil()) -> c_4() 12:W:filterlow#(n,nil()) -> c_6() 13:W:ge#(x,0()) -> c_7() 14:W:ge#(0(),s(x)) -> c_8() 15:W:qsort#(nil()) -> c_15() The following weak DPs constitute a sub-graph of the DG that is closed under successors. The DPs are removed. 15: qsort#(nil()) -> c_15() 12: filterlow#(n,nil()) -> c_6() 13: ge#(x,0()) -> c_7() 14: ge#(0(),s(x)) -> c_8() 11: filterhigh#(n,nil()) -> c_4() 10: append#(nil(),ys()) -> c_2() * Step 5: SimplifyRHS MAYBE + Considered Problem: - Strict DPs: append#(cons(x,xs),ys()) -> c_1(append#(xs,ys())) filterhigh#(n,cons(x,xs)) -> c_3(if2#(ge(x,n),n,x,xs),ge#(x,n)) filterlow#(n,cons(x,xs)) -> c_5(if1#(ge(n,x),n,x,xs),ge#(n,x)) ge#(s(x),s(y)) -> c_9(ge#(x,y)) if1#(false(),n,x,xs) -> c_10(filterlow#(n,xs)) if1#(true(),n,x,xs) -> c_11(filterlow#(n,xs)) if2#(false(),n,x,xs) -> c_12(filterhigh#(n,xs)) if2#(true(),n,x,xs) -> c_13(filterhigh#(n,xs)) qsort#(cons(x,xs)) -> c_14(append#(qsort(filterlow(x,cons(x,xs))),cons(x,qsort(filterhigh(x,cons(x,xs))))) ,qsort#(filterlow(x,cons(x,xs))) ,filterlow#(x,cons(x,xs)) ,qsort#(filterhigh(x,cons(x,xs))) ,filterhigh#(x,cons(x,xs))) - Weak TRS: filterhigh(n,cons(x,xs)) -> if2(ge(x,n),n,x,xs) filterhigh(n,nil()) -> nil() filterlow(n,cons(x,xs)) -> if1(ge(n,x),n,x,xs) filterlow(n,nil()) -> nil() ge(x,0()) -> true() ge(0(),s(x)) -> false() ge(s(x),s(y)) -> ge(x,y) if1(false(),n,x,xs) -> cons(x,filterlow(n,xs)) if1(true(),n,x,xs) -> filterlow(n,xs) if2(false(),n,x,xs) -> cons(x,filterhigh(n,xs)) if2(true(),n,x,xs) -> filterhigh(n,xs) qsort(cons(x,xs)) -> append(qsort(filterlow(x,cons(x,xs))),cons(x,qsort(filterhigh(x,cons(x,xs))))) qsort(nil()) -> nil() - Signature: {append/2,filterhigh/2,filterlow/2,ge/2,if1/4,if2/4,qsort/1,append#/2,filterhigh#/2,filterlow#/2,ge#/2 ,if1#/4,if2#/4,qsort#/1} / {0/0,cons/2,false/0,nil/0,s/1,true/0,ys/0,c_1/1,c_2/0,c_3/2,c_4/0,c_5/2,c_6/0 ,c_7/0,c_8/0,c_9/1,c_10/1,c_11/1,c_12/1,c_13/1,c_14/5,c_15/0} - Obligation: innermost runtime complexity wrt. defined symbols {append#,filterhigh#,filterlow#,ge#,if1#,if2# ,qsort#} and constructors {0,cons,false,nil,s,true,ys} + Applied Processor: SimplifyRHS + Details: Consider the dependency graph 1:S:append#(cons(x,xs),ys()) -> c_1(append#(xs,ys())) -->_1 append#(cons(x,xs),ys()) -> c_1(append#(xs,ys())):1 2:S:filterhigh#(n,cons(x,xs)) -> c_3(if2#(ge(x,n),n,x,xs),ge#(x,n)) -->_1 if2#(true(),n,x,xs) -> c_13(filterhigh#(n,xs)):8 -->_1 if2#(false(),n,x,xs) -> c_12(filterhigh#(n,xs)):7 -->_2 ge#(s(x),s(y)) -> c_9(ge#(x,y)):4 3:S:filterlow#(n,cons(x,xs)) -> c_5(if1#(ge(n,x),n,x,xs),ge#(n,x)) -->_1 if1#(true(),n,x,xs) -> c_11(filterlow#(n,xs)):6 -->_1 if1#(false(),n,x,xs) -> c_10(filterlow#(n,xs)):5 -->_2 ge#(s(x),s(y)) -> c_9(ge#(x,y)):4 4:S:ge#(s(x),s(y)) -> c_9(ge#(x,y)) -->_1 ge#(s(x),s(y)) -> c_9(ge#(x,y)):4 5:S:if1#(false(),n,x,xs) -> c_10(filterlow#(n,xs)) -->_1 filterlow#(n,cons(x,xs)) -> c_5(if1#(ge(n,x),n,x,xs),ge#(n,x)):3 6:S:if1#(true(),n,x,xs) -> c_11(filterlow#(n,xs)) -->_1 filterlow#(n,cons(x,xs)) -> c_5(if1#(ge(n,x),n,x,xs),ge#(n,x)):3 7:S:if2#(false(),n,x,xs) -> c_12(filterhigh#(n,xs)) -->_1 filterhigh#(n,cons(x,xs)) -> c_3(if2#(ge(x,n),n,x,xs),ge#(x,n)):2 8:S:if2#(true(),n,x,xs) -> c_13(filterhigh#(n,xs)) -->_1 filterhigh#(n,cons(x,xs)) -> c_3(if2#(ge(x,n),n,x,xs),ge#(x,n)):2 9:S:qsort#(cons(x,xs)) -> c_14(append#(qsort(filterlow(x,cons(x,xs))) ,cons(x,qsort(filterhigh(x,cons(x,xs))))) ,qsort#(filterlow(x,cons(x,xs))) ,filterlow#(x,cons(x,xs)) ,qsort#(filterhigh(x,cons(x,xs))) ,filterhigh#(x,cons(x,xs))) -->_4 qsort#(cons(x,xs)) -> c_14(append#(qsort(filterlow(x,cons(x,xs))) ,cons(x,qsort(filterhigh(x,cons(x,xs))))) ,qsort#(filterlow(x,cons(x,xs))) ,filterlow#(x,cons(x,xs)) ,qsort#(filterhigh(x,cons(x,xs))) ,filterhigh#(x,cons(x,xs))):9 -->_2 qsort#(cons(x,xs)) -> c_14(append#(qsort(filterlow(x,cons(x,xs))) ,cons(x,qsort(filterhigh(x,cons(x,xs))))) ,qsort#(filterlow(x,cons(x,xs))) ,filterlow#(x,cons(x,xs)) ,qsort#(filterhigh(x,cons(x,xs))) ,filterhigh#(x,cons(x,xs))):9 -->_3 filterlow#(n,cons(x,xs)) -> c_5(if1#(ge(n,x),n,x,xs),ge#(n,x)):3 -->_5 filterhigh#(n,cons(x,xs)) -> c_3(if2#(ge(x,n),n,x,xs),ge#(x,n)):2 Due to missing edges in the depndency graph, the right-hand sides of following rules could be simplified: qsort#(cons(x,xs)) -> c_14(qsort#(filterlow(x,cons(x,xs))) ,filterlow#(x,cons(x,xs)) ,qsort#(filterhigh(x,cons(x,xs))) ,filterhigh#(x,cons(x,xs))) * Step 6: UsableRules MAYBE + Considered Problem: - Strict DPs: append#(cons(x,xs),ys()) -> c_1(append#(xs,ys())) filterhigh#(n,cons(x,xs)) -> c_3(if2#(ge(x,n),n,x,xs),ge#(x,n)) filterlow#(n,cons(x,xs)) -> c_5(if1#(ge(n,x),n,x,xs),ge#(n,x)) ge#(s(x),s(y)) -> c_9(ge#(x,y)) if1#(false(),n,x,xs) -> c_10(filterlow#(n,xs)) if1#(true(),n,x,xs) -> c_11(filterlow#(n,xs)) if2#(false(),n,x,xs) -> c_12(filterhigh#(n,xs)) if2#(true(),n,x,xs) -> c_13(filterhigh#(n,xs)) qsort#(cons(x,xs)) -> c_14(qsort#(filterlow(x,cons(x,xs))) ,filterlow#(x,cons(x,xs)) ,qsort#(filterhigh(x,cons(x,xs))) ,filterhigh#(x,cons(x,xs))) - Weak TRS: filterhigh(n,cons(x,xs)) -> if2(ge(x,n),n,x,xs) filterhigh(n,nil()) -> nil() filterlow(n,cons(x,xs)) -> if1(ge(n,x),n,x,xs) filterlow(n,nil()) -> nil() ge(x,0()) -> true() ge(0(),s(x)) -> false() ge(s(x),s(y)) -> ge(x,y) if1(false(),n,x,xs) -> cons(x,filterlow(n,xs)) if1(true(),n,x,xs) -> filterlow(n,xs) if2(false(),n,x,xs) -> cons(x,filterhigh(n,xs)) if2(true(),n,x,xs) -> filterhigh(n,xs) qsort(cons(x,xs)) -> append(qsort(filterlow(x,cons(x,xs))),cons(x,qsort(filterhigh(x,cons(x,xs))))) qsort(nil()) -> nil() - Signature: {append/2,filterhigh/2,filterlow/2,ge/2,if1/4,if2/4,qsort/1,append#/2,filterhigh#/2,filterlow#/2,ge#/2 ,if1#/4,if2#/4,qsort#/1} / {0/0,cons/2,false/0,nil/0,s/1,true/0,ys/0,c_1/1,c_2/0,c_3/2,c_4/0,c_5/2,c_6/0 ,c_7/0,c_8/0,c_9/1,c_10/1,c_11/1,c_12/1,c_13/1,c_14/4,c_15/0} - Obligation: innermost runtime complexity wrt. defined symbols {append#,filterhigh#,filterlow#,ge#,if1#,if2# ,qsort#} and constructors {0,cons,false,nil,s,true,ys} + Applied Processor: UsableRules + Details: We replace rewrite rules by usable rules: filterhigh(n,cons(x,xs)) -> if2(ge(x,n),n,x,xs) filterhigh(n,nil()) -> nil() filterlow(n,cons(x,xs)) -> if1(ge(n,x),n,x,xs) filterlow(n,nil()) -> nil() ge(x,0()) -> true() ge(0(),s(x)) -> false() ge(s(x),s(y)) -> ge(x,y) if1(false(),n,x,xs) -> cons(x,filterlow(n,xs)) if1(true(),n,x,xs) -> filterlow(n,xs) if2(false(),n,x,xs) -> cons(x,filterhigh(n,xs)) if2(true(),n,x,xs) -> filterhigh(n,xs) append#(cons(x,xs),ys()) -> c_1(append#(xs,ys())) filterhigh#(n,cons(x,xs)) -> c_3(if2#(ge(x,n),n,x,xs),ge#(x,n)) filterlow#(n,cons(x,xs)) -> c_5(if1#(ge(n,x),n,x,xs),ge#(n,x)) ge#(s(x),s(y)) -> c_9(ge#(x,y)) if1#(false(),n,x,xs) -> c_10(filterlow#(n,xs)) if1#(true(),n,x,xs) -> c_11(filterlow#(n,xs)) if2#(false(),n,x,xs) -> c_12(filterhigh#(n,xs)) if2#(true(),n,x,xs) -> c_13(filterhigh#(n,xs)) qsort#(cons(x,xs)) -> c_14(qsort#(filterlow(x,cons(x,xs))) ,filterlow#(x,cons(x,xs)) ,qsort#(filterhigh(x,cons(x,xs))) ,filterhigh#(x,cons(x,xs))) * Step 7: Failure MAYBE + Considered Problem: - Strict DPs: append#(cons(x,xs),ys()) -> c_1(append#(xs,ys())) filterhigh#(n,cons(x,xs)) -> c_3(if2#(ge(x,n),n,x,xs),ge#(x,n)) filterlow#(n,cons(x,xs)) -> c_5(if1#(ge(n,x),n,x,xs),ge#(n,x)) ge#(s(x),s(y)) -> c_9(ge#(x,y)) if1#(false(),n,x,xs) -> c_10(filterlow#(n,xs)) if1#(true(),n,x,xs) -> c_11(filterlow#(n,xs)) if2#(false(),n,x,xs) -> c_12(filterhigh#(n,xs)) if2#(true(),n,x,xs) -> c_13(filterhigh#(n,xs)) qsort#(cons(x,xs)) -> c_14(qsort#(filterlow(x,cons(x,xs))) ,filterlow#(x,cons(x,xs)) ,qsort#(filterhigh(x,cons(x,xs))) ,filterhigh#(x,cons(x,xs))) - Weak TRS: filterhigh(n,cons(x,xs)) -> if2(ge(x,n),n,x,xs) filterhigh(n,nil()) -> nil() filterlow(n,cons(x,xs)) -> if1(ge(n,x),n,x,xs) filterlow(n,nil()) -> nil() ge(x,0()) -> true() ge(0(),s(x)) -> false() ge(s(x),s(y)) -> ge(x,y) if1(false(),n,x,xs) -> cons(x,filterlow(n,xs)) if1(true(),n,x,xs) -> filterlow(n,xs) if2(false(),n,x,xs) -> cons(x,filterhigh(n,xs)) if2(true(),n,x,xs) -> filterhigh(n,xs) - Signature: {append/2,filterhigh/2,filterlow/2,ge/2,if1/4,if2/4,qsort/1,append#/2,filterhigh#/2,filterlow#/2,ge#/2 ,if1#/4,if2#/4,qsort#/1} / {0/0,cons/2,false/0,nil/0,s/1,true/0,ys/0,c_1/1,c_2/0,c_3/2,c_4/0,c_5/2,c_6/0 ,c_7/0,c_8/0,c_9/1,c_10/1,c_11/1,c_12/1,c_13/1,c_14/4,c_15/0} - Obligation: innermost runtime complexity wrt. defined symbols {append#,filterhigh#,filterlow#,ge#,if1#,if2# ,qsort#} and constructors {0,cons,false,nil,s,true,ys} + Applied Processor: EmptyProcessor + Details: The problem is still open. MAYBE