WORST_CASE(?,O(n^5)) * Step 1: DependencyPairs WORST_CASE(?,O(n^5)) + Considered Problem: - Strict TRS: #equal(@x,@y) -> #eq(@x,@y) #greater(@x,@y) -> #ckgt(#compare(@x,@y)) append(@l,@ys) -> append#1(@l,@ys) append#1(::(@x,@xs),@ys) -> ::(@x,append(@xs,@ys)) append#1(nil(),@ys) -> @ys insert(@x,@l) -> insert#1(@x,@l,@x) insert#1(tuple#2(@valX,@keyX),@l,@x) -> insert#2(@l,@keyX,@valX,@x) insert#2(::(@l1,@ls),@keyX,@valX,@x) -> insert#3(@l1,@keyX,@ls,@valX,@x) insert#2(nil(),@keyX,@valX,@x) -> ::(tuple#2(::(@valX,nil()),@keyX),nil()) insert#3(tuple#2(@vals1,@key1),@keyX,@ls,@valX,@x) -> insert#4(#equal(@key1,@keyX) ,@key1 ,@ls ,@valX ,@vals1 ,@x) insert#4(#false(),@key1,@ls,@valX,@vals1,@x) -> ::(tuple#2(@vals1,@key1),insert(@x,@ls)) insert#4(#true(),@key1,@ls,@valX,@vals1,@x) -> ::(tuple#2(::(@valX,@vals1),@key1),@ls) quicksort(@l) -> quicksort#1(@l) quicksort#1(::(@z,@zs)) -> quicksort#2(splitqs(@z,@zs),@z) quicksort#1(nil()) -> nil() quicksort#2(tuple#2(@xs,@ys),@z) -> append(quicksort(@xs),::(@z,quicksort(@ys))) sortAll(@l) -> sortAll#1(@l) sortAll#1(::(@x,@xs)) -> sortAll#2(@x,@xs) sortAll#1(nil()) -> nil() sortAll#2(tuple#2(@vals,@key),@xs) -> ::(tuple#2(quicksort(@vals),@key),sortAll(@xs)) split(@l) -> split#1(@l) split#1(::(@x,@xs)) -> insert(@x,split(@xs)) split#1(nil()) -> nil() splitAndSort(@l) -> sortAll(split(@l)) splitqs(@pivot,@l) -> splitqs#1(@l,@pivot) splitqs#1(::(@x,@xs),@pivot) -> splitqs#2(splitqs(@pivot,@xs),@pivot,@x) splitqs#1(nil(),@pivot) -> tuple#2(nil(),nil()) splitqs#2(tuple#2(@ls,@rs),@pivot,@x) -> splitqs#3(#greater(@x,@pivot),@ls,@rs,@x) splitqs#3(#false(),@ls,@rs,@x) -> tuple#2(::(@x,@ls),@rs) splitqs#3(#true(),@ls,@rs,@x) -> tuple#2(@ls,::(@x,@rs)) - Weak TRS: #and(#false(),#false()) -> #false() #and(#false(),#true()) -> #false() #and(#true(),#false()) -> #false() #and(#true(),#true()) -> #true() #ckgt(#EQ()) -> #false() #ckgt(#GT()) -> #true() #ckgt(#LT()) -> #false() #compare(#0(),#0()) -> #EQ() #compare(#0(),#neg(@y)) -> #GT() #compare(#0(),#pos(@y)) -> #LT() #compare(#0(),#s(@y)) -> #LT() #compare(#neg(@x),#0()) -> #LT() #compare(#neg(@x),#neg(@y)) -> #compare(@y,@x) #compare(#neg(@x),#pos(@y)) -> #LT() #compare(#pos(@x),#0()) -> #GT() #compare(#pos(@x),#neg(@y)) -> #GT() #compare(#pos(@x),#pos(@y)) -> #compare(@x,@y) #compare(#s(@x),#0()) -> #GT() #compare(#s(@x),#s(@y)) -> #compare(@x,@y) #eq(#0(),#0()) -> #true() #eq(#0(),#neg(@y)) -> #false() #eq(#0(),#pos(@y)) -> #false() #eq(#0(),#s(@y)) -> #false() #eq(#neg(@x),#0()) -> #false() #eq(#neg(@x),#neg(@y)) -> #eq(@x,@y) #eq(#neg(@x),#pos(@y)) -> #false() #eq(#pos(@x),#0()) -> #false() #eq(#pos(@x),#neg(@y)) -> #false() #eq(#pos(@x),#pos(@y)) -> #eq(@x,@y) #eq(#s(@x),#0()) -> #false() #eq(#s(@x),#s(@y)) -> #eq(@x,@y) #eq(::(@x_1,@x_2),::(@y_1,@y_2)) -> #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #eq(::(@x_1,@x_2),nil()) -> #false() #eq(::(@x_1,@x_2),tuple#2(@y_1,@y_2)) -> #false() #eq(nil(),::(@y_1,@y_2)) -> #false() #eq(nil(),nil()) -> #true() #eq(nil(),tuple#2(@y_1,@y_2)) -> #false() #eq(tuple#2(@x_1,@x_2),::(@y_1,@y_2)) -> #false() #eq(tuple#2(@x_1,@x_2),nil()) -> #false() #eq(tuple#2(@x_1,@x_2),tuple#2(@y_1,@y_2)) -> #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) - Signature: {#and/2,#ckgt/1,#compare/2,#eq/2,#equal/2,#greater/2,append/2,append#1/2,insert/2,insert#1/3,insert#2/4 ,insert#3/5,insert#4/6,quicksort/1,quicksort#1/1,quicksort#2/2,sortAll/1,sortAll#1/1,sortAll#2/2,split/1 ,split#1/1,splitAndSort/1,splitqs/2,splitqs#1/2,splitqs#2/3,splitqs#3/4} / {#0/0,#EQ/0,#GT/0,#LT/0,#false/0 ,#neg/1,#pos/1,#s/1,#true/0,::/2,nil/0,tuple#2/2} - Obligation: innermost runtime complexity wrt. defined symbols {#and,#ckgt,#compare,#eq,#equal,#greater,append,append#1 ,insert,insert#1,insert#2,insert#3,insert#4,quicksort,quicksort#1,quicksort#2,sortAll,sortAll#1,sortAll#2 ,split,split#1,splitAndSort,splitqs,splitqs#1,splitqs#2,splitqs#3} and constructors {#0,#EQ,#GT,#LT,#false ,#neg,#pos,#s,#true,::,nil,tuple#2} + Applied Processor: DependencyPairs {dpKind_ = DT} + Details: We add the following dependency tuples: Strict DPs #equal#(@x,@y) -> c_1(#eq#(@x,@y)) #greater#(@x,@y) -> c_2(#ckgt#(#compare(@x,@y)),#compare#(@x,@y)) append#(@l,@ys) -> c_3(append#1#(@l,@ys)) append#1#(::(@x,@xs),@ys) -> c_4(append#(@xs,@ys)) append#1#(nil(),@ys) -> c_5() insert#(@x,@l) -> c_6(insert#1#(@x,@l,@x)) insert#1#(tuple#2(@valX,@keyX),@l,@x) -> c_7(insert#2#(@l,@keyX,@valX,@x)) insert#2#(::(@l1,@ls),@keyX,@valX,@x) -> c_8(insert#3#(@l1,@keyX,@ls,@valX,@x)) insert#2#(nil(),@keyX,@valX,@x) -> c_9() insert#3#(tuple#2(@vals1,@key1),@keyX,@ls,@valX,@x) -> c_10(insert#4#(#equal(@key1,@keyX) ,@key1 ,@ls ,@valX ,@vals1 ,@x) ,#equal#(@key1,@keyX)) insert#4#(#false(),@key1,@ls,@valX,@vals1,@x) -> c_11(insert#(@x,@ls)) insert#4#(#true(),@key1,@ls,@valX,@vals1,@x) -> c_12() quicksort#(@l) -> c_13(quicksort#1#(@l)) quicksort#1#(::(@z,@zs)) -> c_14(quicksort#2#(splitqs(@z,@zs),@z),splitqs#(@z,@zs)) quicksort#1#(nil()) -> c_15() quicksort#2#(tuple#2(@xs,@ys),@z) -> c_16(append#(quicksort(@xs),::(@z,quicksort(@ys))) ,quicksort#(@xs) ,quicksort#(@ys)) sortAll#(@l) -> c_17(sortAll#1#(@l)) sortAll#1#(::(@x,@xs)) -> c_18(sortAll#2#(@x,@xs)) sortAll#1#(nil()) -> c_19() sortAll#2#(tuple#2(@vals,@key),@xs) -> c_20(quicksort#(@vals),sortAll#(@xs)) split#(@l) -> c_21(split#1#(@l)) split#1#(::(@x,@xs)) -> c_22(insert#(@x,split(@xs)),split#(@xs)) split#1#(nil()) -> c_23() splitAndSort#(@l) -> c_24(sortAll#(split(@l)),split#(@l)) splitqs#(@pivot,@l) -> c_25(splitqs#1#(@l,@pivot)) splitqs#1#(::(@x,@xs),@pivot) -> c_26(splitqs#2#(splitqs(@pivot,@xs),@pivot,@x),splitqs#(@pivot,@xs)) splitqs#1#(nil(),@pivot) -> c_27() splitqs#2#(tuple#2(@ls,@rs),@pivot,@x) -> c_28(splitqs#3#(#greater(@x,@pivot),@ls,@rs,@x) ,#greater#(@x,@pivot)) splitqs#3#(#false(),@ls,@rs,@x) -> c_29() splitqs#3#(#true(),@ls,@rs,@x) -> c_30() Weak DPs #and#(#false(),#false()) -> c_31() #and#(#false(),#true()) -> c_32() #and#(#true(),#false()) -> c_33() #and#(#true(),#true()) -> c_34() #ckgt#(#EQ()) -> c_35() #ckgt#(#GT()) -> c_36() #ckgt#(#LT()) -> c_37() #compare#(#0(),#0()) -> c_38() #compare#(#0(),#neg(@y)) -> c_39() #compare#(#0(),#pos(@y)) -> c_40() #compare#(#0(),#s(@y)) -> c_41() #compare#(#neg(@x),#0()) -> c_42() #compare#(#neg(@x),#neg(@y)) -> c_43(#compare#(@y,@x)) #compare#(#neg(@x),#pos(@y)) -> c_44() #compare#(#pos(@x),#0()) -> c_45() #compare#(#pos(@x),#neg(@y)) -> c_46() #compare#(#pos(@x),#pos(@y)) -> c_47(#compare#(@x,@y)) #compare#(#s(@x),#0()) -> c_48() #compare#(#s(@x),#s(@y)) -> c_49(#compare#(@x,@y)) #eq#(#0(),#0()) -> c_50() #eq#(#0(),#neg(@y)) -> c_51() #eq#(#0(),#pos(@y)) -> c_52() #eq#(#0(),#s(@y)) -> c_53() #eq#(#neg(@x),#0()) -> c_54() #eq#(#neg(@x),#neg(@y)) -> c_55(#eq#(@x,@y)) #eq#(#neg(@x),#pos(@y)) -> c_56() #eq#(#pos(@x),#0()) -> c_57() #eq#(#pos(@x),#neg(@y)) -> c_58() #eq#(#pos(@x),#pos(@y)) -> c_59(#eq#(@x,@y)) #eq#(#s(@x),#0()) -> c_60() #eq#(#s(@x),#s(@y)) -> c_61(#eq#(@x,@y)) #eq#(::(@x_1,@x_2),::(@y_1,@y_2)) -> c_62(#and#(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) ,#eq#(@x_1,@y_1) ,#eq#(@x_2,@y_2)) #eq#(::(@x_1,@x_2),nil()) -> c_63() #eq#(::(@x_1,@x_2),tuple#2(@y_1,@y_2)) -> c_64() #eq#(nil(),::(@y_1,@y_2)) -> c_65() #eq#(nil(),nil()) -> c_66() #eq#(nil(),tuple#2(@y_1,@y_2)) -> c_67() #eq#(tuple#2(@x_1,@x_2),::(@y_1,@y_2)) -> c_68() #eq#(tuple#2(@x_1,@x_2),nil()) -> c_69() #eq#(tuple#2(@x_1,@x_2),tuple#2(@y_1,@y_2)) -> c_70(#and#(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) ,#eq#(@x_1,@y_1) ,#eq#(@x_2,@y_2)) and mark the set of starting terms. * Step 2: PredecessorEstimation WORST_CASE(?,O(n^5)) + Considered Problem: - Strict DPs: #equal#(@x,@y) -> c_1(#eq#(@x,@y)) #greater#(@x,@y) -> c_2(#ckgt#(#compare(@x,@y)),#compare#(@x,@y)) append#(@l,@ys) -> c_3(append#1#(@l,@ys)) append#1#(::(@x,@xs),@ys) -> c_4(append#(@xs,@ys)) append#1#(nil(),@ys) -> c_5() insert#(@x,@l) -> c_6(insert#1#(@x,@l,@x)) insert#1#(tuple#2(@valX,@keyX),@l,@x) -> c_7(insert#2#(@l,@keyX,@valX,@x)) insert#2#(::(@l1,@ls),@keyX,@valX,@x) -> c_8(insert#3#(@l1,@keyX,@ls,@valX,@x)) insert#2#(nil(),@keyX,@valX,@x) -> c_9() insert#3#(tuple#2(@vals1,@key1),@keyX,@ls,@valX,@x) -> c_10(insert#4#(#equal(@key1,@keyX) ,@key1 ,@ls ,@valX ,@vals1 ,@x) ,#equal#(@key1,@keyX)) insert#4#(#false(),@key1,@ls,@valX,@vals1,@x) -> c_11(insert#(@x,@ls)) insert#4#(#true(),@key1,@ls,@valX,@vals1,@x) -> c_12() quicksort#(@l) -> c_13(quicksort#1#(@l)) quicksort#1#(::(@z,@zs)) -> c_14(quicksort#2#(splitqs(@z,@zs),@z),splitqs#(@z,@zs)) quicksort#1#(nil()) -> c_15() quicksort#2#(tuple#2(@xs,@ys),@z) -> c_16(append#(quicksort(@xs),::(@z,quicksort(@ys))) ,quicksort#(@xs) ,quicksort#(@ys)) sortAll#(@l) -> c_17(sortAll#1#(@l)) sortAll#1#(::(@x,@xs)) -> c_18(sortAll#2#(@x,@xs)) sortAll#1#(nil()) -> c_19() sortAll#2#(tuple#2(@vals,@key),@xs) -> c_20(quicksort#(@vals),sortAll#(@xs)) split#(@l) -> c_21(split#1#(@l)) split#1#(::(@x,@xs)) -> c_22(insert#(@x,split(@xs)),split#(@xs)) split#1#(nil()) -> c_23() splitAndSort#(@l) -> c_24(sortAll#(split(@l)),split#(@l)) splitqs#(@pivot,@l) -> c_25(splitqs#1#(@l,@pivot)) splitqs#1#(::(@x,@xs),@pivot) -> c_26(splitqs#2#(splitqs(@pivot,@xs),@pivot,@x),splitqs#(@pivot,@xs)) splitqs#1#(nil(),@pivot) -> c_27() splitqs#2#(tuple#2(@ls,@rs),@pivot,@x) -> c_28(splitqs#3#(#greater(@x,@pivot),@ls,@rs,@x) ,#greater#(@x,@pivot)) splitqs#3#(#false(),@ls,@rs,@x) -> c_29() splitqs#3#(#true(),@ls,@rs,@x) -> c_30() - Weak DPs: #and#(#false(),#false()) -> c_31() #and#(#false(),#true()) -> c_32() #and#(#true(),#false()) -> c_33() #and#(#true(),#true()) -> c_34() #ckgt#(#EQ()) -> c_35() #ckgt#(#GT()) -> c_36() #ckgt#(#LT()) -> c_37() #compare#(#0(),#0()) -> c_38() #compare#(#0(),#neg(@y)) -> c_39() #compare#(#0(),#pos(@y)) -> c_40() #compare#(#0(),#s(@y)) -> c_41() #compare#(#neg(@x),#0()) -> c_42() #compare#(#neg(@x),#neg(@y)) -> c_43(#compare#(@y,@x)) #compare#(#neg(@x),#pos(@y)) -> c_44() #compare#(#pos(@x),#0()) -> c_45() #compare#(#pos(@x),#neg(@y)) -> c_46() #compare#(#pos(@x),#pos(@y)) -> c_47(#compare#(@x,@y)) #compare#(#s(@x),#0()) -> c_48() #compare#(#s(@x),#s(@y)) -> c_49(#compare#(@x,@y)) #eq#(#0(),#0()) -> c_50() #eq#(#0(),#neg(@y)) -> c_51() #eq#(#0(),#pos(@y)) -> c_52() #eq#(#0(),#s(@y)) -> c_53() #eq#(#neg(@x),#0()) -> c_54() #eq#(#neg(@x),#neg(@y)) -> c_55(#eq#(@x,@y)) #eq#(#neg(@x),#pos(@y)) -> c_56() #eq#(#pos(@x),#0()) -> c_57() #eq#(#pos(@x),#neg(@y)) -> c_58() #eq#(#pos(@x),#pos(@y)) -> c_59(#eq#(@x,@y)) #eq#(#s(@x),#0()) -> c_60() #eq#(#s(@x),#s(@y)) -> c_61(#eq#(@x,@y)) #eq#(::(@x_1,@x_2),::(@y_1,@y_2)) -> c_62(#and#(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) ,#eq#(@x_1,@y_1) ,#eq#(@x_2,@y_2)) #eq#(::(@x_1,@x_2),nil()) -> c_63() #eq#(::(@x_1,@x_2),tuple#2(@y_1,@y_2)) -> c_64() #eq#(nil(),::(@y_1,@y_2)) -> c_65() #eq#(nil(),nil()) -> c_66() #eq#(nil(),tuple#2(@y_1,@y_2)) -> c_67() #eq#(tuple#2(@x_1,@x_2),::(@y_1,@y_2)) -> c_68() #eq#(tuple#2(@x_1,@x_2),nil()) -> c_69() #eq#(tuple#2(@x_1,@x_2),tuple#2(@y_1,@y_2)) -> c_70(#and#(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) ,#eq#(@x_1,@y_1) ,#eq#(@x_2,@y_2)) - Weak TRS: #and(#false(),#false()) -> #false() #and(#false(),#true()) -> #false() #and(#true(),#false()) -> #false() #and(#true(),#true()) -> #true() #ckgt(#EQ()) -> #false() #ckgt(#GT()) -> #true() #ckgt(#LT()) -> #false() #compare(#0(),#0()) -> #EQ() #compare(#0(),#neg(@y)) -> #GT() #compare(#0(),#pos(@y)) -> #LT() #compare(#0(),#s(@y)) -> #LT() #compare(#neg(@x),#0()) -> #LT() #compare(#neg(@x),#neg(@y)) -> #compare(@y,@x) #compare(#neg(@x),#pos(@y)) -> #LT() #compare(#pos(@x),#0()) -> #GT() #compare(#pos(@x),#neg(@y)) -> #GT() #compare(#pos(@x),#pos(@y)) -> #compare(@x,@y) #compare(#s(@x),#0()) -> #GT() #compare(#s(@x),#s(@y)) -> #compare(@x,@y) #eq(#0(),#0()) -> #true() #eq(#0(),#neg(@y)) -> #false() #eq(#0(),#pos(@y)) -> #false() #eq(#0(),#s(@y)) -> #false() #eq(#neg(@x),#0()) -> #false() #eq(#neg(@x),#neg(@y)) -> #eq(@x,@y) #eq(#neg(@x),#pos(@y)) -> #false() #eq(#pos(@x),#0()) -> #false() #eq(#pos(@x),#neg(@y)) -> #false() #eq(#pos(@x),#pos(@y)) -> #eq(@x,@y) #eq(#s(@x),#0()) -> #false() #eq(#s(@x),#s(@y)) -> #eq(@x,@y) #eq(::(@x_1,@x_2),::(@y_1,@y_2)) -> #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #eq(::(@x_1,@x_2),nil()) -> #false() #eq(::(@x_1,@x_2),tuple#2(@y_1,@y_2)) -> #false() #eq(nil(),::(@y_1,@y_2)) -> #false() #eq(nil(),nil()) -> #true() #eq(nil(),tuple#2(@y_1,@y_2)) -> #false() #eq(tuple#2(@x_1,@x_2),::(@y_1,@y_2)) -> #false() #eq(tuple#2(@x_1,@x_2),nil()) -> #false() #eq(tuple#2(@x_1,@x_2),tuple#2(@y_1,@y_2)) -> #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #equal(@x,@y) -> #eq(@x,@y) #greater(@x,@y) -> #ckgt(#compare(@x,@y)) append(@l,@ys) -> append#1(@l,@ys) append#1(::(@x,@xs),@ys) -> ::(@x,append(@xs,@ys)) append#1(nil(),@ys) -> @ys insert(@x,@l) -> insert#1(@x,@l,@x) insert#1(tuple#2(@valX,@keyX),@l,@x) -> insert#2(@l,@keyX,@valX,@x) insert#2(::(@l1,@ls),@keyX,@valX,@x) -> insert#3(@l1,@keyX,@ls,@valX,@x) insert#2(nil(),@keyX,@valX,@x) -> ::(tuple#2(::(@valX,nil()),@keyX),nil()) insert#3(tuple#2(@vals1,@key1),@keyX,@ls,@valX,@x) -> insert#4(#equal(@key1,@keyX) ,@key1 ,@ls ,@valX ,@vals1 ,@x) insert#4(#false(),@key1,@ls,@valX,@vals1,@x) -> ::(tuple#2(@vals1,@key1),insert(@x,@ls)) insert#4(#true(),@key1,@ls,@valX,@vals1,@x) -> ::(tuple#2(::(@valX,@vals1),@key1),@ls) quicksort(@l) -> quicksort#1(@l) quicksort#1(::(@z,@zs)) -> quicksort#2(splitqs(@z,@zs),@z) quicksort#1(nil()) -> nil() quicksort#2(tuple#2(@xs,@ys),@z) -> append(quicksort(@xs),::(@z,quicksort(@ys))) sortAll(@l) -> sortAll#1(@l) sortAll#1(::(@x,@xs)) -> sortAll#2(@x,@xs) sortAll#1(nil()) -> nil() sortAll#2(tuple#2(@vals,@key),@xs) -> ::(tuple#2(quicksort(@vals),@key),sortAll(@xs)) split(@l) -> split#1(@l) split#1(::(@x,@xs)) -> insert(@x,split(@xs)) split#1(nil()) -> nil() splitAndSort(@l) -> sortAll(split(@l)) splitqs(@pivot,@l) -> splitqs#1(@l,@pivot) splitqs#1(::(@x,@xs),@pivot) -> splitqs#2(splitqs(@pivot,@xs),@pivot,@x) splitqs#1(nil(),@pivot) -> tuple#2(nil(),nil()) splitqs#2(tuple#2(@ls,@rs),@pivot,@x) -> splitqs#3(#greater(@x,@pivot),@ls,@rs,@x) splitqs#3(#false(),@ls,@rs,@x) -> tuple#2(::(@x,@ls),@rs) splitqs#3(#true(),@ls,@rs,@x) -> tuple#2(@ls,::(@x,@rs)) - Signature: {#and/2,#ckgt/1,#compare/2,#eq/2,#equal/2,#greater/2,append/2,append#1/2,insert/2,insert#1/3,insert#2/4 ,insert#3/5,insert#4/6,quicksort/1,quicksort#1/1,quicksort#2/2,sortAll/1,sortAll#1/1,sortAll#2/2,split/1 ,split#1/1,splitAndSort/1,splitqs/2,splitqs#1/2,splitqs#2/3,splitqs#3/4,#and#/2,#ckgt#/1,#compare#/2,#eq#/2 ,#equal#/2,#greater#/2,append#/2,append#1#/2,insert#/2,insert#1#/3,insert#2#/4,insert#3#/5,insert#4#/6 ,quicksort#/1,quicksort#1#/1,quicksort#2#/2,sortAll#/1,sortAll#1#/1,sortAll#2#/2,split#/1,split#1#/1 ,splitAndSort#/1,splitqs#/2,splitqs#1#/2,splitqs#2#/3,splitqs#3#/4} / {#0/0,#EQ/0,#GT/0,#LT/0,#false/0 ,#neg/1,#pos/1,#s/1,#true/0,::/2,nil/0,tuple#2/2,c_1/1,c_2/2,c_3/1,c_4/1,c_5/0,c_6/1,c_7/1,c_8/1,c_9/0 ,c_10/2,c_11/1,c_12/0,c_13/1,c_14/2,c_15/0,c_16/3,c_17/1,c_18/1,c_19/0,c_20/2,c_21/1,c_22/2,c_23/0,c_24/2 ,c_25/1,c_26/2,c_27/0,c_28/2,c_29/0,c_30/0,c_31/0,c_32/0,c_33/0,c_34/0,c_35/0,c_36/0,c_37/0,c_38/0,c_39/0 ,c_40/0,c_41/0,c_42/0,c_43/1,c_44/0,c_45/0,c_46/0,c_47/1,c_48/0,c_49/1,c_50/0,c_51/0,c_52/0,c_53/0,c_54/0 ,c_55/1,c_56/0,c_57/0,c_58/0,c_59/1,c_60/0,c_61/1,c_62/3,c_63/0,c_64/0,c_65/0,c_66/0,c_67/0,c_68/0,c_69/0 ,c_70/3} - Obligation: innermost runtime complexity wrt. defined symbols {#and#,#ckgt#,#compare#,#eq#,#equal#,#greater#,append# ,append#1#,insert#,insert#1#,insert#2#,insert#3#,insert#4#,quicksort#,quicksort#1#,quicksort#2#,sortAll# ,sortAll#1#,sortAll#2#,split#,split#1#,splitAndSort#,splitqs#,splitqs#1#,splitqs#2# ,splitqs#3#} and constructors {#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} + Applied Processor: PredecessorEstimation {onSelection = all simple predecessor estimation selector} + Details: We estimate the number of application of {1,2,5,9,12,15,19,23,27,29,30} by application of Pre({1,2,5,9,12,15,19,23,27,29,30}) = {3,7,10,13,17,21,25,28}. Here rules are labelled as follows: 1: #equal#(@x,@y) -> c_1(#eq#(@x,@y)) 2: #greater#(@x,@y) -> c_2(#ckgt#(#compare(@x,@y)),#compare#(@x,@y)) 3: append#(@l,@ys) -> c_3(append#1#(@l,@ys)) 4: append#1#(::(@x,@xs),@ys) -> c_4(append#(@xs,@ys)) 5: append#1#(nil(),@ys) -> c_5() 6: insert#(@x,@l) -> c_6(insert#1#(@x,@l,@x)) 7: insert#1#(tuple#2(@valX,@keyX),@l,@x) -> c_7(insert#2#(@l,@keyX,@valX,@x)) 8: insert#2#(::(@l1,@ls),@keyX,@valX,@x) -> c_8(insert#3#(@l1,@keyX,@ls,@valX,@x)) 9: insert#2#(nil(),@keyX,@valX,@x) -> c_9() 10: insert#3#(tuple#2(@vals1,@key1),@keyX,@ls,@valX,@x) -> c_10(insert#4#(#equal(@key1,@keyX) ,@key1 ,@ls ,@valX ,@vals1 ,@x) ,#equal#(@key1,@keyX)) 11: insert#4#(#false(),@key1,@ls,@valX,@vals1,@x) -> c_11(insert#(@x,@ls)) 12: insert#4#(#true(),@key1,@ls,@valX,@vals1,@x) -> c_12() 13: quicksort#(@l) -> c_13(quicksort#1#(@l)) 14: quicksort#1#(::(@z,@zs)) -> c_14(quicksort#2#(splitqs(@z,@zs),@z),splitqs#(@z,@zs)) 15: quicksort#1#(nil()) -> c_15() 16: quicksort#2#(tuple#2(@xs,@ys),@z) -> c_16(append#(quicksort(@xs),::(@z,quicksort(@ys))) ,quicksort#(@xs) ,quicksort#(@ys)) 17: sortAll#(@l) -> c_17(sortAll#1#(@l)) 18: sortAll#1#(::(@x,@xs)) -> c_18(sortAll#2#(@x,@xs)) 19: sortAll#1#(nil()) -> c_19() 20: sortAll#2#(tuple#2(@vals,@key),@xs) -> c_20(quicksort#(@vals),sortAll#(@xs)) 21: split#(@l) -> c_21(split#1#(@l)) 22: split#1#(::(@x,@xs)) -> c_22(insert#(@x,split(@xs)),split#(@xs)) 23: split#1#(nil()) -> c_23() 24: splitAndSort#(@l) -> c_24(sortAll#(split(@l)),split#(@l)) 25: splitqs#(@pivot,@l) -> c_25(splitqs#1#(@l,@pivot)) 26: splitqs#1#(::(@x,@xs),@pivot) -> c_26(splitqs#2#(splitqs(@pivot,@xs),@pivot,@x),splitqs#(@pivot,@xs)) 27: splitqs#1#(nil(),@pivot) -> c_27() 28: splitqs#2#(tuple#2(@ls,@rs),@pivot,@x) -> c_28(splitqs#3#(#greater(@x,@pivot),@ls,@rs,@x) ,#greater#(@x,@pivot)) 29: splitqs#3#(#false(),@ls,@rs,@x) -> c_29() 30: splitqs#3#(#true(),@ls,@rs,@x) -> c_30() 31: #and#(#false(),#false()) -> c_31() 32: #and#(#false(),#true()) -> c_32() 33: #and#(#true(),#false()) -> c_33() 34: #and#(#true(),#true()) -> c_34() 35: #ckgt#(#EQ()) -> c_35() 36: #ckgt#(#GT()) -> c_36() 37: #ckgt#(#LT()) -> c_37() 38: #compare#(#0(),#0()) -> c_38() 39: #compare#(#0(),#neg(@y)) -> c_39() 40: #compare#(#0(),#pos(@y)) -> c_40() 41: #compare#(#0(),#s(@y)) -> c_41() 42: #compare#(#neg(@x),#0()) -> c_42() 43: #compare#(#neg(@x),#neg(@y)) -> c_43(#compare#(@y,@x)) 44: #compare#(#neg(@x),#pos(@y)) -> c_44() 45: #compare#(#pos(@x),#0()) -> c_45() 46: #compare#(#pos(@x),#neg(@y)) -> c_46() 47: #compare#(#pos(@x),#pos(@y)) -> c_47(#compare#(@x,@y)) 48: #compare#(#s(@x),#0()) -> c_48() 49: #compare#(#s(@x),#s(@y)) -> c_49(#compare#(@x,@y)) 50: #eq#(#0(),#0()) -> c_50() 51: #eq#(#0(),#neg(@y)) -> c_51() 52: #eq#(#0(),#pos(@y)) -> c_52() 53: #eq#(#0(),#s(@y)) -> c_53() 54: #eq#(#neg(@x),#0()) -> c_54() 55: #eq#(#neg(@x),#neg(@y)) -> c_55(#eq#(@x,@y)) 56: #eq#(#neg(@x),#pos(@y)) -> c_56() 57: #eq#(#pos(@x),#0()) -> c_57() 58: #eq#(#pos(@x),#neg(@y)) -> c_58() 59: #eq#(#pos(@x),#pos(@y)) -> c_59(#eq#(@x,@y)) 60: #eq#(#s(@x),#0()) -> c_60() 61: #eq#(#s(@x),#s(@y)) -> c_61(#eq#(@x,@y)) 62: #eq#(::(@x_1,@x_2),::(@y_1,@y_2)) -> c_62(#and#(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) ,#eq#(@x_1,@y_1) ,#eq#(@x_2,@y_2)) 63: #eq#(::(@x_1,@x_2),nil()) -> c_63() 64: #eq#(::(@x_1,@x_2),tuple#2(@y_1,@y_2)) -> c_64() 65: #eq#(nil(),::(@y_1,@y_2)) -> c_65() 66: #eq#(nil(),nil()) -> c_66() 67: #eq#(nil(),tuple#2(@y_1,@y_2)) -> c_67() 68: #eq#(tuple#2(@x_1,@x_2),::(@y_1,@y_2)) -> c_68() 69: #eq#(tuple#2(@x_1,@x_2),nil()) -> c_69() 70: #eq#(tuple#2(@x_1,@x_2),tuple#2(@y_1,@y_2)) -> c_70(#and#(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) ,#eq#(@x_1,@y_1) ,#eq#(@x_2,@y_2)) * Step 3: PredecessorEstimation WORST_CASE(?,O(n^5)) + Considered Problem: - Strict DPs: append#(@l,@ys) -> c_3(append#1#(@l,@ys)) append#1#(::(@x,@xs),@ys) -> c_4(append#(@xs,@ys)) insert#(@x,@l) -> c_6(insert#1#(@x,@l,@x)) insert#1#(tuple#2(@valX,@keyX),@l,@x) -> c_7(insert#2#(@l,@keyX,@valX,@x)) insert#2#(::(@l1,@ls),@keyX,@valX,@x) -> c_8(insert#3#(@l1,@keyX,@ls,@valX,@x)) insert#3#(tuple#2(@vals1,@key1),@keyX,@ls,@valX,@x) -> c_10(insert#4#(#equal(@key1,@keyX) ,@key1 ,@ls ,@valX ,@vals1 ,@x) ,#equal#(@key1,@keyX)) insert#4#(#false(),@key1,@ls,@valX,@vals1,@x) -> c_11(insert#(@x,@ls)) quicksort#(@l) -> c_13(quicksort#1#(@l)) quicksort#1#(::(@z,@zs)) -> c_14(quicksort#2#(splitqs(@z,@zs),@z),splitqs#(@z,@zs)) quicksort#2#(tuple#2(@xs,@ys),@z) -> c_16(append#(quicksort(@xs),::(@z,quicksort(@ys))) ,quicksort#(@xs) ,quicksort#(@ys)) sortAll#(@l) -> c_17(sortAll#1#(@l)) sortAll#1#(::(@x,@xs)) -> c_18(sortAll#2#(@x,@xs)) sortAll#2#(tuple#2(@vals,@key),@xs) -> c_20(quicksort#(@vals),sortAll#(@xs)) split#(@l) -> c_21(split#1#(@l)) split#1#(::(@x,@xs)) -> c_22(insert#(@x,split(@xs)),split#(@xs)) splitAndSort#(@l) -> c_24(sortAll#(split(@l)),split#(@l)) splitqs#(@pivot,@l) -> c_25(splitqs#1#(@l,@pivot)) splitqs#1#(::(@x,@xs),@pivot) -> c_26(splitqs#2#(splitqs(@pivot,@xs),@pivot,@x),splitqs#(@pivot,@xs)) splitqs#2#(tuple#2(@ls,@rs),@pivot,@x) -> c_28(splitqs#3#(#greater(@x,@pivot),@ls,@rs,@x) ,#greater#(@x,@pivot)) - Weak DPs: #and#(#false(),#false()) -> c_31() #and#(#false(),#true()) -> c_32() #and#(#true(),#false()) -> c_33() #and#(#true(),#true()) -> c_34() #ckgt#(#EQ()) -> c_35() #ckgt#(#GT()) -> c_36() #ckgt#(#LT()) -> c_37() #compare#(#0(),#0()) -> c_38() #compare#(#0(),#neg(@y)) -> c_39() #compare#(#0(),#pos(@y)) -> c_40() #compare#(#0(),#s(@y)) -> c_41() #compare#(#neg(@x),#0()) -> c_42() #compare#(#neg(@x),#neg(@y)) -> c_43(#compare#(@y,@x)) #compare#(#neg(@x),#pos(@y)) -> c_44() #compare#(#pos(@x),#0()) -> c_45() #compare#(#pos(@x),#neg(@y)) -> c_46() #compare#(#pos(@x),#pos(@y)) -> c_47(#compare#(@x,@y)) #compare#(#s(@x),#0()) -> c_48() #compare#(#s(@x),#s(@y)) -> c_49(#compare#(@x,@y)) #eq#(#0(),#0()) -> c_50() #eq#(#0(),#neg(@y)) -> c_51() #eq#(#0(),#pos(@y)) -> c_52() #eq#(#0(),#s(@y)) -> c_53() #eq#(#neg(@x),#0()) -> c_54() #eq#(#neg(@x),#neg(@y)) -> c_55(#eq#(@x,@y)) #eq#(#neg(@x),#pos(@y)) -> c_56() #eq#(#pos(@x),#0()) -> c_57() #eq#(#pos(@x),#neg(@y)) -> c_58() #eq#(#pos(@x),#pos(@y)) -> c_59(#eq#(@x,@y)) #eq#(#s(@x),#0()) -> c_60() #eq#(#s(@x),#s(@y)) -> c_61(#eq#(@x,@y)) #eq#(::(@x_1,@x_2),::(@y_1,@y_2)) -> c_62(#and#(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) ,#eq#(@x_1,@y_1) ,#eq#(@x_2,@y_2)) #eq#(::(@x_1,@x_2),nil()) -> c_63() #eq#(::(@x_1,@x_2),tuple#2(@y_1,@y_2)) -> c_64() #eq#(nil(),::(@y_1,@y_2)) -> c_65() #eq#(nil(),nil()) -> c_66() #eq#(nil(),tuple#2(@y_1,@y_2)) -> c_67() #eq#(tuple#2(@x_1,@x_2),::(@y_1,@y_2)) -> c_68() #eq#(tuple#2(@x_1,@x_2),nil()) -> c_69() #eq#(tuple#2(@x_1,@x_2),tuple#2(@y_1,@y_2)) -> c_70(#and#(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) ,#eq#(@x_1,@y_1) ,#eq#(@x_2,@y_2)) #equal#(@x,@y) -> c_1(#eq#(@x,@y)) #greater#(@x,@y) -> c_2(#ckgt#(#compare(@x,@y)),#compare#(@x,@y)) append#1#(nil(),@ys) -> c_5() insert#2#(nil(),@keyX,@valX,@x) -> c_9() insert#4#(#true(),@key1,@ls,@valX,@vals1,@x) -> c_12() quicksort#1#(nil()) -> c_15() sortAll#1#(nil()) -> c_19() split#1#(nil()) -> c_23() splitqs#1#(nil(),@pivot) -> c_27() splitqs#3#(#false(),@ls,@rs,@x) -> c_29() splitqs#3#(#true(),@ls,@rs,@x) -> c_30() - Weak TRS: #and(#false(),#false()) -> #false() #and(#false(),#true()) -> #false() #and(#true(),#false()) -> #false() #and(#true(),#true()) -> #true() #ckgt(#EQ()) -> #false() #ckgt(#GT()) -> #true() #ckgt(#LT()) -> #false() #compare(#0(),#0()) -> #EQ() #compare(#0(),#neg(@y)) -> #GT() #compare(#0(),#pos(@y)) -> #LT() #compare(#0(),#s(@y)) -> #LT() #compare(#neg(@x),#0()) -> #LT() #compare(#neg(@x),#neg(@y)) -> #compare(@y,@x) #compare(#neg(@x),#pos(@y)) -> #LT() #compare(#pos(@x),#0()) -> #GT() #compare(#pos(@x),#neg(@y)) -> #GT() #compare(#pos(@x),#pos(@y)) -> #compare(@x,@y) #compare(#s(@x),#0()) -> #GT() #compare(#s(@x),#s(@y)) -> #compare(@x,@y) #eq(#0(),#0()) -> #true() #eq(#0(),#neg(@y)) -> #false() #eq(#0(),#pos(@y)) -> #false() #eq(#0(),#s(@y)) -> #false() #eq(#neg(@x),#0()) -> #false() #eq(#neg(@x),#neg(@y)) -> #eq(@x,@y) #eq(#neg(@x),#pos(@y)) -> #false() #eq(#pos(@x),#0()) -> #false() #eq(#pos(@x),#neg(@y)) -> #false() #eq(#pos(@x),#pos(@y)) -> #eq(@x,@y) #eq(#s(@x),#0()) -> #false() #eq(#s(@x),#s(@y)) -> #eq(@x,@y) #eq(::(@x_1,@x_2),::(@y_1,@y_2)) -> #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #eq(::(@x_1,@x_2),nil()) -> #false() #eq(::(@x_1,@x_2),tuple#2(@y_1,@y_2)) -> #false() #eq(nil(),::(@y_1,@y_2)) -> #false() #eq(nil(),nil()) -> #true() #eq(nil(),tuple#2(@y_1,@y_2)) -> #false() #eq(tuple#2(@x_1,@x_2),::(@y_1,@y_2)) -> #false() #eq(tuple#2(@x_1,@x_2),nil()) -> #false() #eq(tuple#2(@x_1,@x_2),tuple#2(@y_1,@y_2)) -> #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #equal(@x,@y) -> #eq(@x,@y) #greater(@x,@y) -> #ckgt(#compare(@x,@y)) append(@l,@ys) -> append#1(@l,@ys) append#1(::(@x,@xs),@ys) -> ::(@x,append(@xs,@ys)) append#1(nil(),@ys) -> @ys insert(@x,@l) -> insert#1(@x,@l,@x) insert#1(tuple#2(@valX,@keyX),@l,@x) -> insert#2(@l,@keyX,@valX,@x) insert#2(::(@l1,@ls),@keyX,@valX,@x) -> insert#3(@l1,@keyX,@ls,@valX,@x) insert#2(nil(),@keyX,@valX,@x) -> ::(tuple#2(::(@valX,nil()),@keyX),nil()) insert#3(tuple#2(@vals1,@key1),@keyX,@ls,@valX,@x) -> insert#4(#equal(@key1,@keyX) ,@key1 ,@ls ,@valX ,@vals1 ,@x) insert#4(#false(),@key1,@ls,@valX,@vals1,@x) -> ::(tuple#2(@vals1,@key1),insert(@x,@ls)) insert#4(#true(),@key1,@ls,@valX,@vals1,@x) -> ::(tuple#2(::(@valX,@vals1),@key1),@ls) quicksort(@l) -> quicksort#1(@l) quicksort#1(::(@z,@zs)) -> quicksort#2(splitqs(@z,@zs),@z) quicksort#1(nil()) -> nil() quicksort#2(tuple#2(@xs,@ys),@z) -> append(quicksort(@xs),::(@z,quicksort(@ys))) sortAll(@l) -> sortAll#1(@l) sortAll#1(::(@x,@xs)) -> sortAll#2(@x,@xs) sortAll#1(nil()) -> nil() sortAll#2(tuple#2(@vals,@key),@xs) -> ::(tuple#2(quicksort(@vals),@key),sortAll(@xs)) split(@l) -> split#1(@l) split#1(::(@x,@xs)) -> insert(@x,split(@xs)) split#1(nil()) -> nil() splitAndSort(@l) -> sortAll(split(@l)) splitqs(@pivot,@l) -> splitqs#1(@l,@pivot) splitqs#1(::(@x,@xs),@pivot) -> splitqs#2(splitqs(@pivot,@xs),@pivot,@x) splitqs#1(nil(),@pivot) -> tuple#2(nil(),nil()) splitqs#2(tuple#2(@ls,@rs),@pivot,@x) -> splitqs#3(#greater(@x,@pivot),@ls,@rs,@x) splitqs#3(#false(),@ls,@rs,@x) -> tuple#2(::(@x,@ls),@rs) splitqs#3(#true(),@ls,@rs,@x) -> tuple#2(@ls,::(@x,@rs)) - Signature: {#and/2,#ckgt/1,#compare/2,#eq/2,#equal/2,#greater/2,append/2,append#1/2,insert/2,insert#1/3,insert#2/4 ,insert#3/5,insert#4/6,quicksort/1,quicksort#1/1,quicksort#2/2,sortAll/1,sortAll#1/1,sortAll#2/2,split/1 ,split#1/1,splitAndSort/1,splitqs/2,splitqs#1/2,splitqs#2/3,splitqs#3/4,#and#/2,#ckgt#/1,#compare#/2,#eq#/2 ,#equal#/2,#greater#/2,append#/2,append#1#/2,insert#/2,insert#1#/3,insert#2#/4,insert#3#/5,insert#4#/6 ,quicksort#/1,quicksort#1#/1,quicksort#2#/2,sortAll#/1,sortAll#1#/1,sortAll#2#/2,split#/1,split#1#/1 ,splitAndSort#/1,splitqs#/2,splitqs#1#/2,splitqs#2#/3,splitqs#3#/4} / {#0/0,#EQ/0,#GT/0,#LT/0,#false/0 ,#neg/1,#pos/1,#s/1,#true/0,::/2,nil/0,tuple#2/2,c_1/1,c_2/2,c_3/1,c_4/1,c_5/0,c_6/1,c_7/1,c_8/1,c_9/0 ,c_10/2,c_11/1,c_12/0,c_13/1,c_14/2,c_15/0,c_16/3,c_17/1,c_18/1,c_19/0,c_20/2,c_21/1,c_22/2,c_23/0,c_24/2 ,c_25/1,c_26/2,c_27/0,c_28/2,c_29/0,c_30/0,c_31/0,c_32/0,c_33/0,c_34/0,c_35/0,c_36/0,c_37/0,c_38/0,c_39/0 ,c_40/0,c_41/0,c_42/0,c_43/1,c_44/0,c_45/0,c_46/0,c_47/1,c_48/0,c_49/1,c_50/0,c_51/0,c_52/0,c_53/0,c_54/0 ,c_55/1,c_56/0,c_57/0,c_58/0,c_59/1,c_60/0,c_61/1,c_62/3,c_63/0,c_64/0,c_65/0,c_66/0,c_67/0,c_68/0,c_69/0 ,c_70/3} - Obligation: innermost runtime complexity wrt. defined symbols {#and#,#ckgt#,#compare#,#eq#,#equal#,#greater#,append# ,append#1#,insert#,insert#1#,insert#2#,insert#3#,insert#4#,quicksort#,quicksort#1#,quicksort#2#,sortAll# ,sortAll#1#,sortAll#2#,split#,split#1#,splitAndSort#,splitqs#,splitqs#1#,splitqs#2# ,splitqs#3#} and constructors {#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} + Applied Processor: PredecessorEstimation {onSelection = all simple predecessor estimation selector} + Details: We estimate the number of application of {19} by application of Pre({19}) = {18}. Here rules are labelled as follows: 1: append#(@l,@ys) -> c_3(append#1#(@l,@ys)) 2: append#1#(::(@x,@xs),@ys) -> c_4(append#(@xs,@ys)) 3: insert#(@x,@l) -> c_6(insert#1#(@x,@l,@x)) 4: insert#1#(tuple#2(@valX,@keyX),@l,@x) -> c_7(insert#2#(@l,@keyX,@valX,@x)) 5: insert#2#(::(@l1,@ls),@keyX,@valX,@x) -> c_8(insert#3#(@l1,@keyX,@ls,@valX,@x)) 6: insert#3#(tuple#2(@vals1,@key1),@keyX,@ls,@valX,@x) -> c_10(insert#4#(#equal(@key1,@keyX) ,@key1 ,@ls ,@valX ,@vals1 ,@x) ,#equal#(@key1,@keyX)) 7: insert#4#(#false(),@key1,@ls,@valX,@vals1,@x) -> c_11(insert#(@x,@ls)) 8: quicksort#(@l) -> c_13(quicksort#1#(@l)) 9: quicksort#1#(::(@z,@zs)) -> c_14(quicksort#2#(splitqs(@z,@zs),@z),splitqs#(@z,@zs)) 10: quicksort#2#(tuple#2(@xs,@ys),@z) -> c_16(append#(quicksort(@xs),::(@z,quicksort(@ys))) ,quicksort#(@xs) ,quicksort#(@ys)) 11: sortAll#(@l) -> c_17(sortAll#1#(@l)) 12: sortAll#1#(::(@x,@xs)) -> c_18(sortAll#2#(@x,@xs)) 13: sortAll#2#(tuple#2(@vals,@key),@xs) -> c_20(quicksort#(@vals),sortAll#(@xs)) 14: split#(@l) -> c_21(split#1#(@l)) 15: split#1#(::(@x,@xs)) -> c_22(insert#(@x,split(@xs)),split#(@xs)) 16: splitAndSort#(@l) -> c_24(sortAll#(split(@l)),split#(@l)) 17: splitqs#(@pivot,@l) -> c_25(splitqs#1#(@l,@pivot)) 18: splitqs#1#(::(@x,@xs),@pivot) -> c_26(splitqs#2#(splitqs(@pivot,@xs),@pivot,@x),splitqs#(@pivot,@xs)) 19: splitqs#2#(tuple#2(@ls,@rs),@pivot,@x) -> c_28(splitqs#3#(#greater(@x,@pivot),@ls,@rs,@x) ,#greater#(@x,@pivot)) 20: #and#(#false(),#false()) -> c_31() 21: #and#(#false(),#true()) -> c_32() 22: #and#(#true(),#false()) -> c_33() 23: #and#(#true(),#true()) -> c_34() 24: #ckgt#(#EQ()) -> c_35() 25: #ckgt#(#GT()) -> c_36() 26: #ckgt#(#LT()) -> c_37() 27: #compare#(#0(),#0()) -> c_38() 28: #compare#(#0(),#neg(@y)) -> c_39() 29: #compare#(#0(),#pos(@y)) -> c_40() 30: #compare#(#0(),#s(@y)) -> c_41() 31: #compare#(#neg(@x),#0()) -> c_42() 32: #compare#(#neg(@x),#neg(@y)) -> c_43(#compare#(@y,@x)) 33: #compare#(#neg(@x),#pos(@y)) -> c_44() 34: #compare#(#pos(@x),#0()) -> c_45() 35: #compare#(#pos(@x),#neg(@y)) -> c_46() 36: #compare#(#pos(@x),#pos(@y)) -> c_47(#compare#(@x,@y)) 37: #compare#(#s(@x),#0()) -> c_48() 38: #compare#(#s(@x),#s(@y)) -> c_49(#compare#(@x,@y)) 39: #eq#(#0(),#0()) -> c_50() 40: #eq#(#0(),#neg(@y)) -> c_51() 41: #eq#(#0(),#pos(@y)) -> c_52() 42: #eq#(#0(),#s(@y)) -> c_53() 43: #eq#(#neg(@x),#0()) -> c_54() 44: #eq#(#neg(@x),#neg(@y)) -> c_55(#eq#(@x,@y)) 45: #eq#(#neg(@x),#pos(@y)) -> c_56() 46: #eq#(#pos(@x),#0()) -> c_57() 47: #eq#(#pos(@x),#neg(@y)) -> c_58() 48: #eq#(#pos(@x),#pos(@y)) -> c_59(#eq#(@x,@y)) 49: #eq#(#s(@x),#0()) -> c_60() 50: #eq#(#s(@x),#s(@y)) -> c_61(#eq#(@x,@y)) 51: #eq#(::(@x_1,@x_2),::(@y_1,@y_2)) -> c_62(#and#(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) ,#eq#(@x_1,@y_1) ,#eq#(@x_2,@y_2)) 52: #eq#(::(@x_1,@x_2),nil()) -> c_63() 53: #eq#(::(@x_1,@x_2),tuple#2(@y_1,@y_2)) -> c_64() 54: #eq#(nil(),::(@y_1,@y_2)) -> c_65() 55: #eq#(nil(),nil()) -> c_66() 56: #eq#(nil(),tuple#2(@y_1,@y_2)) -> c_67() 57: #eq#(tuple#2(@x_1,@x_2),::(@y_1,@y_2)) -> c_68() 58: #eq#(tuple#2(@x_1,@x_2),nil()) -> c_69() 59: #eq#(tuple#2(@x_1,@x_2),tuple#2(@y_1,@y_2)) -> c_70(#and#(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) ,#eq#(@x_1,@y_1) ,#eq#(@x_2,@y_2)) 60: #equal#(@x,@y) -> c_1(#eq#(@x,@y)) 61: #greater#(@x,@y) -> c_2(#ckgt#(#compare(@x,@y)),#compare#(@x,@y)) 62: append#1#(nil(),@ys) -> c_5() 63: insert#2#(nil(),@keyX,@valX,@x) -> c_9() 64: insert#4#(#true(),@key1,@ls,@valX,@vals1,@x) -> c_12() 65: quicksort#1#(nil()) -> c_15() 66: sortAll#1#(nil()) -> c_19() 67: split#1#(nil()) -> c_23() 68: splitqs#1#(nil(),@pivot) -> c_27() 69: splitqs#3#(#false(),@ls,@rs,@x) -> c_29() 70: splitqs#3#(#true(),@ls,@rs,@x) -> c_30() * Step 4: RemoveWeakSuffixes WORST_CASE(?,O(n^5)) + Considered Problem: - Strict DPs: append#(@l,@ys) -> c_3(append#1#(@l,@ys)) append#1#(::(@x,@xs),@ys) -> c_4(append#(@xs,@ys)) insert#(@x,@l) -> c_6(insert#1#(@x,@l,@x)) insert#1#(tuple#2(@valX,@keyX),@l,@x) -> c_7(insert#2#(@l,@keyX,@valX,@x)) insert#2#(::(@l1,@ls),@keyX,@valX,@x) -> c_8(insert#3#(@l1,@keyX,@ls,@valX,@x)) insert#3#(tuple#2(@vals1,@key1),@keyX,@ls,@valX,@x) -> c_10(insert#4#(#equal(@key1,@keyX) ,@key1 ,@ls ,@valX ,@vals1 ,@x) ,#equal#(@key1,@keyX)) insert#4#(#false(),@key1,@ls,@valX,@vals1,@x) -> c_11(insert#(@x,@ls)) quicksort#(@l) -> c_13(quicksort#1#(@l)) quicksort#1#(::(@z,@zs)) -> c_14(quicksort#2#(splitqs(@z,@zs),@z),splitqs#(@z,@zs)) quicksort#2#(tuple#2(@xs,@ys),@z) -> c_16(append#(quicksort(@xs),::(@z,quicksort(@ys))) ,quicksort#(@xs) ,quicksort#(@ys)) sortAll#(@l) -> c_17(sortAll#1#(@l)) sortAll#1#(::(@x,@xs)) -> c_18(sortAll#2#(@x,@xs)) sortAll#2#(tuple#2(@vals,@key),@xs) -> c_20(quicksort#(@vals),sortAll#(@xs)) split#(@l) -> c_21(split#1#(@l)) split#1#(::(@x,@xs)) -> c_22(insert#(@x,split(@xs)),split#(@xs)) splitAndSort#(@l) -> c_24(sortAll#(split(@l)),split#(@l)) splitqs#(@pivot,@l) -> c_25(splitqs#1#(@l,@pivot)) splitqs#1#(::(@x,@xs),@pivot) -> c_26(splitqs#2#(splitqs(@pivot,@xs),@pivot,@x),splitqs#(@pivot,@xs)) - Weak DPs: #and#(#false(),#false()) -> c_31() #and#(#false(),#true()) -> c_32() #and#(#true(),#false()) -> c_33() #and#(#true(),#true()) -> c_34() #ckgt#(#EQ()) -> c_35() #ckgt#(#GT()) -> c_36() #ckgt#(#LT()) -> c_37() #compare#(#0(),#0()) -> c_38() #compare#(#0(),#neg(@y)) -> c_39() #compare#(#0(),#pos(@y)) -> c_40() #compare#(#0(),#s(@y)) -> c_41() #compare#(#neg(@x),#0()) -> c_42() #compare#(#neg(@x),#neg(@y)) -> c_43(#compare#(@y,@x)) #compare#(#neg(@x),#pos(@y)) -> c_44() #compare#(#pos(@x),#0()) -> c_45() #compare#(#pos(@x),#neg(@y)) -> c_46() #compare#(#pos(@x),#pos(@y)) -> c_47(#compare#(@x,@y)) #compare#(#s(@x),#0()) -> c_48() #compare#(#s(@x),#s(@y)) -> c_49(#compare#(@x,@y)) #eq#(#0(),#0()) -> c_50() #eq#(#0(),#neg(@y)) -> c_51() #eq#(#0(),#pos(@y)) -> c_52() #eq#(#0(),#s(@y)) -> c_53() #eq#(#neg(@x),#0()) -> c_54() #eq#(#neg(@x),#neg(@y)) -> c_55(#eq#(@x,@y)) #eq#(#neg(@x),#pos(@y)) -> c_56() #eq#(#pos(@x),#0()) -> c_57() #eq#(#pos(@x),#neg(@y)) -> c_58() #eq#(#pos(@x),#pos(@y)) -> c_59(#eq#(@x,@y)) #eq#(#s(@x),#0()) -> c_60() #eq#(#s(@x),#s(@y)) -> c_61(#eq#(@x,@y)) #eq#(::(@x_1,@x_2),::(@y_1,@y_2)) -> c_62(#and#(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) ,#eq#(@x_1,@y_1) ,#eq#(@x_2,@y_2)) #eq#(::(@x_1,@x_2),nil()) -> c_63() #eq#(::(@x_1,@x_2),tuple#2(@y_1,@y_2)) -> c_64() #eq#(nil(),::(@y_1,@y_2)) -> c_65() #eq#(nil(),nil()) -> c_66() #eq#(nil(),tuple#2(@y_1,@y_2)) -> c_67() #eq#(tuple#2(@x_1,@x_2),::(@y_1,@y_2)) -> c_68() #eq#(tuple#2(@x_1,@x_2),nil()) -> c_69() #eq#(tuple#2(@x_1,@x_2),tuple#2(@y_1,@y_2)) -> c_70(#and#(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) ,#eq#(@x_1,@y_1) ,#eq#(@x_2,@y_2)) #equal#(@x,@y) -> c_1(#eq#(@x,@y)) #greater#(@x,@y) -> c_2(#ckgt#(#compare(@x,@y)),#compare#(@x,@y)) append#1#(nil(),@ys) -> c_5() insert#2#(nil(),@keyX,@valX,@x) -> c_9() insert#4#(#true(),@key1,@ls,@valX,@vals1,@x) -> c_12() quicksort#1#(nil()) -> c_15() sortAll#1#(nil()) -> c_19() split#1#(nil()) -> c_23() splitqs#1#(nil(),@pivot) -> c_27() splitqs#2#(tuple#2(@ls,@rs),@pivot,@x) -> c_28(splitqs#3#(#greater(@x,@pivot),@ls,@rs,@x) ,#greater#(@x,@pivot)) splitqs#3#(#false(),@ls,@rs,@x) -> c_29() splitqs#3#(#true(),@ls,@rs,@x) -> c_30() - Weak TRS: #and(#false(),#false()) -> #false() #and(#false(),#true()) -> #false() #and(#true(),#false()) -> #false() #and(#true(),#true()) -> #true() #ckgt(#EQ()) -> #false() #ckgt(#GT()) -> #true() #ckgt(#LT()) -> #false() #compare(#0(),#0()) -> #EQ() #compare(#0(),#neg(@y)) -> #GT() #compare(#0(),#pos(@y)) -> #LT() #compare(#0(),#s(@y)) -> #LT() #compare(#neg(@x),#0()) -> #LT() #compare(#neg(@x),#neg(@y)) -> #compare(@y,@x) #compare(#neg(@x),#pos(@y)) -> #LT() #compare(#pos(@x),#0()) -> #GT() #compare(#pos(@x),#neg(@y)) -> #GT() #compare(#pos(@x),#pos(@y)) -> #compare(@x,@y) #compare(#s(@x),#0()) -> #GT() #compare(#s(@x),#s(@y)) -> #compare(@x,@y) #eq(#0(),#0()) -> #true() #eq(#0(),#neg(@y)) -> #false() #eq(#0(),#pos(@y)) -> #false() #eq(#0(),#s(@y)) -> #false() #eq(#neg(@x),#0()) -> #false() #eq(#neg(@x),#neg(@y)) -> #eq(@x,@y) #eq(#neg(@x),#pos(@y)) -> #false() #eq(#pos(@x),#0()) -> #false() #eq(#pos(@x),#neg(@y)) -> #false() #eq(#pos(@x),#pos(@y)) -> #eq(@x,@y) #eq(#s(@x),#0()) -> #false() #eq(#s(@x),#s(@y)) -> #eq(@x,@y) #eq(::(@x_1,@x_2),::(@y_1,@y_2)) -> #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #eq(::(@x_1,@x_2),nil()) -> #false() #eq(::(@x_1,@x_2),tuple#2(@y_1,@y_2)) -> #false() #eq(nil(),::(@y_1,@y_2)) -> #false() #eq(nil(),nil()) -> #true() #eq(nil(),tuple#2(@y_1,@y_2)) -> #false() #eq(tuple#2(@x_1,@x_2),::(@y_1,@y_2)) -> #false() #eq(tuple#2(@x_1,@x_2),nil()) -> #false() #eq(tuple#2(@x_1,@x_2),tuple#2(@y_1,@y_2)) -> #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #equal(@x,@y) -> #eq(@x,@y) #greater(@x,@y) -> #ckgt(#compare(@x,@y)) append(@l,@ys) -> append#1(@l,@ys) append#1(::(@x,@xs),@ys) -> ::(@x,append(@xs,@ys)) append#1(nil(),@ys) -> @ys insert(@x,@l) -> insert#1(@x,@l,@x) insert#1(tuple#2(@valX,@keyX),@l,@x) -> insert#2(@l,@keyX,@valX,@x) insert#2(::(@l1,@ls),@keyX,@valX,@x) -> insert#3(@l1,@keyX,@ls,@valX,@x) insert#2(nil(),@keyX,@valX,@x) -> ::(tuple#2(::(@valX,nil()),@keyX),nil()) insert#3(tuple#2(@vals1,@key1),@keyX,@ls,@valX,@x) -> insert#4(#equal(@key1,@keyX) ,@key1 ,@ls ,@valX ,@vals1 ,@x) insert#4(#false(),@key1,@ls,@valX,@vals1,@x) -> ::(tuple#2(@vals1,@key1),insert(@x,@ls)) insert#4(#true(),@key1,@ls,@valX,@vals1,@x) -> ::(tuple#2(::(@valX,@vals1),@key1),@ls) quicksort(@l) -> quicksort#1(@l) quicksort#1(::(@z,@zs)) -> quicksort#2(splitqs(@z,@zs),@z) quicksort#1(nil()) -> nil() quicksort#2(tuple#2(@xs,@ys),@z) -> append(quicksort(@xs),::(@z,quicksort(@ys))) sortAll(@l) -> sortAll#1(@l) sortAll#1(::(@x,@xs)) -> sortAll#2(@x,@xs) sortAll#1(nil()) -> nil() sortAll#2(tuple#2(@vals,@key),@xs) -> ::(tuple#2(quicksort(@vals),@key),sortAll(@xs)) split(@l) -> split#1(@l) split#1(::(@x,@xs)) -> insert(@x,split(@xs)) split#1(nil()) -> nil() splitAndSort(@l) -> sortAll(split(@l)) splitqs(@pivot,@l) -> splitqs#1(@l,@pivot) splitqs#1(::(@x,@xs),@pivot) -> splitqs#2(splitqs(@pivot,@xs),@pivot,@x) splitqs#1(nil(),@pivot) -> tuple#2(nil(),nil()) splitqs#2(tuple#2(@ls,@rs),@pivot,@x) -> splitqs#3(#greater(@x,@pivot),@ls,@rs,@x) splitqs#3(#false(),@ls,@rs,@x) -> tuple#2(::(@x,@ls),@rs) splitqs#3(#true(),@ls,@rs,@x) -> tuple#2(@ls,::(@x,@rs)) - Signature: {#and/2,#ckgt/1,#compare/2,#eq/2,#equal/2,#greater/2,append/2,append#1/2,insert/2,insert#1/3,insert#2/4 ,insert#3/5,insert#4/6,quicksort/1,quicksort#1/1,quicksort#2/2,sortAll/1,sortAll#1/1,sortAll#2/2,split/1 ,split#1/1,splitAndSort/1,splitqs/2,splitqs#1/2,splitqs#2/3,splitqs#3/4,#and#/2,#ckgt#/1,#compare#/2,#eq#/2 ,#equal#/2,#greater#/2,append#/2,append#1#/2,insert#/2,insert#1#/3,insert#2#/4,insert#3#/5,insert#4#/6 ,quicksort#/1,quicksort#1#/1,quicksort#2#/2,sortAll#/1,sortAll#1#/1,sortAll#2#/2,split#/1,split#1#/1 ,splitAndSort#/1,splitqs#/2,splitqs#1#/2,splitqs#2#/3,splitqs#3#/4} / {#0/0,#EQ/0,#GT/0,#LT/0,#false/0 ,#neg/1,#pos/1,#s/1,#true/0,::/2,nil/0,tuple#2/2,c_1/1,c_2/2,c_3/1,c_4/1,c_5/0,c_6/1,c_7/1,c_8/1,c_9/0 ,c_10/2,c_11/1,c_12/0,c_13/1,c_14/2,c_15/0,c_16/3,c_17/1,c_18/1,c_19/0,c_20/2,c_21/1,c_22/2,c_23/0,c_24/2 ,c_25/1,c_26/2,c_27/0,c_28/2,c_29/0,c_30/0,c_31/0,c_32/0,c_33/0,c_34/0,c_35/0,c_36/0,c_37/0,c_38/0,c_39/0 ,c_40/0,c_41/0,c_42/0,c_43/1,c_44/0,c_45/0,c_46/0,c_47/1,c_48/0,c_49/1,c_50/0,c_51/0,c_52/0,c_53/0,c_54/0 ,c_55/1,c_56/0,c_57/0,c_58/0,c_59/1,c_60/0,c_61/1,c_62/3,c_63/0,c_64/0,c_65/0,c_66/0,c_67/0,c_68/0,c_69/0 ,c_70/3} - Obligation: innermost runtime complexity wrt. defined symbols {#and#,#ckgt#,#compare#,#eq#,#equal#,#greater#,append# ,append#1#,insert#,insert#1#,insert#2#,insert#3#,insert#4#,quicksort#,quicksort#1#,quicksort#2#,sortAll# ,sortAll#1#,sortAll#2#,split#,split#1#,splitAndSort#,splitqs#,splitqs#1#,splitqs#2# ,splitqs#3#} and constructors {#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} + Applied Processor: RemoveWeakSuffixes + Details: Consider the dependency graph 1:S:append#(@l,@ys) -> c_3(append#1#(@l,@ys)) -->_1 append#1#(::(@x,@xs),@ys) -> c_4(append#(@xs,@ys)):2 -->_1 append#1#(nil(),@ys) -> c_5():61 2:S:append#1#(::(@x,@xs),@ys) -> c_4(append#(@xs,@ys)) -->_1 append#(@l,@ys) -> c_3(append#1#(@l,@ys)):1 3:S:insert#(@x,@l) -> c_6(insert#1#(@x,@l,@x)) -->_1 insert#1#(tuple#2(@valX,@keyX),@l,@x) -> c_7(insert#2#(@l,@keyX,@valX,@x)):4 4:S:insert#1#(tuple#2(@valX,@keyX),@l,@x) -> c_7(insert#2#(@l,@keyX,@valX,@x)) -->_1 insert#2#(::(@l1,@ls),@keyX,@valX,@x) -> c_8(insert#3#(@l1,@keyX,@ls,@valX,@x)):5 -->_1 insert#2#(nil(),@keyX,@valX,@x) -> c_9():62 5:S:insert#2#(::(@l1,@ls),@keyX,@valX,@x) -> c_8(insert#3#(@l1,@keyX,@ls,@valX,@x)) -->_1 insert#3#(tuple#2(@vals1,@key1),@keyX,@ls,@valX,@x) -> c_10(insert#4#(#equal(@key1,@keyX) ,@key1 ,@ls ,@valX ,@vals1 ,@x) ,#equal#(@key1,@keyX)):6 6:S:insert#3#(tuple#2(@vals1,@key1),@keyX,@ls,@valX,@x) -> c_10(insert#4#(#equal(@key1,@keyX) ,@key1 ,@ls ,@valX ,@vals1 ,@x) ,#equal#(@key1,@keyX)) -->_2 #equal#(@x,@y) -> c_1(#eq#(@x,@y)):59 -->_1 insert#4#(#false(),@key1,@ls,@valX,@vals1,@x) -> c_11(insert#(@x,@ls)):7 -->_1 insert#4#(#true(),@key1,@ls,@valX,@vals1,@x) -> c_12():63 7:S:insert#4#(#false(),@key1,@ls,@valX,@vals1,@x) -> c_11(insert#(@x,@ls)) -->_1 insert#(@x,@l) -> c_6(insert#1#(@x,@l,@x)):3 8:S:quicksort#(@l) -> c_13(quicksort#1#(@l)) -->_1 quicksort#1#(::(@z,@zs)) -> c_14(quicksort#2#(splitqs(@z,@zs),@z),splitqs#(@z,@zs)):9 -->_1 quicksort#1#(nil()) -> c_15():64 9:S:quicksort#1#(::(@z,@zs)) -> c_14(quicksort#2#(splitqs(@z,@zs),@z),splitqs#(@z,@zs)) -->_2 splitqs#(@pivot,@l) -> c_25(splitqs#1#(@l,@pivot)):17 -->_1 quicksort#2#(tuple#2(@xs,@ys),@z) -> c_16(append#(quicksort(@xs),::(@z,quicksort(@ys))) ,quicksort#(@xs) ,quicksort#(@ys)):10 10:S:quicksort#2#(tuple#2(@xs,@ys),@z) -> c_16(append#(quicksort(@xs),::(@z,quicksort(@ys))) ,quicksort#(@xs) ,quicksort#(@ys)) -->_3 quicksort#(@l) -> c_13(quicksort#1#(@l)):8 -->_2 quicksort#(@l) -> c_13(quicksort#1#(@l)):8 -->_1 append#(@l,@ys) -> c_3(append#1#(@l,@ys)):1 11:S:sortAll#(@l) -> c_17(sortAll#1#(@l)) -->_1 sortAll#1#(::(@x,@xs)) -> c_18(sortAll#2#(@x,@xs)):12 -->_1 sortAll#1#(nil()) -> c_19():65 12:S:sortAll#1#(::(@x,@xs)) -> c_18(sortAll#2#(@x,@xs)) -->_1 sortAll#2#(tuple#2(@vals,@key),@xs) -> c_20(quicksort#(@vals),sortAll#(@xs)):13 13:S:sortAll#2#(tuple#2(@vals,@key),@xs) -> c_20(quicksort#(@vals),sortAll#(@xs)) -->_2 sortAll#(@l) -> c_17(sortAll#1#(@l)):11 -->_1 quicksort#(@l) -> c_13(quicksort#1#(@l)):8 14:S:split#(@l) -> c_21(split#1#(@l)) -->_1 split#1#(::(@x,@xs)) -> c_22(insert#(@x,split(@xs)),split#(@xs)):15 -->_1 split#1#(nil()) -> c_23():66 15:S:split#1#(::(@x,@xs)) -> c_22(insert#(@x,split(@xs)),split#(@xs)) -->_2 split#(@l) -> c_21(split#1#(@l)):14 -->_1 insert#(@x,@l) -> c_6(insert#1#(@x,@l,@x)):3 16:S:splitAndSort#(@l) -> c_24(sortAll#(split(@l)),split#(@l)) -->_2 split#(@l) -> c_21(split#1#(@l)):14 -->_1 sortAll#(@l) -> c_17(sortAll#1#(@l)):11 17:S:splitqs#(@pivot,@l) -> c_25(splitqs#1#(@l,@pivot)) -->_1 splitqs#1#(::(@x,@xs),@pivot) -> c_26(splitqs#2#(splitqs(@pivot,@xs),@pivot,@x) ,splitqs#(@pivot,@xs)):18 -->_1 splitqs#1#(nil(),@pivot) -> c_27():67 18:S:splitqs#1#(::(@x,@xs),@pivot) -> c_26(splitqs#2#(splitqs(@pivot,@xs),@pivot,@x),splitqs#(@pivot,@xs)) -->_1 splitqs#2#(tuple#2(@ls,@rs),@pivot,@x) -> c_28(splitqs#3#(#greater(@x,@pivot),@ls,@rs,@x) ,#greater#(@x,@pivot)):68 -->_2 splitqs#(@pivot,@l) -> c_25(splitqs#1#(@l,@pivot)):17 19:W:#and#(#false(),#false()) -> c_31() 20:W:#and#(#false(),#true()) -> c_32() 21:W:#and#(#true(),#false()) -> c_33() 22:W:#and#(#true(),#true()) -> c_34() 23:W:#ckgt#(#EQ()) -> c_35() 24:W:#ckgt#(#GT()) -> c_36() 25:W:#ckgt#(#LT()) -> c_37() 26:W:#compare#(#0(),#0()) -> c_38() 27:W:#compare#(#0(),#neg(@y)) -> c_39() 28:W:#compare#(#0(),#pos(@y)) -> c_40() 29:W:#compare#(#0(),#s(@y)) -> c_41() 30:W:#compare#(#neg(@x),#0()) -> c_42() 31:W:#compare#(#neg(@x),#neg(@y)) -> c_43(#compare#(@y,@x)) -->_1 #compare#(#s(@x),#s(@y)) -> c_49(#compare#(@x,@y)):37 -->_1 #compare#(#pos(@x),#pos(@y)) -> c_47(#compare#(@x,@y)):35 -->_1 #compare#(#s(@x),#0()) -> c_48():36 -->_1 #compare#(#pos(@x),#neg(@y)) -> c_46():34 -->_1 #compare#(#pos(@x),#0()) -> c_45():33 -->_1 #compare#(#neg(@x),#pos(@y)) -> c_44():32 -->_1 #compare#(#neg(@x),#neg(@y)) -> c_43(#compare#(@y,@x)):31 -->_1 #compare#(#neg(@x),#0()) -> c_42():30 -->_1 #compare#(#0(),#s(@y)) -> c_41():29 -->_1 #compare#(#0(),#pos(@y)) -> c_40():28 -->_1 #compare#(#0(),#neg(@y)) -> c_39():27 -->_1 #compare#(#0(),#0()) -> c_38():26 32:W:#compare#(#neg(@x),#pos(@y)) -> c_44() 33:W:#compare#(#pos(@x),#0()) -> c_45() 34:W:#compare#(#pos(@x),#neg(@y)) -> c_46() 35:W:#compare#(#pos(@x),#pos(@y)) -> c_47(#compare#(@x,@y)) -->_1 #compare#(#s(@x),#s(@y)) -> c_49(#compare#(@x,@y)):37 -->_1 #compare#(#s(@x),#0()) -> c_48():36 -->_1 #compare#(#pos(@x),#pos(@y)) -> c_47(#compare#(@x,@y)):35 -->_1 #compare#(#pos(@x),#neg(@y)) -> c_46():34 -->_1 #compare#(#pos(@x),#0()) -> c_45():33 -->_1 #compare#(#neg(@x),#pos(@y)) -> c_44():32 -->_1 #compare#(#neg(@x),#neg(@y)) -> c_43(#compare#(@y,@x)):31 -->_1 #compare#(#neg(@x),#0()) -> c_42():30 -->_1 #compare#(#0(),#s(@y)) -> c_41():29 -->_1 #compare#(#0(),#pos(@y)) -> c_40():28 -->_1 #compare#(#0(),#neg(@y)) -> c_39():27 -->_1 #compare#(#0(),#0()) -> c_38():26 36:W:#compare#(#s(@x),#0()) -> c_48() 37:W:#compare#(#s(@x),#s(@y)) -> c_49(#compare#(@x,@y)) -->_1 #compare#(#s(@x),#s(@y)) -> c_49(#compare#(@x,@y)):37 -->_1 #compare#(#s(@x),#0()) -> c_48():36 -->_1 #compare#(#pos(@x),#pos(@y)) -> c_47(#compare#(@x,@y)):35 -->_1 #compare#(#pos(@x),#neg(@y)) -> c_46():34 -->_1 #compare#(#pos(@x),#0()) -> c_45():33 -->_1 #compare#(#neg(@x),#pos(@y)) -> c_44():32 -->_1 #compare#(#neg(@x),#neg(@y)) -> c_43(#compare#(@y,@x)):31 -->_1 #compare#(#neg(@x),#0()) -> c_42():30 -->_1 #compare#(#0(),#s(@y)) -> c_41():29 -->_1 #compare#(#0(),#pos(@y)) -> c_40():28 -->_1 #compare#(#0(),#neg(@y)) -> c_39():27 -->_1 #compare#(#0(),#0()) -> c_38():26 38:W:#eq#(#0(),#0()) -> c_50() 39:W:#eq#(#0(),#neg(@y)) -> c_51() 40:W:#eq#(#0(),#pos(@y)) -> c_52() 41:W:#eq#(#0(),#s(@y)) -> c_53() 42:W:#eq#(#neg(@x),#0()) -> c_54() 43:W:#eq#(#neg(@x),#neg(@y)) -> c_55(#eq#(@x,@y)) -->_1 #eq#(tuple#2(@x_1,@x_2),tuple#2(@y_1,@y_2)) -> c_70(#and#(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) ,#eq#(@x_1,@y_1) ,#eq#(@x_2,@y_2)):58 -->_1 #eq#(::(@x_1,@x_2),::(@y_1,@y_2)) -> c_62(#and#(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) ,#eq#(@x_1,@y_1) ,#eq#(@x_2,@y_2)):50 -->_1 #eq#(#s(@x),#s(@y)) -> c_61(#eq#(@x,@y)):49 -->_1 #eq#(#pos(@x),#pos(@y)) -> c_59(#eq#(@x,@y)):47 -->_1 #eq#(tuple#2(@x_1,@x_2),nil()) -> c_69():57 -->_1 #eq#(tuple#2(@x_1,@x_2),::(@y_1,@y_2)) -> c_68():56 -->_1 #eq#(nil(),tuple#2(@y_1,@y_2)) -> c_67():55 -->_1 #eq#(nil(),nil()) -> c_66():54 -->_1 #eq#(nil(),::(@y_1,@y_2)) -> c_65():53 -->_1 #eq#(::(@x_1,@x_2),tuple#2(@y_1,@y_2)) -> c_64():52 -->_1 #eq#(::(@x_1,@x_2),nil()) -> c_63():51 -->_1 #eq#(#s(@x),#0()) -> c_60():48 -->_1 #eq#(#pos(@x),#neg(@y)) -> c_58():46 -->_1 #eq#(#pos(@x),#0()) -> c_57():45 -->_1 #eq#(#neg(@x),#pos(@y)) -> c_56():44 -->_1 #eq#(#neg(@x),#neg(@y)) -> c_55(#eq#(@x,@y)):43 -->_1 #eq#(#neg(@x),#0()) -> c_54():42 -->_1 #eq#(#0(),#s(@y)) -> c_53():41 -->_1 #eq#(#0(),#pos(@y)) -> c_52():40 -->_1 #eq#(#0(),#neg(@y)) -> c_51():39 -->_1 #eq#(#0(),#0()) -> c_50():38 44:W:#eq#(#neg(@x),#pos(@y)) -> c_56() 45:W:#eq#(#pos(@x),#0()) -> c_57() 46:W:#eq#(#pos(@x),#neg(@y)) -> c_58() 47:W:#eq#(#pos(@x),#pos(@y)) -> c_59(#eq#(@x,@y)) -->_1 #eq#(tuple#2(@x_1,@x_2),tuple#2(@y_1,@y_2)) -> c_70(#and#(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) ,#eq#(@x_1,@y_1) ,#eq#(@x_2,@y_2)):58 -->_1 #eq#(::(@x_1,@x_2),::(@y_1,@y_2)) -> c_62(#and#(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) ,#eq#(@x_1,@y_1) ,#eq#(@x_2,@y_2)):50 -->_1 #eq#(#s(@x),#s(@y)) -> c_61(#eq#(@x,@y)):49 -->_1 #eq#(tuple#2(@x_1,@x_2),nil()) -> c_69():57 -->_1 #eq#(tuple#2(@x_1,@x_2),::(@y_1,@y_2)) -> c_68():56 -->_1 #eq#(nil(),tuple#2(@y_1,@y_2)) -> c_67():55 -->_1 #eq#(nil(),nil()) -> c_66():54 -->_1 #eq#(nil(),::(@y_1,@y_2)) -> c_65():53 -->_1 #eq#(::(@x_1,@x_2),tuple#2(@y_1,@y_2)) -> c_64():52 -->_1 #eq#(::(@x_1,@x_2),nil()) -> c_63():51 -->_1 #eq#(#s(@x),#0()) -> c_60():48 -->_1 #eq#(#pos(@x),#pos(@y)) -> c_59(#eq#(@x,@y)):47 -->_1 #eq#(#pos(@x),#neg(@y)) -> c_58():46 -->_1 #eq#(#pos(@x),#0()) -> c_57():45 -->_1 #eq#(#neg(@x),#pos(@y)) -> c_56():44 -->_1 #eq#(#neg(@x),#neg(@y)) -> c_55(#eq#(@x,@y)):43 -->_1 #eq#(#neg(@x),#0()) -> c_54():42 -->_1 #eq#(#0(),#s(@y)) -> c_53():41 -->_1 #eq#(#0(),#pos(@y)) -> c_52():40 -->_1 #eq#(#0(),#neg(@y)) -> c_51():39 -->_1 #eq#(#0(),#0()) -> c_50():38 48:W:#eq#(#s(@x),#0()) -> c_60() 49:W:#eq#(#s(@x),#s(@y)) -> c_61(#eq#(@x,@y)) -->_1 #eq#(tuple#2(@x_1,@x_2),tuple#2(@y_1,@y_2)) -> c_70(#and#(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) ,#eq#(@x_1,@y_1) ,#eq#(@x_2,@y_2)):58 -->_1 #eq#(::(@x_1,@x_2),::(@y_1,@y_2)) -> c_62(#and#(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) ,#eq#(@x_1,@y_1) ,#eq#(@x_2,@y_2)):50 -->_1 #eq#(tuple#2(@x_1,@x_2),nil()) -> c_69():57 -->_1 #eq#(tuple#2(@x_1,@x_2),::(@y_1,@y_2)) -> c_68():56 -->_1 #eq#(nil(),tuple#2(@y_1,@y_2)) -> c_67():55 -->_1 #eq#(nil(),nil()) -> c_66():54 -->_1 #eq#(nil(),::(@y_1,@y_2)) -> c_65():53 -->_1 #eq#(::(@x_1,@x_2),tuple#2(@y_1,@y_2)) -> c_64():52 -->_1 #eq#(::(@x_1,@x_2),nil()) -> c_63():51 -->_1 #eq#(#s(@x),#s(@y)) -> c_61(#eq#(@x,@y)):49 -->_1 #eq#(#s(@x),#0()) -> c_60():48 -->_1 #eq#(#pos(@x),#pos(@y)) -> c_59(#eq#(@x,@y)):47 -->_1 #eq#(#pos(@x),#neg(@y)) -> c_58():46 -->_1 #eq#(#pos(@x),#0()) -> c_57():45 -->_1 #eq#(#neg(@x),#pos(@y)) -> c_56():44 -->_1 #eq#(#neg(@x),#neg(@y)) -> c_55(#eq#(@x,@y)):43 -->_1 #eq#(#neg(@x),#0()) -> c_54():42 -->_1 #eq#(#0(),#s(@y)) -> c_53():41 -->_1 #eq#(#0(),#pos(@y)) -> c_52():40 -->_1 #eq#(#0(),#neg(@y)) -> c_51():39 -->_1 #eq#(#0(),#0()) -> c_50():38 50:W:#eq#(::(@x_1,@x_2),::(@y_1,@y_2)) -> c_62(#and#(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) ,#eq#(@x_1,@y_1) ,#eq#(@x_2,@y_2)) -->_3 #eq#(tuple#2(@x_1,@x_2),tuple#2(@y_1,@y_2)) -> c_70(#and#(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) ,#eq#(@x_1,@y_1) ,#eq#(@x_2,@y_2)):58 -->_2 #eq#(tuple#2(@x_1,@x_2),tuple#2(@y_1,@y_2)) -> c_70(#and#(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) ,#eq#(@x_1,@y_1) ,#eq#(@x_2,@y_2)):58 -->_3 #eq#(tuple#2(@x_1,@x_2),nil()) -> c_69():57 -->_2 #eq#(tuple#2(@x_1,@x_2),nil()) -> c_69():57 -->_3 #eq#(tuple#2(@x_1,@x_2),::(@y_1,@y_2)) -> c_68():56 -->_2 #eq#(tuple#2(@x_1,@x_2),::(@y_1,@y_2)) -> c_68():56 -->_3 #eq#(nil(),tuple#2(@y_1,@y_2)) -> c_67():55 -->_2 #eq#(nil(),tuple#2(@y_1,@y_2)) -> c_67():55 -->_3 #eq#(nil(),nil()) -> c_66():54 -->_2 #eq#(nil(),nil()) -> c_66():54 -->_3 #eq#(nil(),::(@y_1,@y_2)) -> c_65():53 -->_2 #eq#(nil(),::(@y_1,@y_2)) -> c_65():53 -->_3 #eq#(::(@x_1,@x_2),tuple#2(@y_1,@y_2)) -> c_64():52 -->_2 #eq#(::(@x_1,@x_2),tuple#2(@y_1,@y_2)) -> c_64():52 -->_3 #eq#(::(@x_1,@x_2),nil()) -> c_63():51 -->_2 #eq#(::(@x_1,@x_2),nil()) -> c_63():51 -->_3 #eq#(::(@x_1,@x_2),::(@y_1,@y_2)) -> c_62(#and#(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) ,#eq#(@x_1,@y_1) ,#eq#(@x_2,@y_2)):50 -->_2 #eq#(::(@x_1,@x_2),::(@y_1,@y_2)) -> c_62(#and#(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) ,#eq#(@x_1,@y_1) ,#eq#(@x_2,@y_2)):50 -->_3 #eq#(#s(@x),#s(@y)) -> c_61(#eq#(@x,@y)):49 -->_2 #eq#(#s(@x),#s(@y)) -> c_61(#eq#(@x,@y)):49 -->_3 #eq#(#s(@x),#0()) -> c_60():48 -->_2 #eq#(#s(@x),#0()) -> c_60():48 -->_3 #eq#(#pos(@x),#pos(@y)) -> c_59(#eq#(@x,@y)):47 -->_2 #eq#(#pos(@x),#pos(@y)) -> c_59(#eq#(@x,@y)):47 -->_3 #eq#(#pos(@x),#neg(@y)) -> c_58():46 -->_2 #eq#(#pos(@x),#neg(@y)) -> c_58():46 -->_3 #eq#(#pos(@x),#0()) -> c_57():45 -->_2 #eq#(#pos(@x),#0()) -> c_57():45 -->_3 #eq#(#neg(@x),#pos(@y)) -> c_56():44 -->_2 #eq#(#neg(@x),#pos(@y)) -> c_56():44 -->_3 #eq#(#neg(@x),#neg(@y)) -> c_55(#eq#(@x,@y)):43 -->_2 #eq#(#neg(@x),#neg(@y)) -> c_55(#eq#(@x,@y)):43 -->_3 #eq#(#neg(@x),#0()) -> c_54():42 -->_2 #eq#(#neg(@x),#0()) -> c_54():42 -->_3 #eq#(#0(),#s(@y)) -> c_53():41 -->_2 #eq#(#0(),#s(@y)) -> c_53():41 -->_3 #eq#(#0(),#pos(@y)) -> c_52():40 -->_2 #eq#(#0(),#pos(@y)) -> c_52():40 -->_3 #eq#(#0(),#neg(@y)) -> c_51():39 -->_2 #eq#(#0(),#neg(@y)) -> c_51():39 -->_3 #eq#(#0(),#0()) -> c_50():38 -->_2 #eq#(#0(),#0()) -> c_50():38 -->_1 #and#(#true(),#true()) -> c_34():22 -->_1 #and#(#true(),#false()) -> c_33():21 -->_1 #and#(#false(),#true()) -> c_32():20 -->_1 #and#(#false(),#false()) -> c_31():19 51:W:#eq#(::(@x_1,@x_2),nil()) -> c_63() 52:W:#eq#(::(@x_1,@x_2),tuple#2(@y_1,@y_2)) -> c_64() 53:W:#eq#(nil(),::(@y_1,@y_2)) -> c_65() 54:W:#eq#(nil(),nil()) -> c_66() 55:W:#eq#(nil(),tuple#2(@y_1,@y_2)) -> c_67() 56:W:#eq#(tuple#2(@x_1,@x_2),::(@y_1,@y_2)) -> c_68() 57:W:#eq#(tuple#2(@x_1,@x_2),nil()) -> c_69() 58:W:#eq#(tuple#2(@x_1,@x_2),tuple#2(@y_1,@y_2)) -> c_70(#and#(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) ,#eq#(@x_1,@y_1) ,#eq#(@x_2,@y_2)) -->_3 #eq#(tuple#2(@x_1,@x_2),tuple#2(@y_1,@y_2)) -> c_70(#and#(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) ,#eq#(@x_1,@y_1) ,#eq#(@x_2,@y_2)):58 -->_2 #eq#(tuple#2(@x_1,@x_2),tuple#2(@y_1,@y_2)) -> c_70(#and#(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) ,#eq#(@x_1,@y_1) ,#eq#(@x_2,@y_2)):58 -->_3 #eq#(tuple#2(@x_1,@x_2),nil()) -> c_69():57 -->_2 #eq#(tuple#2(@x_1,@x_2),nil()) -> c_69():57 -->_3 #eq#(tuple#2(@x_1,@x_2),::(@y_1,@y_2)) -> c_68():56 -->_2 #eq#(tuple#2(@x_1,@x_2),::(@y_1,@y_2)) -> c_68():56 -->_3 #eq#(nil(),tuple#2(@y_1,@y_2)) -> c_67():55 -->_2 #eq#(nil(),tuple#2(@y_1,@y_2)) -> c_67():55 -->_3 #eq#(nil(),nil()) -> c_66():54 -->_2 #eq#(nil(),nil()) -> c_66():54 -->_3 #eq#(nil(),::(@y_1,@y_2)) -> c_65():53 -->_2 #eq#(nil(),::(@y_1,@y_2)) -> c_65():53 -->_3 #eq#(::(@x_1,@x_2),tuple#2(@y_1,@y_2)) -> c_64():52 -->_2 #eq#(::(@x_1,@x_2),tuple#2(@y_1,@y_2)) -> c_64():52 -->_3 #eq#(::(@x_1,@x_2),nil()) -> c_63():51 -->_2 #eq#(::(@x_1,@x_2),nil()) -> c_63():51 -->_3 #eq#(::(@x_1,@x_2),::(@y_1,@y_2)) -> c_62(#and#(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) ,#eq#(@x_1,@y_1) ,#eq#(@x_2,@y_2)):50 -->_2 #eq#(::(@x_1,@x_2),::(@y_1,@y_2)) -> c_62(#and#(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) ,#eq#(@x_1,@y_1) ,#eq#(@x_2,@y_2)):50 -->_3 #eq#(#s(@x),#s(@y)) -> c_61(#eq#(@x,@y)):49 -->_2 #eq#(#s(@x),#s(@y)) -> c_61(#eq#(@x,@y)):49 -->_3 #eq#(#s(@x),#0()) -> c_60():48 -->_2 #eq#(#s(@x),#0()) -> c_60():48 -->_3 #eq#(#pos(@x),#pos(@y)) -> c_59(#eq#(@x,@y)):47 -->_2 #eq#(#pos(@x),#pos(@y)) -> c_59(#eq#(@x,@y)):47 -->_3 #eq#(#pos(@x),#neg(@y)) -> c_58():46 -->_2 #eq#(#pos(@x),#neg(@y)) -> c_58():46 -->_3 #eq#(#pos(@x),#0()) -> c_57():45 -->_2 #eq#(#pos(@x),#0()) -> c_57():45 -->_3 #eq#(#neg(@x),#pos(@y)) -> c_56():44 -->_2 #eq#(#neg(@x),#pos(@y)) -> c_56():44 -->_3 #eq#(#neg(@x),#neg(@y)) -> c_55(#eq#(@x,@y)):43 -->_2 #eq#(#neg(@x),#neg(@y)) -> c_55(#eq#(@x,@y)):43 -->_3 #eq#(#neg(@x),#0()) -> c_54():42 -->_2 #eq#(#neg(@x),#0()) -> c_54():42 -->_3 #eq#(#0(),#s(@y)) -> c_53():41 -->_2 #eq#(#0(),#s(@y)) -> c_53():41 -->_3 #eq#(#0(),#pos(@y)) -> c_52():40 -->_2 #eq#(#0(),#pos(@y)) -> c_52():40 -->_3 #eq#(#0(),#neg(@y)) -> c_51():39 -->_2 #eq#(#0(),#neg(@y)) -> c_51():39 -->_3 #eq#(#0(),#0()) -> c_50():38 -->_2 #eq#(#0(),#0()) -> c_50():38 -->_1 #and#(#true(),#true()) -> c_34():22 -->_1 #and#(#true(),#false()) -> c_33():21 -->_1 #and#(#false(),#true()) -> c_32():20 -->_1 #and#(#false(),#false()) -> c_31():19 59:W:#equal#(@x,@y) -> c_1(#eq#(@x,@y)) -->_1 #eq#(tuple#2(@x_1,@x_2),tuple#2(@y_1,@y_2)) -> c_70(#and#(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) ,#eq#(@x_1,@y_1) ,#eq#(@x_2,@y_2)):58 -->_1 #eq#(tuple#2(@x_1,@x_2),nil()) -> c_69():57 -->_1 #eq#(tuple#2(@x_1,@x_2),::(@y_1,@y_2)) -> c_68():56 -->_1 #eq#(nil(),tuple#2(@y_1,@y_2)) -> c_67():55 -->_1 #eq#(nil(),nil()) -> c_66():54 -->_1 #eq#(nil(),::(@y_1,@y_2)) -> c_65():53 -->_1 #eq#(::(@x_1,@x_2),tuple#2(@y_1,@y_2)) -> c_64():52 -->_1 #eq#(::(@x_1,@x_2),nil()) -> c_63():51 -->_1 #eq#(::(@x_1,@x_2),::(@y_1,@y_2)) -> c_62(#and#(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) ,#eq#(@x_1,@y_1) ,#eq#(@x_2,@y_2)):50 -->_1 #eq#(#s(@x),#s(@y)) -> c_61(#eq#(@x,@y)):49 -->_1 #eq#(#s(@x),#0()) -> c_60():48 -->_1 #eq#(#pos(@x),#pos(@y)) -> c_59(#eq#(@x,@y)):47 -->_1 #eq#(#pos(@x),#neg(@y)) -> c_58():46 -->_1 #eq#(#pos(@x),#0()) -> c_57():45 -->_1 #eq#(#neg(@x),#pos(@y)) -> c_56():44 -->_1 #eq#(#neg(@x),#neg(@y)) -> c_55(#eq#(@x,@y)):43 -->_1 #eq#(#neg(@x),#0()) -> c_54():42 -->_1 #eq#(#0(),#s(@y)) -> c_53():41 -->_1 #eq#(#0(),#pos(@y)) -> c_52():40 -->_1 #eq#(#0(),#neg(@y)) -> c_51():39 -->_1 #eq#(#0(),#0()) -> c_50():38 60:W:#greater#(@x,@y) -> c_2(#ckgt#(#compare(@x,@y)),#compare#(@x,@y)) -->_2 #compare#(#s(@x),#s(@y)) -> c_49(#compare#(@x,@y)):37 -->_2 #compare#(#s(@x),#0()) -> c_48():36 -->_2 #compare#(#pos(@x),#pos(@y)) -> c_47(#compare#(@x,@y)):35 -->_2 #compare#(#pos(@x),#neg(@y)) -> c_46():34 -->_2 #compare#(#pos(@x),#0()) -> c_45():33 -->_2 #compare#(#neg(@x),#pos(@y)) -> c_44():32 -->_2 #compare#(#neg(@x),#neg(@y)) -> c_43(#compare#(@y,@x)):31 -->_2 #compare#(#neg(@x),#0()) -> c_42():30 -->_2 #compare#(#0(),#s(@y)) -> c_41():29 -->_2 #compare#(#0(),#pos(@y)) -> c_40():28 -->_2 #compare#(#0(),#neg(@y)) -> c_39():27 -->_2 #compare#(#0(),#0()) -> c_38():26 -->_1 #ckgt#(#LT()) -> c_37():25 -->_1 #ckgt#(#GT()) -> c_36():24 -->_1 #ckgt#(#EQ()) -> c_35():23 61:W:append#1#(nil(),@ys) -> c_5() 62:W:insert#2#(nil(),@keyX,@valX,@x) -> c_9() 63:W:insert#4#(#true(),@key1,@ls,@valX,@vals1,@x) -> c_12() 64:W:quicksort#1#(nil()) -> c_15() 65:W:sortAll#1#(nil()) -> c_19() 66:W:split#1#(nil()) -> c_23() 67:W:splitqs#1#(nil(),@pivot) -> c_27() 68:W:splitqs#2#(tuple#2(@ls,@rs),@pivot,@x) -> c_28(splitqs#3#(#greater(@x,@pivot),@ls,@rs,@x) ,#greater#(@x,@pivot)) -->_1 splitqs#3#(#true(),@ls,@rs,@x) -> c_30():70 -->_1 splitqs#3#(#false(),@ls,@rs,@x) -> c_29():69 -->_2 #greater#(@x,@y) -> c_2(#ckgt#(#compare(@x,@y)),#compare#(@x,@y)):60 69:W:splitqs#3#(#false(),@ls,@rs,@x) -> c_29() 70:W:splitqs#3#(#true(),@ls,@rs,@x) -> c_30() The following weak DPs constitute a sub-graph of the DG that is closed under successors. The DPs are removed. 66: split#1#(nil()) -> c_23() 65: sortAll#1#(nil()) -> c_19() 64: quicksort#1#(nil()) -> c_15() 67: splitqs#1#(nil(),@pivot) -> c_27() 68: splitqs#2#(tuple#2(@ls,@rs),@pivot,@x) -> c_28(splitqs#3#(#greater(@x,@pivot),@ls,@rs,@x) ,#greater#(@x,@pivot)) 60: #greater#(@x,@y) -> c_2(#ckgt#(#compare(@x,@y)),#compare#(@x,@y)) 23: #ckgt#(#EQ()) -> c_35() 24: #ckgt#(#GT()) -> c_36() 25: #ckgt#(#LT()) -> c_37() 37: #compare#(#s(@x),#s(@y)) -> c_49(#compare#(@x,@y)) 35: #compare#(#pos(@x),#pos(@y)) -> c_47(#compare#(@x,@y)) 31: #compare#(#neg(@x),#neg(@y)) -> c_43(#compare#(@y,@x)) 26: #compare#(#0(),#0()) -> c_38() 27: #compare#(#0(),#neg(@y)) -> c_39() 28: #compare#(#0(),#pos(@y)) -> c_40() 29: #compare#(#0(),#s(@y)) -> c_41() 30: #compare#(#neg(@x),#0()) -> c_42() 32: #compare#(#neg(@x),#pos(@y)) -> c_44() 33: #compare#(#pos(@x),#0()) -> c_45() 34: #compare#(#pos(@x),#neg(@y)) -> c_46() 36: #compare#(#s(@x),#0()) -> c_48() 69: splitqs#3#(#false(),@ls,@rs,@x) -> c_29() 70: splitqs#3#(#true(),@ls,@rs,@x) -> c_30() 62: insert#2#(nil(),@keyX,@valX,@x) -> c_9() 63: insert#4#(#true(),@key1,@ls,@valX,@vals1,@x) -> c_12() 59: #equal#(@x,@y) -> c_1(#eq#(@x,@y)) 58: #eq#(tuple#2(@x_1,@x_2),tuple#2(@y_1,@y_2)) -> c_70(#and#(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) ,#eq#(@x_1,@y_1) ,#eq#(@x_2,@y_2)) 50: #eq#(::(@x_1,@x_2),::(@y_1,@y_2)) -> c_62(#and#(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) ,#eq#(@x_1,@y_1) ,#eq#(@x_2,@y_2)) 49: #eq#(#s(@x),#s(@y)) -> c_61(#eq#(@x,@y)) 47: #eq#(#pos(@x),#pos(@y)) -> c_59(#eq#(@x,@y)) 43: #eq#(#neg(@x),#neg(@y)) -> c_55(#eq#(@x,@y)) 19: #and#(#false(),#false()) -> c_31() 20: #and#(#false(),#true()) -> c_32() 21: #and#(#true(),#false()) -> c_33() 22: #and#(#true(),#true()) -> c_34() 38: #eq#(#0(),#0()) -> c_50() 39: #eq#(#0(),#neg(@y)) -> c_51() 40: #eq#(#0(),#pos(@y)) -> c_52() 41: #eq#(#0(),#s(@y)) -> c_53() 42: #eq#(#neg(@x),#0()) -> c_54() 44: #eq#(#neg(@x),#pos(@y)) -> c_56() 45: #eq#(#pos(@x),#0()) -> c_57() 46: #eq#(#pos(@x),#neg(@y)) -> c_58() 48: #eq#(#s(@x),#0()) -> c_60() 51: #eq#(::(@x_1,@x_2),nil()) -> c_63() 52: #eq#(::(@x_1,@x_2),tuple#2(@y_1,@y_2)) -> c_64() 53: #eq#(nil(),::(@y_1,@y_2)) -> c_65() 54: #eq#(nil(),nil()) -> c_66() 55: #eq#(nil(),tuple#2(@y_1,@y_2)) -> c_67() 56: #eq#(tuple#2(@x_1,@x_2),::(@y_1,@y_2)) -> c_68() 57: #eq#(tuple#2(@x_1,@x_2),nil()) -> c_69() 61: append#1#(nil(),@ys) -> c_5() * Step 5: SimplifyRHS WORST_CASE(?,O(n^5)) + Considered Problem: - Strict DPs: append#(@l,@ys) -> c_3(append#1#(@l,@ys)) append#1#(::(@x,@xs),@ys) -> c_4(append#(@xs,@ys)) insert#(@x,@l) -> c_6(insert#1#(@x,@l,@x)) insert#1#(tuple#2(@valX,@keyX),@l,@x) -> c_7(insert#2#(@l,@keyX,@valX,@x)) insert#2#(::(@l1,@ls),@keyX,@valX,@x) -> c_8(insert#3#(@l1,@keyX,@ls,@valX,@x)) insert#3#(tuple#2(@vals1,@key1),@keyX,@ls,@valX,@x) -> c_10(insert#4#(#equal(@key1,@keyX) ,@key1 ,@ls ,@valX ,@vals1 ,@x) ,#equal#(@key1,@keyX)) insert#4#(#false(),@key1,@ls,@valX,@vals1,@x) -> c_11(insert#(@x,@ls)) quicksort#(@l) -> c_13(quicksort#1#(@l)) quicksort#1#(::(@z,@zs)) -> c_14(quicksort#2#(splitqs(@z,@zs),@z),splitqs#(@z,@zs)) quicksort#2#(tuple#2(@xs,@ys),@z) -> c_16(append#(quicksort(@xs),::(@z,quicksort(@ys))) ,quicksort#(@xs) ,quicksort#(@ys)) sortAll#(@l) -> c_17(sortAll#1#(@l)) sortAll#1#(::(@x,@xs)) -> c_18(sortAll#2#(@x,@xs)) sortAll#2#(tuple#2(@vals,@key),@xs) -> c_20(quicksort#(@vals),sortAll#(@xs)) split#(@l) -> c_21(split#1#(@l)) split#1#(::(@x,@xs)) -> c_22(insert#(@x,split(@xs)),split#(@xs)) splitAndSort#(@l) -> c_24(sortAll#(split(@l)),split#(@l)) splitqs#(@pivot,@l) -> c_25(splitqs#1#(@l,@pivot)) splitqs#1#(::(@x,@xs),@pivot) -> c_26(splitqs#2#(splitqs(@pivot,@xs),@pivot,@x),splitqs#(@pivot,@xs)) - Weak TRS: #and(#false(),#false()) -> #false() #and(#false(),#true()) -> #false() #and(#true(),#false()) -> #false() #and(#true(),#true()) -> #true() #ckgt(#EQ()) -> #false() #ckgt(#GT()) -> #true() #ckgt(#LT()) -> #false() #compare(#0(),#0()) -> #EQ() #compare(#0(),#neg(@y)) -> #GT() #compare(#0(),#pos(@y)) -> #LT() #compare(#0(),#s(@y)) -> #LT() #compare(#neg(@x),#0()) -> #LT() #compare(#neg(@x),#neg(@y)) -> #compare(@y,@x) #compare(#neg(@x),#pos(@y)) -> #LT() #compare(#pos(@x),#0()) -> #GT() #compare(#pos(@x),#neg(@y)) -> #GT() #compare(#pos(@x),#pos(@y)) -> #compare(@x,@y) #compare(#s(@x),#0()) -> #GT() #compare(#s(@x),#s(@y)) -> #compare(@x,@y) #eq(#0(),#0()) -> #true() #eq(#0(),#neg(@y)) -> #false() #eq(#0(),#pos(@y)) -> #false() #eq(#0(),#s(@y)) -> #false() #eq(#neg(@x),#0()) -> #false() #eq(#neg(@x),#neg(@y)) -> #eq(@x,@y) #eq(#neg(@x),#pos(@y)) -> #false() #eq(#pos(@x),#0()) -> #false() #eq(#pos(@x),#neg(@y)) -> #false() #eq(#pos(@x),#pos(@y)) -> #eq(@x,@y) #eq(#s(@x),#0()) -> #false() #eq(#s(@x),#s(@y)) -> #eq(@x,@y) #eq(::(@x_1,@x_2),::(@y_1,@y_2)) -> #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #eq(::(@x_1,@x_2),nil()) -> #false() #eq(::(@x_1,@x_2),tuple#2(@y_1,@y_2)) -> #false() #eq(nil(),::(@y_1,@y_2)) -> #false() #eq(nil(),nil()) -> #true() #eq(nil(),tuple#2(@y_1,@y_2)) -> #false() #eq(tuple#2(@x_1,@x_2),::(@y_1,@y_2)) -> #false() #eq(tuple#2(@x_1,@x_2),nil()) -> #false() #eq(tuple#2(@x_1,@x_2),tuple#2(@y_1,@y_2)) -> #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #equal(@x,@y) -> #eq(@x,@y) #greater(@x,@y) -> #ckgt(#compare(@x,@y)) append(@l,@ys) -> append#1(@l,@ys) append#1(::(@x,@xs),@ys) -> ::(@x,append(@xs,@ys)) append#1(nil(),@ys) -> @ys insert(@x,@l) -> insert#1(@x,@l,@x) insert#1(tuple#2(@valX,@keyX),@l,@x) -> insert#2(@l,@keyX,@valX,@x) insert#2(::(@l1,@ls),@keyX,@valX,@x) -> insert#3(@l1,@keyX,@ls,@valX,@x) insert#2(nil(),@keyX,@valX,@x) -> ::(tuple#2(::(@valX,nil()),@keyX),nil()) insert#3(tuple#2(@vals1,@key1),@keyX,@ls,@valX,@x) -> insert#4(#equal(@key1,@keyX) ,@key1 ,@ls ,@valX ,@vals1 ,@x) insert#4(#false(),@key1,@ls,@valX,@vals1,@x) -> ::(tuple#2(@vals1,@key1),insert(@x,@ls)) insert#4(#true(),@key1,@ls,@valX,@vals1,@x) -> ::(tuple#2(::(@valX,@vals1),@key1),@ls) quicksort(@l) -> quicksort#1(@l) quicksort#1(::(@z,@zs)) -> quicksort#2(splitqs(@z,@zs),@z) quicksort#1(nil()) -> nil() quicksort#2(tuple#2(@xs,@ys),@z) -> append(quicksort(@xs),::(@z,quicksort(@ys))) sortAll(@l) -> sortAll#1(@l) sortAll#1(::(@x,@xs)) -> sortAll#2(@x,@xs) sortAll#1(nil()) -> nil() sortAll#2(tuple#2(@vals,@key),@xs) -> ::(tuple#2(quicksort(@vals),@key),sortAll(@xs)) split(@l) -> split#1(@l) split#1(::(@x,@xs)) -> insert(@x,split(@xs)) split#1(nil()) -> nil() splitAndSort(@l) -> sortAll(split(@l)) splitqs(@pivot,@l) -> splitqs#1(@l,@pivot) splitqs#1(::(@x,@xs),@pivot) -> splitqs#2(splitqs(@pivot,@xs),@pivot,@x) splitqs#1(nil(),@pivot) -> tuple#2(nil(),nil()) splitqs#2(tuple#2(@ls,@rs),@pivot,@x) -> splitqs#3(#greater(@x,@pivot),@ls,@rs,@x) splitqs#3(#false(),@ls,@rs,@x) -> tuple#2(::(@x,@ls),@rs) splitqs#3(#true(),@ls,@rs,@x) -> tuple#2(@ls,::(@x,@rs)) - Signature: {#and/2,#ckgt/1,#compare/2,#eq/2,#equal/2,#greater/2,append/2,append#1/2,insert/2,insert#1/3,insert#2/4 ,insert#3/5,insert#4/6,quicksort/1,quicksort#1/1,quicksort#2/2,sortAll/1,sortAll#1/1,sortAll#2/2,split/1 ,split#1/1,splitAndSort/1,splitqs/2,splitqs#1/2,splitqs#2/3,splitqs#3/4,#and#/2,#ckgt#/1,#compare#/2,#eq#/2 ,#equal#/2,#greater#/2,append#/2,append#1#/2,insert#/2,insert#1#/3,insert#2#/4,insert#3#/5,insert#4#/6 ,quicksort#/1,quicksort#1#/1,quicksort#2#/2,sortAll#/1,sortAll#1#/1,sortAll#2#/2,split#/1,split#1#/1 ,splitAndSort#/1,splitqs#/2,splitqs#1#/2,splitqs#2#/3,splitqs#3#/4} / {#0/0,#EQ/0,#GT/0,#LT/0,#false/0 ,#neg/1,#pos/1,#s/1,#true/0,::/2,nil/0,tuple#2/2,c_1/1,c_2/2,c_3/1,c_4/1,c_5/0,c_6/1,c_7/1,c_8/1,c_9/0 ,c_10/2,c_11/1,c_12/0,c_13/1,c_14/2,c_15/0,c_16/3,c_17/1,c_18/1,c_19/0,c_20/2,c_21/1,c_22/2,c_23/0,c_24/2 ,c_25/1,c_26/2,c_27/0,c_28/2,c_29/0,c_30/0,c_31/0,c_32/0,c_33/0,c_34/0,c_35/0,c_36/0,c_37/0,c_38/0,c_39/0 ,c_40/0,c_41/0,c_42/0,c_43/1,c_44/0,c_45/0,c_46/0,c_47/1,c_48/0,c_49/1,c_50/0,c_51/0,c_52/0,c_53/0,c_54/0 ,c_55/1,c_56/0,c_57/0,c_58/0,c_59/1,c_60/0,c_61/1,c_62/3,c_63/0,c_64/0,c_65/0,c_66/0,c_67/0,c_68/0,c_69/0 ,c_70/3} - Obligation: innermost runtime complexity wrt. defined symbols {#and#,#ckgt#,#compare#,#eq#,#equal#,#greater#,append# ,append#1#,insert#,insert#1#,insert#2#,insert#3#,insert#4#,quicksort#,quicksort#1#,quicksort#2#,sortAll# ,sortAll#1#,sortAll#2#,split#,split#1#,splitAndSort#,splitqs#,splitqs#1#,splitqs#2# ,splitqs#3#} and constructors {#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} + Applied Processor: SimplifyRHS + Details: Consider the dependency graph 1:S:append#(@l,@ys) -> c_3(append#1#(@l,@ys)) -->_1 append#1#(::(@x,@xs),@ys) -> c_4(append#(@xs,@ys)):2 2:S:append#1#(::(@x,@xs),@ys) -> c_4(append#(@xs,@ys)) -->_1 append#(@l,@ys) -> c_3(append#1#(@l,@ys)):1 3:S:insert#(@x,@l) -> c_6(insert#1#(@x,@l,@x)) -->_1 insert#1#(tuple#2(@valX,@keyX),@l,@x) -> c_7(insert#2#(@l,@keyX,@valX,@x)):4 4:S:insert#1#(tuple#2(@valX,@keyX),@l,@x) -> c_7(insert#2#(@l,@keyX,@valX,@x)) -->_1 insert#2#(::(@l1,@ls),@keyX,@valX,@x) -> c_8(insert#3#(@l1,@keyX,@ls,@valX,@x)):5 5:S:insert#2#(::(@l1,@ls),@keyX,@valX,@x) -> c_8(insert#3#(@l1,@keyX,@ls,@valX,@x)) -->_1 insert#3#(tuple#2(@vals1,@key1),@keyX,@ls,@valX,@x) -> c_10(insert#4#(#equal(@key1,@keyX) ,@key1 ,@ls ,@valX ,@vals1 ,@x) ,#equal#(@key1,@keyX)):6 6:S:insert#3#(tuple#2(@vals1,@key1),@keyX,@ls,@valX,@x) -> c_10(insert#4#(#equal(@key1,@keyX) ,@key1 ,@ls ,@valX ,@vals1 ,@x) ,#equal#(@key1,@keyX)) -->_1 insert#4#(#false(),@key1,@ls,@valX,@vals1,@x) -> c_11(insert#(@x,@ls)):7 7:S:insert#4#(#false(),@key1,@ls,@valX,@vals1,@x) -> c_11(insert#(@x,@ls)) -->_1 insert#(@x,@l) -> c_6(insert#1#(@x,@l,@x)):3 8:S:quicksort#(@l) -> c_13(quicksort#1#(@l)) -->_1 quicksort#1#(::(@z,@zs)) -> c_14(quicksort#2#(splitqs(@z,@zs),@z),splitqs#(@z,@zs)):9 9:S:quicksort#1#(::(@z,@zs)) -> c_14(quicksort#2#(splitqs(@z,@zs),@z),splitqs#(@z,@zs)) -->_2 splitqs#(@pivot,@l) -> c_25(splitqs#1#(@l,@pivot)):17 -->_1 quicksort#2#(tuple#2(@xs,@ys),@z) -> c_16(append#(quicksort(@xs),::(@z,quicksort(@ys))) ,quicksort#(@xs) ,quicksort#(@ys)):10 10:S:quicksort#2#(tuple#2(@xs,@ys),@z) -> c_16(append#(quicksort(@xs),::(@z,quicksort(@ys))) ,quicksort#(@xs) ,quicksort#(@ys)) -->_3 quicksort#(@l) -> c_13(quicksort#1#(@l)):8 -->_2 quicksort#(@l) -> c_13(quicksort#1#(@l)):8 -->_1 append#(@l,@ys) -> c_3(append#1#(@l,@ys)):1 11:S:sortAll#(@l) -> c_17(sortAll#1#(@l)) -->_1 sortAll#1#(::(@x,@xs)) -> c_18(sortAll#2#(@x,@xs)):12 12:S:sortAll#1#(::(@x,@xs)) -> c_18(sortAll#2#(@x,@xs)) -->_1 sortAll#2#(tuple#2(@vals,@key),@xs) -> c_20(quicksort#(@vals),sortAll#(@xs)):13 13:S:sortAll#2#(tuple#2(@vals,@key),@xs) -> c_20(quicksort#(@vals),sortAll#(@xs)) -->_2 sortAll#(@l) -> c_17(sortAll#1#(@l)):11 -->_1 quicksort#(@l) -> c_13(quicksort#1#(@l)):8 14:S:split#(@l) -> c_21(split#1#(@l)) -->_1 split#1#(::(@x,@xs)) -> c_22(insert#(@x,split(@xs)),split#(@xs)):15 15:S:split#1#(::(@x,@xs)) -> c_22(insert#(@x,split(@xs)),split#(@xs)) -->_2 split#(@l) -> c_21(split#1#(@l)):14 -->_1 insert#(@x,@l) -> c_6(insert#1#(@x,@l,@x)):3 16:S:splitAndSort#(@l) -> c_24(sortAll#(split(@l)),split#(@l)) -->_2 split#(@l) -> c_21(split#1#(@l)):14 -->_1 sortAll#(@l) -> c_17(sortAll#1#(@l)):11 17:S:splitqs#(@pivot,@l) -> c_25(splitqs#1#(@l,@pivot)) -->_1 splitqs#1#(::(@x,@xs),@pivot) -> c_26(splitqs#2#(splitqs(@pivot,@xs),@pivot,@x) ,splitqs#(@pivot,@xs)):18 18:S:splitqs#1#(::(@x,@xs),@pivot) -> c_26(splitqs#2#(splitqs(@pivot,@xs),@pivot,@x),splitqs#(@pivot,@xs)) -->_2 splitqs#(@pivot,@l) -> c_25(splitqs#1#(@l,@pivot)):17 Due to missing edges in the depndency graph, the right-hand sides of following rules could be simplified: insert#3#(tuple#2(@vals1,@key1),@keyX,@ls,@valX,@x) -> c_10(insert#4#(#equal(@key1,@keyX) ,@key1 ,@ls ,@valX ,@vals1 ,@x)) splitqs#1#(::(@x,@xs),@pivot) -> c_26(splitqs#(@pivot,@xs)) * Step 6: UsableRules WORST_CASE(?,O(n^5)) + Considered Problem: - Strict DPs: append#(@l,@ys) -> c_3(append#1#(@l,@ys)) append#1#(::(@x,@xs),@ys) -> c_4(append#(@xs,@ys)) insert#(@x,@l) -> c_6(insert#1#(@x,@l,@x)) insert#1#(tuple#2(@valX,@keyX),@l,@x) -> c_7(insert#2#(@l,@keyX,@valX,@x)) insert#2#(::(@l1,@ls),@keyX,@valX,@x) -> c_8(insert#3#(@l1,@keyX,@ls,@valX,@x)) insert#3#(tuple#2(@vals1,@key1),@keyX,@ls,@valX,@x) -> c_10(insert#4#(#equal(@key1,@keyX) ,@key1 ,@ls ,@valX ,@vals1 ,@x)) insert#4#(#false(),@key1,@ls,@valX,@vals1,@x) -> c_11(insert#(@x,@ls)) quicksort#(@l) -> c_13(quicksort#1#(@l)) quicksort#1#(::(@z,@zs)) -> c_14(quicksort#2#(splitqs(@z,@zs),@z),splitqs#(@z,@zs)) quicksort#2#(tuple#2(@xs,@ys),@z) -> c_16(append#(quicksort(@xs),::(@z,quicksort(@ys))) ,quicksort#(@xs) ,quicksort#(@ys)) sortAll#(@l) -> c_17(sortAll#1#(@l)) sortAll#1#(::(@x,@xs)) -> c_18(sortAll#2#(@x,@xs)) sortAll#2#(tuple#2(@vals,@key),@xs) -> c_20(quicksort#(@vals),sortAll#(@xs)) split#(@l) -> c_21(split#1#(@l)) split#1#(::(@x,@xs)) -> c_22(insert#(@x,split(@xs)),split#(@xs)) splitAndSort#(@l) -> c_24(sortAll#(split(@l)),split#(@l)) splitqs#(@pivot,@l) -> c_25(splitqs#1#(@l,@pivot)) splitqs#1#(::(@x,@xs),@pivot) -> c_26(splitqs#(@pivot,@xs)) - Weak TRS: #and(#false(),#false()) -> #false() #and(#false(),#true()) -> #false() #and(#true(),#false()) -> #false() #and(#true(),#true()) -> #true() #ckgt(#EQ()) -> #false() #ckgt(#GT()) -> #true() #ckgt(#LT()) -> #false() #compare(#0(),#0()) -> #EQ() #compare(#0(),#neg(@y)) -> #GT() #compare(#0(),#pos(@y)) -> #LT() #compare(#0(),#s(@y)) -> #LT() #compare(#neg(@x),#0()) -> #LT() #compare(#neg(@x),#neg(@y)) -> #compare(@y,@x) #compare(#neg(@x),#pos(@y)) -> #LT() #compare(#pos(@x),#0()) -> #GT() #compare(#pos(@x),#neg(@y)) -> #GT() #compare(#pos(@x),#pos(@y)) -> #compare(@x,@y) #compare(#s(@x),#0()) -> #GT() #compare(#s(@x),#s(@y)) -> #compare(@x,@y) #eq(#0(),#0()) -> #true() #eq(#0(),#neg(@y)) -> #false() #eq(#0(),#pos(@y)) -> #false() #eq(#0(),#s(@y)) -> #false() #eq(#neg(@x),#0()) -> #false() #eq(#neg(@x),#neg(@y)) -> #eq(@x,@y) #eq(#neg(@x),#pos(@y)) -> #false() #eq(#pos(@x),#0()) -> #false() #eq(#pos(@x),#neg(@y)) -> #false() #eq(#pos(@x),#pos(@y)) -> #eq(@x,@y) #eq(#s(@x),#0()) -> #false() #eq(#s(@x),#s(@y)) -> #eq(@x,@y) #eq(::(@x_1,@x_2),::(@y_1,@y_2)) -> #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #eq(::(@x_1,@x_2),nil()) -> #false() #eq(::(@x_1,@x_2),tuple#2(@y_1,@y_2)) -> #false() #eq(nil(),::(@y_1,@y_2)) -> #false() #eq(nil(),nil()) -> #true() #eq(nil(),tuple#2(@y_1,@y_2)) -> #false() #eq(tuple#2(@x_1,@x_2),::(@y_1,@y_2)) -> #false() #eq(tuple#2(@x_1,@x_2),nil()) -> #false() #eq(tuple#2(@x_1,@x_2),tuple#2(@y_1,@y_2)) -> #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #equal(@x,@y) -> #eq(@x,@y) #greater(@x,@y) -> #ckgt(#compare(@x,@y)) append(@l,@ys) -> append#1(@l,@ys) append#1(::(@x,@xs),@ys) -> ::(@x,append(@xs,@ys)) append#1(nil(),@ys) -> @ys insert(@x,@l) -> insert#1(@x,@l,@x) insert#1(tuple#2(@valX,@keyX),@l,@x) -> insert#2(@l,@keyX,@valX,@x) insert#2(::(@l1,@ls),@keyX,@valX,@x) -> insert#3(@l1,@keyX,@ls,@valX,@x) insert#2(nil(),@keyX,@valX,@x) -> ::(tuple#2(::(@valX,nil()),@keyX),nil()) insert#3(tuple#2(@vals1,@key1),@keyX,@ls,@valX,@x) -> insert#4(#equal(@key1,@keyX) ,@key1 ,@ls ,@valX ,@vals1 ,@x) insert#4(#false(),@key1,@ls,@valX,@vals1,@x) -> ::(tuple#2(@vals1,@key1),insert(@x,@ls)) insert#4(#true(),@key1,@ls,@valX,@vals1,@x) -> ::(tuple#2(::(@valX,@vals1),@key1),@ls) quicksort(@l) -> quicksort#1(@l) quicksort#1(::(@z,@zs)) -> quicksort#2(splitqs(@z,@zs),@z) quicksort#1(nil()) -> nil() quicksort#2(tuple#2(@xs,@ys),@z) -> append(quicksort(@xs),::(@z,quicksort(@ys))) sortAll(@l) -> sortAll#1(@l) sortAll#1(::(@x,@xs)) -> sortAll#2(@x,@xs) sortAll#1(nil()) -> nil() sortAll#2(tuple#2(@vals,@key),@xs) -> ::(tuple#2(quicksort(@vals),@key),sortAll(@xs)) split(@l) -> split#1(@l) split#1(::(@x,@xs)) -> insert(@x,split(@xs)) split#1(nil()) -> nil() splitAndSort(@l) -> sortAll(split(@l)) splitqs(@pivot,@l) -> splitqs#1(@l,@pivot) splitqs#1(::(@x,@xs),@pivot) -> splitqs#2(splitqs(@pivot,@xs),@pivot,@x) splitqs#1(nil(),@pivot) -> tuple#2(nil(),nil()) splitqs#2(tuple#2(@ls,@rs),@pivot,@x) -> splitqs#3(#greater(@x,@pivot),@ls,@rs,@x) splitqs#3(#false(),@ls,@rs,@x) -> tuple#2(::(@x,@ls),@rs) splitqs#3(#true(),@ls,@rs,@x) -> tuple#2(@ls,::(@x,@rs)) - Signature: {#and/2,#ckgt/1,#compare/2,#eq/2,#equal/2,#greater/2,append/2,append#1/2,insert/2,insert#1/3,insert#2/4 ,insert#3/5,insert#4/6,quicksort/1,quicksort#1/1,quicksort#2/2,sortAll/1,sortAll#1/1,sortAll#2/2,split/1 ,split#1/1,splitAndSort/1,splitqs/2,splitqs#1/2,splitqs#2/3,splitqs#3/4,#and#/2,#ckgt#/1,#compare#/2,#eq#/2 ,#equal#/2,#greater#/2,append#/2,append#1#/2,insert#/2,insert#1#/3,insert#2#/4,insert#3#/5,insert#4#/6 ,quicksort#/1,quicksort#1#/1,quicksort#2#/2,sortAll#/1,sortAll#1#/1,sortAll#2#/2,split#/1,split#1#/1 ,splitAndSort#/1,splitqs#/2,splitqs#1#/2,splitqs#2#/3,splitqs#3#/4} / {#0/0,#EQ/0,#GT/0,#LT/0,#false/0 ,#neg/1,#pos/1,#s/1,#true/0,::/2,nil/0,tuple#2/2,c_1/1,c_2/2,c_3/1,c_4/1,c_5/0,c_6/1,c_7/1,c_8/1,c_9/0 ,c_10/1,c_11/1,c_12/0,c_13/1,c_14/2,c_15/0,c_16/3,c_17/1,c_18/1,c_19/0,c_20/2,c_21/1,c_22/2,c_23/0,c_24/2 ,c_25/1,c_26/1,c_27/0,c_28/2,c_29/0,c_30/0,c_31/0,c_32/0,c_33/0,c_34/0,c_35/0,c_36/0,c_37/0,c_38/0,c_39/0 ,c_40/0,c_41/0,c_42/0,c_43/1,c_44/0,c_45/0,c_46/0,c_47/1,c_48/0,c_49/1,c_50/0,c_51/0,c_52/0,c_53/0,c_54/0 ,c_55/1,c_56/0,c_57/0,c_58/0,c_59/1,c_60/0,c_61/1,c_62/3,c_63/0,c_64/0,c_65/0,c_66/0,c_67/0,c_68/0,c_69/0 ,c_70/3} - Obligation: innermost runtime complexity wrt. defined symbols {#and#,#ckgt#,#compare#,#eq#,#equal#,#greater#,append# ,append#1#,insert#,insert#1#,insert#2#,insert#3#,insert#4#,quicksort#,quicksort#1#,quicksort#2#,sortAll# ,sortAll#1#,sortAll#2#,split#,split#1#,splitAndSort#,splitqs#,splitqs#1#,splitqs#2# ,splitqs#3#} and constructors {#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} + Applied Processor: UsableRules + Details: We replace rewrite rules by usable rules: #and(#false(),#false()) -> #false() #and(#false(),#true()) -> #false() #and(#true(),#false()) -> #false() #and(#true(),#true()) -> #true() #ckgt(#EQ()) -> #false() #ckgt(#GT()) -> #true() #ckgt(#LT()) -> #false() #compare(#0(),#0()) -> #EQ() #compare(#0(),#neg(@y)) -> #GT() #compare(#0(),#pos(@y)) -> #LT() #compare(#0(),#s(@y)) -> #LT() #compare(#neg(@x),#0()) -> #LT() #compare(#neg(@x),#neg(@y)) -> #compare(@y,@x) #compare(#neg(@x),#pos(@y)) -> #LT() #compare(#pos(@x),#0()) -> #GT() #compare(#pos(@x),#neg(@y)) -> #GT() #compare(#pos(@x),#pos(@y)) -> #compare(@x,@y) #compare(#s(@x),#0()) -> #GT() #compare(#s(@x),#s(@y)) -> #compare(@x,@y) #eq(#0(),#0()) -> #true() #eq(#0(),#neg(@y)) -> #false() #eq(#0(),#pos(@y)) -> #false() #eq(#0(),#s(@y)) -> #false() #eq(#neg(@x),#0()) -> #false() #eq(#neg(@x),#neg(@y)) -> #eq(@x,@y) #eq(#neg(@x),#pos(@y)) -> #false() #eq(#pos(@x),#0()) -> #false() #eq(#pos(@x),#neg(@y)) -> #false() #eq(#pos(@x),#pos(@y)) -> #eq(@x,@y) #eq(#s(@x),#0()) -> #false() #eq(#s(@x),#s(@y)) -> #eq(@x,@y) #eq(::(@x_1,@x_2),::(@y_1,@y_2)) -> #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #eq(::(@x_1,@x_2),nil()) -> #false() #eq(::(@x_1,@x_2),tuple#2(@y_1,@y_2)) -> #false() #eq(nil(),::(@y_1,@y_2)) -> #false() #eq(nil(),nil()) -> #true() #eq(nil(),tuple#2(@y_1,@y_2)) -> #false() #eq(tuple#2(@x_1,@x_2),::(@y_1,@y_2)) -> #false() #eq(tuple#2(@x_1,@x_2),nil()) -> #false() #eq(tuple#2(@x_1,@x_2),tuple#2(@y_1,@y_2)) -> #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #equal(@x,@y) -> #eq(@x,@y) #greater(@x,@y) -> #ckgt(#compare(@x,@y)) append(@l,@ys) -> append#1(@l,@ys) append#1(::(@x,@xs),@ys) -> ::(@x,append(@xs,@ys)) append#1(nil(),@ys) -> @ys insert(@x,@l) -> insert#1(@x,@l,@x) insert#1(tuple#2(@valX,@keyX),@l,@x) -> insert#2(@l,@keyX,@valX,@x) insert#2(::(@l1,@ls),@keyX,@valX,@x) -> insert#3(@l1,@keyX,@ls,@valX,@x) insert#2(nil(),@keyX,@valX,@x) -> ::(tuple#2(::(@valX,nil()),@keyX),nil()) insert#3(tuple#2(@vals1,@key1),@keyX,@ls,@valX,@x) -> insert#4(#equal(@key1,@keyX) ,@key1 ,@ls ,@valX ,@vals1 ,@x) insert#4(#false(),@key1,@ls,@valX,@vals1,@x) -> ::(tuple#2(@vals1,@key1),insert(@x,@ls)) insert#4(#true(),@key1,@ls,@valX,@vals1,@x) -> ::(tuple#2(::(@valX,@vals1),@key1),@ls) quicksort(@l) -> quicksort#1(@l) quicksort#1(::(@z,@zs)) -> quicksort#2(splitqs(@z,@zs),@z) quicksort#1(nil()) -> nil() quicksort#2(tuple#2(@xs,@ys),@z) -> append(quicksort(@xs),::(@z,quicksort(@ys))) split(@l) -> split#1(@l) split#1(::(@x,@xs)) -> insert(@x,split(@xs)) split#1(nil()) -> nil() splitqs(@pivot,@l) -> splitqs#1(@l,@pivot) splitqs#1(::(@x,@xs),@pivot) -> splitqs#2(splitqs(@pivot,@xs),@pivot,@x) splitqs#1(nil(),@pivot) -> tuple#2(nil(),nil()) splitqs#2(tuple#2(@ls,@rs),@pivot,@x) -> splitqs#3(#greater(@x,@pivot),@ls,@rs,@x) splitqs#3(#false(),@ls,@rs,@x) -> tuple#2(::(@x,@ls),@rs) splitqs#3(#true(),@ls,@rs,@x) -> tuple#2(@ls,::(@x,@rs)) append#(@l,@ys) -> c_3(append#1#(@l,@ys)) append#1#(::(@x,@xs),@ys) -> c_4(append#(@xs,@ys)) insert#(@x,@l) -> c_6(insert#1#(@x,@l,@x)) insert#1#(tuple#2(@valX,@keyX),@l,@x) -> c_7(insert#2#(@l,@keyX,@valX,@x)) insert#2#(::(@l1,@ls),@keyX,@valX,@x) -> c_8(insert#3#(@l1,@keyX,@ls,@valX,@x)) insert#3#(tuple#2(@vals1,@key1),@keyX,@ls,@valX,@x) -> c_10(insert#4#(#equal(@key1,@keyX) ,@key1 ,@ls ,@valX ,@vals1 ,@x)) insert#4#(#false(),@key1,@ls,@valX,@vals1,@x) -> c_11(insert#(@x,@ls)) quicksort#(@l) -> c_13(quicksort#1#(@l)) quicksort#1#(::(@z,@zs)) -> c_14(quicksort#2#(splitqs(@z,@zs),@z),splitqs#(@z,@zs)) quicksort#2#(tuple#2(@xs,@ys),@z) -> c_16(append#(quicksort(@xs),::(@z,quicksort(@ys))) ,quicksort#(@xs) ,quicksort#(@ys)) sortAll#(@l) -> c_17(sortAll#1#(@l)) sortAll#1#(::(@x,@xs)) -> c_18(sortAll#2#(@x,@xs)) sortAll#2#(tuple#2(@vals,@key),@xs) -> c_20(quicksort#(@vals),sortAll#(@xs)) split#(@l) -> c_21(split#1#(@l)) split#1#(::(@x,@xs)) -> c_22(insert#(@x,split(@xs)),split#(@xs)) splitAndSort#(@l) -> c_24(sortAll#(split(@l)),split#(@l)) splitqs#(@pivot,@l) -> c_25(splitqs#1#(@l,@pivot)) splitqs#1#(::(@x,@xs),@pivot) -> c_26(splitqs#(@pivot,@xs)) * Step 7: DecomposeDG WORST_CASE(?,O(n^5)) + Considered Problem: - Strict DPs: append#(@l,@ys) -> c_3(append#1#(@l,@ys)) append#1#(::(@x,@xs),@ys) -> c_4(append#(@xs,@ys)) insert#(@x,@l) -> c_6(insert#1#(@x,@l,@x)) insert#1#(tuple#2(@valX,@keyX),@l,@x) -> c_7(insert#2#(@l,@keyX,@valX,@x)) insert#2#(::(@l1,@ls),@keyX,@valX,@x) -> c_8(insert#3#(@l1,@keyX,@ls,@valX,@x)) insert#3#(tuple#2(@vals1,@key1),@keyX,@ls,@valX,@x) -> c_10(insert#4#(#equal(@key1,@keyX) ,@key1 ,@ls ,@valX ,@vals1 ,@x)) insert#4#(#false(),@key1,@ls,@valX,@vals1,@x) -> c_11(insert#(@x,@ls)) quicksort#(@l) -> c_13(quicksort#1#(@l)) quicksort#1#(::(@z,@zs)) -> c_14(quicksort#2#(splitqs(@z,@zs),@z),splitqs#(@z,@zs)) quicksort#2#(tuple#2(@xs,@ys),@z) -> c_16(append#(quicksort(@xs),::(@z,quicksort(@ys))) ,quicksort#(@xs) ,quicksort#(@ys)) sortAll#(@l) -> c_17(sortAll#1#(@l)) sortAll#1#(::(@x,@xs)) -> c_18(sortAll#2#(@x,@xs)) sortAll#2#(tuple#2(@vals,@key),@xs) -> c_20(quicksort#(@vals),sortAll#(@xs)) split#(@l) -> c_21(split#1#(@l)) split#1#(::(@x,@xs)) -> c_22(insert#(@x,split(@xs)),split#(@xs)) splitAndSort#(@l) -> c_24(sortAll#(split(@l)),split#(@l)) splitqs#(@pivot,@l) -> c_25(splitqs#1#(@l,@pivot)) splitqs#1#(::(@x,@xs),@pivot) -> c_26(splitqs#(@pivot,@xs)) - Weak TRS: #and(#false(),#false()) -> #false() #and(#false(),#true()) -> #false() #and(#true(),#false()) -> #false() #and(#true(),#true()) -> #true() #ckgt(#EQ()) -> #false() #ckgt(#GT()) -> #true() #ckgt(#LT()) -> #false() #compare(#0(),#0()) -> #EQ() #compare(#0(),#neg(@y)) -> #GT() #compare(#0(),#pos(@y)) -> #LT() #compare(#0(),#s(@y)) -> #LT() #compare(#neg(@x),#0()) -> #LT() #compare(#neg(@x),#neg(@y)) -> #compare(@y,@x) #compare(#neg(@x),#pos(@y)) -> #LT() #compare(#pos(@x),#0()) -> #GT() #compare(#pos(@x),#neg(@y)) -> #GT() #compare(#pos(@x),#pos(@y)) -> #compare(@x,@y) #compare(#s(@x),#0()) -> #GT() #compare(#s(@x),#s(@y)) -> #compare(@x,@y) #eq(#0(),#0()) -> #true() #eq(#0(),#neg(@y)) -> #false() #eq(#0(),#pos(@y)) -> #false() #eq(#0(),#s(@y)) -> #false() #eq(#neg(@x),#0()) -> #false() #eq(#neg(@x),#neg(@y)) -> #eq(@x,@y) #eq(#neg(@x),#pos(@y)) -> #false() #eq(#pos(@x),#0()) -> #false() #eq(#pos(@x),#neg(@y)) -> #false() #eq(#pos(@x),#pos(@y)) -> #eq(@x,@y) #eq(#s(@x),#0()) -> #false() #eq(#s(@x),#s(@y)) -> #eq(@x,@y) #eq(::(@x_1,@x_2),::(@y_1,@y_2)) -> #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #eq(::(@x_1,@x_2),nil()) -> #false() #eq(::(@x_1,@x_2),tuple#2(@y_1,@y_2)) -> #false() #eq(nil(),::(@y_1,@y_2)) -> #false() #eq(nil(),nil()) -> #true() #eq(nil(),tuple#2(@y_1,@y_2)) -> #false() #eq(tuple#2(@x_1,@x_2),::(@y_1,@y_2)) -> #false() #eq(tuple#2(@x_1,@x_2),nil()) -> #false() #eq(tuple#2(@x_1,@x_2),tuple#2(@y_1,@y_2)) -> #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #equal(@x,@y) -> #eq(@x,@y) #greater(@x,@y) -> #ckgt(#compare(@x,@y)) append(@l,@ys) -> append#1(@l,@ys) append#1(::(@x,@xs),@ys) -> ::(@x,append(@xs,@ys)) append#1(nil(),@ys) -> @ys insert(@x,@l) -> insert#1(@x,@l,@x) insert#1(tuple#2(@valX,@keyX),@l,@x) -> insert#2(@l,@keyX,@valX,@x) insert#2(::(@l1,@ls),@keyX,@valX,@x) -> insert#3(@l1,@keyX,@ls,@valX,@x) insert#2(nil(),@keyX,@valX,@x) -> ::(tuple#2(::(@valX,nil()),@keyX),nil()) insert#3(tuple#2(@vals1,@key1),@keyX,@ls,@valX,@x) -> insert#4(#equal(@key1,@keyX) ,@key1 ,@ls ,@valX ,@vals1 ,@x) insert#4(#false(),@key1,@ls,@valX,@vals1,@x) -> ::(tuple#2(@vals1,@key1),insert(@x,@ls)) insert#4(#true(),@key1,@ls,@valX,@vals1,@x) -> ::(tuple#2(::(@valX,@vals1),@key1),@ls) quicksort(@l) -> quicksort#1(@l) quicksort#1(::(@z,@zs)) -> quicksort#2(splitqs(@z,@zs),@z) quicksort#1(nil()) -> nil() quicksort#2(tuple#2(@xs,@ys),@z) -> append(quicksort(@xs),::(@z,quicksort(@ys))) split(@l) -> split#1(@l) split#1(::(@x,@xs)) -> insert(@x,split(@xs)) split#1(nil()) -> nil() splitqs(@pivot,@l) -> splitqs#1(@l,@pivot) splitqs#1(::(@x,@xs),@pivot) -> splitqs#2(splitqs(@pivot,@xs),@pivot,@x) splitqs#1(nil(),@pivot) -> tuple#2(nil(),nil()) splitqs#2(tuple#2(@ls,@rs),@pivot,@x) -> splitqs#3(#greater(@x,@pivot),@ls,@rs,@x) splitqs#3(#false(),@ls,@rs,@x) -> tuple#2(::(@x,@ls),@rs) splitqs#3(#true(),@ls,@rs,@x) -> tuple#2(@ls,::(@x,@rs)) - Signature: {#and/2,#ckgt/1,#compare/2,#eq/2,#equal/2,#greater/2,append/2,append#1/2,insert/2,insert#1/3,insert#2/4 ,insert#3/5,insert#4/6,quicksort/1,quicksort#1/1,quicksort#2/2,sortAll/1,sortAll#1/1,sortAll#2/2,split/1 ,split#1/1,splitAndSort/1,splitqs/2,splitqs#1/2,splitqs#2/3,splitqs#3/4,#and#/2,#ckgt#/1,#compare#/2,#eq#/2 ,#equal#/2,#greater#/2,append#/2,append#1#/2,insert#/2,insert#1#/3,insert#2#/4,insert#3#/5,insert#4#/6 ,quicksort#/1,quicksort#1#/1,quicksort#2#/2,sortAll#/1,sortAll#1#/1,sortAll#2#/2,split#/1,split#1#/1 ,splitAndSort#/1,splitqs#/2,splitqs#1#/2,splitqs#2#/3,splitqs#3#/4} / {#0/0,#EQ/0,#GT/0,#LT/0,#false/0 ,#neg/1,#pos/1,#s/1,#true/0,::/2,nil/0,tuple#2/2,c_1/1,c_2/2,c_3/1,c_4/1,c_5/0,c_6/1,c_7/1,c_8/1,c_9/0 ,c_10/1,c_11/1,c_12/0,c_13/1,c_14/2,c_15/0,c_16/3,c_17/1,c_18/1,c_19/0,c_20/2,c_21/1,c_22/2,c_23/0,c_24/2 ,c_25/1,c_26/1,c_27/0,c_28/2,c_29/0,c_30/0,c_31/0,c_32/0,c_33/0,c_34/0,c_35/0,c_36/0,c_37/0,c_38/0,c_39/0 ,c_40/0,c_41/0,c_42/0,c_43/1,c_44/0,c_45/0,c_46/0,c_47/1,c_48/0,c_49/1,c_50/0,c_51/0,c_52/0,c_53/0,c_54/0 ,c_55/1,c_56/0,c_57/0,c_58/0,c_59/1,c_60/0,c_61/1,c_62/3,c_63/0,c_64/0,c_65/0,c_66/0,c_67/0,c_68/0,c_69/0 ,c_70/3} - Obligation: innermost runtime complexity wrt. defined symbols {#and#,#ckgt#,#compare#,#eq#,#equal#,#greater#,append# ,append#1#,insert#,insert#1#,insert#2#,insert#3#,insert#4#,quicksort#,quicksort#1#,quicksort#2#,sortAll# ,sortAll#1#,sortAll#2#,split#,split#1#,splitAndSort#,splitqs#,splitqs#1#,splitqs#2# ,splitqs#3#} and constructors {#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} + Applied Processor: DecomposeDG {onSelection = all below first cut in WDG, onUpper = Nothing, onLower = Nothing} + Details: We decompose the input problem according to the dependency graph into the upper component sortAll#(@l) -> c_17(sortAll#1#(@l)) sortAll#1#(::(@x,@xs)) -> c_18(sortAll#2#(@x,@xs)) sortAll#2#(tuple#2(@vals,@key),@xs) -> c_20(quicksort#(@vals),sortAll#(@xs)) split#(@l) -> c_21(split#1#(@l)) split#1#(::(@x,@xs)) -> c_22(insert#(@x,split(@xs)),split#(@xs)) splitAndSort#(@l) -> c_24(sortAll#(split(@l)),split#(@l)) and a lower component append#(@l,@ys) -> c_3(append#1#(@l,@ys)) append#1#(::(@x,@xs),@ys) -> c_4(append#(@xs,@ys)) insert#(@x,@l) -> c_6(insert#1#(@x,@l,@x)) insert#1#(tuple#2(@valX,@keyX),@l,@x) -> c_7(insert#2#(@l,@keyX,@valX,@x)) insert#2#(::(@l1,@ls),@keyX,@valX,@x) -> c_8(insert#3#(@l1,@keyX,@ls,@valX,@x)) insert#3#(tuple#2(@vals1,@key1),@keyX,@ls,@valX,@x) -> c_10(insert#4#(#equal(@key1,@keyX) ,@key1 ,@ls ,@valX ,@vals1 ,@x)) insert#4#(#false(),@key1,@ls,@valX,@vals1,@x) -> c_11(insert#(@x,@ls)) quicksort#(@l) -> c_13(quicksort#1#(@l)) quicksort#1#(::(@z,@zs)) -> c_14(quicksort#2#(splitqs(@z,@zs),@z),splitqs#(@z,@zs)) quicksort#2#(tuple#2(@xs,@ys),@z) -> c_16(append#(quicksort(@xs),::(@z,quicksort(@ys))) ,quicksort#(@xs) ,quicksort#(@ys)) splitqs#(@pivot,@l) -> c_25(splitqs#1#(@l,@pivot)) splitqs#1#(::(@x,@xs),@pivot) -> c_26(splitqs#(@pivot,@xs)) Further, following extension rules are added to the lower component. sortAll#(@l) -> sortAll#1#(@l) sortAll#1#(::(@x,@xs)) -> sortAll#2#(@x,@xs) sortAll#2#(tuple#2(@vals,@key),@xs) -> quicksort#(@vals) sortAll#2#(tuple#2(@vals,@key),@xs) -> sortAll#(@xs) split#(@l) -> split#1#(@l) split#1#(::(@x,@xs)) -> insert#(@x,split(@xs)) split#1#(::(@x,@xs)) -> split#(@xs) splitAndSort#(@l) -> sortAll#(split(@l)) splitAndSort#(@l) -> split#(@l) ** Step 7.a:1: SimplifyRHS WORST_CASE(?,O(n^1)) + Considered Problem: - Strict DPs: sortAll#(@l) -> c_17(sortAll#1#(@l)) sortAll#1#(::(@x,@xs)) -> c_18(sortAll#2#(@x,@xs)) sortAll#2#(tuple#2(@vals,@key),@xs) -> c_20(quicksort#(@vals),sortAll#(@xs)) split#(@l) -> c_21(split#1#(@l)) split#1#(::(@x,@xs)) -> c_22(insert#(@x,split(@xs)),split#(@xs)) splitAndSort#(@l) -> c_24(sortAll#(split(@l)),split#(@l)) - Weak TRS: #and(#false(),#false()) -> #false() #and(#false(),#true()) -> #false() #and(#true(),#false()) -> #false() #and(#true(),#true()) -> #true() #ckgt(#EQ()) -> #false() #ckgt(#GT()) -> #true() #ckgt(#LT()) -> #false() #compare(#0(),#0()) -> #EQ() #compare(#0(),#neg(@y)) -> #GT() #compare(#0(),#pos(@y)) -> #LT() #compare(#0(),#s(@y)) -> #LT() #compare(#neg(@x),#0()) -> #LT() #compare(#neg(@x),#neg(@y)) -> #compare(@y,@x) #compare(#neg(@x),#pos(@y)) -> #LT() #compare(#pos(@x),#0()) -> #GT() #compare(#pos(@x),#neg(@y)) -> #GT() #compare(#pos(@x),#pos(@y)) -> #compare(@x,@y) #compare(#s(@x),#0()) -> #GT() #compare(#s(@x),#s(@y)) -> #compare(@x,@y) #eq(#0(),#0()) -> #true() #eq(#0(),#neg(@y)) -> #false() #eq(#0(),#pos(@y)) -> #false() #eq(#0(),#s(@y)) -> #false() #eq(#neg(@x),#0()) -> #false() #eq(#neg(@x),#neg(@y)) -> #eq(@x,@y) #eq(#neg(@x),#pos(@y)) -> #false() #eq(#pos(@x),#0()) -> #false() #eq(#pos(@x),#neg(@y)) -> #false() #eq(#pos(@x),#pos(@y)) -> #eq(@x,@y) #eq(#s(@x),#0()) -> #false() #eq(#s(@x),#s(@y)) -> #eq(@x,@y) #eq(::(@x_1,@x_2),::(@y_1,@y_2)) -> #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #eq(::(@x_1,@x_2),nil()) -> #false() #eq(::(@x_1,@x_2),tuple#2(@y_1,@y_2)) -> #false() #eq(nil(),::(@y_1,@y_2)) -> #false() #eq(nil(),nil()) -> #true() #eq(nil(),tuple#2(@y_1,@y_2)) -> #false() #eq(tuple#2(@x_1,@x_2),::(@y_1,@y_2)) -> #false() #eq(tuple#2(@x_1,@x_2),nil()) -> #false() #eq(tuple#2(@x_1,@x_2),tuple#2(@y_1,@y_2)) -> #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #equal(@x,@y) -> #eq(@x,@y) #greater(@x,@y) -> #ckgt(#compare(@x,@y)) append(@l,@ys) -> append#1(@l,@ys) append#1(::(@x,@xs),@ys) -> ::(@x,append(@xs,@ys)) append#1(nil(),@ys) -> @ys insert(@x,@l) -> insert#1(@x,@l,@x) insert#1(tuple#2(@valX,@keyX),@l,@x) -> insert#2(@l,@keyX,@valX,@x) insert#2(::(@l1,@ls),@keyX,@valX,@x) -> insert#3(@l1,@keyX,@ls,@valX,@x) insert#2(nil(),@keyX,@valX,@x) -> ::(tuple#2(::(@valX,nil()),@keyX),nil()) insert#3(tuple#2(@vals1,@key1),@keyX,@ls,@valX,@x) -> insert#4(#equal(@key1,@keyX) ,@key1 ,@ls ,@valX ,@vals1 ,@x) insert#4(#false(),@key1,@ls,@valX,@vals1,@x) -> ::(tuple#2(@vals1,@key1),insert(@x,@ls)) insert#4(#true(),@key1,@ls,@valX,@vals1,@x) -> ::(tuple#2(::(@valX,@vals1),@key1),@ls) quicksort(@l) -> quicksort#1(@l) quicksort#1(::(@z,@zs)) -> quicksort#2(splitqs(@z,@zs),@z) quicksort#1(nil()) -> nil() quicksort#2(tuple#2(@xs,@ys),@z) -> append(quicksort(@xs),::(@z,quicksort(@ys))) split(@l) -> split#1(@l) split#1(::(@x,@xs)) -> insert(@x,split(@xs)) split#1(nil()) -> nil() splitqs(@pivot,@l) -> splitqs#1(@l,@pivot) splitqs#1(::(@x,@xs),@pivot) -> splitqs#2(splitqs(@pivot,@xs),@pivot,@x) splitqs#1(nil(),@pivot) -> tuple#2(nil(),nil()) splitqs#2(tuple#2(@ls,@rs),@pivot,@x) -> splitqs#3(#greater(@x,@pivot),@ls,@rs,@x) splitqs#3(#false(),@ls,@rs,@x) -> tuple#2(::(@x,@ls),@rs) splitqs#3(#true(),@ls,@rs,@x) -> tuple#2(@ls,::(@x,@rs)) - Signature: {#and/2,#ckgt/1,#compare/2,#eq/2,#equal/2,#greater/2,append/2,append#1/2,insert/2,insert#1/3,insert#2/4 ,insert#3/5,insert#4/6,quicksort/1,quicksort#1/1,quicksort#2/2,sortAll/1,sortAll#1/1,sortAll#2/2,split/1 ,split#1/1,splitAndSort/1,splitqs/2,splitqs#1/2,splitqs#2/3,splitqs#3/4,#and#/2,#ckgt#/1,#compare#/2,#eq#/2 ,#equal#/2,#greater#/2,append#/2,append#1#/2,insert#/2,insert#1#/3,insert#2#/4,insert#3#/5,insert#4#/6 ,quicksort#/1,quicksort#1#/1,quicksort#2#/2,sortAll#/1,sortAll#1#/1,sortAll#2#/2,split#/1,split#1#/1 ,splitAndSort#/1,splitqs#/2,splitqs#1#/2,splitqs#2#/3,splitqs#3#/4} / {#0/0,#EQ/0,#GT/0,#LT/0,#false/0 ,#neg/1,#pos/1,#s/1,#true/0,::/2,nil/0,tuple#2/2,c_1/1,c_2/2,c_3/1,c_4/1,c_5/0,c_6/1,c_7/1,c_8/1,c_9/0 ,c_10/1,c_11/1,c_12/0,c_13/1,c_14/2,c_15/0,c_16/3,c_17/1,c_18/1,c_19/0,c_20/2,c_21/1,c_22/2,c_23/0,c_24/2 ,c_25/1,c_26/1,c_27/0,c_28/2,c_29/0,c_30/0,c_31/0,c_32/0,c_33/0,c_34/0,c_35/0,c_36/0,c_37/0,c_38/0,c_39/0 ,c_40/0,c_41/0,c_42/0,c_43/1,c_44/0,c_45/0,c_46/0,c_47/1,c_48/0,c_49/1,c_50/0,c_51/0,c_52/0,c_53/0,c_54/0 ,c_55/1,c_56/0,c_57/0,c_58/0,c_59/1,c_60/0,c_61/1,c_62/3,c_63/0,c_64/0,c_65/0,c_66/0,c_67/0,c_68/0,c_69/0 ,c_70/3} - Obligation: innermost runtime complexity wrt. defined symbols {#and#,#ckgt#,#compare#,#eq#,#equal#,#greater#,append# ,append#1#,insert#,insert#1#,insert#2#,insert#3#,insert#4#,quicksort#,quicksort#1#,quicksort#2#,sortAll# ,sortAll#1#,sortAll#2#,split#,split#1#,splitAndSort#,splitqs#,splitqs#1#,splitqs#2# ,splitqs#3#} and constructors {#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} + Applied Processor: SimplifyRHS + Details: Consider the dependency graph 1:S:sortAll#(@l) -> c_17(sortAll#1#(@l)) -->_1 sortAll#1#(::(@x,@xs)) -> c_18(sortAll#2#(@x,@xs)):2 2:S:sortAll#1#(::(@x,@xs)) -> c_18(sortAll#2#(@x,@xs)) -->_1 sortAll#2#(tuple#2(@vals,@key),@xs) -> c_20(quicksort#(@vals),sortAll#(@xs)):3 3:S:sortAll#2#(tuple#2(@vals,@key),@xs) -> c_20(quicksort#(@vals),sortAll#(@xs)) -->_2 sortAll#(@l) -> c_17(sortAll#1#(@l)):1 4:S:split#(@l) -> c_21(split#1#(@l)) -->_1 split#1#(::(@x,@xs)) -> c_22(insert#(@x,split(@xs)),split#(@xs)):5 5:S:split#1#(::(@x,@xs)) -> c_22(insert#(@x,split(@xs)),split#(@xs)) -->_2 split#(@l) -> c_21(split#1#(@l)):4 6:S:splitAndSort#(@l) -> c_24(sortAll#(split(@l)),split#(@l)) -->_2 split#(@l) -> c_21(split#1#(@l)):4 -->_1 sortAll#(@l) -> c_17(sortAll#1#(@l)):1 Due to missing edges in the depndency graph, the right-hand sides of following rules could be simplified: sortAll#2#(tuple#2(@vals,@key),@xs) -> c_20(sortAll#(@xs)) split#1#(::(@x,@xs)) -> c_22(split#(@xs)) ** Step 7.a:2: UsableRules WORST_CASE(?,O(n^1)) + Considered Problem: - Strict DPs: sortAll#(@l) -> c_17(sortAll#1#(@l)) sortAll#1#(::(@x,@xs)) -> c_18(sortAll#2#(@x,@xs)) sortAll#2#(tuple#2(@vals,@key),@xs) -> c_20(sortAll#(@xs)) split#(@l) -> c_21(split#1#(@l)) split#1#(::(@x,@xs)) -> c_22(split#(@xs)) splitAndSort#(@l) -> c_24(sortAll#(split(@l)),split#(@l)) - Weak TRS: #and(#false(),#false()) -> #false() #and(#false(),#true()) -> #false() #and(#true(),#false()) -> #false() #and(#true(),#true()) -> #true() #ckgt(#EQ()) -> #false() #ckgt(#GT()) -> #true() #ckgt(#LT()) -> #false() #compare(#0(),#0()) -> #EQ() #compare(#0(),#neg(@y)) -> #GT() #compare(#0(),#pos(@y)) -> #LT() #compare(#0(),#s(@y)) -> #LT() #compare(#neg(@x),#0()) -> #LT() #compare(#neg(@x),#neg(@y)) -> #compare(@y,@x) #compare(#neg(@x),#pos(@y)) -> #LT() #compare(#pos(@x),#0()) -> #GT() #compare(#pos(@x),#neg(@y)) -> #GT() #compare(#pos(@x),#pos(@y)) -> #compare(@x,@y) #compare(#s(@x),#0()) -> #GT() #compare(#s(@x),#s(@y)) -> #compare(@x,@y) #eq(#0(),#0()) -> #true() #eq(#0(),#neg(@y)) -> #false() #eq(#0(),#pos(@y)) -> #false() #eq(#0(),#s(@y)) -> #false() #eq(#neg(@x),#0()) -> #false() #eq(#neg(@x),#neg(@y)) -> #eq(@x,@y) #eq(#neg(@x),#pos(@y)) -> #false() #eq(#pos(@x),#0()) -> #false() #eq(#pos(@x),#neg(@y)) -> #false() #eq(#pos(@x),#pos(@y)) -> #eq(@x,@y) #eq(#s(@x),#0()) -> #false() #eq(#s(@x),#s(@y)) -> #eq(@x,@y) #eq(::(@x_1,@x_2),::(@y_1,@y_2)) -> #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #eq(::(@x_1,@x_2),nil()) -> #false() #eq(::(@x_1,@x_2),tuple#2(@y_1,@y_2)) -> #false() #eq(nil(),::(@y_1,@y_2)) -> #false() #eq(nil(),nil()) -> #true() #eq(nil(),tuple#2(@y_1,@y_2)) -> #false() #eq(tuple#2(@x_1,@x_2),::(@y_1,@y_2)) -> #false() #eq(tuple#2(@x_1,@x_2),nil()) -> #false() #eq(tuple#2(@x_1,@x_2),tuple#2(@y_1,@y_2)) -> #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #equal(@x,@y) -> #eq(@x,@y) #greater(@x,@y) -> #ckgt(#compare(@x,@y)) append(@l,@ys) -> append#1(@l,@ys) append#1(::(@x,@xs),@ys) -> ::(@x,append(@xs,@ys)) append#1(nil(),@ys) -> @ys insert(@x,@l) -> insert#1(@x,@l,@x) insert#1(tuple#2(@valX,@keyX),@l,@x) -> insert#2(@l,@keyX,@valX,@x) insert#2(::(@l1,@ls),@keyX,@valX,@x) -> insert#3(@l1,@keyX,@ls,@valX,@x) insert#2(nil(),@keyX,@valX,@x) -> ::(tuple#2(::(@valX,nil()),@keyX),nil()) insert#3(tuple#2(@vals1,@key1),@keyX,@ls,@valX,@x) -> insert#4(#equal(@key1,@keyX) ,@key1 ,@ls ,@valX ,@vals1 ,@x) insert#4(#false(),@key1,@ls,@valX,@vals1,@x) -> ::(tuple#2(@vals1,@key1),insert(@x,@ls)) insert#4(#true(),@key1,@ls,@valX,@vals1,@x) -> ::(tuple#2(::(@valX,@vals1),@key1),@ls) quicksort(@l) -> quicksort#1(@l) quicksort#1(::(@z,@zs)) -> quicksort#2(splitqs(@z,@zs),@z) quicksort#1(nil()) -> nil() quicksort#2(tuple#2(@xs,@ys),@z) -> append(quicksort(@xs),::(@z,quicksort(@ys))) split(@l) -> split#1(@l) split#1(::(@x,@xs)) -> insert(@x,split(@xs)) split#1(nil()) -> nil() splitqs(@pivot,@l) -> splitqs#1(@l,@pivot) splitqs#1(::(@x,@xs),@pivot) -> splitqs#2(splitqs(@pivot,@xs),@pivot,@x) splitqs#1(nil(),@pivot) -> tuple#2(nil(),nil()) splitqs#2(tuple#2(@ls,@rs),@pivot,@x) -> splitqs#3(#greater(@x,@pivot),@ls,@rs,@x) splitqs#3(#false(),@ls,@rs,@x) -> tuple#2(::(@x,@ls),@rs) splitqs#3(#true(),@ls,@rs,@x) -> tuple#2(@ls,::(@x,@rs)) - Signature: {#and/2,#ckgt/1,#compare/2,#eq/2,#equal/2,#greater/2,append/2,append#1/2,insert/2,insert#1/3,insert#2/4 ,insert#3/5,insert#4/6,quicksort/1,quicksort#1/1,quicksort#2/2,sortAll/1,sortAll#1/1,sortAll#2/2,split/1 ,split#1/1,splitAndSort/1,splitqs/2,splitqs#1/2,splitqs#2/3,splitqs#3/4,#and#/2,#ckgt#/1,#compare#/2,#eq#/2 ,#equal#/2,#greater#/2,append#/2,append#1#/2,insert#/2,insert#1#/3,insert#2#/4,insert#3#/5,insert#4#/6 ,quicksort#/1,quicksort#1#/1,quicksort#2#/2,sortAll#/1,sortAll#1#/1,sortAll#2#/2,split#/1,split#1#/1 ,splitAndSort#/1,splitqs#/2,splitqs#1#/2,splitqs#2#/3,splitqs#3#/4} / {#0/0,#EQ/0,#GT/0,#LT/0,#false/0 ,#neg/1,#pos/1,#s/1,#true/0,::/2,nil/0,tuple#2/2,c_1/1,c_2/2,c_3/1,c_4/1,c_5/0,c_6/1,c_7/1,c_8/1,c_9/0 ,c_10/1,c_11/1,c_12/0,c_13/1,c_14/2,c_15/0,c_16/3,c_17/1,c_18/1,c_19/0,c_20/1,c_21/1,c_22/1,c_23/0,c_24/2 ,c_25/1,c_26/1,c_27/0,c_28/2,c_29/0,c_30/0,c_31/0,c_32/0,c_33/0,c_34/0,c_35/0,c_36/0,c_37/0,c_38/0,c_39/0 ,c_40/0,c_41/0,c_42/0,c_43/1,c_44/0,c_45/0,c_46/0,c_47/1,c_48/0,c_49/1,c_50/0,c_51/0,c_52/0,c_53/0,c_54/0 ,c_55/1,c_56/0,c_57/0,c_58/0,c_59/1,c_60/0,c_61/1,c_62/3,c_63/0,c_64/0,c_65/0,c_66/0,c_67/0,c_68/0,c_69/0 ,c_70/3} - Obligation: innermost runtime complexity wrt. defined symbols {#and#,#ckgt#,#compare#,#eq#,#equal#,#greater#,append# ,append#1#,insert#,insert#1#,insert#2#,insert#3#,insert#4#,quicksort#,quicksort#1#,quicksort#2#,sortAll# ,sortAll#1#,sortAll#2#,split#,split#1#,splitAndSort#,splitqs#,splitqs#1#,splitqs#2# ,splitqs#3#} and constructors {#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} + Applied Processor: UsableRules + Details: We replace rewrite rules by usable rules: #and(#false(),#false()) -> #false() #and(#false(),#true()) -> #false() #and(#true(),#false()) -> #false() #and(#true(),#true()) -> #true() #eq(#0(),#0()) -> #true() #eq(#0(),#neg(@y)) -> #false() #eq(#0(),#pos(@y)) -> #false() #eq(#0(),#s(@y)) -> #false() #eq(#neg(@x),#0()) -> #false() #eq(#neg(@x),#neg(@y)) -> #eq(@x,@y) #eq(#neg(@x),#pos(@y)) -> #false() #eq(#pos(@x),#0()) -> #false() #eq(#pos(@x),#neg(@y)) -> #false() #eq(#pos(@x),#pos(@y)) -> #eq(@x,@y) #eq(#s(@x),#0()) -> #false() #eq(#s(@x),#s(@y)) -> #eq(@x,@y) #eq(::(@x_1,@x_2),::(@y_1,@y_2)) -> #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #eq(::(@x_1,@x_2),nil()) -> #false() #eq(::(@x_1,@x_2),tuple#2(@y_1,@y_2)) -> #false() #eq(nil(),::(@y_1,@y_2)) -> #false() #eq(nil(),nil()) -> #true() #eq(nil(),tuple#2(@y_1,@y_2)) -> #false() #eq(tuple#2(@x_1,@x_2),::(@y_1,@y_2)) -> #false() #eq(tuple#2(@x_1,@x_2),nil()) -> #false() #eq(tuple#2(@x_1,@x_2),tuple#2(@y_1,@y_2)) -> #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #equal(@x,@y) -> #eq(@x,@y) insert(@x,@l) -> insert#1(@x,@l,@x) insert#1(tuple#2(@valX,@keyX),@l,@x) -> insert#2(@l,@keyX,@valX,@x) insert#2(::(@l1,@ls),@keyX,@valX,@x) -> insert#3(@l1,@keyX,@ls,@valX,@x) insert#2(nil(),@keyX,@valX,@x) -> ::(tuple#2(::(@valX,nil()),@keyX),nil()) insert#3(tuple#2(@vals1,@key1),@keyX,@ls,@valX,@x) -> insert#4(#equal(@key1,@keyX) ,@key1 ,@ls ,@valX ,@vals1 ,@x) insert#4(#false(),@key1,@ls,@valX,@vals1,@x) -> ::(tuple#2(@vals1,@key1),insert(@x,@ls)) insert#4(#true(),@key1,@ls,@valX,@vals1,@x) -> ::(tuple#2(::(@valX,@vals1),@key1),@ls) split(@l) -> split#1(@l) split#1(::(@x,@xs)) -> insert(@x,split(@xs)) split#1(nil()) -> nil() sortAll#(@l) -> c_17(sortAll#1#(@l)) sortAll#1#(::(@x,@xs)) -> c_18(sortAll#2#(@x,@xs)) sortAll#2#(tuple#2(@vals,@key),@xs) -> c_20(sortAll#(@xs)) split#(@l) -> c_21(split#1#(@l)) split#1#(::(@x,@xs)) -> c_22(split#(@xs)) splitAndSort#(@l) -> c_24(sortAll#(split(@l)),split#(@l)) ** Step 7.a:3: WeightGap WORST_CASE(?,O(n^1)) + Considered Problem: - Strict DPs: sortAll#(@l) -> c_17(sortAll#1#(@l)) sortAll#1#(::(@x,@xs)) -> c_18(sortAll#2#(@x,@xs)) sortAll#2#(tuple#2(@vals,@key),@xs) -> c_20(sortAll#(@xs)) split#(@l) -> c_21(split#1#(@l)) split#1#(::(@x,@xs)) -> c_22(split#(@xs)) splitAndSort#(@l) -> c_24(sortAll#(split(@l)),split#(@l)) - Weak TRS: #and(#false(),#false()) -> #false() #and(#false(),#true()) -> #false() #and(#true(),#false()) -> #false() #and(#true(),#true()) -> #true() #eq(#0(),#0()) -> #true() #eq(#0(),#neg(@y)) -> #false() #eq(#0(),#pos(@y)) -> #false() #eq(#0(),#s(@y)) -> #false() #eq(#neg(@x),#0()) -> #false() #eq(#neg(@x),#neg(@y)) -> #eq(@x,@y) #eq(#neg(@x),#pos(@y)) -> #false() #eq(#pos(@x),#0()) -> #false() #eq(#pos(@x),#neg(@y)) -> #false() #eq(#pos(@x),#pos(@y)) -> #eq(@x,@y) #eq(#s(@x),#0()) -> #false() #eq(#s(@x),#s(@y)) -> #eq(@x,@y) #eq(::(@x_1,@x_2),::(@y_1,@y_2)) -> #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #eq(::(@x_1,@x_2),nil()) -> #false() #eq(::(@x_1,@x_2),tuple#2(@y_1,@y_2)) -> #false() #eq(nil(),::(@y_1,@y_2)) -> #false() #eq(nil(),nil()) -> #true() #eq(nil(),tuple#2(@y_1,@y_2)) -> #false() #eq(tuple#2(@x_1,@x_2),::(@y_1,@y_2)) -> #false() #eq(tuple#2(@x_1,@x_2),nil()) -> #false() #eq(tuple#2(@x_1,@x_2),tuple#2(@y_1,@y_2)) -> #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #equal(@x,@y) -> #eq(@x,@y) insert(@x,@l) -> insert#1(@x,@l,@x) insert#1(tuple#2(@valX,@keyX),@l,@x) -> insert#2(@l,@keyX,@valX,@x) insert#2(::(@l1,@ls),@keyX,@valX,@x) -> insert#3(@l1,@keyX,@ls,@valX,@x) insert#2(nil(),@keyX,@valX,@x) -> ::(tuple#2(::(@valX,nil()),@keyX),nil()) insert#3(tuple#2(@vals1,@key1),@keyX,@ls,@valX,@x) -> insert#4(#equal(@key1,@keyX) ,@key1 ,@ls ,@valX ,@vals1 ,@x) insert#4(#false(),@key1,@ls,@valX,@vals1,@x) -> ::(tuple#2(@vals1,@key1),insert(@x,@ls)) insert#4(#true(),@key1,@ls,@valX,@vals1,@x) -> ::(tuple#2(::(@valX,@vals1),@key1),@ls) split(@l) -> split#1(@l) split#1(::(@x,@xs)) -> insert(@x,split(@xs)) split#1(nil()) -> nil() - Signature: {#and/2,#ckgt/1,#compare/2,#eq/2,#equal/2,#greater/2,append/2,append#1/2,insert/2,insert#1/3,insert#2/4 ,insert#3/5,insert#4/6,quicksort/1,quicksort#1/1,quicksort#2/2,sortAll/1,sortAll#1/1,sortAll#2/2,split/1 ,split#1/1,splitAndSort/1,splitqs/2,splitqs#1/2,splitqs#2/3,splitqs#3/4,#and#/2,#ckgt#/1,#compare#/2,#eq#/2 ,#equal#/2,#greater#/2,append#/2,append#1#/2,insert#/2,insert#1#/3,insert#2#/4,insert#3#/5,insert#4#/6 ,quicksort#/1,quicksort#1#/1,quicksort#2#/2,sortAll#/1,sortAll#1#/1,sortAll#2#/2,split#/1,split#1#/1 ,splitAndSort#/1,splitqs#/2,splitqs#1#/2,splitqs#2#/3,splitqs#3#/4} / {#0/0,#EQ/0,#GT/0,#LT/0,#false/0 ,#neg/1,#pos/1,#s/1,#true/0,::/2,nil/0,tuple#2/2,c_1/1,c_2/2,c_3/1,c_4/1,c_5/0,c_6/1,c_7/1,c_8/1,c_9/0 ,c_10/1,c_11/1,c_12/0,c_13/1,c_14/2,c_15/0,c_16/3,c_17/1,c_18/1,c_19/0,c_20/1,c_21/1,c_22/1,c_23/0,c_24/2 ,c_25/1,c_26/1,c_27/0,c_28/2,c_29/0,c_30/0,c_31/0,c_32/0,c_33/0,c_34/0,c_35/0,c_36/0,c_37/0,c_38/0,c_39/0 ,c_40/0,c_41/0,c_42/0,c_43/1,c_44/0,c_45/0,c_46/0,c_47/1,c_48/0,c_49/1,c_50/0,c_51/0,c_52/0,c_53/0,c_54/0 ,c_55/1,c_56/0,c_57/0,c_58/0,c_59/1,c_60/0,c_61/1,c_62/3,c_63/0,c_64/0,c_65/0,c_66/0,c_67/0,c_68/0,c_69/0 ,c_70/3} - Obligation: innermost runtime complexity wrt. defined symbols {#and#,#ckgt#,#compare#,#eq#,#equal#,#greater#,append# ,append#1#,insert#,insert#1#,insert#2#,insert#3#,insert#4#,quicksort#,quicksort#1#,quicksort#2#,sortAll# ,sortAll#1#,sortAll#2#,split#,split#1#,splitAndSort#,splitqs#,splitqs#1#,splitqs#2# ,splitqs#3#} and constructors {#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} + Applied Processor: WeightGap {wgDimension = 1, wgDegree = 1, wgKind = Algebraic, wgUArgs = UArgs, wgOn = WgOnAny} + Details: The weightgap principle applies using the following constant growth matrix-interpretation: We apply a matrix interpretation of kind constructor based matrix interpretation: The following argument positions are considered usable: uargs(#and) = {1,2}, uargs(::) = {2}, uargs(insert) = {2}, uargs(insert#4) = {1}, uargs(sortAll#) = {1}, uargs(c_17) = {1}, uargs(c_18) = {1}, uargs(c_20) = {1}, uargs(c_21) = {1}, uargs(c_22) = {1}, uargs(c_24) = {1,2} Following symbols are considered usable: all TcT has computed the following interpretation: p(#0) = [0] p(#EQ) = [0] p(#GT) = [0] p(#LT) = [0] p(#and) = [1] x1 + [1] x2 + [0] p(#ckgt) = [0] p(#compare) = [0] p(#eq) = [0] p(#equal) = [0] p(#false) = [0] p(#greater) = [0] p(#neg) = [1] x1 + [0] p(#pos) = [0] p(#s) = [1] x1 + [0] p(#true) = [0] p(::) = [1] x2 + [0] p(append) = [0] p(append#1) = [0] p(insert) = [1] x2 + [0] p(insert#1) = [1] x2 + [0] p(insert#2) = [1] x1 + [0] p(insert#3) = [1] x3 + [0] p(insert#4) = [1] x1 + [1] x3 + [0] p(nil) = [0] p(quicksort) = [0] p(quicksort#1) = [0] p(quicksort#2) = [0] p(sortAll) = [0] p(sortAll#1) = [0] p(sortAll#2) = [0] p(split) = [0] p(split#1) = [0] p(splitAndSort) = [0] p(splitqs) = [0] p(splitqs#1) = [0] p(splitqs#2) = [0] p(splitqs#3) = [0] p(tuple#2) = [1] x1 + [1] x2 + [0] p(#and#) = [0] p(#ckgt#) = [0] p(#compare#) = [0] p(#eq#) = [0] p(#equal#) = [0] p(#greater#) = [0] p(append#) = [0] p(append#1#) = [0] p(insert#) = [0] p(insert#1#) = [0] p(insert#2#) = [0] p(insert#3#) = [0] p(insert#4#) = [0] p(quicksort#) = [0] p(quicksort#1#) = [0] p(quicksort#2#) = [0] p(sortAll#) = [1] x1 + [0] p(sortAll#1#) = [1] x1 + [0] p(sortAll#2#) = [1] x2 + [3] p(split#) = [0] p(split#1#) = [0] p(splitAndSort#) = [1] p(splitqs#) = [0] p(splitqs#1#) = [0] p(splitqs#2#) = [0] p(splitqs#3#) = [0] p(c_1) = [0] p(c_2) = [0] p(c_3) = [0] p(c_4) = [0] p(c_5) = [0] p(c_6) = [0] p(c_7) = [0] p(c_8) = [0] p(c_9) = [0] p(c_10) = [0] p(c_11) = [0] p(c_12) = [0] p(c_13) = [0] p(c_14) = [0] p(c_15) = [0] p(c_16) = [0] p(c_17) = [1] x1 + [0] p(c_18) = [1] x1 + [0] p(c_19) = [0] p(c_20) = [1] x1 + [0] p(c_21) = [1] x1 + [0] p(c_22) = [1] x1 + [0] p(c_23) = [0] p(c_24) = [1] x1 + [1] x2 + [0] p(c_25) = [0] p(c_26) = [0] p(c_27) = [0] p(c_28) = [0] p(c_29) = [0] p(c_30) = [0] p(c_31) = [0] p(c_32) = [0] p(c_33) = [0] p(c_34) = [0] p(c_35) = [0] p(c_36) = [0] p(c_37) = [0] p(c_38) = [0] p(c_39) = [0] p(c_40) = [0] p(c_41) = [0] p(c_42) = [0] p(c_43) = [0] p(c_44) = [0] p(c_45) = [0] p(c_46) = [0] p(c_47) = [0] p(c_48) = [0] p(c_49) = [0] p(c_50) = [0] p(c_51) = [0] p(c_52) = [0] p(c_53) = [0] p(c_54) = [0] p(c_55) = [0] p(c_56) = [0] p(c_57) = [0] p(c_58) = [0] p(c_59) = [0] p(c_60) = [0] p(c_61) = [0] p(c_62) = [0] p(c_63) = [0] p(c_64) = [0] p(c_65) = [0] p(c_66) = [0] p(c_67) = [0] p(c_68) = [0] p(c_69) = [0] p(c_70) = [0] Following rules are strictly oriented: sortAll#2#(tuple#2(@vals,@key),@xs) = [1] @xs + [3] > [1] @xs + [0] = c_20(sortAll#(@xs)) splitAndSort#(@l) = [1] > [0] = c_24(sortAll#(split(@l)),split#(@l)) Following rules are (at-least) weakly oriented: sortAll#(@l) = [1] @l + [0] >= [1] @l + [0] = c_17(sortAll#1#(@l)) sortAll#1#(::(@x,@xs)) = [1] @xs + [0] >= [1] @xs + [3] = c_18(sortAll#2#(@x,@xs)) split#(@l) = [0] >= [0] = c_21(split#1#(@l)) split#1#(::(@x,@xs)) = [0] >= [0] = c_22(split#(@xs)) #and(#false(),#false()) = [0] >= [0] = #false() #and(#false(),#true()) = [0] >= [0] = #false() #and(#true(),#false()) = [0] >= [0] = #false() #and(#true(),#true()) = [0] >= [0] = #true() #eq(#0(),#0()) = [0] >= [0] = #true() #eq(#0(),#neg(@y)) = [0] >= [0] = #false() #eq(#0(),#pos(@y)) = [0] >= [0] = #false() #eq(#0(),#s(@y)) = [0] >= [0] = #false() #eq(#neg(@x),#0()) = [0] >= [0] = #false() #eq(#neg(@x),#neg(@y)) = [0] >= [0] = #eq(@x,@y) #eq(#neg(@x),#pos(@y)) = [0] >= [0] = #false() #eq(#pos(@x),#0()) = [0] >= [0] = #false() #eq(#pos(@x),#neg(@y)) = [0] >= [0] = #false() #eq(#pos(@x),#pos(@y)) = [0] >= [0] = #eq(@x,@y) #eq(#s(@x),#0()) = [0] >= [0] = #false() #eq(#s(@x),#s(@y)) = [0] >= [0] = #eq(@x,@y) #eq(::(@x_1,@x_2),::(@y_1,@y_2)) = [0] >= [0] = #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #eq(::(@x_1,@x_2),nil()) = [0] >= [0] = #false() #eq(::(@x_1,@x_2),tuple#2(@y_1,@y_2)) = [0] >= [0] = #false() #eq(nil(),::(@y_1,@y_2)) = [0] >= [0] = #false() #eq(nil(),nil()) = [0] >= [0] = #true() #eq(nil(),tuple#2(@y_1,@y_2)) = [0] >= [0] = #false() #eq(tuple#2(@x_1,@x_2),::(@y_1,@y_2)) = [0] >= [0] = #false() #eq(tuple#2(@x_1,@x_2),nil()) = [0] >= [0] = #false() #eq(tuple#2(@x_1,@x_2),tuple#2(@y_1,@y_2)) = [0] >= [0] = #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #equal(@x,@y) = [0] >= [0] = #eq(@x,@y) insert(@x,@l) = [1] @l + [0] >= [1] @l + [0] = insert#1(@x,@l,@x) insert#1(tuple#2(@valX,@keyX),@l,@x) = [1] @l + [0] >= [1] @l + [0] = insert#2(@l,@keyX,@valX,@x) insert#2(::(@l1,@ls),@keyX,@valX,@x) = [1] @ls + [0] >= [1] @ls + [0] = insert#3(@l1,@keyX,@ls,@valX,@x) insert#2(nil(),@keyX,@valX,@x) = [0] >= [0] = ::(tuple#2(::(@valX,nil()),@keyX),nil()) insert#3(tuple#2(@vals1,@key1),@keyX,@ls,@valX,@x) = [1] @ls + [0] >= [1] @ls + [0] = insert#4(#equal(@key1,@keyX),@key1,@ls,@valX,@vals1,@x) insert#4(#false(),@key1,@ls,@valX,@vals1,@x) = [1] @ls + [0] >= [1] @ls + [0] = ::(tuple#2(@vals1,@key1),insert(@x,@ls)) insert#4(#true(),@key1,@ls,@valX,@vals1,@x) = [1] @ls + [0] >= [1] @ls + [0] = ::(tuple#2(::(@valX,@vals1),@key1),@ls) split(@l) = [0] >= [0] = split#1(@l) split#1(::(@x,@xs)) = [0] >= [0] = insert(@x,split(@xs)) split#1(nil()) = [0] >= [0] = nil() Further, it can be verified that all rules not oriented are covered by the weightgap condition. ** Step 7.a:4: WeightGap WORST_CASE(?,O(n^1)) + Considered Problem: - Strict DPs: sortAll#(@l) -> c_17(sortAll#1#(@l)) sortAll#1#(::(@x,@xs)) -> c_18(sortAll#2#(@x,@xs)) split#(@l) -> c_21(split#1#(@l)) split#1#(::(@x,@xs)) -> c_22(split#(@xs)) - Weak DPs: sortAll#2#(tuple#2(@vals,@key),@xs) -> c_20(sortAll#(@xs)) splitAndSort#(@l) -> c_24(sortAll#(split(@l)),split#(@l)) - Weak TRS: #and(#false(),#false()) -> #false() #and(#false(),#true()) -> #false() #and(#true(),#false()) -> #false() #and(#true(),#true()) -> #true() #eq(#0(),#0()) -> #true() #eq(#0(),#neg(@y)) -> #false() #eq(#0(),#pos(@y)) -> #false() #eq(#0(),#s(@y)) -> #false() #eq(#neg(@x),#0()) -> #false() #eq(#neg(@x),#neg(@y)) -> #eq(@x,@y) #eq(#neg(@x),#pos(@y)) -> #false() #eq(#pos(@x),#0()) -> #false() #eq(#pos(@x),#neg(@y)) -> #false() #eq(#pos(@x),#pos(@y)) -> #eq(@x,@y) #eq(#s(@x),#0()) -> #false() #eq(#s(@x),#s(@y)) -> #eq(@x,@y) #eq(::(@x_1,@x_2),::(@y_1,@y_2)) -> #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #eq(::(@x_1,@x_2),nil()) -> #false() #eq(::(@x_1,@x_2),tuple#2(@y_1,@y_2)) -> #false() #eq(nil(),::(@y_1,@y_2)) -> #false() #eq(nil(),nil()) -> #true() #eq(nil(),tuple#2(@y_1,@y_2)) -> #false() #eq(tuple#2(@x_1,@x_2),::(@y_1,@y_2)) -> #false() #eq(tuple#2(@x_1,@x_2),nil()) -> #false() #eq(tuple#2(@x_1,@x_2),tuple#2(@y_1,@y_2)) -> #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #equal(@x,@y) -> #eq(@x,@y) insert(@x,@l) -> insert#1(@x,@l,@x) insert#1(tuple#2(@valX,@keyX),@l,@x) -> insert#2(@l,@keyX,@valX,@x) insert#2(::(@l1,@ls),@keyX,@valX,@x) -> insert#3(@l1,@keyX,@ls,@valX,@x) insert#2(nil(),@keyX,@valX,@x) -> ::(tuple#2(::(@valX,nil()),@keyX),nil()) insert#3(tuple#2(@vals1,@key1),@keyX,@ls,@valX,@x) -> insert#4(#equal(@key1,@keyX) ,@key1 ,@ls ,@valX ,@vals1 ,@x) insert#4(#false(),@key1,@ls,@valX,@vals1,@x) -> ::(tuple#2(@vals1,@key1),insert(@x,@ls)) insert#4(#true(),@key1,@ls,@valX,@vals1,@x) -> ::(tuple#2(::(@valX,@vals1),@key1),@ls) split(@l) -> split#1(@l) split#1(::(@x,@xs)) -> insert(@x,split(@xs)) split#1(nil()) -> nil() - Signature: {#and/2,#ckgt/1,#compare/2,#eq/2,#equal/2,#greater/2,append/2,append#1/2,insert/2,insert#1/3,insert#2/4 ,insert#3/5,insert#4/6,quicksort/1,quicksort#1/1,quicksort#2/2,sortAll/1,sortAll#1/1,sortAll#2/2,split/1 ,split#1/1,splitAndSort/1,splitqs/2,splitqs#1/2,splitqs#2/3,splitqs#3/4,#and#/2,#ckgt#/1,#compare#/2,#eq#/2 ,#equal#/2,#greater#/2,append#/2,append#1#/2,insert#/2,insert#1#/3,insert#2#/4,insert#3#/5,insert#4#/6 ,quicksort#/1,quicksort#1#/1,quicksort#2#/2,sortAll#/1,sortAll#1#/1,sortAll#2#/2,split#/1,split#1#/1 ,splitAndSort#/1,splitqs#/2,splitqs#1#/2,splitqs#2#/3,splitqs#3#/4} / {#0/0,#EQ/0,#GT/0,#LT/0,#false/0 ,#neg/1,#pos/1,#s/1,#true/0,::/2,nil/0,tuple#2/2,c_1/1,c_2/2,c_3/1,c_4/1,c_5/0,c_6/1,c_7/1,c_8/1,c_9/0 ,c_10/1,c_11/1,c_12/0,c_13/1,c_14/2,c_15/0,c_16/3,c_17/1,c_18/1,c_19/0,c_20/1,c_21/1,c_22/1,c_23/0,c_24/2 ,c_25/1,c_26/1,c_27/0,c_28/2,c_29/0,c_30/0,c_31/0,c_32/0,c_33/0,c_34/0,c_35/0,c_36/0,c_37/0,c_38/0,c_39/0 ,c_40/0,c_41/0,c_42/0,c_43/1,c_44/0,c_45/0,c_46/0,c_47/1,c_48/0,c_49/1,c_50/0,c_51/0,c_52/0,c_53/0,c_54/0 ,c_55/1,c_56/0,c_57/0,c_58/0,c_59/1,c_60/0,c_61/1,c_62/3,c_63/0,c_64/0,c_65/0,c_66/0,c_67/0,c_68/0,c_69/0 ,c_70/3} - Obligation: innermost runtime complexity wrt. defined symbols {#and#,#ckgt#,#compare#,#eq#,#equal#,#greater#,append# ,append#1#,insert#,insert#1#,insert#2#,insert#3#,insert#4#,quicksort#,quicksort#1#,quicksort#2#,sortAll# ,sortAll#1#,sortAll#2#,split#,split#1#,splitAndSort#,splitqs#,splitqs#1#,splitqs#2# ,splitqs#3#} and constructors {#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} + Applied Processor: WeightGap {wgDimension = 1, wgDegree = 1, wgKind = Algebraic, wgUArgs = UArgs, wgOn = WgOnAny} + Details: The weightgap principle applies using the following constant growth matrix-interpretation: We apply a matrix interpretation of kind constructor based matrix interpretation: The following argument positions are considered usable: uargs(#and) = {1,2}, uargs(::) = {2}, uargs(insert) = {2}, uargs(insert#4) = {1}, uargs(sortAll#) = {1}, uargs(c_17) = {1}, uargs(c_18) = {1}, uargs(c_20) = {1}, uargs(c_21) = {1}, uargs(c_22) = {1}, uargs(c_24) = {1,2} Following symbols are considered usable: all TcT has computed the following interpretation: p(#0) = [0] p(#EQ) = [0] p(#GT) = [0] p(#LT) = [0] p(#and) = [1] x1 + [1] x2 + [0] p(#ckgt) = [0] p(#compare) = [0] p(#eq) = [0] p(#equal) = [0] p(#false) = [0] p(#greater) = [0] p(#neg) = [1] x1 + [0] p(#pos) = [1] x1 + [0] p(#s) = [1] x1 + [0] p(#true) = [0] p(::) = [1] x2 + [0] p(append) = [0] p(append#1) = [0] p(insert) = [1] x2 + [0] p(insert#1) = [1] x2 + [0] p(insert#2) = [1] x1 + [0] p(insert#3) = [1] x3 + [0] p(insert#4) = [1] x1 + [1] x3 + [0] p(nil) = [0] p(quicksort) = [0] p(quicksort#1) = [0] p(quicksort#2) = [0] p(sortAll) = [0] p(sortAll#1) = [0] p(sortAll#2) = [0] p(split) = [0] p(split#1) = [0] p(splitAndSort) = [0] p(splitqs) = [0] p(splitqs#1) = [0] p(splitqs#2) = [0] p(splitqs#3) = [0] p(tuple#2) = [1] x1 + [1] x2 + [0] p(#and#) = [0] p(#ckgt#) = [0] p(#compare#) = [0] p(#eq#) = [0] p(#equal#) = [0] p(#greater#) = [0] p(append#) = [0] p(append#1#) = [0] p(insert#) = [0] p(insert#1#) = [0] p(insert#2#) = [0] p(insert#3#) = [0] p(insert#4#) = [0] p(quicksort#) = [0] p(quicksort#1#) = [0] p(quicksort#2#) = [0] p(sortAll#) = [1] x1 + [6] p(sortAll#1#) = [1] x1 + [7] p(sortAll#2#) = [1] x2 + [7] p(split#) = [0] p(split#1#) = [1] p(splitAndSort#) = [1] x1 + [7] p(splitqs#) = [0] p(splitqs#1#) = [0] p(splitqs#2#) = [0] p(splitqs#3#) = [0] p(c_1) = [0] p(c_2) = [0] p(c_3) = [0] p(c_4) = [0] p(c_5) = [0] p(c_6) = [0] p(c_7) = [0] p(c_8) = [0] p(c_9) = [0] p(c_10) = [0] p(c_11) = [0] p(c_12) = [0] p(c_13) = [0] p(c_14) = [0] p(c_15) = [0] p(c_16) = [0] p(c_17) = [1] x1 + [0] p(c_18) = [1] x1 + [0] p(c_19) = [0] p(c_20) = [1] x1 + [1] p(c_21) = [1] x1 + [0] p(c_22) = [1] x1 + [0] p(c_23) = [0] p(c_24) = [1] x1 + [1] x2 + [0] p(c_25) = [0] p(c_26) = [0] p(c_27) = [0] p(c_28) = [0] p(c_29) = [0] p(c_30) = [0] p(c_31) = [0] p(c_32) = [0] p(c_33) = [0] p(c_34) = [0] p(c_35) = [0] p(c_36) = [0] p(c_37) = [0] p(c_38) = [0] p(c_39) = [0] p(c_40) = [0] p(c_41) = [0] p(c_42) = [0] p(c_43) = [0] p(c_44) = [0] p(c_45) = [0] p(c_46) = [0] p(c_47) = [0] p(c_48) = [0] p(c_49) = [0] p(c_50) = [0] p(c_51) = [0] p(c_52) = [0] p(c_53) = [0] p(c_54) = [0] p(c_55) = [0] p(c_56) = [0] p(c_57) = [0] p(c_58) = [0] p(c_59) = [1] x1 + [1] p(c_60) = [0] p(c_61) = [2] x1 + [0] p(c_62) = [1] x2 + [1] x3 + [2] p(c_63) = [2] p(c_64) = [2] p(c_65) = [0] p(c_66) = [0] p(c_67) = [0] p(c_68) = [2] p(c_69) = [1] p(c_70) = [1] x3 + [1] Following rules are strictly oriented: split#1#(::(@x,@xs)) = [1] > [0] = c_22(split#(@xs)) Following rules are (at-least) weakly oriented: sortAll#(@l) = [1] @l + [6] >= [1] @l + [7] = c_17(sortAll#1#(@l)) sortAll#1#(::(@x,@xs)) = [1] @xs + [7] >= [1] @xs + [7] = c_18(sortAll#2#(@x,@xs)) sortAll#2#(tuple#2(@vals,@key),@xs) = [1] @xs + [7] >= [1] @xs + [7] = c_20(sortAll#(@xs)) split#(@l) = [0] >= [1] = c_21(split#1#(@l)) splitAndSort#(@l) = [1] @l + [7] >= [6] = c_24(sortAll#(split(@l)),split#(@l)) #and(#false(),#false()) = [0] >= [0] = #false() #and(#false(),#true()) = [0] >= [0] = #false() #and(#true(),#false()) = [0] >= [0] = #false() #and(#true(),#true()) = [0] >= [0] = #true() #eq(#0(),#0()) = [0] >= [0] = #true() #eq(#0(),#neg(@y)) = [0] >= [0] = #false() #eq(#0(),#pos(@y)) = [0] >= [0] = #false() #eq(#0(),#s(@y)) = [0] >= [0] = #false() #eq(#neg(@x),#0()) = [0] >= [0] = #false() #eq(#neg(@x),#neg(@y)) = [0] >= [0] = #eq(@x,@y) #eq(#neg(@x),#pos(@y)) = [0] >= [0] = #false() #eq(#pos(@x),#0()) = [0] >= [0] = #false() #eq(#pos(@x),#neg(@y)) = [0] >= [0] = #false() #eq(#pos(@x),#pos(@y)) = [0] >= [0] = #eq(@x,@y) #eq(#s(@x),#0()) = [0] >= [0] = #false() #eq(#s(@x),#s(@y)) = [0] >= [0] = #eq(@x,@y) #eq(::(@x_1,@x_2),::(@y_1,@y_2)) = [0] >= [0] = #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #eq(::(@x_1,@x_2),nil()) = [0] >= [0] = #false() #eq(::(@x_1,@x_2),tuple#2(@y_1,@y_2)) = [0] >= [0] = #false() #eq(nil(),::(@y_1,@y_2)) = [0] >= [0] = #false() #eq(nil(),nil()) = [0] >= [0] = #true() #eq(nil(),tuple#2(@y_1,@y_2)) = [0] >= [0] = #false() #eq(tuple#2(@x_1,@x_2),::(@y_1,@y_2)) = [0] >= [0] = #false() #eq(tuple#2(@x_1,@x_2),nil()) = [0] >= [0] = #false() #eq(tuple#2(@x_1,@x_2),tuple#2(@y_1,@y_2)) = [0] >= [0] = #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #equal(@x,@y) = [0] >= [0] = #eq(@x,@y) insert(@x,@l) = [1] @l + [0] >= [1] @l + [0] = insert#1(@x,@l,@x) insert#1(tuple#2(@valX,@keyX),@l,@x) = [1] @l + [0] >= [1] @l + [0] = insert#2(@l,@keyX,@valX,@x) insert#2(::(@l1,@ls),@keyX,@valX,@x) = [1] @ls + [0] >= [1] @ls + [0] = insert#3(@l1,@keyX,@ls,@valX,@x) insert#2(nil(),@keyX,@valX,@x) = [0] >= [0] = ::(tuple#2(::(@valX,nil()),@keyX),nil()) insert#3(tuple#2(@vals1,@key1),@keyX,@ls,@valX,@x) = [1] @ls + [0] >= [1] @ls + [0] = insert#4(#equal(@key1,@keyX),@key1,@ls,@valX,@vals1,@x) insert#4(#false(),@key1,@ls,@valX,@vals1,@x) = [1] @ls + [0] >= [1] @ls + [0] = ::(tuple#2(@vals1,@key1),insert(@x,@ls)) insert#4(#true(),@key1,@ls,@valX,@vals1,@x) = [1] @ls + [0] >= [1] @ls + [0] = ::(tuple#2(::(@valX,@vals1),@key1),@ls) split(@l) = [0] >= [0] = split#1(@l) split#1(::(@x,@xs)) = [0] >= [0] = insert(@x,split(@xs)) split#1(nil()) = [0] >= [0] = nil() Further, it can be verified that all rules not oriented are covered by the weightgap condition. ** Step 7.a:5: WeightGap WORST_CASE(?,O(n^1)) + Considered Problem: - Strict DPs: sortAll#(@l) -> c_17(sortAll#1#(@l)) sortAll#1#(::(@x,@xs)) -> c_18(sortAll#2#(@x,@xs)) split#(@l) -> c_21(split#1#(@l)) - Weak DPs: sortAll#2#(tuple#2(@vals,@key),@xs) -> c_20(sortAll#(@xs)) split#1#(::(@x,@xs)) -> c_22(split#(@xs)) splitAndSort#(@l) -> c_24(sortAll#(split(@l)),split#(@l)) - Weak TRS: #and(#false(),#false()) -> #false() #and(#false(),#true()) -> #false() #and(#true(),#false()) -> #false() #and(#true(),#true()) -> #true() #eq(#0(),#0()) -> #true() #eq(#0(),#neg(@y)) -> #false() #eq(#0(),#pos(@y)) -> #false() #eq(#0(),#s(@y)) -> #false() #eq(#neg(@x),#0()) -> #false() #eq(#neg(@x),#neg(@y)) -> #eq(@x,@y) #eq(#neg(@x),#pos(@y)) -> #false() #eq(#pos(@x),#0()) -> #false() #eq(#pos(@x),#neg(@y)) -> #false() #eq(#pos(@x),#pos(@y)) -> #eq(@x,@y) #eq(#s(@x),#0()) -> #false() #eq(#s(@x),#s(@y)) -> #eq(@x,@y) #eq(::(@x_1,@x_2),::(@y_1,@y_2)) -> #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #eq(::(@x_1,@x_2),nil()) -> #false() #eq(::(@x_1,@x_2),tuple#2(@y_1,@y_2)) -> #false() #eq(nil(),::(@y_1,@y_2)) -> #false() #eq(nil(),nil()) -> #true() #eq(nil(),tuple#2(@y_1,@y_2)) -> #false() #eq(tuple#2(@x_1,@x_2),::(@y_1,@y_2)) -> #false() #eq(tuple#2(@x_1,@x_2),nil()) -> #false() #eq(tuple#2(@x_1,@x_2),tuple#2(@y_1,@y_2)) -> #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #equal(@x,@y) -> #eq(@x,@y) insert(@x,@l) -> insert#1(@x,@l,@x) insert#1(tuple#2(@valX,@keyX),@l,@x) -> insert#2(@l,@keyX,@valX,@x) insert#2(::(@l1,@ls),@keyX,@valX,@x) -> insert#3(@l1,@keyX,@ls,@valX,@x) insert#2(nil(),@keyX,@valX,@x) -> ::(tuple#2(::(@valX,nil()),@keyX),nil()) insert#3(tuple#2(@vals1,@key1),@keyX,@ls,@valX,@x) -> insert#4(#equal(@key1,@keyX) ,@key1 ,@ls ,@valX ,@vals1 ,@x) insert#4(#false(),@key1,@ls,@valX,@vals1,@x) -> ::(tuple#2(@vals1,@key1),insert(@x,@ls)) insert#4(#true(),@key1,@ls,@valX,@vals1,@x) -> ::(tuple#2(::(@valX,@vals1),@key1),@ls) split(@l) -> split#1(@l) split#1(::(@x,@xs)) -> insert(@x,split(@xs)) split#1(nil()) -> nil() - Signature: {#and/2,#ckgt/1,#compare/2,#eq/2,#equal/2,#greater/2,append/2,append#1/2,insert/2,insert#1/3,insert#2/4 ,insert#3/5,insert#4/6,quicksort/1,quicksort#1/1,quicksort#2/2,sortAll/1,sortAll#1/1,sortAll#2/2,split/1 ,split#1/1,splitAndSort/1,splitqs/2,splitqs#1/2,splitqs#2/3,splitqs#3/4,#and#/2,#ckgt#/1,#compare#/2,#eq#/2 ,#equal#/2,#greater#/2,append#/2,append#1#/2,insert#/2,insert#1#/3,insert#2#/4,insert#3#/5,insert#4#/6 ,quicksort#/1,quicksort#1#/1,quicksort#2#/2,sortAll#/1,sortAll#1#/1,sortAll#2#/2,split#/1,split#1#/1 ,splitAndSort#/1,splitqs#/2,splitqs#1#/2,splitqs#2#/3,splitqs#3#/4} / {#0/0,#EQ/0,#GT/0,#LT/0,#false/0 ,#neg/1,#pos/1,#s/1,#true/0,::/2,nil/0,tuple#2/2,c_1/1,c_2/2,c_3/1,c_4/1,c_5/0,c_6/1,c_7/1,c_8/1,c_9/0 ,c_10/1,c_11/1,c_12/0,c_13/1,c_14/2,c_15/0,c_16/3,c_17/1,c_18/1,c_19/0,c_20/1,c_21/1,c_22/1,c_23/0,c_24/2 ,c_25/1,c_26/1,c_27/0,c_28/2,c_29/0,c_30/0,c_31/0,c_32/0,c_33/0,c_34/0,c_35/0,c_36/0,c_37/0,c_38/0,c_39/0 ,c_40/0,c_41/0,c_42/0,c_43/1,c_44/0,c_45/0,c_46/0,c_47/1,c_48/0,c_49/1,c_50/0,c_51/0,c_52/0,c_53/0,c_54/0 ,c_55/1,c_56/0,c_57/0,c_58/0,c_59/1,c_60/0,c_61/1,c_62/3,c_63/0,c_64/0,c_65/0,c_66/0,c_67/0,c_68/0,c_69/0 ,c_70/3} - Obligation: innermost runtime complexity wrt. defined symbols {#and#,#ckgt#,#compare#,#eq#,#equal#,#greater#,append# ,append#1#,insert#,insert#1#,insert#2#,insert#3#,insert#4#,quicksort#,quicksort#1#,quicksort#2#,sortAll# ,sortAll#1#,sortAll#2#,split#,split#1#,splitAndSort#,splitqs#,splitqs#1#,splitqs#2# ,splitqs#3#} and constructors {#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} + Applied Processor: WeightGap {wgDimension = 1, wgDegree = 1, wgKind = Algebraic, wgUArgs = UArgs, wgOn = WgOnAny} + Details: The weightgap principle applies using the following constant growth matrix-interpretation: We apply a matrix interpretation of kind constructor based matrix interpretation: The following argument positions are considered usable: uargs(#and) = {1,2}, uargs(::) = {2}, uargs(insert) = {2}, uargs(insert#4) = {1}, uargs(sortAll#) = {1}, uargs(c_17) = {1}, uargs(c_18) = {1}, uargs(c_20) = {1}, uargs(c_21) = {1}, uargs(c_22) = {1}, uargs(c_24) = {1,2} Following symbols are considered usable: all TcT has computed the following interpretation: p(#0) = [0] p(#EQ) = [0] p(#GT) = [0] p(#LT) = [0] p(#and) = [1] x1 + [1] x2 + [0] p(#ckgt) = [0] p(#compare) = [0] p(#eq) = [0] p(#equal) = [0] p(#false) = [0] p(#greater) = [0] p(#neg) = [1] x1 + [0] p(#pos) = [1] x1 + [0] p(#s) = [1] x1 + [0] p(#true) = [0] p(::) = [1] x2 + [0] p(append) = [0] p(append#1) = [0] p(insert) = [1] x2 + [0] p(insert#1) = [1] x2 + [0] p(insert#2) = [1] x1 + [0] p(insert#3) = [1] x3 + [0] p(insert#4) = [1] x1 + [1] x3 + [0] p(nil) = [0] p(quicksort) = [0] p(quicksort#1) = [0] p(quicksort#2) = [0] p(sortAll) = [0] p(sortAll#1) = [0] p(sortAll#2) = [0] p(split) = [0] p(split#1) = [0] p(splitAndSort) = [0] p(splitqs) = [0] p(splitqs#1) = [0] p(splitqs#2) = [0] p(splitqs#3) = [0] p(tuple#2) = [0] p(#and#) = [0] p(#ckgt#) = [0] p(#compare#) = [0] p(#eq#) = [1] x2 + [0] p(#equal#) = [0] p(#greater#) = [0] p(append#) = [0] p(append#1#) = [0] p(insert#) = [0] p(insert#1#) = [0] p(insert#2#) = [0] p(insert#3#) = [0] p(insert#4#) = [0] p(quicksort#) = [0] p(quicksort#1#) = [0] p(quicksort#2#) = [0] p(sortAll#) = [1] x1 + [0] p(sortAll#1#) = [1] x1 + [2] p(sortAll#2#) = [1] x2 + [0] p(split#) = [0] p(split#1#) = [0] p(splitAndSort#) = [1] p(splitqs#) = [0] p(splitqs#1#) = [0] p(splitqs#2#) = [0] p(splitqs#3#) = [0] p(c_1) = [0] p(c_2) = [0] p(c_3) = [0] p(c_4) = [0] p(c_5) = [0] p(c_6) = [0] p(c_7) = [0] p(c_8) = [0] p(c_9) = [0] p(c_10) = [0] p(c_11) = [0] p(c_12) = [0] p(c_13) = [0] p(c_14) = [0] p(c_15) = [0] p(c_16) = [0] p(c_17) = [1] x1 + [0] p(c_18) = [1] x1 + [0] p(c_19) = [0] p(c_20) = [1] x1 + [0] p(c_21) = [1] x1 + [1] p(c_22) = [1] x1 + [0] p(c_23) = [0] p(c_24) = [1] x1 + [1] x2 + [0] p(c_25) = [0] p(c_26) = [0] p(c_27) = [0] p(c_28) = [0] p(c_29) = [0] p(c_30) = [0] p(c_31) = [0] p(c_32) = [0] p(c_33) = [0] p(c_34) = [0] p(c_35) = [0] p(c_36) = [0] p(c_37) = [0] p(c_38) = [0] p(c_39) = [0] p(c_40) = [0] p(c_41) = [0] p(c_42) = [0] p(c_43) = [0] p(c_44) = [0] p(c_45) = [0] p(c_46) = [0] p(c_47) = [0] p(c_48) = [0] p(c_49) = [0] p(c_50) = [0] p(c_51) = [0] p(c_52) = [0] p(c_53) = [0] p(c_54) = [0] p(c_55) = [0] p(c_56) = [0] p(c_57) = [0] p(c_58) = [0] p(c_59) = [0] p(c_60) = [0] p(c_61) = [0] p(c_62) = [0] p(c_63) = [0] p(c_64) = [0] p(c_65) = [0] p(c_66) = [0] p(c_67) = [0] p(c_68) = [0] p(c_69) = [0] p(c_70) = [0] Following rules are strictly oriented: sortAll#1#(::(@x,@xs)) = [1] @xs + [2] > [1] @xs + [0] = c_18(sortAll#2#(@x,@xs)) Following rules are (at-least) weakly oriented: sortAll#(@l) = [1] @l + [0] >= [1] @l + [2] = c_17(sortAll#1#(@l)) sortAll#2#(tuple#2(@vals,@key),@xs) = [1] @xs + [0] >= [1] @xs + [0] = c_20(sortAll#(@xs)) split#(@l) = [0] >= [1] = c_21(split#1#(@l)) split#1#(::(@x,@xs)) = [0] >= [0] = c_22(split#(@xs)) splitAndSort#(@l) = [1] >= [0] = c_24(sortAll#(split(@l)),split#(@l)) #and(#false(),#false()) = [0] >= [0] = #false() #and(#false(),#true()) = [0] >= [0] = #false() #and(#true(),#false()) = [0] >= [0] = #false() #and(#true(),#true()) = [0] >= [0] = #true() #eq(#0(),#0()) = [0] >= [0] = #true() #eq(#0(),#neg(@y)) = [0] >= [0] = #false() #eq(#0(),#pos(@y)) = [0] >= [0] = #false() #eq(#0(),#s(@y)) = [0] >= [0] = #false() #eq(#neg(@x),#0()) = [0] >= [0] = #false() #eq(#neg(@x),#neg(@y)) = [0] >= [0] = #eq(@x,@y) #eq(#neg(@x),#pos(@y)) = [0] >= [0] = #false() #eq(#pos(@x),#0()) = [0] >= [0] = #false() #eq(#pos(@x),#neg(@y)) = [0] >= [0] = #false() #eq(#pos(@x),#pos(@y)) = [0] >= [0] = #eq(@x,@y) #eq(#s(@x),#0()) = [0] >= [0] = #false() #eq(#s(@x),#s(@y)) = [0] >= [0] = #eq(@x,@y) #eq(::(@x_1,@x_2),::(@y_1,@y_2)) = [0] >= [0] = #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #eq(::(@x_1,@x_2),nil()) = [0] >= [0] = #false() #eq(::(@x_1,@x_2),tuple#2(@y_1,@y_2)) = [0] >= [0] = #false() #eq(nil(),::(@y_1,@y_2)) = [0] >= [0] = #false() #eq(nil(),nil()) = [0] >= [0] = #true() #eq(nil(),tuple#2(@y_1,@y_2)) = [0] >= [0] = #false() #eq(tuple#2(@x_1,@x_2),::(@y_1,@y_2)) = [0] >= [0] = #false() #eq(tuple#2(@x_1,@x_2),nil()) = [0] >= [0] = #false() #eq(tuple#2(@x_1,@x_2),tuple#2(@y_1,@y_2)) = [0] >= [0] = #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #equal(@x,@y) = [0] >= [0] = #eq(@x,@y) insert(@x,@l) = [1] @l + [0] >= [1] @l + [0] = insert#1(@x,@l,@x) insert#1(tuple#2(@valX,@keyX),@l,@x) = [1] @l + [0] >= [1] @l + [0] = insert#2(@l,@keyX,@valX,@x) insert#2(::(@l1,@ls),@keyX,@valX,@x) = [1] @ls + [0] >= [1] @ls + [0] = insert#3(@l1,@keyX,@ls,@valX,@x) insert#2(nil(),@keyX,@valX,@x) = [0] >= [0] = ::(tuple#2(::(@valX,nil()),@keyX),nil()) insert#3(tuple#2(@vals1,@key1),@keyX,@ls,@valX,@x) = [1] @ls + [0] >= [1] @ls + [0] = insert#4(#equal(@key1,@keyX),@key1,@ls,@valX,@vals1,@x) insert#4(#false(),@key1,@ls,@valX,@vals1,@x) = [1] @ls + [0] >= [1] @ls + [0] = ::(tuple#2(@vals1,@key1),insert(@x,@ls)) insert#4(#true(),@key1,@ls,@valX,@vals1,@x) = [1] @ls + [0] >= [1] @ls + [0] = ::(tuple#2(::(@valX,@vals1),@key1),@ls) split(@l) = [0] >= [0] = split#1(@l) split#1(::(@x,@xs)) = [0] >= [0] = insert(@x,split(@xs)) split#1(nil()) = [0] >= [0] = nil() Further, it can be verified that all rules not oriented are covered by the weightgap condition. ** Step 7.a:6: WeightGap WORST_CASE(?,O(n^1)) + Considered Problem: - Strict DPs: sortAll#(@l) -> c_17(sortAll#1#(@l)) split#(@l) -> c_21(split#1#(@l)) - Weak DPs: sortAll#1#(::(@x,@xs)) -> c_18(sortAll#2#(@x,@xs)) sortAll#2#(tuple#2(@vals,@key),@xs) -> c_20(sortAll#(@xs)) split#1#(::(@x,@xs)) -> c_22(split#(@xs)) splitAndSort#(@l) -> c_24(sortAll#(split(@l)),split#(@l)) - Weak TRS: #and(#false(),#false()) -> #false() #and(#false(),#true()) -> #false() #and(#true(),#false()) -> #false() #and(#true(),#true()) -> #true() #eq(#0(),#0()) -> #true() #eq(#0(),#neg(@y)) -> #false() #eq(#0(),#pos(@y)) -> #false() #eq(#0(),#s(@y)) -> #false() #eq(#neg(@x),#0()) -> #false() #eq(#neg(@x),#neg(@y)) -> #eq(@x,@y) #eq(#neg(@x),#pos(@y)) -> #false() #eq(#pos(@x),#0()) -> #false() #eq(#pos(@x),#neg(@y)) -> #false() #eq(#pos(@x),#pos(@y)) -> #eq(@x,@y) #eq(#s(@x),#0()) -> #false() #eq(#s(@x),#s(@y)) -> #eq(@x,@y) #eq(::(@x_1,@x_2),::(@y_1,@y_2)) -> #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #eq(::(@x_1,@x_2),nil()) -> #false() #eq(::(@x_1,@x_2),tuple#2(@y_1,@y_2)) -> #false() #eq(nil(),::(@y_1,@y_2)) -> #false() #eq(nil(),nil()) -> #true() #eq(nil(),tuple#2(@y_1,@y_2)) -> #false() #eq(tuple#2(@x_1,@x_2),::(@y_1,@y_2)) -> #false() #eq(tuple#2(@x_1,@x_2),nil()) -> #false() #eq(tuple#2(@x_1,@x_2),tuple#2(@y_1,@y_2)) -> #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #equal(@x,@y) -> #eq(@x,@y) insert(@x,@l) -> insert#1(@x,@l,@x) insert#1(tuple#2(@valX,@keyX),@l,@x) -> insert#2(@l,@keyX,@valX,@x) insert#2(::(@l1,@ls),@keyX,@valX,@x) -> insert#3(@l1,@keyX,@ls,@valX,@x) insert#2(nil(),@keyX,@valX,@x) -> ::(tuple#2(::(@valX,nil()),@keyX),nil()) insert#3(tuple#2(@vals1,@key1),@keyX,@ls,@valX,@x) -> insert#4(#equal(@key1,@keyX) ,@key1 ,@ls ,@valX ,@vals1 ,@x) insert#4(#false(),@key1,@ls,@valX,@vals1,@x) -> ::(tuple#2(@vals1,@key1),insert(@x,@ls)) insert#4(#true(),@key1,@ls,@valX,@vals1,@x) -> ::(tuple#2(::(@valX,@vals1),@key1),@ls) split(@l) -> split#1(@l) split#1(::(@x,@xs)) -> insert(@x,split(@xs)) split#1(nil()) -> nil() - Signature: {#and/2,#ckgt/1,#compare/2,#eq/2,#equal/2,#greater/2,append/2,append#1/2,insert/2,insert#1/3,insert#2/4 ,insert#3/5,insert#4/6,quicksort/1,quicksort#1/1,quicksort#2/2,sortAll/1,sortAll#1/1,sortAll#2/2,split/1 ,split#1/1,splitAndSort/1,splitqs/2,splitqs#1/2,splitqs#2/3,splitqs#3/4,#and#/2,#ckgt#/1,#compare#/2,#eq#/2 ,#equal#/2,#greater#/2,append#/2,append#1#/2,insert#/2,insert#1#/3,insert#2#/4,insert#3#/5,insert#4#/6 ,quicksort#/1,quicksort#1#/1,quicksort#2#/2,sortAll#/1,sortAll#1#/1,sortAll#2#/2,split#/1,split#1#/1 ,splitAndSort#/1,splitqs#/2,splitqs#1#/2,splitqs#2#/3,splitqs#3#/4} / {#0/0,#EQ/0,#GT/0,#LT/0,#false/0 ,#neg/1,#pos/1,#s/1,#true/0,::/2,nil/0,tuple#2/2,c_1/1,c_2/2,c_3/1,c_4/1,c_5/0,c_6/1,c_7/1,c_8/1,c_9/0 ,c_10/1,c_11/1,c_12/0,c_13/1,c_14/2,c_15/0,c_16/3,c_17/1,c_18/1,c_19/0,c_20/1,c_21/1,c_22/1,c_23/0,c_24/2 ,c_25/1,c_26/1,c_27/0,c_28/2,c_29/0,c_30/0,c_31/0,c_32/0,c_33/0,c_34/0,c_35/0,c_36/0,c_37/0,c_38/0,c_39/0 ,c_40/0,c_41/0,c_42/0,c_43/1,c_44/0,c_45/0,c_46/0,c_47/1,c_48/0,c_49/1,c_50/0,c_51/0,c_52/0,c_53/0,c_54/0 ,c_55/1,c_56/0,c_57/0,c_58/0,c_59/1,c_60/0,c_61/1,c_62/3,c_63/0,c_64/0,c_65/0,c_66/0,c_67/0,c_68/0,c_69/0 ,c_70/3} - Obligation: innermost runtime complexity wrt. defined symbols {#and#,#ckgt#,#compare#,#eq#,#equal#,#greater#,append# ,append#1#,insert#,insert#1#,insert#2#,insert#3#,insert#4#,quicksort#,quicksort#1#,quicksort#2#,sortAll# ,sortAll#1#,sortAll#2#,split#,split#1#,splitAndSort#,splitqs#,splitqs#1#,splitqs#2# ,splitqs#3#} and constructors {#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} + Applied Processor: WeightGap {wgDimension = 1, wgDegree = 1, wgKind = Algebraic, wgUArgs = UArgs, wgOn = WgOnAny} + Details: The weightgap principle applies using the following constant growth matrix-interpretation: We apply a matrix interpretation of kind constructor based matrix interpretation: The following argument positions are considered usable: uargs(#and) = {1,2}, uargs(::) = {2}, uargs(insert) = {2}, uargs(insert#4) = {1}, uargs(sortAll#) = {1}, uargs(c_17) = {1}, uargs(c_18) = {1}, uargs(c_20) = {1}, uargs(c_21) = {1}, uargs(c_22) = {1}, uargs(c_24) = {1,2} Following symbols are considered usable: all TcT has computed the following interpretation: p(#0) = [1] p(#EQ) = [1] p(#GT) = [0] p(#LT) = [1] p(#and) = [1] x1 + [1] x2 + [0] p(#ckgt) = [1] x1 + [0] p(#compare) = [4] x2 + [0] p(#eq) = [0] p(#equal) = [0] p(#false) = [0] p(#greater) = [1] x1 + [1] p(#neg) = [1] p(#pos) = [1] x1 + [0] p(#s) = [1] p(#true) = [0] p(::) = [1] x2 + [2] p(append) = [0] p(append#1) = [1] x1 + [1] p(insert) = [1] x2 + [4] p(insert#1) = [1] x2 + [4] p(insert#2) = [1] x1 + [4] p(insert#3) = [1] x3 + [6] p(insert#4) = [1] x1 + [1] x3 + [6] p(nil) = [0] p(quicksort) = [1] x1 + [1] p(quicksort#1) = [2] x1 + [1] p(quicksort#2) = [4] x1 + [1] p(sortAll) = [1] x1 + [0] p(sortAll#1) = [1] x1 + [0] p(sortAll#2) = [1] x1 + [2] x2 + [4] p(split) = [2] x1 + [0] p(split#1) = [2] x1 + [0] p(splitAndSort) = [1] x1 + [1] p(splitqs) = [4] x2 + [0] p(splitqs#1) = [1] x1 + [0] p(splitqs#2) = [1] x1 + [2] x2 + [1] x3 + [0] p(splitqs#3) = [2] p(tuple#2) = [0] p(#and#) = [4] p(#ckgt#) = [2] x1 + [1] p(#compare#) = [1] x1 + [1] x2 + [0] p(#eq#) = [0] p(#equal#) = [4] x2 + [1] p(#greater#) = [1] x1 + [4] x2 + [0] p(append#) = [1] x1 + [2] x2 + [1] p(append#1#) = [0] p(insert#) = [1] x1 + [4] x2 + [1] p(insert#1#) = [1] x1 + [1] p(insert#2#) = [1] x1 + [1] p(insert#3#) = [4] x2 + [2] x3 + [1] x4 + [0] p(insert#4#) = [1] x1 + [1] x2 + [2] x3 + [1] x5 + [1] x6 + [0] p(quicksort#) = [0] p(quicksort#1#) = [0] p(quicksort#2#) = [1] x2 + [0] p(sortAll#) = [1] x1 + [0] p(sortAll#1#) = [1] x1 + [1] p(sortAll#2#) = [1] x2 + [2] p(split#) = [1] x1 + [2] p(split#1#) = [1] x1 + [0] p(splitAndSort#) = [3] x1 + [5] p(splitqs#) = [4] x1 + [0] p(splitqs#1#) = [1] x2 + [0] p(splitqs#2#) = [1] p(splitqs#3#) = [2] x2 + [1] x3 + [1] x4 + [2] p(c_1) = [0] p(c_2) = [1] x1 + [1] x2 + [1] p(c_3) = [1] p(c_4) = [1] x1 + [1] p(c_5) = [1] p(c_6) = [2] x1 + [4] p(c_7) = [1] x1 + [4] p(c_8) = [4] x1 + [1] p(c_9) = [0] p(c_10) = [1] p(c_11) = [0] p(c_12) = [2] p(c_13) = [1] x1 + [1] p(c_14) = [2] x1 + [4] x2 + [2] p(c_15) = [1] p(c_16) = [2] x1 + [4] x2 + [2] p(c_17) = [1] x1 + [2] p(c_18) = [1] x1 + [1] p(c_19) = [0] p(c_20) = [1] x1 + [1] p(c_21) = [1] x1 + [1] p(c_22) = [1] x1 + [0] p(c_23) = [0] p(c_24) = [1] x1 + [1] x2 + [3] p(c_25) = [1] p(c_26) = [1] p(c_27) = [1] p(c_28) = [1] x1 + [1] x2 + [4] p(c_29) = [4] p(c_30) = [0] p(c_31) = [0] p(c_32) = [4] p(c_33) = [4] p(c_34) = [0] p(c_35) = [1] p(c_36) = [2] p(c_37) = [1] p(c_38) = [1] p(c_39) = [0] p(c_40) = [2] p(c_41) = [1] p(c_42) = [0] p(c_43) = [2] p(c_44) = [2] p(c_45) = [0] p(c_46) = [0] p(c_47) = [4] p(c_48) = [1] p(c_49) = [1] x1 + [0] p(c_50) = [1] p(c_51) = [0] p(c_52) = [0] p(c_53) = [0] p(c_54) = [2] p(c_55) = [2] x1 + [0] p(c_56) = [1] p(c_57) = [1] p(c_58) = [1] p(c_59) = [1] p(c_60) = [0] p(c_61) = [0] p(c_62) = [1] x1 + [1] x3 + [4] p(c_63) = [0] p(c_64) = [1] p(c_65) = [0] p(c_66) = [1] p(c_67) = [4] p(c_68) = [2] p(c_69) = [1] p(c_70) = [1] x1 + [1] x3 + [0] Following rules are strictly oriented: split#(@l) = [1] @l + [2] > [1] @l + [1] = c_21(split#1#(@l)) Following rules are (at-least) weakly oriented: sortAll#(@l) = [1] @l + [0] >= [1] @l + [3] = c_17(sortAll#1#(@l)) sortAll#1#(::(@x,@xs)) = [1] @xs + [3] >= [1] @xs + [3] = c_18(sortAll#2#(@x,@xs)) sortAll#2#(tuple#2(@vals,@key),@xs) = [1] @xs + [2] >= [1] @xs + [1] = c_20(sortAll#(@xs)) split#1#(::(@x,@xs)) = [1] @xs + [2] >= [1] @xs + [2] = c_22(split#(@xs)) splitAndSort#(@l) = [3] @l + [5] >= [3] @l + [5] = c_24(sortAll#(split(@l)),split#(@l)) #and(#false(),#false()) = [0] >= [0] = #false() #and(#false(),#true()) = [0] >= [0] = #false() #and(#true(),#false()) = [0] >= [0] = #false() #and(#true(),#true()) = [0] >= [0] = #true() #eq(#0(),#0()) = [0] >= [0] = #true() #eq(#0(),#neg(@y)) = [0] >= [0] = #false() #eq(#0(),#pos(@y)) = [0] >= [0] = #false() #eq(#0(),#s(@y)) = [0] >= [0] = #false() #eq(#neg(@x),#0()) = [0] >= [0] = #false() #eq(#neg(@x),#neg(@y)) = [0] >= [0] = #eq(@x,@y) #eq(#neg(@x),#pos(@y)) = [0] >= [0] = #false() #eq(#pos(@x),#0()) = [0] >= [0] = #false() #eq(#pos(@x),#neg(@y)) = [0] >= [0] = #false() #eq(#pos(@x),#pos(@y)) = [0] >= [0] = #eq(@x,@y) #eq(#s(@x),#0()) = [0] >= [0] = #false() #eq(#s(@x),#s(@y)) = [0] >= [0] = #eq(@x,@y) #eq(::(@x_1,@x_2),::(@y_1,@y_2)) = [0] >= [0] = #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #eq(::(@x_1,@x_2),nil()) = [0] >= [0] = #false() #eq(::(@x_1,@x_2),tuple#2(@y_1,@y_2)) = [0] >= [0] = #false() #eq(nil(),::(@y_1,@y_2)) = [0] >= [0] = #false() #eq(nil(),nil()) = [0] >= [0] = #true() #eq(nil(),tuple#2(@y_1,@y_2)) = [0] >= [0] = #false() #eq(tuple#2(@x_1,@x_2),::(@y_1,@y_2)) = [0] >= [0] = #false() #eq(tuple#2(@x_1,@x_2),nil()) = [0] >= [0] = #false() #eq(tuple#2(@x_1,@x_2),tuple#2(@y_1,@y_2)) = [0] >= [0] = #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #equal(@x,@y) = [0] >= [0] = #eq(@x,@y) insert(@x,@l) = [1] @l + [4] >= [1] @l + [4] = insert#1(@x,@l,@x) insert#1(tuple#2(@valX,@keyX),@l,@x) = [1] @l + [4] >= [1] @l + [4] = insert#2(@l,@keyX,@valX,@x) insert#2(::(@l1,@ls),@keyX,@valX,@x) = [1] @ls + [6] >= [1] @ls + [6] = insert#3(@l1,@keyX,@ls,@valX,@x) insert#2(nil(),@keyX,@valX,@x) = [4] >= [2] = ::(tuple#2(::(@valX,nil()),@keyX),nil()) insert#3(tuple#2(@vals1,@key1),@keyX,@ls,@valX,@x) = [1] @ls + [6] >= [1] @ls + [6] = insert#4(#equal(@key1,@keyX),@key1,@ls,@valX,@vals1,@x) insert#4(#false(),@key1,@ls,@valX,@vals1,@x) = [1] @ls + [6] >= [1] @ls + [6] = ::(tuple#2(@vals1,@key1),insert(@x,@ls)) insert#4(#true(),@key1,@ls,@valX,@vals1,@x) = [1] @ls + [6] >= [1] @ls + [2] = ::(tuple#2(::(@valX,@vals1),@key1),@ls) split(@l) = [2] @l + [0] >= [2] @l + [0] = split#1(@l) split#1(::(@x,@xs)) = [2] @xs + [4] >= [2] @xs + [4] = insert(@x,split(@xs)) split#1(nil()) = [0] >= [0] = nil() Further, it can be verified that all rules not oriented are covered by the weightgap condition. ** Step 7.a:7: WeightGap WORST_CASE(?,O(n^1)) + Considered Problem: - Strict DPs: sortAll#(@l) -> c_17(sortAll#1#(@l)) - Weak DPs: sortAll#1#(::(@x,@xs)) -> c_18(sortAll#2#(@x,@xs)) sortAll#2#(tuple#2(@vals,@key),@xs) -> c_20(sortAll#(@xs)) split#(@l) -> c_21(split#1#(@l)) split#1#(::(@x,@xs)) -> c_22(split#(@xs)) splitAndSort#(@l) -> c_24(sortAll#(split(@l)),split#(@l)) - Weak TRS: #and(#false(),#false()) -> #false() #and(#false(),#true()) -> #false() #and(#true(),#false()) -> #false() #and(#true(),#true()) -> #true() #eq(#0(),#0()) -> #true() #eq(#0(),#neg(@y)) -> #false() #eq(#0(),#pos(@y)) -> #false() #eq(#0(),#s(@y)) -> #false() #eq(#neg(@x),#0()) -> #false() #eq(#neg(@x),#neg(@y)) -> #eq(@x,@y) #eq(#neg(@x),#pos(@y)) -> #false() #eq(#pos(@x),#0()) -> #false() #eq(#pos(@x),#neg(@y)) -> #false() #eq(#pos(@x),#pos(@y)) -> #eq(@x,@y) #eq(#s(@x),#0()) -> #false() #eq(#s(@x),#s(@y)) -> #eq(@x,@y) #eq(::(@x_1,@x_2),::(@y_1,@y_2)) -> #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #eq(::(@x_1,@x_2),nil()) -> #false() #eq(::(@x_1,@x_2),tuple#2(@y_1,@y_2)) -> #false() #eq(nil(),::(@y_1,@y_2)) -> #false() #eq(nil(),nil()) -> #true() #eq(nil(),tuple#2(@y_1,@y_2)) -> #false() #eq(tuple#2(@x_1,@x_2),::(@y_1,@y_2)) -> #false() #eq(tuple#2(@x_1,@x_2),nil()) -> #false() #eq(tuple#2(@x_1,@x_2),tuple#2(@y_1,@y_2)) -> #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #equal(@x,@y) -> #eq(@x,@y) insert(@x,@l) -> insert#1(@x,@l,@x) insert#1(tuple#2(@valX,@keyX),@l,@x) -> insert#2(@l,@keyX,@valX,@x) insert#2(::(@l1,@ls),@keyX,@valX,@x) -> insert#3(@l1,@keyX,@ls,@valX,@x) insert#2(nil(),@keyX,@valX,@x) -> ::(tuple#2(::(@valX,nil()),@keyX),nil()) insert#3(tuple#2(@vals1,@key1),@keyX,@ls,@valX,@x) -> insert#4(#equal(@key1,@keyX) ,@key1 ,@ls ,@valX ,@vals1 ,@x) insert#4(#false(),@key1,@ls,@valX,@vals1,@x) -> ::(tuple#2(@vals1,@key1),insert(@x,@ls)) insert#4(#true(),@key1,@ls,@valX,@vals1,@x) -> ::(tuple#2(::(@valX,@vals1),@key1),@ls) split(@l) -> split#1(@l) split#1(::(@x,@xs)) -> insert(@x,split(@xs)) split#1(nil()) -> nil() - Signature: {#and/2,#ckgt/1,#compare/2,#eq/2,#equal/2,#greater/2,append/2,append#1/2,insert/2,insert#1/3,insert#2/4 ,insert#3/5,insert#4/6,quicksort/1,quicksort#1/1,quicksort#2/2,sortAll/1,sortAll#1/1,sortAll#2/2,split/1 ,split#1/1,splitAndSort/1,splitqs/2,splitqs#1/2,splitqs#2/3,splitqs#3/4,#and#/2,#ckgt#/1,#compare#/2,#eq#/2 ,#equal#/2,#greater#/2,append#/2,append#1#/2,insert#/2,insert#1#/3,insert#2#/4,insert#3#/5,insert#4#/6 ,quicksort#/1,quicksort#1#/1,quicksort#2#/2,sortAll#/1,sortAll#1#/1,sortAll#2#/2,split#/1,split#1#/1 ,splitAndSort#/1,splitqs#/2,splitqs#1#/2,splitqs#2#/3,splitqs#3#/4} / {#0/0,#EQ/0,#GT/0,#LT/0,#false/0 ,#neg/1,#pos/1,#s/1,#true/0,::/2,nil/0,tuple#2/2,c_1/1,c_2/2,c_3/1,c_4/1,c_5/0,c_6/1,c_7/1,c_8/1,c_9/0 ,c_10/1,c_11/1,c_12/0,c_13/1,c_14/2,c_15/0,c_16/3,c_17/1,c_18/1,c_19/0,c_20/1,c_21/1,c_22/1,c_23/0,c_24/2 ,c_25/1,c_26/1,c_27/0,c_28/2,c_29/0,c_30/0,c_31/0,c_32/0,c_33/0,c_34/0,c_35/0,c_36/0,c_37/0,c_38/0,c_39/0 ,c_40/0,c_41/0,c_42/0,c_43/1,c_44/0,c_45/0,c_46/0,c_47/1,c_48/0,c_49/1,c_50/0,c_51/0,c_52/0,c_53/0,c_54/0 ,c_55/1,c_56/0,c_57/0,c_58/0,c_59/1,c_60/0,c_61/1,c_62/3,c_63/0,c_64/0,c_65/0,c_66/0,c_67/0,c_68/0,c_69/0 ,c_70/3} - Obligation: innermost runtime complexity wrt. defined symbols {#and#,#ckgt#,#compare#,#eq#,#equal#,#greater#,append# ,append#1#,insert#,insert#1#,insert#2#,insert#3#,insert#4#,quicksort#,quicksort#1#,quicksort#2#,sortAll# ,sortAll#1#,sortAll#2#,split#,split#1#,splitAndSort#,splitqs#,splitqs#1#,splitqs#2# ,splitqs#3#} and constructors {#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} + Applied Processor: WeightGap {wgDimension = 1, wgDegree = 1, wgKind = Algebraic, wgUArgs = UArgs, wgOn = WgOnAny} + Details: The weightgap principle applies using the following constant growth matrix-interpretation: We apply a matrix interpretation of kind constructor based matrix interpretation: The following argument positions are considered usable: uargs(#and) = {1,2}, uargs(::) = {2}, uargs(insert) = {2}, uargs(insert#4) = {1}, uargs(sortAll#) = {1}, uargs(c_17) = {1}, uargs(c_18) = {1}, uargs(c_20) = {1}, uargs(c_21) = {1}, uargs(c_22) = {1}, uargs(c_24) = {1,2} Following symbols are considered usable: all TcT has computed the following interpretation: p(#0) = [0] p(#EQ) = [0] p(#GT) = [0] p(#LT) = [0] p(#and) = [1] x1 + [1] x2 + [0] p(#ckgt) = [0] p(#compare) = [0] p(#eq) = [0] p(#equal) = [0] p(#false) = [0] p(#greater) = [0] p(#neg) = [1] x1 + [0] p(#pos) = [1] x1 + [0] p(#s) = [1] x1 + [0] p(#true) = [0] p(::) = [1] x2 + [1] p(append) = [0] p(append#1) = [2] x2 + [0] p(insert) = [1] x2 + [1] p(insert#1) = [1] x2 + [1] p(insert#2) = [1] x1 + [1] p(insert#3) = [1] x3 + [2] p(insert#4) = [1] x1 + [1] x3 + [2] p(nil) = [0] p(quicksort) = [2] x1 + [0] p(quicksort#1) = [1] p(quicksort#2) = [0] p(sortAll) = [1] p(sortAll#1) = [1] x1 + [1] p(sortAll#2) = [2] x2 + [1] p(split) = [2] x1 + [1] p(split#1) = [2] x1 + [0] p(splitAndSort) = [1] p(splitqs) = [1] x1 + [0] p(splitqs#1) = [2] x1 + [1] x2 + [0] p(splitqs#2) = [1] x1 + [0] p(splitqs#3) = [4] x1 + [4] x2 + [1] x4 + [2] p(tuple#2) = [4] p(#and#) = [1] x1 + [1] x2 + [0] p(#ckgt#) = [1] p(#compare#) = [1] x1 + [2] x2 + [4] p(#eq#) = [2] x2 + [0] p(#equal#) = [1] x1 + [1] x2 + [1] p(#greater#) = [1] p(append#) = [2] x1 + [0] p(append#1#) = [1] x1 + [1] p(insert#) = [0] p(insert#1#) = [1] x1 + [4] x2 + [1] x3 + [0] p(insert#2#) = [4] x2 + [1] x4 + [0] p(insert#3#) = [1] x2 + [2] x4 + [4] p(insert#4#) = [1] x2 + [1] x4 + [1] x6 + [1] p(quicksort#) = [1] p(quicksort#1#) = [1] p(quicksort#2#) = [4] x1 + [4] x2 + [2] p(sortAll#) = [1] x1 + [1] p(sortAll#1#) = [1] x1 + [0] p(sortAll#2#) = [1] x2 + [1] p(split#) = [2] x1 + [0] p(split#1#) = [2] x1 + [0] p(splitAndSort#) = [5] x1 + [7] p(splitqs#) = [4] x1 + [1] p(splitqs#1#) = [4] x2 + [1] p(splitqs#2#) = [1] x2 + [1] x3 + [1] p(splitqs#3#) = [2] x1 + [1] x2 + [1] x3 + [2] x4 + [1] p(c_1) = [1] x1 + [4] p(c_2) = [2] x1 + [1] x2 + [0] p(c_3) = [1] x1 + [1] p(c_4) = [1] x1 + [0] p(c_5) = [2] p(c_6) = [1] p(c_7) = [2] x1 + [4] p(c_8) = [2] p(c_9) = [0] p(c_10) = [1] x1 + [1] p(c_11) = [4] x1 + [1] p(c_12) = [0] p(c_13) = [1] p(c_14) = [1] x2 + [0] p(c_15) = [0] p(c_16) = [1] p(c_17) = [1] x1 + [0] p(c_18) = [1] x1 + [0] p(c_19) = [1] p(c_20) = [1] x1 + [0] p(c_21) = [1] x1 + [0] p(c_22) = [1] x1 + [2] p(c_23) = [1] p(c_24) = [1] x1 + [1] x2 + [5] p(c_25) = [0] p(c_26) = [1] x1 + [4] p(c_27) = [0] p(c_28) = [1] x1 + [2] p(c_29) = [4] p(c_30) = [0] p(c_31) = [0] p(c_32) = [0] p(c_33) = [2] p(c_34) = [1] p(c_35) = [4] p(c_36) = [0] p(c_37) = [0] p(c_38) = [0] p(c_39) = [2] p(c_40) = [0] p(c_41) = [0] p(c_42) = [1] p(c_43) = [4] x1 + [1] p(c_44) = [1] p(c_45) = [1] p(c_46) = [4] p(c_47) = [1] x1 + [0] p(c_48) = [0] p(c_49) = [1] x1 + [2] p(c_50) = [0] p(c_51) = [4] p(c_52) = [1] p(c_53) = [0] p(c_54) = [2] p(c_55) = [2] x1 + [4] p(c_56) = [1] p(c_57) = [1] p(c_58) = [1] p(c_59) = [4] p(c_60) = [2] p(c_61) = [1] x1 + [0] p(c_62) = [2] x1 + [1] x2 + [1] x3 + [1] p(c_63) = [0] p(c_64) = [1] p(c_65) = [4] p(c_66) = [1] p(c_67) = [0] p(c_68) = [1] p(c_69) = [1] p(c_70) = [1] x1 + [1] x2 + [4] x3 + [0] Following rules are strictly oriented: sortAll#(@l) = [1] @l + [1] > [1] @l + [0] = c_17(sortAll#1#(@l)) Following rules are (at-least) weakly oriented: sortAll#1#(::(@x,@xs)) = [1] @xs + [1] >= [1] @xs + [1] = c_18(sortAll#2#(@x,@xs)) sortAll#2#(tuple#2(@vals,@key),@xs) = [1] @xs + [1] >= [1] @xs + [1] = c_20(sortAll#(@xs)) split#(@l) = [2] @l + [0] >= [2] @l + [0] = c_21(split#1#(@l)) split#1#(::(@x,@xs)) = [2] @xs + [2] >= [2] @xs + [2] = c_22(split#(@xs)) splitAndSort#(@l) = [5] @l + [7] >= [4] @l + [7] = c_24(sortAll#(split(@l)),split#(@l)) #and(#false(),#false()) = [0] >= [0] = #false() #and(#false(),#true()) = [0] >= [0] = #false() #and(#true(),#false()) = [0] >= [0] = #false() #and(#true(),#true()) = [0] >= [0] = #true() #eq(#0(),#0()) = [0] >= [0] = #true() #eq(#0(),#neg(@y)) = [0] >= [0] = #false() #eq(#0(),#pos(@y)) = [0] >= [0] = #false() #eq(#0(),#s(@y)) = [0] >= [0] = #false() #eq(#neg(@x),#0()) = [0] >= [0] = #false() #eq(#neg(@x),#neg(@y)) = [0] >= [0] = #eq(@x,@y) #eq(#neg(@x),#pos(@y)) = [0] >= [0] = #false() #eq(#pos(@x),#0()) = [0] >= [0] = #false() #eq(#pos(@x),#neg(@y)) = [0] >= [0] = #false() #eq(#pos(@x),#pos(@y)) = [0] >= [0] = #eq(@x,@y) #eq(#s(@x),#0()) = [0] >= [0] = #false() #eq(#s(@x),#s(@y)) = [0] >= [0] = #eq(@x,@y) #eq(::(@x_1,@x_2),::(@y_1,@y_2)) = [0] >= [0] = #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #eq(::(@x_1,@x_2),nil()) = [0] >= [0] = #false() #eq(::(@x_1,@x_2),tuple#2(@y_1,@y_2)) = [0] >= [0] = #false() #eq(nil(),::(@y_1,@y_2)) = [0] >= [0] = #false() #eq(nil(),nil()) = [0] >= [0] = #true() #eq(nil(),tuple#2(@y_1,@y_2)) = [0] >= [0] = #false() #eq(tuple#2(@x_1,@x_2),::(@y_1,@y_2)) = [0] >= [0] = #false() #eq(tuple#2(@x_1,@x_2),nil()) = [0] >= [0] = #false() #eq(tuple#2(@x_1,@x_2),tuple#2(@y_1,@y_2)) = [0] >= [0] = #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #equal(@x,@y) = [0] >= [0] = #eq(@x,@y) insert(@x,@l) = [1] @l + [1] >= [1] @l + [1] = insert#1(@x,@l,@x) insert#1(tuple#2(@valX,@keyX),@l,@x) = [1] @l + [1] >= [1] @l + [1] = insert#2(@l,@keyX,@valX,@x) insert#2(::(@l1,@ls),@keyX,@valX,@x) = [1] @ls + [2] >= [1] @ls + [2] = insert#3(@l1,@keyX,@ls,@valX,@x) insert#2(nil(),@keyX,@valX,@x) = [1] >= [1] = ::(tuple#2(::(@valX,nil()),@keyX),nil()) insert#3(tuple#2(@vals1,@key1),@keyX,@ls,@valX,@x) = [1] @ls + [2] >= [1] @ls + [2] = insert#4(#equal(@key1,@keyX),@key1,@ls,@valX,@vals1,@x) insert#4(#false(),@key1,@ls,@valX,@vals1,@x) = [1] @ls + [2] >= [1] @ls + [2] = ::(tuple#2(@vals1,@key1),insert(@x,@ls)) insert#4(#true(),@key1,@ls,@valX,@vals1,@x) = [1] @ls + [2] >= [1] @ls + [1] = ::(tuple#2(::(@valX,@vals1),@key1),@ls) split(@l) = [2] @l + [1] >= [2] @l + [0] = split#1(@l) split#1(::(@x,@xs)) = [2] @xs + [2] >= [2] @xs + [2] = insert(@x,split(@xs)) split#1(nil()) = [0] >= [0] = nil() Further, it can be verified that all rules not oriented are covered by the weightgap condition. ** Step 7.a:8: EmptyProcessor WORST_CASE(?,O(1)) + Considered Problem: - Weak DPs: sortAll#(@l) -> c_17(sortAll#1#(@l)) sortAll#1#(::(@x,@xs)) -> c_18(sortAll#2#(@x,@xs)) sortAll#2#(tuple#2(@vals,@key),@xs) -> c_20(sortAll#(@xs)) split#(@l) -> c_21(split#1#(@l)) split#1#(::(@x,@xs)) -> c_22(split#(@xs)) splitAndSort#(@l) -> c_24(sortAll#(split(@l)),split#(@l)) - Weak TRS: #and(#false(),#false()) -> #false() #and(#false(),#true()) -> #false() #and(#true(),#false()) -> #false() #and(#true(),#true()) -> #true() #eq(#0(),#0()) -> #true() #eq(#0(),#neg(@y)) -> #false() #eq(#0(),#pos(@y)) -> #false() #eq(#0(),#s(@y)) -> #false() #eq(#neg(@x),#0()) -> #false() #eq(#neg(@x),#neg(@y)) -> #eq(@x,@y) #eq(#neg(@x),#pos(@y)) -> #false() #eq(#pos(@x),#0()) -> #false() #eq(#pos(@x),#neg(@y)) -> #false() #eq(#pos(@x),#pos(@y)) -> #eq(@x,@y) #eq(#s(@x),#0()) -> #false() #eq(#s(@x),#s(@y)) -> #eq(@x,@y) #eq(::(@x_1,@x_2),::(@y_1,@y_2)) -> #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #eq(::(@x_1,@x_2),nil()) -> #false() #eq(::(@x_1,@x_2),tuple#2(@y_1,@y_2)) -> #false() #eq(nil(),::(@y_1,@y_2)) -> #false() #eq(nil(),nil()) -> #true() #eq(nil(),tuple#2(@y_1,@y_2)) -> #false() #eq(tuple#2(@x_1,@x_2),::(@y_1,@y_2)) -> #false() #eq(tuple#2(@x_1,@x_2),nil()) -> #false() #eq(tuple#2(@x_1,@x_2),tuple#2(@y_1,@y_2)) -> #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #equal(@x,@y) -> #eq(@x,@y) insert(@x,@l) -> insert#1(@x,@l,@x) insert#1(tuple#2(@valX,@keyX),@l,@x) -> insert#2(@l,@keyX,@valX,@x) insert#2(::(@l1,@ls),@keyX,@valX,@x) -> insert#3(@l1,@keyX,@ls,@valX,@x) insert#2(nil(),@keyX,@valX,@x) -> ::(tuple#2(::(@valX,nil()),@keyX),nil()) insert#3(tuple#2(@vals1,@key1),@keyX,@ls,@valX,@x) -> insert#4(#equal(@key1,@keyX) ,@key1 ,@ls ,@valX ,@vals1 ,@x) insert#4(#false(),@key1,@ls,@valX,@vals1,@x) -> ::(tuple#2(@vals1,@key1),insert(@x,@ls)) insert#4(#true(),@key1,@ls,@valX,@vals1,@x) -> ::(tuple#2(::(@valX,@vals1),@key1),@ls) split(@l) -> split#1(@l) split#1(::(@x,@xs)) -> insert(@x,split(@xs)) split#1(nil()) -> nil() - Signature: {#and/2,#ckgt/1,#compare/2,#eq/2,#equal/2,#greater/2,append/2,append#1/2,insert/2,insert#1/3,insert#2/4 ,insert#3/5,insert#4/6,quicksort/1,quicksort#1/1,quicksort#2/2,sortAll/1,sortAll#1/1,sortAll#2/2,split/1 ,split#1/1,splitAndSort/1,splitqs/2,splitqs#1/2,splitqs#2/3,splitqs#3/4,#and#/2,#ckgt#/1,#compare#/2,#eq#/2 ,#equal#/2,#greater#/2,append#/2,append#1#/2,insert#/2,insert#1#/3,insert#2#/4,insert#3#/5,insert#4#/6 ,quicksort#/1,quicksort#1#/1,quicksort#2#/2,sortAll#/1,sortAll#1#/1,sortAll#2#/2,split#/1,split#1#/1 ,splitAndSort#/1,splitqs#/2,splitqs#1#/2,splitqs#2#/3,splitqs#3#/4} / {#0/0,#EQ/0,#GT/0,#LT/0,#false/0 ,#neg/1,#pos/1,#s/1,#true/0,::/2,nil/0,tuple#2/2,c_1/1,c_2/2,c_3/1,c_4/1,c_5/0,c_6/1,c_7/1,c_8/1,c_9/0 ,c_10/1,c_11/1,c_12/0,c_13/1,c_14/2,c_15/0,c_16/3,c_17/1,c_18/1,c_19/0,c_20/1,c_21/1,c_22/1,c_23/0,c_24/2 ,c_25/1,c_26/1,c_27/0,c_28/2,c_29/0,c_30/0,c_31/0,c_32/0,c_33/0,c_34/0,c_35/0,c_36/0,c_37/0,c_38/0,c_39/0 ,c_40/0,c_41/0,c_42/0,c_43/1,c_44/0,c_45/0,c_46/0,c_47/1,c_48/0,c_49/1,c_50/0,c_51/0,c_52/0,c_53/0,c_54/0 ,c_55/1,c_56/0,c_57/0,c_58/0,c_59/1,c_60/0,c_61/1,c_62/3,c_63/0,c_64/0,c_65/0,c_66/0,c_67/0,c_68/0,c_69/0 ,c_70/3} - Obligation: innermost runtime complexity wrt. defined symbols {#and#,#ckgt#,#compare#,#eq#,#equal#,#greater#,append# ,append#1#,insert#,insert#1#,insert#2#,insert#3#,insert#4#,quicksort#,quicksort#1#,quicksort#2#,sortAll# ,sortAll#1#,sortAll#2#,split#,split#1#,splitAndSort#,splitqs#,splitqs#1#,splitqs#2# ,splitqs#3#} and constructors {#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} + Applied Processor: EmptyProcessor + Details: The problem is already closed. The intended complexity is O(1). ** Step 7.b:1: DecomposeDG WORST_CASE(?,O(n^4)) + Considered Problem: - Strict DPs: append#(@l,@ys) -> c_3(append#1#(@l,@ys)) append#1#(::(@x,@xs),@ys) -> c_4(append#(@xs,@ys)) insert#(@x,@l) -> c_6(insert#1#(@x,@l,@x)) insert#1#(tuple#2(@valX,@keyX),@l,@x) -> c_7(insert#2#(@l,@keyX,@valX,@x)) insert#2#(::(@l1,@ls),@keyX,@valX,@x) -> c_8(insert#3#(@l1,@keyX,@ls,@valX,@x)) insert#3#(tuple#2(@vals1,@key1),@keyX,@ls,@valX,@x) -> c_10(insert#4#(#equal(@key1,@keyX) ,@key1 ,@ls ,@valX ,@vals1 ,@x)) insert#4#(#false(),@key1,@ls,@valX,@vals1,@x) -> c_11(insert#(@x,@ls)) quicksort#(@l) -> c_13(quicksort#1#(@l)) quicksort#1#(::(@z,@zs)) -> c_14(quicksort#2#(splitqs(@z,@zs),@z),splitqs#(@z,@zs)) quicksort#2#(tuple#2(@xs,@ys),@z) -> c_16(append#(quicksort(@xs),::(@z,quicksort(@ys))) ,quicksort#(@xs) ,quicksort#(@ys)) splitqs#(@pivot,@l) -> c_25(splitqs#1#(@l,@pivot)) splitqs#1#(::(@x,@xs),@pivot) -> c_26(splitqs#(@pivot,@xs)) - Weak DPs: sortAll#(@l) -> sortAll#1#(@l) sortAll#1#(::(@x,@xs)) -> sortAll#2#(@x,@xs) sortAll#2#(tuple#2(@vals,@key),@xs) -> quicksort#(@vals) sortAll#2#(tuple#2(@vals,@key),@xs) -> sortAll#(@xs) split#(@l) -> split#1#(@l) split#1#(::(@x,@xs)) -> insert#(@x,split(@xs)) split#1#(::(@x,@xs)) -> split#(@xs) splitAndSort#(@l) -> sortAll#(split(@l)) splitAndSort#(@l) -> split#(@l) - Weak TRS: #and(#false(),#false()) -> #false() #and(#false(),#true()) -> #false() #and(#true(),#false()) -> #false() #and(#true(),#true()) -> #true() #ckgt(#EQ()) -> #false() #ckgt(#GT()) -> #true() #ckgt(#LT()) -> #false() #compare(#0(),#0()) -> #EQ() #compare(#0(),#neg(@y)) -> #GT() #compare(#0(),#pos(@y)) -> #LT() #compare(#0(),#s(@y)) -> #LT() #compare(#neg(@x),#0()) -> #LT() #compare(#neg(@x),#neg(@y)) -> #compare(@y,@x) #compare(#neg(@x),#pos(@y)) -> #LT() #compare(#pos(@x),#0()) -> #GT() #compare(#pos(@x),#neg(@y)) -> #GT() #compare(#pos(@x),#pos(@y)) -> #compare(@x,@y) #compare(#s(@x),#0()) -> #GT() #compare(#s(@x),#s(@y)) -> #compare(@x,@y) #eq(#0(),#0()) -> #true() #eq(#0(),#neg(@y)) -> #false() #eq(#0(),#pos(@y)) -> #false() #eq(#0(),#s(@y)) -> #false() #eq(#neg(@x),#0()) -> #false() #eq(#neg(@x),#neg(@y)) -> #eq(@x,@y) #eq(#neg(@x),#pos(@y)) -> #false() #eq(#pos(@x),#0()) -> #false() #eq(#pos(@x),#neg(@y)) -> #false() #eq(#pos(@x),#pos(@y)) -> #eq(@x,@y) #eq(#s(@x),#0()) -> #false() #eq(#s(@x),#s(@y)) -> #eq(@x,@y) #eq(::(@x_1,@x_2),::(@y_1,@y_2)) -> #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #eq(::(@x_1,@x_2),nil()) -> #false() #eq(::(@x_1,@x_2),tuple#2(@y_1,@y_2)) -> #false() #eq(nil(),::(@y_1,@y_2)) -> #false() #eq(nil(),nil()) -> #true() #eq(nil(),tuple#2(@y_1,@y_2)) -> #false() #eq(tuple#2(@x_1,@x_2),::(@y_1,@y_2)) -> #false() #eq(tuple#2(@x_1,@x_2),nil()) -> #false() #eq(tuple#2(@x_1,@x_2),tuple#2(@y_1,@y_2)) -> #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #equal(@x,@y) -> #eq(@x,@y) #greater(@x,@y) -> #ckgt(#compare(@x,@y)) append(@l,@ys) -> append#1(@l,@ys) append#1(::(@x,@xs),@ys) -> ::(@x,append(@xs,@ys)) append#1(nil(),@ys) -> @ys insert(@x,@l) -> insert#1(@x,@l,@x) insert#1(tuple#2(@valX,@keyX),@l,@x) -> insert#2(@l,@keyX,@valX,@x) insert#2(::(@l1,@ls),@keyX,@valX,@x) -> insert#3(@l1,@keyX,@ls,@valX,@x) insert#2(nil(),@keyX,@valX,@x) -> ::(tuple#2(::(@valX,nil()),@keyX),nil()) insert#3(tuple#2(@vals1,@key1),@keyX,@ls,@valX,@x) -> insert#4(#equal(@key1,@keyX) ,@key1 ,@ls ,@valX ,@vals1 ,@x) insert#4(#false(),@key1,@ls,@valX,@vals1,@x) -> ::(tuple#2(@vals1,@key1),insert(@x,@ls)) insert#4(#true(),@key1,@ls,@valX,@vals1,@x) -> ::(tuple#2(::(@valX,@vals1),@key1),@ls) quicksort(@l) -> quicksort#1(@l) quicksort#1(::(@z,@zs)) -> quicksort#2(splitqs(@z,@zs),@z) quicksort#1(nil()) -> nil() quicksort#2(tuple#2(@xs,@ys),@z) -> append(quicksort(@xs),::(@z,quicksort(@ys))) split(@l) -> split#1(@l) split#1(::(@x,@xs)) -> insert(@x,split(@xs)) split#1(nil()) -> nil() splitqs(@pivot,@l) -> splitqs#1(@l,@pivot) splitqs#1(::(@x,@xs),@pivot) -> splitqs#2(splitqs(@pivot,@xs),@pivot,@x) splitqs#1(nil(),@pivot) -> tuple#2(nil(),nil()) splitqs#2(tuple#2(@ls,@rs),@pivot,@x) -> splitqs#3(#greater(@x,@pivot),@ls,@rs,@x) splitqs#3(#false(),@ls,@rs,@x) -> tuple#2(::(@x,@ls),@rs) splitqs#3(#true(),@ls,@rs,@x) -> tuple#2(@ls,::(@x,@rs)) - Signature: {#and/2,#ckgt/1,#compare/2,#eq/2,#equal/2,#greater/2,append/2,append#1/2,insert/2,insert#1/3,insert#2/4 ,insert#3/5,insert#4/6,quicksort/1,quicksort#1/1,quicksort#2/2,sortAll/1,sortAll#1/1,sortAll#2/2,split/1 ,split#1/1,splitAndSort/1,splitqs/2,splitqs#1/2,splitqs#2/3,splitqs#3/4,#and#/2,#ckgt#/1,#compare#/2,#eq#/2 ,#equal#/2,#greater#/2,append#/2,append#1#/2,insert#/2,insert#1#/3,insert#2#/4,insert#3#/5,insert#4#/6 ,quicksort#/1,quicksort#1#/1,quicksort#2#/2,sortAll#/1,sortAll#1#/1,sortAll#2#/2,split#/1,split#1#/1 ,splitAndSort#/1,splitqs#/2,splitqs#1#/2,splitqs#2#/3,splitqs#3#/4} / {#0/0,#EQ/0,#GT/0,#LT/0,#false/0 ,#neg/1,#pos/1,#s/1,#true/0,::/2,nil/0,tuple#2/2,c_1/1,c_2/2,c_3/1,c_4/1,c_5/0,c_6/1,c_7/1,c_8/1,c_9/0 ,c_10/1,c_11/1,c_12/0,c_13/1,c_14/2,c_15/0,c_16/3,c_17/1,c_18/1,c_19/0,c_20/2,c_21/1,c_22/2,c_23/0,c_24/2 ,c_25/1,c_26/1,c_27/0,c_28/2,c_29/0,c_30/0,c_31/0,c_32/0,c_33/0,c_34/0,c_35/0,c_36/0,c_37/0,c_38/0,c_39/0 ,c_40/0,c_41/0,c_42/0,c_43/1,c_44/0,c_45/0,c_46/0,c_47/1,c_48/0,c_49/1,c_50/0,c_51/0,c_52/0,c_53/0,c_54/0 ,c_55/1,c_56/0,c_57/0,c_58/0,c_59/1,c_60/0,c_61/1,c_62/3,c_63/0,c_64/0,c_65/0,c_66/0,c_67/0,c_68/0,c_69/0 ,c_70/3} - Obligation: innermost runtime complexity wrt. defined symbols {#and#,#ckgt#,#compare#,#eq#,#equal#,#greater#,append# ,append#1#,insert#,insert#1#,insert#2#,insert#3#,insert#4#,quicksort#,quicksort#1#,quicksort#2#,sortAll# ,sortAll#1#,sortAll#2#,split#,split#1#,splitAndSort#,splitqs#,splitqs#1#,splitqs#2# ,splitqs#3#} and constructors {#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} + Applied Processor: DecomposeDG {onSelection = all below first cut in WDG, onUpper = Nothing, onLower = Nothing} + Details: We decompose the input problem according to the dependency graph into the upper component insert#(@x,@l) -> c_6(insert#1#(@x,@l,@x)) insert#1#(tuple#2(@valX,@keyX),@l,@x) -> c_7(insert#2#(@l,@keyX,@valX,@x)) insert#2#(::(@l1,@ls),@keyX,@valX,@x) -> c_8(insert#3#(@l1,@keyX,@ls,@valX,@x)) insert#3#(tuple#2(@vals1,@key1),@keyX,@ls,@valX,@x) -> c_10(insert#4#(#equal(@key1,@keyX) ,@key1 ,@ls ,@valX ,@vals1 ,@x)) insert#4#(#false(),@key1,@ls,@valX,@vals1,@x) -> c_11(insert#(@x,@ls)) quicksort#(@l) -> c_13(quicksort#1#(@l)) quicksort#1#(::(@z,@zs)) -> c_14(quicksort#2#(splitqs(@z,@zs),@z),splitqs#(@z,@zs)) quicksort#2#(tuple#2(@xs,@ys),@z) -> c_16(append#(quicksort(@xs),::(@z,quicksort(@ys))) ,quicksort#(@xs) ,quicksort#(@ys)) sortAll#(@l) -> sortAll#1#(@l) sortAll#1#(::(@x,@xs)) -> sortAll#2#(@x,@xs) sortAll#2#(tuple#2(@vals,@key),@xs) -> quicksort#(@vals) sortAll#2#(tuple#2(@vals,@key),@xs) -> sortAll#(@xs) split#(@l) -> split#1#(@l) split#1#(::(@x,@xs)) -> insert#(@x,split(@xs)) split#1#(::(@x,@xs)) -> split#(@xs) splitAndSort#(@l) -> sortAll#(split(@l)) splitAndSort#(@l) -> split#(@l) and a lower component append#(@l,@ys) -> c_3(append#1#(@l,@ys)) append#1#(::(@x,@xs),@ys) -> c_4(append#(@xs,@ys)) splitqs#(@pivot,@l) -> c_25(splitqs#1#(@l,@pivot)) splitqs#1#(::(@x,@xs),@pivot) -> c_26(splitqs#(@pivot,@xs)) Further, following extension rules are added to the lower component. insert#(@x,@l) -> insert#1#(@x,@l,@x) insert#1#(tuple#2(@valX,@keyX),@l,@x) -> insert#2#(@l,@keyX,@valX,@x) insert#2#(::(@l1,@ls),@keyX,@valX,@x) -> insert#3#(@l1,@keyX,@ls,@valX,@x) insert#3#(tuple#2(@vals1,@key1),@keyX,@ls,@valX,@x) -> insert#4#(#equal(@key1,@keyX) ,@key1 ,@ls ,@valX ,@vals1 ,@x) insert#4#(#false(),@key1,@ls,@valX,@vals1,@x) -> insert#(@x,@ls) quicksort#(@l) -> quicksort#1#(@l) quicksort#1#(::(@z,@zs)) -> quicksort#2#(splitqs(@z,@zs),@z) quicksort#1#(::(@z,@zs)) -> splitqs#(@z,@zs) quicksort#2#(tuple#2(@xs,@ys),@z) -> append#(quicksort(@xs),::(@z,quicksort(@ys))) quicksort#2#(tuple#2(@xs,@ys),@z) -> quicksort#(@xs) quicksort#2#(tuple#2(@xs,@ys),@z) -> quicksort#(@ys) sortAll#(@l) -> sortAll#1#(@l) sortAll#1#(::(@x,@xs)) -> sortAll#2#(@x,@xs) sortAll#2#(tuple#2(@vals,@key),@xs) -> quicksort#(@vals) sortAll#2#(tuple#2(@vals,@key),@xs) -> sortAll#(@xs) split#(@l) -> split#1#(@l) split#1#(::(@x,@xs)) -> insert#(@x,split(@xs)) split#1#(::(@x,@xs)) -> split#(@xs) splitAndSort#(@l) -> sortAll#(split(@l)) splitAndSort#(@l) -> split#(@l) *** Step 7.b:1.a:1: RemoveHeads WORST_CASE(?,O(n^2)) + Considered Problem: - Strict DPs: insert#(@x,@l) -> c_6(insert#1#(@x,@l,@x)) insert#1#(tuple#2(@valX,@keyX),@l,@x) -> c_7(insert#2#(@l,@keyX,@valX,@x)) insert#2#(::(@l1,@ls),@keyX,@valX,@x) -> c_8(insert#3#(@l1,@keyX,@ls,@valX,@x)) insert#3#(tuple#2(@vals1,@key1),@keyX,@ls,@valX,@x) -> c_10(insert#4#(#equal(@key1,@keyX) ,@key1 ,@ls ,@valX ,@vals1 ,@x)) insert#4#(#false(),@key1,@ls,@valX,@vals1,@x) -> c_11(insert#(@x,@ls)) quicksort#(@l) -> c_13(quicksort#1#(@l)) quicksort#1#(::(@z,@zs)) -> c_14(quicksort#2#(splitqs(@z,@zs),@z),splitqs#(@z,@zs)) quicksort#2#(tuple#2(@xs,@ys),@z) -> c_16(append#(quicksort(@xs),::(@z,quicksort(@ys))) ,quicksort#(@xs) ,quicksort#(@ys)) - Weak DPs: sortAll#(@l) -> sortAll#1#(@l) sortAll#1#(::(@x,@xs)) -> sortAll#2#(@x,@xs) sortAll#2#(tuple#2(@vals,@key),@xs) -> quicksort#(@vals) sortAll#2#(tuple#2(@vals,@key),@xs) -> sortAll#(@xs) split#(@l) -> split#1#(@l) split#1#(::(@x,@xs)) -> insert#(@x,split(@xs)) split#1#(::(@x,@xs)) -> split#(@xs) splitAndSort#(@l) -> sortAll#(split(@l)) splitAndSort#(@l) -> split#(@l) - Weak TRS: #and(#false(),#false()) -> #false() #and(#false(),#true()) -> #false() #and(#true(),#false()) -> #false() #and(#true(),#true()) -> #true() #ckgt(#EQ()) -> #false() #ckgt(#GT()) -> #true() #ckgt(#LT()) -> #false() #compare(#0(),#0()) -> #EQ() #compare(#0(),#neg(@y)) -> #GT() #compare(#0(),#pos(@y)) -> #LT() #compare(#0(),#s(@y)) -> #LT() #compare(#neg(@x),#0()) -> #LT() #compare(#neg(@x),#neg(@y)) -> #compare(@y,@x) #compare(#neg(@x),#pos(@y)) -> #LT() #compare(#pos(@x),#0()) -> #GT() #compare(#pos(@x),#neg(@y)) -> #GT() #compare(#pos(@x),#pos(@y)) -> #compare(@x,@y) #compare(#s(@x),#0()) -> #GT() #compare(#s(@x),#s(@y)) -> #compare(@x,@y) #eq(#0(),#0()) -> #true() #eq(#0(),#neg(@y)) -> #false() #eq(#0(),#pos(@y)) -> #false() #eq(#0(),#s(@y)) -> #false() #eq(#neg(@x),#0()) -> #false() #eq(#neg(@x),#neg(@y)) -> #eq(@x,@y) #eq(#neg(@x),#pos(@y)) -> #false() #eq(#pos(@x),#0()) -> #false() #eq(#pos(@x),#neg(@y)) -> #false() #eq(#pos(@x),#pos(@y)) -> #eq(@x,@y) #eq(#s(@x),#0()) -> #false() #eq(#s(@x),#s(@y)) -> #eq(@x,@y) #eq(::(@x_1,@x_2),::(@y_1,@y_2)) -> #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #eq(::(@x_1,@x_2),nil()) -> #false() #eq(::(@x_1,@x_2),tuple#2(@y_1,@y_2)) -> #false() #eq(nil(),::(@y_1,@y_2)) -> #false() #eq(nil(),nil()) -> #true() #eq(nil(),tuple#2(@y_1,@y_2)) -> #false() #eq(tuple#2(@x_1,@x_2),::(@y_1,@y_2)) -> #false() #eq(tuple#2(@x_1,@x_2),nil()) -> #false() #eq(tuple#2(@x_1,@x_2),tuple#2(@y_1,@y_2)) -> #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #equal(@x,@y) -> #eq(@x,@y) #greater(@x,@y) -> #ckgt(#compare(@x,@y)) append(@l,@ys) -> append#1(@l,@ys) append#1(::(@x,@xs),@ys) -> ::(@x,append(@xs,@ys)) append#1(nil(),@ys) -> @ys insert(@x,@l) -> insert#1(@x,@l,@x) insert#1(tuple#2(@valX,@keyX),@l,@x) -> insert#2(@l,@keyX,@valX,@x) insert#2(::(@l1,@ls),@keyX,@valX,@x) -> insert#3(@l1,@keyX,@ls,@valX,@x) insert#2(nil(),@keyX,@valX,@x) -> ::(tuple#2(::(@valX,nil()),@keyX),nil()) insert#3(tuple#2(@vals1,@key1),@keyX,@ls,@valX,@x) -> insert#4(#equal(@key1,@keyX) ,@key1 ,@ls ,@valX ,@vals1 ,@x) insert#4(#false(),@key1,@ls,@valX,@vals1,@x) -> ::(tuple#2(@vals1,@key1),insert(@x,@ls)) insert#4(#true(),@key1,@ls,@valX,@vals1,@x) -> ::(tuple#2(::(@valX,@vals1),@key1),@ls) quicksort(@l) -> quicksort#1(@l) quicksort#1(::(@z,@zs)) -> quicksort#2(splitqs(@z,@zs),@z) quicksort#1(nil()) -> nil() quicksort#2(tuple#2(@xs,@ys),@z) -> append(quicksort(@xs),::(@z,quicksort(@ys))) split(@l) -> split#1(@l) split#1(::(@x,@xs)) -> insert(@x,split(@xs)) split#1(nil()) -> nil() splitqs(@pivot,@l) -> splitqs#1(@l,@pivot) splitqs#1(::(@x,@xs),@pivot) -> splitqs#2(splitqs(@pivot,@xs),@pivot,@x) splitqs#1(nil(),@pivot) -> tuple#2(nil(),nil()) splitqs#2(tuple#2(@ls,@rs),@pivot,@x) -> splitqs#3(#greater(@x,@pivot),@ls,@rs,@x) splitqs#3(#false(),@ls,@rs,@x) -> tuple#2(::(@x,@ls),@rs) splitqs#3(#true(),@ls,@rs,@x) -> tuple#2(@ls,::(@x,@rs)) - Signature: {#and/2,#ckgt/1,#compare/2,#eq/2,#equal/2,#greater/2,append/2,append#1/2,insert/2,insert#1/3,insert#2/4 ,insert#3/5,insert#4/6,quicksort/1,quicksort#1/1,quicksort#2/2,sortAll/1,sortAll#1/1,sortAll#2/2,split/1 ,split#1/1,splitAndSort/1,splitqs/2,splitqs#1/2,splitqs#2/3,splitqs#3/4,#and#/2,#ckgt#/1,#compare#/2,#eq#/2 ,#equal#/2,#greater#/2,append#/2,append#1#/2,insert#/2,insert#1#/3,insert#2#/4,insert#3#/5,insert#4#/6 ,quicksort#/1,quicksort#1#/1,quicksort#2#/2,sortAll#/1,sortAll#1#/1,sortAll#2#/2,split#/1,split#1#/1 ,splitAndSort#/1,splitqs#/2,splitqs#1#/2,splitqs#2#/3,splitqs#3#/4} / {#0/0,#EQ/0,#GT/0,#LT/0,#false/0 ,#neg/1,#pos/1,#s/1,#true/0,::/2,nil/0,tuple#2/2,c_1/1,c_2/2,c_3/1,c_4/1,c_5/0,c_6/1,c_7/1,c_8/1,c_9/0 ,c_10/1,c_11/1,c_12/0,c_13/1,c_14/2,c_15/0,c_16/3,c_17/1,c_18/1,c_19/0,c_20/2,c_21/1,c_22/2,c_23/0,c_24/2 ,c_25/1,c_26/1,c_27/0,c_28/2,c_29/0,c_30/0,c_31/0,c_32/0,c_33/0,c_34/0,c_35/0,c_36/0,c_37/0,c_38/0,c_39/0 ,c_40/0,c_41/0,c_42/0,c_43/1,c_44/0,c_45/0,c_46/0,c_47/1,c_48/0,c_49/1,c_50/0,c_51/0,c_52/0,c_53/0,c_54/0 ,c_55/1,c_56/0,c_57/0,c_58/0,c_59/1,c_60/0,c_61/1,c_62/3,c_63/0,c_64/0,c_65/0,c_66/0,c_67/0,c_68/0,c_69/0 ,c_70/3} - Obligation: innermost runtime complexity wrt. defined symbols {#and#,#ckgt#,#compare#,#eq#,#equal#,#greater#,append# ,append#1#,insert#,insert#1#,insert#2#,insert#3#,insert#4#,quicksort#,quicksort#1#,quicksort#2#,sortAll# ,sortAll#1#,sortAll#2#,split#,split#1#,splitAndSort#,splitqs#,splitqs#1#,splitqs#2# ,splitqs#3#} and constructors {#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} + Applied Processor: RemoveHeads + Details: Consider the dependency graph 1:S:insert#(@x,@l) -> c_6(insert#1#(@x,@l,@x)) -->_1 insert#1#(tuple#2(@valX,@keyX),@l,@x) -> c_7(insert#2#(@l,@keyX,@valX,@x)):2 2:S:insert#1#(tuple#2(@valX,@keyX),@l,@x) -> c_7(insert#2#(@l,@keyX,@valX,@x)) -->_1 insert#2#(::(@l1,@ls),@keyX,@valX,@x) -> c_8(insert#3#(@l1,@keyX,@ls,@valX,@x)):3 3:S:insert#2#(::(@l1,@ls),@keyX,@valX,@x) -> c_8(insert#3#(@l1,@keyX,@ls,@valX,@x)) -->_1 insert#3#(tuple#2(@vals1,@key1),@keyX,@ls,@valX,@x) -> c_10(insert#4#(#equal(@key1,@keyX) ,@key1 ,@ls ,@valX ,@vals1 ,@x)):4 4:S:insert#3#(tuple#2(@vals1,@key1),@keyX,@ls,@valX,@x) -> c_10(insert#4#(#equal(@key1,@keyX) ,@key1 ,@ls ,@valX ,@vals1 ,@x)) -->_1 insert#4#(#false(),@key1,@ls,@valX,@vals1,@x) -> c_11(insert#(@x,@ls)):5 5:S:insert#4#(#false(),@key1,@ls,@valX,@vals1,@x) -> c_11(insert#(@x,@ls)) -->_1 insert#(@x,@l) -> c_6(insert#1#(@x,@l,@x)):1 6:S:quicksort#(@l) -> c_13(quicksort#1#(@l)) -->_1 quicksort#1#(::(@z,@zs)) -> c_14(quicksort#2#(splitqs(@z,@zs),@z),splitqs#(@z,@zs)):7 7:S:quicksort#1#(::(@z,@zs)) -> c_14(quicksort#2#(splitqs(@z,@zs),@z),splitqs#(@z,@zs)) -->_1 quicksort#2#(tuple#2(@xs,@ys),@z) -> c_16(append#(quicksort(@xs),::(@z,quicksort(@ys))) ,quicksort#(@xs) ,quicksort#(@ys)):8 8:S:quicksort#2#(tuple#2(@xs,@ys),@z) -> c_16(append#(quicksort(@xs),::(@z,quicksort(@ys))) ,quicksort#(@xs) ,quicksort#(@ys)) -->_3 quicksort#(@l) -> c_13(quicksort#1#(@l)):6 -->_2 quicksort#(@l) -> c_13(quicksort#1#(@l)):6 9:W:sortAll#(@l) -> sortAll#1#(@l) -->_1 sortAll#1#(::(@x,@xs)) -> sortAll#2#(@x,@xs):10 10:W:sortAll#1#(::(@x,@xs)) -> sortAll#2#(@x,@xs) -->_1 sortAll#2#(tuple#2(@vals,@key),@xs) -> sortAll#(@xs):12 -->_1 sortAll#2#(tuple#2(@vals,@key),@xs) -> quicksort#(@vals):11 11:W:sortAll#2#(tuple#2(@vals,@key),@xs) -> quicksort#(@vals) -->_1 quicksort#(@l) -> c_13(quicksort#1#(@l)):6 12:W:sortAll#2#(tuple#2(@vals,@key),@xs) -> sortAll#(@xs) -->_1 sortAll#(@l) -> sortAll#1#(@l):9 13:W:split#(@l) -> split#1#(@l) -->_1 split#1#(::(@x,@xs)) -> split#(@xs):15 -->_1 split#1#(::(@x,@xs)) -> insert#(@x,split(@xs)):14 14:W:split#1#(::(@x,@xs)) -> insert#(@x,split(@xs)) -->_1 insert#(@x,@l) -> c_6(insert#1#(@x,@l,@x)):1 15:W:split#1#(::(@x,@xs)) -> split#(@xs) -->_1 split#(@l) -> split#1#(@l):13 16:W:splitAndSort#(@l) -> sortAll#(split(@l)) -->_1 sortAll#(@l) -> sortAll#1#(@l):9 17:W:splitAndSort#(@l) -> split#(@l) -->_1 split#(@l) -> split#1#(@l):13 Following roots of the dependency graph are removed, as the considered set of starting terms is closed under reduction with respect to these rules (modulo compound contexts). [(17,splitAndSort#(@l) -> split#(@l))] *** Step 7.b:1.a:2: SimplifyRHS WORST_CASE(?,O(n^2)) + Considered Problem: - Strict DPs: insert#(@x,@l) -> c_6(insert#1#(@x,@l,@x)) insert#1#(tuple#2(@valX,@keyX),@l,@x) -> c_7(insert#2#(@l,@keyX,@valX,@x)) insert#2#(::(@l1,@ls),@keyX,@valX,@x) -> c_8(insert#3#(@l1,@keyX,@ls,@valX,@x)) insert#3#(tuple#2(@vals1,@key1),@keyX,@ls,@valX,@x) -> c_10(insert#4#(#equal(@key1,@keyX) ,@key1 ,@ls ,@valX ,@vals1 ,@x)) insert#4#(#false(),@key1,@ls,@valX,@vals1,@x) -> c_11(insert#(@x,@ls)) quicksort#(@l) -> c_13(quicksort#1#(@l)) quicksort#1#(::(@z,@zs)) -> c_14(quicksort#2#(splitqs(@z,@zs),@z),splitqs#(@z,@zs)) quicksort#2#(tuple#2(@xs,@ys),@z) -> c_16(append#(quicksort(@xs),::(@z,quicksort(@ys))) ,quicksort#(@xs) ,quicksort#(@ys)) - Weak DPs: sortAll#(@l) -> sortAll#1#(@l) sortAll#1#(::(@x,@xs)) -> sortAll#2#(@x,@xs) sortAll#2#(tuple#2(@vals,@key),@xs) -> quicksort#(@vals) sortAll#2#(tuple#2(@vals,@key),@xs) -> sortAll#(@xs) split#(@l) -> split#1#(@l) split#1#(::(@x,@xs)) -> insert#(@x,split(@xs)) split#1#(::(@x,@xs)) -> split#(@xs) splitAndSort#(@l) -> sortAll#(split(@l)) - Weak TRS: #and(#false(),#false()) -> #false() #and(#false(),#true()) -> #false() #and(#true(),#false()) -> #false() #and(#true(),#true()) -> #true() #ckgt(#EQ()) -> #false() #ckgt(#GT()) -> #true() #ckgt(#LT()) -> #false() #compare(#0(),#0()) -> #EQ() #compare(#0(),#neg(@y)) -> #GT() #compare(#0(),#pos(@y)) -> #LT() #compare(#0(),#s(@y)) -> #LT() #compare(#neg(@x),#0()) -> #LT() #compare(#neg(@x),#neg(@y)) -> #compare(@y,@x) #compare(#neg(@x),#pos(@y)) -> #LT() #compare(#pos(@x),#0()) -> #GT() #compare(#pos(@x),#neg(@y)) -> #GT() #compare(#pos(@x),#pos(@y)) -> #compare(@x,@y) #compare(#s(@x),#0()) -> #GT() #compare(#s(@x),#s(@y)) -> #compare(@x,@y) #eq(#0(),#0()) -> #true() #eq(#0(),#neg(@y)) -> #false() #eq(#0(),#pos(@y)) -> #false() #eq(#0(),#s(@y)) -> #false() #eq(#neg(@x),#0()) -> #false() #eq(#neg(@x),#neg(@y)) -> #eq(@x,@y) #eq(#neg(@x),#pos(@y)) -> #false() #eq(#pos(@x),#0()) -> #false() #eq(#pos(@x),#neg(@y)) -> #false() #eq(#pos(@x),#pos(@y)) -> #eq(@x,@y) #eq(#s(@x),#0()) -> #false() #eq(#s(@x),#s(@y)) -> #eq(@x,@y) #eq(::(@x_1,@x_2),::(@y_1,@y_2)) -> #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #eq(::(@x_1,@x_2),nil()) -> #false() #eq(::(@x_1,@x_2),tuple#2(@y_1,@y_2)) -> #false() #eq(nil(),::(@y_1,@y_2)) -> #false() #eq(nil(),nil()) -> #true() #eq(nil(),tuple#2(@y_1,@y_2)) -> #false() #eq(tuple#2(@x_1,@x_2),::(@y_1,@y_2)) -> #false() #eq(tuple#2(@x_1,@x_2),nil()) -> #false() #eq(tuple#2(@x_1,@x_2),tuple#2(@y_1,@y_2)) -> #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #equal(@x,@y) -> #eq(@x,@y) #greater(@x,@y) -> #ckgt(#compare(@x,@y)) append(@l,@ys) -> append#1(@l,@ys) append#1(::(@x,@xs),@ys) -> ::(@x,append(@xs,@ys)) append#1(nil(),@ys) -> @ys insert(@x,@l) -> insert#1(@x,@l,@x) insert#1(tuple#2(@valX,@keyX),@l,@x) -> insert#2(@l,@keyX,@valX,@x) insert#2(::(@l1,@ls),@keyX,@valX,@x) -> insert#3(@l1,@keyX,@ls,@valX,@x) insert#2(nil(),@keyX,@valX,@x) -> ::(tuple#2(::(@valX,nil()),@keyX),nil()) insert#3(tuple#2(@vals1,@key1),@keyX,@ls,@valX,@x) -> insert#4(#equal(@key1,@keyX) ,@key1 ,@ls ,@valX ,@vals1 ,@x) insert#4(#false(),@key1,@ls,@valX,@vals1,@x) -> ::(tuple#2(@vals1,@key1),insert(@x,@ls)) insert#4(#true(),@key1,@ls,@valX,@vals1,@x) -> ::(tuple#2(::(@valX,@vals1),@key1),@ls) quicksort(@l) -> quicksort#1(@l) quicksort#1(::(@z,@zs)) -> quicksort#2(splitqs(@z,@zs),@z) quicksort#1(nil()) -> nil() quicksort#2(tuple#2(@xs,@ys),@z) -> append(quicksort(@xs),::(@z,quicksort(@ys))) split(@l) -> split#1(@l) split#1(::(@x,@xs)) -> insert(@x,split(@xs)) split#1(nil()) -> nil() splitqs(@pivot,@l) -> splitqs#1(@l,@pivot) splitqs#1(::(@x,@xs),@pivot) -> splitqs#2(splitqs(@pivot,@xs),@pivot,@x) splitqs#1(nil(),@pivot) -> tuple#2(nil(),nil()) splitqs#2(tuple#2(@ls,@rs),@pivot,@x) -> splitqs#3(#greater(@x,@pivot),@ls,@rs,@x) splitqs#3(#false(),@ls,@rs,@x) -> tuple#2(::(@x,@ls),@rs) splitqs#3(#true(),@ls,@rs,@x) -> tuple#2(@ls,::(@x,@rs)) - Signature: {#and/2,#ckgt/1,#compare/2,#eq/2,#equal/2,#greater/2,append/2,append#1/2,insert/2,insert#1/3,insert#2/4 ,insert#3/5,insert#4/6,quicksort/1,quicksort#1/1,quicksort#2/2,sortAll/1,sortAll#1/1,sortAll#2/2,split/1 ,split#1/1,splitAndSort/1,splitqs/2,splitqs#1/2,splitqs#2/3,splitqs#3/4,#and#/2,#ckgt#/1,#compare#/2,#eq#/2 ,#equal#/2,#greater#/2,append#/2,append#1#/2,insert#/2,insert#1#/3,insert#2#/4,insert#3#/5,insert#4#/6 ,quicksort#/1,quicksort#1#/1,quicksort#2#/2,sortAll#/1,sortAll#1#/1,sortAll#2#/2,split#/1,split#1#/1 ,splitAndSort#/1,splitqs#/2,splitqs#1#/2,splitqs#2#/3,splitqs#3#/4} / {#0/0,#EQ/0,#GT/0,#LT/0,#false/0 ,#neg/1,#pos/1,#s/1,#true/0,::/2,nil/0,tuple#2/2,c_1/1,c_2/2,c_3/1,c_4/1,c_5/0,c_6/1,c_7/1,c_8/1,c_9/0 ,c_10/1,c_11/1,c_12/0,c_13/1,c_14/2,c_15/0,c_16/3,c_17/1,c_18/1,c_19/0,c_20/2,c_21/1,c_22/2,c_23/0,c_24/2 ,c_25/1,c_26/1,c_27/0,c_28/2,c_29/0,c_30/0,c_31/0,c_32/0,c_33/0,c_34/0,c_35/0,c_36/0,c_37/0,c_38/0,c_39/0 ,c_40/0,c_41/0,c_42/0,c_43/1,c_44/0,c_45/0,c_46/0,c_47/1,c_48/0,c_49/1,c_50/0,c_51/0,c_52/0,c_53/0,c_54/0 ,c_55/1,c_56/0,c_57/0,c_58/0,c_59/1,c_60/0,c_61/1,c_62/3,c_63/0,c_64/0,c_65/0,c_66/0,c_67/0,c_68/0,c_69/0 ,c_70/3} - Obligation: innermost runtime complexity wrt. defined symbols {#and#,#ckgt#,#compare#,#eq#,#equal#,#greater#,append# ,append#1#,insert#,insert#1#,insert#2#,insert#3#,insert#4#,quicksort#,quicksort#1#,quicksort#2#,sortAll# ,sortAll#1#,sortAll#2#,split#,split#1#,splitAndSort#,splitqs#,splitqs#1#,splitqs#2# ,splitqs#3#} and constructors {#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} + Applied Processor: SimplifyRHS + Details: Consider the dependency graph 1:S:insert#(@x,@l) -> c_6(insert#1#(@x,@l,@x)) -->_1 insert#1#(tuple#2(@valX,@keyX),@l,@x) -> c_7(insert#2#(@l,@keyX,@valX,@x)):2 2:S:insert#1#(tuple#2(@valX,@keyX),@l,@x) -> c_7(insert#2#(@l,@keyX,@valX,@x)) -->_1 insert#2#(::(@l1,@ls),@keyX,@valX,@x) -> c_8(insert#3#(@l1,@keyX,@ls,@valX,@x)):3 3:S:insert#2#(::(@l1,@ls),@keyX,@valX,@x) -> c_8(insert#3#(@l1,@keyX,@ls,@valX,@x)) -->_1 insert#3#(tuple#2(@vals1,@key1),@keyX,@ls,@valX,@x) -> c_10(insert#4#(#equal(@key1,@keyX) ,@key1 ,@ls ,@valX ,@vals1 ,@x)):4 4:S:insert#3#(tuple#2(@vals1,@key1),@keyX,@ls,@valX,@x) -> c_10(insert#4#(#equal(@key1,@keyX) ,@key1 ,@ls ,@valX ,@vals1 ,@x)) -->_1 insert#4#(#false(),@key1,@ls,@valX,@vals1,@x) -> c_11(insert#(@x,@ls)):5 5:S:insert#4#(#false(),@key1,@ls,@valX,@vals1,@x) -> c_11(insert#(@x,@ls)) -->_1 insert#(@x,@l) -> c_6(insert#1#(@x,@l,@x)):1 6:S:quicksort#(@l) -> c_13(quicksort#1#(@l)) -->_1 quicksort#1#(::(@z,@zs)) -> c_14(quicksort#2#(splitqs(@z,@zs),@z),splitqs#(@z,@zs)):7 7:S:quicksort#1#(::(@z,@zs)) -> c_14(quicksort#2#(splitqs(@z,@zs),@z),splitqs#(@z,@zs)) -->_1 quicksort#2#(tuple#2(@xs,@ys),@z) -> c_16(append#(quicksort(@xs),::(@z,quicksort(@ys))) ,quicksort#(@xs) ,quicksort#(@ys)):8 8:S:quicksort#2#(tuple#2(@xs,@ys),@z) -> c_16(append#(quicksort(@xs),::(@z,quicksort(@ys))) ,quicksort#(@xs) ,quicksort#(@ys)) -->_3 quicksort#(@l) -> c_13(quicksort#1#(@l)):6 -->_2 quicksort#(@l) -> c_13(quicksort#1#(@l)):6 9:W:sortAll#(@l) -> sortAll#1#(@l) -->_1 sortAll#1#(::(@x,@xs)) -> sortAll#2#(@x,@xs):10 10:W:sortAll#1#(::(@x,@xs)) -> sortAll#2#(@x,@xs) -->_1 sortAll#2#(tuple#2(@vals,@key),@xs) -> sortAll#(@xs):12 -->_1 sortAll#2#(tuple#2(@vals,@key),@xs) -> quicksort#(@vals):11 11:W:sortAll#2#(tuple#2(@vals,@key),@xs) -> quicksort#(@vals) -->_1 quicksort#(@l) -> c_13(quicksort#1#(@l)):6 12:W:sortAll#2#(tuple#2(@vals,@key),@xs) -> sortAll#(@xs) -->_1 sortAll#(@l) -> sortAll#1#(@l):9 13:W:split#(@l) -> split#1#(@l) -->_1 split#1#(::(@x,@xs)) -> split#(@xs):15 -->_1 split#1#(::(@x,@xs)) -> insert#(@x,split(@xs)):14 14:W:split#1#(::(@x,@xs)) -> insert#(@x,split(@xs)) -->_1 insert#(@x,@l) -> c_6(insert#1#(@x,@l,@x)):1 15:W:split#1#(::(@x,@xs)) -> split#(@xs) -->_1 split#(@l) -> split#1#(@l):13 16:W:splitAndSort#(@l) -> sortAll#(split(@l)) -->_1 sortAll#(@l) -> sortAll#1#(@l):9 Due to missing edges in the depndency graph, the right-hand sides of following rules could be simplified: quicksort#1#(::(@z,@zs)) -> c_14(quicksort#2#(splitqs(@z,@zs),@z)) quicksort#2#(tuple#2(@xs,@ys),@z) -> c_16(quicksort#(@xs),quicksort#(@ys)) *** Step 7.b:1.a:3: UsableRules WORST_CASE(?,O(n^2)) + Considered Problem: - Strict DPs: insert#(@x,@l) -> c_6(insert#1#(@x,@l,@x)) insert#1#(tuple#2(@valX,@keyX),@l,@x) -> c_7(insert#2#(@l,@keyX,@valX,@x)) insert#2#(::(@l1,@ls),@keyX,@valX,@x) -> c_8(insert#3#(@l1,@keyX,@ls,@valX,@x)) insert#3#(tuple#2(@vals1,@key1),@keyX,@ls,@valX,@x) -> c_10(insert#4#(#equal(@key1,@keyX) ,@key1 ,@ls ,@valX ,@vals1 ,@x)) insert#4#(#false(),@key1,@ls,@valX,@vals1,@x) -> c_11(insert#(@x,@ls)) quicksort#(@l) -> c_13(quicksort#1#(@l)) quicksort#1#(::(@z,@zs)) -> c_14(quicksort#2#(splitqs(@z,@zs),@z)) quicksort#2#(tuple#2(@xs,@ys),@z) -> c_16(quicksort#(@xs),quicksort#(@ys)) - Weak DPs: sortAll#(@l) -> sortAll#1#(@l) sortAll#1#(::(@x,@xs)) -> sortAll#2#(@x,@xs) sortAll#2#(tuple#2(@vals,@key),@xs) -> quicksort#(@vals) sortAll#2#(tuple#2(@vals,@key),@xs) -> sortAll#(@xs) split#(@l) -> split#1#(@l) split#1#(::(@x,@xs)) -> insert#(@x,split(@xs)) split#1#(::(@x,@xs)) -> split#(@xs) splitAndSort#(@l) -> sortAll#(split(@l)) - Weak TRS: #and(#false(),#false()) -> #false() #and(#false(),#true()) -> #false() #and(#true(),#false()) -> #false() #and(#true(),#true()) -> #true() #ckgt(#EQ()) -> #false() #ckgt(#GT()) -> #true() #ckgt(#LT()) -> #false() #compare(#0(),#0()) -> #EQ() #compare(#0(),#neg(@y)) -> #GT() #compare(#0(),#pos(@y)) -> #LT() #compare(#0(),#s(@y)) -> #LT() #compare(#neg(@x),#0()) -> #LT() #compare(#neg(@x),#neg(@y)) -> #compare(@y,@x) #compare(#neg(@x),#pos(@y)) -> #LT() #compare(#pos(@x),#0()) -> #GT() #compare(#pos(@x),#neg(@y)) -> #GT() #compare(#pos(@x),#pos(@y)) -> #compare(@x,@y) #compare(#s(@x),#0()) -> #GT() #compare(#s(@x),#s(@y)) -> #compare(@x,@y) #eq(#0(),#0()) -> #true() #eq(#0(),#neg(@y)) -> #false() #eq(#0(),#pos(@y)) -> #false() #eq(#0(),#s(@y)) -> #false() #eq(#neg(@x),#0()) -> #false() #eq(#neg(@x),#neg(@y)) -> #eq(@x,@y) #eq(#neg(@x),#pos(@y)) -> #false() #eq(#pos(@x),#0()) -> #false() #eq(#pos(@x),#neg(@y)) -> #false() #eq(#pos(@x),#pos(@y)) -> #eq(@x,@y) #eq(#s(@x),#0()) -> #false() #eq(#s(@x),#s(@y)) -> #eq(@x,@y) #eq(::(@x_1,@x_2),::(@y_1,@y_2)) -> #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #eq(::(@x_1,@x_2),nil()) -> #false() #eq(::(@x_1,@x_2),tuple#2(@y_1,@y_2)) -> #false() #eq(nil(),::(@y_1,@y_2)) -> #false() #eq(nil(),nil()) -> #true() #eq(nil(),tuple#2(@y_1,@y_2)) -> #false() #eq(tuple#2(@x_1,@x_2),::(@y_1,@y_2)) -> #false() #eq(tuple#2(@x_1,@x_2),nil()) -> #false() #eq(tuple#2(@x_1,@x_2),tuple#2(@y_1,@y_2)) -> #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #equal(@x,@y) -> #eq(@x,@y) #greater(@x,@y) -> #ckgt(#compare(@x,@y)) append(@l,@ys) -> append#1(@l,@ys) append#1(::(@x,@xs),@ys) -> ::(@x,append(@xs,@ys)) append#1(nil(),@ys) -> @ys insert(@x,@l) -> insert#1(@x,@l,@x) insert#1(tuple#2(@valX,@keyX),@l,@x) -> insert#2(@l,@keyX,@valX,@x) insert#2(::(@l1,@ls),@keyX,@valX,@x) -> insert#3(@l1,@keyX,@ls,@valX,@x) insert#2(nil(),@keyX,@valX,@x) -> ::(tuple#2(::(@valX,nil()),@keyX),nil()) insert#3(tuple#2(@vals1,@key1),@keyX,@ls,@valX,@x) -> insert#4(#equal(@key1,@keyX) ,@key1 ,@ls ,@valX ,@vals1 ,@x) insert#4(#false(),@key1,@ls,@valX,@vals1,@x) -> ::(tuple#2(@vals1,@key1),insert(@x,@ls)) insert#4(#true(),@key1,@ls,@valX,@vals1,@x) -> ::(tuple#2(::(@valX,@vals1),@key1),@ls) quicksort(@l) -> quicksort#1(@l) quicksort#1(::(@z,@zs)) -> quicksort#2(splitqs(@z,@zs),@z) quicksort#1(nil()) -> nil() quicksort#2(tuple#2(@xs,@ys),@z) -> append(quicksort(@xs),::(@z,quicksort(@ys))) split(@l) -> split#1(@l) split#1(::(@x,@xs)) -> insert(@x,split(@xs)) split#1(nil()) -> nil() splitqs(@pivot,@l) -> splitqs#1(@l,@pivot) splitqs#1(::(@x,@xs),@pivot) -> splitqs#2(splitqs(@pivot,@xs),@pivot,@x) splitqs#1(nil(),@pivot) -> tuple#2(nil(),nil()) splitqs#2(tuple#2(@ls,@rs),@pivot,@x) -> splitqs#3(#greater(@x,@pivot),@ls,@rs,@x) splitqs#3(#false(),@ls,@rs,@x) -> tuple#2(::(@x,@ls),@rs) splitqs#3(#true(),@ls,@rs,@x) -> tuple#2(@ls,::(@x,@rs)) - Signature: {#and/2,#ckgt/1,#compare/2,#eq/2,#equal/2,#greater/2,append/2,append#1/2,insert/2,insert#1/3,insert#2/4 ,insert#3/5,insert#4/6,quicksort/1,quicksort#1/1,quicksort#2/2,sortAll/1,sortAll#1/1,sortAll#2/2,split/1 ,split#1/1,splitAndSort/1,splitqs/2,splitqs#1/2,splitqs#2/3,splitqs#3/4,#and#/2,#ckgt#/1,#compare#/2,#eq#/2 ,#equal#/2,#greater#/2,append#/2,append#1#/2,insert#/2,insert#1#/3,insert#2#/4,insert#3#/5,insert#4#/6 ,quicksort#/1,quicksort#1#/1,quicksort#2#/2,sortAll#/1,sortAll#1#/1,sortAll#2#/2,split#/1,split#1#/1 ,splitAndSort#/1,splitqs#/2,splitqs#1#/2,splitqs#2#/3,splitqs#3#/4} / {#0/0,#EQ/0,#GT/0,#LT/0,#false/0 ,#neg/1,#pos/1,#s/1,#true/0,::/2,nil/0,tuple#2/2,c_1/1,c_2/2,c_3/1,c_4/1,c_5/0,c_6/1,c_7/1,c_8/1,c_9/0 ,c_10/1,c_11/1,c_12/0,c_13/1,c_14/1,c_15/0,c_16/2,c_17/1,c_18/1,c_19/0,c_20/2,c_21/1,c_22/2,c_23/0,c_24/2 ,c_25/1,c_26/1,c_27/0,c_28/2,c_29/0,c_30/0,c_31/0,c_32/0,c_33/0,c_34/0,c_35/0,c_36/0,c_37/0,c_38/0,c_39/0 ,c_40/0,c_41/0,c_42/0,c_43/1,c_44/0,c_45/0,c_46/0,c_47/1,c_48/0,c_49/1,c_50/0,c_51/0,c_52/0,c_53/0,c_54/0 ,c_55/1,c_56/0,c_57/0,c_58/0,c_59/1,c_60/0,c_61/1,c_62/3,c_63/0,c_64/0,c_65/0,c_66/0,c_67/0,c_68/0,c_69/0 ,c_70/3} - Obligation: innermost runtime complexity wrt. defined symbols {#and#,#ckgt#,#compare#,#eq#,#equal#,#greater#,append# ,append#1#,insert#,insert#1#,insert#2#,insert#3#,insert#4#,quicksort#,quicksort#1#,quicksort#2#,sortAll# ,sortAll#1#,sortAll#2#,split#,split#1#,splitAndSort#,splitqs#,splitqs#1#,splitqs#2# ,splitqs#3#} and constructors {#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} + Applied Processor: UsableRules + Details: We replace rewrite rules by usable rules: #and(#false(),#false()) -> #false() #and(#false(),#true()) -> #false() #and(#true(),#false()) -> #false() #and(#true(),#true()) -> #true() #ckgt(#EQ()) -> #false() #ckgt(#GT()) -> #true() #ckgt(#LT()) -> #false() #compare(#0(),#0()) -> #EQ() #compare(#0(),#neg(@y)) -> #GT() #compare(#0(),#pos(@y)) -> #LT() #compare(#0(),#s(@y)) -> #LT() #compare(#neg(@x),#0()) -> #LT() #compare(#neg(@x),#neg(@y)) -> #compare(@y,@x) #compare(#neg(@x),#pos(@y)) -> #LT() #compare(#pos(@x),#0()) -> #GT() #compare(#pos(@x),#neg(@y)) -> #GT() #compare(#pos(@x),#pos(@y)) -> #compare(@x,@y) #compare(#s(@x),#0()) -> #GT() #compare(#s(@x),#s(@y)) -> #compare(@x,@y) #eq(#0(),#0()) -> #true() #eq(#0(),#neg(@y)) -> #false() #eq(#0(),#pos(@y)) -> #false() #eq(#0(),#s(@y)) -> #false() #eq(#neg(@x),#0()) -> #false() #eq(#neg(@x),#neg(@y)) -> #eq(@x,@y) #eq(#neg(@x),#pos(@y)) -> #false() #eq(#pos(@x),#0()) -> #false() #eq(#pos(@x),#neg(@y)) -> #false() #eq(#pos(@x),#pos(@y)) -> #eq(@x,@y) #eq(#s(@x),#0()) -> #false() #eq(#s(@x),#s(@y)) -> #eq(@x,@y) #eq(::(@x_1,@x_2),::(@y_1,@y_2)) -> #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #eq(::(@x_1,@x_2),nil()) -> #false() #eq(::(@x_1,@x_2),tuple#2(@y_1,@y_2)) -> #false() #eq(nil(),::(@y_1,@y_2)) -> #false() #eq(nil(),nil()) -> #true() #eq(nil(),tuple#2(@y_1,@y_2)) -> #false() #eq(tuple#2(@x_1,@x_2),::(@y_1,@y_2)) -> #false() #eq(tuple#2(@x_1,@x_2),nil()) -> #false() #eq(tuple#2(@x_1,@x_2),tuple#2(@y_1,@y_2)) -> #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #equal(@x,@y) -> #eq(@x,@y) #greater(@x,@y) -> #ckgt(#compare(@x,@y)) insert(@x,@l) -> insert#1(@x,@l,@x) insert#1(tuple#2(@valX,@keyX),@l,@x) -> insert#2(@l,@keyX,@valX,@x) insert#2(::(@l1,@ls),@keyX,@valX,@x) -> insert#3(@l1,@keyX,@ls,@valX,@x) insert#2(nil(),@keyX,@valX,@x) -> ::(tuple#2(::(@valX,nil()),@keyX),nil()) insert#3(tuple#2(@vals1,@key1),@keyX,@ls,@valX,@x) -> insert#4(#equal(@key1,@keyX) ,@key1 ,@ls ,@valX ,@vals1 ,@x) insert#4(#false(),@key1,@ls,@valX,@vals1,@x) -> ::(tuple#2(@vals1,@key1),insert(@x,@ls)) insert#4(#true(),@key1,@ls,@valX,@vals1,@x) -> ::(tuple#2(::(@valX,@vals1),@key1),@ls) split(@l) -> split#1(@l) split#1(::(@x,@xs)) -> insert(@x,split(@xs)) split#1(nil()) -> nil() splitqs(@pivot,@l) -> splitqs#1(@l,@pivot) splitqs#1(::(@x,@xs),@pivot) -> splitqs#2(splitqs(@pivot,@xs),@pivot,@x) splitqs#1(nil(),@pivot) -> tuple#2(nil(),nil()) splitqs#2(tuple#2(@ls,@rs),@pivot,@x) -> splitqs#3(#greater(@x,@pivot),@ls,@rs,@x) splitqs#3(#false(),@ls,@rs,@x) -> tuple#2(::(@x,@ls),@rs) splitqs#3(#true(),@ls,@rs,@x) -> tuple#2(@ls,::(@x,@rs)) insert#(@x,@l) -> c_6(insert#1#(@x,@l,@x)) insert#1#(tuple#2(@valX,@keyX),@l,@x) -> c_7(insert#2#(@l,@keyX,@valX,@x)) insert#2#(::(@l1,@ls),@keyX,@valX,@x) -> c_8(insert#3#(@l1,@keyX,@ls,@valX,@x)) insert#3#(tuple#2(@vals1,@key1),@keyX,@ls,@valX,@x) -> c_10(insert#4#(#equal(@key1,@keyX) ,@key1 ,@ls ,@valX ,@vals1 ,@x)) insert#4#(#false(),@key1,@ls,@valX,@vals1,@x) -> c_11(insert#(@x,@ls)) quicksort#(@l) -> c_13(quicksort#1#(@l)) quicksort#1#(::(@z,@zs)) -> c_14(quicksort#2#(splitqs(@z,@zs),@z)) quicksort#2#(tuple#2(@xs,@ys),@z) -> c_16(quicksort#(@xs),quicksort#(@ys)) sortAll#(@l) -> sortAll#1#(@l) sortAll#1#(::(@x,@xs)) -> sortAll#2#(@x,@xs) sortAll#2#(tuple#2(@vals,@key),@xs) -> quicksort#(@vals) sortAll#2#(tuple#2(@vals,@key),@xs) -> sortAll#(@xs) split#(@l) -> split#1#(@l) split#1#(::(@x,@xs)) -> insert#(@x,split(@xs)) split#1#(::(@x,@xs)) -> split#(@xs) splitAndSort#(@l) -> sortAll#(split(@l)) *** Step 7.b:1.a:4: WeightGap WORST_CASE(?,O(n^2)) + Considered Problem: - Strict DPs: insert#(@x,@l) -> c_6(insert#1#(@x,@l,@x)) insert#1#(tuple#2(@valX,@keyX),@l,@x) -> c_7(insert#2#(@l,@keyX,@valX,@x)) insert#2#(::(@l1,@ls),@keyX,@valX,@x) -> c_8(insert#3#(@l1,@keyX,@ls,@valX,@x)) insert#3#(tuple#2(@vals1,@key1),@keyX,@ls,@valX,@x) -> c_10(insert#4#(#equal(@key1,@keyX) ,@key1 ,@ls ,@valX ,@vals1 ,@x)) insert#4#(#false(),@key1,@ls,@valX,@vals1,@x) -> c_11(insert#(@x,@ls)) quicksort#(@l) -> c_13(quicksort#1#(@l)) quicksort#1#(::(@z,@zs)) -> c_14(quicksort#2#(splitqs(@z,@zs),@z)) quicksort#2#(tuple#2(@xs,@ys),@z) -> c_16(quicksort#(@xs),quicksort#(@ys)) - Weak DPs: sortAll#(@l) -> sortAll#1#(@l) sortAll#1#(::(@x,@xs)) -> sortAll#2#(@x,@xs) sortAll#2#(tuple#2(@vals,@key),@xs) -> quicksort#(@vals) sortAll#2#(tuple#2(@vals,@key),@xs) -> sortAll#(@xs) split#(@l) -> split#1#(@l) split#1#(::(@x,@xs)) -> insert#(@x,split(@xs)) split#1#(::(@x,@xs)) -> split#(@xs) splitAndSort#(@l) -> sortAll#(split(@l)) - Weak TRS: #and(#false(),#false()) -> #false() #and(#false(),#true()) -> #false() #and(#true(),#false()) -> #false() #and(#true(),#true()) -> #true() #ckgt(#EQ()) -> #false() #ckgt(#GT()) -> #true() #ckgt(#LT()) -> #false() #compare(#0(),#0()) -> #EQ() #compare(#0(),#neg(@y)) -> #GT() #compare(#0(),#pos(@y)) -> #LT() #compare(#0(),#s(@y)) -> #LT() #compare(#neg(@x),#0()) -> #LT() #compare(#neg(@x),#neg(@y)) -> #compare(@y,@x) #compare(#neg(@x),#pos(@y)) -> #LT() #compare(#pos(@x),#0()) -> #GT() #compare(#pos(@x),#neg(@y)) -> #GT() #compare(#pos(@x),#pos(@y)) -> #compare(@x,@y) #compare(#s(@x),#0()) -> #GT() #compare(#s(@x),#s(@y)) -> #compare(@x,@y) #eq(#0(),#0()) -> #true() #eq(#0(),#neg(@y)) -> #false() #eq(#0(),#pos(@y)) -> #false() #eq(#0(),#s(@y)) -> #false() #eq(#neg(@x),#0()) -> #false() #eq(#neg(@x),#neg(@y)) -> #eq(@x,@y) #eq(#neg(@x),#pos(@y)) -> #false() #eq(#pos(@x),#0()) -> #false() #eq(#pos(@x),#neg(@y)) -> #false() #eq(#pos(@x),#pos(@y)) -> #eq(@x,@y) #eq(#s(@x),#0()) -> #false() #eq(#s(@x),#s(@y)) -> #eq(@x,@y) #eq(::(@x_1,@x_2),::(@y_1,@y_2)) -> #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #eq(::(@x_1,@x_2),nil()) -> #false() #eq(::(@x_1,@x_2),tuple#2(@y_1,@y_2)) -> #false() #eq(nil(),::(@y_1,@y_2)) -> #false() #eq(nil(),nil()) -> #true() #eq(nil(),tuple#2(@y_1,@y_2)) -> #false() #eq(tuple#2(@x_1,@x_2),::(@y_1,@y_2)) -> #false() #eq(tuple#2(@x_1,@x_2),nil()) -> #false() #eq(tuple#2(@x_1,@x_2),tuple#2(@y_1,@y_2)) -> #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #equal(@x,@y) -> #eq(@x,@y) #greater(@x,@y) -> #ckgt(#compare(@x,@y)) insert(@x,@l) -> insert#1(@x,@l,@x) insert#1(tuple#2(@valX,@keyX),@l,@x) -> insert#2(@l,@keyX,@valX,@x) insert#2(::(@l1,@ls),@keyX,@valX,@x) -> insert#3(@l1,@keyX,@ls,@valX,@x) insert#2(nil(),@keyX,@valX,@x) -> ::(tuple#2(::(@valX,nil()),@keyX),nil()) insert#3(tuple#2(@vals1,@key1),@keyX,@ls,@valX,@x) -> insert#4(#equal(@key1,@keyX) ,@key1 ,@ls ,@valX ,@vals1 ,@x) insert#4(#false(),@key1,@ls,@valX,@vals1,@x) -> ::(tuple#2(@vals1,@key1),insert(@x,@ls)) insert#4(#true(),@key1,@ls,@valX,@vals1,@x) -> ::(tuple#2(::(@valX,@vals1),@key1),@ls) split(@l) -> split#1(@l) split#1(::(@x,@xs)) -> insert(@x,split(@xs)) split#1(nil()) -> nil() splitqs(@pivot,@l) -> splitqs#1(@l,@pivot) splitqs#1(::(@x,@xs),@pivot) -> splitqs#2(splitqs(@pivot,@xs),@pivot,@x) splitqs#1(nil(),@pivot) -> tuple#2(nil(),nil()) splitqs#2(tuple#2(@ls,@rs),@pivot,@x) -> splitqs#3(#greater(@x,@pivot),@ls,@rs,@x) splitqs#3(#false(),@ls,@rs,@x) -> tuple#2(::(@x,@ls),@rs) splitqs#3(#true(),@ls,@rs,@x) -> tuple#2(@ls,::(@x,@rs)) - Signature: {#and/2,#ckgt/1,#compare/2,#eq/2,#equal/2,#greater/2,append/2,append#1/2,insert/2,insert#1/3,insert#2/4 ,insert#3/5,insert#4/6,quicksort/1,quicksort#1/1,quicksort#2/2,sortAll/1,sortAll#1/1,sortAll#2/2,split/1 ,split#1/1,splitAndSort/1,splitqs/2,splitqs#1/2,splitqs#2/3,splitqs#3/4,#and#/2,#ckgt#/1,#compare#/2,#eq#/2 ,#equal#/2,#greater#/2,append#/2,append#1#/2,insert#/2,insert#1#/3,insert#2#/4,insert#3#/5,insert#4#/6 ,quicksort#/1,quicksort#1#/1,quicksort#2#/2,sortAll#/1,sortAll#1#/1,sortAll#2#/2,split#/1,split#1#/1 ,splitAndSort#/1,splitqs#/2,splitqs#1#/2,splitqs#2#/3,splitqs#3#/4} / {#0/0,#EQ/0,#GT/0,#LT/0,#false/0 ,#neg/1,#pos/1,#s/1,#true/0,::/2,nil/0,tuple#2/2,c_1/1,c_2/2,c_3/1,c_4/1,c_5/0,c_6/1,c_7/1,c_8/1,c_9/0 ,c_10/1,c_11/1,c_12/0,c_13/1,c_14/1,c_15/0,c_16/2,c_17/1,c_18/1,c_19/0,c_20/2,c_21/1,c_22/2,c_23/0,c_24/2 ,c_25/1,c_26/1,c_27/0,c_28/2,c_29/0,c_30/0,c_31/0,c_32/0,c_33/0,c_34/0,c_35/0,c_36/0,c_37/0,c_38/0,c_39/0 ,c_40/0,c_41/0,c_42/0,c_43/1,c_44/0,c_45/0,c_46/0,c_47/1,c_48/0,c_49/1,c_50/0,c_51/0,c_52/0,c_53/0,c_54/0 ,c_55/1,c_56/0,c_57/0,c_58/0,c_59/1,c_60/0,c_61/1,c_62/3,c_63/0,c_64/0,c_65/0,c_66/0,c_67/0,c_68/0,c_69/0 ,c_70/3} - Obligation: innermost runtime complexity wrt. defined symbols {#and#,#ckgt#,#compare#,#eq#,#equal#,#greater#,append# ,append#1#,insert#,insert#1#,insert#2#,insert#3#,insert#4#,quicksort#,quicksort#1#,quicksort#2#,sortAll# ,sortAll#1#,sortAll#2#,split#,split#1#,splitAndSort#,splitqs#,splitqs#1#,splitqs#2# ,splitqs#3#} and constructors {#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} + Applied Processor: WeightGap {wgDimension = 1, wgDegree = 1, wgKind = Algebraic, wgUArgs = UArgs, wgOn = WgOnAny} + Details: The weightgap principle applies using the following constant growth matrix-interpretation: We apply a matrix interpretation of kind constructor based matrix interpretation: The following argument positions are considered usable: uargs(#and) = {1,2}, uargs(#ckgt) = {1}, uargs(::) = {2}, uargs(insert) = {2}, uargs(insert#4) = {1}, uargs(splitqs#2) = {1}, uargs(splitqs#3) = {1}, uargs(insert#) = {2}, uargs(insert#4#) = {1}, uargs(quicksort#2#) = {1}, uargs(sortAll#) = {1}, uargs(c_6) = {1}, uargs(c_7) = {1}, uargs(c_8) = {1}, uargs(c_10) = {1}, uargs(c_11) = {1}, uargs(c_13) = {1}, uargs(c_14) = {1}, uargs(c_16) = {1,2} Following symbols are considered usable: all TcT has computed the following interpretation: p(#0) = [0] p(#EQ) = [0] p(#GT) = [0] p(#LT) = [0] p(#and) = [1] x1 + [1] x2 + [0] p(#ckgt) = [1] x1 + [0] p(#compare) = [0] p(#eq) = [0] p(#equal) = [0] p(#false) = [0] p(#greater) = [0] p(#neg) = [1] x1 + [0] p(#pos) = [1] x1 + [0] p(#s) = [1] x1 + [0] p(#true) = [0] p(::) = [1] x2 + [0] p(append) = [0] p(append#1) = [0] p(insert) = [1] x2 + [0] p(insert#1) = [1] x2 + [0] p(insert#2) = [1] x1 + [0] p(insert#3) = [1] x3 + [0] p(insert#4) = [1] x1 + [1] x3 + [0] p(nil) = [0] p(quicksort) = [0] p(quicksort#1) = [0] p(quicksort#2) = [0] p(sortAll) = [0] p(sortAll#1) = [0] p(sortAll#2) = [0] p(split) = [0] p(split#1) = [0] p(splitAndSort) = [0] p(splitqs) = [6] p(splitqs#1) = [6] p(splitqs#2) = [1] x1 + [0] p(splitqs#3) = [1] x1 + [0] p(tuple#2) = [0] p(#and#) = [0] p(#ckgt#) = [0] p(#compare#) = [0] p(#eq#) = [0] p(#equal#) = [0] p(#greater#) = [0] p(append#) = [0] p(append#1#) = [0] p(insert#) = [1] x2 + [0] p(insert#1#) = [1] x2 + [0] p(insert#2#) = [1] x1 + [0] p(insert#3#) = [1] x3 + [0] p(insert#4#) = [1] x1 + [1] x3 + [0] p(quicksort#) = [0] p(quicksort#1#) = [0] p(quicksort#2#) = [1] x1 + [2] p(sortAll#) = [1] x1 + [0] p(sortAll#1#) = [1] x1 + [0] p(sortAll#2#) = [1] x2 + [0] p(split#) = [0] p(split#1#) = [0] p(splitAndSort#) = [0] p(splitqs#) = [0] p(splitqs#1#) = [0] p(splitqs#2#) = [0] p(splitqs#3#) = [0] p(c_1) = [0] p(c_2) = [0] p(c_3) = [0] p(c_4) = [0] p(c_5) = [0] p(c_6) = [1] x1 + [0] p(c_7) = [1] x1 + [1] p(c_8) = [1] x1 + [3] p(c_9) = [0] p(c_10) = [1] x1 + [1] p(c_11) = [1] x1 + [0] p(c_12) = [0] p(c_13) = [1] x1 + [0] p(c_14) = [1] x1 + [0] p(c_15) = [0] p(c_16) = [1] x1 + [1] x2 + [0] p(c_17) = [0] p(c_18) = [0] p(c_19) = [0] p(c_20) = [0] p(c_21) = [0] p(c_22) = [0] p(c_23) = [0] p(c_24) = [0] p(c_25) = [0] p(c_26) = [0] p(c_27) = [0] p(c_28) = [0] p(c_29) = [0] p(c_30) = [0] p(c_31) = [0] p(c_32) = [0] p(c_33) = [0] p(c_34) = [0] p(c_35) = [0] p(c_36) = [0] p(c_37) = [0] p(c_38) = [0] p(c_39) = [0] p(c_40) = [0] p(c_41) = [0] p(c_42) = [0] p(c_43) = [0] p(c_44) = [0] p(c_45) = [0] p(c_46) = [0] p(c_47) = [0] p(c_48) = [0] p(c_49) = [0] p(c_50) = [0] p(c_51) = [0] p(c_52) = [0] p(c_53) = [0] p(c_54) = [0] p(c_55) = [2] x1 + [0] p(c_56) = [0] p(c_57) = [0] p(c_58) = [0] p(c_59) = [1] x1 + [0] p(c_60) = [0] p(c_61) = [2] p(c_62) = [2] x1 + [1] p(c_63) = [0] p(c_64) = [1] p(c_65) = [1] p(c_66) = [0] p(c_67) = [1] p(c_68) = [1] p(c_69) = [0] p(c_70) = [4] x1 + [1] x2 + [1] x3 + [0] Following rules are strictly oriented: quicksort#2#(tuple#2(@xs,@ys),@z) = [2] > [0] = c_16(quicksort#(@xs),quicksort#(@ys)) Following rules are (at-least) weakly oriented: insert#(@x,@l) = [1] @l + [0] >= [1] @l + [0] = c_6(insert#1#(@x,@l,@x)) insert#1#(tuple#2(@valX,@keyX),@l,@x) = [1] @l + [0] >= [1] @l + [1] = c_7(insert#2#(@l,@keyX,@valX,@x)) insert#2#(::(@l1,@ls),@keyX,@valX,@x) = [1] @ls + [0] >= [1] @ls + [3] = c_8(insert#3#(@l1,@keyX,@ls,@valX,@x)) insert#3#(tuple#2(@vals1,@key1),@keyX,@ls,@valX,@x) = [1] @ls + [0] >= [1] @ls + [1] = c_10(insert#4#(#equal(@key1,@keyX),@key1,@ls,@valX,@vals1,@x)) insert#4#(#false(),@key1,@ls,@valX,@vals1,@x) = [1] @ls + [0] >= [1] @ls + [0] = c_11(insert#(@x,@ls)) quicksort#(@l) = [0] >= [0] = c_13(quicksort#1#(@l)) quicksort#1#(::(@z,@zs)) = [0] >= [8] = c_14(quicksort#2#(splitqs(@z,@zs),@z)) sortAll#(@l) = [1] @l + [0] >= [1] @l + [0] = sortAll#1#(@l) sortAll#1#(::(@x,@xs)) = [1] @xs + [0] >= [1] @xs + [0] = sortAll#2#(@x,@xs) sortAll#2#(tuple#2(@vals,@key),@xs) = [1] @xs + [0] >= [0] = quicksort#(@vals) sortAll#2#(tuple#2(@vals,@key),@xs) = [1] @xs + [0] >= [1] @xs + [0] = sortAll#(@xs) split#(@l) = [0] >= [0] = split#1#(@l) split#1#(::(@x,@xs)) = [0] >= [0] = insert#(@x,split(@xs)) split#1#(::(@x,@xs)) = [0] >= [0] = split#(@xs) splitAndSort#(@l) = [0] >= [0] = sortAll#(split(@l)) #and(#false(),#false()) = [0] >= [0] = #false() #and(#false(),#true()) = [0] >= [0] = #false() #and(#true(),#false()) = [0] >= [0] = #false() #and(#true(),#true()) = [0] >= [0] = #true() #ckgt(#EQ()) = [0] >= [0] = #false() #ckgt(#GT()) = [0] >= [0] = #true() #ckgt(#LT()) = [0] >= [0] = #false() #compare(#0(),#0()) = [0] >= [0] = #EQ() #compare(#0(),#neg(@y)) = [0] >= [0] = #GT() #compare(#0(),#pos(@y)) = [0] >= [0] = #LT() #compare(#0(),#s(@y)) = [0] >= [0] = #LT() #compare(#neg(@x),#0()) = [0] >= [0] = #LT() #compare(#neg(@x),#neg(@y)) = [0] >= [0] = #compare(@y,@x) #compare(#neg(@x),#pos(@y)) = [0] >= [0] = #LT() #compare(#pos(@x),#0()) = [0] >= [0] = #GT() #compare(#pos(@x),#neg(@y)) = [0] >= [0] = #GT() #compare(#pos(@x),#pos(@y)) = [0] >= [0] = #compare(@x,@y) #compare(#s(@x),#0()) = [0] >= [0] = #GT() #compare(#s(@x),#s(@y)) = [0] >= [0] = #compare(@x,@y) #eq(#0(),#0()) = [0] >= [0] = #true() #eq(#0(),#neg(@y)) = [0] >= [0] = #false() #eq(#0(),#pos(@y)) = [0] >= [0] = #false() #eq(#0(),#s(@y)) = [0] >= [0] = #false() #eq(#neg(@x),#0()) = [0] >= [0] = #false() #eq(#neg(@x),#neg(@y)) = [0] >= [0] = #eq(@x,@y) #eq(#neg(@x),#pos(@y)) = [0] >= [0] = #false() #eq(#pos(@x),#0()) = [0] >= [0] = #false() #eq(#pos(@x),#neg(@y)) = [0] >= [0] = #false() #eq(#pos(@x),#pos(@y)) = [0] >= [0] = #eq(@x,@y) #eq(#s(@x),#0()) = [0] >= [0] = #false() #eq(#s(@x),#s(@y)) = [0] >= [0] = #eq(@x,@y) #eq(::(@x_1,@x_2),::(@y_1,@y_2)) = [0] >= [0] = #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #eq(::(@x_1,@x_2),nil()) = [0] >= [0] = #false() #eq(::(@x_1,@x_2),tuple#2(@y_1,@y_2)) = [0] >= [0] = #false() #eq(nil(),::(@y_1,@y_2)) = [0] >= [0] = #false() #eq(nil(),nil()) = [0] >= [0] = #true() #eq(nil(),tuple#2(@y_1,@y_2)) = [0] >= [0] = #false() #eq(tuple#2(@x_1,@x_2),::(@y_1,@y_2)) = [0] >= [0] = #false() #eq(tuple#2(@x_1,@x_2),nil()) = [0] >= [0] = #false() #eq(tuple#2(@x_1,@x_2),tuple#2(@y_1,@y_2)) = [0] >= [0] = #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #equal(@x,@y) = [0] >= [0] = #eq(@x,@y) #greater(@x,@y) = [0] >= [0] = #ckgt(#compare(@x,@y)) insert(@x,@l) = [1] @l + [0] >= [1] @l + [0] = insert#1(@x,@l,@x) insert#1(tuple#2(@valX,@keyX),@l,@x) = [1] @l + [0] >= [1] @l + [0] = insert#2(@l,@keyX,@valX,@x) insert#2(::(@l1,@ls),@keyX,@valX,@x) = [1] @ls + [0] >= [1] @ls + [0] = insert#3(@l1,@keyX,@ls,@valX,@x) insert#2(nil(),@keyX,@valX,@x) = [0] >= [0] = ::(tuple#2(::(@valX,nil()),@keyX),nil()) insert#3(tuple#2(@vals1,@key1),@keyX,@ls,@valX,@x) = [1] @ls + [0] >= [1] @ls + [0] = insert#4(#equal(@key1,@keyX),@key1,@ls,@valX,@vals1,@x) insert#4(#false(),@key1,@ls,@valX,@vals1,@x) = [1] @ls + [0] >= [1] @ls + [0] = ::(tuple#2(@vals1,@key1),insert(@x,@ls)) insert#4(#true(),@key1,@ls,@valX,@vals1,@x) = [1] @ls + [0] >= [1] @ls + [0] = ::(tuple#2(::(@valX,@vals1),@key1),@ls) split(@l) = [0] >= [0] = split#1(@l) split#1(::(@x,@xs)) = [0] >= [0] = insert(@x,split(@xs)) split#1(nil()) = [0] >= [0] = nil() splitqs(@pivot,@l) = [6] >= [6] = splitqs#1(@l,@pivot) splitqs#1(::(@x,@xs),@pivot) = [6] >= [6] = splitqs#2(splitqs(@pivot,@xs),@pivot,@x) splitqs#1(nil(),@pivot) = [6] >= [0] = tuple#2(nil(),nil()) splitqs#2(tuple#2(@ls,@rs),@pivot,@x) = [0] >= [0] = splitqs#3(#greater(@x,@pivot),@ls,@rs,@x) splitqs#3(#false(),@ls,@rs,@x) = [0] >= [0] = tuple#2(::(@x,@ls),@rs) splitqs#3(#true(),@ls,@rs,@x) = [0] >= [0] = tuple#2(@ls,::(@x,@rs)) Further, it can be verified that all rules not oriented are covered by the weightgap condition. *** Step 7.b:1.a:5: WeightGap WORST_CASE(?,O(n^2)) + Considered Problem: - Strict DPs: insert#(@x,@l) -> c_6(insert#1#(@x,@l,@x)) insert#1#(tuple#2(@valX,@keyX),@l,@x) -> c_7(insert#2#(@l,@keyX,@valX,@x)) insert#2#(::(@l1,@ls),@keyX,@valX,@x) -> c_8(insert#3#(@l1,@keyX,@ls,@valX,@x)) insert#3#(tuple#2(@vals1,@key1),@keyX,@ls,@valX,@x) -> c_10(insert#4#(#equal(@key1,@keyX) ,@key1 ,@ls ,@valX ,@vals1 ,@x)) insert#4#(#false(),@key1,@ls,@valX,@vals1,@x) -> c_11(insert#(@x,@ls)) quicksort#(@l) -> c_13(quicksort#1#(@l)) quicksort#1#(::(@z,@zs)) -> c_14(quicksort#2#(splitqs(@z,@zs),@z)) - Weak DPs: quicksort#2#(tuple#2(@xs,@ys),@z) -> c_16(quicksort#(@xs),quicksort#(@ys)) sortAll#(@l) -> sortAll#1#(@l) sortAll#1#(::(@x,@xs)) -> sortAll#2#(@x,@xs) sortAll#2#(tuple#2(@vals,@key),@xs) -> quicksort#(@vals) sortAll#2#(tuple#2(@vals,@key),@xs) -> sortAll#(@xs) split#(@l) -> split#1#(@l) split#1#(::(@x,@xs)) -> insert#(@x,split(@xs)) split#1#(::(@x,@xs)) -> split#(@xs) splitAndSort#(@l) -> sortAll#(split(@l)) - Weak TRS: #and(#false(),#false()) -> #false() #and(#false(),#true()) -> #false() #and(#true(),#false()) -> #false() #and(#true(),#true()) -> #true() #ckgt(#EQ()) -> #false() #ckgt(#GT()) -> #true() #ckgt(#LT()) -> #false() #compare(#0(),#0()) -> #EQ() #compare(#0(),#neg(@y)) -> #GT() #compare(#0(),#pos(@y)) -> #LT() #compare(#0(),#s(@y)) -> #LT() #compare(#neg(@x),#0()) -> #LT() #compare(#neg(@x),#neg(@y)) -> #compare(@y,@x) #compare(#neg(@x),#pos(@y)) -> #LT() #compare(#pos(@x),#0()) -> #GT() #compare(#pos(@x),#neg(@y)) -> #GT() #compare(#pos(@x),#pos(@y)) -> #compare(@x,@y) #compare(#s(@x),#0()) -> #GT() #compare(#s(@x),#s(@y)) -> #compare(@x,@y) #eq(#0(),#0()) -> #true() #eq(#0(),#neg(@y)) -> #false() #eq(#0(),#pos(@y)) -> #false() #eq(#0(),#s(@y)) -> #false() #eq(#neg(@x),#0()) -> #false() #eq(#neg(@x),#neg(@y)) -> #eq(@x,@y) #eq(#neg(@x),#pos(@y)) -> #false() #eq(#pos(@x),#0()) -> #false() #eq(#pos(@x),#neg(@y)) -> #false() #eq(#pos(@x),#pos(@y)) -> #eq(@x,@y) #eq(#s(@x),#0()) -> #false() #eq(#s(@x),#s(@y)) -> #eq(@x,@y) #eq(::(@x_1,@x_2),::(@y_1,@y_2)) -> #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #eq(::(@x_1,@x_2),nil()) -> #false() #eq(::(@x_1,@x_2),tuple#2(@y_1,@y_2)) -> #false() #eq(nil(),::(@y_1,@y_2)) -> #false() #eq(nil(),nil()) -> #true() #eq(nil(),tuple#2(@y_1,@y_2)) -> #false() #eq(tuple#2(@x_1,@x_2),::(@y_1,@y_2)) -> #false() #eq(tuple#2(@x_1,@x_2),nil()) -> #false() #eq(tuple#2(@x_1,@x_2),tuple#2(@y_1,@y_2)) -> #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #equal(@x,@y) -> #eq(@x,@y) #greater(@x,@y) -> #ckgt(#compare(@x,@y)) insert(@x,@l) -> insert#1(@x,@l,@x) insert#1(tuple#2(@valX,@keyX),@l,@x) -> insert#2(@l,@keyX,@valX,@x) insert#2(::(@l1,@ls),@keyX,@valX,@x) -> insert#3(@l1,@keyX,@ls,@valX,@x) insert#2(nil(),@keyX,@valX,@x) -> ::(tuple#2(::(@valX,nil()),@keyX),nil()) insert#3(tuple#2(@vals1,@key1),@keyX,@ls,@valX,@x) -> insert#4(#equal(@key1,@keyX) ,@key1 ,@ls ,@valX ,@vals1 ,@x) insert#4(#false(),@key1,@ls,@valX,@vals1,@x) -> ::(tuple#2(@vals1,@key1),insert(@x,@ls)) insert#4(#true(),@key1,@ls,@valX,@vals1,@x) -> ::(tuple#2(::(@valX,@vals1),@key1),@ls) split(@l) -> split#1(@l) split#1(::(@x,@xs)) -> insert(@x,split(@xs)) split#1(nil()) -> nil() splitqs(@pivot,@l) -> splitqs#1(@l,@pivot) splitqs#1(::(@x,@xs),@pivot) -> splitqs#2(splitqs(@pivot,@xs),@pivot,@x) splitqs#1(nil(),@pivot) -> tuple#2(nil(),nil()) splitqs#2(tuple#2(@ls,@rs),@pivot,@x) -> splitqs#3(#greater(@x,@pivot),@ls,@rs,@x) splitqs#3(#false(),@ls,@rs,@x) -> tuple#2(::(@x,@ls),@rs) splitqs#3(#true(),@ls,@rs,@x) -> tuple#2(@ls,::(@x,@rs)) - Signature: {#and/2,#ckgt/1,#compare/2,#eq/2,#equal/2,#greater/2,append/2,append#1/2,insert/2,insert#1/3,insert#2/4 ,insert#3/5,insert#4/6,quicksort/1,quicksort#1/1,quicksort#2/2,sortAll/1,sortAll#1/1,sortAll#2/2,split/1 ,split#1/1,splitAndSort/1,splitqs/2,splitqs#1/2,splitqs#2/3,splitqs#3/4,#and#/2,#ckgt#/1,#compare#/2,#eq#/2 ,#equal#/2,#greater#/2,append#/2,append#1#/2,insert#/2,insert#1#/3,insert#2#/4,insert#3#/5,insert#4#/6 ,quicksort#/1,quicksort#1#/1,quicksort#2#/2,sortAll#/1,sortAll#1#/1,sortAll#2#/2,split#/1,split#1#/1 ,splitAndSort#/1,splitqs#/2,splitqs#1#/2,splitqs#2#/3,splitqs#3#/4} / {#0/0,#EQ/0,#GT/0,#LT/0,#false/0 ,#neg/1,#pos/1,#s/1,#true/0,::/2,nil/0,tuple#2/2,c_1/1,c_2/2,c_3/1,c_4/1,c_5/0,c_6/1,c_7/1,c_8/1,c_9/0 ,c_10/1,c_11/1,c_12/0,c_13/1,c_14/1,c_15/0,c_16/2,c_17/1,c_18/1,c_19/0,c_20/2,c_21/1,c_22/2,c_23/0,c_24/2 ,c_25/1,c_26/1,c_27/0,c_28/2,c_29/0,c_30/0,c_31/0,c_32/0,c_33/0,c_34/0,c_35/0,c_36/0,c_37/0,c_38/0,c_39/0 ,c_40/0,c_41/0,c_42/0,c_43/1,c_44/0,c_45/0,c_46/0,c_47/1,c_48/0,c_49/1,c_50/0,c_51/0,c_52/0,c_53/0,c_54/0 ,c_55/1,c_56/0,c_57/0,c_58/0,c_59/1,c_60/0,c_61/1,c_62/3,c_63/0,c_64/0,c_65/0,c_66/0,c_67/0,c_68/0,c_69/0 ,c_70/3} - Obligation: innermost runtime complexity wrt. defined symbols {#and#,#ckgt#,#compare#,#eq#,#equal#,#greater#,append# ,append#1#,insert#,insert#1#,insert#2#,insert#3#,insert#4#,quicksort#,quicksort#1#,quicksort#2#,sortAll# ,sortAll#1#,sortAll#2#,split#,split#1#,splitAndSort#,splitqs#,splitqs#1#,splitqs#2# ,splitqs#3#} and constructors {#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} + Applied Processor: WeightGap {wgDimension = 1, wgDegree = 1, wgKind = Algebraic, wgUArgs = UArgs, wgOn = WgOnAny} + Details: The weightgap principle applies using the following constant growth matrix-interpretation: We apply a matrix interpretation of kind constructor based matrix interpretation: The following argument positions are considered usable: uargs(#and) = {1,2}, uargs(#ckgt) = {1}, uargs(::) = {2}, uargs(insert) = {2}, uargs(insert#4) = {1}, uargs(splitqs#2) = {1}, uargs(splitqs#3) = {1}, uargs(insert#) = {2}, uargs(insert#4#) = {1}, uargs(quicksort#2#) = {1}, uargs(sortAll#) = {1}, uargs(c_6) = {1}, uargs(c_7) = {1}, uargs(c_8) = {1}, uargs(c_10) = {1}, uargs(c_11) = {1}, uargs(c_13) = {1}, uargs(c_14) = {1}, uargs(c_16) = {1,2} Following symbols are considered usable: all TcT has computed the following interpretation: p(#0) = [0] p(#EQ) = [0] p(#GT) = [0] p(#LT) = [0] p(#and) = [1] x1 + [1] x2 + [0] p(#ckgt) = [1] x1 + [0] p(#compare) = [0] p(#eq) = [0] p(#equal) = [0] p(#false) = [0] p(#greater) = [0] p(#neg) = [0] p(#pos) = [0] p(#s) = [1] x1 + [0] p(#true) = [0] p(::) = [1] x2 + [0] p(append) = [0] p(append#1) = [0] p(insert) = [1] x2 + [0] p(insert#1) = [1] x2 + [0] p(insert#2) = [1] x1 + [0] p(insert#3) = [1] x3 + [0] p(insert#4) = [1] x1 + [1] x3 + [0] p(nil) = [0] p(quicksort) = [0] p(quicksort#1) = [0] p(quicksort#2) = [0] p(sortAll) = [0] p(sortAll#1) = [0] p(sortAll#2) = [0] p(split) = [0] p(split#1) = [0] p(splitAndSort) = [0] p(splitqs) = [0] p(splitqs#1) = [0] p(splitqs#2) = [1] x1 + [0] p(splitqs#3) = [1] x1 + [1] x3 + [0] p(tuple#2) = [1] x2 + [0] p(#and#) = [0] p(#ckgt#) = [0] p(#compare#) = [0] p(#eq#) = [0] p(#equal#) = [0] p(#greater#) = [0] p(append#) = [0] p(append#1#) = [0] p(insert#) = [1] x2 + [4] p(insert#1#) = [1] x2 + [0] p(insert#2#) = [1] x1 + [3] p(insert#3#) = [1] x3 + [0] p(insert#4#) = [1] x1 + [1] x3 + [0] p(quicksort#) = [0] p(quicksort#1#) = [0] p(quicksort#2#) = [1] x1 + [0] p(sortAll#) = [1] x1 + [0] p(sortAll#1#) = [1] x1 + [0] p(sortAll#2#) = [1] x2 + [0] p(split#) = [4] p(split#1#) = [4] p(splitAndSort#) = [1] p(splitqs#) = [0] p(splitqs#1#) = [0] p(splitqs#2#) = [0] p(splitqs#3#) = [0] p(c_1) = [0] p(c_2) = [0] p(c_3) = [0] p(c_4) = [0] p(c_5) = [0] p(c_6) = [1] x1 + [0] p(c_7) = [1] x1 + [1] p(c_8) = [1] x1 + [0] p(c_9) = [1] p(c_10) = [1] x1 + [0] p(c_11) = [1] x1 + [1] p(c_12) = [0] p(c_13) = [1] x1 + [3] p(c_14) = [1] x1 + [0] p(c_15) = [0] p(c_16) = [1] x1 + [1] x2 + [0] p(c_17) = [4] p(c_18) = [0] p(c_19) = [0] p(c_20) = [1] x1 + [1] x2 + [4] p(c_21) = [0] p(c_22) = [2] x1 + [1] p(c_23) = [1] p(c_24) = [1] x1 + [0] p(c_25) = [1] x1 + [0] p(c_26) = [2] p(c_27) = [1] p(c_28) = [1] x2 + [0] p(c_29) = [0] p(c_30) = [2] p(c_31) = [0] p(c_32) = [0] p(c_33) = [1] p(c_34) = [2] p(c_35) = [0] p(c_36) = [0] p(c_37) = [1] p(c_38) = [2] p(c_39) = [0] p(c_40) = [0] p(c_41) = [0] p(c_42) = [4] p(c_43) = [1] x1 + [0] p(c_44) = [1] p(c_45) = [2] p(c_46) = [0] p(c_47) = [1] x1 + [1] p(c_48) = [4] p(c_49) = [0] p(c_50) = [4] p(c_51) = [1] p(c_52) = [2] p(c_53) = [0] p(c_54) = [0] p(c_55) = [4] x1 + [1] p(c_56) = [1] p(c_57) = [0] p(c_58) = [1] p(c_59) = [0] p(c_60) = [0] p(c_61) = [0] p(c_62) = [1] p(c_63) = [1] p(c_64) = [0] p(c_65) = [0] p(c_66) = [0] p(c_67) = [4] p(c_68) = [4] p(c_69) = [0] p(c_70) = [2] x1 + [2] x2 + [1] Following rules are strictly oriented: insert#(@x,@l) = [1] @l + [4] > [1] @l + [0] = c_6(insert#1#(@x,@l,@x)) insert#2#(::(@l1,@ls),@keyX,@valX,@x) = [1] @ls + [3] > [1] @ls + [0] = c_8(insert#3#(@l1,@keyX,@ls,@valX,@x)) Following rules are (at-least) weakly oriented: insert#1#(tuple#2(@valX,@keyX),@l,@x) = [1] @l + [0] >= [1] @l + [4] = c_7(insert#2#(@l,@keyX,@valX,@x)) insert#3#(tuple#2(@vals1,@key1),@keyX,@ls,@valX,@x) = [1] @ls + [0] >= [1] @ls + [0] = c_10(insert#4#(#equal(@key1,@keyX),@key1,@ls,@valX,@vals1,@x)) insert#4#(#false(),@key1,@ls,@valX,@vals1,@x) = [1] @ls + [0] >= [1] @ls + [5] = c_11(insert#(@x,@ls)) quicksort#(@l) = [0] >= [3] = c_13(quicksort#1#(@l)) quicksort#1#(::(@z,@zs)) = [0] >= [0] = c_14(quicksort#2#(splitqs(@z,@zs),@z)) quicksort#2#(tuple#2(@xs,@ys),@z) = [1] @ys + [0] >= [0] = c_16(quicksort#(@xs),quicksort#(@ys)) sortAll#(@l) = [1] @l + [0] >= [1] @l + [0] = sortAll#1#(@l) sortAll#1#(::(@x,@xs)) = [1] @xs + [0] >= [1] @xs + [0] = sortAll#2#(@x,@xs) sortAll#2#(tuple#2(@vals,@key),@xs) = [1] @xs + [0] >= [0] = quicksort#(@vals) sortAll#2#(tuple#2(@vals,@key),@xs) = [1] @xs + [0] >= [1] @xs + [0] = sortAll#(@xs) split#(@l) = [4] >= [4] = split#1#(@l) split#1#(::(@x,@xs)) = [4] >= [4] = insert#(@x,split(@xs)) split#1#(::(@x,@xs)) = [4] >= [4] = split#(@xs) splitAndSort#(@l) = [1] >= [0] = sortAll#(split(@l)) #and(#false(),#false()) = [0] >= [0] = #false() #and(#false(),#true()) = [0] >= [0] = #false() #and(#true(),#false()) = [0] >= [0] = #false() #and(#true(),#true()) = [0] >= [0] = #true() #ckgt(#EQ()) = [0] >= [0] = #false() #ckgt(#GT()) = [0] >= [0] = #true() #ckgt(#LT()) = [0] >= [0] = #false() #compare(#0(),#0()) = [0] >= [0] = #EQ() #compare(#0(),#neg(@y)) = [0] >= [0] = #GT() #compare(#0(),#pos(@y)) = [0] >= [0] = #LT() #compare(#0(),#s(@y)) = [0] >= [0] = #LT() #compare(#neg(@x),#0()) = [0] >= [0] = #LT() #compare(#neg(@x),#neg(@y)) = [0] >= [0] = #compare(@y,@x) #compare(#neg(@x),#pos(@y)) = [0] >= [0] = #LT() #compare(#pos(@x),#0()) = [0] >= [0] = #GT() #compare(#pos(@x),#neg(@y)) = [0] >= [0] = #GT() #compare(#pos(@x),#pos(@y)) = [0] >= [0] = #compare(@x,@y) #compare(#s(@x),#0()) = [0] >= [0] = #GT() #compare(#s(@x),#s(@y)) = [0] >= [0] = #compare(@x,@y) #eq(#0(),#0()) = [0] >= [0] = #true() #eq(#0(),#neg(@y)) = [0] >= [0] = #false() #eq(#0(),#pos(@y)) = [0] >= [0] = #false() #eq(#0(),#s(@y)) = [0] >= [0] = #false() #eq(#neg(@x),#0()) = [0] >= [0] = #false() #eq(#neg(@x),#neg(@y)) = [0] >= [0] = #eq(@x,@y) #eq(#neg(@x),#pos(@y)) = [0] >= [0] = #false() #eq(#pos(@x),#0()) = [0] >= [0] = #false() #eq(#pos(@x),#neg(@y)) = [0] >= [0] = #false() #eq(#pos(@x),#pos(@y)) = [0] >= [0] = #eq(@x,@y) #eq(#s(@x),#0()) = [0] >= [0] = #false() #eq(#s(@x),#s(@y)) = [0] >= [0] = #eq(@x,@y) #eq(::(@x_1,@x_2),::(@y_1,@y_2)) = [0] >= [0] = #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #eq(::(@x_1,@x_2),nil()) = [0] >= [0] = #false() #eq(::(@x_1,@x_2),tuple#2(@y_1,@y_2)) = [0] >= [0] = #false() #eq(nil(),::(@y_1,@y_2)) = [0] >= [0] = #false() #eq(nil(),nil()) = [0] >= [0] = #true() #eq(nil(),tuple#2(@y_1,@y_2)) = [0] >= [0] = #false() #eq(tuple#2(@x_1,@x_2),::(@y_1,@y_2)) = [0] >= [0] = #false() #eq(tuple#2(@x_1,@x_2),nil()) = [0] >= [0] = #false() #eq(tuple#2(@x_1,@x_2),tuple#2(@y_1,@y_2)) = [0] >= [0] = #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #equal(@x,@y) = [0] >= [0] = #eq(@x,@y) #greater(@x,@y) = [0] >= [0] = #ckgt(#compare(@x,@y)) insert(@x,@l) = [1] @l + [0] >= [1] @l + [0] = insert#1(@x,@l,@x) insert#1(tuple#2(@valX,@keyX),@l,@x) = [1] @l + [0] >= [1] @l + [0] = insert#2(@l,@keyX,@valX,@x) insert#2(::(@l1,@ls),@keyX,@valX,@x) = [1] @ls + [0] >= [1] @ls + [0] = insert#3(@l1,@keyX,@ls,@valX,@x) insert#2(nil(),@keyX,@valX,@x) = [0] >= [0] = ::(tuple#2(::(@valX,nil()),@keyX),nil()) insert#3(tuple#2(@vals1,@key1),@keyX,@ls,@valX,@x) = [1] @ls + [0] >= [1] @ls + [0] = insert#4(#equal(@key1,@keyX),@key1,@ls,@valX,@vals1,@x) insert#4(#false(),@key1,@ls,@valX,@vals1,@x) = [1] @ls + [0] >= [1] @ls + [0] = ::(tuple#2(@vals1,@key1),insert(@x,@ls)) insert#4(#true(),@key1,@ls,@valX,@vals1,@x) = [1] @ls + [0] >= [1] @ls + [0] = ::(tuple#2(::(@valX,@vals1),@key1),@ls) split(@l) = [0] >= [0] = split#1(@l) split#1(::(@x,@xs)) = [0] >= [0] = insert(@x,split(@xs)) split#1(nil()) = [0] >= [0] = nil() splitqs(@pivot,@l) = [0] >= [0] = splitqs#1(@l,@pivot) splitqs#1(::(@x,@xs),@pivot) = [0] >= [0] = splitqs#2(splitqs(@pivot,@xs),@pivot,@x) splitqs#1(nil(),@pivot) = [0] >= [0] = tuple#2(nil(),nil()) splitqs#2(tuple#2(@ls,@rs),@pivot,@x) = [1] @rs + [0] >= [1] @rs + [0] = splitqs#3(#greater(@x,@pivot),@ls,@rs,@x) splitqs#3(#false(),@ls,@rs,@x) = [1] @rs + [0] >= [1] @rs + [0] = tuple#2(::(@x,@ls),@rs) splitqs#3(#true(),@ls,@rs,@x) = [1] @rs + [0] >= [1] @rs + [0] = tuple#2(@ls,::(@x,@rs)) Further, it can be verified that all rules not oriented are covered by the weightgap condition. *** Step 7.b:1.a:6: WeightGap WORST_CASE(?,O(n^2)) + Considered Problem: - Strict DPs: insert#1#(tuple#2(@valX,@keyX),@l,@x) -> c_7(insert#2#(@l,@keyX,@valX,@x)) insert#3#(tuple#2(@vals1,@key1),@keyX,@ls,@valX,@x) -> c_10(insert#4#(#equal(@key1,@keyX) ,@key1 ,@ls ,@valX ,@vals1 ,@x)) insert#4#(#false(),@key1,@ls,@valX,@vals1,@x) -> c_11(insert#(@x,@ls)) quicksort#(@l) -> c_13(quicksort#1#(@l)) quicksort#1#(::(@z,@zs)) -> c_14(quicksort#2#(splitqs(@z,@zs),@z)) - Weak DPs: insert#(@x,@l) -> c_6(insert#1#(@x,@l,@x)) insert#2#(::(@l1,@ls),@keyX,@valX,@x) -> c_8(insert#3#(@l1,@keyX,@ls,@valX,@x)) quicksort#2#(tuple#2(@xs,@ys),@z) -> c_16(quicksort#(@xs),quicksort#(@ys)) sortAll#(@l) -> sortAll#1#(@l) sortAll#1#(::(@x,@xs)) -> sortAll#2#(@x,@xs) sortAll#2#(tuple#2(@vals,@key),@xs) -> quicksort#(@vals) sortAll#2#(tuple#2(@vals,@key),@xs) -> sortAll#(@xs) split#(@l) -> split#1#(@l) split#1#(::(@x,@xs)) -> insert#(@x,split(@xs)) split#1#(::(@x,@xs)) -> split#(@xs) splitAndSort#(@l) -> sortAll#(split(@l)) - Weak TRS: #and(#false(),#false()) -> #false() #and(#false(),#true()) -> #false() #and(#true(),#false()) -> #false() #and(#true(),#true()) -> #true() #ckgt(#EQ()) -> #false() #ckgt(#GT()) -> #true() #ckgt(#LT()) -> #false() #compare(#0(),#0()) -> #EQ() #compare(#0(),#neg(@y)) -> #GT() #compare(#0(),#pos(@y)) -> #LT() #compare(#0(),#s(@y)) -> #LT() #compare(#neg(@x),#0()) -> #LT() #compare(#neg(@x),#neg(@y)) -> #compare(@y,@x) #compare(#neg(@x),#pos(@y)) -> #LT() #compare(#pos(@x),#0()) -> #GT() #compare(#pos(@x),#neg(@y)) -> #GT() #compare(#pos(@x),#pos(@y)) -> #compare(@x,@y) #compare(#s(@x),#0()) -> #GT() #compare(#s(@x),#s(@y)) -> #compare(@x,@y) #eq(#0(),#0()) -> #true() #eq(#0(),#neg(@y)) -> #false() #eq(#0(),#pos(@y)) -> #false() #eq(#0(),#s(@y)) -> #false() #eq(#neg(@x),#0()) -> #false() #eq(#neg(@x),#neg(@y)) -> #eq(@x,@y) #eq(#neg(@x),#pos(@y)) -> #false() #eq(#pos(@x),#0()) -> #false() #eq(#pos(@x),#neg(@y)) -> #false() #eq(#pos(@x),#pos(@y)) -> #eq(@x,@y) #eq(#s(@x),#0()) -> #false() #eq(#s(@x),#s(@y)) -> #eq(@x,@y) #eq(::(@x_1,@x_2),::(@y_1,@y_2)) -> #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #eq(::(@x_1,@x_2),nil()) -> #false() #eq(::(@x_1,@x_2),tuple#2(@y_1,@y_2)) -> #false() #eq(nil(),::(@y_1,@y_2)) -> #false() #eq(nil(),nil()) -> #true() #eq(nil(),tuple#2(@y_1,@y_2)) -> #false() #eq(tuple#2(@x_1,@x_2),::(@y_1,@y_2)) -> #false() #eq(tuple#2(@x_1,@x_2),nil()) -> #false() #eq(tuple#2(@x_1,@x_2),tuple#2(@y_1,@y_2)) -> #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #equal(@x,@y) -> #eq(@x,@y) #greater(@x,@y) -> #ckgt(#compare(@x,@y)) insert(@x,@l) -> insert#1(@x,@l,@x) insert#1(tuple#2(@valX,@keyX),@l,@x) -> insert#2(@l,@keyX,@valX,@x) insert#2(::(@l1,@ls),@keyX,@valX,@x) -> insert#3(@l1,@keyX,@ls,@valX,@x) insert#2(nil(),@keyX,@valX,@x) -> ::(tuple#2(::(@valX,nil()),@keyX),nil()) insert#3(tuple#2(@vals1,@key1),@keyX,@ls,@valX,@x) -> insert#4(#equal(@key1,@keyX) ,@key1 ,@ls ,@valX ,@vals1 ,@x) insert#4(#false(),@key1,@ls,@valX,@vals1,@x) -> ::(tuple#2(@vals1,@key1),insert(@x,@ls)) insert#4(#true(),@key1,@ls,@valX,@vals1,@x) -> ::(tuple#2(::(@valX,@vals1),@key1),@ls) split(@l) -> split#1(@l) split#1(::(@x,@xs)) -> insert(@x,split(@xs)) split#1(nil()) -> nil() splitqs(@pivot,@l) -> splitqs#1(@l,@pivot) splitqs#1(::(@x,@xs),@pivot) -> splitqs#2(splitqs(@pivot,@xs),@pivot,@x) splitqs#1(nil(),@pivot) -> tuple#2(nil(),nil()) splitqs#2(tuple#2(@ls,@rs),@pivot,@x) -> splitqs#3(#greater(@x,@pivot),@ls,@rs,@x) splitqs#3(#false(),@ls,@rs,@x) -> tuple#2(::(@x,@ls),@rs) splitqs#3(#true(),@ls,@rs,@x) -> tuple#2(@ls,::(@x,@rs)) - Signature: {#and/2,#ckgt/1,#compare/2,#eq/2,#equal/2,#greater/2,append/2,append#1/2,insert/2,insert#1/3,insert#2/4 ,insert#3/5,insert#4/6,quicksort/1,quicksort#1/1,quicksort#2/2,sortAll/1,sortAll#1/1,sortAll#2/2,split/1 ,split#1/1,splitAndSort/1,splitqs/2,splitqs#1/2,splitqs#2/3,splitqs#3/4,#and#/2,#ckgt#/1,#compare#/2,#eq#/2 ,#equal#/2,#greater#/2,append#/2,append#1#/2,insert#/2,insert#1#/3,insert#2#/4,insert#3#/5,insert#4#/6 ,quicksort#/1,quicksort#1#/1,quicksort#2#/2,sortAll#/1,sortAll#1#/1,sortAll#2#/2,split#/1,split#1#/1 ,splitAndSort#/1,splitqs#/2,splitqs#1#/2,splitqs#2#/3,splitqs#3#/4} / {#0/0,#EQ/0,#GT/0,#LT/0,#false/0 ,#neg/1,#pos/1,#s/1,#true/0,::/2,nil/0,tuple#2/2,c_1/1,c_2/2,c_3/1,c_4/1,c_5/0,c_6/1,c_7/1,c_8/1,c_9/0 ,c_10/1,c_11/1,c_12/0,c_13/1,c_14/1,c_15/0,c_16/2,c_17/1,c_18/1,c_19/0,c_20/2,c_21/1,c_22/2,c_23/0,c_24/2 ,c_25/1,c_26/1,c_27/0,c_28/2,c_29/0,c_30/0,c_31/0,c_32/0,c_33/0,c_34/0,c_35/0,c_36/0,c_37/0,c_38/0,c_39/0 ,c_40/0,c_41/0,c_42/0,c_43/1,c_44/0,c_45/0,c_46/0,c_47/1,c_48/0,c_49/1,c_50/0,c_51/0,c_52/0,c_53/0,c_54/0 ,c_55/1,c_56/0,c_57/0,c_58/0,c_59/1,c_60/0,c_61/1,c_62/3,c_63/0,c_64/0,c_65/0,c_66/0,c_67/0,c_68/0,c_69/0 ,c_70/3} - Obligation: innermost runtime complexity wrt. defined symbols {#and#,#ckgt#,#compare#,#eq#,#equal#,#greater#,append# ,append#1#,insert#,insert#1#,insert#2#,insert#3#,insert#4#,quicksort#,quicksort#1#,quicksort#2#,sortAll# ,sortAll#1#,sortAll#2#,split#,split#1#,splitAndSort#,splitqs#,splitqs#1#,splitqs#2# ,splitqs#3#} and constructors {#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} + Applied Processor: WeightGap {wgDimension = 1, wgDegree = 1, wgKind = Algebraic, wgUArgs = UArgs, wgOn = WgOnAny} + Details: The weightgap principle applies using the following constant growth matrix-interpretation: We apply a matrix interpretation of kind constructor based matrix interpretation: The following argument positions are considered usable: uargs(#and) = {1,2}, uargs(#ckgt) = {1}, uargs(::) = {2}, uargs(insert) = {2}, uargs(insert#4) = {1}, uargs(splitqs#2) = {1}, uargs(splitqs#3) = {1}, uargs(insert#) = {2}, uargs(insert#4#) = {1}, uargs(quicksort#2#) = {1}, uargs(sortAll#) = {1}, uargs(c_6) = {1}, uargs(c_7) = {1}, uargs(c_8) = {1}, uargs(c_10) = {1}, uargs(c_11) = {1}, uargs(c_13) = {1}, uargs(c_14) = {1}, uargs(c_16) = {1,2} Following symbols are considered usable: all TcT has computed the following interpretation: p(#0) = [0] p(#EQ) = [0] p(#GT) = [0] p(#LT) = [0] p(#and) = [1] x1 + [1] x2 + [0] p(#ckgt) = [1] x1 + [0] p(#compare) = [0] p(#eq) = [0] p(#equal) = [0] p(#false) = [0] p(#greater) = [0] p(#neg) = [1] x1 + [0] p(#pos) = [1] x1 + [0] p(#s) = [1] x1 + [0] p(#true) = [0] p(::) = [1] x1 + [1] x2 + [0] p(append) = [0] p(append#1) = [0] p(insert) = [1] x2 + [0] p(insert#1) = [1] x2 + [0] p(insert#2) = [1] x1 + [0] p(insert#3) = [1] x3 + [0] p(insert#4) = [1] x1 + [1] x3 + [0] p(nil) = [0] p(quicksort) = [0] p(quicksort#1) = [0] p(quicksort#2) = [0] p(sortAll) = [0] p(sortAll#1) = [0] p(sortAll#2) = [0] p(split) = [2] x1 + [0] p(split#1) = [2] x1 + [0] p(splitAndSort) = [0] p(splitqs) = [0] p(splitqs#1) = [0] p(splitqs#2) = [1] x1 + [0] p(splitqs#3) = [1] x1 + [0] p(tuple#2) = [0] p(#and#) = [0] p(#ckgt#) = [0] p(#compare#) = [0] p(#eq#) = [0] p(#equal#) = [0] p(#greater#) = [0] p(append#) = [0] p(append#1#) = [0] p(insert#) = [1] x2 + [0] p(insert#1#) = [1] x2 + [0] p(insert#2#) = [1] x1 + [6] p(insert#3#) = [1] x1 + [1] x3 + [6] p(insert#4#) = [1] x1 + [1] x3 + [0] p(quicksort#) = [3] p(quicksort#1#) = [0] p(quicksort#2#) = [1] x1 + [7] p(sortAll#) = [1] x1 + [3] p(sortAll#1#) = [1] x1 + [3] p(sortAll#2#) = [1] x2 + [3] p(split#) = [3] x1 + [0] p(split#1#) = [3] x1 + [0] p(splitAndSort#) = [3] x1 + [3] p(splitqs#) = [0] p(splitqs#1#) = [0] p(splitqs#2#) = [0] p(splitqs#3#) = [0] p(c_1) = [0] p(c_2) = [0] p(c_3) = [0] p(c_4) = [0] p(c_5) = [0] p(c_6) = [1] x1 + [0] p(c_7) = [1] x1 + [0] p(c_8) = [1] x1 + [0] p(c_9) = [0] p(c_10) = [1] x1 + [0] p(c_11) = [1] x1 + [0] p(c_12) = [0] p(c_13) = [1] x1 + [0] p(c_14) = [1] x1 + [0] p(c_15) = [0] p(c_16) = [1] x1 + [1] x2 + [1] p(c_17) = [0] p(c_18) = [0] p(c_19) = [0] p(c_20) = [0] p(c_21) = [0] p(c_22) = [0] p(c_23) = [0] p(c_24) = [0] p(c_25) = [0] p(c_26) = [0] p(c_27) = [0] p(c_28) = [0] p(c_29) = [0] p(c_30) = [0] p(c_31) = [0] p(c_32) = [0] p(c_33) = [0] p(c_34) = [0] p(c_35) = [0] p(c_36) = [0] p(c_37) = [0] p(c_38) = [0] p(c_39) = [0] p(c_40) = [0] p(c_41) = [0] p(c_42) = [0] p(c_43) = [0] p(c_44) = [0] p(c_45) = [0] p(c_46) = [0] p(c_47) = [0] p(c_48) = [0] p(c_49) = [0] p(c_50) = [0] p(c_51) = [0] p(c_52) = [0] p(c_53) = [0] p(c_54) = [0] p(c_55) = [0] p(c_56) = [0] p(c_57) = [0] p(c_58) = [0] p(c_59) = [0] p(c_60) = [0] p(c_61) = [0] p(c_62) = [0] p(c_63) = [0] p(c_64) = [0] p(c_65) = [0] p(c_66) = [0] p(c_67) = [0] p(c_68) = [0] p(c_69) = [0] p(c_70) = [0] Following rules are strictly oriented: insert#3#(tuple#2(@vals1,@key1),@keyX,@ls,@valX,@x) = [1] @ls + [6] > [1] @ls + [0] = c_10(insert#4#(#equal(@key1,@keyX),@key1,@ls,@valX,@vals1,@x)) quicksort#(@l) = [3] > [0] = c_13(quicksort#1#(@l)) Following rules are (at-least) weakly oriented: insert#(@x,@l) = [1] @l + [0] >= [1] @l + [0] = c_6(insert#1#(@x,@l,@x)) insert#1#(tuple#2(@valX,@keyX),@l,@x) = [1] @l + [0] >= [1] @l + [6] = c_7(insert#2#(@l,@keyX,@valX,@x)) insert#2#(::(@l1,@ls),@keyX,@valX,@x) = [1] @l1 + [1] @ls + [6] >= [1] @l1 + [1] @ls + [6] = c_8(insert#3#(@l1,@keyX,@ls,@valX,@x)) insert#4#(#false(),@key1,@ls,@valX,@vals1,@x) = [1] @ls + [0] >= [1] @ls + [0] = c_11(insert#(@x,@ls)) quicksort#1#(::(@z,@zs)) = [0] >= [7] = c_14(quicksort#2#(splitqs(@z,@zs),@z)) quicksort#2#(tuple#2(@xs,@ys),@z) = [7] >= [7] = c_16(quicksort#(@xs),quicksort#(@ys)) sortAll#(@l) = [1] @l + [3] >= [1] @l + [3] = sortAll#1#(@l) sortAll#1#(::(@x,@xs)) = [1] @x + [1] @xs + [3] >= [1] @xs + [3] = sortAll#2#(@x,@xs) sortAll#2#(tuple#2(@vals,@key),@xs) = [1] @xs + [3] >= [3] = quicksort#(@vals) sortAll#2#(tuple#2(@vals,@key),@xs) = [1] @xs + [3] >= [1] @xs + [3] = sortAll#(@xs) split#(@l) = [3] @l + [0] >= [3] @l + [0] = split#1#(@l) split#1#(::(@x,@xs)) = [3] @x + [3] @xs + [0] >= [2] @xs + [0] = insert#(@x,split(@xs)) split#1#(::(@x,@xs)) = [3] @x + [3] @xs + [0] >= [3] @xs + [0] = split#(@xs) splitAndSort#(@l) = [3] @l + [3] >= [2] @l + [3] = sortAll#(split(@l)) #and(#false(),#false()) = [0] >= [0] = #false() #and(#false(),#true()) = [0] >= [0] = #false() #and(#true(),#false()) = [0] >= [0] = #false() #and(#true(),#true()) = [0] >= [0] = #true() #ckgt(#EQ()) = [0] >= [0] = #false() #ckgt(#GT()) = [0] >= [0] = #true() #ckgt(#LT()) = [0] >= [0] = #false() #compare(#0(),#0()) = [0] >= [0] = #EQ() #compare(#0(),#neg(@y)) = [0] >= [0] = #GT() #compare(#0(),#pos(@y)) = [0] >= [0] = #LT() #compare(#0(),#s(@y)) = [0] >= [0] = #LT() #compare(#neg(@x),#0()) = [0] >= [0] = #LT() #compare(#neg(@x),#neg(@y)) = [0] >= [0] = #compare(@y,@x) #compare(#neg(@x),#pos(@y)) = [0] >= [0] = #LT() #compare(#pos(@x),#0()) = [0] >= [0] = #GT() #compare(#pos(@x),#neg(@y)) = [0] >= [0] = #GT() #compare(#pos(@x),#pos(@y)) = [0] >= [0] = #compare(@x,@y) #compare(#s(@x),#0()) = [0] >= [0] = #GT() #compare(#s(@x),#s(@y)) = [0] >= [0] = #compare(@x,@y) #eq(#0(),#0()) = [0] >= [0] = #true() #eq(#0(),#neg(@y)) = [0] >= [0] = #false() #eq(#0(),#pos(@y)) = [0] >= [0] = #false() #eq(#0(),#s(@y)) = [0] >= [0] = #false() #eq(#neg(@x),#0()) = [0] >= [0] = #false() #eq(#neg(@x),#neg(@y)) = [0] >= [0] = #eq(@x,@y) #eq(#neg(@x),#pos(@y)) = [0] >= [0] = #false() #eq(#pos(@x),#0()) = [0] >= [0] = #false() #eq(#pos(@x),#neg(@y)) = [0] >= [0] = #false() #eq(#pos(@x),#pos(@y)) = [0] >= [0] = #eq(@x,@y) #eq(#s(@x),#0()) = [0] >= [0] = #false() #eq(#s(@x),#s(@y)) = [0] >= [0] = #eq(@x,@y) #eq(::(@x_1,@x_2),::(@y_1,@y_2)) = [0] >= [0] = #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #eq(::(@x_1,@x_2),nil()) = [0] >= [0] = #false() #eq(::(@x_1,@x_2),tuple#2(@y_1,@y_2)) = [0] >= [0] = #false() #eq(nil(),::(@y_1,@y_2)) = [0] >= [0] = #false() #eq(nil(),nil()) = [0] >= [0] = #true() #eq(nil(),tuple#2(@y_1,@y_2)) = [0] >= [0] = #false() #eq(tuple#2(@x_1,@x_2),::(@y_1,@y_2)) = [0] >= [0] = #false() #eq(tuple#2(@x_1,@x_2),nil()) = [0] >= [0] = #false() #eq(tuple#2(@x_1,@x_2),tuple#2(@y_1,@y_2)) = [0] >= [0] = #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #equal(@x,@y) = [0] >= [0] = #eq(@x,@y) #greater(@x,@y) = [0] >= [0] = #ckgt(#compare(@x,@y)) insert(@x,@l) = [1] @l + [0] >= [1] @l + [0] = insert#1(@x,@l,@x) insert#1(tuple#2(@valX,@keyX),@l,@x) = [1] @l + [0] >= [1] @l + [0] = insert#2(@l,@keyX,@valX,@x) insert#2(::(@l1,@ls),@keyX,@valX,@x) = [1] @l1 + [1] @ls + [0] >= [1] @ls + [0] = insert#3(@l1,@keyX,@ls,@valX,@x) insert#2(nil(),@keyX,@valX,@x) = [0] >= [0] = ::(tuple#2(::(@valX,nil()),@keyX),nil()) insert#3(tuple#2(@vals1,@key1),@keyX,@ls,@valX,@x) = [1] @ls + [0] >= [1] @ls + [0] = insert#4(#equal(@key1,@keyX),@key1,@ls,@valX,@vals1,@x) insert#4(#false(),@key1,@ls,@valX,@vals1,@x) = [1] @ls + [0] >= [1] @ls + [0] = ::(tuple#2(@vals1,@key1),insert(@x,@ls)) insert#4(#true(),@key1,@ls,@valX,@vals1,@x) = [1] @ls + [0] >= [1] @ls + [0] = ::(tuple#2(::(@valX,@vals1),@key1),@ls) split(@l) = [2] @l + [0] >= [2] @l + [0] = split#1(@l) split#1(::(@x,@xs)) = [2] @x + [2] @xs + [0] >= [2] @xs + [0] = insert(@x,split(@xs)) split#1(nil()) = [0] >= [0] = nil() splitqs(@pivot,@l) = [0] >= [0] = splitqs#1(@l,@pivot) splitqs#1(::(@x,@xs),@pivot) = [0] >= [0] = splitqs#2(splitqs(@pivot,@xs),@pivot,@x) splitqs#1(nil(),@pivot) = [0] >= [0] = tuple#2(nil(),nil()) splitqs#2(tuple#2(@ls,@rs),@pivot,@x) = [0] >= [0] = splitqs#3(#greater(@x,@pivot),@ls,@rs,@x) splitqs#3(#false(),@ls,@rs,@x) = [0] >= [0] = tuple#2(::(@x,@ls),@rs) splitqs#3(#true(),@ls,@rs,@x) = [0] >= [0] = tuple#2(@ls,::(@x,@rs)) Further, it can be verified that all rules not oriented are covered by the weightgap condition. *** Step 7.b:1.a:7: WeightGap WORST_CASE(?,O(n^2)) + Considered Problem: - Strict DPs: insert#1#(tuple#2(@valX,@keyX),@l,@x) -> c_7(insert#2#(@l,@keyX,@valX,@x)) insert#4#(#false(),@key1,@ls,@valX,@vals1,@x) -> c_11(insert#(@x,@ls)) quicksort#1#(::(@z,@zs)) -> c_14(quicksort#2#(splitqs(@z,@zs),@z)) - Weak DPs: insert#(@x,@l) -> c_6(insert#1#(@x,@l,@x)) insert#2#(::(@l1,@ls),@keyX,@valX,@x) -> c_8(insert#3#(@l1,@keyX,@ls,@valX,@x)) insert#3#(tuple#2(@vals1,@key1),@keyX,@ls,@valX,@x) -> c_10(insert#4#(#equal(@key1,@keyX) ,@key1 ,@ls ,@valX ,@vals1 ,@x)) quicksort#(@l) -> c_13(quicksort#1#(@l)) quicksort#2#(tuple#2(@xs,@ys),@z) -> c_16(quicksort#(@xs),quicksort#(@ys)) sortAll#(@l) -> sortAll#1#(@l) sortAll#1#(::(@x,@xs)) -> sortAll#2#(@x,@xs) sortAll#2#(tuple#2(@vals,@key),@xs) -> quicksort#(@vals) sortAll#2#(tuple#2(@vals,@key),@xs) -> sortAll#(@xs) split#(@l) -> split#1#(@l) split#1#(::(@x,@xs)) -> insert#(@x,split(@xs)) split#1#(::(@x,@xs)) -> split#(@xs) splitAndSort#(@l) -> sortAll#(split(@l)) - Weak TRS: #and(#false(),#false()) -> #false() #and(#false(),#true()) -> #false() #and(#true(),#false()) -> #false() #and(#true(),#true()) -> #true() #ckgt(#EQ()) -> #false() #ckgt(#GT()) -> #true() #ckgt(#LT()) -> #false() #compare(#0(),#0()) -> #EQ() #compare(#0(),#neg(@y)) -> #GT() #compare(#0(),#pos(@y)) -> #LT() #compare(#0(),#s(@y)) -> #LT() #compare(#neg(@x),#0()) -> #LT() #compare(#neg(@x),#neg(@y)) -> #compare(@y,@x) #compare(#neg(@x),#pos(@y)) -> #LT() #compare(#pos(@x),#0()) -> #GT() #compare(#pos(@x),#neg(@y)) -> #GT() #compare(#pos(@x),#pos(@y)) -> #compare(@x,@y) #compare(#s(@x),#0()) -> #GT() #compare(#s(@x),#s(@y)) -> #compare(@x,@y) #eq(#0(),#0()) -> #true() #eq(#0(),#neg(@y)) -> #false() #eq(#0(),#pos(@y)) -> #false() #eq(#0(),#s(@y)) -> #false() #eq(#neg(@x),#0()) -> #false() #eq(#neg(@x),#neg(@y)) -> #eq(@x,@y) #eq(#neg(@x),#pos(@y)) -> #false() #eq(#pos(@x),#0()) -> #false() #eq(#pos(@x),#neg(@y)) -> #false() #eq(#pos(@x),#pos(@y)) -> #eq(@x,@y) #eq(#s(@x),#0()) -> #false() #eq(#s(@x),#s(@y)) -> #eq(@x,@y) #eq(::(@x_1,@x_2),::(@y_1,@y_2)) -> #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #eq(::(@x_1,@x_2),nil()) -> #false() #eq(::(@x_1,@x_2),tuple#2(@y_1,@y_2)) -> #false() #eq(nil(),::(@y_1,@y_2)) -> #false() #eq(nil(),nil()) -> #true() #eq(nil(),tuple#2(@y_1,@y_2)) -> #false() #eq(tuple#2(@x_1,@x_2),::(@y_1,@y_2)) -> #false() #eq(tuple#2(@x_1,@x_2),nil()) -> #false() #eq(tuple#2(@x_1,@x_2),tuple#2(@y_1,@y_2)) -> #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #equal(@x,@y) -> #eq(@x,@y) #greater(@x,@y) -> #ckgt(#compare(@x,@y)) insert(@x,@l) -> insert#1(@x,@l,@x) insert#1(tuple#2(@valX,@keyX),@l,@x) -> insert#2(@l,@keyX,@valX,@x) insert#2(::(@l1,@ls),@keyX,@valX,@x) -> insert#3(@l1,@keyX,@ls,@valX,@x) insert#2(nil(),@keyX,@valX,@x) -> ::(tuple#2(::(@valX,nil()),@keyX),nil()) insert#3(tuple#2(@vals1,@key1),@keyX,@ls,@valX,@x) -> insert#4(#equal(@key1,@keyX) ,@key1 ,@ls ,@valX ,@vals1 ,@x) insert#4(#false(),@key1,@ls,@valX,@vals1,@x) -> ::(tuple#2(@vals1,@key1),insert(@x,@ls)) insert#4(#true(),@key1,@ls,@valX,@vals1,@x) -> ::(tuple#2(::(@valX,@vals1),@key1),@ls) split(@l) -> split#1(@l) split#1(::(@x,@xs)) -> insert(@x,split(@xs)) split#1(nil()) -> nil() splitqs(@pivot,@l) -> splitqs#1(@l,@pivot) splitqs#1(::(@x,@xs),@pivot) -> splitqs#2(splitqs(@pivot,@xs),@pivot,@x) splitqs#1(nil(),@pivot) -> tuple#2(nil(),nil()) splitqs#2(tuple#2(@ls,@rs),@pivot,@x) -> splitqs#3(#greater(@x,@pivot),@ls,@rs,@x) splitqs#3(#false(),@ls,@rs,@x) -> tuple#2(::(@x,@ls),@rs) splitqs#3(#true(),@ls,@rs,@x) -> tuple#2(@ls,::(@x,@rs)) - Signature: {#and/2,#ckgt/1,#compare/2,#eq/2,#equal/2,#greater/2,append/2,append#1/2,insert/2,insert#1/3,insert#2/4 ,insert#3/5,insert#4/6,quicksort/1,quicksort#1/1,quicksort#2/2,sortAll/1,sortAll#1/1,sortAll#2/2,split/1 ,split#1/1,splitAndSort/1,splitqs/2,splitqs#1/2,splitqs#2/3,splitqs#3/4,#and#/2,#ckgt#/1,#compare#/2,#eq#/2 ,#equal#/2,#greater#/2,append#/2,append#1#/2,insert#/2,insert#1#/3,insert#2#/4,insert#3#/5,insert#4#/6 ,quicksort#/1,quicksort#1#/1,quicksort#2#/2,sortAll#/1,sortAll#1#/1,sortAll#2#/2,split#/1,split#1#/1 ,splitAndSort#/1,splitqs#/2,splitqs#1#/2,splitqs#2#/3,splitqs#3#/4} / {#0/0,#EQ/0,#GT/0,#LT/0,#false/0 ,#neg/1,#pos/1,#s/1,#true/0,::/2,nil/0,tuple#2/2,c_1/1,c_2/2,c_3/1,c_4/1,c_5/0,c_6/1,c_7/1,c_8/1,c_9/0 ,c_10/1,c_11/1,c_12/0,c_13/1,c_14/1,c_15/0,c_16/2,c_17/1,c_18/1,c_19/0,c_20/2,c_21/1,c_22/2,c_23/0,c_24/2 ,c_25/1,c_26/1,c_27/0,c_28/2,c_29/0,c_30/0,c_31/0,c_32/0,c_33/0,c_34/0,c_35/0,c_36/0,c_37/0,c_38/0,c_39/0 ,c_40/0,c_41/0,c_42/0,c_43/1,c_44/0,c_45/0,c_46/0,c_47/1,c_48/0,c_49/1,c_50/0,c_51/0,c_52/0,c_53/0,c_54/0 ,c_55/1,c_56/0,c_57/0,c_58/0,c_59/1,c_60/0,c_61/1,c_62/3,c_63/0,c_64/0,c_65/0,c_66/0,c_67/0,c_68/0,c_69/0 ,c_70/3} - Obligation: innermost runtime complexity wrt. defined symbols {#and#,#ckgt#,#compare#,#eq#,#equal#,#greater#,append# ,append#1#,insert#,insert#1#,insert#2#,insert#3#,insert#4#,quicksort#,quicksort#1#,quicksort#2#,sortAll# ,sortAll#1#,sortAll#2#,split#,split#1#,splitAndSort#,splitqs#,splitqs#1#,splitqs#2# ,splitqs#3#} and constructors {#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} + Applied Processor: WeightGap {wgDimension = 1, wgDegree = 1, wgKind = Algebraic, wgUArgs = UArgs, wgOn = WgOnAny} + Details: The weightgap principle applies using the following constant growth matrix-interpretation: We apply a matrix interpretation of kind constructor based matrix interpretation: The following argument positions are considered usable: uargs(#and) = {1,2}, uargs(#ckgt) = {1}, uargs(::) = {2}, uargs(insert) = {2}, uargs(insert#4) = {1}, uargs(splitqs#2) = {1}, uargs(splitqs#3) = {1}, uargs(insert#) = {2}, uargs(insert#4#) = {1}, uargs(quicksort#2#) = {1}, uargs(sortAll#) = {1}, uargs(c_6) = {1}, uargs(c_7) = {1}, uargs(c_8) = {1}, uargs(c_10) = {1}, uargs(c_11) = {1}, uargs(c_13) = {1}, uargs(c_14) = {1}, uargs(c_16) = {1,2} Following symbols are considered usable: all TcT has computed the following interpretation: p(#0) = [0] p(#EQ) = [0] p(#GT) = [0] p(#LT) = [0] p(#and) = [1] x1 + [1] x2 + [0] p(#ckgt) = [1] x1 + [0] p(#compare) = [0] p(#eq) = [0] p(#equal) = [0] p(#false) = [0] p(#greater) = [0] p(#neg) = [0] p(#pos) = [1] x1 + [0] p(#s) = [0] p(#true) = [0] p(::) = [1] x1 + [1] x2 + [0] p(append) = [0] p(append#1) = [0] p(insert) = [1] x1 + [1] x2 + [0] p(insert#1) = [1] x2 + [1] x3 + [0] p(insert#2) = [1] x1 + [1] x4 + [0] p(insert#3) = [1] x3 + [1] x5 + [0] p(insert#4) = [1] x1 + [1] x3 + [1] x6 + [0] p(nil) = [0] p(quicksort) = [0] p(quicksort#1) = [0] p(quicksort#2) = [0] p(sortAll) = [0] p(sortAll#1) = [0] p(sortAll#2) = [0] p(split) = [1] x1 + [0] p(split#1) = [1] x1 + [0] p(splitAndSort) = [0] p(splitqs) = [5] p(splitqs#1) = [5] p(splitqs#2) = [1] x1 + [0] p(splitqs#3) = [1] x1 + [0] p(tuple#2) = [0] p(#and#) = [0] p(#ckgt#) = [0] p(#compare#) = [0] p(#eq#) = [1] x1 + [1] x2 + [1] p(#equal#) = [1] x1 + [1] x2 + [0] p(#greater#) = [1] x1 + [1] x2 + [0] p(append#) = [4] p(append#1#) = [2] x2 + [0] p(insert#) = [1] x2 + [0] p(insert#1#) = [1] x2 + [0] p(insert#2#) = [1] x1 + [4] p(insert#3#) = [1] x3 + [2] p(insert#4#) = [1] x1 + [1] x3 + [1] p(quicksort#) = [0] p(quicksort#1#) = [0] p(quicksort#2#) = [1] x1 + [0] p(sortAll#) = [1] x1 + [0] p(sortAll#1#) = [1] x1 + [0] p(sortAll#2#) = [1] x2 + [0] p(split#) = [1] x1 + [4] p(split#1#) = [1] x1 + [4] p(splitAndSort#) = [1] x1 + [0] p(splitqs#) = [1] x1 + [1] x2 + [1] p(splitqs#1#) = [1] x1 + [2] x2 + [1] p(splitqs#2#) = [2] x2 + [1] x3 + [1] p(splitqs#3#) = [1] x2 + [1] x3 + [1] x4 + [0] p(c_1) = [2] x1 + [0] p(c_2) = [2] x1 + [1] x2 + [2] p(c_3) = [1] x1 + [1] p(c_4) = [1] x1 + [1] p(c_5) = [1] p(c_6) = [1] x1 + [0] p(c_7) = [1] x1 + [0] p(c_8) = [1] x1 + [2] p(c_9) = [4] p(c_10) = [1] x1 + [0] p(c_11) = [1] x1 + [0] p(c_12) = [2] p(c_13) = [1] x1 + [0] p(c_14) = [1] x1 + [3] p(c_15) = [4] p(c_16) = [1] x1 + [1] x2 + [0] p(c_17) = [1] x1 + [0] p(c_18) = [1] x1 + [4] p(c_19) = [1] p(c_20) = [1] p(c_21) = [1] x1 + [4] p(c_22) = [1] x2 + [1] p(c_23) = [0] p(c_24) = [4] x1 + [1] x2 + [0] p(c_25) = [1] x1 + [0] p(c_26) = [1] x1 + [2] p(c_27) = [1] p(c_28) = [1] x1 + [1] x2 + [0] p(c_29) = [0] p(c_30) = [0] p(c_31) = [1] p(c_32) = [1] p(c_33) = [2] p(c_34) = [1] p(c_35) = [2] p(c_36) = [1] p(c_37) = [0] p(c_38) = [4] p(c_39) = [0] p(c_40) = [1] p(c_41) = [2] p(c_42) = [0] p(c_43) = [4] p(c_44) = [4] p(c_45) = [1] p(c_46) = [4] p(c_47) = [2] x1 + [0] p(c_48) = [1] p(c_49) = [2] x1 + [0] p(c_50) = [0] p(c_51) = [0] p(c_52) = [1] p(c_53) = [0] p(c_54) = [0] p(c_55) = [1] x1 + [1] p(c_56) = [0] p(c_57) = [0] p(c_58) = [1] p(c_59) = [0] p(c_60) = [2] p(c_61) = [4] p(c_62) = [4] x1 + [2] x2 + [1] p(c_63) = [1] p(c_64) = [0] p(c_65) = [1] p(c_66) = [1] p(c_67) = [4] p(c_68) = [0] p(c_69) = [1] p(c_70) = [1] x1 + [1] x2 + [1] Following rules are strictly oriented: insert#4#(#false(),@key1,@ls,@valX,@vals1,@x) = [1] @ls + [1] > [1] @ls + [0] = c_11(insert#(@x,@ls)) Following rules are (at-least) weakly oriented: insert#(@x,@l) = [1] @l + [0] >= [1] @l + [0] = c_6(insert#1#(@x,@l,@x)) insert#1#(tuple#2(@valX,@keyX),@l,@x) = [1] @l + [0] >= [1] @l + [4] = c_7(insert#2#(@l,@keyX,@valX,@x)) insert#2#(::(@l1,@ls),@keyX,@valX,@x) = [1] @l1 + [1] @ls + [4] >= [1] @ls + [4] = c_8(insert#3#(@l1,@keyX,@ls,@valX,@x)) insert#3#(tuple#2(@vals1,@key1),@keyX,@ls,@valX,@x) = [1] @ls + [2] >= [1] @ls + [1] = c_10(insert#4#(#equal(@key1,@keyX),@key1,@ls,@valX,@vals1,@x)) quicksort#(@l) = [0] >= [0] = c_13(quicksort#1#(@l)) quicksort#1#(::(@z,@zs)) = [0] >= [8] = c_14(quicksort#2#(splitqs(@z,@zs),@z)) quicksort#2#(tuple#2(@xs,@ys),@z) = [0] >= [0] = c_16(quicksort#(@xs),quicksort#(@ys)) sortAll#(@l) = [1] @l + [0] >= [1] @l + [0] = sortAll#1#(@l) sortAll#1#(::(@x,@xs)) = [1] @x + [1] @xs + [0] >= [1] @xs + [0] = sortAll#2#(@x,@xs) sortAll#2#(tuple#2(@vals,@key),@xs) = [1] @xs + [0] >= [0] = quicksort#(@vals) sortAll#2#(tuple#2(@vals,@key),@xs) = [1] @xs + [0] >= [1] @xs + [0] = sortAll#(@xs) split#(@l) = [1] @l + [4] >= [1] @l + [4] = split#1#(@l) split#1#(::(@x,@xs)) = [1] @x + [1] @xs + [4] >= [1] @xs + [0] = insert#(@x,split(@xs)) split#1#(::(@x,@xs)) = [1] @x + [1] @xs + [4] >= [1] @xs + [4] = split#(@xs) splitAndSort#(@l) = [1] @l + [0] >= [1] @l + [0] = sortAll#(split(@l)) #and(#false(),#false()) = [0] >= [0] = #false() #and(#false(),#true()) = [0] >= [0] = #false() #and(#true(),#false()) = [0] >= [0] = #false() #and(#true(),#true()) = [0] >= [0] = #true() #ckgt(#EQ()) = [0] >= [0] = #false() #ckgt(#GT()) = [0] >= [0] = #true() #ckgt(#LT()) = [0] >= [0] = #false() #compare(#0(),#0()) = [0] >= [0] = #EQ() #compare(#0(),#neg(@y)) = [0] >= [0] = #GT() #compare(#0(),#pos(@y)) = [0] >= [0] = #LT() #compare(#0(),#s(@y)) = [0] >= [0] = #LT() #compare(#neg(@x),#0()) = [0] >= [0] = #LT() #compare(#neg(@x),#neg(@y)) = [0] >= [0] = #compare(@y,@x) #compare(#neg(@x),#pos(@y)) = [0] >= [0] = #LT() #compare(#pos(@x),#0()) = [0] >= [0] = #GT() #compare(#pos(@x),#neg(@y)) = [0] >= [0] = #GT() #compare(#pos(@x),#pos(@y)) = [0] >= [0] = #compare(@x,@y) #compare(#s(@x),#0()) = [0] >= [0] = #GT() #compare(#s(@x),#s(@y)) = [0] >= [0] = #compare(@x,@y) #eq(#0(),#0()) = [0] >= [0] = #true() #eq(#0(),#neg(@y)) = [0] >= [0] = #false() #eq(#0(),#pos(@y)) = [0] >= [0] = #false() #eq(#0(),#s(@y)) = [0] >= [0] = #false() #eq(#neg(@x),#0()) = [0] >= [0] = #false() #eq(#neg(@x),#neg(@y)) = [0] >= [0] = #eq(@x,@y) #eq(#neg(@x),#pos(@y)) = [0] >= [0] = #false() #eq(#pos(@x),#0()) = [0] >= [0] = #false() #eq(#pos(@x),#neg(@y)) = [0] >= [0] = #false() #eq(#pos(@x),#pos(@y)) = [0] >= [0] = #eq(@x,@y) #eq(#s(@x),#0()) = [0] >= [0] = #false() #eq(#s(@x),#s(@y)) = [0] >= [0] = #eq(@x,@y) #eq(::(@x_1,@x_2),::(@y_1,@y_2)) = [0] >= [0] = #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #eq(::(@x_1,@x_2),nil()) = [0] >= [0] = #false() #eq(::(@x_1,@x_2),tuple#2(@y_1,@y_2)) = [0] >= [0] = #false() #eq(nil(),::(@y_1,@y_2)) = [0] >= [0] = #false() #eq(nil(),nil()) = [0] >= [0] = #true() #eq(nil(),tuple#2(@y_1,@y_2)) = [0] >= [0] = #false() #eq(tuple#2(@x_1,@x_2),::(@y_1,@y_2)) = [0] >= [0] = #false() #eq(tuple#2(@x_1,@x_2),nil()) = [0] >= [0] = #false() #eq(tuple#2(@x_1,@x_2),tuple#2(@y_1,@y_2)) = [0] >= [0] = #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #equal(@x,@y) = [0] >= [0] = #eq(@x,@y) #greater(@x,@y) = [0] >= [0] = #ckgt(#compare(@x,@y)) insert(@x,@l) = [1] @l + [1] @x + [0] >= [1] @l + [1] @x + [0] = insert#1(@x,@l,@x) insert#1(tuple#2(@valX,@keyX),@l,@x) = [1] @l + [1] @x + [0] >= [1] @l + [1] @x + [0] = insert#2(@l,@keyX,@valX,@x) insert#2(::(@l1,@ls),@keyX,@valX,@x) = [1] @l1 + [1] @ls + [1] @x + [0] >= [1] @ls + [1] @x + [0] = insert#3(@l1,@keyX,@ls,@valX,@x) insert#2(nil(),@keyX,@valX,@x) = [1] @x + [0] >= [0] = ::(tuple#2(::(@valX,nil()),@keyX),nil()) insert#3(tuple#2(@vals1,@key1),@keyX,@ls,@valX,@x) = [1] @ls + [1] @x + [0] >= [1] @ls + [1] @x + [0] = insert#4(#equal(@key1,@keyX),@key1,@ls,@valX,@vals1,@x) insert#4(#false(),@key1,@ls,@valX,@vals1,@x) = [1] @ls + [1] @x + [0] >= [1] @ls + [1] @x + [0] = ::(tuple#2(@vals1,@key1),insert(@x,@ls)) insert#4(#true(),@key1,@ls,@valX,@vals1,@x) = [1] @ls + [1] @x + [0] >= [1] @ls + [0] = ::(tuple#2(::(@valX,@vals1),@key1),@ls) split(@l) = [1] @l + [0] >= [1] @l + [0] = split#1(@l) split#1(::(@x,@xs)) = [1] @x + [1] @xs + [0] >= [1] @x + [1] @xs + [0] = insert(@x,split(@xs)) split#1(nil()) = [0] >= [0] = nil() splitqs(@pivot,@l) = [5] >= [5] = splitqs#1(@l,@pivot) splitqs#1(::(@x,@xs),@pivot) = [5] >= [5] = splitqs#2(splitqs(@pivot,@xs),@pivot,@x) splitqs#1(nil(),@pivot) = [5] >= [0] = tuple#2(nil(),nil()) splitqs#2(tuple#2(@ls,@rs),@pivot,@x) = [0] >= [0] = splitqs#3(#greater(@x,@pivot),@ls,@rs,@x) splitqs#3(#false(),@ls,@rs,@x) = [0] >= [0] = tuple#2(::(@x,@ls),@rs) splitqs#3(#true(),@ls,@rs,@x) = [0] >= [0] = tuple#2(@ls,::(@x,@rs)) Further, it can be verified that all rules not oriented are covered by the weightgap condition. *** Step 7.b:1.a:8: WeightGap WORST_CASE(?,O(n^2)) + Considered Problem: - Strict DPs: insert#1#(tuple#2(@valX,@keyX),@l,@x) -> c_7(insert#2#(@l,@keyX,@valX,@x)) quicksort#1#(::(@z,@zs)) -> c_14(quicksort#2#(splitqs(@z,@zs),@z)) - Weak DPs: insert#(@x,@l) -> c_6(insert#1#(@x,@l,@x)) insert#2#(::(@l1,@ls),@keyX,@valX,@x) -> c_8(insert#3#(@l1,@keyX,@ls,@valX,@x)) insert#3#(tuple#2(@vals1,@key1),@keyX,@ls,@valX,@x) -> c_10(insert#4#(#equal(@key1,@keyX) ,@key1 ,@ls ,@valX ,@vals1 ,@x)) insert#4#(#false(),@key1,@ls,@valX,@vals1,@x) -> c_11(insert#(@x,@ls)) quicksort#(@l) -> c_13(quicksort#1#(@l)) quicksort#2#(tuple#2(@xs,@ys),@z) -> c_16(quicksort#(@xs),quicksort#(@ys)) sortAll#(@l) -> sortAll#1#(@l) sortAll#1#(::(@x,@xs)) -> sortAll#2#(@x,@xs) sortAll#2#(tuple#2(@vals,@key),@xs) -> quicksort#(@vals) sortAll#2#(tuple#2(@vals,@key),@xs) -> sortAll#(@xs) split#(@l) -> split#1#(@l) split#1#(::(@x,@xs)) -> insert#(@x,split(@xs)) split#1#(::(@x,@xs)) -> split#(@xs) splitAndSort#(@l) -> sortAll#(split(@l)) - Weak TRS: #and(#false(),#false()) -> #false() #and(#false(),#true()) -> #false() #and(#true(),#false()) -> #false() #and(#true(),#true()) -> #true() #ckgt(#EQ()) -> #false() #ckgt(#GT()) -> #true() #ckgt(#LT()) -> #false() #compare(#0(),#0()) -> #EQ() #compare(#0(),#neg(@y)) -> #GT() #compare(#0(),#pos(@y)) -> #LT() #compare(#0(),#s(@y)) -> #LT() #compare(#neg(@x),#0()) -> #LT() #compare(#neg(@x),#neg(@y)) -> #compare(@y,@x) #compare(#neg(@x),#pos(@y)) -> #LT() #compare(#pos(@x),#0()) -> #GT() #compare(#pos(@x),#neg(@y)) -> #GT() #compare(#pos(@x),#pos(@y)) -> #compare(@x,@y) #compare(#s(@x),#0()) -> #GT() #compare(#s(@x),#s(@y)) -> #compare(@x,@y) #eq(#0(),#0()) -> #true() #eq(#0(),#neg(@y)) -> #false() #eq(#0(),#pos(@y)) -> #false() #eq(#0(),#s(@y)) -> #false() #eq(#neg(@x),#0()) -> #false() #eq(#neg(@x),#neg(@y)) -> #eq(@x,@y) #eq(#neg(@x),#pos(@y)) -> #false() #eq(#pos(@x),#0()) -> #false() #eq(#pos(@x),#neg(@y)) -> #false() #eq(#pos(@x),#pos(@y)) -> #eq(@x,@y) #eq(#s(@x),#0()) -> #false() #eq(#s(@x),#s(@y)) -> #eq(@x,@y) #eq(::(@x_1,@x_2),::(@y_1,@y_2)) -> #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #eq(::(@x_1,@x_2),nil()) -> #false() #eq(::(@x_1,@x_2),tuple#2(@y_1,@y_2)) -> #false() #eq(nil(),::(@y_1,@y_2)) -> #false() #eq(nil(),nil()) -> #true() #eq(nil(),tuple#2(@y_1,@y_2)) -> #false() #eq(tuple#2(@x_1,@x_2),::(@y_1,@y_2)) -> #false() #eq(tuple#2(@x_1,@x_2),nil()) -> #false() #eq(tuple#2(@x_1,@x_2),tuple#2(@y_1,@y_2)) -> #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #equal(@x,@y) -> #eq(@x,@y) #greater(@x,@y) -> #ckgt(#compare(@x,@y)) insert(@x,@l) -> insert#1(@x,@l,@x) insert#1(tuple#2(@valX,@keyX),@l,@x) -> insert#2(@l,@keyX,@valX,@x) insert#2(::(@l1,@ls),@keyX,@valX,@x) -> insert#3(@l1,@keyX,@ls,@valX,@x) insert#2(nil(),@keyX,@valX,@x) -> ::(tuple#2(::(@valX,nil()),@keyX),nil()) insert#3(tuple#2(@vals1,@key1),@keyX,@ls,@valX,@x) -> insert#4(#equal(@key1,@keyX) ,@key1 ,@ls ,@valX ,@vals1 ,@x) insert#4(#false(),@key1,@ls,@valX,@vals1,@x) -> ::(tuple#2(@vals1,@key1),insert(@x,@ls)) insert#4(#true(),@key1,@ls,@valX,@vals1,@x) -> ::(tuple#2(::(@valX,@vals1),@key1),@ls) split(@l) -> split#1(@l) split#1(::(@x,@xs)) -> insert(@x,split(@xs)) split#1(nil()) -> nil() splitqs(@pivot,@l) -> splitqs#1(@l,@pivot) splitqs#1(::(@x,@xs),@pivot) -> splitqs#2(splitqs(@pivot,@xs),@pivot,@x) splitqs#1(nil(),@pivot) -> tuple#2(nil(),nil()) splitqs#2(tuple#2(@ls,@rs),@pivot,@x) -> splitqs#3(#greater(@x,@pivot),@ls,@rs,@x) splitqs#3(#false(),@ls,@rs,@x) -> tuple#2(::(@x,@ls),@rs) splitqs#3(#true(),@ls,@rs,@x) -> tuple#2(@ls,::(@x,@rs)) - Signature: {#and/2,#ckgt/1,#compare/2,#eq/2,#equal/2,#greater/2,append/2,append#1/2,insert/2,insert#1/3,insert#2/4 ,insert#3/5,insert#4/6,quicksort/1,quicksort#1/1,quicksort#2/2,sortAll/1,sortAll#1/1,sortAll#2/2,split/1 ,split#1/1,splitAndSort/1,splitqs/2,splitqs#1/2,splitqs#2/3,splitqs#3/4,#and#/2,#ckgt#/1,#compare#/2,#eq#/2 ,#equal#/2,#greater#/2,append#/2,append#1#/2,insert#/2,insert#1#/3,insert#2#/4,insert#3#/5,insert#4#/6 ,quicksort#/1,quicksort#1#/1,quicksort#2#/2,sortAll#/1,sortAll#1#/1,sortAll#2#/2,split#/1,split#1#/1 ,splitAndSort#/1,splitqs#/2,splitqs#1#/2,splitqs#2#/3,splitqs#3#/4} / {#0/0,#EQ/0,#GT/0,#LT/0,#false/0 ,#neg/1,#pos/1,#s/1,#true/0,::/2,nil/0,tuple#2/2,c_1/1,c_2/2,c_3/1,c_4/1,c_5/0,c_6/1,c_7/1,c_8/1,c_9/0 ,c_10/1,c_11/1,c_12/0,c_13/1,c_14/1,c_15/0,c_16/2,c_17/1,c_18/1,c_19/0,c_20/2,c_21/1,c_22/2,c_23/0,c_24/2 ,c_25/1,c_26/1,c_27/0,c_28/2,c_29/0,c_30/0,c_31/0,c_32/0,c_33/0,c_34/0,c_35/0,c_36/0,c_37/0,c_38/0,c_39/0 ,c_40/0,c_41/0,c_42/0,c_43/1,c_44/0,c_45/0,c_46/0,c_47/1,c_48/0,c_49/1,c_50/0,c_51/0,c_52/0,c_53/0,c_54/0 ,c_55/1,c_56/0,c_57/0,c_58/0,c_59/1,c_60/0,c_61/1,c_62/3,c_63/0,c_64/0,c_65/0,c_66/0,c_67/0,c_68/0,c_69/0 ,c_70/3} - Obligation: innermost runtime complexity wrt. defined symbols {#and#,#ckgt#,#compare#,#eq#,#equal#,#greater#,append# ,append#1#,insert#,insert#1#,insert#2#,insert#3#,insert#4#,quicksort#,quicksort#1#,quicksort#2#,sortAll# ,sortAll#1#,sortAll#2#,split#,split#1#,splitAndSort#,splitqs#,splitqs#1#,splitqs#2# ,splitqs#3#} and constructors {#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} + Applied Processor: WeightGap {wgDimension = 1, wgDegree = 1, wgKind = Algebraic, wgUArgs = UArgs, wgOn = WgOnAny} + Details: The weightgap principle applies using the following constant growth matrix-interpretation: We apply a matrix interpretation of kind constructor based matrix interpretation: The following argument positions are considered usable: uargs(#and) = {1,2}, uargs(#ckgt) = {1}, uargs(::) = {2}, uargs(insert) = {2}, uargs(insert#4) = {1}, uargs(splitqs#2) = {1}, uargs(splitqs#3) = {1}, uargs(insert#) = {2}, uargs(insert#4#) = {1}, uargs(quicksort#2#) = {1}, uargs(sortAll#) = {1}, uargs(c_6) = {1}, uargs(c_7) = {1}, uargs(c_8) = {1}, uargs(c_10) = {1}, uargs(c_11) = {1}, uargs(c_13) = {1}, uargs(c_14) = {1}, uargs(c_16) = {1,2} Following symbols are considered usable: all TcT has computed the following interpretation: p(#0) = [0] p(#EQ) = [0] p(#GT) = [0] p(#LT) = [0] p(#and) = [1] x1 + [1] x2 + [0] p(#ckgt) = [1] x1 + [0] p(#compare) = [0] p(#eq) = [0] p(#equal) = [0] p(#false) = [0] p(#greater) = [0] p(#neg) = [4] p(#pos) = [4] p(#s) = [1] p(#true) = [0] p(::) = [1] x2 + [2] p(append) = [2] x1 + [1] x2 + [4] p(append#1) = [1] x1 + [4] x2 + [0] p(insert) = [1] x2 + [2] p(insert#1) = [1] x2 + [2] p(insert#2) = [1] x1 + [2] p(insert#3) = [1] x3 + [4] p(insert#4) = [1] x1 + [1] x3 + [4] p(nil) = [0] p(quicksort) = [1] x1 + [0] p(quicksort#1) = [4] p(quicksort#2) = [1] x2 + [4] p(sortAll) = [0] p(sortAll#1) = [2] x1 + [0] p(sortAll#2) = [1] p(split) = [2] x1 + [0] p(split#1) = [2] x1 + [0] p(splitAndSort) = [1] x1 + [1] p(splitqs) = [0] p(splitqs#1) = [0] p(splitqs#2) = [1] x1 + [0] p(splitqs#3) = [1] x1 + [0] p(tuple#2) = [0] p(#and#) = [1] x2 + [0] p(#ckgt#) = [1] x1 + [1] p(#compare#) = [1] x2 + [0] p(#eq#) = [1] x2 + [1] p(#equal#) = [1] p(#greater#) = [1] x1 + [0] p(append#) = [1] p(append#1#) = [1] x2 + [4] p(insert#) = [1] x2 + [1] p(insert#1#) = [1] x2 + [1] p(insert#2#) = [1] x1 + [0] p(insert#3#) = [1] x3 + [1] p(insert#4#) = [1] x1 + [1] x3 + [1] p(quicksort#) = [0] p(quicksort#1#) = [0] p(quicksort#2#) = [1] x1 + [0] p(sortAll#) = [1] x1 + [1] p(sortAll#1#) = [1] x1 + [0] p(sortAll#2#) = [1] x2 + [1] p(split#) = [4] x1 + [4] p(split#1#) = [4] x1 + [2] p(splitAndSort#) = [3] x1 + [1] p(splitqs#) = [1] x2 + [0] p(splitqs#1#) = [1] x1 + [4] p(splitqs#2#) = [1] x1 + [2] x3 + [4] p(splitqs#3#) = [1] x1 + [1] x4 + [4] p(c_1) = [0] p(c_2) = [2] p(c_3) = [1] x1 + [1] p(c_4) = [1] x1 + [1] p(c_5) = [2] p(c_6) = [1] x1 + [0] p(c_7) = [1] x1 + [0] p(c_8) = [1] x1 + [1] p(c_9) = [0] p(c_10) = [1] x1 + [0] p(c_11) = [1] x1 + [0] p(c_12) = [0] p(c_13) = [1] x1 + [0] p(c_14) = [1] x1 + [7] p(c_15) = [4] p(c_16) = [1] x1 + [1] x2 + [0] p(c_17) = [2] x1 + [0] p(c_18) = [1] x1 + [0] p(c_19) = [0] p(c_20) = [1] x1 + [0] p(c_21) = [1] p(c_22) = [2] x2 + [0] p(c_23) = [4] p(c_24) = [2] x1 + [4] x2 + [1] p(c_25) = [2] x1 + [2] p(c_26) = [0] p(c_27) = [0] p(c_28) = [1] x1 + [4] x2 + [1] p(c_29) = [0] p(c_30) = [2] p(c_31) = [0] p(c_32) = [0] p(c_33) = [0] p(c_34) = [0] p(c_35) = [1] p(c_36) = [0] p(c_37) = [4] p(c_38) = [0] p(c_39) = [4] p(c_40) = [1] p(c_41) = [1] p(c_42) = [1] p(c_43) = [2] x1 + [4] p(c_44) = [0] p(c_45) = [2] p(c_46) = [4] p(c_47) = [1] p(c_48) = [1] p(c_49) = [0] p(c_50) = [1] p(c_51) = [4] p(c_52) = [0] p(c_53) = [0] p(c_54) = [1] p(c_55) = [0] p(c_56) = [1] p(c_57) = [1] p(c_58) = [1] p(c_59) = [0] p(c_60) = [1] p(c_61) = [1] x1 + [1] p(c_62) = [2] x1 + [1] x3 + [4] p(c_63) = [1] p(c_64) = [4] p(c_65) = [0] p(c_66) = [2] p(c_67) = [1] p(c_68) = [0] p(c_69) = [0] p(c_70) = [2] x2 + [1] Following rules are strictly oriented: insert#1#(tuple#2(@valX,@keyX),@l,@x) = [1] @l + [1] > [1] @l + [0] = c_7(insert#2#(@l,@keyX,@valX,@x)) Following rules are (at-least) weakly oriented: insert#(@x,@l) = [1] @l + [1] >= [1] @l + [1] = c_6(insert#1#(@x,@l,@x)) insert#2#(::(@l1,@ls),@keyX,@valX,@x) = [1] @ls + [2] >= [1] @ls + [2] = c_8(insert#3#(@l1,@keyX,@ls,@valX,@x)) insert#3#(tuple#2(@vals1,@key1),@keyX,@ls,@valX,@x) = [1] @ls + [1] >= [1] @ls + [1] = c_10(insert#4#(#equal(@key1,@keyX),@key1,@ls,@valX,@vals1,@x)) insert#4#(#false(),@key1,@ls,@valX,@vals1,@x) = [1] @ls + [1] >= [1] @ls + [1] = c_11(insert#(@x,@ls)) quicksort#(@l) = [0] >= [0] = c_13(quicksort#1#(@l)) quicksort#1#(::(@z,@zs)) = [0] >= [7] = c_14(quicksort#2#(splitqs(@z,@zs),@z)) quicksort#2#(tuple#2(@xs,@ys),@z) = [0] >= [0] = c_16(quicksort#(@xs),quicksort#(@ys)) sortAll#(@l) = [1] @l + [1] >= [1] @l + [0] = sortAll#1#(@l) sortAll#1#(::(@x,@xs)) = [1] @xs + [2] >= [1] @xs + [1] = sortAll#2#(@x,@xs) sortAll#2#(tuple#2(@vals,@key),@xs) = [1] @xs + [1] >= [0] = quicksort#(@vals) sortAll#2#(tuple#2(@vals,@key),@xs) = [1] @xs + [1] >= [1] @xs + [1] = sortAll#(@xs) split#(@l) = [4] @l + [4] >= [4] @l + [2] = split#1#(@l) split#1#(::(@x,@xs)) = [4] @xs + [10] >= [2] @xs + [1] = insert#(@x,split(@xs)) split#1#(::(@x,@xs)) = [4] @xs + [10] >= [4] @xs + [4] = split#(@xs) splitAndSort#(@l) = [3] @l + [1] >= [2] @l + [1] = sortAll#(split(@l)) #and(#false(),#false()) = [0] >= [0] = #false() #and(#false(),#true()) = [0] >= [0] = #false() #and(#true(),#false()) = [0] >= [0] = #false() #and(#true(),#true()) = [0] >= [0] = #true() #ckgt(#EQ()) = [0] >= [0] = #false() #ckgt(#GT()) = [0] >= [0] = #true() #ckgt(#LT()) = [0] >= [0] = #false() #compare(#0(),#0()) = [0] >= [0] = #EQ() #compare(#0(),#neg(@y)) = [0] >= [0] = #GT() #compare(#0(),#pos(@y)) = [0] >= [0] = #LT() #compare(#0(),#s(@y)) = [0] >= [0] = #LT() #compare(#neg(@x),#0()) = [0] >= [0] = #LT() #compare(#neg(@x),#neg(@y)) = [0] >= [0] = #compare(@y,@x) #compare(#neg(@x),#pos(@y)) = [0] >= [0] = #LT() #compare(#pos(@x),#0()) = [0] >= [0] = #GT() #compare(#pos(@x),#neg(@y)) = [0] >= [0] = #GT() #compare(#pos(@x),#pos(@y)) = [0] >= [0] = #compare(@x,@y) #compare(#s(@x),#0()) = [0] >= [0] = #GT() #compare(#s(@x),#s(@y)) = [0] >= [0] = #compare(@x,@y) #eq(#0(),#0()) = [0] >= [0] = #true() #eq(#0(),#neg(@y)) = [0] >= [0] = #false() #eq(#0(),#pos(@y)) = [0] >= [0] = #false() #eq(#0(),#s(@y)) = [0] >= [0] = #false() #eq(#neg(@x),#0()) = [0] >= [0] = #false() #eq(#neg(@x),#neg(@y)) = [0] >= [0] = #eq(@x,@y) #eq(#neg(@x),#pos(@y)) = [0] >= [0] = #false() #eq(#pos(@x),#0()) = [0] >= [0] = #false() #eq(#pos(@x),#neg(@y)) = [0] >= [0] = #false() #eq(#pos(@x),#pos(@y)) = [0] >= [0] = #eq(@x,@y) #eq(#s(@x),#0()) = [0] >= [0] = #false() #eq(#s(@x),#s(@y)) = [0] >= [0] = #eq(@x,@y) #eq(::(@x_1,@x_2),::(@y_1,@y_2)) = [0] >= [0] = #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #eq(::(@x_1,@x_2),nil()) = [0] >= [0] = #false() #eq(::(@x_1,@x_2),tuple#2(@y_1,@y_2)) = [0] >= [0] = #false() #eq(nil(),::(@y_1,@y_2)) = [0] >= [0] = #false() #eq(nil(),nil()) = [0] >= [0] = #true() #eq(nil(),tuple#2(@y_1,@y_2)) = [0] >= [0] = #false() #eq(tuple#2(@x_1,@x_2),::(@y_1,@y_2)) = [0] >= [0] = #false() #eq(tuple#2(@x_1,@x_2),nil()) = [0] >= [0] = #false() #eq(tuple#2(@x_1,@x_2),tuple#2(@y_1,@y_2)) = [0] >= [0] = #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #equal(@x,@y) = [0] >= [0] = #eq(@x,@y) #greater(@x,@y) = [0] >= [0] = #ckgt(#compare(@x,@y)) insert(@x,@l) = [1] @l + [2] >= [1] @l + [2] = insert#1(@x,@l,@x) insert#1(tuple#2(@valX,@keyX),@l,@x) = [1] @l + [2] >= [1] @l + [2] = insert#2(@l,@keyX,@valX,@x) insert#2(::(@l1,@ls),@keyX,@valX,@x) = [1] @ls + [4] >= [1] @ls + [4] = insert#3(@l1,@keyX,@ls,@valX,@x) insert#2(nil(),@keyX,@valX,@x) = [2] >= [2] = ::(tuple#2(::(@valX,nil()),@keyX),nil()) insert#3(tuple#2(@vals1,@key1),@keyX,@ls,@valX,@x) = [1] @ls + [4] >= [1] @ls + [4] = insert#4(#equal(@key1,@keyX),@key1,@ls,@valX,@vals1,@x) insert#4(#false(),@key1,@ls,@valX,@vals1,@x) = [1] @ls + [4] >= [1] @ls + [4] = ::(tuple#2(@vals1,@key1),insert(@x,@ls)) insert#4(#true(),@key1,@ls,@valX,@vals1,@x) = [1] @ls + [4] >= [1] @ls + [2] = ::(tuple#2(::(@valX,@vals1),@key1),@ls) split(@l) = [2] @l + [0] >= [2] @l + [0] = split#1(@l) split#1(::(@x,@xs)) = [2] @xs + [4] >= [2] @xs + [2] = insert(@x,split(@xs)) split#1(nil()) = [0] >= [0] = nil() splitqs(@pivot,@l) = [0] >= [0] = splitqs#1(@l,@pivot) splitqs#1(::(@x,@xs),@pivot) = [0] >= [0] = splitqs#2(splitqs(@pivot,@xs),@pivot,@x) splitqs#1(nil(),@pivot) = [0] >= [0] = tuple#2(nil(),nil()) splitqs#2(tuple#2(@ls,@rs),@pivot,@x) = [0] >= [0] = splitqs#3(#greater(@x,@pivot),@ls,@rs,@x) splitqs#3(#false(),@ls,@rs,@x) = [0] >= [0] = tuple#2(::(@x,@ls),@rs) splitqs#3(#true(),@ls,@rs,@x) = [0] >= [0] = tuple#2(@ls,::(@x,@rs)) Further, it can be verified that all rules not oriented are covered by the weightgap condition. *** Step 7.b:1.a:9: Ara WORST_CASE(?,O(n^2)) + Considered Problem: - Strict DPs: quicksort#1#(::(@z,@zs)) -> c_14(quicksort#2#(splitqs(@z,@zs),@z)) - Weak DPs: insert#(@x,@l) -> c_6(insert#1#(@x,@l,@x)) insert#1#(tuple#2(@valX,@keyX),@l,@x) -> c_7(insert#2#(@l,@keyX,@valX,@x)) insert#2#(::(@l1,@ls),@keyX,@valX,@x) -> c_8(insert#3#(@l1,@keyX,@ls,@valX,@x)) insert#3#(tuple#2(@vals1,@key1),@keyX,@ls,@valX,@x) -> c_10(insert#4#(#equal(@key1,@keyX) ,@key1 ,@ls ,@valX ,@vals1 ,@x)) insert#4#(#false(),@key1,@ls,@valX,@vals1,@x) -> c_11(insert#(@x,@ls)) quicksort#(@l) -> c_13(quicksort#1#(@l)) quicksort#2#(tuple#2(@xs,@ys),@z) -> c_16(quicksort#(@xs),quicksort#(@ys)) sortAll#(@l) -> sortAll#1#(@l) sortAll#1#(::(@x,@xs)) -> sortAll#2#(@x,@xs) sortAll#2#(tuple#2(@vals,@key),@xs) -> quicksort#(@vals) sortAll#2#(tuple#2(@vals,@key),@xs) -> sortAll#(@xs) split#(@l) -> split#1#(@l) split#1#(::(@x,@xs)) -> insert#(@x,split(@xs)) split#1#(::(@x,@xs)) -> split#(@xs) splitAndSort#(@l) -> sortAll#(split(@l)) - Weak TRS: #and(#false(),#false()) -> #false() #and(#false(),#true()) -> #false() #and(#true(),#false()) -> #false() #and(#true(),#true()) -> #true() #ckgt(#EQ()) -> #false() #ckgt(#GT()) -> #true() #ckgt(#LT()) -> #false() #compare(#0(),#0()) -> #EQ() #compare(#0(),#neg(@y)) -> #GT() #compare(#0(),#pos(@y)) -> #LT() #compare(#0(),#s(@y)) -> #LT() #compare(#neg(@x),#0()) -> #LT() #compare(#neg(@x),#neg(@y)) -> #compare(@y,@x) #compare(#neg(@x),#pos(@y)) -> #LT() #compare(#pos(@x),#0()) -> #GT() #compare(#pos(@x),#neg(@y)) -> #GT() #compare(#pos(@x),#pos(@y)) -> #compare(@x,@y) #compare(#s(@x),#0()) -> #GT() #compare(#s(@x),#s(@y)) -> #compare(@x,@y) #eq(#0(),#0()) -> #true() #eq(#0(),#neg(@y)) -> #false() #eq(#0(),#pos(@y)) -> #false() #eq(#0(),#s(@y)) -> #false() #eq(#neg(@x),#0()) -> #false() #eq(#neg(@x),#neg(@y)) -> #eq(@x,@y) #eq(#neg(@x),#pos(@y)) -> #false() #eq(#pos(@x),#0()) -> #false() #eq(#pos(@x),#neg(@y)) -> #false() #eq(#pos(@x),#pos(@y)) -> #eq(@x,@y) #eq(#s(@x),#0()) -> #false() #eq(#s(@x),#s(@y)) -> #eq(@x,@y) #eq(::(@x_1,@x_2),::(@y_1,@y_2)) -> #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #eq(::(@x_1,@x_2),nil()) -> #false() #eq(::(@x_1,@x_2),tuple#2(@y_1,@y_2)) -> #false() #eq(nil(),::(@y_1,@y_2)) -> #false() #eq(nil(),nil()) -> #true() #eq(nil(),tuple#2(@y_1,@y_2)) -> #false() #eq(tuple#2(@x_1,@x_2),::(@y_1,@y_2)) -> #false() #eq(tuple#2(@x_1,@x_2),nil()) -> #false() #eq(tuple#2(@x_1,@x_2),tuple#2(@y_1,@y_2)) -> #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #equal(@x,@y) -> #eq(@x,@y) #greater(@x,@y) -> #ckgt(#compare(@x,@y)) insert(@x,@l) -> insert#1(@x,@l,@x) insert#1(tuple#2(@valX,@keyX),@l,@x) -> insert#2(@l,@keyX,@valX,@x) insert#2(::(@l1,@ls),@keyX,@valX,@x) -> insert#3(@l1,@keyX,@ls,@valX,@x) insert#2(nil(),@keyX,@valX,@x) -> ::(tuple#2(::(@valX,nil()),@keyX),nil()) insert#3(tuple#2(@vals1,@key1),@keyX,@ls,@valX,@x) -> insert#4(#equal(@key1,@keyX) ,@key1 ,@ls ,@valX ,@vals1 ,@x) insert#4(#false(),@key1,@ls,@valX,@vals1,@x) -> ::(tuple#2(@vals1,@key1),insert(@x,@ls)) insert#4(#true(),@key1,@ls,@valX,@vals1,@x) -> ::(tuple#2(::(@valX,@vals1),@key1),@ls) split(@l) -> split#1(@l) split#1(::(@x,@xs)) -> insert(@x,split(@xs)) split#1(nil()) -> nil() splitqs(@pivot,@l) -> splitqs#1(@l,@pivot) splitqs#1(::(@x,@xs),@pivot) -> splitqs#2(splitqs(@pivot,@xs),@pivot,@x) splitqs#1(nil(),@pivot) -> tuple#2(nil(),nil()) splitqs#2(tuple#2(@ls,@rs),@pivot,@x) -> splitqs#3(#greater(@x,@pivot),@ls,@rs,@x) splitqs#3(#false(),@ls,@rs,@x) -> tuple#2(::(@x,@ls),@rs) splitqs#3(#true(),@ls,@rs,@x) -> tuple#2(@ls,::(@x,@rs)) - Signature: {#and/2,#ckgt/1,#compare/2,#eq/2,#equal/2,#greater/2,append/2,append#1/2,insert/2,insert#1/3,insert#2/4 ,insert#3/5,insert#4/6,quicksort/1,quicksort#1/1,quicksort#2/2,sortAll/1,sortAll#1/1,sortAll#2/2,split/1 ,split#1/1,splitAndSort/1,splitqs/2,splitqs#1/2,splitqs#2/3,splitqs#3/4,#and#/2,#ckgt#/1,#compare#/2,#eq#/2 ,#equal#/2,#greater#/2,append#/2,append#1#/2,insert#/2,insert#1#/3,insert#2#/4,insert#3#/5,insert#4#/6 ,quicksort#/1,quicksort#1#/1,quicksort#2#/2,sortAll#/1,sortAll#1#/1,sortAll#2#/2,split#/1,split#1#/1 ,splitAndSort#/1,splitqs#/2,splitqs#1#/2,splitqs#2#/3,splitqs#3#/4} / {#0/0,#EQ/0,#GT/0,#LT/0,#false/0 ,#neg/1,#pos/1,#s/1,#true/0,::/2,nil/0,tuple#2/2,c_1/1,c_2/2,c_3/1,c_4/1,c_5/0,c_6/1,c_7/1,c_8/1,c_9/0 ,c_10/1,c_11/1,c_12/0,c_13/1,c_14/1,c_15/0,c_16/2,c_17/1,c_18/1,c_19/0,c_20/2,c_21/1,c_22/2,c_23/0,c_24/2 ,c_25/1,c_26/1,c_27/0,c_28/2,c_29/0,c_30/0,c_31/0,c_32/0,c_33/0,c_34/0,c_35/0,c_36/0,c_37/0,c_38/0,c_39/0 ,c_40/0,c_41/0,c_42/0,c_43/1,c_44/0,c_45/0,c_46/0,c_47/1,c_48/0,c_49/1,c_50/0,c_51/0,c_52/0,c_53/0,c_54/0 ,c_55/1,c_56/0,c_57/0,c_58/0,c_59/1,c_60/0,c_61/1,c_62/3,c_63/0,c_64/0,c_65/0,c_66/0,c_67/0,c_68/0,c_69/0 ,c_70/3} - Obligation: innermost runtime complexity wrt. defined symbols {#and#,#ckgt#,#compare#,#eq#,#equal#,#greater#,append# ,append#1#,insert#,insert#1#,insert#2#,insert#3#,insert#4#,quicksort#,quicksort#1#,quicksort#2#,sortAll# ,sortAll#1#,sortAll#2#,split#,split#1#,splitAndSort#,splitqs#,splitqs#1#,splitqs#2# ,splitqs#3#} and constructors {#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} + Applied Processor: Ara {araHeuristics = NoHeuristics, minDegree = 2, maxDegree = 2, araTimeout = 8, araRuleShifting = Just 1} + Details: Signatures used: ---------------- #0 :: [] -(0)-> "A"(0, 0) #EQ :: [] -(0)-> "A"(0, 0) #EQ :: [] -(0)-> "A"(12, 12) #GT :: [] -(0)-> "A"(0, 0) #GT :: [] -(0)-> "A"(12, 12) #LT :: [] -(0)-> "A"(0, 0) #LT :: [] -(0)-> "A"(12, 12) #and :: ["A"(3, 3) x "A"(3, 3)] -(0)-> "A"(12, 12) #ckgt :: ["A"(0, 0)] -(0)-> "A"(7, 7) #compare :: ["A"(0, 0) x "A"(0, 0)] -(0)-> "A"(10, 10) #eq :: ["A"(0, 0) x "A"(0, 0)] -(0)-> "A"(9, 9) #equal :: ["A"(0, 0) x "A"(0, 0)] -(0)-> "A"(2, 2) #false :: [] -(0)-> "A"(3, 3) #false :: [] -(0)-> "A"(0, 0) #false :: [] -(0)-> "A"(15, 15) #false :: [] -(0)-> "A"(13, 13) #greater :: ["A"(0, 0) x "A"(0, 0)] -(0)-> "A"(1, 1) #neg :: ["A"(0, 0)] -(0)-> "A"(0, 0) #pos :: ["A"(0, 0)] -(0)-> "A"(0, 0) #s :: ["A"(0, 0)] -(0)-> "A"(0, 0) #true :: [] -(0)-> "A"(3, 3) #true :: [] -(0)-> "A"(0, 0) #true :: [] -(0)-> "A"(15, 15) #true :: [] -(0)-> "A"(13, 13) :: :: ["A"(0, 0) x "A"(1, 0)] -(1)-> "A"(1, 0) :: :: ["A"(0, 0) x "A"(0, 0)] -(0)-> "A"(0, 0) :: :: ["A"(0, 1) x "A"(0, 1)] -(0)-> "A"(0, 1) :: :: ["A"(0, 4) x "A"(7, 4)] -(7)-> "A"(7, 4) :: :: ["A"(0, 14) x "A"(14, 14)] -(14)-> "A"(14, 14) :: :: ["A"(0, 0) x "A"(2, 0)] -(2)-> "A"(2, 0) insert :: ["A"(0, 1) x "A"(0, 1)] -(3)-> "A"(0, 1) insert#1 :: ["A"(0, 0) x "A"(0, 1) x "A"(0, 1)] -(3)-> "A"(0, 1) insert#2 :: ["A"(0, 1) x "A"(0, 0) x "A"(0, 0) x "A"(0, 1)] -(3)-> "A"(0, 1) insert#3 :: ["A"(0, 1) x "A"(0, 0) x "A"(0, 1) x "A"(0, 0) x "A"(0, 1)] -(3)-> "A"(0, 1) insert#4 :: ["A"(0, 0) x "A"(0, 0) x "A"(0, 1) x "A"(0, 0) x "A"(1, 0) x "A"(0, 1)] -(3)-> "A"(0, 1) nil :: [] -(0)-> "A"(0, 0) nil :: [] -(0)-> "A"(0, 1) nil :: [] -(0)-> "A"(7, 4) nil :: [] -(0)-> "A"(1, 0) nil :: [] -(0)-> "A"(7, 13) nil :: [] -(0)-> "A"(7, 15) nil :: [] -(0)-> "A"(7, 7) nil :: [] -(0)-> "A"(15, 12) split :: ["A"(7, 4)] -(7)-> "A"(0, 1) split#1 :: ["A"(7, 4)] -(7)-> "A"(0, 1) splitqs :: ["A"(0, 0) x "A"(1, 0)] -(0)-> "A"(1, 1) splitqs#1 :: ["A"(1, 0) x "A"(0, 0)] -(0)-> "A"(1, 1) splitqs#2 :: ["A"(1, 1) x "A"(0, 0) x "A"(0, 0)] -(1)-> "A"(1, 1) splitqs#3 :: ["A"(0, 0) x "A"(1, 0) x "A"(1, 0) x "A"(0, 0)] -(1)-> "A"(1, 1) tuple#2 :: ["A"(0, 0) x "A"(0, 0)] -(0)-> "A"(0, 0) tuple#2 :: ["A"(1, 0) x "A"(0, 0)] -(0)-> "A"(0, 1) tuple#2 :: ["A"(1, 0) x "A"(1, 0)] -(0)-> "A"(1, 1) tuple#2 :: ["A"(2, 0) x "A"(0, 0)] -(0)-> "A"(0, 2) tuple#2 :: ["A"(8, 0) x "A"(12, 0)] -(0)-> "A"(12, 8) insert# :: ["A"(0, 9) x "A"(0, 0)] -(3)-> "A"(0, 0) insert#1# :: ["A"(0, 0) x "A"(0, 0) x "A"(0, 9)] -(3)-> "A"(7, 0) insert#2# :: ["A"(0, 0) x "A"(0, 0) x "A"(0, 0) x "A"(0, 9)] -(3)-> "A"(11, 1) insert#3# :: ["A"(0, 0) x "A"(0, 0) x "A"(0, 0) x "A"(0, 0) x "A"(0, 9)] -(3)-> "A"(2, 2) insert#4# :: ["A"(0, 0) x "A"(0, 0) x "A"(0, 0) x "A"(0, 0) x "A"(0, 0) x "A"(0, 9)] -(3)-> "A"(10, 0) quicksort# :: ["A"(1, 0)] -(0)-> "A"(8, 6) quicksort#1# :: ["A"(1, 0)] -(0)-> "A"(9, 9) quicksort#2# :: ["A"(1, 1) x "A"(0, 0)] -(0)-> "A"(1, 10) sortAll# :: ["A"(0, 1)] -(4)-> "A"(1, 4) sortAll#1# :: ["A"(0, 1)] -(4)-> "A"(1, 4) sortAll#2# :: ["A"(0, 1) x "A"(0, 1)] -(4)-> "A"(1, 4) split# :: ["A"(14, 14)] -(15)-> "A"(0, 0) split#1# :: ["A"(14, 14)] -(15)-> "A"(0, 0) splitAndSort# :: ["A"(9, 10)] -(15)-> "A"(0, 0) c_6 :: ["A"(7, 0)] -(0)-> "A"(5, 2) c_7 :: ["A"(11, 0)] -(0)-> "A"(7, 4) c_8 :: ["A"(0, 1)] -(0)-> "A"(11, 1) c_10 :: ["A"(10, 0)] -(0)-> "A"(10, 2) c_11 :: ["A"(0, 0)] -(0)-> "A"(10, 10) c_13 :: ["A"(9, 7)] -(0)-> "A"(9, 7) c_14 :: ["A"(0, 9)] -(0)-> "A"(12, 9) c_16 :: ["A"(0, 0) x "A"(0, 0)] -(0)-> "A"(13, 10) Cost-free Signatures used: -------------------------- Base Constructor Signatures used: --------------------------------- "#0_A" :: [] -(0)-> "A"(0) "#EQ_A" :: [] -(0)-> "A"(0) "#GT_A" :: [] -(0)-> "A"(0) "#LT_A" :: [] -(0)-> "A"(0) "#false_A" :: [] -(0)-> "A"(0) "#neg_A" :: ["A"(0)] -(0)-> "A"(0) "#pos_A" :: ["A"(0)] -(0)-> "A"(0) "#s_A" :: ["A"(0)] -(0)-> "A"(0) "#true_A" :: [] -(0)-> "A"(0) "::_A" :: ["A"(0) x "A"(0)] -(0)-> "A"(0) "c_10_A" :: ["A"(0)] -(0)-> "A"(1, 0) "c_10_A" :: ["A"(0)] -(0)-> "A"(0, 1) "c_11_A" :: ["A"(0)] -(0)-> "A"(1, 0) "c_11_A" :: ["A"(0)] -(0)-> "A"(0, 1) "c_13_A" :: ["A"(0)] -(0)-> "A"(1, 0) "c_13_A" :: ["A"(0)] -(0)-> "A"(0, 1) "c_14_A" :: ["A"(0)] -(0)-> "A"(1, 0) "c_14_A" :: ["A"(0)] -(0)-> "A"(0, 1) "c_16_A" :: ["A"(0) x "A"(0)] -(0)-> "A"(1, 0) "c_16_A" :: ["A"(0) x "A"(0)] -(0)-> "A"(0, 1) "c_6_A" :: ["A"(0)] -(0)-> "A"(1, 0) "c_6_A" :: ["A"(0)] -(0)-> "A"(0, 1) "c_7_A" :: ["A"(0)] -(0)-> "A"(1, 0) "c_7_A" :: ["A"(0)] -(0)-> "A"(0, 1) "c_8_A" :: ["A"(0)] -(0)-> "A"(1, 0) "c_8_A" :: ["A"(0)] -(0)-> "A"(0, 1) "nil_A" :: [] -(0)-> "A"(1, 0) "nil_A" :: [] -(0)-> "A"(0, 1) "tuple#2_A" :: ["A"(0) x "A"(0)] -(0)-> "A"(0) Following Still Strict Rules were Typed as: ------------------------------------------- 1. Strict: quicksort#1#(::(@z,@zs)) -> c_14(quicksort#2#(splitqs(@z,@zs),@z)) 2. Weak: *** Step 7.b:1.b:1: RemoveWeakSuffixes WORST_CASE(?,O(n^2)) + Considered Problem: - Strict DPs: append#(@l,@ys) -> c_3(append#1#(@l,@ys)) append#1#(::(@x,@xs),@ys) -> c_4(append#(@xs,@ys)) splitqs#(@pivot,@l) -> c_25(splitqs#1#(@l,@pivot)) splitqs#1#(::(@x,@xs),@pivot) -> c_26(splitqs#(@pivot,@xs)) - Weak DPs: insert#(@x,@l) -> insert#1#(@x,@l,@x) insert#1#(tuple#2(@valX,@keyX),@l,@x) -> insert#2#(@l,@keyX,@valX,@x) insert#2#(::(@l1,@ls),@keyX,@valX,@x) -> insert#3#(@l1,@keyX,@ls,@valX,@x) insert#3#(tuple#2(@vals1,@key1),@keyX,@ls,@valX,@x) -> insert#4#(#equal(@key1,@keyX) ,@key1 ,@ls ,@valX ,@vals1 ,@x) insert#4#(#false(),@key1,@ls,@valX,@vals1,@x) -> insert#(@x,@ls) quicksort#(@l) -> quicksort#1#(@l) quicksort#1#(::(@z,@zs)) -> quicksort#2#(splitqs(@z,@zs),@z) quicksort#1#(::(@z,@zs)) -> splitqs#(@z,@zs) quicksort#2#(tuple#2(@xs,@ys),@z) -> append#(quicksort(@xs),::(@z,quicksort(@ys))) quicksort#2#(tuple#2(@xs,@ys),@z) -> quicksort#(@xs) quicksort#2#(tuple#2(@xs,@ys),@z) -> quicksort#(@ys) sortAll#(@l) -> sortAll#1#(@l) sortAll#1#(::(@x,@xs)) -> sortAll#2#(@x,@xs) sortAll#2#(tuple#2(@vals,@key),@xs) -> quicksort#(@vals) sortAll#2#(tuple#2(@vals,@key),@xs) -> sortAll#(@xs) split#(@l) -> split#1#(@l) split#1#(::(@x,@xs)) -> insert#(@x,split(@xs)) split#1#(::(@x,@xs)) -> split#(@xs) splitAndSort#(@l) -> sortAll#(split(@l)) splitAndSort#(@l) -> split#(@l) - Weak TRS: #and(#false(),#false()) -> #false() #and(#false(),#true()) -> #false() #and(#true(),#false()) -> #false() #and(#true(),#true()) -> #true() #ckgt(#EQ()) -> #false() #ckgt(#GT()) -> #true() #ckgt(#LT()) -> #false() #compare(#0(),#0()) -> #EQ() #compare(#0(),#neg(@y)) -> #GT() #compare(#0(),#pos(@y)) -> #LT() #compare(#0(),#s(@y)) -> #LT() #compare(#neg(@x),#0()) -> #LT() #compare(#neg(@x),#neg(@y)) -> #compare(@y,@x) #compare(#neg(@x),#pos(@y)) -> #LT() #compare(#pos(@x),#0()) -> #GT() #compare(#pos(@x),#neg(@y)) -> #GT() #compare(#pos(@x),#pos(@y)) -> #compare(@x,@y) #compare(#s(@x),#0()) -> #GT() #compare(#s(@x),#s(@y)) -> #compare(@x,@y) #eq(#0(),#0()) -> #true() #eq(#0(),#neg(@y)) -> #false() #eq(#0(),#pos(@y)) -> #false() #eq(#0(),#s(@y)) -> #false() #eq(#neg(@x),#0()) -> #false() #eq(#neg(@x),#neg(@y)) -> #eq(@x,@y) #eq(#neg(@x),#pos(@y)) -> #false() #eq(#pos(@x),#0()) -> #false() #eq(#pos(@x),#neg(@y)) -> #false() #eq(#pos(@x),#pos(@y)) -> #eq(@x,@y) #eq(#s(@x),#0()) -> #false() #eq(#s(@x),#s(@y)) -> #eq(@x,@y) #eq(::(@x_1,@x_2),::(@y_1,@y_2)) -> #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #eq(::(@x_1,@x_2),nil()) -> #false() #eq(::(@x_1,@x_2),tuple#2(@y_1,@y_2)) -> #false() #eq(nil(),::(@y_1,@y_2)) -> #false() #eq(nil(),nil()) -> #true() #eq(nil(),tuple#2(@y_1,@y_2)) -> #false() #eq(tuple#2(@x_1,@x_2),::(@y_1,@y_2)) -> #false() #eq(tuple#2(@x_1,@x_2),nil()) -> #false() #eq(tuple#2(@x_1,@x_2),tuple#2(@y_1,@y_2)) -> #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #equal(@x,@y) -> #eq(@x,@y) #greater(@x,@y) -> #ckgt(#compare(@x,@y)) append(@l,@ys) -> append#1(@l,@ys) append#1(::(@x,@xs),@ys) -> ::(@x,append(@xs,@ys)) append#1(nil(),@ys) -> @ys insert(@x,@l) -> insert#1(@x,@l,@x) insert#1(tuple#2(@valX,@keyX),@l,@x) -> insert#2(@l,@keyX,@valX,@x) insert#2(::(@l1,@ls),@keyX,@valX,@x) -> insert#3(@l1,@keyX,@ls,@valX,@x) insert#2(nil(),@keyX,@valX,@x) -> ::(tuple#2(::(@valX,nil()),@keyX),nil()) insert#3(tuple#2(@vals1,@key1),@keyX,@ls,@valX,@x) -> insert#4(#equal(@key1,@keyX) ,@key1 ,@ls ,@valX ,@vals1 ,@x) insert#4(#false(),@key1,@ls,@valX,@vals1,@x) -> ::(tuple#2(@vals1,@key1),insert(@x,@ls)) insert#4(#true(),@key1,@ls,@valX,@vals1,@x) -> ::(tuple#2(::(@valX,@vals1),@key1),@ls) quicksort(@l) -> quicksort#1(@l) quicksort#1(::(@z,@zs)) -> quicksort#2(splitqs(@z,@zs),@z) quicksort#1(nil()) -> nil() quicksort#2(tuple#2(@xs,@ys),@z) -> append(quicksort(@xs),::(@z,quicksort(@ys))) split(@l) -> split#1(@l) split#1(::(@x,@xs)) -> insert(@x,split(@xs)) split#1(nil()) -> nil() splitqs(@pivot,@l) -> splitqs#1(@l,@pivot) splitqs#1(::(@x,@xs),@pivot) -> splitqs#2(splitqs(@pivot,@xs),@pivot,@x) splitqs#1(nil(),@pivot) -> tuple#2(nil(),nil()) splitqs#2(tuple#2(@ls,@rs),@pivot,@x) -> splitqs#3(#greater(@x,@pivot),@ls,@rs,@x) splitqs#3(#false(),@ls,@rs,@x) -> tuple#2(::(@x,@ls),@rs) splitqs#3(#true(),@ls,@rs,@x) -> tuple#2(@ls,::(@x,@rs)) - Signature: {#and/2,#ckgt/1,#compare/2,#eq/2,#equal/2,#greater/2,append/2,append#1/2,insert/2,insert#1/3,insert#2/4 ,insert#3/5,insert#4/6,quicksort/1,quicksort#1/1,quicksort#2/2,sortAll/1,sortAll#1/1,sortAll#2/2,split/1 ,split#1/1,splitAndSort/1,splitqs/2,splitqs#1/2,splitqs#2/3,splitqs#3/4,#and#/2,#ckgt#/1,#compare#/2,#eq#/2 ,#equal#/2,#greater#/2,append#/2,append#1#/2,insert#/2,insert#1#/3,insert#2#/4,insert#3#/5,insert#4#/6 ,quicksort#/1,quicksort#1#/1,quicksort#2#/2,sortAll#/1,sortAll#1#/1,sortAll#2#/2,split#/1,split#1#/1 ,splitAndSort#/1,splitqs#/2,splitqs#1#/2,splitqs#2#/3,splitqs#3#/4} / {#0/0,#EQ/0,#GT/0,#LT/0,#false/0 ,#neg/1,#pos/1,#s/1,#true/0,::/2,nil/0,tuple#2/2,c_1/1,c_2/2,c_3/1,c_4/1,c_5/0,c_6/1,c_7/1,c_8/1,c_9/0 ,c_10/1,c_11/1,c_12/0,c_13/1,c_14/2,c_15/0,c_16/3,c_17/1,c_18/1,c_19/0,c_20/2,c_21/1,c_22/2,c_23/0,c_24/2 ,c_25/1,c_26/1,c_27/0,c_28/2,c_29/0,c_30/0,c_31/0,c_32/0,c_33/0,c_34/0,c_35/0,c_36/0,c_37/0,c_38/0,c_39/0 ,c_40/0,c_41/0,c_42/0,c_43/1,c_44/0,c_45/0,c_46/0,c_47/1,c_48/0,c_49/1,c_50/0,c_51/0,c_52/0,c_53/0,c_54/0 ,c_55/1,c_56/0,c_57/0,c_58/0,c_59/1,c_60/0,c_61/1,c_62/3,c_63/0,c_64/0,c_65/0,c_66/0,c_67/0,c_68/0,c_69/0 ,c_70/3} - Obligation: innermost runtime complexity wrt. defined symbols {#and#,#ckgt#,#compare#,#eq#,#equal#,#greater#,append# ,append#1#,insert#,insert#1#,insert#2#,insert#3#,insert#4#,quicksort#,quicksort#1#,quicksort#2#,sortAll# ,sortAll#1#,sortAll#2#,split#,split#1#,splitAndSort#,splitqs#,splitqs#1#,splitqs#2# ,splitqs#3#} and constructors {#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} + Applied Processor: RemoveWeakSuffixes + Details: Consider the dependency graph 1:S:append#(@l,@ys) -> c_3(append#1#(@l,@ys)) -->_1 append#1#(::(@x,@xs),@ys) -> c_4(append#(@xs,@ys)):2 2:S:append#1#(::(@x,@xs),@ys) -> c_4(append#(@xs,@ys)) -->_1 append#(@l,@ys) -> c_3(append#1#(@l,@ys)):1 3:S:splitqs#(@pivot,@l) -> c_25(splitqs#1#(@l,@pivot)) -->_1 splitqs#1#(::(@x,@xs),@pivot) -> c_26(splitqs#(@pivot,@xs)):4 4:S:splitqs#1#(::(@x,@xs),@pivot) -> c_26(splitqs#(@pivot,@xs)) -->_1 splitqs#(@pivot,@l) -> c_25(splitqs#1#(@l,@pivot)):3 5:W:insert#(@x,@l) -> insert#1#(@x,@l,@x) -->_1 insert#1#(tuple#2(@valX,@keyX),@l,@x) -> insert#2#(@l,@keyX,@valX,@x):6 6:W:insert#1#(tuple#2(@valX,@keyX),@l,@x) -> insert#2#(@l,@keyX,@valX,@x) -->_1 insert#2#(::(@l1,@ls),@keyX,@valX,@x) -> insert#3#(@l1,@keyX,@ls,@valX,@x):7 7:W:insert#2#(::(@l1,@ls),@keyX,@valX,@x) -> insert#3#(@l1,@keyX,@ls,@valX,@x) -->_1 insert#3#(tuple#2(@vals1,@key1),@keyX,@ls,@valX,@x) -> insert#4#(#equal(@key1,@keyX) ,@key1 ,@ls ,@valX ,@vals1 ,@x):8 8:W:insert#3#(tuple#2(@vals1,@key1),@keyX,@ls,@valX,@x) -> insert#4#(#equal(@key1,@keyX) ,@key1 ,@ls ,@valX ,@vals1 ,@x) -->_1 insert#4#(#false(),@key1,@ls,@valX,@vals1,@x) -> insert#(@x,@ls):9 9:W:insert#4#(#false(),@key1,@ls,@valX,@vals1,@x) -> insert#(@x,@ls) -->_1 insert#(@x,@l) -> insert#1#(@x,@l,@x):5 10:W:quicksort#(@l) -> quicksort#1#(@l) -->_1 quicksort#1#(::(@z,@zs)) -> splitqs#(@z,@zs):12 -->_1 quicksort#1#(::(@z,@zs)) -> quicksort#2#(splitqs(@z,@zs),@z):11 11:W:quicksort#1#(::(@z,@zs)) -> quicksort#2#(splitqs(@z,@zs),@z) -->_1 quicksort#2#(tuple#2(@xs,@ys),@z) -> quicksort#(@ys):15 -->_1 quicksort#2#(tuple#2(@xs,@ys),@z) -> quicksort#(@xs):14 -->_1 quicksort#2#(tuple#2(@xs,@ys),@z) -> append#(quicksort(@xs),::(@z,quicksort(@ys))):13 12:W:quicksort#1#(::(@z,@zs)) -> splitqs#(@z,@zs) -->_1 splitqs#(@pivot,@l) -> c_25(splitqs#1#(@l,@pivot)):3 13:W:quicksort#2#(tuple#2(@xs,@ys),@z) -> append#(quicksort(@xs),::(@z,quicksort(@ys))) -->_1 append#(@l,@ys) -> c_3(append#1#(@l,@ys)):1 14:W:quicksort#2#(tuple#2(@xs,@ys),@z) -> quicksort#(@xs) -->_1 quicksort#(@l) -> quicksort#1#(@l):10 15:W:quicksort#2#(tuple#2(@xs,@ys),@z) -> quicksort#(@ys) -->_1 quicksort#(@l) -> quicksort#1#(@l):10 16:W:sortAll#(@l) -> sortAll#1#(@l) -->_1 sortAll#1#(::(@x,@xs)) -> sortAll#2#(@x,@xs):17 17:W:sortAll#1#(::(@x,@xs)) -> sortAll#2#(@x,@xs) -->_1 sortAll#2#(tuple#2(@vals,@key),@xs) -> sortAll#(@xs):19 -->_1 sortAll#2#(tuple#2(@vals,@key),@xs) -> quicksort#(@vals):18 18:W:sortAll#2#(tuple#2(@vals,@key),@xs) -> quicksort#(@vals) -->_1 quicksort#(@l) -> quicksort#1#(@l):10 19:W:sortAll#2#(tuple#2(@vals,@key),@xs) -> sortAll#(@xs) -->_1 sortAll#(@l) -> sortAll#1#(@l):16 20:W:split#(@l) -> split#1#(@l) -->_1 split#1#(::(@x,@xs)) -> split#(@xs):22 -->_1 split#1#(::(@x,@xs)) -> insert#(@x,split(@xs)):21 21:W:split#1#(::(@x,@xs)) -> insert#(@x,split(@xs)) -->_1 insert#(@x,@l) -> insert#1#(@x,@l,@x):5 22:W:split#1#(::(@x,@xs)) -> split#(@xs) -->_1 split#(@l) -> split#1#(@l):20 23:W:splitAndSort#(@l) -> sortAll#(split(@l)) -->_1 sortAll#(@l) -> sortAll#1#(@l):16 24:W:splitAndSort#(@l) -> split#(@l) -->_1 split#(@l) -> split#1#(@l):20 The following weak DPs constitute a sub-graph of the DG that is closed under successors. The DPs are removed. 24: splitAndSort#(@l) -> split#(@l) 20: split#(@l) -> split#1#(@l) 22: split#1#(::(@x,@xs)) -> split#(@xs) 21: split#1#(::(@x,@xs)) -> insert#(@x,split(@xs)) 5: insert#(@x,@l) -> insert#1#(@x,@l,@x) 9: insert#4#(#false(),@key1,@ls,@valX,@vals1,@x) -> insert#(@x,@ls) 8: insert#3#(tuple#2(@vals1,@key1),@keyX,@ls,@valX,@x) -> insert#4#(#equal(@key1,@keyX) ,@key1 ,@ls ,@valX ,@vals1 ,@x) 7: insert#2#(::(@l1,@ls),@keyX,@valX,@x) -> insert#3#(@l1,@keyX,@ls,@valX,@x) 6: insert#1#(tuple#2(@valX,@keyX),@l,@x) -> insert#2#(@l,@keyX,@valX,@x) *** Step 7.b:1.b:2: WeightGap WORST_CASE(?,O(n^2)) + Considered Problem: - Strict DPs: append#(@l,@ys) -> c_3(append#1#(@l,@ys)) append#1#(::(@x,@xs),@ys) -> c_4(append#(@xs,@ys)) splitqs#(@pivot,@l) -> c_25(splitqs#1#(@l,@pivot)) splitqs#1#(::(@x,@xs),@pivot) -> c_26(splitqs#(@pivot,@xs)) - Weak DPs: quicksort#(@l) -> quicksort#1#(@l) quicksort#1#(::(@z,@zs)) -> quicksort#2#(splitqs(@z,@zs),@z) quicksort#1#(::(@z,@zs)) -> splitqs#(@z,@zs) quicksort#2#(tuple#2(@xs,@ys),@z) -> append#(quicksort(@xs),::(@z,quicksort(@ys))) quicksort#2#(tuple#2(@xs,@ys),@z) -> quicksort#(@xs) quicksort#2#(tuple#2(@xs,@ys),@z) -> quicksort#(@ys) sortAll#(@l) -> sortAll#1#(@l) sortAll#1#(::(@x,@xs)) -> sortAll#2#(@x,@xs) sortAll#2#(tuple#2(@vals,@key),@xs) -> quicksort#(@vals) sortAll#2#(tuple#2(@vals,@key),@xs) -> sortAll#(@xs) splitAndSort#(@l) -> sortAll#(split(@l)) - Weak TRS: #and(#false(),#false()) -> #false() #and(#false(),#true()) -> #false() #and(#true(),#false()) -> #false() #and(#true(),#true()) -> #true() #ckgt(#EQ()) -> #false() #ckgt(#GT()) -> #true() #ckgt(#LT()) -> #false() #compare(#0(),#0()) -> #EQ() #compare(#0(),#neg(@y)) -> #GT() #compare(#0(),#pos(@y)) -> #LT() #compare(#0(),#s(@y)) -> #LT() #compare(#neg(@x),#0()) -> #LT() #compare(#neg(@x),#neg(@y)) -> #compare(@y,@x) #compare(#neg(@x),#pos(@y)) -> #LT() #compare(#pos(@x),#0()) -> #GT() #compare(#pos(@x),#neg(@y)) -> #GT() #compare(#pos(@x),#pos(@y)) -> #compare(@x,@y) #compare(#s(@x),#0()) -> #GT() #compare(#s(@x),#s(@y)) -> #compare(@x,@y) #eq(#0(),#0()) -> #true() #eq(#0(),#neg(@y)) -> #false() #eq(#0(),#pos(@y)) -> #false() #eq(#0(),#s(@y)) -> #false() #eq(#neg(@x),#0()) -> #false() #eq(#neg(@x),#neg(@y)) -> #eq(@x,@y) #eq(#neg(@x),#pos(@y)) -> #false() #eq(#pos(@x),#0()) -> #false() #eq(#pos(@x),#neg(@y)) -> #false() #eq(#pos(@x),#pos(@y)) -> #eq(@x,@y) #eq(#s(@x),#0()) -> #false() #eq(#s(@x),#s(@y)) -> #eq(@x,@y) #eq(::(@x_1,@x_2),::(@y_1,@y_2)) -> #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #eq(::(@x_1,@x_2),nil()) -> #false() #eq(::(@x_1,@x_2),tuple#2(@y_1,@y_2)) -> #false() #eq(nil(),::(@y_1,@y_2)) -> #false() #eq(nil(),nil()) -> #true() #eq(nil(),tuple#2(@y_1,@y_2)) -> #false() #eq(tuple#2(@x_1,@x_2),::(@y_1,@y_2)) -> #false() #eq(tuple#2(@x_1,@x_2),nil()) -> #false() #eq(tuple#2(@x_1,@x_2),tuple#2(@y_1,@y_2)) -> #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #equal(@x,@y) -> #eq(@x,@y) #greater(@x,@y) -> #ckgt(#compare(@x,@y)) append(@l,@ys) -> append#1(@l,@ys) append#1(::(@x,@xs),@ys) -> ::(@x,append(@xs,@ys)) append#1(nil(),@ys) -> @ys insert(@x,@l) -> insert#1(@x,@l,@x) insert#1(tuple#2(@valX,@keyX),@l,@x) -> insert#2(@l,@keyX,@valX,@x) insert#2(::(@l1,@ls),@keyX,@valX,@x) -> insert#3(@l1,@keyX,@ls,@valX,@x) insert#2(nil(),@keyX,@valX,@x) -> ::(tuple#2(::(@valX,nil()),@keyX),nil()) insert#3(tuple#2(@vals1,@key1),@keyX,@ls,@valX,@x) -> insert#4(#equal(@key1,@keyX) ,@key1 ,@ls ,@valX ,@vals1 ,@x) insert#4(#false(),@key1,@ls,@valX,@vals1,@x) -> ::(tuple#2(@vals1,@key1),insert(@x,@ls)) insert#4(#true(),@key1,@ls,@valX,@vals1,@x) -> ::(tuple#2(::(@valX,@vals1),@key1),@ls) quicksort(@l) -> quicksort#1(@l) quicksort#1(::(@z,@zs)) -> quicksort#2(splitqs(@z,@zs),@z) quicksort#1(nil()) -> nil() quicksort#2(tuple#2(@xs,@ys),@z) -> append(quicksort(@xs),::(@z,quicksort(@ys))) split(@l) -> split#1(@l) split#1(::(@x,@xs)) -> insert(@x,split(@xs)) split#1(nil()) -> nil() splitqs(@pivot,@l) -> splitqs#1(@l,@pivot) splitqs#1(::(@x,@xs),@pivot) -> splitqs#2(splitqs(@pivot,@xs),@pivot,@x) splitqs#1(nil(),@pivot) -> tuple#2(nil(),nil()) splitqs#2(tuple#2(@ls,@rs),@pivot,@x) -> splitqs#3(#greater(@x,@pivot),@ls,@rs,@x) splitqs#3(#false(),@ls,@rs,@x) -> tuple#2(::(@x,@ls),@rs) splitqs#3(#true(),@ls,@rs,@x) -> tuple#2(@ls,::(@x,@rs)) - Signature: {#and/2,#ckgt/1,#compare/2,#eq/2,#equal/2,#greater/2,append/2,append#1/2,insert/2,insert#1/3,insert#2/4 ,insert#3/5,insert#4/6,quicksort/1,quicksort#1/1,quicksort#2/2,sortAll/1,sortAll#1/1,sortAll#2/2,split/1 ,split#1/1,splitAndSort/1,splitqs/2,splitqs#1/2,splitqs#2/3,splitqs#3/4,#and#/2,#ckgt#/1,#compare#/2,#eq#/2 ,#equal#/2,#greater#/2,append#/2,append#1#/2,insert#/2,insert#1#/3,insert#2#/4,insert#3#/5,insert#4#/6 ,quicksort#/1,quicksort#1#/1,quicksort#2#/2,sortAll#/1,sortAll#1#/1,sortAll#2#/2,split#/1,split#1#/1 ,splitAndSort#/1,splitqs#/2,splitqs#1#/2,splitqs#2#/3,splitqs#3#/4} / {#0/0,#EQ/0,#GT/0,#LT/0,#false/0 ,#neg/1,#pos/1,#s/1,#true/0,::/2,nil/0,tuple#2/2,c_1/1,c_2/2,c_3/1,c_4/1,c_5/0,c_6/1,c_7/1,c_8/1,c_9/0 ,c_10/1,c_11/1,c_12/0,c_13/1,c_14/2,c_15/0,c_16/3,c_17/1,c_18/1,c_19/0,c_20/2,c_21/1,c_22/2,c_23/0,c_24/2 ,c_25/1,c_26/1,c_27/0,c_28/2,c_29/0,c_30/0,c_31/0,c_32/0,c_33/0,c_34/0,c_35/0,c_36/0,c_37/0,c_38/0,c_39/0 ,c_40/0,c_41/0,c_42/0,c_43/1,c_44/0,c_45/0,c_46/0,c_47/1,c_48/0,c_49/1,c_50/0,c_51/0,c_52/0,c_53/0,c_54/0 ,c_55/1,c_56/0,c_57/0,c_58/0,c_59/1,c_60/0,c_61/1,c_62/3,c_63/0,c_64/0,c_65/0,c_66/0,c_67/0,c_68/0,c_69/0 ,c_70/3} - Obligation: innermost runtime complexity wrt. defined symbols {#and#,#ckgt#,#compare#,#eq#,#equal#,#greater#,append# ,append#1#,insert#,insert#1#,insert#2#,insert#3#,insert#4#,quicksort#,quicksort#1#,quicksort#2#,sortAll# ,sortAll#1#,sortAll#2#,split#,split#1#,splitAndSort#,splitqs#,splitqs#1#,splitqs#2# ,splitqs#3#} and constructors {#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} + Applied Processor: WeightGap {wgDimension = 1, wgDegree = 1, wgKind = Algebraic, wgUArgs = UArgs, wgOn = WgOnAny} + Details: The weightgap principle applies using the following constant growth matrix-interpretation: We apply a matrix interpretation of kind constructor based matrix interpretation: The following argument positions are considered usable: uargs(#and) = {1,2}, uargs(#ckgt) = {1}, uargs(::) = {2}, uargs(append) = {1,2}, uargs(insert) = {2}, uargs(insert#4) = {1}, uargs(quicksort#2) = {1}, uargs(splitqs#2) = {1}, uargs(splitqs#3) = {1}, uargs(append#) = {1,2}, uargs(quicksort#2#) = {1}, uargs(sortAll#) = {1}, uargs(c_3) = {1}, uargs(c_4) = {1}, uargs(c_25) = {1}, uargs(c_26) = {1} Following symbols are considered usable: all TcT has computed the following interpretation: p(#0) = [0] p(#EQ) = [0] p(#GT) = [0] p(#LT) = [0] p(#and) = [1] x1 + [1] x2 + [0] p(#ckgt) = [1] x1 + [0] p(#compare) = [0] p(#eq) = [0] p(#equal) = [0] p(#false) = [0] p(#greater) = [0] p(#neg) = [1] p(#pos) = [1] x1 + [0] p(#s) = [1] x1 + [4] p(#true) = [0] p(::) = [1] x2 + [0] p(append) = [1] x1 + [1] x2 + [0] p(append#1) = [1] x1 + [1] x2 + [0] p(insert) = [1] x2 + [0] p(insert#1) = [1] x2 + [0] p(insert#2) = [1] x1 + [0] p(insert#3) = [1] x3 + [0] p(insert#4) = [1] x1 + [1] x3 + [0] p(nil) = [0] p(quicksort) = [0] p(quicksort#1) = [0] p(quicksort#2) = [1] x1 + [0] p(sortAll) = [0] p(sortAll#1) = [0] p(sortAll#2) = [0] p(split) = [1] p(split#1) = [1] p(splitAndSort) = [0] p(splitqs) = [0] p(splitqs#1) = [0] p(splitqs#2) = [1] x1 + [0] p(splitqs#3) = [1] x1 + [0] p(tuple#2) = [0] p(#and#) = [0] p(#ckgt#) = [0] p(#compare#) = [2] p(#eq#) = [0] p(#equal#) = [0] p(#greater#) = [0] p(append#) = [1] x1 + [1] x2 + [0] p(append#1#) = [1] x1 + [1] x2 + [3] p(insert#) = [0] p(insert#1#) = [0] p(insert#2#) = [2] x4 + [0] p(insert#3#) = [0] p(insert#4#) = [0] p(quicksort#) = [0] p(quicksort#1#) = [0] p(quicksort#2#) = [1] x1 + [0] p(sortAll#) = [1] x1 + [0] p(sortAll#1#) = [1] x1 + [0] p(sortAll#2#) = [1] x2 + [0] p(split#) = [0] p(split#1#) = [4] x1 + [0] p(splitAndSort#) = [2] p(splitqs#) = [0] p(splitqs#1#) = [2] p(splitqs#2#) = [0] p(splitqs#3#) = [0] p(c_1) = [0] p(c_2) = [0] p(c_3) = [1] x1 + [1] p(c_4) = [1] x1 + [2] p(c_5) = [0] p(c_6) = [0] p(c_7) = [2] x1 + [0] p(c_8) = [2] x1 + [4] p(c_9) = [0] p(c_10) = [0] p(c_11) = [1] x1 + [4] p(c_12) = [0] p(c_13) = [1] p(c_14) = [1] x2 + [1] p(c_15) = [1] p(c_16) = [2] x1 + [1] x2 + [1] x3 + [2] p(c_17) = [0] p(c_18) = [1] x1 + [0] p(c_19) = [0] p(c_20) = [1] x2 + [0] p(c_21) = [1] x1 + [0] p(c_22) = [2] x1 + [1] p(c_23) = [1] p(c_24) = [0] p(c_25) = [1] x1 + [0] p(c_26) = [1] x1 + [5] p(c_27) = [1] p(c_28) = [4] x1 + [2] x2 + [2] p(c_29) = [1] p(c_30) = [1] p(c_31) = [0] p(c_32) = [2] p(c_33) = [2] p(c_34) = [0] p(c_35) = [0] p(c_36) = [0] p(c_37) = [1] p(c_38) = [0] p(c_39) = [1] p(c_40) = [1] p(c_41) = [1] p(c_42) = [0] p(c_43) = [2] p(c_44) = [0] p(c_45) = [1] p(c_46) = [0] p(c_47) = [1] x1 + [1] p(c_48) = [1] p(c_49) = [2] x1 + [0] p(c_50) = [1] p(c_51) = [0] p(c_52) = [0] p(c_53) = [2] p(c_54) = [1] p(c_55) = [0] p(c_56) = [1] p(c_57) = [1] p(c_58) = [4] p(c_59) = [1] x1 + [2] p(c_60) = [0] p(c_61) = [2] x1 + [2] p(c_62) = [1] x1 + [4] x2 + [1] p(c_63) = [0] p(c_64) = [1] p(c_65) = [1] p(c_66) = [0] p(c_67) = [1] p(c_68) = [1] p(c_69) = [0] p(c_70) = [4] x2 + [4] Following rules are strictly oriented: append#1#(::(@x,@xs),@ys) = [1] @xs + [1] @ys + [3] > [1] @xs + [1] @ys + [2] = c_4(append#(@xs,@ys)) Following rules are (at-least) weakly oriented: append#(@l,@ys) = [1] @l + [1] @ys + [0] >= [1] @l + [1] @ys + [4] = c_3(append#1#(@l,@ys)) quicksort#(@l) = [0] >= [0] = quicksort#1#(@l) quicksort#1#(::(@z,@zs)) = [0] >= [0] = quicksort#2#(splitqs(@z,@zs),@z) quicksort#1#(::(@z,@zs)) = [0] >= [0] = splitqs#(@z,@zs) quicksort#2#(tuple#2(@xs,@ys),@z) = [0] >= [0] = append#(quicksort(@xs),::(@z,quicksort(@ys))) quicksort#2#(tuple#2(@xs,@ys),@z) = [0] >= [0] = quicksort#(@xs) quicksort#2#(tuple#2(@xs,@ys),@z) = [0] >= [0] = quicksort#(@ys) sortAll#(@l) = [1] @l + [0] >= [1] @l + [0] = sortAll#1#(@l) sortAll#1#(::(@x,@xs)) = [1] @xs + [0] >= [1] @xs + [0] = sortAll#2#(@x,@xs) sortAll#2#(tuple#2(@vals,@key),@xs) = [1] @xs + [0] >= [0] = quicksort#(@vals) sortAll#2#(tuple#2(@vals,@key),@xs) = [1] @xs + [0] >= [1] @xs + [0] = sortAll#(@xs) splitAndSort#(@l) = [2] >= [1] = sortAll#(split(@l)) splitqs#(@pivot,@l) = [0] >= [2] = c_25(splitqs#1#(@l,@pivot)) splitqs#1#(::(@x,@xs),@pivot) = [2] >= [5] = c_26(splitqs#(@pivot,@xs)) #and(#false(),#false()) = [0] >= [0] = #false() #and(#false(),#true()) = [0] >= [0] = #false() #and(#true(),#false()) = [0] >= [0] = #false() #and(#true(),#true()) = [0] >= [0] = #true() #ckgt(#EQ()) = [0] >= [0] = #false() #ckgt(#GT()) = [0] >= [0] = #true() #ckgt(#LT()) = [0] >= [0] = #false() #compare(#0(),#0()) = [0] >= [0] = #EQ() #compare(#0(),#neg(@y)) = [0] >= [0] = #GT() #compare(#0(),#pos(@y)) = [0] >= [0] = #LT() #compare(#0(),#s(@y)) = [0] >= [0] = #LT() #compare(#neg(@x),#0()) = [0] >= [0] = #LT() #compare(#neg(@x),#neg(@y)) = [0] >= [0] = #compare(@y,@x) #compare(#neg(@x),#pos(@y)) = [0] >= [0] = #LT() #compare(#pos(@x),#0()) = [0] >= [0] = #GT() #compare(#pos(@x),#neg(@y)) = [0] >= [0] = #GT() #compare(#pos(@x),#pos(@y)) = [0] >= [0] = #compare(@x,@y) #compare(#s(@x),#0()) = [0] >= [0] = #GT() #compare(#s(@x),#s(@y)) = [0] >= [0] = #compare(@x,@y) #eq(#0(),#0()) = [0] >= [0] = #true() #eq(#0(),#neg(@y)) = [0] >= [0] = #false() #eq(#0(),#pos(@y)) = [0] >= [0] = #false() #eq(#0(),#s(@y)) = [0] >= [0] = #false() #eq(#neg(@x),#0()) = [0] >= [0] = #false() #eq(#neg(@x),#neg(@y)) = [0] >= [0] = #eq(@x,@y) #eq(#neg(@x),#pos(@y)) = [0] >= [0] = #false() #eq(#pos(@x),#0()) = [0] >= [0] = #false() #eq(#pos(@x),#neg(@y)) = [0] >= [0] = #false() #eq(#pos(@x),#pos(@y)) = [0] >= [0] = #eq(@x,@y) #eq(#s(@x),#0()) = [0] >= [0] = #false() #eq(#s(@x),#s(@y)) = [0] >= [0] = #eq(@x,@y) #eq(::(@x_1,@x_2),::(@y_1,@y_2)) = [0] >= [0] = #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #eq(::(@x_1,@x_2),nil()) = [0] >= [0] = #false() #eq(::(@x_1,@x_2),tuple#2(@y_1,@y_2)) = [0] >= [0] = #false() #eq(nil(),::(@y_1,@y_2)) = [0] >= [0] = #false() #eq(nil(),nil()) = [0] >= [0] = #true() #eq(nil(),tuple#2(@y_1,@y_2)) = [0] >= [0] = #false() #eq(tuple#2(@x_1,@x_2),::(@y_1,@y_2)) = [0] >= [0] = #false() #eq(tuple#2(@x_1,@x_2),nil()) = [0] >= [0] = #false() #eq(tuple#2(@x_1,@x_2),tuple#2(@y_1,@y_2)) = [0] >= [0] = #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #equal(@x,@y) = [0] >= [0] = #eq(@x,@y) #greater(@x,@y) = [0] >= [0] = #ckgt(#compare(@x,@y)) append(@l,@ys) = [1] @l + [1] @ys + [0] >= [1] @l + [1] @ys + [0] = append#1(@l,@ys) append#1(::(@x,@xs),@ys) = [1] @xs + [1] @ys + [0] >= [1] @xs + [1] @ys + [0] = ::(@x,append(@xs,@ys)) append#1(nil(),@ys) = [1] @ys + [0] >= [1] @ys + [0] = @ys insert(@x,@l) = [1] @l + [0] >= [1] @l + [0] = insert#1(@x,@l,@x) insert#1(tuple#2(@valX,@keyX),@l,@x) = [1] @l + [0] >= [1] @l + [0] = insert#2(@l,@keyX,@valX,@x) insert#2(::(@l1,@ls),@keyX,@valX,@x) = [1] @ls + [0] >= [1] @ls + [0] = insert#3(@l1,@keyX,@ls,@valX,@x) insert#2(nil(),@keyX,@valX,@x) = [0] >= [0] = ::(tuple#2(::(@valX,nil()),@keyX),nil()) insert#3(tuple#2(@vals1,@key1),@keyX,@ls,@valX,@x) = [1] @ls + [0] >= [1] @ls + [0] = insert#4(#equal(@key1,@keyX),@key1,@ls,@valX,@vals1,@x) insert#4(#false(),@key1,@ls,@valX,@vals1,@x) = [1] @ls + [0] >= [1] @ls + [0] = ::(tuple#2(@vals1,@key1),insert(@x,@ls)) insert#4(#true(),@key1,@ls,@valX,@vals1,@x) = [1] @ls + [0] >= [1] @ls + [0] = ::(tuple#2(::(@valX,@vals1),@key1),@ls) quicksort(@l) = [0] >= [0] = quicksort#1(@l) quicksort#1(::(@z,@zs)) = [0] >= [0] = quicksort#2(splitqs(@z,@zs),@z) quicksort#1(nil()) = [0] >= [0] = nil() quicksort#2(tuple#2(@xs,@ys),@z) = [0] >= [0] = append(quicksort(@xs),::(@z,quicksort(@ys))) split(@l) = [1] >= [1] = split#1(@l) split#1(::(@x,@xs)) = [1] >= [1] = insert(@x,split(@xs)) split#1(nil()) = [1] >= [0] = nil() splitqs(@pivot,@l) = [0] >= [0] = splitqs#1(@l,@pivot) splitqs#1(::(@x,@xs),@pivot) = [0] >= [0] = splitqs#2(splitqs(@pivot,@xs),@pivot,@x) splitqs#1(nil(),@pivot) = [0] >= [0] = tuple#2(nil(),nil()) splitqs#2(tuple#2(@ls,@rs),@pivot,@x) = [0] >= [0] = splitqs#3(#greater(@x,@pivot),@ls,@rs,@x) splitqs#3(#false(),@ls,@rs,@x) = [0] >= [0] = tuple#2(::(@x,@ls),@rs) splitqs#3(#true(),@ls,@rs,@x) = [0] >= [0] = tuple#2(@ls,::(@x,@rs)) Further, it can be verified that all rules not oriented are covered by the weightgap condition. *** Step 7.b:1.b:3: WeightGap WORST_CASE(?,O(n^2)) + Considered Problem: - Strict DPs: append#(@l,@ys) -> c_3(append#1#(@l,@ys)) splitqs#(@pivot,@l) -> c_25(splitqs#1#(@l,@pivot)) splitqs#1#(::(@x,@xs),@pivot) -> c_26(splitqs#(@pivot,@xs)) - Weak DPs: append#1#(::(@x,@xs),@ys) -> c_4(append#(@xs,@ys)) quicksort#(@l) -> quicksort#1#(@l) quicksort#1#(::(@z,@zs)) -> quicksort#2#(splitqs(@z,@zs),@z) quicksort#1#(::(@z,@zs)) -> splitqs#(@z,@zs) quicksort#2#(tuple#2(@xs,@ys),@z) -> append#(quicksort(@xs),::(@z,quicksort(@ys))) quicksort#2#(tuple#2(@xs,@ys),@z) -> quicksort#(@xs) quicksort#2#(tuple#2(@xs,@ys),@z) -> quicksort#(@ys) sortAll#(@l) -> sortAll#1#(@l) sortAll#1#(::(@x,@xs)) -> sortAll#2#(@x,@xs) sortAll#2#(tuple#2(@vals,@key),@xs) -> quicksort#(@vals) sortAll#2#(tuple#2(@vals,@key),@xs) -> sortAll#(@xs) splitAndSort#(@l) -> sortAll#(split(@l)) - Weak TRS: #and(#false(),#false()) -> #false() #and(#false(),#true()) -> #false() #and(#true(),#false()) -> #false() #and(#true(),#true()) -> #true() #ckgt(#EQ()) -> #false() #ckgt(#GT()) -> #true() #ckgt(#LT()) -> #false() #compare(#0(),#0()) -> #EQ() #compare(#0(),#neg(@y)) -> #GT() #compare(#0(),#pos(@y)) -> #LT() #compare(#0(),#s(@y)) -> #LT() #compare(#neg(@x),#0()) -> #LT() #compare(#neg(@x),#neg(@y)) -> #compare(@y,@x) #compare(#neg(@x),#pos(@y)) -> #LT() #compare(#pos(@x),#0()) -> #GT() #compare(#pos(@x),#neg(@y)) -> #GT() #compare(#pos(@x),#pos(@y)) -> #compare(@x,@y) #compare(#s(@x),#0()) -> #GT() #compare(#s(@x),#s(@y)) -> #compare(@x,@y) #eq(#0(),#0()) -> #true() #eq(#0(),#neg(@y)) -> #false() #eq(#0(),#pos(@y)) -> #false() #eq(#0(),#s(@y)) -> #false() #eq(#neg(@x),#0()) -> #false() #eq(#neg(@x),#neg(@y)) -> #eq(@x,@y) #eq(#neg(@x),#pos(@y)) -> #false() #eq(#pos(@x),#0()) -> #false() #eq(#pos(@x),#neg(@y)) -> #false() #eq(#pos(@x),#pos(@y)) -> #eq(@x,@y) #eq(#s(@x),#0()) -> #false() #eq(#s(@x),#s(@y)) -> #eq(@x,@y) #eq(::(@x_1,@x_2),::(@y_1,@y_2)) -> #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #eq(::(@x_1,@x_2),nil()) -> #false() #eq(::(@x_1,@x_2),tuple#2(@y_1,@y_2)) -> #false() #eq(nil(),::(@y_1,@y_2)) -> #false() #eq(nil(),nil()) -> #true() #eq(nil(),tuple#2(@y_1,@y_2)) -> #false() #eq(tuple#2(@x_1,@x_2),::(@y_1,@y_2)) -> #false() #eq(tuple#2(@x_1,@x_2),nil()) -> #false() #eq(tuple#2(@x_1,@x_2),tuple#2(@y_1,@y_2)) -> #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #equal(@x,@y) -> #eq(@x,@y) #greater(@x,@y) -> #ckgt(#compare(@x,@y)) append(@l,@ys) -> append#1(@l,@ys) append#1(::(@x,@xs),@ys) -> ::(@x,append(@xs,@ys)) append#1(nil(),@ys) -> @ys insert(@x,@l) -> insert#1(@x,@l,@x) insert#1(tuple#2(@valX,@keyX),@l,@x) -> insert#2(@l,@keyX,@valX,@x) insert#2(::(@l1,@ls),@keyX,@valX,@x) -> insert#3(@l1,@keyX,@ls,@valX,@x) insert#2(nil(),@keyX,@valX,@x) -> ::(tuple#2(::(@valX,nil()),@keyX),nil()) insert#3(tuple#2(@vals1,@key1),@keyX,@ls,@valX,@x) -> insert#4(#equal(@key1,@keyX) ,@key1 ,@ls ,@valX ,@vals1 ,@x) insert#4(#false(),@key1,@ls,@valX,@vals1,@x) -> ::(tuple#2(@vals1,@key1),insert(@x,@ls)) insert#4(#true(),@key1,@ls,@valX,@vals1,@x) -> ::(tuple#2(::(@valX,@vals1),@key1),@ls) quicksort(@l) -> quicksort#1(@l) quicksort#1(::(@z,@zs)) -> quicksort#2(splitqs(@z,@zs),@z) quicksort#1(nil()) -> nil() quicksort#2(tuple#2(@xs,@ys),@z) -> append(quicksort(@xs),::(@z,quicksort(@ys))) split(@l) -> split#1(@l) split#1(::(@x,@xs)) -> insert(@x,split(@xs)) split#1(nil()) -> nil() splitqs(@pivot,@l) -> splitqs#1(@l,@pivot) splitqs#1(::(@x,@xs),@pivot) -> splitqs#2(splitqs(@pivot,@xs),@pivot,@x) splitqs#1(nil(),@pivot) -> tuple#2(nil(),nil()) splitqs#2(tuple#2(@ls,@rs),@pivot,@x) -> splitqs#3(#greater(@x,@pivot),@ls,@rs,@x) splitqs#3(#false(),@ls,@rs,@x) -> tuple#2(::(@x,@ls),@rs) splitqs#3(#true(),@ls,@rs,@x) -> tuple#2(@ls,::(@x,@rs)) - Signature: {#and/2,#ckgt/1,#compare/2,#eq/2,#equal/2,#greater/2,append/2,append#1/2,insert/2,insert#1/3,insert#2/4 ,insert#3/5,insert#4/6,quicksort/1,quicksort#1/1,quicksort#2/2,sortAll/1,sortAll#1/1,sortAll#2/2,split/1 ,split#1/1,splitAndSort/1,splitqs/2,splitqs#1/2,splitqs#2/3,splitqs#3/4,#and#/2,#ckgt#/1,#compare#/2,#eq#/2 ,#equal#/2,#greater#/2,append#/2,append#1#/2,insert#/2,insert#1#/3,insert#2#/4,insert#3#/5,insert#4#/6 ,quicksort#/1,quicksort#1#/1,quicksort#2#/2,sortAll#/1,sortAll#1#/1,sortAll#2#/2,split#/1,split#1#/1 ,splitAndSort#/1,splitqs#/2,splitqs#1#/2,splitqs#2#/3,splitqs#3#/4} / {#0/0,#EQ/0,#GT/0,#LT/0,#false/0 ,#neg/1,#pos/1,#s/1,#true/0,::/2,nil/0,tuple#2/2,c_1/1,c_2/2,c_3/1,c_4/1,c_5/0,c_6/1,c_7/1,c_8/1,c_9/0 ,c_10/1,c_11/1,c_12/0,c_13/1,c_14/2,c_15/0,c_16/3,c_17/1,c_18/1,c_19/0,c_20/2,c_21/1,c_22/2,c_23/0,c_24/2 ,c_25/1,c_26/1,c_27/0,c_28/2,c_29/0,c_30/0,c_31/0,c_32/0,c_33/0,c_34/0,c_35/0,c_36/0,c_37/0,c_38/0,c_39/0 ,c_40/0,c_41/0,c_42/0,c_43/1,c_44/0,c_45/0,c_46/0,c_47/1,c_48/0,c_49/1,c_50/0,c_51/0,c_52/0,c_53/0,c_54/0 ,c_55/1,c_56/0,c_57/0,c_58/0,c_59/1,c_60/0,c_61/1,c_62/3,c_63/0,c_64/0,c_65/0,c_66/0,c_67/0,c_68/0,c_69/0 ,c_70/3} - Obligation: innermost runtime complexity wrt. defined symbols {#and#,#ckgt#,#compare#,#eq#,#equal#,#greater#,append# ,append#1#,insert#,insert#1#,insert#2#,insert#3#,insert#4#,quicksort#,quicksort#1#,quicksort#2#,sortAll# ,sortAll#1#,sortAll#2#,split#,split#1#,splitAndSort#,splitqs#,splitqs#1#,splitqs#2# ,splitqs#3#} and constructors {#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} + Applied Processor: WeightGap {wgDimension = 1, wgDegree = 1, wgKind = Algebraic, wgUArgs = UArgs, wgOn = WgOnAny} + Details: The weightgap principle applies using the following constant growth matrix-interpretation: We apply a matrix interpretation of kind constructor based matrix interpretation: The following argument positions are considered usable: uargs(#and) = {1,2}, uargs(#ckgt) = {1}, uargs(::) = {2}, uargs(append) = {1,2}, uargs(insert) = {2}, uargs(insert#4) = {1}, uargs(quicksort#2) = {1}, uargs(splitqs#2) = {1}, uargs(splitqs#3) = {1}, uargs(append#) = {1,2}, uargs(quicksort#2#) = {1}, uargs(sortAll#) = {1}, uargs(c_3) = {1}, uargs(c_4) = {1}, uargs(c_25) = {1}, uargs(c_26) = {1} Following symbols are considered usable: all TcT has computed the following interpretation: p(#0) = [1] p(#EQ) = [0] p(#GT) = [0] p(#LT) = [0] p(#and) = [1] x1 + [1] x2 + [0] p(#ckgt) = [1] x1 + [0] p(#compare) = [0] p(#eq) = [0] p(#equal) = [0] p(#false) = [0] p(#greater) = [0] p(#neg) = [0] p(#pos) = [1] x1 + [0] p(#s) = [1] x1 + [0] p(#true) = [0] p(::) = [1] x2 + [0] p(append) = [1] x1 + [1] x2 + [0] p(append#1) = [1] x1 + [1] x2 + [0] p(insert) = [1] x2 + [0] p(insert#1) = [1] x2 + [0] p(insert#2) = [1] x1 + [0] p(insert#3) = [1] x3 + [0] p(insert#4) = [1] x1 + [1] x3 + [0] p(nil) = [0] p(quicksort) = [1] x1 + [0] p(quicksort#1) = [0] p(quicksort#2) = [1] x1 + [0] p(sortAll) = [1] p(sortAll#1) = [1] p(sortAll#2) = [4] x1 + [1] p(split) = [0] p(split#1) = [0] p(splitAndSort) = [4] x1 + [2] p(splitqs) = [0] p(splitqs#1) = [0] p(splitqs#2) = [1] x1 + [0] p(splitqs#3) = [1] x1 + [1] x2 + [1] x3 + [0] p(tuple#2) = [1] x1 + [1] x2 + [0] p(#and#) = [2] x2 + [0] p(#ckgt#) = [1] x1 + [0] p(#compare#) = [2] x1 + [1] x2 + [0] p(#eq#) = [1] p(#equal#) = [2] x1 + [1] x2 + [0] p(#greater#) = [2] p(append#) = [1] x1 + [1] x2 + [0] p(append#1#) = [1] x1 + [1] x2 + [4] p(insert#) = [2] x2 + [2] p(insert#1#) = [1] x2 + [0] p(insert#2#) = [2] x2 + [1] x4 + [1] p(insert#3#) = [1] x4 + [1] p(insert#4#) = [1] x1 + [1] x2 + [2] x3 + [1] x6 + [0] p(quicksort#) = [0] p(quicksort#1#) = [0] p(quicksort#2#) = [1] x1 + [0] p(sortAll#) = [1] x1 + [0] p(sortAll#1#) = [1] x1 + [0] p(sortAll#2#) = [1] x2 + [0] p(split#) = [1] x1 + [0] p(split#1#) = [1] x1 + [4] p(splitAndSort#) = [2] x1 + [1] p(splitqs#) = [0] p(splitqs#1#) = [3] p(splitqs#2#) = [1] x1 + [2] x3 + [0] p(splitqs#3#) = [2] x1 + [1] x4 + [1] p(c_1) = [2] x1 + [1] p(c_2) = [2] x2 + [1] p(c_3) = [1] x1 + [3] p(c_4) = [1] x1 + [4] p(c_5) = [1] p(c_6) = [1] x1 + [0] p(c_7) = [1] x1 + [0] p(c_8) = [1] p(c_9) = [0] p(c_10) = [0] p(c_11) = [4] x1 + [0] p(c_12) = [0] p(c_13) = [1] x1 + [4] p(c_14) = [1] x2 + [0] p(c_15) = [4] p(c_16) = [1] x1 + [4] x2 + [0] p(c_17) = [0] p(c_18) = [0] p(c_19) = [1] p(c_20) = [2] x1 + [1] p(c_21) = [1] x1 + [0] p(c_22) = [0] p(c_23) = [1] p(c_24) = [1] x1 + [1] p(c_25) = [1] x1 + [0] p(c_26) = [1] x1 + [0] p(c_27) = [0] p(c_28) = [1] x2 + [0] p(c_29) = [0] p(c_30) = [0] p(c_31) = [1] p(c_32) = [0] p(c_33) = [0] p(c_34) = [4] p(c_35) = [1] p(c_36) = [1] p(c_37) = [1] p(c_38) = [1] p(c_39) = [0] p(c_40) = [1] p(c_41) = [1] p(c_42) = [0] p(c_43) = [4] x1 + [0] p(c_44) = [0] p(c_45) = [2] p(c_46) = [2] p(c_47) = [2] p(c_48) = [0] p(c_49) = [1] p(c_50) = [4] p(c_51) = [1] p(c_52) = [2] p(c_53) = [4] p(c_54) = [0] p(c_55) = [0] p(c_56) = [1] p(c_57) = [1] p(c_58) = [0] p(c_59) = [1] x1 + [0] p(c_60) = [1] p(c_61) = [0] p(c_62) = [1] x1 + [1] x2 + [1] x3 + [0] p(c_63) = [1] p(c_64) = [2] p(c_65) = [0] p(c_66) = [2] p(c_67) = [0] p(c_68) = [0] p(c_69) = [0] p(c_70) = [2] x2 + [0] Following rules are strictly oriented: splitqs#1#(::(@x,@xs),@pivot) = [3] > [0] = c_26(splitqs#(@pivot,@xs)) Following rules are (at-least) weakly oriented: append#(@l,@ys) = [1] @l + [1] @ys + [0] >= [1] @l + [1] @ys + [7] = c_3(append#1#(@l,@ys)) append#1#(::(@x,@xs),@ys) = [1] @xs + [1] @ys + [4] >= [1] @xs + [1] @ys + [4] = c_4(append#(@xs,@ys)) quicksort#(@l) = [0] >= [0] = quicksort#1#(@l) quicksort#1#(::(@z,@zs)) = [0] >= [0] = quicksort#2#(splitqs(@z,@zs),@z) quicksort#1#(::(@z,@zs)) = [0] >= [0] = splitqs#(@z,@zs) quicksort#2#(tuple#2(@xs,@ys),@z) = [1] @xs + [1] @ys + [0] >= [1] @xs + [1] @ys + [0] = append#(quicksort(@xs),::(@z,quicksort(@ys))) quicksort#2#(tuple#2(@xs,@ys),@z) = [1] @xs + [1] @ys + [0] >= [0] = quicksort#(@xs) quicksort#2#(tuple#2(@xs,@ys),@z) = [1] @xs + [1] @ys + [0] >= [0] = quicksort#(@ys) sortAll#(@l) = [1] @l + [0] >= [1] @l + [0] = sortAll#1#(@l) sortAll#1#(::(@x,@xs)) = [1] @xs + [0] >= [1] @xs + [0] = sortAll#2#(@x,@xs) sortAll#2#(tuple#2(@vals,@key),@xs) = [1] @xs + [0] >= [0] = quicksort#(@vals) sortAll#2#(tuple#2(@vals,@key),@xs) = [1] @xs + [0] >= [1] @xs + [0] = sortAll#(@xs) splitAndSort#(@l) = [2] @l + [1] >= [0] = sortAll#(split(@l)) splitqs#(@pivot,@l) = [0] >= [3] = c_25(splitqs#1#(@l,@pivot)) #and(#false(),#false()) = [0] >= [0] = #false() #and(#false(),#true()) = [0] >= [0] = #false() #and(#true(),#false()) = [0] >= [0] = #false() #and(#true(),#true()) = [0] >= [0] = #true() #ckgt(#EQ()) = [0] >= [0] = #false() #ckgt(#GT()) = [0] >= [0] = #true() #ckgt(#LT()) = [0] >= [0] = #false() #compare(#0(),#0()) = [0] >= [0] = #EQ() #compare(#0(),#neg(@y)) = [0] >= [0] = #GT() #compare(#0(),#pos(@y)) = [0] >= [0] = #LT() #compare(#0(),#s(@y)) = [0] >= [0] = #LT() #compare(#neg(@x),#0()) = [0] >= [0] = #LT() #compare(#neg(@x),#neg(@y)) = [0] >= [0] = #compare(@y,@x) #compare(#neg(@x),#pos(@y)) = [0] >= [0] = #LT() #compare(#pos(@x),#0()) = [0] >= [0] = #GT() #compare(#pos(@x),#neg(@y)) = [0] >= [0] = #GT() #compare(#pos(@x),#pos(@y)) = [0] >= [0] = #compare(@x,@y) #compare(#s(@x),#0()) = [0] >= [0] = #GT() #compare(#s(@x),#s(@y)) = [0] >= [0] = #compare(@x,@y) #eq(#0(),#0()) = [0] >= [0] = #true() #eq(#0(),#neg(@y)) = [0] >= [0] = #false() #eq(#0(),#pos(@y)) = [0] >= [0] = #false() #eq(#0(),#s(@y)) = [0] >= [0] = #false() #eq(#neg(@x),#0()) = [0] >= [0] = #false() #eq(#neg(@x),#neg(@y)) = [0] >= [0] = #eq(@x,@y) #eq(#neg(@x),#pos(@y)) = [0] >= [0] = #false() #eq(#pos(@x),#0()) = [0] >= [0] = #false() #eq(#pos(@x),#neg(@y)) = [0] >= [0] = #false() #eq(#pos(@x),#pos(@y)) = [0] >= [0] = #eq(@x,@y) #eq(#s(@x),#0()) = [0] >= [0] = #false() #eq(#s(@x),#s(@y)) = [0] >= [0] = #eq(@x,@y) #eq(::(@x_1,@x_2),::(@y_1,@y_2)) = [0] >= [0] = #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #eq(::(@x_1,@x_2),nil()) = [0] >= [0] = #false() #eq(::(@x_1,@x_2),tuple#2(@y_1,@y_2)) = [0] >= [0] = #false() #eq(nil(),::(@y_1,@y_2)) = [0] >= [0] = #false() #eq(nil(),nil()) = [0] >= [0] = #true() #eq(nil(),tuple#2(@y_1,@y_2)) = [0] >= [0] = #false() #eq(tuple#2(@x_1,@x_2),::(@y_1,@y_2)) = [0] >= [0] = #false() #eq(tuple#2(@x_1,@x_2),nil()) = [0] >= [0] = #false() #eq(tuple#2(@x_1,@x_2),tuple#2(@y_1,@y_2)) = [0] >= [0] = #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #equal(@x,@y) = [0] >= [0] = #eq(@x,@y) #greater(@x,@y) = [0] >= [0] = #ckgt(#compare(@x,@y)) append(@l,@ys) = [1] @l + [1] @ys + [0] >= [1] @l + [1] @ys + [0] = append#1(@l,@ys) append#1(::(@x,@xs),@ys) = [1] @xs + [1] @ys + [0] >= [1] @xs + [1] @ys + [0] = ::(@x,append(@xs,@ys)) append#1(nil(),@ys) = [1] @ys + [0] >= [1] @ys + [0] = @ys insert(@x,@l) = [1] @l + [0] >= [1] @l + [0] = insert#1(@x,@l,@x) insert#1(tuple#2(@valX,@keyX),@l,@x) = [1] @l + [0] >= [1] @l + [0] = insert#2(@l,@keyX,@valX,@x) insert#2(::(@l1,@ls),@keyX,@valX,@x) = [1] @ls + [0] >= [1] @ls + [0] = insert#3(@l1,@keyX,@ls,@valX,@x) insert#2(nil(),@keyX,@valX,@x) = [0] >= [0] = ::(tuple#2(::(@valX,nil()),@keyX),nil()) insert#3(tuple#2(@vals1,@key1),@keyX,@ls,@valX,@x) = [1] @ls + [0] >= [1] @ls + [0] = insert#4(#equal(@key1,@keyX),@key1,@ls,@valX,@vals1,@x) insert#4(#false(),@key1,@ls,@valX,@vals1,@x) = [1] @ls + [0] >= [1] @ls + [0] = ::(tuple#2(@vals1,@key1),insert(@x,@ls)) insert#4(#true(),@key1,@ls,@valX,@vals1,@x) = [1] @ls + [0] >= [1] @ls + [0] = ::(tuple#2(::(@valX,@vals1),@key1),@ls) quicksort(@l) = [1] @l + [0] >= [0] = quicksort#1(@l) quicksort#1(::(@z,@zs)) = [0] >= [0] = quicksort#2(splitqs(@z,@zs),@z) quicksort#1(nil()) = [0] >= [0] = nil() quicksort#2(tuple#2(@xs,@ys),@z) = [1] @xs + [1] @ys + [0] >= [1] @xs + [1] @ys + [0] = append(quicksort(@xs),::(@z,quicksort(@ys))) split(@l) = [0] >= [0] = split#1(@l) split#1(::(@x,@xs)) = [0] >= [0] = insert(@x,split(@xs)) split#1(nil()) = [0] >= [0] = nil() splitqs(@pivot,@l) = [0] >= [0] = splitqs#1(@l,@pivot) splitqs#1(::(@x,@xs),@pivot) = [0] >= [0] = splitqs#2(splitqs(@pivot,@xs),@pivot,@x) splitqs#1(nil(),@pivot) = [0] >= [0] = tuple#2(nil(),nil()) splitqs#2(tuple#2(@ls,@rs),@pivot,@x) = [1] @ls + [1] @rs + [0] >= [1] @ls + [1] @rs + [0] = splitqs#3(#greater(@x,@pivot),@ls,@rs,@x) splitqs#3(#false(),@ls,@rs,@x) = [1] @ls + [1] @rs + [0] >= [1] @ls + [1] @rs + [0] = tuple#2(::(@x,@ls),@rs) splitqs#3(#true(),@ls,@rs,@x) = [1] @ls + [1] @rs + [0] >= [1] @ls + [1] @rs + [0] = tuple#2(@ls,::(@x,@rs)) Further, it can be verified that all rules not oriented are covered by the weightgap condition. *** Step 7.b:1.b:4: Ara WORST_CASE(?,O(n^2)) + Considered Problem: - Strict DPs: append#(@l,@ys) -> c_3(append#1#(@l,@ys)) splitqs#(@pivot,@l) -> c_25(splitqs#1#(@l,@pivot)) - Weak DPs: append#1#(::(@x,@xs),@ys) -> c_4(append#(@xs,@ys)) quicksort#(@l) -> quicksort#1#(@l) quicksort#1#(::(@z,@zs)) -> quicksort#2#(splitqs(@z,@zs),@z) quicksort#1#(::(@z,@zs)) -> splitqs#(@z,@zs) quicksort#2#(tuple#2(@xs,@ys),@z) -> append#(quicksort(@xs),::(@z,quicksort(@ys))) quicksort#2#(tuple#2(@xs,@ys),@z) -> quicksort#(@xs) quicksort#2#(tuple#2(@xs,@ys),@z) -> quicksort#(@ys) sortAll#(@l) -> sortAll#1#(@l) sortAll#1#(::(@x,@xs)) -> sortAll#2#(@x,@xs) sortAll#2#(tuple#2(@vals,@key),@xs) -> quicksort#(@vals) sortAll#2#(tuple#2(@vals,@key),@xs) -> sortAll#(@xs) splitAndSort#(@l) -> sortAll#(split(@l)) splitqs#1#(::(@x,@xs),@pivot) -> c_26(splitqs#(@pivot,@xs)) - Weak TRS: #and(#false(),#false()) -> #false() #and(#false(),#true()) -> #false() #and(#true(),#false()) -> #false() #and(#true(),#true()) -> #true() #ckgt(#EQ()) -> #false() #ckgt(#GT()) -> #true() #ckgt(#LT()) -> #false() #compare(#0(),#0()) -> #EQ() #compare(#0(),#neg(@y)) -> #GT() #compare(#0(),#pos(@y)) -> #LT() #compare(#0(),#s(@y)) -> #LT() #compare(#neg(@x),#0()) -> #LT() #compare(#neg(@x),#neg(@y)) -> #compare(@y,@x) #compare(#neg(@x),#pos(@y)) -> #LT() #compare(#pos(@x),#0()) -> #GT() #compare(#pos(@x),#neg(@y)) -> #GT() #compare(#pos(@x),#pos(@y)) -> #compare(@x,@y) #compare(#s(@x),#0()) -> #GT() #compare(#s(@x),#s(@y)) -> #compare(@x,@y) #eq(#0(),#0()) -> #true() #eq(#0(),#neg(@y)) -> #false() #eq(#0(),#pos(@y)) -> #false() #eq(#0(),#s(@y)) -> #false() #eq(#neg(@x),#0()) -> #false() #eq(#neg(@x),#neg(@y)) -> #eq(@x,@y) #eq(#neg(@x),#pos(@y)) -> #false() #eq(#pos(@x),#0()) -> #false() #eq(#pos(@x),#neg(@y)) -> #false() #eq(#pos(@x),#pos(@y)) -> #eq(@x,@y) #eq(#s(@x),#0()) -> #false() #eq(#s(@x),#s(@y)) -> #eq(@x,@y) #eq(::(@x_1,@x_2),::(@y_1,@y_2)) -> #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #eq(::(@x_1,@x_2),nil()) -> #false() #eq(::(@x_1,@x_2),tuple#2(@y_1,@y_2)) -> #false() #eq(nil(),::(@y_1,@y_2)) -> #false() #eq(nil(),nil()) -> #true() #eq(nil(),tuple#2(@y_1,@y_2)) -> #false() #eq(tuple#2(@x_1,@x_2),::(@y_1,@y_2)) -> #false() #eq(tuple#2(@x_1,@x_2),nil()) -> #false() #eq(tuple#2(@x_1,@x_2),tuple#2(@y_1,@y_2)) -> #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #equal(@x,@y) -> #eq(@x,@y) #greater(@x,@y) -> #ckgt(#compare(@x,@y)) append(@l,@ys) -> append#1(@l,@ys) append#1(::(@x,@xs),@ys) -> ::(@x,append(@xs,@ys)) append#1(nil(),@ys) -> @ys insert(@x,@l) -> insert#1(@x,@l,@x) insert#1(tuple#2(@valX,@keyX),@l,@x) -> insert#2(@l,@keyX,@valX,@x) insert#2(::(@l1,@ls),@keyX,@valX,@x) -> insert#3(@l1,@keyX,@ls,@valX,@x) insert#2(nil(),@keyX,@valX,@x) -> ::(tuple#2(::(@valX,nil()),@keyX),nil()) insert#3(tuple#2(@vals1,@key1),@keyX,@ls,@valX,@x) -> insert#4(#equal(@key1,@keyX) ,@key1 ,@ls ,@valX ,@vals1 ,@x) insert#4(#false(),@key1,@ls,@valX,@vals1,@x) -> ::(tuple#2(@vals1,@key1),insert(@x,@ls)) insert#4(#true(),@key1,@ls,@valX,@vals1,@x) -> ::(tuple#2(::(@valX,@vals1),@key1),@ls) quicksort(@l) -> quicksort#1(@l) quicksort#1(::(@z,@zs)) -> quicksort#2(splitqs(@z,@zs),@z) quicksort#1(nil()) -> nil() quicksort#2(tuple#2(@xs,@ys),@z) -> append(quicksort(@xs),::(@z,quicksort(@ys))) split(@l) -> split#1(@l) split#1(::(@x,@xs)) -> insert(@x,split(@xs)) split#1(nil()) -> nil() splitqs(@pivot,@l) -> splitqs#1(@l,@pivot) splitqs#1(::(@x,@xs),@pivot) -> splitqs#2(splitqs(@pivot,@xs),@pivot,@x) splitqs#1(nil(),@pivot) -> tuple#2(nil(),nil()) splitqs#2(tuple#2(@ls,@rs),@pivot,@x) -> splitqs#3(#greater(@x,@pivot),@ls,@rs,@x) splitqs#3(#false(),@ls,@rs,@x) -> tuple#2(::(@x,@ls),@rs) splitqs#3(#true(),@ls,@rs,@x) -> tuple#2(@ls,::(@x,@rs)) - Signature: {#and/2,#ckgt/1,#compare/2,#eq/2,#equal/2,#greater/2,append/2,append#1/2,insert/2,insert#1/3,insert#2/4 ,insert#3/5,insert#4/6,quicksort/1,quicksort#1/1,quicksort#2/2,sortAll/1,sortAll#1/1,sortAll#2/2,split/1 ,split#1/1,splitAndSort/1,splitqs/2,splitqs#1/2,splitqs#2/3,splitqs#3/4,#and#/2,#ckgt#/1,#compare#/2,#eq#/2 ,#equal#/2,#greater#/2,append#/2,append#1#/2,insert#/2,insert#1#/3,insert#2#/4,insert#3#/5,insert#4#/6 ,quicksort#/1,quicksort#1#/1,quicksort#2#/2,sortAll#/1,sortAll#1#/1,sortAll#2#/2,split#/1,split#1#/1 ,splitAndSort#/1,splitqs#/2,splitqs#1#/2,splitqs#2#/3,splitqs#3#/4} / {#0/0,#EQ/0,#GT/0,#LT/0,#false/0 ,#neg/1,#pos/1,#s/1,#true/0,::/2,nil/0,tuple#2/2,c_1/1,c_2/2,c_3/1,c_4/1,c_5/0,c_6/1,c_7/1,c_8/1,c_9/0 ,c_10/1,c_11/1,c_12/0,c_13/1,c_14/2,c_15/0,c_16/3,c_17/1,c_18/1,c_19/0,c_20/2,c_21/1,c_22/2,c_23/0,c_24/2 ,c_25/1,c_26/1,c_27/0,c_28/2,c_29/0,c_30/0,c_31/0,c_32/0,c_33/0,c_34/0,c_35/0,c_36/0,c_37/0,c_38/0,c_39/0 ,c_40/0,c_41/0,c_42/0,c_43/1,c_44/0,c_45/0,c_46/0,c_47/1,c_48/0,c_49/1,c_50/0,c_51/0,c_52/0,c_53/0,c_54/0 ,c_55/1,c_56/0,c_57/0,c_58/0,c_59/1,c_60/0,c_61/1,c_62/3,c_63/0,c_64/0,c_65/0,c_66/0,c_67/0,c_68/0,c_69/0 ,c_70/3} - Obligation: innermost runtime complexity wrt. defined symbols {#and#,#ckgt#,#compare#,#eq#,#equal#,#greater#,append# ,append#1#,insert#,insert#1#,insert#2#,insert#3#,insert#4#,quicksort#,quicksort#1#,quicksort#2#,sortAll# ,sortAll#1#,sortAll#2#,split#,split#1#,splitAndSort#,splitqs#,splitqs#1#,splitqs#2# ,splitqs#3#} and constructors {#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} + Applied Processor: Ara {araHeuristics = NoHeuristics, minDegree = 2, maxDegree = 2, araTimeout = 8, araRuleShifting = Just 1} + Details: Signatures used: ---------------- #0 :: [] -(0)-> "A"(0, 0) #EQ :: [] -(0)-> "A"(0, 0) #EQ :: [] -(0)-> "A"(12, 12) #GT :: [] -(0)-> "A"(0, 0) #GT :: [] -(0)-> "A"(12, 12) #LT :: [] -(0)-> "A"(0, 0) #LT :: [] -(0)-> "A"(12, 12) #and :: ["A"(3, 3) x "A"(3, 3)] -(0)-> "A"(12, 12) #ckgt :: ["A"(0, 0)] -(0)-> "A"(7, 7) #compare :: ["A"(0, 0) x "A"(0, 0)] -(0)-> "A"(10, 10) #eq :: ["A"(0, 0) x "A"(0, 0)] -(0)-> "A"(9, 9) #equal :: ["A"(0, 0) x "A"(0, 0)] -(0)-> "A"(5, 9) #false :: [] -(0)-> "A"(3, 3) #false :: [] -(0)-> "A"(0, 7) #false :: [] -(0)-> "A"(0, 0) #false :: [] -(0)-> "A"(15, 15) #false :: [] -(0)-> "A"(13, 13) #greater :: ["A"(0, 0) x "A"(0, 0)] -(0)-> "A"(1, 1) #neg :: ["A"(0, 0)] -(0)-> "A"(0, 0) #pos :: ["A"(0, 0)] -(0)-> "A"(0, 0) #s :: ["A"(0, 0)] -(0)-> "A"(0, 0) #true :: [] -(0)-> "A"(3, 3) #true :: [] -(0)-> "A"(0, 7) #true :: [] -(0)-> "A"(0, 0) #true :: [] -(0)-> "A"(15, 15) #true :: [] -(0)-> "A"(13, 13) :: :: ["A"(0, 0) x "A"(0, 0)] -(0)-> "A"(0, 0) :: :: ["A"(0, 0) x "A"(4, 0)] -(4)-> "A"(4, 0) :: :: ["A"(0, 12) x "A"(0, 12)] -(0)-> "A"(0, 12) :: :: ["A"(0, 0) x "A"(12, 0)] -(12)-> "A"(12, 0) :: :: ["A"(0, 6) x "A"(13, 6)] -(13)-> "A"(13, 6) :: :: ["A"(0, 0) x "A"(7, 0)] -(7)-> "A"(7, 0) :: :: ["A"(0, 13) x "A"(0, 13)] -(0)-> "A"(0, 13) :: :: ["A"(0, 0) x "A"(13, 0)] -(13)-> "A"(13, 0) :: :: ["A"(0, 0) x "A"(2, 0)] -(2)-> "A"(2, 0) append :: ["A"(4, 0) x "A"(4, 0)] -(0)-> "A"(4, 0) append#1 :: ["A"(4, 0) x "A"(4, 0)] -(0)-> "A"(4, 0) insert :: ["A"(0, 6) x "A"(0, 12)] -(13)-> "A"(0, 12) insert#1 :: ["A"(0, 0) x "A"(0, 12) x "A"(0, 6)] -(13)-> "A"(0, 12) insert#2 :: ["A"(0, 12) x "A"(0, 0) x "A"(0, 0) x "A"(0, 6)] -(13)-> "A"(0, 12) insert#3 :: ["A"(0, 12) x "A"(0, 0) x "A"(0, 12) x "A"(0, 0) x "A"(0, 6)] -(13)-> "A"(0, 12) insert#4 :: ["A"(0, 7) x "A"(0, 0) x "A"(0, 12) x "A"(0, 0) x "A"(12, 0) x "A"(0, 6)] -(13)-> "A"(0, 12) nil :: [] -(0)-> "A"(0, 0) nil :: [] -(0)-> "A"(4, 0) nil :: [] -(0)-> "A"(0, 12) nil :: [] -(0)-> "A"(12, 0) nil :: [] -(0)-> "A"(13, 6) nil :: [] -(0)-> "A"(15, 13) nil :: [] -(0)-> "A"(7, 15) nil :: [] -(0)-> "A"(11, 6) nil :: [] -(0)-> "A"(7, 14) nil :: [] -(0)-> "A"(14, 12) quicksort :: ["A"(12, 0)] -(0)-> "A"(4, 0) quicksort#1 :: ["A"(12, 0)] -(0)-> "A"(4, 0) quicksort#2 :: ["A"(12, 12) x "A"(0, 0)] -(4)-> "A"(4, 0) split :: ["A"(13, 6)] -(2)-> "A"(0, 12) split#1 :: ["A"(13, 6)] -(2)-> "A"(0, 12) splitqs :: ["A"(0, 0) x "A"(12, 0)] -(8)-> "A"(12, 12) splitqs#1 :: ["A"(12, 0) x "A"(0, 0)] -(8)-> "A"(12, 12) splitqs#2 :: ["A"(12, 12) x "A"(0, 0) x "A"(0, 0)] -(12)-> "A"(12, 12) splitqs#3 :: ["A"(0, 0) x "A"(12, 0) x "A"(12, 0) x "A"(0, 0)] -(12)-> "A"(12, 12) tuple#2 :: ["A"(0, 0) x "A"(0, 0)] -(0)-> "A"(0, 0) tuple#2 :: ["A"(12, 0) x "A"(0, 0)] -(0)-> "A"(0, 12) tuple#2 :: ["A"(12, 0) x "A"(12, 0)] -(0)-> "A"(12, 12) tuple#2 :: ["A"(13, 0) x "A"(0, 0)] -(0)-> "A"(0, 13) tuple#2 :: ["A"(12, 0) x "A"(13, 0)] -(0)-> "A"(13, 12) append# :: ["A"(4, 0) x "A"(1, 0)] -(7)-> "A"(9, 8) append#1# :: ["A"(4, 0) x "A"(1, 0)] -(3)-> "A"(12, 12) quicksort# :: ["A"(12, 0)] -(12)-> "A"(1, 6) quicksort#1# :: ["A"(12, 0)] -(12)-> "A"(1, 6) quicksort#2# :: ["A"(12, 12) x "A"(0, 0)] -(12)-> "A"(1, 6) sortAll# :: ["A"(0, 12)] -(13)-> "A"(0, 5) sortAll#1# :: ["A"(0, 12)] -(13)-> "A"(0, 5) sortAll#2# :: ["A"(0, 12) x "A"(0, 12)] -(13)-> "A"(0, 5) splitAndSort# :: ["A"(15, 8)] -(15)-> "A"(0, 0) splitqs# :: ["A"(0, 0) x "A"(7, 0)] -(8)-> "A"(1, 8) splitqs#1# :: ["A"(7, 0) x "A"(0, 0)] -(4)-> "A"(0, 10) c_3 :: ["A"(0, 9)] -(0)-> "A"(12, 9) c_4 :: ["A"(0, 0)] -(0)-> "A"(12, 14) c_25 :: ["A"(0, 9)] -(0)-> "A"(12, 9) c_26 :: ["A"(0, 0)] -(0)-> "A"(2, 10) Cost-free Signatures used: -------------------------- Base Constructor Signatures used: --------------------------------- "#0_A" :: [] -(0)-> "A"(0) "#EQ_A" :: [] -(0)-> "A"(0) "#GT_A" :: [] -(0)-> "A"(0) "#LT_A" :: [] -(0)-> "A"(0) "#false_A" :: [] -(0)-> "A"(0) "#neg_A" :: ["A"(0)] -(0)-> "A"(0) "#pos_A" :: ["A"(0)] -(0)-> "A"(0) "#s_A" :: ["A"(0)] -(0)-> "A"(0) "#true_A" :: [] -(0)-> "A"(0) "::_A" :: ["A"(0) x "A"(0)] -(0)-> "A"(0) "c_25_A" :: ["A"(0)] -(0)-> "A"(1, 0) "c_25_A" :: ["A"(0)] -(0)-> "A"(0, 1) "c_26_A" :: ["A"(0)] -(0)-> "A"(1, 0) "c_26_A" :: ["A"(0)] -(0)-> "A"(0, 1) "c_3_A" :: ["A"(0)] -(0)-> "A"(1, 0) "c_3_A" :: ["A"(0)] -(0)-> "A"(0, 1) "c_4_A" :: ["A"(0)] -(0)-> "A"(1, 0) "c_4_A" :: ["A"(0)] -(0)-> "A"(0, 1) "nil_A" :: [] -(0)-> "A"(1, 0) "nil_A" :: [] -(0)-> "A"(0, 1) "tuple#2_A" :: ["A"(0) x "A"(0)] -(0)-> "A"(0) Following Still Strict Rules were Typed as: ------------------------------------------- 1. Strict: splitqs#(@pivot,@l) -> c_25(splitqs#1#(@l,@pivot)) 2. Weak: append#(@l,@ys) -> c_3(append#1#(@l,@ys)) *** Step 7.b:1.b:5: Ara WORST_CASE(?,O(n^2)) + Considered Problem: - Strict DPs: append#(@l,@ys) -> c_3(append#1#(@l,@ys)) - Weak DPs: append#1#(::(@x,@xs),@ys) -> c_4(append#(@xs,@ys)) quicksort#(@l) -> quicksort#1#(@l) quicksort#1#(::(@z,@zs)) -> quicksort#2#(splitqs(@z,@zs),@z) quicksort#1#(::(@z,@zs)) -> splitqs#(@z,@zs) quicksort#2#(tuple#2(@xs,@ys),@z) -> append#(quicksort(@xs),::(@z,quicksort(@ys))) quicksort#2#(tuple#2(@xs,@ys),@z) -> quicksort#(@xs) quicksort#2#(tuple#2(@xs,@ys),@z) -> quicksort#(@ys) sortAll#(@l) -> sortAll#1#(@l) sortAll#1#(::(@x,@xs)) -> sortAll#2#(@x,@xs) sortAll#2#(tuple#2(@vals,@key),@xs) -> quicksort#(@vals) sortAll#2#(tuple#2(@vals,@key),@xs) -> sortAll#(@xs) splitAndSort#(@l) -> sortAll#(split(@l)) splitqs#(@pivot,@l) -> c_25(splitqs#1#(@l,@pivot)) splitqs#1#(::(@x,@xs),@pivot) -> c_26(splitqs#(@pivot,@xs)) - Weak TRS: #and(#false(),#false()) -> #false() #and(#false(),#true()) -> #false() #and(#true(),#false()) -> #false() #and(#true(),#true()) -> #true() #ckgt(#EQ()) -> #false() #ckgt(#GT()) -> #true() #ckgt(#LT()) -> #false() #compare(#0(),#0()) -> #EQ() #compare(#0(),#neg(@y)) -> #GT() #compare(#0(),#pos(@y)) -> #LT() #compare(#0(),#s(@y)) -> #LT() #compare(#neg(@x),#0()) -> #LT() #compare(#neg(@x),#neg(@y)) -> #compare(@y,@x) #compare(#neg(@x),#pos(@y)) -> #LT() #compare(#pos(@x),#0()) -> #GT() #compare(#pos(@x),#neg(@y)) -> #GT() #compare(#pos(@x),#pos(@y)) -> #compare(@x,@y) #compare(#s(@x),#0()) -> #GT() #compare(#s(@x),#s(@y)) -> #compare(@x,@y) #eq(#0(),#0()) -> #true() #eq(#0(),#neg(@y)) -> #false() #eq(#0(),#pos(@y)) -> #false() #eq(#0(),#s(@y)) -> #false() #eq(#neg(@x),#0()) -> #false() #eq(#neg(@x),#neg(@y)) -> #eq(@x,@y) #eq(#neg(@x),#pos(@y)) -> #false() #eq(#pos(@x),#0()) -> #false() #eq(#pos(@x),#neg(@y)) -> #false() #eq(#pos(@x),#pos(@y)) -> #eq(@x,@y) #eq(#s(@x),#0()) -> #false() #eq(#s(@x),#s(@y)) -> #eq(@x,@y) #eq(::(@x_1,@x_2),::(@y_1,@y_2)) -> #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #eq(::(@x_1,@x_2),nil()) -> #false() #eq(::(@x_1,@x_2),tuple#2(@y_1,@y_2)) -> #false() #eq(nil(),::(@y_1,@y_2)) -> #false() #eq(nil(),nil()) -> #true() #eq(nil(),tuple#2(@y_1,@y_2)) -> #false() #eq(tuple#2(@x_1,@x_2),::(@y_1,@y_2)) -> #false() #eq(tuple#2(@x_1,@x_2),nil()) -> #false() #eq(tuple#2(@x_1,@x_2),tuple#2(@y_1,@y_2)) -> #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #equal(@x,@y) -> #eq(@x,@y) #greater(@x,@y) -> #ckgt(#compare(@x,@y)) append(@l,@ys) -> append#1(@l,@ys) append#1(::(@x,@xs),@ys) -> ::(@x,append(@xs,@ys)) append#1(nil(),@ys) -> @ys insert(@x,@l) -> insert#1(@x,@l,@x) insert#1(tuple#2(@valX,@keyX),@l,@x) -> insert#2(@l,@keyX,@valX,@x) insert#2(::(@l1,@ls),@keyX,@valX,@x) -> insert#3(@l1,@keyX,@ls,@valX,@x) insert#2(nil(),@keyX,@valX,@x) -> ::(tuple#2(::(@valX,nil()),@keyX),nil()) insert#3(tuple#2(@vals1,@key1),@keyX,@ls,@valX,@x) -> insert#4(#equal(@key1,@keyX) ,@key1 ,@ls ,@valX ,@vals1 ,@x) insert#4(#false(),@key1,@ls,@valX,@vals1,@x) -> ::(tuple#2(@vals1,@key1),insert(@x,@ls)) insert#4(#true(),@key1,@ls,@valX,@vals1,@x) -> ::(tuple#2(::(@valX,@vals1),@key1),@ls) quicksort(@l) -> quicksort#1(@l) quicksort#1(::(@z,@zs)) -> quicksort#2(splitqs(@z,@zs),@z) quicksort#1(nil()) -> nil() quicksort#2(tuple#2(@xs,@ys),@z) -> append(quicksort(@xs),::(@z,quicksort(@ys))) split(@l) -> split#1(@l) split#1(::(@x,@xs)) -> insert(@x,split(@xs)) split#1(nil()) -> nil() splitqs(@pivot,@l) -> splitqs#1(@l,@pivot) splitqs#1(::(@x,@xs),@pivot) -> splitqs#2(splitqs(@pivot,@xs),@pivot,@x) splitqs#1(nil(),@pivot) -> tuple#2(nil(),nil()) splitqs#2(tuple#2(@ls,@rs),@pivot,@x) -> splitqs#3(#greater(@x,@pivot),@ls,@rs,@x) splitqs#3(#false(),@ls,@rs,@x) -> tuple#2(::(@x,@ls),@rs) splitqs#3(#true(),@ls,@rs,@x) -> tuple#2(@ls,::(@x,@rs)) - Signature: {#and/2,#ckgt/1,#compare/2,#eq/2,#equal/2,#greater/2,append/2,append#1/2,insert/2,insert#1/3,insert#2/4 ,insert#3/5,insert#4/6,quicksort/1,quicksort#1/1,quicksort#2/2,sortAll/1,sortAll#1/1,sortAll#2/2,split/1 ,split#1/1,splitAndSort/1,splitqs/2,splitqs#1/2,splitqs#2/3,splitqs#3/4,#and#/2,#ckgt#/1,#compare#/2,#eq#/2 ,#equal#/2,#greater#/2,append#/2,append#1#/2,insert#/2,insert#1#/3,insert#2#/4,insert#3#/5,insert#4#/6 ,quicksort#/1,quicksort#1#/1,quicksort#2#/2,sortAll#/1,sortAll#1#/1,sortAll#2#/2,split#/1,split#1#/1 ,splitAndSort#/1,splitqs#/2,splitqs#1#/2,splitqs#2#/3,splitqs#3#/4} / {#0/0,#EQ/0,#GT/0,#LT/0,#false/0 ,#neg/1,#pos/1,#s/1,#true/0,::/2,nil/0,tuple#2/2,c_1/1,c_2/2,c_3/1,c_4/1,c_5/0,c_6/1,c_7/1,c_8/1,c_9/0 ,c_10/1,c_11/1,c_12/0,c_13/1,c_14/2,c_15/0,c_16/3,c_17/1,c_18/1,c_19/0,c_20/2,c_21/1,c_22/2,c_23/0,c_24/2 ,c_25/1,c_26/1,c_27/0,c_28/2,c_29/0,c_30/0,c_31/0,c_32/0,c_33/0,c_34/0,c_35/0,c_36/0,c_37/0,c_38/0,c_39/0 ,c_40/0,c_41/0,c_42/0,c_43/1,c_44/0,c_45/0,c_46/0,c_47/1,c_48/0,c_49/1,c_50/0,c_51/0,c_52/0,c_53/0,c_54/0 ,c_55/1,c_56/0,c_57/0,c_58/0,c_59/1,c_60/0,c_61/1,c_62/3,c_63/0,c_64/0,c_65/0,c_66/0,c_67/0,c_68/0,c_69/0 ,c_70/3} - Obligation: innermost runtime complexity wrt. defined symbols {#and#,#ckgt#,#compare#,#eq#,#equal#,#greater#,append# ,append#1#,insert#,insert#1#,insert#2#,insert#3#,insert#4#,quicksort#,quicksort#1#,quicksort#2#,sortAll# ,sortAll#1#,sortAll#2#,split#,split#1#,splitAndSort#,splitqs#,splitqs#1#,splitqs#2# ,splitqs#3#} and constructors {#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} + Applied Processor: Ara {araHeuristics = NoHeuristics, minDegree = 2, maxDegree = 2, araTimeout = 8, araRuleShifting = Just 1} + Details: Signatures used: ---------------- #0 :: [] -(0)-> "A"(0, 0) #EQ :: [] -(0)-> "A"(0, 0) #EQ :: [] -(0)-> "A"(12, 12) #GT :: [] -(0)-> "A"(0, 0) #GT :: [] -(0)-> "A"(12, 12) #LT :: [] -(0)-> "A"(0, 0) #LT :: [] -(0)-> "A"(12, 12) #and :: ["A"(3, 3) x "A"(3, 3)] -(0)-> "A"(12, 12) #ckgt :: ["A"(0, 0)] -(0)-> "A"(7, 7) #compare :: ["A"(0, 0) x "A"(0, 0)] -(0)-> "A"(10, 10) #eq :: ["A"(0, 0) x "A"(0, 0)] -(0)-> "A"(8, 9) #equal :: ["A"(0, 0) x "A"(0, 0)] -(0)-> "A"(8, 9) #false :: [] -(0)-> "A"(3, 3) #false :: [] -(0)-> "A"(7, 7) #false :: [] -(0)-> "A"(0, 0) #false :: [] -(0)-> "A"(15, 15) #false :: [] -(0)-> "A"(13, 13) #greater :: ["A"(0, 0) x "A"(0, 0)] -(0)-> "A"(1, 1) #neg :: ["A"(0, 0)] -(0)-> "A"(0, 0) #pos :: ["A"(0, 0)] -(0)-> "A"(0, 0) #s :: ["A"(0, 0)] -(0)-> "A"(0, 0) #true :: [] -(0)-> "A"(3, 3) #true :: [] -(0)-> "A"(7, 7) #true :: [] -(0)-> "A"(0, 0) #true :: [] -(0)-> "A"(15, 15) #true :: [] -(0)-> "A"(13, 13) :: :: ["A"(0, 0) x "A"(0, 0)] -(0)-> "A"(0, 0) :: :: ["A"(0, 0) x "A"(1, 0)] -(1)-> "A"(1, 0) :: :: ["A"(2, 0) x "A"(5, 2)] -(5)-> "A"(5, 2) :: :: ["A"(0, 0) x "A"(2, 0)] -(2)-> "A"(2, 0) :: :: ["A"(14, 0) x "A"(13, 14)] -(13)-> "A"(13, 14) append :: ["A"(1, 0) x "A"(1, 0)] -(0)-> "A"(1, 0) append#1 :: ["A"(1, 0) x "A"(1, 0)] -(0)-> "A"(1, 0) insert :: ["A"(12, 0) x "A"(5, 2)] -(9)-> "A"(5, 2) insert#1 :: ["A"(0, 0) x "A"(5, 2) x "A"(12, 0)] -(9)-> "A"(5, 2) insert#2 :: ["A"(5, 2) x "A"(0, 0) x "A"(0, 0) x "A"(12, 0)] -(9)-> "A"(5, 2) insert#3 :: ["A"(2, 0) x "A"(0, 0) x "A"(5, 2) x "A"(0, 0) x "A"(12, 0)] -(14)-> "A"(5, 2) insert#4 :: ["A"(7, 7) x "A"(0, 0) x "A"(5, 2) x "A"(0, 0) x "A"(2, 0) x "A"(12, 0)] -(14)-> "A"(5, 2) nil :: [] -(0)-> "A"(0, 0) nil :: [] -(0)-> "A"(1, 0) nil :: [] -(0)-> "A"(5, 2) nil :: [] -(0)-> "A"(2, 0) nil :: [] -(0)-> "A"(13, 14) nil :: [] -(0)-> "A"(7, 12) nil :: [] -(0)-> "A"(15, 12) nil :: [] -(0)-> "A"(7, 6) nil :: [] -(0)-> "A"(11, 4) nil :: [] -(0)-> "A"(14, 12) nil :: [] -(0)-> "A"(6, 12) quicksort :: ["A"(2, 0)] -(0)-> "A"(1, 0) quicksort#1 :: ["A"(2, 0)] -(0)-> "A"(1, 0) quicksort#2 :: ["A"(2, 2) x "A"(0, 0)] -(0)-> "A"(1, 0) split :: ["A"(13, 14)] -(11)-> "A"(5, 2) split#1 :: ["A"(13, 14)] -(11)-> "A"(5, 2) splitqs :: ["A"(0, 0) x "A"(2, 0)] -(2)-> "A"(2, 2) splitqs#1 :: ["A"(2, 0) x "A"(0, 0)] -(2)-> "A"(2, 2) splitqs#2 :: ["A"(2, 2) x "A"(0, 0) x "A"(0, 0)] -(2)-> "A"(2, 2) splitqs#3 :: ["A"(0, 0) x "A"(2, 0) x "A"(2, 0) x "A"(0, 0)] -(4)-> "A"(2, 2) tuple#2 :: ["A"(0, 0) x "A"(0, 0)] -(0)-> "A"(0, 0) tuple#2 :: ["A"(2, 0) x "A"(0, 0)] -(0)-> "A"(2, 0) tuple#2 :: ["A"(2, 0) x "A"(2, 0)] -(2)-> "A"(2, 2) tuple#2 :: ["A"(8, 0) x "A"(2, 0)] -(2)-> "A"(8, 2) append# :: ["A"(1, 0) x "A"(0, 0)] -(1)-> "A"(8, 9) append#1# :: ["A"(1, 0) x "A"(0, 0)] -(0)-> "A"(13, 1) quicksort# :: ["A"(2, 0)] -(5)-> "A"(0, 9) quicksort#1# :: ["A"(2, 0)] -(5)-> "A"(0, 9) quicksort#2# :: ["A"(2, 2) x "A"(0, 0)] -(5)-> "A"(0, 9) sortAll# :: ["A"(5, 2)] -(3)-> "A"(0, 8) sortAll#1# :: ["A"(5, 2)] -(3)-> "A"(0, 8) sortAll#2# :: ["A"(2, 0) x "A"(5, 2)] -(8)-> "A"(0, 8) splitAndSort# :: ["A"(15, 14)] -(15)-> "A"(0, 2) splitqs# :: ["A"(0, 0) x "A"(1, 0)] -(1)-> "A"(0, 12) splitqs#1# :: ["A"(1, 0) x "A"(0, 0)] -(1)-> "A"(0, 1) c_3 :: ["A"(10, 0)] -(0)-> "A"(10, 12) c_4 :: ["A"(0, 3)] -(0)-> "A"(15, 3) c_25 :: ["A"(0, 0)] -(0)-> "A"(0, 12) c_26 :: ["A"(0, 3)] -(0)-> "A"(0, 3) Cost-free Signatures used: -------------------------- Base Constructor Signatures used: --------------------------------- "#0_A" :: [] -(0)-> "A"(0) "#EQ_A" :: [] -(0)-> "A"(0) "#GT_A" :: [] -(0)-> "A"(0) "#LT_A" :: [] -(0)-> "A"(0) "#false_A" :: [] -(0)-> "A"(0) "#neg_A" :: ["A"(0)] -(0)-> "A"(0) "#pos_A" :: ["A"(0)] -(0)-> "A"(0) "#s_A" :: ["A"(0)] -(0)-> "A"(0) "#true_A" :: [] -(0)-> "A"(0) "::_A" :: ["A"(0) x "A"(0)] -(0)-> "A"(0) "c_25_A" :: ["A"(0)] -(0)-> "A"(1, 0) "c_25_A" :: ["A"(0)] -(0)-> "A"(0, 1) "c_26_A" :: ["A"(0)] -(1)-> "A"(1, 0) "c_26_A" :: ["A"(0)] -(0)-> "A"(0, 1) "c_3_A" :: ["A"(0)] -(0)-> "A"(1, 0) "c_3_A" :: ["A"(0)] -(0)-> "A"(0, 1) "c_4_A" :: ["A"(0)] -(0)-> "A"(1, 0) "c_4_A" :: ["A"(0)] -(0)-> "A"(0, 1) "nil_A" :: [] -(0)-> "A"(1, 0) "nil_A" :: [] -(0)-> "A"(0, 1) "tuple#2_A" :: ["A"(0) x "A"(0)] -(0)-> "A"(0) Following Still Strict Rules were Typed as: ------------------------------------------- 1. Strict: append#(@l,@ys) -> c_3(append#1#(@l,@ys)) 2. Weak: WORST_CASE(?,O(n^5))