*** 1 Progress [(?,O(n^6))] *** Considered Problem: Strict DP Rules: Strict TRS Rules: #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 DP Rules: Weak TRS 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)) 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 basic terms: {#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}/{#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} Applied Processor: DependencyPairs {dpKind_ = DT} Proof: 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. *** 1.1 Progress [(?,O(n^6))] *** Considered Problem: Strict DP Rules: #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() Strict TRS Rules: Weak DP Rules: #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 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))) 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 basic terms: {#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#}/{#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} Applied Processor: UsableRules Proof: 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)) #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#(@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() *** 1.1.1 Progress [(?,O(n^6))] *** Considered Problem: Strict DP Rules: #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() Strict TRS Rules: Weak DP Rules: #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 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)) 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 basic terms: {#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#}/{#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} Applied Processor: PredecessorEstimation {onSelection = all simple predecessor estimation selector} Proof: 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)) *** 1.1.1.1 Progress [(?,O(n^6))] *** Considered Problem: Strict DP Rules: 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)) Strict TRS Rules: Weak DP Rules: #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 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)) 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 basic terms: {#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#}/{#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} Applied Processor: PredecessorEstimation {onSelection = all simple predecessor estimation selector} Proof: 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() *** 1.1.1.1.1 Progress [(?,O(n^6))] *** Considered Problem: Strict DP Rules: 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)) Strict TRS Rules: Weak DP Rules: #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 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)) 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 basic terms: {#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#}/{#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} Applied Processor: RemoveWeakSuffixes Proof: 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() *** 1.1.1.1.1.1 Progress [(?,O(n^6))] *** Considered Problem: Strict DP Rules: 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)) Strict TRS Rules: Weak DP Rules: Weak TRS 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)) 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 basic terms: {#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#}/{#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} Applied Processor: SimplifyRHS Proof: 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)) *** 1.1.1.1.1.1.1 Progress [(?,O(n^6))] *** Considered Problem: Strict DP Rules: 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)) Strict TRS Rules: Weak DP Rules: Weak TRS 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)) 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 basic terms: {#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#}/{#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} Applied Processor: Decompose {onSelection = all cycle independent sub-graph, withBound = RelativeAdd} Proof: We analyse the complexity of following sub-problems (R) and (S). Problem (S) is obtained from the input problem by shifting strict rules from (R) into the weak component. Problem (R) Strict DP Rules: append#(@l,@ys) -> c_3(append#1#(@l,@ys)) append#1#(::(@x,@xs),@ys) -> c_4(append#(@xs,@ys)) Strict TRS Rules: Weak DP Rules: 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 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)) 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 basic terms: {#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#}/{#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} Problem (S) Strict DP Rules: 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)) Strict TRS Rules: Weak DP Rules: append#(@l,@ys) -> c_3(append#1#(@l,@ys)) append#1#(::(@x,@xs),@ys) -> c_4(append#(@xs,@ys)) Weak TRS 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)) 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 basic terms: {#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#}/{#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} *** 1.1.1.1.1.1.1.1 Progress [(?,O(n^6))] *** Considered Problem: Strict DP Rules: append#(@l,@ys) -> c_3(append#1#(@l,@ys)) append#1#(::(@x,@xs),@ys) -> c_4(append#(@xs,@ys)) Strict TRS Rules: Weak DP Rules: 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 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)) 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 basic terms: {#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#}/{#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} Applied Processor: RemoveWeakSuffixes Proof: 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:W: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:W: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:W: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)):6 6:W: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)):7 7:W: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:W: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:W: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)):10 -->_2 splitqs#(@pivot,@l) -> c_25(splitqs#1#(@l,@pivot)):17 10:W: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:W:sortAll#(@l) -> c_17(sortAll#1#(@l)) -->_1 sortAll#1#(::(@x,@xs)) -> c_18(sortAll#2#(@x,@xs)):12 12:W: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:W:sortAll#2#(tuple#2(@vals,@key),@xs) -> c_20(quicksort#(@vals),sortAll#(@xs)) -->_1 quicksort#(@l) -> c_13(quicksort#1#(@l)):8 -->_2 sortAll#(@l) -> c_17(sortAll#1#(@l)):11 14:W:split#(@l) -> c_21(split#1#(@l)) -->_1 split#1#(::(@x,@xs)) -> c_22(insert#(@x,split(@xs)),split#(@xs)):15 15:W: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:W: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:W:splitqs#(@pivot,@l) -> c_25(splitqs#1#(@l,@pivot)) -->_1 splitqs#1#(::(@x,@xs),@pivot) -> c_26(splitqs#(@pivot,@xs)):18 18:W:splitqs#1#(::(@x,@xs),@pivot) -> c_26(splitqs#(@pivot,@xs)) -->_1 splitqs#(@pivot,@l) -> c_25(splitqs#1#(@l,@pivot)):17 The following weak DPs constitute a sub-graph of the DG that is closed under successors. The DPs are removed. 14: split#(@l) -> c_21(split#1#(@l)) 15: split#1#(::(@x,@xs)) -> c_22(insert#(@x,split(@xs)) ,split#(@xs)) 17: splitqs#(@pivot,@l) -> c_25(splitqs#1#(@l,@pivot)) 18: splitqs#1#(::(@x,@xs),@pivot) -> c_26(splitqs#(@pivot,@xs)) 3: insert#(@x,@l) -> c_6(insert#1#(@x,@l,@x)) 7: insert#4#(#false() ,@key1 ,@ls ,@valX ,@vals1 ,@x) -> c_11(insert#(@x,@ls)) 6: insert#3#(tuple#2(@vals1,@key1) ,@keyX ,@ls ,@valX ,@x) -> c_10(insert#4#(#equal(@key1 ,@keyX) ,@key1 ,@ls ,@valX ,@vals1 ,@x)) 5: insert#2#(::(@l1,@ls) ,@keyX ,@valX ,@x) -> c_8(insert#3#(@l1 ,@keyX ,@ls ,@valX ,@x)) 4: insert#1#(tuple#2(@valX,@keyX) ,@l ,@x) -> c_7(insert#2#(@l ,@keyX ,@valX ,@x)) *** 1.1.1.1.1.1.1.1.1 Progress [(?,O(n^6))] *** Considered Problem: Strict DP Rules: append#(@l,@ys) -> c_3(append#1#(@l,@ys)) append#1#(::(@x,@xs),@ys) -> c_4(append#(@xs,@ys)) Strict TRS Rules: Weak DP Rules: 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)) splitAndSort#(@l) -> c_24(sortAll#(split(@l)),split#(@l)) Weak TRS 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)) 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 basic terms: {#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#}/{#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} Applied Processor: SimplifyRHS Proof: 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 8:W: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:W: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)):10 10:W: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:W:sortAll#(@l) -> c_17(sortAll#1#(@l)) -->_1 sortAll#1#(::(@x,@xs)) -> c_18(sortAll#2#(@x,@xs)):12 12:W: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:W:sortAll#2#(tuple#2(@vals,@key),@xs) -> c_20(quicksort#(@vals),sortAll#(@xs)) -->_1 quicksort#(@l) -> c_13(quicksort#1#(@l)):8 -->_2 sortAll#(@l) -> c_17(sortAll#1#(@l)):11 16:W:splitAndSort#(@l) -> c_24(sortAll#(split(@l)),split#(@l)) -->_1 sortAll#(@l) -> c_17(sortAll#1#(@l)):11 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)) splitAndSort#(@l) -> c_24(sortAll#(split(@l))) *** 1.1.1.1.1.1.1.1.1.1 Progress [(?,O(n^6))] *** Considered Problem: Strict DP Rules: append#(@l,@ys) -> c_3(append#1#(@l,@ys)) append#1#(::(@x,@xs),@ys) -> c_4(append#(@xs,@ys)) Strict TRS Rules: Weak DP Rules: 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(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)) splitAndSort#(@l) -> c_24(sortAll#(split(@l))) Weak TRS 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)) 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/3,c_17/1,c_18/1,c_19/0,c_20/2,c_21/1,c_22/2,c_23/0,c_24/1,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 basic terms: {#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#}/{#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} Applied Processor: DecomposeDG {onSelection = all below first cut in WDG, onUpper = Just someStrategy, onLower = Nothing} Proof: 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)) splitAndSort#(@l) -> c_24(sortAll#(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)) 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(append#(quicksort(@xs),::(@z,quicksort(@ys))),quicksort#(@xs),quicksort#(@ys)) 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) splitAndSort#(@l) -> sortAll#(split(@l)) *** 1.1.1.1.1.1.1.1.1.1.1 Progress [(?,O(n^1))] *** Considered Problem: Strict DP Rules: sortAll#2#(tuple#2(@vals,@key),@xs) -> c_20(quicksort#(@vals),sortAll#(@xs)) Strict TRS Rules: Weak DP Rules: sortAll#(@l) -> c_17(sortAll#1#(@l)) sortAll#1#(::(@x,@xs)) -> c_18(sortAll#2#(@x,@xs)) splitAndSort#(@l) -> c_24(sortAll#(split(@l))) Weak TRS 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)) 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/3,c_17/1,c_18/1,c_19/0,c_20/2,c_21/1,c_22/2,c_23/0,c_24/1,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 basic terms: {#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#}/{#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} Applied Processor: PredecessorEstimationCP {onSelectionCP = any intersect of rules of CDG leaf and strict-rules, withComplexityPair = NaturalMI {miDimension = 1, miDegree = 1, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Nothing, greedy = NoGreedy}} Proof: We first use the processor NaturalMI {miDimension = 1, miDegree = 1, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Nothing, greedy = NoGreedy} to orient following rules strictly: 1: sortAll#2#(tuple#2(@vals,@key) ,@xs) -> c_20(quicksort#(@vals) ,sortAll#(@xs)) Consider the set of all dependency pairs 1: sortAll#2#(tuple#2(@vals,@key) ,@xs) -> c_20(quicksort#(@vals) ,sortAll#(@xs)) 2: sortAll#(@l) -> c_17(sortAll#1#(@l)) 3: sortAll#1#(::(@x,@xs)) -> c_18(sortAll#2#(@x,@xs)) 4: splitAndSort#(@l) -> c_24(sortAll#(split(@l))) Processor NaturalMI {miDimension = 1, miDegree = 1, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Nothing, greedy = NoGreedy}induces the complexity certificateTIME (?,O(n^1)) SPACE(?,?)on application of the dependency pairs {1} These cover all (indirect) predecessors of dependency pairs {1,2,3,4} their number of applications is equally bounded. The dependency pairs are shifted into the weak component. *** 1.1.1.1.1.1.1.1.1.1.1.1 Progress [(?,O(n^1))] *** Considered Problem: Strict DP Rules: sortAll#2#(tuple#2(@vals,@key),@xs) -> c_20(quicksort#(@vals),sortAll#(@xs)) Strict TRS Rules: Weak DP Rules: sortAll#(@l) -> c_17(sortAll#1#(@l)) sortAll#1#(::(@x,@xs)) -> c_18(sortAll#2#(@x,@xs)) splitAndSort#(@l) -> c_24(sortAll#(split(@l))) Weak TRS 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)) 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/3,c_17/1,c_18/1,c_19/0,c_20/2,c_21/1,c_22/2,c_23/0,c_24/1,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 basic terms: {#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#}/{#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} Applied Processor: NaturalMI {miDimension = 1, miDegree = 1, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Just first alternative for predecessorEstimation any intersect of rules of CDG leaf and strict-rules, greedy = NoGreedy} Proof: We apply a matrix interpretation of kind constructor based matrix interpretation: The following argument positions are considered usable: uargs(c_17) = {1}, uargs(c_18) = {1}, uargs(c_20) = {2}, uargs(c_24) = {1} Following symbols are considered usable: {insert,insert#1,insert#2,insert#3,insert#4,split,split#1,#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#} TcT has computed the following interpretation: p(#0) = [5] p(#EQ) = [0] p(#GT) = [0] p(#LT) = [0] p(#and) = [0] p(#ckgt) = [0] p(#compare) = [2] x1 + [5] p(#eq) = [0] p(#equal) = [0] p(#false) = [0] p(#greater) = [0] p(#neg) = [1] x1 + [0] p(#pos) = [1] x1 + [0] p(#s) = [0] p(#true) = [0] p(::) = [1] x2 + [1] p(append) = [0] p(append#1) = [3] x1 + [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] x3 + [2] p(nil) = [0] p(quicksort) = [2] x1 + [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) = [0] p(splitqs#1) = [0] p(splitqs#2) = [0] p(splitqs#3) = [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#) = [0] p(insert#1#) = [0] p(insert#2#) = [0] p(insert#3#) = [0] p(insert#4#) = [0] p(quicksort#) = [1] p(quicksort#1#) = [0] p(quicksort#2#) = [0] p(sortAll#) = [4] x1 + [0] p(sortAll#1#) = [4] x1 + [0] p(sortAll#2#) = [4] x2 + [2] p(split#) = [0] p(split#1#) = [0] p(splitAndSort#) = [4] x1 + [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) = [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 + [2] p(c_19) = [0] p(c_20) = [1] x1 + [1] x2 + [0] p(c_21) = [2] x1 + [0] p(c_22) = [1] x2 + [0] p(c_23) = [0] p(c_24) = [1] x1 + [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) = [2] x1 + [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) = [2] x1 + [4] x2 + [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) = [4] @xs + [2] ,@xs) > [4] @xs + [1] = c_20(quicksort#(@vals) ,sortAll#(@xs)) Following rules are (at-least) weakly oriented: sortAll#(@l) = [4] @l + [0] >= [4] @l + [0] = c_17(sortAll#1#(@l)) sortAll#1#(::(@x,@xs)) = [4] @xs + [4] >= [4] @xs + [4] = c_18(sortAll#2#(@x,@xs)) splitAndSort#(@l) = [4] @l + [0] >= [4] @l + [0] = c_24(sortAll#(split(@l))) insert(@x,@l) = [1] @l + [1] >= [1] @l + [1] = insert#1(@x,@l,@x) insert#1(tuple#2(@valX,@keyX) = [1] @l + [1] ,@l ,@x) >= [1] @l + [1] = insert#2(@l,@keyX,@valX,@x) insert#2(::(@l1,@ls) = [1] @ls + [2] ,@keyX ,@valX ,@x) >= [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) = [1] @ls + [2] ,@keyX ,@ls ,@valX ,@x) >= [1] @ls + [2] = insert#4(#equal(@key1,@keyX) ,@key1 ,@ls ,@valX ,@vals1 ,@x) insert#4(#false() = [1] @ls + [2] ,@key1 ,@ls ,@valX ,@vals1 ,@x) >= [1] @ls + [2] = ::(tuple#2(@vals1,@key1) ,insert(@x,@ls)) insert#4(#true() = [1] @ls + [2] ,@key1 ,@ls ,@valX ,@vals1 ,@x) >= [1] @ls + [1] = ::(tuple#2(::(@valX,@vals1) ,@key1) ,@ls) split(@l) = [1] @l + [0] >= [1] @l + [0] = split#1(@l) split#1(::(@x,@xs)) = [1] @xs + [1] >= [1] @xs + [1] = insert(@x,split(@xs)) split#1(nil()) = [0] >= [0] = nil() *** 1.1.1.1.1.1.1.1.1.1.1.1.1 Progress [(?,O(1))] *** Considered Problem: Strict DP Rules: Strict TRS Rules: Weak DP Rules: 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)) splitAndSort#(@l) -> c_24(sortAll#(split(@l))) Weak TRS 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)) 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/3,c_17/1,c_18/1,c_19/0,c_20/2,c_21/1,c_22/2,c_23/0,c_24/1,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 basic terms: {#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#}/{#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} Applied Processor: Assumption Proof: () *** 1.1.1.1.1.1.1.1.1.1.1.2 Progress [(O(1),O(1))] *** Considered Problem: Strict DP Rules: Strict TRS Rules: Weak DP Rules: 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)) splitAndSort#(@l) -> c_24(sortAll#(split(@l))) Weak TRS 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)) 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/3,c_17/1,c_18/1,c_19/0,c_20/2,c_21/1,c_22/2,c_23/0,c_24/1,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 basic terms: {#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#}/{#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} Applied Processor: RemoveWeakSuffixes Proof: Consider the dependency graph 1:W:sortAll#(@l) -> c_17(sortAll#1#(@l)) -->_1 sortAll#1#(::(@x,@xs)) -> c_18(sortAll#2#(@x,@xs)):2 2:W: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:W:sortAll#2#(tuple#2(@vals,@key),@xs) -> c_20(quicksort#(@vals),sortAll#(@xs)) -->_2 sortAll#(@l) -> c_17(sortAll#1#(@l)):1 4:W:splitAndSort#(@l) -> c_24(sortAll#(split(@l))) -->_1 sortAll#(@l) -> c_17(sortAll#1#(@l)):1 The following weak DPs constitute a sub-graph of the DG that is closed under successors. The DPs are removed. 4: splitAndSort#(@l) -> c_24(sortAll#(split(@l))) 1: sortAll#(@l) -> c_17(sortAll#1#(@l)) 3: sortAll#2#(tuple#2(@vals,@key) ,@xs) -> c_20(quicksort#(@vals) ,sortAll#(@xs)) 2: sortAll#1#(::(@x,@xs)) -> c_18(sortAll#2#(@x,@xs)) *** 1.1.1.1.1.1.1.1.1.1.1.2.1 Progress [(O(1),O(1))] *** Considered Problem: Strict DP Rules: Strict TRS Rules: Weak DP Rules: Weak TRS 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)) 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/3,c_17/1,c_18/1,c_19/0,c_20/2,c_21/1,c_22/2,c_23/0,c_24/1,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 basic terms: {#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#}/{#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} Applied Processor: EmptyProcessor Proof: The problem is already closed. The intended complexity is O(1). *** 1.1.1.1.1.1.1.1.1.1.2 Progress [(O(1),O(n^5))] *** Considered Problem: Strict DP Rules: append#(@l,@ys) -> c_3(append#1#(@l,@ys)) append#1#(::(@x,@xs),@ys) -> c_4(append#(@xs,@ys)) Strict TRS Rules: Weak DP Rules: 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(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) splitAndSort#(@l) -> sortAll#(split(@l)) Weak TRS 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)) 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/3,c_17/1,c_18/1,c_19/0,c_20/2,c_21/1,c_22/2,c_23/0,c_24/1,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 basic terms: {#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#}/{#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} Applied Processor: DecomposeDG {onSelection = all below first cut in WDG, onUpper = Just someStrategy, onLower = Nothing} Proof: We decompose the input problem according to the dependency graph into the upper component 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(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) splitAndSort#(@l) -> sortAll#(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)) Further, following extension rules are added to the lower component. quicksort#(@l) -> quicksort#1#(@l) quicksort#1#(::(@z,@zs)) -> quicksort#2#(splitqs(@z,@zs),@z) 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)) *** 1.1.1.1.1.1.1.1.1.1.2.1 Progress [(O(1),O(n^3))] *** Considered Problem: Strict DP Rules: quicksort#2#(tuple#2(@xs,@ys),@z) -> c_16(append#(quicksort(@xs),::(@z,quicksort(@ys))),quicksort#(@xs),quicksort#(@ys)) Strict TRS Rules: Weak DP Rules: quicksort#(@l) -> c_13(quicksort#1#(@l)) quicksort#1#(::(@z,@zs)) -> c_14(quicksort#2#(splitqs(@z,@zs),@z)) 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 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)) 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/3,c_17/1,c_18/1,c_19/0,c_20/2,c_21/1,c_22/2,c_23/0,c_24/1,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 basic terms: {#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#}/{#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} Applied Processor: NaturalMI {miDimension = 3, miDegree = 3, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Just any strict-rules, greedy = NoGreedy} Proof: We apply a matrix interpretation of kind constructor based matrix interpretation: The following argument positions are considered usable: uargs(c_13) = {1}, uargs(c_14) = {1}, uargs(c_16) = {1,2,3} Following symbols are considered usable: {insert,insert#1,insert#2,insert#3,insert#4,split,split#1,splitqs,splitqs#1,splitqs#2,splitqs#3,#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#} TcT has computed the following interpretation: p(#0) = [0] [0] [1] p(#EQ) = [1] [0] [0] p(#GT) = [0] [0] [0] p(#LT) = [0] [0] [1] p(#and) = [0 0 1] [0 0 0] [1] [0 0 1] x1 + [0 0 0] x2 + [1] [0 0 1] [0 0 1] [0] p(#ckgt) = [1 0 0] [0] [0 0 1] x1 + [1] [0 1 1] [0] p(#compare) = [0 0 0] [0] [1 0 1] x1 + [0] [0 1 1] [1] p(#eq) = [0] [0] [1] p(#equal) = [0] [0] [0] p(#false) = [0] [0] [0] p(#greater) = [0] [0] [0] p(#neg) = [0 1 0] [0] [0 0 1] x1 + [0] [0 0 0] [0] p(#pos) = [0 0 0] [1] [0 0 0] x1 + [0] [0 0 1] [0] p(#s) = [0 0 0] [0] [0 0 0] x1 + [0] [0 0 1] [0] p(#true) = [0] [0] [0] p(::) = [1 0 0] [1 0 0] [0] [0 0 0] x1 + [0 1 0] x2 + [0] [0 0 0] [0 0 1] [1] p(append) = [0 0 0] [0 0 1] [1] [1 0 0] x1 + [1 0 1] x2 + [0] [0 1 0] [1 0 0] [1] p(append#1) = [0 0 0] [0] [0 0 0] x1 + [1] [0 1 0] [0] p(insert) = [1 0 0] [1] [0 1 0] x2 + [0] [0 1 1] [0] p(insert#1) = [1 0 0] [1] [0 1 0] x2 + [0] [0 1 1] [0] p(insert#2) = [1 0 0] [1] [0 1 0] x1 + [0] [0 1 1] [0] p(insert#3) = [1 0 0] [1 0 0] [1] [0 0 0] x1 + [0 1 0] x3 + [0] [0 0 0] [0 1 1] [1] p(insert#4) = [1 0 0] [0 0 1] [1] [0 1 0] x3 + [0 0 0] x5 + [0] [0 1 1] [0 0 0] [1] p(nil) = [1] [1] [0] p(quicksort) = [1 1 1] [0] [0 0 1] x1 + [1] [0 0 0] [0] p(quicksort#1) = [0 1 0] [0] [0 0 0] x1 + [0] [0 0 0] [0] p(quicksort#2) = [1 0 0] [0] [0 0 0] x1 + [1] [0 0 0] [0] p(sortAll) = [0] [0] [0] p(sortAll#1) = [0] [0] [0] p(sortAll#2) = [0] [0] [0] p(split) = [0 0 1] [1] [0 0 0] x1 + [1] [0 0 1] [0] p(split#1) = [0 0 1] [1] [0 0 0] x1 + [1] [0 0 1] [0] p(splitAndSort) = [0] [0] [0] p(splitqs) = [0 1 0] [1 0 1] [0] [0 1 1] x1 + [0 0 1] x2 + [1] [0 0 0] [0 0 1] [0] p(splitqs#1) = [0 0 1] [0 0 0] [0] [0 0 1] x1 + [0 1 1] x2 + [1] [0 0 1] [0 0 0] [0] p(splitqs#2) = [0 0 1] [1] [0 1 0] x1 + [1] [0 0 1] [1] p(splitqs#3) = [0 0 1] [0 0 1] [1] [0 1 1] x2 + [0 0 0] x3 + [1] [0 0 1] [0 0 1] [1] p(tuple#2) = [0 0 1] [0 0 0] [0] [0 1 1] x1 + [0 0 0] x2 + [0] [0 0 1] [0 0 1] [0] p(#and#) = [0] [0] [0] p(#ckgt#) = [0] [0] [0] p(#compare#) = [0] [0] [0] p(#eq#) = [0] [0] [0] p(#equal#) = [0] [0] [0] p(#greater#) = [0] [0] [0] p(append#) = [0] [0] [0] p(append#1#) = [0] [0] [0] p(insert#) = [0] [0] [0] p(insert#1#) = [0] [0] [0] p(insert#2#) = [0] [0] [0] p(insert#3#) = [0] [0] [0] p(insert#4#) = [0] [0] [0] p(quicksort#) = [0 0 1] [0] [0 0 0] x1 + [0] [0 0 0] [0] p(quicksort#1#) = [0 0 1] [0] [0 0 1] x1 + [0] [0 1 0] [0] p(quicksort#2#) = [0 0 1] [0 0 0] [1] [0 0 0] x1 + [1 0 0] x2 + [0] [0 1 1] [0 1 0] [1] p(sortAll#) = [1 0 0] [0] [0 0 0] x1 + [0] [0 0 1] [0] p(sortAll#1#) = [1 0 0] [0] [0 0 0] x1 + [0] [0 0 1] [0] p(sortAll#2#) = [1 0 0] [1 0 0] [0] [0 0 0] x1 + [0 0 0] x2 + [0] [0 0 0] [0 0 1] [0] p(split#) = [0] [0] [0] p(split#1#) = [0] [0] [0] p(splitAndSort#) = [1 1 1] [1] [1 0 1] x1 + [0] [0 0 1] [0] p(splitqs#) = [0] [0] [0] p(splitqs#1#) = [0] [0] [0] p(splitqs#2#) = [0] [0] [0] p(splitqs#3#) = [0] [0] [0] p(c_1) = [0] [0] [0] p(c_2) = [0] [0] [0] p(c_3) = [0] [0] [0] p(c_4) = [0] [0] [0] p(c_5) = [0] [0] [0] p(c_6) = [0] [0] [0] p(c_7) = [0] [0] [0] p(c_8) = [0] [0] [0] p(c_9) = [0] [0] [0] p(c_10) = [0] [0] [0] p(c_11) = [0] [0] [0] p(c_12) = [0] [0] [0] p(c_13) = [1 0 0] [0] [0 0 0] x1 + [0] [0 0 0] [0] p(c_14) = [1 0 0] [0] [0 0 0] x1 + [0] [0 0 0] [0] p(c_15) = [0] [0] [0] p(c_16) = [1 0 0] [1 0 0] [1 0 0] [0] [0 0 0] x1 + [0 0 0] x2 + [0 0 0] x3 + [0] [0 0 0] [0 0 0] [0 0 0] [0] p(c_17) = [0] [0] [0] p(c_18) = [0] [0] [0] p(c_19) = [0] [0] [0] p(c_20) = [0] [0] [0] p(c_21) = [0] [0] [0] p(c_22) = [0] [0] [0] p(c_23) = [0] [0] [0] p(c_24) = [0] [0] [0] p(c_25) = [0] [0] [0] p(c_26) = [0] [0] [0] p(c_27) = [0] [0] [0] p(c_28) = [0] [0] [0] p(c_29) = [0] [0] [0] p(c_30) = [0] [0] [0] p(c_31) = [0] [0] [0] p(c_32) = [0] [0] [0] p(c_33) = [0] [0] [0] p(c_34) = [0] [0] [0] p(c_35) = [0] [0] [0] p(c_36) = [0] [0] [0] p(c_37) = [0] [0] [0] p(c_38) = [0] [0] [0] p(c_39) = [0] [0] [0] p(c_40) = [0] [0] [0] p(c_41) = [0] [0] [0] p(c_42) = [0] [0] [0] p(c_43) = [0] [0] [0] p(c_44) = [0] [0] [0] p(c_45) = [0] [0] [0] p(c_46) = [0] [0] [0] p(c_47) = [0] [0] [0] p(c_48) = [0] [0] [0] p(c_49) = [0] [0] [0] p(c_50) = [0] [0] [0] p(c_51) = [0] [0] [0] p(c_52) = [0] [0] [0] p(c_53) = [0] [0] [0] p(c_54) = [0] [0] [0] p(c_55) = [0] [0] [0] p(c_56) = [0] [0] [0] p(c_57) = [0] [0] [0] p(c_58) = [0] [0] [0] p(c_59) = [0] [0] [0] p(c_60) = [0] [0] [0] p(c_61) = [0] [0] [0] p(c_62) = [0] [0] [0] p(c_63) = [0] [0] [0] p(c_64) = [0] [0] [0] p(c_65) = [0] [0] [0] p(c_66) = [0] [0] [0] p(c_67) = [0] [0] [0] p(c_68) = [0] [0] [0] p(c_69) = [0] [0] [0] p(c_70) = [0] [0] [0] Following rules are strictly oriented: quicksort#2#(tuple#2(@xs,@ys) = [0 0 1] [0 0 1] [0 0 ,@z) 0] [1] [0 0 0] @xs + [0 0 0] @ys + [1 0 0] @z + [0] [0 1 2] [0 0 1] [0 1 0] [1] > [0 0 1] [0 0 1] [0] [0 0 0] @xs + [0 0 0] @ys + [0] [0 0 0] [0 0 0] [0] = c_16(append#(quicksort(@xs) ,::(@z,quicksort(@ys))) ,quicksort#(@xs) ,quicksort#(@ys)) Following rules are (at-least) weakly oriented: quicksort#(@l) = [0 0 1] [0] [0 0 0] @l + [0] [0 0 0] [0] >= [0 0 1] [0] [0 0 0] @l + [0] [0 0 0] [0] = c_13(quicksort#1#(@l)) quicksort#1#(::(@z,@zs)) = [0 0 1] [1] [0 0 1] @zs + [1] [0 1 0] [0] >= [0 0 1] [1] [0 0 0] @zs + [0] [0 0 0] [0] = c_14(quicksort#2#(splitqs(@z ,@zs) ,@z)) sortAll#(@l) = [1 0 0] [0] [0 0 0] @l + [0] [0 0 1] [0] >= [1 0 0] [0] [0 0 0] @l + [0] [0 0 1] [0] = sortAll#1#(@l) sortAll#1#(::(@x,@xs)) = [1 0 0] [1 0 0] [0] [0 0 0] @x + [0 0 0] @xs + [0] [0 0 0] [0 0 1] [1] >= [1 0 0] [1 0 0] [0] [0 0 0] @x + [0 0 0] @xs + [0] [0 0 0] [0 0 1] [0] = sortAll#2#(@x,@xs) sortAll#2#(tuple#2(@vals,@key) = [0 0 1] [1 0 ,@xs) 0] [0] [0 0 0] @vals + [0 0 0] @xs + [0] [0 0 0] [0 0 1] [0] >= [0 0 1] [0] [0 0 0] @vals + [0] [0 0 0] [0] = quicksort#(@vals) sortAll#2#(tuple#2(@vals,@key) = [0 0 1] [1 0 ,@xs) 0] [0] [0 0 0] @vals + [0 0 0] @xs + [0] [0 0 0] [0 0 1] [0] >= [1 0 0] [0] [0 0 0] @xs + [0] [0 0 1] [0] = sortAll#(@xs) splitAndSort#(@l) = [1 1 1] [1] [1 0 1] @l + [0] [0 0 1] [0] >= [0 0 1] [1] [0 0 0] @l + [0] [0 0 1] [0] = sortAll#(split(@l)) insert(@x,@l) = [1 0 0] [1] [0 1 0] @l + [0] [0 1 1] [0] >= [1 0 0] [1] [0 1 0] @l + [0] [0 1 1] [0] = insert#1(@x,@l,@x) insert#1(tuple#2(@valX,@keyX) = [1 0 0] [1] ,@l [0 1 0] @l + [0] ,@x) [0 1 1] [0] >= [1 0 0] [1] [0 1 0] @l + [0] [0 1 1] [0] = insert#2(@l,@keyX,@valX,@x) insert#2(::(@l1,@ls) = [1 0 0] [1 0 0] [1] ,@keyX [0 0 0] @l1 + [0 1 0] @ls + [0] ,@valX [0 0 0] [0 1 1] [1] ,@x) >= [1 0 0] [1 0 0] [1] [0 0 0] @l1 + [0 1 0] @ls + [0] [0 0 0] [0 1 1] [1] = insert#3(@l1,@keyX,@ls,@valX,@x) insert#2(nil(),@keyX,@valX,@x) = [2] [1] [1] >= [2] [1] [1] = ::(tuple#2(::(@valX,nil()) ,@keyX) ,nil()) insert#3(tuple#2(@vals1,@key1) = [1 0 0] [0 0 ,@keyX 1] [1] ,@ls [0 1 0] @ls + [0 0 ,@valX 0] @vals1 + [0] ,@x) [0 1 1] [0 0 0] [1] >= [1 0 0] [0 0 1] [1] [0 1 0] @ls + [0 0 0] @vals1 + [0] [0 1 1] [0 0 0] [1] = insert#4(#equal(@key1,@keyX) ,@key1 ,@ls ,@valX ,@vals1 ,@x) insert#4(#false() = [1 0 0] [0 0 ,@key1 1] [1] ,@ls [0 1 0] @ls + [0 0 ,@valX 0] @vals1 + [0] ,@vals1 [0 1 1] [0 0 ,@x) 0] [1] >= [1 0 0] [0 0 1] [1] [0 1 0] @ls + [0 0 0] @vals1 + [0] [0 1 1] [0 0 0] [1] = ::(tuple#2(@vals1,@key1) ,insert(@x,@ls)) insert#4(#true() = [1 0 0] [0 0 ,@key1 1] [1] ,@ls [0 1 0] @ls + [0 0 ,@valX 0] @vals1 + [0] ,@vals1 [0 1 1] [0 0 ,@x) 0] [1] >= [1 0 0] [0 0 1] [1] [0 1 0] @ls + [0 0 0] @vals1 + [0] [0 0 1] [0 0 0] [1] = ::(tuple#2(::(@valX,@vals1) ,@key1) ,@ls) split(@l) = [0 0 1] [1] [0 0 0] @l + [1] [0 0 1] [0] >= [0 0 1] [1] [0 0 0] @l + [1] [0 0 1] [0] = split#1(@l) split#1(::(@x,@xs)) = [0 0 1] [2] [0 0 0] @xs + [1] [0 0 1] [1] >= [0 0 1] [2] [0 0 0] @xs + [1] [0 0 1] [1] = insert(@x,split(@xs)) split#1(nil()) = [1] [1] [0] >= [1] [1] [0] = nil() splitqs(@pivot,@l) = [1 0 1] [0 1 0] [0] [0 0 1] @l + [0 1 1] @pivot + [1] [0 0 1] [0 0 0] [0] >= [0 0 1] [0 0 0] [0] [0 0 1] @l + [0 1 1] @pivot + [1] [0 0 1] [0 0 0] [0] = splitqs#1(@l,@pivot) splitqs#1(::(@x,@xs),@pivot) = [0 0 0] [0 0 1] [1] [0 1 1] @pivot + [0 0 1] @xs + [2] [0 0 0] [0 0 1] [1] >= [0 0 0] [0 0 1] [1] [0 1 1] @pivot + [0 0 1] @xs + [2] [0 0 0] [0 0 1] [1] = splitqs#2(splitqs(@pivot,@xs) ,@pivot ,@x) splitqs#1(nil(),@pivot) = [0 0 0] [0] [0 1 1] @pivot + [1] [0 0 0] [0] >= [0] [1] [0] = tuple#2(nil(),nil()) splitqs#2(tuple#2(@ls,@rs) = [0 0 1] [0 0 1] [1] ,@pivot [0 1 1] @ls + [0 0 0] @rs + [1] ,@x) [0 0 1] [0 0 1] [1] >= [0 0 1] [0 0 1] [1] [0 1 1] @ls + [0 0 0] @rs + [1] [0 0 1] [0 0 1] [1] = splitqs#3(#greater(@x,@pivot) ,@ls ,@rs ,@x) splitqs#3(#false(),@ls,@rs,@x) = [0 0 1] [0 0 1] [1] [0 1 1] @ls + [0 0 0] @rs + [1] [0 0 1] [0 0 1] [1] >= [0 0 1] [0 0 0] [1] [0 1 1] @ls + [0 0 0] @rs + [1] [0 0 1] [0 0 1] [1] = tuple#2(::(@x,@ls),@rs) splitqs#3(#true(),@ls,@rs,@x) = [0 0 1] [0 0 1] [1] [0 1 1] @ls + [0 0 0] @rs + [1] [0 0 1] [0 0 1] [1] >= [0 0 1] [0 0 0] [0] [0 1 1] @ls + [0 0 0] @rs + [0] [0 0 1] [0 0 1] [1] = tuple#2(@ls,::(@x,@rs)) *** 1.1.1.1.1.1.1.1.1.1.2.1.1 Progress [(O(1),O(1))] *** Considered Problem: Strict DP Rules: Strict TRS Rules: Weak DP Rules: 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(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) splitAndSort#(@l) -> sortAll#(split(@l)) Weak TRS 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)) 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/3,c_17/1,c_18/1,c_19/0,c_20/2,c_21/1,c_22/2,c_23/0,c_24/1,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 basic terms: {#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#}/{#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} Applied Processor: EmptyProcessor Proof: The problem is already closed. The intended complexity is O(1). *** 1.1.1.1.1.1.1.1.1.1.2.2 Progress [(O(1),O(n^2))] *** Considered Problem: Strict DP Rules: append#(@l,@ys) -> c_3(append#1#(@l,@ys)) append#1#(::(@x,@xs),@ys) -> c_4(append#(@xs,@ys)) Strict TRS Rules: Weak DP Rules: quicksort#(@l) -> quicksort#1#(@l) quicksort#1#(::(@z,@zs)) -> quicksort#2#(splitqs(@z,@zs),@z) 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 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)) 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/3,c_17/1,c_18/1,c_19/0,c_20/2,c_21/1,c_22/2,c_23/0,c_24/1,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 basic terms: {#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#}/{#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} Applied Processor: NaturalMI {miDimension = 3, miDegree = 3, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Just any strict-rules, greedy = NoGreedy} Proof: We apply a matrix interpretation of kind constructor based matrix interpretation: The following argument positions are considered usable: uargs(c_3) = {1}, uargs(c_4) = {1} Following symbols are considered usable: {append,append#1,insert,insert#1,insert#2,insert#3,insert#4,quicksort,quicksort#1,quicksort#2,split,split#1,splitqs,splitqs#1,splitqs#2,splitqs#3,#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#} TcT has computed the following interpretation: p(#0) = [0] [0] [0] p(#EQ) = [0] [0] [0] p(#GT) = [0] [0] [0] p(#LT) = [0] [0] [0] p(#and) = [0 1 1] [0 1 0] [1] [0 0 0] x1 + [0 0 0] x2 + [0] [0 1 0] [0 0 0] [1] p(#ckgt) = [1] [0] [0] p(#compare) = [0] [0] [0] p(#eq) = [0 0 0] [0] [0 0 1] x2 + [1] [0 0 1] [0] p(#equal) = [0] [0] [0] p(#false) = [0] [0] [0] p(#greater) = [0] [0] [0] p(#neg) = [0] [0] [0] p(#pos) = [0] [0] [0] p(#s) = [0] [0] [0] p(#true) = [0] [0] [0] p(::) = [0 0 0] [1 0 0] [0] [0 1 0] x1 + [0 1 0] x2 + [0] [0 0 0] [0 0 1] [1] p(append) = [0 0 0] [1 0 0] [0] [0 1 0] x1 + [0 1 0] x2 + [0] [0 0 1] [0 0 1] [0] p(append#1) = [0 0 0] [1 0 0] [0] [0 1 0] x1 + [0 1 0] x2 + [0] [0 0 1] [0 0 1] [0] p(insert) = [1 0 0] [0] [0 1 0] x2 + [1] [1 0 1] [0] p(insert#1) = [1 0 0] [0] [0 1 0] x2 + [1] [1 0 1] [0] p(insert#2) = [1 0 0] [0] [0 1 0] x1 + [1] [1 0 1] [0] p(insert#3) = [0 0 0] [1 0 0] [0] [0 1 0] x1 + [0 1 0] x3 + [1] [0 0 0] [1 0 1] [1] p(insert#4) = [1 0 0] [0 0 0] [0] [0 1 0] x3 + [0 0 1] x5 + [1] [1 0 1] [0 0 0] [1] p(nil) = [1] [0] [0] p(quicksort) = [0 0 0] [1] [0 1 0] x1 + [0] [0 0 1] [0] p(quicksort#1) = [0 0 0] [1] [0 1 0] x1 + [0] [0 0 1] [0] p(quicksort#2) = [0 0 0] [0 0 0] [1] [1 0 0] x1 + [0 1 0] x2 + [0] [0 0 1] [0 0 0] [1] p(sortAll) = [0] [0] [0] p(sortAll#1) = [0] [0] [0] p(sortAll#2) = [0] [0] [0] p(split) = [0 0 0] [1] [0 0 1] x1 + [0] [0 0 1] [0] p(split#1) = [0 0 0] [1] [0 0 1] x1 + [0] [0 0 1] [0] p(splitAndSort) = [0] [0] [0] p(splitqs) = [0 0 0] [0 1 0] [0] [1 0 0] x1 + [0 0 1] x2 + [0] [0 0 0] [0 0 1] [0] p(splitqs#1) = [0 1 0] [0 0 0] [0] [0 0 1] x1 + [1 0 0] x2 + [0] [0 0 1] [0 0 0] [0] p(splitqs#2) = [1 0 0] [0 1 0] [0] [0 1 0] x1 + [0 0 0] x3 + [1] [0 0 1] [0 0 0] [1] p(splitqs#3) = [0 1 0] [0 1 0] [0 1 0] [0] [0 0 1] x2 + [0 0 0] x3 + [0 0 0] x4 + [1] [0 0 1] [0 0 1] [0 0 0] [1] p(tuple#2) = [0 1 0] [0 1 0] [0] [0 0 1] x1 + [0 0 0] x2 + [0] [0 0 1] [0 0 1] [0] p(#and#) = [0] [0] [0] p(#ckgt#) = [0] [0] [0] p(#compare#) = [0] [0] [0] p(#eq#) = [0] [0] [0] p(#equal#) = [0] [0] [0] p(#greater#) = [0] [0] [0] p(append#) = [0 0 1] [1 0 0] [0] [0 0 0] x1 + [0 0 0] x2 + [0] [1 0 0] [0 0 0] [0] p(append#1#) = [0 0 1] [1 0 0] [0] [1 0 0] x1 + [0 0 0] x2 + [0] [0 1 1] [0 0 0] [1] p(insert#) = [0] [0] [0] p(insert#1#) = [0] [0] [0] p(insert#2#) = [0] [0] [0] p(insert#3#) = [0] [0] [0] p(insert#4#) = [0] [0] [0] p(quicksort#) = [0 0 1] [1] [0 0 0] x1 + [1] [0 0 1] [0] p(quicksort#1#) = [0 0 1] [1] [0 0 0] x1 + [1] [0 0 1] [0] p(quicksort#2#) = [0 0 1] [1] [0 0 0] x1 + [1] [0 0 1] [1] p(sortAll#) = [0 1 0] [1] [0 0 0] x1 + [1] [0 1 0] [1] p(sortAll#1#) = [0 1 0] [1] [0 0 0] x1 + [1] [0 1 0] [1] p(sortAll#2#) = [0 1 0] [0 1 0] [1] [0 0 0] x1 + [0 0 0] x2 + [1] [0 1 0] [0 1 0] [1] p(split#) = [0] [0] [0] p(split#1#) = [0] [0] [0] p(splitAndSort#) = [1 1 1] [1] [0 1 1] x1 + [1] [1 1 1] [1] p(splitqs#) = [0] [0] [0] p(splitqs#1#) = [0] [0] [0] p(splitqs#2#) = [0] [0] [0] p(splitqs#3#) = [0] [0] [0] p(c_1) = [0] [0] [0] p(c_2) = [0] [0] [0] p(c_3) = [1 0 0] [0] [0 0 0] x1 + [0] [0 1 0] [0] p(c_4) = [1 0 0] [0] [0 0 1] x1 + [0] [0 0 0] [0] p(c_5) = [0] [0] [0] p(c_6) = [0] [0] [0] p(c_7) = [0] [0] [0] p(c_8) = [0] [0] [0] p(c_9) = [0] [0] [0] p(c_10) = [0] [0] [0] p(c_11) = [0] [0] [0] p(c_12) = [0] [0] [0] p(c_13) = [0] [0] [0] p(c_14) = [0] [0] [0] p(c_15) = [0] [0] [0] p(c_16) = [0] [0] [0] p(c_17) = [0] [0] [0] p(c_18) = [0] [0] [0] p(c_19) = [0] [0] [0] p(c_20) = [0] [0] [0] p(c_21) = [0] [0] [0] p(c_22) = [0] [0] [0] p(c_23) = [0] [0] [0] p(c_24) = [0] [0] [0] p(c_25) = [0] [0] [0] p(c_26) = [0] [0] [0] p(c_27) = [0] [0] [0] p(c_28) = [0] [0] [0] p(c_29) = [0] [0] [0] p(c_30) = [0] [0] [0] p(c_31) = [0] [0] [0] p(c_32) = [0] [0] [0] p(c_33) = [0] [0] [0] p(c_34) = [0] [0] [0] p(c_35) = [0] [0] [0] p(c_36) = [0] [0] [0] p(c_37) = [0] [0] [0] p(c_38) = [0] [0] [0] p(c_39) = [0] [0] [0] p(c_40) = [0] [0] [0] p(c_41) = [0] [0] [0] p(c_42) = [0] [0] [0] p(c_43) = [0] [0] [0] p(c_44) = [0] [0] [0] p(c_45) = [0] [0] [0] p(c_46) = [0] [0] [0] p(c_47) = [0] [0] [0] p(c_48) = [0] [0] [0] p(c_49) = [0] [0] [0] p(c_50) = [0] [0] [0] p(c_51) = [0] [0] [0] p(c_52) = [0] [0] [0] p(c_53) = [0] [0] [0] p(c_54) = [0] [0] [0] p(c_55) = [0] [0] [0] p(c_56) = [0] [0] [0] p(c_57) = [0] [0] [0] p(c_58) = [0] [0] [0] p(c_59) = [0] [0] [0] p(c_60) = [0] [0] [0] p(c_61) = [0] [0] [0] p(c_62) = [0] [0] [0] p(c_63) = [0] [0] [0] p(c_64) = [0] [0] [0] p(c_65) = [0] [0] [0] p(c_66) = [0] [0] [0] p(c_67) = [0] [0] [0] p(c_68) = [0] [0] [0] p(c_69) = [0] [0] [0] p(c_70) = [0] [0] [0] Following rules are strictly oriented: append#1#(::(@x,@xs),@ys) = [0 0 0] [0 0 1] [1 0 0] [1] [0 0 0] @x + [1 0 0] @xs + [0 0 0] @ys + [0] [0 1 0] [0 1 1] [0 0 0] [2] > [0 0 1] [1 0 0] [0] [1 0 0] @xs + [0 0 0] @ys + [0] [0 0 0] [0 0 0] [0] = c_4(append#(@xs,@ys)) Following rules are (at-least) weakly oriented: append#(@l,@ys) = [0 0 1] [1 0 0] [0] [0 0 0] @l + [0 0 0] @ys + [0] [1 0 0] [0 0 0] [0] >= [0 0 1] [1 0 0] [0] [0 0 0] @l + [0 0 0] @ys + [0] [1 0 0] [0 0 0] [0] = c_3(append#1#(@l,@ys)) quicksort#(@l) = [0 0 1] [1] [0 0 0] @l + [1] [0 0 1] [0] >= [0 0 1] [1] [0 0 0] @l + [1] [0 0 1] [0] = quicksort#1#(@l) quicksort#1#(::(@z,@zs)) = [0 0 1] [2] [0 0 0] @zs + [1] [0 0 1] [1] >= [0 0 1] [1] [0 0 0] @zs + [1] [0 0 1] [1] = quicksort#2#(splitqs(@z,@zs),@z) quicksort#2#(tuple#2(@xs,@ys) = [0 0 1] [0 0 1] [1] ,@z) [0 0 0] @xs + [0 0 0] @ys + [1] [0 0 1] [0 0 1] [1] >= [0 0 1] [1] [0 0 0] @xs + [0] [0 0 0] [1] = append#(quicksort(@xs) ,::(@z,quicksort(@ys))) quicksort#2#(tuple#2(@xs,@ys) = [0 0 1] [0 0 1] [1] ,@z) [0 0 0] @xs + [0 0 0] @ys + [1] [0 0 1] [0 0 1] [1] >= [0 0 1] [1] [0 0 0] @xs + [1] [0 0 1] [0] = quicksort#(@xs) quicksort#2#(tuple#2(@xs,@ys) = [0 0 1] [0 0 1] [1] ,@z) [0 0 0] @xs + [0 0 0] @ys + [1] [0 0 1] [0 0 1] [1] >= [0 0 1] [1] [0 0 0] @ys + [1] [0 0 1] [0] = quicksort#(@ys) sortAll#(@l) = [0 1 0] [1] [0 0 0] @l + [1] [0 1 0] [1] >= [0 1 0] [1] [0 0 0] @l + [1] [0 1 0] [1] = sortAll#1#(@l) sortAll#1#(::(@x,@xs)) = [0 1 0] [0 1 0] [1] [0 0 0] @x + [0 0 0] @xs + [1] [0 1 0] [0 1 0] [1] >= [0 1 0] [0 1 0] [1] [0 0 0] @x + [0 0 0] @xs + [1] [0 1 0] [0 1 0] [1] = sortAll#2#(@x,@xs) sortAll#2#(tuple#2(@vals,@key) = [0 0 1] [0 1 ,@xs) 0] [1] [0 0 0] @vals + [0 0 0] @xs + [1] [0 0 1] [0 1 0] [1] >= [0 0 1] [1] [0 0 0] @vals + [1] [0 0 1] [0] = quicksort#(@vals) sortAll#2#(tuple#2(@vals,@key) = [0 0 1] [0 1 ,@xs) 0] [1] [0 0 0] @vals + [0 0 0] @xs + [1] [0 0 1] [0 1 0] [1] >= [0 1 0] [1] [0 0 0] @xs + [1] [0 1 0] [1] = sortAll#(@xs) splitAndSort#(@l) = [1 1 1] [1] [0 1 1] @l + [1] [1 1 1] [1] >= [0 0 1] [1] [0 0 0] @l + [1] [0 0 1] [1] = sortAll#(split(@l)) append(@l,@ys) = [0 0 0] [1 0 0] [0] [0 1 0] @l + [0 1 0] @ys + [0] [0 0 1] [0 0 1] [0] >= [0 0 0] [1 0 0] [0] [0 1 0] @l + [0 1 0] @ys + [0] [0 0 1] [0 0 1] [0] = append#1(@l,@ys) append#1(::(@x,@xs),@ys) = [0 0 0] [0 0 0] [1 0 0] [0] [0 1 0] @x + [0 1 0] @xs + [0 1 0] @ys + [0] [0 0 0] [0 0 1] [0 0 1] [1] >= [0 0 0] [0 0 0] [1 0 0] [0] [0 1 0] @x + [0 1 0] @xs + [0 1 0] @ys + [0] [0 0 0] [0 0 1] [0 0 1] [1] = ::(@x,append(@xs,@ys)) append#1(nil(),@ys) = [1 0 0] [0] [0 1 0] @ys + [0] [0 0 1] [0] >= [1 0 0] [0] [0 1 0] @ys + [0] [0 0 1] [0] = @ys insert(@x,@l) = [1 0 0] [0] [0 1 0] @l + [1] [1 0 1] [0] >= [1 0 0] [0] [0 1 0] @l + [1] [1 0 1] [0] = insert#1(@x,@l,@x) insert#1(tuple#2(@valX,@keyX) = [1 0 0] [0] ,@l [0 1 0] @l + [1] ,@x) [1 0 1] [0] >= [1 0 0] [0] [0 1 0] @l + [1] [1 0 1] [0] = insert#2(@l,@keyX,@valX,@x) insert#2(::(@l1,@ls) = [0 0 0] [1 0 0] [0] ,@keyX [0 1 0] @l1 + [0 1 0] @ls + [1] ,@valX [0 0 0] [1 0 1] [1] ,@x) >= [0 0 0] [1 0 0] [0] [0 1 0] @l1 + [0 1 0] @ls + [1] [0 0 0] [1 0 1] [1] = insert#3(@l1,@keyX,@ls,@valX,@x) insert#2(nil(),@keyX,@valX,@x) = [1] [1] [1] >= [1] [1] [1] = ::(tuple#2(::(@valX,nil()) ,@keyX) ,nil()) insert#3(tuple#2(@vals1,@key1) = [1 0 0] [0 0 ,@keyX 0] [0] ,@ls [0 1 0] @ls + [0 0 ,@valX 1] @vals1 + [1] ,@x) [1 0 1] [0 0 0] [1] >= [1 0 0] [0 0 0] [0] [0 1 0] @ls + [0 0 1] @vals1 + [1] [1 0 1] [0 0 0] [1] = insert#4(#equal(@key1,@keyX) ,@key1 ,@ls ,@valX ,@vals1 ,@x) insert#4(#false() = [1 0 0] [0 0 ,@key1 0] [0] ,@ls [0 1 0] @ls + [0 0 ,@valX 1] @vals1 + [1] ,@vals1 [1 0 1] [0 0 ,@x) 0] [1] >= [1 0 0] [0 0 0] [0] [0 1 0] @ls + [0 0 1] @vals1 + [1] [1 0 1] [0 0 0] [1] = ::(tuple#2(@vals1,@key1) ,insert(@x,@ls)) insert#4(#true() = [1 0 0] [0 0 ,@key1 0] [0] ,@ls [0 1 0] @ls + [0 0 ,@valX 1] @vals1 + [1] ,@vals1 [1 0 1] [0 0 ,@x) 0] [1] >= [1 0 0] [0 0 0] [0] [0 1 0] @ls + [0 0 1] @vals1 + [1] [0 0 1] [0 0 0] [1] = ::(tuple#2(::(@valX,@vals1) ,@key1) ,@ls) quicksort(@l) = [0 0 0] [1] [0 1 0] @l + [0] [0 0 1] [0] >= [0 0 0] [1] [0 1 0] @l + [0] [0 0 1] [0] = quicksort#1(@l) quicksort#1(::(@z,@zs)) = [0 0 0] [0 0 0] [1] [0 1 0] @z + [0 1 0] @zs + [0] [0 0 0] [0 0 1] [1] >= [0 0 0] [0 0 0] [1] [0 1 0] @z + [0 1 0] @zs + [0] [0 0 0] [0 0 1] [1] = quicksort#2(splitqs(@z,@zs),@z) quicksort#1(nil()) = [1] [0] [0] >= [1] [0] [0] = nil() quicksort#2(tuple#2(@xs,@ys),@z) = [0 0 0] [0 0 0] [0 0 0] [1] [0 1 0] @xs + [0 1 0] @ys + [0 1 0] @z + [0] [0 0 1] [0 0 1] [0 0 0] [1] >= [0 0 0] [0 0 0] [0 0 0] [1] [0 1 0] @xs + [0 1 0] @ys + [0 1 0] @z + [0] [0 0 1] [0 0 1] [0 0 0] [1] = append(quicksort(@xs) ,::(@z,quicksort(@ys))) split(@l) = [0 0 0] [1] [0 0 1] @l + [0] [0 0 1] [0] >= [0 0 0] [1] [0 0 1] @l + [0] [0 0 1] [0] = split#1(@l) split#1(::(@x,@xs)) = [0 0 0] [1] [0 0 1] @xs + [1] [0 0 1] [1] >= [0 0 0] [1] [0 0 1] @xs + [1] [0 0 1] [1] = insert(@x,split(@xs)) split#1(nil()) = [1] [0] [0] >= [1] [0] [0] = nil() splitqs(@pivot,@l) = [0 1 0] [0 0 0] [0] [0 0 1] @l + [1 0 0] @pivot + [0] [0 0 1] [0 0 0] [0] >= [0 1 0] [0 0 0] [0] [0 0 1] @l + [1 0 0] @pivot + [0] [0 0 1] [0 0 0] [0] = splitqs#1(@l,@pivot) splitqs#1(::(@x,@xs),@pivot) = [0 0 0] [0 1 0] [0 1 0] [0] [1 0 0] @pivot + [0 0 0] @x + [0 0 1] @xs + [1] [0 0 0] [0 0 0] [0 0 1] [1] >= [0 0 0] [0 1 0] [0 1 0] [0] [1 0 0] @pivot + [0 0 0] @x + [0 0 1] @xs + [1] [0 0 0] [0 0 0] [0 0 1] [1] = splitqs#2(splitqs(@pivot,@xs) ,@pivot ,@x) splitqs#1(nil(),@pivot) = [0 0 0] [0] [1 0 0] @pivot + [0] [0 0 0] [0] >= [0] [0] [0] = tuple#2(nil(),nil()) splitqs#2(tuple#2(@ls,@rs) = [0 1 0] [0 1 0] [0 1 ,@pivot 0] [0] ,@x) [0 0 1] @ls + [0 0 0] @rs + [0 0 0] @x + [1] [0 0 1] [0 0 1] [0 0 0] [1] >= [0 1 0] [0 1 0] [0 1 0] [0] [0 0 1] @ls + [0 0 0] @rs + [0 0 0] @x + [1] [0 0 1] [0 0 1] [0 0 0] [1] = splitqs#3(#greater(@x,@pivot) ,@ls ,@rs ,@x) splitqs#3(#false(),@ls,@rs,@x) = [0 1 0] [0 1 0] [0 1 0] [0] [0 0 1] @ls + [0 0 0] @rs + [0 0 0] @x + [1] [0 0 1] [0 0 1] [0 0 0] [1] >= [0 1 0] [0 1 0] [0 1 0] [0] [0 0 1] @ls + [0 0 0] @rs + [0 0 0] @x + [1] [0 0 1] [0 0 1] [0 0 0] [1] = tuple#2(::(@x,@ls),@rs) splitqs#3(#true(),@ls,@rs,@x) = [0 1 0] [0 1 0] [0 1 0] [0] [0 0 1] @ls + [0 0 0] @rs + [0 0 0] @x + [1] [0 0 1] [0 0 1] [0 0 0] [1] >= [0 1 0] [0 1 0] [0 1 0] [0] [0 0 1] @ls + [0 0 0] @rs + [0 0 0] @x + [0] [0 0 1] [0 0 1] [0 0 0] [1] = tuple#2(@ls,::(@x,@rs)) *** 1.1.1.1.1.1.1.1.1.1.2.2.1 Progress [(O(1),O(n^2))] *** Considered Problem: Strict DP Rules: append#(@l,@ys) -> c_3(append#1#(@l,@ys)) Strict TRS Rules: Weak DP Rules: 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#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 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)) 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/3,c_17/1,c_18/1,c_19/0,c_20/2,c_21/1,c_22/2,c_23/0,c_24/1,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 basic terms: {#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#}/{#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} Applied Processor: NaturalMI {miDimension = 3, miDegree = 3, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Just any strict-rules, greedy = NoGreedy} Proof: We apply a matrix interpretation of kind constructor based matrix interpretation: The following argument positions are considered usable: uargs(c_3) = {1}, uargs(c_4) = {1} Following symbols are considered usable: {append,append#1,insert,insert#1,insert#2,insert#3,insert#4,quicksort,quicksort#1,quicksort#2,split,split#1,splitqs,splitqs#1,splitqs#2,splitqs#3,#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#} TcT has computed the following interpretation: p(#0) = [1] [0] [0] p(#EQ) = [1] [0] [0] p(#GT) = [0] [0] [0] p(#LT) = [1] [0] [0] p(#and) = [0 1 0] [0 0 0] [1] [0 0 0] x1 + [0 0 0] x2 + [0] [0 1 0] [0 1 0] [1] p(#ckgt) = [0 0 0] [0] [1 1 0] x1 + [0] [0 1 0] [0] p(#compare) = [0 0 0] [0 0 0] [0] [1 0 0] x1 + [1 0 0] x2 + [0] [0 0 0] [0 0 0] [0] p(#eq) = [0 0 0] [0] [0 0 1] x1 + [1] [0 0 0] [0] p(#equal) = [0] [0] [0] p(#false) = [0] [0] [0] p(#greater) = [0] [0] [0] p(#neg) = [0] [0] [0] p(#pos) = [0 0 0] [0] [0 0 0] x1 + [0] [0 0 1] [1] p(#s) = [1] [0] [0] p(#true) = [0] [0] [0] p(::) = [0 0 0] [1 0 0] [0] [0 0 1] x1 + [0 1 0] x2 + [0] [0 0 0] [0 0 1] [1] p(append) = [0 0 0] [1 0 0] [0] [0 1 0] x1 + [0 1 0] x2 + [0] [0 0 1] [0 0 1] [0] p(append#1) = [0 0 0] [1 0 0] [0] [0 1 0] x1 + [0 1 0] x2 + [0] [0 0 1] [0 0 1] [0] p(insert) = [1 0 0] [0] [0 1 0] x2 + [1] [1 0 1] [0] p(insert#1) = [1 0 0] [0] [0 1 0] x2 + [1] [1 0 1] [0] p(insert#2) = [1 0 0] [0] [0 1 0] x1 + [1] [1 0 1] [0] p(insert#3) = [0 0 0] [1 0 0] [0] [0 0 1] x1 + [0 1 0] x3 + [1] [0 0 0] [1 0 1] [1] p(insert#4) = [1 0 0] [0 0 0] [0] [0 1 0] x3 + [0 0 1] x5 + [1] [1 0 1] [0 0 0] [1] p(nil) = [1] [1] [0] p(quicksort) = [0 0 0] [1] [0 1 1] x1 + [0] [0 0 1] [0] p(quicksort#1) = [0 0 0] [1] [0 1 1] x1 + [0] [0 0 1] [0] p(quicksort#2) = [0 0 0] [0 0 0] [1] [0 1 0] x1 + [0 0 1] x2 + [0] [1 0 0] [0 0 0] [1] p(sortAll) = [0] [0] [0] p(sortAll#1) = [0] [0] [0] p(sortAll#2) = [0] [0] [0] p(split) = [0 0 0] [1] [0 0 1] x1 + [1] [0 0 1] [0] p(split#1) = [0 0 0] [1] [0 0 1] x1 + [1] [0 0 1] [0] p(splitAndSort) = [0] [0] [0] p(splitqs) = [0 0 0] [0 0 1] [0] [0 0 0] x1 + [0 1 1] x2 + [1] [1 0 0] [0 1 1] [1] p(splitqs#1) = [0 0 1] [0 0 0] [0] [0 1 1] x1 + [0 0 0] x2 + [1] [0 1 1] [1 0 0] [1] p(splitqs#2) = [1 0 0] [0 0 0] [1] [0 1 0] x1 + [0 0 1] x3 + [1] [0 1 0] [0 0 1] [1] p(splitqs#3) = [0 0 1] [0 0 1] [0 0 0] [1] [0 1 1] x2 + [0 1 1] x3 + [0 0 1] x4 + [1] [0 0 1] [0 1 0] [0 0 0] [1] p(tuple#2) = [0 0 1] [0 0 1] [0] [0 1 1] x1 + [0 1 1] x2 + [0] [0 0 1] [0 0 0] [0] p(#and#) = [0] [0] [0] p(#ckgt#) = [0] [0] [0] p(#compare#) = [0] [0] [0] p(#eq#) = [0] [0] [0] p(#equal#) = [0] [0] [0] p(#greater#) = [0] [0] [0] p(append#) = [0 0 1] [1] [0 0 0] x1 + [1] [0 0 0] [0] p(append#1#) = [0 0 1] [0 0 0] [0] [0 0 0] x1 + [1 1 0] x2 + [1] [0 0 0] [1 0 1] [1] p(insert#) = [0] [0] [0] p(insert#1#) = [0] [0] [0] p(insert#2#) = [0] [0] [0] p(insert#3#) = [0] [0] [0] p(insert#4#) = [0] [0] [0] p(quicksort#) = [0 0 1] [0] [0 0 0] x1 + [1] [0 0 0] [0] p(quicksort#1#) = [0 0 1] [0] [0 0 0] x1 + [1] [0 0 0] [0] p(quicksort#2#) = [1 0 0] [1] [0 0 0] x1 + [1] [0 0 0] [0] p(sortAll#) = [0 1 0] [0] [0 0 1] x1 + [1] [0 0 0] [0] p(sortAll#1#) = [0 1 0] [0] [0 0 1] x1 + [1] [0 0 0] [0] p(sortAll#2#) = [0 0 1] [0 1 0] [0] [0 0 0] x1 + [0 0 1] x2 + [1] [0 0 0] [0 0 0] [0] p(split#) = [0] [0] [0] p(split#1#) = [0] [0] [0] p(splitAndSort#) = [0 1 1] [1] [1 1 1] x1 + [1] [1 0 0] [0] p(splitqs#) = [0] [0] [0] p(splitqs#1#) = [0] [0] [0] p(splitqs#2#) = [0] [0] [0] p(splitqs#3#) = [0] [0] [0] p(c_1) = [0] [0] [0] p(c_2) = [0] [0] [0] p(c_3) = [1 0 0] [0] [0 0 0] x1 + [0] [0 0 0] [0] p(c_4) = [1 0 0] [0] [0 0 0] x1 + [0] [0 0 0] [1] p(c_5) = [0] [0] [0] p(c_6) = [0] [0] [0] p(c_7) = [0] [0] [0] p(c_8) = [0] [0] [0] p(c_9) = [0] [0] [0] p(c_10) = [0] [0] [0] p(c_11) = [0] [0] [0] p(c_12) = [0] [0] [0] p(c_13) = [0] [0] [0] p(c_14) = [0] [0] [0] p(c_15) = [0] [0] [0] p(c_16) = [0] [0] [0] p(c_17) = [0] [0] [0] p(c_18) = [0] [0] [0] p(c_19) = [0] [0] [0] p(c_20) = [0] [0] [0] p(c_21) = [0] [0] [0] p(c_22) = [0] [0] [0] p(c_23) = [0] [0] [0] p(c_24) = [0] [0] [0] p(c_25) = [0] [0] [0] p(c_26) = [0] [0] [0] p(c_27) = [0] [0] [0] p(c_28) = [0] [0] [0] p(c_29) = [0] [0] [0] p(c_30) = [0] [0] [0] p(c_31) = [0] [0] [0] p(c_32) = [0] [0] [0] p(c_33) = [0] [0] [0] p(c_34) = [0] [0] [0] p(c_35) = [0] [0] [0] p(c_36) = [0] [0] [0] p(c_37) = [0] [0] [0] p(c_38) = [0] [0] [0] p(c_39) = [0] [0] [0] p(c_40) = [0] [0] [0] p(c_41) = [0] [0] [0] p(c_42) = [0] [0] [0] p(c_43) = [0] [0] [0] p(c_44) = [0] [0] [0] p(c_45) = [0] [0] [0] p(c_46) = [0] [0] [0] p(c_47) = [0] [0] [0] p(c_48) = [0] [0] [0] p(c_49) = [0] [0] [0] p(c_50) = [0] [0] [0] p(c_51) = [0] [0] [0] p(c_52) = [0] [0] [0] p(c_53) = [0] [0] [0] p(c_54) = [0] [0] [0] p(c_55) = [0] [0] [0] p(c_56) = [0] [0] [0] p(c_57) = [0] [0] [0] p(c_58) = [0] [0] [0] p(c_59) = [0] [0] [0] p(c_60) = [0] [0] [0] p(c_61) = [0] [0] [0] p(c_62) = [0] [0] [0] p(c_63) = [0] [0] [0] p(c_64) = [0] [0] [0] p(c_65) = [0] [0] [0] p(c_66) = [0] [0] [0] p(c_67) = [0] [0] [0] p(c_68) = [0] [0] [0] p(c_69) = [0] [0] [0] p(c_70) = [0] [0] [0] Following rules are strictly oriented: append#(@l,@ys) = [0 0 1] [1] [0 0 0] @l + [1] [0 0 0] [0] > [0 0 1] [0] [0 0 0] @l + [0] [0 0 0] [0] = c_3(append#1#(@l,@ys)) Following rules are (at-least) weakly oriented: append#1#(::(@x,@xs),@ys) = [0 0 1] [0 0 0] [1] [0 0 0] @xs + [1 1 0] @ys + [1] [0 0 0] [1 0 1] [1] >= [0 0 1] [1] [0 0 0] @xs + [0] [0 0 0] [1] = c_4(append#(@xs,@ys)) quicksort#(@l) = [0 0 1] [0] [0 0 0] @l + [1] [0 0 0] [0] >= [0 0 1] [0] [0 0 0] @l + [1] [0 0 0] [0] = quicksort#1#(@l) quicksort#1#(::(@z,@zs)) = [0 0 1] [1] [0 0 0] @zs + [1] [0 0 0] [0] >= [0 0 1] [1] [0 0 0] @zs + [1] [0 0 0] [0] = quicksort#2#(splitqs(@z,@zs),@z) quicksort#2#(tuple#2(@xs,@ys) = [0 0 1] [0 0 1] [1] ,@z) [0 0 0] @xs + [0 0 0] @ys + [1] [0 0 0] [0 0 0] [0] >= [0 0 1] [1] [0 0 0] @xs + [1] [0 0 0] [0] = append#(quicksort(@xs) ,::(@z,quicksort(@ys))) quicksort#2#(tuple#2(@xs,@ys) = [0 0 1] [0 0 1] [1] ,@z) [0 0 0] @xs + [0 0 0] @ys + [1] [0 0 0] [0 0 0] [0] >= [0 0 1] [0] [0 0 0] @xs + [1] [0 0 0] [0] = quicksort#(@xs) quicksort#2#(tuple#2(@xs,@ys) = [0 0 1] [0 0 1] [1] ,@z) [0 0 0] @xs + [0 0 0] @ys + [1] [0 0 0] [0 0 0] [0] >= [0 0 1] [0] [0 0 0] @ys + [1] [0 0 0] [0] = quicksort#(@ys) sortAll#(@l) = [0 1 0] [0] [0 0 1] @l + [1] [0 0 0] [0] >= [0 1 0] [0] [0 0 1] @l + [1] [0 0 0] [0] = sortAll#1#(@l) sortAll#1#(::(@x,@xs)) = [0 0 1] [0 1 0] [0] [0 0 0] @x + [0 0 1] @xs + [2] [0 0 0] [0 0 0] [0] >= [0 0 1] [0 1 0] [0] [0 0 0] @x + [0 0 1] @xs + [1] [0 0 0] [0 0 0] [0] = sortAll#2#(@x,@xs) sortAll#2#(tuple#2(@vals,@key) = [0 0 1] [0 1 ,@xs) 0] [0] [0 0 0] @vals + [0 0 1] @xs + [1] [0 0 0] [0 0 0] [0] >= [0 0 1] [0] [0 0 0] @vals + [1] [0 0 0] [0] = quicksort#(@vals) sortAll#2#(tuple#2(@vals,@key) = [0 0 1] [0 1 ,@xs) 0] [0] [0 0 0] @vals + [0 0 1] @xs + [1] [0 0 0] [0 0 0] [0] >= [0 1 0] [0] [0 0 1] @xs + [1] [0 0 0] [0] = sortAll#(@xs) splitAndSort#(@l) = [0 1 1] [1] [1 1 1] @l + [1] [1 0 0] [0] >= [0 0 1] [1] [0 0 1] @l + [1] [0 0 0] [0] = sortAll#(split(@l)) append(@l,@ys) = [0 0 0] [1 0 0] [0] [0 1 0] @l + [0 1 0] @ys + [0] [0 0 1] [0 0 1] [0] >= [0 0 0] [1 0 0] [0] [0 1 0] @l + [0 1 0] @ys + [0] [0 0 1] [0 0 1] [0] = append#1(@l,@ys) append#1(::(@x,@xs),@ys) = [0 0 0] [0 0 0] [1 0 0] [0] [0 0 1] @x + [0 1 0] @xs + [0 1 0] @ys + [0] [0 0 0] [0 0 1] [0 0 1] [1] >= [0 0 0] [0 0 0] [1 0 0] [0] [0 0 1] @x + [0 1 0] @xs + [0 1 0] @ys + [0] [0 0 0] [0 0 1] [0 0 1] [1] = ::(@x,append(@xs,@ys)) append#1(nil(),@ys) = [1 0 0] [0] [0 1 0] @ys + [1] [0 0 1] [0] >= [1 0 0] [0] [0 1 0] @ys + [0] [0 0 1] [0] = @ys insert(@x,@l) = [1 0 0] [0] [0 1 0] @l + [1] [1 0 1] [0] >= [1 0 0] [0] [0 1 0] @l + [1] [1 0 1] [0] = insert#1(@x,@l,@x) insert#1(tuple#2(@valX,@keyX) = [1 0 0] [0] ,@l [0 1 0] @l + [1] ,@x) [1 0 1] [0] >= [1 0 0] [0] [0 1 0] @l + [1] [1 0 1] [0] = insert#2(@l,@keyX,@valX,@x) insert#2(::(@l1,@ls) = [0 0 0] [1 0 0] [0] ,@keyX [0 0 1] @l1 + [0 1 0] @ls + [1] ,@valX [0 0 0] [1 0 1] [1] ,@x) >= [0 0 0] [1 0 0] [0] [0 0 1] @l1 + [0 1 0] @ls + [1] [0 0 0] [1 0 1] [1] = insert#3(@l1,@keyX,@ls,@valX,@x) insert#2(nil(),@keyX,@valX,@x) = [1] [2] [1] >= [1] [2] [1] = ::(tuple#2(::(@valX,nil()) ,@keyX) ,nil()) insert#3(tuple#2(@vals1,@key1) = [1 0 0] [0 0 ,@keyX 0] [0] ,@ls [0 1 0] @ls + [0 0 ,@valX 1] @vals1 + [1] ,@x) [1 0 1] [0 0 0] [1] >= [1 0 0] [0 0 0] [0] [0 1 0] @ls + [0 0 1] @vals1 + [1] [1 0 1] [0 0 0] [1] = insert#4(#equal(@key1,@keyX) ,@key1 ,@ls ,@valX ,@vals1 ,@x) insert#4(#false() = [1 0 0] [0 0 ,@key1 0] [0] ,@ls [0 1 0] @ls + [0 0 ,@valX 1] @vals1 + [1] ,@vals1 [1 0 1] [0 0 ,@x) 0] [1] >= [1 0 0] [0 0 0] [0] [0 1 0] @ls + [0 0 1] @vals1 + [1] [1 0 1] [0 0 0] [1] = ::(tuple#2(@vals1,@key1) ,insert(@x,@ls)) insert#4(#true() = [1 0 0] [0 0 ,@key1 0] [0] ,@ls [0 1 0] @ls + [0 0 ,@valX 1] @vals1 + [1] ,@vals1 [1 0 1] [0 0 ,@x) 0] [1] >= [1 0 0] [0 0 0] [0] [0 1 0] @ls + [0 0 1] @vals1 + [1] [0 0 1] [0 0 0] [1] = ::(tuple#2(::(@valX,@vals1) ,@key1) ,@ls) quicksort(@l) = [0 0 0] [1] [0 1 1] @l + [0] [0 0 1] [0] >= [0 0 0] [1] [0 1 1] @l + [0] [0 0 1] [0] = quicksort#1(@l) quicksort#1(::(@z,@zs)) = [0 0 0] [0 0 0] [1] [0 0 1] @z + [0 1 1] @zs + [1] [0 0 0] [0 0 1] [1] >= [0 0 0] [0 0 0] [1] [0 0 1] @z + [0 1 1] @zs + [1] [0 0 0] [0 0 1] [1] = quicksort#2(splitqs(@z,@zs),@z) quicksort#1(nil()) = [1] [1] [0] >= [1] [1] [0] = nil() quicksort#2(tuple#2(@xs,@ys),@z) = [0 0 0] [0 0 0] [0 0 0] [1] [0 1 1] @xs + [0 1 1] @ys + [0 0 1] @z + [0] [0 0 1] [0 0 1] [0 0 0] [1] >= [0 0 0] [0 0 0] [0 0 0] [1] [0 1 1] @xs + [0 1 1] @ys + [0 0 1] @z + [0] [0 0 1] [0 0 1] [0 0 0] [1] = append(quicksort(@xs) ,::(@z,quicksort(@ys))) split(@l) = [0 0 0] [1] [0 0 1] @l + [1] [0 0 1] [0] >= [0 0 0] [1] [0 0 1] @l + [1] [0 0 1] [0] = split#1(@l) split#1(::(@x,@xs)) = [0 0 0] [1] [0 0 1] @xs + [2] [0 0 1] [1] >= [0 0 0] [1] [0 0 1] @xs + [2] [0 0 1] [1] = insert(@x,split(@xs)) split#1(nil()) = [1] [1] [0] >= [1] [1] [0] = nil() splitqs(@pivot,@l) = [0 0 1] [0 0 0] [0] [0 1 1] @l + [0 0 0] @pivot + [1] [0 1 1] [1 0 0] [1] >= [0 0 1] [0 0 0] [0] [0 1 1] @l + [0 0 0] @pivot + [1] [0 1 1] [1 0 0] [1] = splitqs#1(@l,@pivot) splitqs#1(::(@x,@xs),@pivot) = [0 0 0] [0 0 0] [0 0 1] [1] [0 0 0] @pivot + [0 0 1] @x + [0 1 1] @xs + [2] [1 0 0] [0 0 1] [0 1 1] [2] >= [0 0 0] [0 0 1] [1] [0 0 1] @x + [0 1 1] @xs + [2] [0 0 1] [0 1 1] [2] = splitqs#2(splitqs(@pivot,@xs) ,@pivot ,@x) splitqs#1(nil(),@pivot) = [0 0 0] [0] [0 0 0] @pivot + [2] [1 0 0] [2] >= [0] [2] [0] = tuple#2(nil(),nil()) splitqs#2(tuple#2(@ls,@rs) = [0 0 1] [0 0 1] [0 0 ,@pivot 0] [1] ,@x) [0 1 1] @ls + [0 1 1] @rs + [0 0 1] @x + [1] [0 1 1] [0 1 1] [0 0 1] [1] >= [0 0 1] [0 0 1] [0 0 0] [1] [0 1 1] @ls + [0 1 1] @rs + [0 0 1] @x + [1] [0 0 1] [0 1 0] [0 0 0] [1] = splitqs#3(#greater(@x,@pivot) ,@ls ,@rs ,@x) splitqs#3(#false(),@ls,@rs,@x) = [0 0 1] [0 0 1] [0 0 0] [1] [0 1 1] @ls + [0 1 1] @rs + [0 0 1] @x + [1] [0 0 1] [0 1 0] [0 0 0] [1] >= [0 0 1] [0 0 1] [0 0 0] [1] [0 1 1] @ls + [0 1 1] @rs + [0 0 1] @x + [1] [0 0 1] [0 0 0] [0 0 0] [1] = tuple#2(::(@x,@ls),@rs) splitqs#3(#true(),@ls,@rs,@x) = [0 0 1] [0 0 1] [0 0 0] [1] [0 1 1] @ls + [0 1 1] @rs + [0 0 1] @x + [1] [0 0 1] [0 1 0] [0 0 0] [1] >= [0 0 1] [0 0 1] [0 0 0] [1] [0 1 1] @ls + [0 1 1] @rs + [0 0 1] @x + [1] [0 0 1] [0 0 0] [0 0 0] [0] = tuple#2(@ls,::(@x,@rs)) *** 1.1.1.1.1.1.1.1.1.1.2.2.1.1 Progress [(O(1),O(1))] *** Considered Problem: Strict DP Rules: Strict TRS Rules: Weak DP Rules: append#(@l,@ys) -> c_3(append#1#(@l,@ys)) 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#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 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)) 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/3,c_17/1,c_18/1,c_19/0,c_20/2,c_21/1,c_22/2,c_23/0,c_24/1,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 basic terms: {#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#}/{#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} Applied Processor: EmptyProcessor Proof: The problem is already closed. The intended complexity is O(1). *** 1.1.1.1.1.1.1.2 Progress [(?,O(n^5))] *** Considered Problem: Strict DP Rules: 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)) Strict TRS Rules: Weak DP Rules: append#(@l,@ys) -> c_3(append#1#(@l,@ys)) append#1#(::(@x,@xs),@ys) -> c_4(append#(@xs,@ys)) Weak TRS 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)) 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 basic terms: {#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#}/{#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} Applied Processor: RemoveWeakSuffixes Proof: 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)) -->_2 splitqs#(@pivot,@l) -> c_25(splitqs#1#(@l,@pivot)):15 -->_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)) -->_1 append#(@l,@ys) -> c_3(append#1#(@l,@ys)):17 -->_3 quicksort#(@l) -> c_13(quicksort#1#(@l)):6 -->_2 quicksort#(@l) -> c_13(quicksort#1#(@l)):6 9:S:sortAll#(@l) -> c_17(sortAll#1#(@l)) -->_1 sortAll#1#(::(@x,@xs)) -> c_18(sortAll#2#(@x,@xs)):10 10: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)):11 11:S:sortAll#2#(tuple#2(@vals,@key),@xs) -> c_20(quicksort#(@vals),sortAll#(@xs)) -->_2 sortAll#(@l) -> c_17(sortAll#1#(@l)):9 -->_1 quicksort#(@l) -> c_13(quicksort#1#(@l)):6 12:S:split#(@l) -> c_21(split#1#(@l)) -->_1 split#1#(::(@x,@xs)) -> c_22(insert#(@x,split(@xs)),split#(@xs)):13 13:S:split#1#(::(@x,@xs)) -> c_22(insert#(@x,split(@xs)),split#(@xs)) -->_2 split#(@l) -> c_21(split#1#(@l)):12 -->_1 insert#(@x,@l) -> c_6(insert#1#(@x,@l,@x)):1 14:S:splitAndSort#(@l) -> c_24(sortAll#(split(@l)),split#(@l)) -->_2 split#(@l) -> c_21(split#1#(@l)):12 -->_1 sortAll#(@l) -> c_17(sortAll#1#(@l)):9 15:S:splitqs#(@pivot,@l) -> c_25(splitqs#1#(@l,@pivot)) -->_1 splitqs#1#(::(@x,@xs),@pivot) -> c_26(splitqs#(@pivot,@xs)):16 16:S:splitqs#1#(::(@x,@xs),@pivot) -> c_26(splitqs#(@pivot,@xs)) -->_1 splitqs#(@pivot,@l) -> c_25(splitqs#1#(@l,@pivot)):15 17:W:append#(@l,@ys) -> c_3(append#1#(@l,@ys)) -->_1 append#1#(::(@x,@xs),@ys) -> c_4(append#(@xs,@ys)):18 18:W:append#1#(::(@x,@xs),@ys) -> c_4(append#(@xs,@ys)) -->_1 append#(@l,@ys) -> c_3(append#1#(@l,@ys)):17 The following weak DPs constitute a sub-graph of the DG that is closed under successors. The DPs are removed. 17: append#(@l,@ys) -> c_3(append#1#(@l,@ys)) 18: append#1#(::(@x,@xs),@ys) -> c_4(append#(@xs,@ys)) *** 1.1.1.1.1.1.1.2.1 Progress [(?,O(n^5))] *** Considered Problem: Strict DP Rules: 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)) Strict TRS Rules: Weak DP Rules: Weak TRS 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)) 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 basic terms: {#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#}/{#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} Applied Processor: SimplifyRHS Proof: 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)) -->_2 splitqs#(@pivot,@l) -> c_25(splitqs#1#(@l,@pivot)):15 -->_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:S:sortAll#(@l) -> c_17(sortAll#1#(@l)) -->_1 sortAll#1#(::(@x,@xs)) -> c_18(sortAll#2#(@x,@xs)):10 10: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)):11 11:S:sortAll#2#(tuple#2(@vals,@key),@xs) -> c_20(quicksort#(@vals),sortAll#(@xs)) -->_2 sortAll#(@l) -> c_17(sortAll#1#(@l)):9 -->_1 quicksort#(@l) -> c_13(quicksort#1#(@l)):6 12:S:split#(@l) -> c_21(split#1#(@l)) -->_1 split#1#(::(@x,@xs)) -> c_22(insert#(@x,split(@xs)),split#(@xs)):13 13:S:split#1#(::(@x,@xs)) -> c_22(insert#(@x,split(@xs)),split#(@xs)) -->_2 split#(@l) -> c_21(split#1#(@l)):12 -->_1 insert#(@x,@l) -> c_6(insert#1#(@x,@l,@x)):1 14:S:splitAndSort#(@l) -> c_24(sortAll#(split(@l)),split#(@l)) -->_2 split#(@l) -> c_21(split#1#(@l)):12 -->_1 sortAll#(@l) -> c_17(sortAll#1#(@l)):9 15:S:splitqs#(@pivot,@l) -> c_25(splitqs#1#(@l,@pivot)) -->_1 splitqs#1#(::(@x,@xs),@pivot) -> c_26(splitqs#(@pivot,@xs)):16 16:S:splitqs#1#(::(@x,@xs),@pivot) -> c_26(splitqs#(@pivot,@xs)) -->_1 splitqs#(@pivot,@l) -> c_25(splitqs#1#(@l,@pivot)):15 Due to missing edges in the depndency graph, the right-hand sides of following rules could be simplified: quicksort#2#(tuple#2(@xs,@ys),@z) -> c_16(quicksort#(@xs),quicksort#(@ys)) *** 1.1.1.1.1.1.1.2.1.1 Progress [(?,O(n^5))] *** Considered Problem: Strict DP Rules: 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(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)) Strict TRS Rules: Weak DP Rules: Weak TRS 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)) 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/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 basic terms: {#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#}/{#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} Applied Processor: UsableRules Proof: 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),splitqs#(@z,@zs)) quicksort#2#(tuple#2(@xs,@ys),@z) -> c_16(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)) *** 1.1.1.1.1.1.1.2.1.1.1 Progress [(?,O(n^5))] *** Considered Problem: Strict DP Rules: 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(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)) Strict TRS Rules: Weak DP Rules: Weak TRS 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)) 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/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 basic terms: {#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#}/{#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} Applied Processor: Decompose {onSelection = all cycle independent sub-graph, withBound = RelativeAdd} Proof: We analyse the complexity of following sub-problems (R) and (S). Problem (S) is obtained from the input problem by shifting strict rules from (R) into the weak component. Problem (R) Strict DP Rules: 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)) Strict TRS Rules: Weak DP Rules: 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(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 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)) 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/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 basic terms: {#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#}/{#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} Problem (S) Strict DP Rules: 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(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)) Strict TRS Rules: Weak DP Rules: 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)) Weak TRS 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)) 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/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 basic terms: {#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#}/{#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} *** 1.1.1.1.1.1.1.2.1.1.1.1 Progress [(?,O(n^2))] *** Considered Problem: Strict DP Rules: 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)) Strict TRS Rules: Weak DP Rules: 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(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 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)) 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/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 basic terms: {#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#}/{#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} Applied Processor: RemoveWeakSuffixes Proof: 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:W: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:W: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(quicksort#(@xs),quicksort#(@ys)):8 -->_2 splitqs#(@pivot,@l) -> c_25(splitqs#1#(@l,@pivot)):15 8:W:quicksort#2#(tuple#2(@xs,@ys),@z) -> c_16(quicksort#(@xs),quicksort#(@ys)) -->_2 quicksort#(@l) -> c_13(quicksort#1#(@l)):6 -->_1 quicksort#(@l) -> c_13(quicksort#1#(@l)):6 9:W:sortAll#(@l) -> c_17(sortAll#1#(@l)) -->_1 sortAll#1#(::(@x,@xs)) -> c_18(sortAll#2#(@x,@xs)):10 10:W:sortAll#1#(::(@x,@xs)) -> c_18(sortAll#2#(@x,@xs)) -->_1 sortAll#2#(tuple#2(@vals,@key),@xs) -> c_20(quicksort#(@vals),sortAll#(@xs)):11 11:W:sortAll#2#(tuple#2(@vals,@key),@xs) -> c_20(quicksort#(@vals),sortAll#(@xs)) -->_1 quicksort#(@l) -> c_13(quicksort#1#(@l)):6 -->_2 sortAll#(@l) -> c_17(sortAll#1#(@l)):9 12:W:split#(@l) -> c_21(split#1#(@l)) -->_1 split#1#(::(@x,@xs)) -> c_22(insert#(@x,split(@xs)),split#(@xs)):13 13:W:split#1#(::(@x,@xs)) -> c_22(insert#(@x,split(@xs)),split#(@xs)) -->_2 split#(@l) -> c_21(split#1#(@l)):12 -->_1 insert#(@x,@l) -> c_6(insert#1#(@x,@l,@x)):1 14:W:splitAndSort#(@l) -> c_24(sortAll#(split(@l)),split#(@l)) -->_2 split#(@l) -> c_21(split#1#(@l)):12 -->_1 sortAll#(@l) -> c_17(sortAll#1#(@l)):9 15:W:splitqs#(@pivot,@l) -> c_25(splitqs#1#(@l,@pivot)) -->_1 splitqs#1#(::(@x,@xs),@pivot) -> c_26(splitqs#(@pivot,@xs)):16 16:W:splitqs#1#(::(@x,@xs),@pivot) -> c_26(splitqs#(@pivot,@xs)) -->_1 splitqs#(@pivot,@l) -> c_25(splitqs#1#(@l,@pivot)):15 The following weak DPs constitute a sub-graph of the DG that is closed under successors. The DPs are removed. 9: sortAll#(@l) -> c_17(sortAll#1#(@l)) 11: sortAll#2#(tuple#2(@vals,@key) ,@xs) -> c_20(quicksort#(@vals) ,sortAll#(@xs)) 10: sortAll#1#(::(@x,@xs)) -> c_18(sortAll#2#(@x,@xs)) 6: quicksort#(@l) -> c_13(quicksort#1#(@l)) 8: quicksort#2#(tuple#2(@xs,@ys) ,@z) -> c_16(quicksort#(@xs) ,quicksort#(@ys)) 7: quicksort#1#(::(@z,@zs)) -> c_14(quicksort#2#(splitqs(@z ,@zs) ,@z) ,splitqs#(@z,@zs)) 15: splitqs#(@pivot,@l) -> c_25(splitqs#1#(@l,@pivot)) 16: splitqs#1#(::(@x,@xs),@pivot) -> c_26(splitqs#(@pivot,@xs)) *** 1.1.1.1.1.1.1.2.1.1.1.1.1 Progress [(?,O(n^2))] *** Considered Problem: Strict DP Rules: 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)) Strict TRS Rules: Weak DP Rules: 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 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)) 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/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 basic terms: {#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#}/{#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} Applied Processor: SimplifyRHS Proof: 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 12:W:split#(@l) -> c_21(split#1#(@l)) -->_1 split#1#(::(@x,@xs)) -> c_22(insert#(@x,split(@xs)),split#(@xs)):13 13:W:split#1#(::(@x,@xs)) -> c_22(insert#(@x,split(@xs)),split#(@xs)) -->_2 split#(@l) -> c_21(split#1#(@l)):12 -->_1 insert#(@x,@l) -> c_6(insert#1#(@x,@l,@x)):1 14:W:splitAndSort#(@l) -> c_24(sortAll#(split(@l)),split#(@l)) -->_2 split#(@l) -> c_21(split#1#(@l)):12 Due to missing edges in the depndency graph, the right-hand sides of following rules could be simplified: splitAndSort#(@l) -> c_24(split#(@l)) *** 1.1.1.1.1.1.1.2.1.1.1.1.1.1 Progress [(?,O(n^2))] *** Considered Problem: Strict DP Rules: 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)) Strict TRS Rules: Weak DP Rules: split#(@l) -> c_21(split#1#(@l)) split#1#(::(@x,@xs)) -> c_22(insert#(@x,split(@xs)),split#(@xs)) splitAndSort#(@l) -> c_24(split#(@l)) Weak TRS 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)) 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/2,c_17/1,c_18/1,c_19/0,c_20/2,c_21/1,c_22/2,c_23/0,c_24/1,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 basic terms: {#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#}/{#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} Applied Processor: UsableRules Proof: 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() 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)) split#(@l) -> c_21(split#1#(@l)) split#1#(::(@x,@xs)) -> c_22(insert#(@x,split(@xs)),split#(@xs)) splitAndSort#(@l) -> c_24(split#(@l)) *** 1.1.1.1.1.1.1.2.1.1.1.1.1.1.1 Progress [(?,O(n^2))] *** Considered Problem: Strict DP Rules: 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)) Strict TRS Rules: Weak DP Rules: split#(@l) -> c_21(split#1#(@l)) split#1#(::(@x,@xs)) -> c_22(insert#(@x,split(@xs)),split#(@xs)) splitAndSort#(@l) -> c_24(split#(@l)) Weak TRS 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() 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/2,c_17/1,c_18/1,c_19/0,c_20/2,c_21/1,c_22/2,c_23/0,c_24/1,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 basic terms: {#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#}/{#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} Applied Processor: PredecessorEstimationCP {onSelectionCP = any intersect of rules of CDG leaf and strict-rules, withComplexityPair = NaturalMI {miDimension = 2, miDegree = 2, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Nothing, greedy = NoGreedy}} Proof: We first use the processor NaturalMI {miDimension = 2, miDegree = 2, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Nothing, greedy = NoGreedy} to orient following rules strictly: 3: insert#2#(::(@l1,@ls) ,@keyX ,@valX ,@x) -> c_8(insert#3#(@l1 ,@keyX ,@ls ,@valX ,@x)) Consider the set of all dependency pairs 1: insert#(@x,@l) -> c_6(insert#1#(@x,@l,@x)) 2: insert#1#(tuple#2(@valX,@keyX) ,@l ,@x) -> c_7(insert#2#(@l ,@keyX ,@valX ,@x)) 3: insert#2#(::(@l1,@ls) ,@keyX ,@valX ,@x) -> c_8(insert#3#(@l1 ,@keyX ,@ls ,@valX ,@x)) 4: insert#3#(tuple#2(@vals1,@key1) ,@keyX ,@ls ,@valX ,@x) -> c_10(insert#4#(#equal(@key1 ,@keyX) ,@key1 ,@ls ,@valX ,@vals1 ,@x)) 5: insert#4#(#false() ,@key1 ,@ls ,@valX ,@vals1 ,@x) -> c_11(insert#(@x,@ls)) 6: split#(@l) -> c_21(split#1#(@l)) 7: split#1#(::(@x,@xs)) -> c_22(insert#(@x,split(@xs)) ,split#(@xs)) 8: splitAndSort#(@l) -> c_24(split#(@l)) Processor NaturalMI {miDimension = 2, miDegree = 2, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Nothing, greedy = NoGreedy}induces the complexity certificateTIME (?,O(n^2)) SPACE(?,?)on application of the dependency pairs {3} These cover all (indirect) predecessors of dependency pairs {3,4,5,8} their number of applications is equally bounded. The dependency pairs are shifted into the weak component. *** 1.1.1.1.1.1.1.2.1.1.1.1.1.1.1.1 Progress [(?,O(n^2))] *** Considered Problem: Strict DP Rules: 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)) Strict TRS Rules: Weak DP Rules: split#(@l) -> c_21(split#1#(@l)) split#1#(::(@x,@xs)) -> c_22(insert#(@x,split(@xs)),split#(@xs)) splitAndSort#(@l) -> c_24(split#(@l)) Weak TRS 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() 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/2,c_17/1,c_18/1,c_19/0,c_20/2,c_21/1,c_22/2,c_23/0,c_24/1,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 basic terms: {#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#}/{#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} Applied Processor: NaturalMI {miDimension = 2, miDegree = 2, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Just first alternative for predecessorEstimation any intersect of rules of CDG leaf and strict-rules, greedy = NoGreedy} Proof: We apply a matrix interpretation of kind constructor based matrix interpretation: The following argument positions are considered usable: uargs(c_6) = {1}, uargs(c_7) = {1}, uargs(c_8) = {1}, uargs(c_10) = {1}, uargs(c_11) = {1}, uargs(c_21) = {1}, uargs(c_22) = {1,2}, uargs(c_24) = {1} Following symbols are considered usable: {insert,insert#1,insert#2,insert#3,insert#4,split,split#1,#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#} TcT has computed the following interpretation: p(#0) = [0] [2] p(#EQ) = [0] [0] p(#GT) = [0] [0] p(#LT) = [2] [0] p(#and) = [0] [3] p(#ckgt) = [0] [0] p(#compare) = [0 0] x1 + [1] [0 1] [2] p(#eq) = [0] [0] p(#equal) = [0] [0] p(#false) = [0] [0] p(#greater) = [1 0] x1 + [0 0] x2 + [1] [1 0] [2 0] [0] p(#neg) = [1 0] x1 + [0] [0 1] [0] p(#pos) = [0 0] x1 + [0] [0 1] [0] p(#s) = [0] [2] p(#true) = [0] [0] p(::) = [1 1] x2 + [0] [0 1] [1] p(append) = [0 0] x1 + [0] [0 2] [0] p(append#1) = [2 2] x1 + [0] [1 0] [0] p(insert) = [1 2] x2 + [0] [0 1] [1] p(insert#1) = [1 2] x2 + [0] [0 1] [1] p(insert#2) = [1 2] x1 + [0] [0 1] [1] p(insert#3) = [1 3] x3 + [2] [0 1] [2] p(insert#4) = [1 3] x3 + [2] [0 1] [2] p(nil) = [0] [0] p(quicksort) = [1] [0] p(quicksort#1) = [0] [0] p(quicksort#2) = [0 0] x1 + [2 0] x2 + [0] [2 1] [0 0] [0] p(sortAll) = [0] [2] p(sortAll#1) = [0] [1] p(sortAll#2) = [0 1] x1 + [0] [0 2] [0] p(split) = [2 0] x1 + [0] [0 1] [0] p(split#1) = [2 0] x1 + [0] [0 1] [0] p(splitAndSort) = [2] [1] p(splitqs) = [0] [2] p(splitqs#1) = [2 0] x1 + [0] [0 0] [0] p(splitqs#2) = [0 0] x1 + [0 0] x2 + [0 0] x3 + [0] [2 0] [0 1] [1 1] [0] p(splitqs#3) = [1 0] x1 + [0 0] x2 + [0 0] x3 + [0 1] x4 + [1] [0 1] [2 0] [2 0] [0 0] [1] p(tuple#2) = [0] [0] p(#and#) = [0 0] x1 + [0] [0 2] [2] p(#ckgt#) = [2] [0] p(#compare#) = [0 0] x1 + [2] [0 1] [0] p(#eq#) = [0] [2] p(#equal#) = [1] [0] p(#greater#) = [0 1] x1 + [2] [0 1] [2] p(append#) = [2 1] x1 + [0] [0 1] [0] p(append#1#) = [0 1] x1 + [1 0] x2 + [0] [0 1] [0 2] [2] p(insert#) = [0 2] x2 + [0] [0 2] [0] p(insert#1#) = [0 0] x1 + [0 2] x2 + [0] [0 2] [0 2] [2] p(insert#2#) = [0 2] x1 + [0 0] x3 + [0] [0 0] [0 2] [2] p(insert#3#) = [0 0] x2 + [0 2] x3 + [0 0] x4 + [0] [0 1] [0 0] [2 2] [1] p(insert#4#) = [0 2] x3 + [0 0] x4 + [0] [0 0] [2 2] [1] p(quicksort#) = [0] [0] p(quicksort#1#) = [1 2] x1 + [1] [0 2] [0] p(quicksort#2#) = [0 0] x2 + [1] [0 2] [0] p(sortAll#) = [2] [0] p(sortAll#1#) = [2] [0] p(sortAll#2#) = [0 1] x2 + [2] [2 0] [0] p(split#) = [2 0] x1 + [0] [0 2] [0] p(split#1#) = [2 0] x1 + [0] [3 1] [2] p(splitAndSort#) = [2 2] x1 + [2] [2 2] [2] p(splitqs#) = [0] [2] p(splitqs#1#) = [2] [0] p(splitqs#2#) = [1 2] x1 + [0 0] x3 + [1] [0 1] [2 1] [1] p(splitqs#3#) = [1 0] x1 + [1 0] x2 + [0 0] x3 + [0 0] x4 + [2] [0 0] [0 1] [1 0] [0 1] [1] p(c_1) = [0 0] x1 + [2] [0 1] [0] p(c_2) = [2 2] x2 + [0] [0 0] [1] p(c_3) = [2] [2] p(c_4) = [0 1] x1 + [1] [0 2] [2] p(c_5) = [0] [0] p(c_6) = [1 0] x1 + [0] [0 0] [0] p(c_7) = [1 0] x1 + [0] [1 0] [0] p(c_8) = [1 0] x1 + [1] [0 0] [2] p(c_9) = [2] [2] p(c_10) = [1 0] x1 + [0] [0 1] [0] p(c_11) = [1 0] x1 + [0] [0 0] [0] p(c_12) = [0] [0] p(c_13) = [0 0] x1 + [0] [0 1] [1] p(c_14) = [0 2] x1 + [0] [1 0] [2] p(c_15) = [0] [0] p(c_16) = [2] [1] p(c_17) = [0 1] x1 + [1] [2 0] [0] p(c_18) = [0 1] x1 + [1] [2 0] [0] p(c_19) = [0] [1] p(c_20) = [0 0] x1 + [0] [2 2] [1] p(c_21) = [1 0] x1 + [0] [0 0] [0] p(c_22) = [1 0] x1 + [1 0] x2 + [0] [1 1] [1 0] [3] p(c_23) = [0] [0] p(c_24) = [1 1] x1 + [2] [0 1] [0] p(c_25) = [2 0] x1 + [1] [2 0] [0] p(c_26) = [0] [0] p(c_27) = [1] [0] p(c_28) = [0 0] x1 + [2 1] x2 + [2] [2 0] [0 2] [1] p(c_29) = [0] [2] p(c_30) = [0] [1] p(c_31) = [0] [0] p(c_32) = [2] [2] p(c_33) = [1] [0] p(c_34) = [0] [0] p(c_35) = [0] [0] p(c_36) = [0] [1] p(c_37) = [1] [0] p(c_38) = [2] [1] p(c_39) = [1] [2] p(c_40) = [0] [1] p(c_41) = [2] [1] p(c_42) = [0] [1] p(c_43) = [0 0] x1 + [0] [0 1] [0] p(c_44) = [0] [1] p(c_45) = [0] [1] p(c_46) = [0] [1] p(c_47) = [0] [0] p(c_48) = [0] [0] p(c_49) = [0] [0] p(c_50) = [0] [0] p(c_51) = [0] [0] p(c_52) = [0] [0] p(c_53) = [0] [2] p(c_54) = [1] [0] p(c_55) = [0 2] x1 + [0] [1 1] [1] p(c_56) = [2] [1] p(c_57) = [0] [0] p(c_58) = [1] [0] p(c_59) = [0 0] x1 + [1] [1 2] [0] p(c_60) = [1] [0] p(c_61) = [0] [0] p(c_62) = [0 1] x1 + [0 0] x2 + [0 0] x3 + [0] [1 0] [0 1] [0 1] [1] p(c_63) = [0] [0] p(c_64) = [1] [1] p(c_65) = [0] [0] p(c_66) = [1] [0] p(c_67) = [0] [1] p(c_68) = [0] [0] p(c_69) = [0] [0] p(c_70) = [0 0] x2 + [0] [1 1] [0] Following rules are strictly oriented: insert#2#(::(@l1,@ls) = [0 2] @ls + [0 0] @valX + [2] ,@keyX [0 0] [0 2] [2] ,@valX ,@x) > [0 2] @ls + [1] [0 0] [2] = c_8(insert#3#(@l1 ,@keyX ,@ls ,@valX ,@x)) Following rules are (at-least) weakly oriented: insert#(@x,@l) = [0 2] @l + [0] [0 2] [0] >= [0 2] @l + [0] [0 0] [0] = c_6(insert#1#(@x,@l,@x)) insert#1#(tuple#2(@valX,@keyX) = [0 2] @l + [0] ,@l [0 2] [2] ,@x) >= [0 2] @l + [0] [0 2] [0] = c_7(insert#2#(@l ,@keyX ,@valX ,@x)) insert#3#(tuple#2(@vals1,@key1) = [0 0] @keyX + [0 2] @ls + [0 ,@keyX 0] @valX + [0] ,@ls [0 1] [0 0] [2 ,@valX 2] [1] ,@x) >= [0 2] @ls + [0 0] @valX + [0] [0 0] [2 2] [1] = c_10(insert#4#(#equal(@key1 ,@keyX) ,@key1 ,@ls ,@valX ,@vals1 ,@x)) insert#4#(#false() = [0 2] @ls + [0 0] @valX + [0] ,@key1 [0 0] [2 2] [1] ,@ls ,@valX ,@vals1 ,@x) >= [0 2] @ls + [0] [0 0] [0] = c_11(insert#(@x,@ls)) split#(@l) = [2 0] @l + [0] [0 2] [0] >= [2 0] @l + [0] [0 0] [0] = c_21(split#1#(@l)) split#1#(::(@x,@xs)) = [2 2] @xs + [0] [3 4] [3] >= [2 2] @xs + [0] [2 4] [3] = c_22(insert#(@x,split(@xs)) ,split#(@xs)) splitAndSort#(@l) = [2 2] @l + [2] [2 2] [2] >= [2 2] @l + [2] [0 2] [0] = c_24(split#(@l)) insert(@x,@l) = [1 2] @l + [0] [0 1] [1] >= [1 2] @l + [0] [0 1] [1] = insert#1(@x,@l,@x) insert#1(tuple#2(@valX,@keyX) = [1 2] @l + [0] ,@l [0 1] [1] ,@x) >= [1 2] @l + [0] [0 1] [1] = insert#2(@l,@keyX,@valX,@x) insert#2(::(@l1,@ls) = [1 3] @ls + [2] ,@keyX [0 1] [2] ,@valX ,@x) >= [1 3] @ls + [2] [0 1] [2] = insert#3(@l1,@keyX,@ls,@valX,@x) insert#2(nil(),@keyX,@valX,@x) = [0] [1] >= [0] [1] = ::(tuple#2(::(@valX,nil()) ,@keyX) ,nil()) insert#3(tuple#2(@vals1,@key1) = [1 3] @ls + [2] ,@keyX [0 1] [2] ,@ls ,@valX ,@x) >= [1 3] @ls + [2] [0 1] [2] = insert#4(#equal(@key1,@keyX) ,@key1 ,@ls ,@valX ,@vals1 ,@x) insert#4(#false() = [1 3] @ls + [2] ,@key1 [0 1] [2] ,@ls ,@valX ,@vals1 ,@x) >= [1 3] @ls + [1] [0 1] [2] = ::(tuple#2(@vals1,@key1) ,insert(@x,@ls)) insert#4(#true() = [1 3] @ls + [2] ,@key1 [0 1] [2] ,@ls ,@valX ,@vals1 ,@x) >= [1 1] @ls + [0] [0 1] [1] = ::(tuple#2(::(@valX,@vals1) ,@key1) ,@ls) split(@l) = [2 0] @l + [0] [0 1] [0] >= [2 0] @l + [0] [0 1] [0] = split#1(@l) split#1(::(@x,@xs)) = [2 2] @xs + [0] [0 1] [1] >= [2 2] @xs + [0] [0 1] [1] = insert(@x,split(@xs)) split#1(nil()) = [0] [0] >= [0] [0] = nil() *** 1.1.1.1.1.1.1.2.1.1.1.1.1.1.1.1.1 Progress [(?,O(1))] *** Considered Problem: Strict DP Rules: 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#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)) Strict TRS Rules: Weak DP Rules: insert#2#(::(@l1,@ls),@keyX,@valX,@x) -> c_8(insert#3#(@l1,@keyX,@ls,@valX,@x)) split#(@l) -> c_21(split#1#(@l)) split#1#(::(@x,@xs)) -> c_22(insert#(@x,split(@xs)),split#(@xs)) splitAndSort#(@l) -> c_24(split#(@l)) Weak TRS 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() 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/2,c_17/1,c_18/1,c_19/0,c_20/2,c_21/1,c_22/2,c_23/0,c_24/1,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 basic terms: {#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#}/{#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} Applied Processor: Assumption Proof: () *** 1.1.1.1.1.1.1.2.1.1.1.1.1.1.1.2 Progress [(?,O(n^2))] *** Considered Problem: Strict DP Rules: 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)) Strict TRS Rules: Weak DP Rules: 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)) split#(@l) -> c_21(split#1#(@l)) split#1#(::(@x,@xs)) -> c_22(insert#(@x,split(@xs)),split#(@xs)) splitAndSort#(@l) -> c_24(split#(@l)) Weak TRS 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() 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/2,c_17/1,c_18/1,c_19/0,c_20/2,c_21/1,c_22/2,c_23/0,c_24/1,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 basic terms: {#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#}/{#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} Applied Processor: PredecessorEstimationCP {onSelectionCP = any intersect of rules of CDG leaf and strict-rules, withComplexityPair = NaturalMI {miDimension = 2, miDegree = 2, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Nothing, greedy = NoGreedy}} Proof: We first use the processor NaturalMI {miDimension = 2, miDegree = 2, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Nothing, greedy = NoGreedy} to orient following rules strictly: 1: insert#(@x,@l) -> c_6(insert#1#(@x,@l,@x)) Consider the set of all dependency pairs 1: insert#(@x,@l) -> c_6(insert#1#(@x,@l,@x)) 2: insert#1#(tuple#2(@valX,@keyX) ,@l ,@x) -> c_7(insert#2#(@l ,@keyX ,@valX ,@x)) 3: insert#2#(::(@l1,@ls) ,@keyX ,@valX ,@x) -> c_8(insert#3#(@l1 ,@keyX ,@ls ,@valX ,@x)) 4: insert#3#(tuple#2(@vals1,@key1) ,@keyX ,@ls ,@valX ,@x) -> c_10(insert#4#(#equal(@key1 ,@keyX) ,@key1 ,@ls ,@valX ,@vals1 ,@x)) 5: insert#4#(#false() ,@key1 ,@ls ,@valX ,@vals1 ,@x) -> c_11(insert#(@x,@ls)) 6: split#(@l) -> c_21(split#1#(@l)) 7: split#1#(::(@x,@xs)) -> c_22(insert#(@x,split(@xs)) ,split#(@xs)) 8: splitAndSort#(@l) -> c_24(split#(@l)) Processor NaturalMI {miDimension = 2, miDegree = 2, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Nothing, greedy = NoGreedy}induces the complexity certificateTIME (?,O(n^2)) SPACE(?,?)on application of the dependency pairs {1} These cover all (indirect) predecessors of dependency pairs {1,2,3,4,5,8} their number of applications is equally bounded. The dependency pairs are shifted into the weak component. *** 1.1.1.1.1.1.1.2.1.1.1.1.1.1.1.2.1 Progress [(?,O(n^2))] *** Considered Problem: Strict DP Rules: 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)) Strict TRS Rules: Weak DP Rules: 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)) split#(@l) -> c_21(split#1#(@l)) split#1#(::(@x,@xs)) -> c_22(insert#(@x,split(@xs)),split#(@xs)) splitAndSort#(@l) -> c_24(split#(@l)) Weak TRS 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() 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/2,c_17/1,c_18/1,c_19/0,c_20/2,c_21/1,c_22/2,c_23/0,c_24/1,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 basic terms: {#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#}/{#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} Applied Processor: NaturalMI {miDimension = 2, miDegree = 2, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Just first alternative for predecessorEstimation any intersect of rules of CDG leaf and strict-rules, greedy = NoGreedy} Proof: We apply a matrix interpretation of kind constructor based matrix interpretation: The following argument positions are considered usable: uargs(c_6) = {1}, uargs(c_7) = {1}, uargs(c_8) = {1}, uargs(c_10) = {1}, uargs(c_11) = {1}, uargs(c_21) = {1}, uargs(c_22) = {1,2}, uargs(c_24) = {1} Following symbols are considered usable: {insert,insert#1,insert#2,insert#3,insert#4,split,split#1,#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#} TcT has computed the following interpretation: p(#0) = [0] [1] p(#EQ) = [1] [0] p(#GT) = [0] [0] p(#LT) = [0] [2] p(#and) = [1 0] x2 + [1] [0 2] [2] p(#ckgt) = [0] [0] p(#compare) = [2 2] x1 + [0] [2 0] [0] p(#eq) = [0] [0] p(#equal) = [0] [0] p(#false) = [0] [0] p(#greater) = [2] [0] p(#neg) = [1] [2] p(#pos) = [0] [0] p(#s) = [2] [0] p(#true) = [1] [0] p(::) = [1 1] x2 + [0] [0 1] [1] p(append) = [0] [0] p(append#1) = [2 0] x2 + [0] [1 0] [0] p(insert) = [1 1] x2 + [0] [0 1] [1] p(insert#1) = [1 1] x2 + [0] [0 1] [1] p(insert#2) = [1 1] x1 + [0] [0 1] [1] p(insert#3) = [1 2] x3 + [1] [0 1] [2] p(insert#4) = [1 2] x3 + [1] [0 1] [2] p(nil) = [0] [0] p(quicksort) = [0 0] x1 + [0] [0 2] [0] p(quicksort#1) = [0] [2] p(quicksort#2) = [0] [0] p(sortAll) = [0] [0] p(sortAll#1) = [2] [0] p(sortAll#2) = [0] [2] p(split) = [1 0] x1 + [0] [0 1] [0] p(split#1) = [1 0] x1 + [0] [0 1] [0] p(splitAndSort) = [2] [0] p(splitqs) = [1] [1] p(splitqs#1) = [0 0] x1 + [0 0] x2 + [1] [0 1] [2 2] [0] p(splitqs#2) = [1] [0] p(splitqs#3) = [0 0] x2 + [2 2] x4 + [0] [1 1] [0 2] [0] p(tuple#2) = [0] [0] p(#and#) = [0 0] x1 + [1] [0 2] [0] p(#ckgt#) = [0] [0] p(#compare#) = [0 2] x2 + [0] [1 2] [2] p(#eq#) = [1 0] x1 + [1 2] x2 + [0] [1 0] [0 1] [0] p(#equal#) = [0 0] x2 + [0] [2 0] [0] p(#greater#) = [0 2] x1 + [0 0] x2 + [0] [0 0] [2 2] [2] p(append#) = [0 0] x2 + [2] [1 1] [1] p(append#1#) = [0 0] x2 + [2] [2 1] [0] p(insert#) = [0 2] x2 + [1] [0 0] [2] p(insert#1#) = [0 2] x2 + [0 0] x3 + [0] [0 1] [0 3] [0] p(insert#2#) = [0 2] x1 + [0 0] x3 + [0] [0 3] [3 2] [2] p(insert#3#) = [0 2] x3 + [0 0] x4 + [2] [0 1] [1 0] [1] p(insert#4#) = [0 2] x3 + [0 0] x4 + [2] [0 0] [1 0] [0] p(quicksort#) = [1] [1] p(quicksort#1#) = [0 0] x1 + [1] [1 0] [1] p(quicksort#2#) = [0 1] x1 + [0 0] x2 + [1] [2 2] [1 0] [0] p(sortAll#) = [1] [2] p(sortAll#1#) = [0 0] x1 + [1] [0 2] [2] p(sortAll#2#) = [2 1] x2 + [0] [1 1] [0] p(split#) = [2 1] x1 + [0] [0 1] [0] p(split#1#) = [2 1] x1 + [0] [3 3] [3] p(splitAndSort#) = [2 2] x1 + [2] [2 2] [3] p(splitqs#) = [0 0] x1 + [2 2] x2 + [1] [0 1] [1 0] [0] p(splitqs#1#) = [0 2] x1 + [2 0] x2 + [0] [0 0] [0 0] [0] p(splitqs#2#) = [0 0] x1 + [2] [0 2] [1] p(splitqs#3#) = [1 0] x4 + [0] [0 0] [0] p(c_1) = [1 2] x1 + [0] [1 1] [2] p(c_2) = [0 0] x1 + [0 0] x2 + [1] [0 1] [0 1] [0] p(c_3) = [2 0] x1 + [0] [0 2] [0] p(c_4) = [0] [0] p(c_5) = [2] [0] p(c_6) = [1 0] x1 + [0] [0 0] [2] p(c_7) = [1 0] x1 + [0] [0 0] [0] p(c_8) = [1 0] x1 + [0] [0 3] [1] p(c_9) = [0] [0] p(c_10) = [1 0] x1 + [0] [0 1] [1] p(c_11) = [1 0] x1 + [0] [0 0] [0] p(c_12) = [1] [0] p(c_13) = [1] [0] p(c_14) = [2] [0] p(c_15) = [0] [0] p(c_16) = [0] [0] p(c_17) = [1 0] x1 + [0] [0 0] [2] p(c_18) = [0] [2] p(c_19) = [0] [0] p(c_20) = [1 2] x1 + [0 2] x2 + [0] [1 0] [0 2] [0] p(c_21) = [1 0] x1 + [0] [0 0] [0] p(c_22) = [1 0] x1 + [1 0] x2 + [0] [2 2] [1 1] [0] p(c_23) = [0] [2] p(c_24) = [1 0] x1 + [2] [0 2] [2] p(c_25) = [1] [0] p(c_26) = [0 0] x1 + [1] [0 2] [0] p(c_27) = [0] [0] p(c_28) = [0 0] x2 + [0] [0 2] [2] p(c_29) = [0] [1] p(c_30) = [1] [0] p(c_31) = [2] [0] p(c_32) = [0] [0] p(c_33) = [0] [0] p(c_34) = [0] [0] p(c_35) = [0] [2] p(c_36) = [0] [0] p(c_37) = [0] [0] p(c_38) = [1] [1] p(c_39) = [2] [0] p(c_40) = [0] [0] p(c_41) = [0] [0] p(c_42) = [1] [0] p(c_43) = [0 1] x1 + [0] [0 1] [0] p(c_44) = [0] [0] p(c_45) = [2] [0] p(c_46) = [0] [0] p(c_47) = [2] [1] p(c_48) = [1] [1] p(c_49) = [1] [2] p(c_50) = [0] [1] p(c_51) = [2] [1] p(c_52) = [2] [0] p(c_53) = [0] [0] p(c_54) = [0] [0] p(c_55) = [0 0] x1 + [0] [0 2] [0] p(c_56) = [2] [0] p(c_57) = [0] [0] p(c_58) = [0] [0] p(c_59) = [0 2] x1 + [0] [0 2] [0] p(c_60) = [0] [1] p(c_61) = [2] [0] p(c_62) = [0 0] x1 + [2] [2 1] [0] p(c_63) = [2] [2] p(c_64) = [1] [2] p(c_65) = [0] [0] p(c_66) = [0] [0] p(c_67) = [0] [0] p(c_68) = [0] [0] p(c_69) = [0] [0] p(c_70) = [1 0] x1 + [2 1] x2 + [2] [1 0] [0 1] [2] Following rules are strictly oriented: insert#(@x,@l) = [0 2] @l + [1] [0 0] [2] > [0 2] @l + [0] [0 0] [2] = c_6(insert#1#(@x,@l,@x)) Following rules are (at-least) weakly oriented: insert#1#(tuple#2(@valX,@keyX) = [0 2] @l + [0 0] @x + [0] ,@l [0 1] [0 3] [0] ,@x) >= [0 2] @l + [0] [0 0] [0] = c_7(insert#2#(@l ,@keyX ,@valX ,@x)) insert#2#(::(@l1,@ls) = [0 2] @ls + [0 0] @valX + [2] ,@keyX [0 3] [3 2] [5] ,@valX ,@x) >= [0 2] @ls + [0 0] @valX + [2] [0 3] [3 0] [4] = c_8(insert#3#(@l1 ,@keyX ,@ls ,@valX ,@x)) insert#3#(tuple#2(@vals1,@key1) = [0 2] @ls + [0 0] @valX + [2] ,@keyX [0 1] [1 0] [1] ,@ls ,@valX ,@x) >= [0 2] @ls + [0 0] @valX + [2] [0 0] [1 0] [1] = c_10(insert#4#(#equal(@key1 ,@keyX) ,@key1 ,@ls ,@valX ,@vals1 ,@x)) insert#4#(#false() = [0 2] @ls + [0 0] @valX + [2] ,@key1 [0 0] [1 0] [0] ,@ls ,@valX ,@vals1 ,@x) >= [0 2] @ls + [1] [0 0] [0] = c_11(insert#(@x,@ls)) split#(@l) = [2 1] @l + [0] [0 1] [0] >= [2 1] @l + [0] [0 0] [0] = c_21(split#1#(@l)) split#1#(::(@x,@xs)) = [2 3] @xs + [1] [3 6] [6] >= [2 3] @xs + [1] [2 6] [6] = c_22(insert#(@x,split(@xs)) ,split#(@xs)) splitAndSort#(@l) = [2 2] @l + [2] [2 2] [3] >= [2 1] @l + [2] [0 2] [2] = c_24(split#(@l)) insert(@x,@l) = [1 1] @l + [0] [0 1] [1] >= [1 1] @l + [0] [0 1] [1] = insert#1(@x,@l,@x) insert#1(tuple#2(@valX,@keyX) = [1 1] @l + [0] ,@l [0 1] [1] ,@x) >= [1 1] @l + [0] [0 1] [1] = insert#2(@l,@keyX,@valX,@x) insert#2(::(@l1,@ls) = [1 2] @ls + [1] ,@keyX [0 1] [2] ,@valX ,@x) >= [1 2] @ls + [1] [0 1] [2] = insert#3(@l1,@keyX,@ls,@valX,@x) insert#2(nil(),@keyX,@valX,@x) = [0] [1] >= [0] [1] = ::(tuple#2(::(@valX,nil()) ,@keyX) ,nil()) insert#3(tuple#2(@vals1,@key1) = [1 2] @ls + [1] ,@keyX [0 1] [2] ,@ls ,@valX ,@x) >= [1 2] @ls + [1] [0 1] [2] = insert#4(#equal(@key1,@keyX) ,@key1 ,@ls ,@valX ,@vals1 ,@x) insert#4(#false() = [1 2] @ls + [1] ,@key1 [0 1] [2] ,@ls ,@valX ,@vals1 ,@x) >= [1 2] @ls + [1] [0 1] [2] = ::(tuple#2(@vals1,@key1) ,insert(@x,@ls)) insert#4(#true() = [1 2] @ls + [1] ,@key1 [0 1] [2] ,@ls ,@valX ,@vals1 ,@x) >= [1 1] @ls + [0] [0 1] [1] = ::(tuple#2(::(@valX,@vals1) ,@key1) ,@ls) split(@l) = [1 0] @l + [0] [0 1] [0] >= [1 0] @l + [0] [0 1] [0] = split#1(@l) split#1(::(@x,@xs)) = [1 1] @xs + [0] [0 1] [1] >= [1 1] @xs + [0] [0 1] [1] = insert(@x,split(@xs)) split#1(nil()) = [0] [0] >= [0] [0] = nil() *** 1.1.1.1.1.1.1.2.1.1.1.1.1.1.1.2.1.1 Progress [(?,O(1))] *** Considered Problem: Strict DP Rules: insert#1#(tuple#2(@valX,@keyX),@l,@x) -> c_7(insert#2#(@l,@keyX,@valX,@x)) Strict TRS Rules: Weak DP Rules: 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)) split#(@l) -> c_21(split#1#(@l)) split#1#(::(@x,@xs)) -> c_22(insert#(@x,split(@xs)),split#(@xs)) splitAndSort#(@l) -> c_24(split#(@l)) Weak TRS 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() 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/2,c_17/1,c_18/1,c_19/0,c_20/2,c_21/1,c_22/2,c_23/0,c_24/1,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 basic terms: {#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#}/{#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} Applied Processor: Assumption Proof: () *** 1.1.1.1.1.1.1.2.1.1.1.1.1.1.1.2.2 Progress [(O(1),O(1))] *** Considered Problem: Strict DP Rules: Strict TRS Rules: Weak DP Rules: 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)) split#(@l) -> c_21(split#1#(@l)) split#1#(::(@x,@xs)) -> c_22(insert#(@x,split(@xs)),split#(@xs)) splitAndSort#(@l) -> c_24(split#(@l)) Weak TRS 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() 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/2,c_17/1,c_18/1,c_19/0,c_20/2,c_21/1,c_22/2,c_23/0,c_24/1,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 basic terms: {#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#}/{#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} Applied Processor: RemoveWeakSuffixes Proof: Consider the dependency graph 1:W: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:W: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:W: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:W: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:W: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:W:split#(@l) -> c_21(split#1#(@l)) -->_1 split#1#(::(@x,@xs)) -> c_22(insert#(@x,split(@xs)),split#(@xs)):7 7:W:split#1#(::(@x,@xs)) -> c_22(insert#(@x,split(@xs)),split#(@xs)) -->_2 split#(@l) -> c_21(split#1#(@l)):6 -->_1 insert#(@x,@l) -> c_6(insert#1#(@x,@l,@x)):1 8:W:splitAndSort#(@l) -> c_24(split#(@l)) -->_1 split#(@l) -> c_21(split#1#(@l)):6 The following weak DPs constitute a sub-graph of the DG that is closed under successors. The DPs are removed. 8: splitAndSort#(@l) -> c_24(split#(@l)) 6: split#(@l) -> c_21(split#1#(@l)) 7: split#1#(::(@x,@xs)) -> c_22(insert#(@x,split(@xs)) ,split#(@xs)) 1: insert#(@x,@l) -> c_6(insert#1#(@x,@l,@x)) 5: insert#4#(#false() ,@key1 ,@ls ,@valX ,@vals1 ,@x) -> c_11(insert#(@x,@ls)) 4: insert#3#(tuple#2(@vals1,@key1) ,@keyX ,@ls ,@valX ,@x) -> c_10(insert#4#(#equal(@key1 ,@keyX) ,@key1 ,@ls ,@valX ,@vals1 ,@x)) 3: insert#2#(::(@l1,@ls) ,@keyX ,@valX ,@x) -> c_8(insert#3#(@l1 ,@keyX ,@ls ,@valX ,@x)) 2: insert#1#(tuple#2(@valX,@keyX) ,@l ,@x) -> c_7(insert#2#(@l ,@keyX ,@valX ,@x)) *** 1.1.1.1.1.1.1.2.1.1.1.1.1.1.1.2.2.1 Progress [(O(1),O(1))] *** Considered Problem: Strict DP Rules: Strict TRS Rules: Weak DP Rules: Weak TRS 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() 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/2,c_17/1,c_18/1,c_19/0,c_20/2,c_21/1,c_22/2,c_23/0,c_24/1,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 basic terms: {#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#}/{#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} Applied Processor: EmptyProcessor Proof: The problem is already closed. The intended complexity is O(1). *** 1.1.1.1.1.1.1.2.1.1.1.2 Progress [(?,O(n^5))] *** Considered Problem: Strict DP Rules: 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(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)) Strict TRS Rules: Weak DP Rules: 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)) Weak TRS 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)) 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/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 basic terms: {#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#}/{#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} Applied Processor: RemoveWeakSuffixes Proof: Consider the dependency graph 1:S:quicksort#(@l) -> c_13(quicksort#1#(@l)) -->_1 quicksort#1#(::(@z,@zs)) -> c_14(quicksort#2#(splitqs(@z,@zs),@z),splitqs#(@z,@zs)):2 2: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)):10 -->_1 quicksort#2#(tuple#2(@xs,@ys),@z) -> c_16(quicksort#(@xs),quicksort#(@ys)):3 3:S:quicksort#2#(tuple#2(@xs,@ys),@z) -> c_16(quicksort#(@xs),quicksort#(@ys)) -->_2 quicksort#(@l) -> c_13(quicksort#1#(@l)):1 -->_1 quicksort#(@l) -> c_13(quicksort#1#(@l)):1 4:S:sortAll#(@l) -> c_17(sortAll#1#(@l)) -->_1 sortAll#1#(::(@x,@xs)) -> c_18(sortAll#2#(@x,@xs)):5 5: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)):6 6:S:sortAll#2#(tuple#2(@vals,@key),@xs) -> c_20(quicksort#(@vals),sortAll#(@xs)) -->_2 sortAll#(@l) -> c_17(sortAll#1#(@l)):4 -->_1 quicksort#(@l) -> c_13(quicksort#1#(@l)):1 7:S:split#(@l) -> c_21(split#1#(@l)) -->_1 split#1#(::(@x,@xs)) -> c_22(insert#(@x,split(@xs)),split#(@xs)):8 8:S:split#1#(::(@x,@xs)) -> c_22(insert#(@x,split(@xs)),split#(@xs)) -->_1 insert#(@x,@l) -> c_6(insert#1#(@x,@l,@x)):12 -->_2 split#(@l) -> c_21(split#1#(@l)):7 9:S:splitAndSort#(@l) -> c_24(sortAll#(split(@l)),split#(@l)) -->_2 split#(@l) -> c_21(split#1#(@l)):7 -->_1 sortAll#(@l) -> c_17(sortAll#1#(@l)):4 10:S:splitqs#(@pivot,@l) -> c_25(splitqs#1#(@l,@pivot)) -->_1 splitqs#1#(::(@x,@xs),@pivot) -> c_26(splitqs#(@pivot,@xs)):11 11:S:splitqs#1#(::(@x,@xs),@pivot) -> c_26(splitqs#(@pivot,@xs)) -->_1 splitqs#(@pivot,@l) -> c_25(splitqs#1#(@l,@pivot)):10 12:W: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)):13 13:W: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)):14 14:W: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)):15 15:W: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)):16 16:W:insert#4#(#false(),@key1,@ls,@valX,@vals1,@x) -> c_11(insert#(@x,@ls)) -->_1 insert#(@x,@l) -> c_6(insert#1#(@x,@l,@x)):12 The following weak DPs constitute a sub-graph of the DG that is closed under successors. The DPs are removed. 12: insert#(@x,@l) -> c_6(insert#1#(@x,@l,@x)) 16: insert#4#(#false() ,@key1 ,@ls ,@valX ,@vals1 ,@x) -> c_11(insert#(@x,@ls)) 15: insert#3#(tuple#2(@vals1,@key1) ,@keyX ,@ls ,@valX ,@x) -> c_10(insert#4#(#equal(@key1 ,@keyX) ,@key1 ,@ls ,@valX ,@vals1 ,@x)) 14: insert#2#(::(@l1,@ls) ,@keyX ,@valX ,@x) -> c_8(insert#3#(@l1 ,@keyX ,@ls ,@valX ,@x)) 13: insert#1#(tuple#2(@valX,@keyX) ,@l ,@x) -> c_7(insert#2#(@l ,@keyX ,@valX ,@x)) *** 1.1.1.1.1.1.1.2.1.1.1.2.1 Progress [(?,O(n^5))] *** Considered Problem: Strict DP Rules: 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(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)) Strict TRS Rules: Weak DP Rules: Weak TRS 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)) 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/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 basic terms: {#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#}/{#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} Applied Processor: SimplifyRHS Proof: Consider the dependency graph 1:S:quicksort#(@l) -> c_13(quicksort#1#(@l)) -->_1 quicksort#1#(::(@z,@zs)) -> c_14(quicksort#2#(splitqs(@z,@zs),@z),splitqs#(@z,@zs)):2 2: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)):10 -->_1 quicksort#2#(tuple#2(@xs,@ys),@z) -> c_16(quicksort#(@xs),quicksort#(@ys)):3 3:S:quicksort#2#(tuple#2(@xs,@ys),@z) -> c_16(quicksort#(@xs),quicksort#(@ys)) -->_2 quicksort#(@l) -> c_13(quicksort#1#(@l)):1 -->_1 quicksort#(@l) -> c_13(quicksort#1#(@l)):1 4:S:sortAll#(@l) -> c_17(sortAll#1#(@l)) -->_1 sortAll#1#(::(@x,@xs)) -> c_18(sortAll#2#(@x,@xs)):5 5: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)):6 6:S:sortAll#2#(tuple#2(@vals,@key),@xs) -> c_20(quicksort#(@vals),sortAll#(@xs)) -->_2 sortAll#(@l) -> c_17(sortAll#1#(@l)):4 -->_1 quicksort#(@l) -> c_13(quicksort#1#(@l)):1 7:S:split#(@l) -> c_21(split#1#(@l)) -->_1 split#1#(::(@x,@xs)) -> c_22(insert#(@x,split(@xs)),split#(@xs)):8 8:S:split#1#(::(@x,@xs)) -> c_22(insert#(@x,split(@xs)),split#(@xs)) -->_2 split#(@l) -> c_21(split#1#(@l)):7 9:S:splitAndSort#(@l) -> c_24(sortAll#(split(@l)),split#(@l)) -->_2 split#(@l) -> c_21(split#1#(@l)):7 -->_1 sortAll#(@l) -> c_17(sortAll#1#(@l)):4 10:S:splitqs#(@pivot,@l) -> c_25(splitqs#1#(@l,@pivot)) -->_1 splitqs#1#(::(@x,@xs),@pivot) -> c_26(splitqs#(@pivot,@xs)):11 11:S:splitqs#1#(::(@x,@xs),@pivot) -> c_26(splitqs#(@pivot,@xs)) -->_1 splitqs#(@pivot,@l) -> c_25(splitqs#1#(@l,@pivot)):10 Due to missing edges in the depndency graph, the right-hand sides of following rules could be simplified: split#1#(::(@x,@xs)) -> c_22(split#(@xs)) *** 1.1.1.1.1.1.1.2.1.1.1.2.1.1 Progress [(?,O(n^5))] *** Considered Problem: Strict DP Rules: 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(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(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)) Strict TRS Rules: Weak DP Rules: Weak TRS 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)) 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/2,c_17/1,c_18/1,c_19/0,c_20/2,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 basic terms: {#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#}/{#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} Applied Processor: Decompose {onSelection = all cycle independent sub-graph, withBound = RelativeAdd} Proof: We analyse the complexity of following sub-problems (R) and (S). Problem (S) is obtained from the input problem by shifting strict rules from (R) into the weak component. Problem (R) Strict DP Rules: 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(quicksort#(@xs),quicksort#(@ys)) splitqs#(@pivot,@l) -> c_25(splitqs#1#(@l,@pivot)) splitqs#1#(::(@x,@xs),@pivot) -> c_26(splitqs#(@pivot,@xs)) Strict TRS Rules: Weak DP Rules: 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(split#(@xs)) splitAndSort#(@l) -> c_24(sortAll#(split(@l)),split#(@l)) Weak TRS 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)) 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/2,c_17/1,c_18/1,c_19/0,c_20/2,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 basic terms: {#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#}/{#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} Problem (S) Strict DP Rules: 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(split#(@xs)) splitAndSort#(@l) -> c_24(sortAll#(split(@l)),split#(@l)) Strict TRS Rules: Weak DP Rules: 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(quicksort#(@xs),quicksort#(@ys)) splitqs#(@pivot,@l) -> c_25(splitqs#1#(@l,@pivot)) splitqs#1#(::(@x,@xs),@pivot) -> c_26(splitqs#(@pivot,@xs)) Weak TRS 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)) 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/2,c_17/1,c_18/1,c_19/0,c_20/2,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 basic terms: {#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#}/{#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} *** 1.1.1.1.1.1.1.2.1.1.1.2.1.1.1 Progress [(?,O(n^5))] *** Considered Problem: Strict DP Rules: 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(quicksort#(@xs),quicksort#(@ys)) splitqs#(@pivot,@l) -> c_25(splitqs#1#(@l,@pivot)) splitqs#1#(::(@x,@xs),@pivot) -> c_26(splitqs#(@pivot,@xs)) Strict TRS Rules: Weak DP Rules: 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(split#(@xs)) splitAndSort#(@l) -> c_24(sortAll#(split(@l)),split#(@l)) Weak TRS 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)) 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/2,c_17/1,c_18/1,c_19/0,c_20/2,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 basic terms: {#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#}/{#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} Applied Processor: RemoveWeakSuffixes Proof: Consider the dependency graph 1:S:quicksort#(@l) -> c_13(quicksort#1#(@l)) -->_1 quicksort#1#(::(@z,@zs)) -> c_14(quicksort#2#(splitqs(@z,@zs),@z),splitqs#(@z,@zs)):2 2: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(quicksort#(@xs),quicksort#(@ys)):3 -->_2 splitqs#(@pivot,@l) -> c_25(splitqs#1#(@l,@pivot)):10 3:S:quicksort#2#(tuple#2(@xs,@ys),@z) -> c_16(quicksort#(@xs),quicksort#(@ys)) -->_2 quicksort#(@l) -> c_13(quicksort#1#(@l)):1 -->_1 quicksort#(@l) -> c_13(quicksort#1#(@l)):1 4:W:sortAll#(@l) -> c_17(sortAll#1#(@l)) -->_1 sortAll#1#(::(@x,@xs)) -> c_18(sortAll#2#(@x,@xs)):5 5:W:sortAll#1#(::(@x,@xs)) -> c_18(sortAll#2#(@x,@xs)) -->_1 sortAll#2#(tuple#2(@vals,@key),@xs) -> c_20(quicksort#(@vals),sortAll#(@xs)):6 6:W:sortAll#2#(tuple#2(@vals,@key),@xs) -> c_20(quicksort#(@vals),sortAll#(@xs)) -->_2 sortAll#(@l) -> c_17(sortAll#1#(@l)):4 -->_1 quicksort#(@l) -> c_13(quicksort#1#(@l)):1 7:W:split#(@l) -> c_21(split#1#(@l)) -->_1 split#1#(::(@x,@xs)) -> c_22(split#(@xs)):8 8:W:split#1#(::(@x,@xs)) -> c_22(split#(@xs)) -->_1 split#(@l) -> c_21(split#1#(@l)):7 9:W:splitAndSort#(@l) -> c_24(sortAll#(split(@l)),split#(@l)) -->_1 sortAll#(@l) -> c_17(sortAll#1#(@l)):4 -->_2 split#(@l) -> c_21(split#1#(@l)):7 10:S:splitqs#(@pivot,@l) -> c_25(splitqs#1#(@l,@pivot)) -->_1 splitqs#1#(::(@x,@xs),@pivot) -> c_26(splitqs#(@pivot,@xs)):11 11:S:splitqs#1#(::(@x,@xs),@pivot) -> c_26(splitqs#(@pivot,@xs)) -->_1 splitqs#(@pivot,@l) -> c_25(splitqs#1#(@l,@pivot)):10 The following weak DPs constitute a sub-graph of the DG that is closed under successors. The DPs are removed. 7: split#(@l) -> c_21(split#1#(@l)) 8: split#1#(::(@x,@xs)) -> c_22(split#(@xs)) *** 1.1.1.1.1.1.1.2.1.1.1.2.1.1.1.1 Progress [(?,O(n^5))] *** Considered Problem: Strict DP Rules: 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(quicksort#(@xs),quicksort#(@ys)) splitqs#(@pivot,@l) -> c_25(splitqs#1#(@l,@pivot)) splitqs#1#(::(@x,@xs),@pivot) -> c_26(splitqs#(@pivot,@xs)) Strict TRS Rules: Weak DP Rules: 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)) splitAndSort#(@l) -> c_24(sortAll#(split(@l)),split#(@l)) Weak TRS 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)) 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/2,c_17/1,c_18/1,c_19/0,c_20/2,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 basic terms: {#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#}/{#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} Applied Processor: SimplifyRHS Proof: Consider the dependency graph 1:S:quicksort#(@l) -> c_13(quicksort#1#(@l)) -->_1 quicksort#1#(::(@z,@zs)) -> c_14(quicksort#2#(splitqs(@z,@zs),@z),splitqs#(@z,@zs)):2 2: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(quicksort#(@xs),quicksort#(@ys)):3 -->_2 splitqs#(@pivot,@l) -> c_25(splitqs#1#(@l,@pivot)):10 3:S:quicksort#2#(tuple#2(@xs,@ys),@z) -> c_16(quicksort#(@xs),quicksort#(@ys)) -->_2 quicksort#(@l) -> c_13(quicksort#1#(@l)):1 -->_1 quicksort#(@l) -> c_13(quicksort#1#(@l)):1 4:W:sortAll#(@l) -> c_17(sortAll#1#(@l)) -->_1 sortAll#1#(::(@x,@xs)) -> c_18(sortAll#2#(@x,@xs)):5 5:W:sortAll#1#(::(@x,@xs)) -> c_18(sortAll#2#(@x,@xs)) -->_1 sortAll#2#(tuple#2(@vals,@key),@xs) -> c_20(quicksort#(@vals),sortAll#(@xs)):6 6:W:sortAll#2#(tuple#2(@vals,@key),@xs) -> c_20(quicksort#(@vals),sortAll#(@xs)) -->_2 sortAll#(@l) -> c_17(sortAll#1#(@l)):4 -->_1 quicksort#(@l) -> c_13(quicksort#1#(@l)):1 9:W:splitAndSort#(@l) -> c_24(sortAll#(split(@l)),split#(@l)) -->_1 sortAll#(@l) -> c_17(sortAll#1#(@l)):4 10:S:splitqs#(@pivot,@l) -> c_25(splitqs#1#(@l,@pivot)) -->_1 splitqs#1#(::(@x,@xs),@pivot) -> c_26(splitqs#(@pivot,@xs)):11 11:S:splitqs#1#(::(@x,@xs),@pivot) -> c_26(splitqs#(@pivot,@xs)) -->_1 splitqs#(@pivot,@l) -> c_25(splitqs#1#(@l,@pivot)):10 Due to missing edges in the depndency graph, the right-hand sides of following rules could be simplified: splitAndSort#(@l) -> c_24(sortAll#(split(@l))) *** 1.1.1.1.1.1.1.2.1.1.1.2.1.1.1.1.1 Progress [(?,O(n^5))] *** Considered Problem: Strict DP Rules: 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(quicksort#(@xs),quicksort#(@ys)) splitqs#(@pivot,@l) -> c_25(splitqs#1#(@l,@pivot)) splitqs#1#(::(@x,@xs),@pivot) -> c_26(splitqs#(@pivot,@xs)) Strict TRS Rules: Weak DP Rules: 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)) splitAndSort#(@l) -> c_24(sortAll#(split(@l))) Weak TRS 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)) 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/2,c_17/1,c_18/1,c_19/0,c_20/2,c_21/1,c_22/1,c_23/0,c_24/1,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 basic terms: {#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#}/{#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} Applied Processor: DecomposeDG {onSelection = all below first cut in WDG, onUpper = Just someStrategy, onLower = Nothing} Proof: 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)) splitAndSort#(@l) -> c_24(sortAll#(split(@l))) and a lower component 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(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) splitAndSort#(@l) -> sortAll#(split(@l)) *** 1.1.1.1.1.1.1.2.1.1.1.2.1.1.1.1.1.1 Progress [(?,O(n^1))] *** Considered Problem: Strict DP Rules: sortAll#2#(tuple#2(@vals,@key),@xs) -> c_20(quicksort#(@vals),sortAll#(@xs)) Strict TRS Rules: Weak DP Rules: sortAll#(@l) -> c_17(sortAll#1#(@l)) sortAll#1#(::(@x,@xs)) -> c_18(sortAll#2#(@x,@xs)) splitAndSort#(@l) -> c_24(sortAll#(split(@l))) Weak TRS 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)) 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/2,c_17/1,c_18/1,c_19/0,c_20/2,c_21/1,c_22/1,c_23/0,c_24/1,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 basic terms: {#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#}/{#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} Applied Processor: PredecessorEstimationCP {onSelectionCP = any intersect of rules of CDG leaf and strict-rules, withComplexityPair = NaturalMI {miDimension = 1, miDegree = 1, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Nothing, greedy = NoGreedy}} Proof: We first use the processor NaturalMI {miDimension = 1, miDegree = 1, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Nothing, greedy = NoGreedy} to orient following rules strictly: 1: sortAll#2#(tuple#2(@vals,@key) ,@xs) -> c_20(quicksort#(@vals) ,sortAll#(@xs)) Consider the set of all dependency pairs 1: sortAll#2#(tuple#2(@vals,@key) ,@xs) -> c_20(quicksort#(@vals) ,sortAll#(@xs)) 2: sortAll#(@l) -> c_17(sortAll#1#(@l)) 3: sortAll#1#(::(@x,@xs)) -> c_18(sortAll#2#(@x,@xs)) 4: splitAndSort#(@l) -> c_24(sortAll#(split(@l))) Processor NaturalMI {miDimension = 1, miDegree = 1, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Nothing, greedy = NoGreedy}induces the complexity certificateTIME (?,O(n^1)) SPACE(?,?)on application of the dependency pairs {1} These cover all (indirect) predecessors of dependency pairs {1,2,3,4} their number of applications is equally bounded. The dependency pairs are shifted into the weak component. *** 1.1.1.1.1.1.1.2.1.1.1.2.1.1.1.1.1.1.1 Progress [(?,O(n^1))] *** Considered Problem: Strict DP Rules: sortAll#2#(tuple#2(@vals,@key),@xs) -> c_20(quicksort#(@vals),sortAll#(@xs)) Strict TRS Rules: Weak DP Rules: sortAll#(@l) -> c_17(sortAll#1#(@l)) sortAll#1#(::(@x,@xs)) -> c_18(sortAll#2#(@x,@xs)) splitAndSort#(@l) -> c_24(sortAll#(split(@l))) Weak TRS 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)) 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/2,c_17/1,c_18/1,c_19/0,c_20/2,c_21/1,c_22/1,c_23/0,c_24/1,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 basic terms: {#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#}/{#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} Applied Processor: NaturalMI {miDimension = 1, miDegree = 1, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Just first alternative for predecessorEstimation any intersect of rules of CDG leaf and strict-rules, greedy = NoGreedy} Proof: We apply a matrix interpretation of kind constructor based matrix interpretation: The following argument positions are considered usable: uargs(c_17) = {1}, uargs(c_18) = {1}, uargs(c_20) = {2}, uargs(c_24) = {1} Following symbols are considered usable: {insert,insert#1,insert#2,insert#3,insert#4,split,split#1,#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#} TcT has computed the following interpretation: p(#0) = [0] p(#EQ) = [0] p(#GT) = [0] p(#LT) = [0] p(#and) = [0] p(#ckgt) = [0] p(#compare) = [0] p(#eq) = [0] p(#equal) = [0] p(#false) = [0] p(#greater) = [2] x2 + [2] p(#neg) = [0] p(#pos) = [0] p(#s) = [1] x1 + [0] p(#true) = [0] p(::) = [1] x2 + [1] p(append) = [1] x2 + [0] p(append#1) = [0] p(insert) = [1] x2 + [3] p(insert#1) = [1] x2 + [3] p(insert#2) = [1] x1 + [3] p(insert#3) = [1] x3 + [4] p(insert#4) = [1] x3 + [4] 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) = [3] x1 + [0] p(split#1) = [3] x1 + [0] p(splitAndSort) = [0] p(splitqs) = [0] p(splitqs#1) = [0] p(splitqs#2) = [0] p(splitqs#3) = [5] 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#) = [0] p(insert#1#) = [0] p(insert#2#) = [0] p(insert#3#) = [0] p(insert#4#) = [2] x3 + [1] x6 + [0] p(quicksort#) = [0] p(quicksort#1#) = [2] x1 + [4] p(quicksort#2#) = [1] p(sortAll#) = [2] x1 + [0] p(sortAll#1#) = [2] x1 + [0] p(sortAll#2#) = [2] x2 + [1] p(split#) = [1] p(split#1#) = [1] x1 + [1] p(splitAndSort#) = [6] x1 + [1] p(splitqs#) = [2] x1 + [0] p(splitqs#1#) = [1] p(splitqs#2#) = [0] p(splitqs#3#) = [1] x2 + [4] x3 + [1] x4 + [0] p(c_1) = [1] x1 + [2] p(c_2) = [0] p(c_3) = [0] p(c_4) = [2] p(c_5) = [1] p(c_6) = [0] p(c_7) = [4] x1 + [1] p(c_8) = [1] p(c_9) = [1] p(c_10) = [0] p(c_11) = [1] x1 + [1] p(c_12) = [1] p(c_13) = [1] p(c_14) = [1] p(c_15) = [4] p(c_16) = [2] p(c_17) = [1] x1 + [0] p(c_18) = [1] x1 + [1] p(c_19) = [1] p(c_20) = [1] x2 + [0] p(c_21) = [0] p(c_22) = [0] p(c_23) = [0] p(c_24) = [1] x1 + [1] p(c_25) = [0] p(c_26) = [1] p(c_27) = [0] p(c_28) = [4] x1 + [4] x2 + [0] p(c_29) = [4] 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) = [1] p(c_38) = [0] p(c_39) = [2] p(c_40) = [0] p(c_41) = [1] p(c_42) = [2] p(c_43) = [1] x1 + [2] p(c_44) = [1] p(c_45) = [0] p(c_46) = [0] p(c_47) = [0] p(c_48) = [1] p(c_49) = [0] p(c_50) = [2] p(c_51) = [1] p(c_52) = [1] p(c_53) = [4] p(c_54) = [0] p(c_55) = [2] x1 + [2] p(c_56) = [0] p(c_57) = [4] p(c_58) = [2] p(c_59) = [2] x1 + [0] p(c_60) = [1] p(c_61) = [4] x1 + [0] p(c_62) = [1] x2 + [1] x3 + [1] p(c_63) = [2] p(c_64) = [1] p(c_65) = [1] p(c_66) = [0] p(c_67) = [2] p(c_68) = [1] p(c_69) = [0] p(c_70) = [2] x1 + [4] x2 + [2] x3 + [0] Following rules are strictly oriented: sortAll#2#(tuple#2(@vals,@key) = [2] @xs + [1] ,@xs) > [2] @xs + [0] = c_20(quicksort#(@vals) ,sortAll#(@xs)) Following rules are (at-least) weakly oriented: sortAll#(@l) = [2] @l + [0] >= [2] @l + [0] = c_17(sortAll#1#(@l)) sortAll#1#(::(@x,@xs)) = [2] @xs + [2] >= [2] @xs + [2] = c_18(sortAll#2#(@x,@xs)) splitAndSort#(@l) = [6] @l + [1] >= [6] @l + [1] = c_24(sortAll#(split(@l))) insert(@x,@l) = [1] @l + [3] >= [1] @l + [3] = insert#1(@x,@l,@x) insert#1(tuple#2(@valX,@keyX) = [1] @l + [3] ,@l ,@x) >= [1] @l + [3] = insert#2(@l,@keyX,@valX,@x) insert#2(::(@l1,@ls) = [1] @ls + [4] ,@keyX ,@valX ,@x) >= [1] @ls + [4] = insert#3(@l1,@keyX,@ls,@valX,@x) insert#2(nil(),@keyX,@valX,@x) = [3] >= [1] = ::(tuple#2(::(@valX,nil()) ,@keyX) ,nil()) insert#3(tuple#2(@vals1,@key1) = [1] @ls + [4] ,@keyX ,@ls ,@valX ,@x) >= [1] @ls + [4] = insert#4(#equal(@key1,@keyX) ,@key1 ,@ls ,@valX ,@vals1 ,@x) insert#4(#false() = [1] @ls + [4] ,@key1 ,@ls ,@valX ,@vals1 ,@x) >= [1] @ls + [4] = ::(tuple#2(@vals1,@key1) ,insert(@x,@ls)) insert#4(#true() = [1] @ls + [4] ,@key1 ,@ls ,@valX ,@vals1 ,@x) >= [1] @ls + [1] = ::(tuple#2(::(@valX,@vals1) ,@key1) ,@ls) split(@l) = [3] @l + [0] >= [3] @l + [0] = split#1(@l) split#1(::(@x,@xs)) = [3] @xs + [3] >= [3] @xs + [3] = insert(@x,split(@xs)) split#1(nil()) = [0] >= [0] = nil() *** 1.1.1.1.1.1.1.2.1.1.1.2.1.1.1.1.1.1.1.1 Progress [(?,O(1))] *** Considered Problem: Strict DP Rules: Strict TRS Rules: Weak DP Rules: 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)) splitAndSort#(@l) -> c_24(sortAll#(split(@l))) Weak TRS 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)) 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/2,c_17/1,c_18/1,c_19/0,c_20/2,c_21/1,c_22/1,c_23/0,c_24/1,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 basic terms: {#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#}/{#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} Applied Processor: Assumption Proof: () *** 1.1.1.1.1.1.1.2.1.1.1.2.1.1.1.1.1.1.2 Progress [(O(1),O(1))] *** Considered Problem: Strict DP Rules: Strict TRS Rules: Weak DP Rules: 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)) splitAndSort#(@l) -> c_24(sortAll#(split(@l))) Weak TRS 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)) 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/2,c_17/1,c_18/1,c_19/0,c_20/2,c_21/1,c_22/1,c_23/0,c_24/1,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 basic terms: {#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#}/{#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} Applied Processor: RemoveWeakSuffixes Proof: Consider the dependency graph 1:W:sortAll#(@l) -> c_17(sortAll#1#(@l)) -->_1 sortAll#1#(::(@x,@xs)) -> c_18(sortAll#2#(@x,@xs)):2 2:W: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:W:sortAll#2#(tuple#2(@vals,@key),@xs) -> c_20(quicksort#(@vals),sortAll#(@xs)) -->_2 sortAll#(@l) -> c_17(sortAll#1#(@l)):1 4:W:splitAndSort#(@l) -> c_24(sortAll#(split(@l))) -->_1 sortAll#(@l) -> c_17(sortAll#1#(@l)):1 The following weak DPs constitute a sub-graph of the DG that is closed under successors. The DPs are removed. 4: splitAndSort#(@l) -> c_24(sortAll#(split(@l))) 1: sortAll#(@l) -> c_17(sortAll#1#(@l)) 3: sortAll#2#(tuple#2(@vals,@key) ,@xs) -> c_20(quicksort#(@vals) ,sortAll#(@xs)) 2: sortAll#1#(::(@x,@xs)) -> c_18(sortAll#2#(@x,@xs)) *** 1.1.1.1.1.1.1.2.1.1.1.2.1.1.1.1.1.1.2.1 Progress [(O(1),O(1))] *** Considered Problem: Strict DP Rules: Strict TRS Rules: Weak DP Rules: Weak TRS 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)) 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/2,c_17/1,c_18/1,c_19/0,c_20/2,c_21/1,c_22/1,c_23/0,c_24/1,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 basic terms: {#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#}/{#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} Applied Processor: EmptyProcessor Proof: The problem is already closed. The intended complexity is O(1). *** 1.1.1.1.1.1.1.2.1.1.1.2.1.1.1.1.1.2 Progress [(?,O(n^4))] *** Considered Problem: Strict DP Rules: 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(quicksort#(@xs),quicksort#(@ys)) splitqs#(@pivot,@l) -> c_25(splitqs#1#(@l,@pivot)) splitqs#1#(::(@x,@xs),@pivot) -> c_26(splitqs#(@pivot,@xs)) Strict TRS Rules: Weak DP Rules: 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 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)) 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/2,c_17/1,c_18/1,c_19/0,c_20/2,c_21/1,c_22/1,c_23/0,c_24/1,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 basic terms: {#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#}/{#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} Applied Processor: DecomposeDG {onSelection = all below first cut in WDG, onUpper = Just someStrategy, onLower = Nothing} Proof: We decompose the input problem according to the dependency graph into the upper component 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(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) splitAndSort#(@l) -> sortAll#(split(@l)) and a lower component 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. 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) -> 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)) *** 1.1.1.1.1.1.1.2.1.1.1.2.1.1.1.1.1.2.1 Progress [(?,O(n^2))] *** Considered Problem: Strict DP Rules: 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(quicksort#(@xs),quicksort#(@ys)) Strict TRS Rules: Weak DP Rules: 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 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)) 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/2,c_17/1,c_18/1,c_19/0,c_20/2,c_21/1,c_22/1,c_23/0,c_24/1,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 basic terms: {#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#}/{#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} Applied Processor: PredecessorEstimationCP {onSelectionCP = any intersect of rules of CDG leaf and strict-rules, withComplexityPair = NaturalMI {miDimension = 2, miDegree = 2, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Nothing, greedy = NoGreedy}} Proof: We first use the processor NaturalMI {miDimension = 2, miDegree = 2, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Nothing, greedy = NoGreedy} to orient following rules strictly: 2: quicksort#1#(::(@z,@zs)) -> c_14(quicksort#2#(splitqs(@z ,@zs) ,@z) ,splitqs#(@z,@zs)) Consider the set of all dependency pairs 1: quicksort#(@l) -> c_13(quicksort#1#(@l)) 2: quicksort#1#(::(@z,@zs)) -> c_14(quicksort#2#(splitqs(@z ,@zs) ,@z) ,splitqs#(@z,@zs)) 3: quicksort#2#(tuple#2(@xs,@ys) ,@z) -> c_16(quicksort#(@xs) ,quicksort#(@ys)) 4: sortAll#(@l) -> sortAll#1#(@l) 5: sortAll#1#(::(@x,@xs)) -> sortAll#2#(@x,@xs) 6: sortAll#2#(tuple#2(@vals,@key) ,@xs) -> quicksort#(@vals) 7: sortAll#2#(tuple#2(@vals,@key) ,@xs) -> sortAll#(@xs) 8: splitAndSort#(@l) -> sortAll#(split(@l)) Processor NaturalMI {miDimension = 2, miDegree = 2, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Nothing, greedy = NoGreedy}induces the complexity certificateTIME (?,O(n^2)) SPACE(?,?)on application of the dependency pairs {2} These cover all (indirect) predecessors of dependency pairs {2,3,8} their number of applications is equally bounded. The dependency pairs are shifted into the weak component. *** 1.1.1.1.1.1.1.2.1.1.1.2.1.1.1.1.1.2.1.1 Progress [(?,O(n^2))] *** Considered Problem: Strict DP Rules: 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(quicksort#(@xs),quicksort#(@ys)) Strict TRS Rules: Weak DP Rules: 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 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)) 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/2,c_17/1,c_18/1,c_19/0,c_20/2,c_21/1,c_22/1,c_23/0,c_24/1,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 basic terms: {#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#}/{#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} Applied Processor: NaturalMI {miDimension = 2, miDegree = 2, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Just first alternative for predecessorEstimation any intersect of rules of CDG leaf and strict-rules, greedy = NoGreedy} Proof: We apply a matrix interpretation of kind constructor based matrix interpretation: The following argument positions are considered usable: uargs(c_13) = {1}, uargs(c_14) = {1}, uargs(c_16) = {1,2} Following symbols are considered usable: {insert,insert#1,insert#2,insert#3,insert#4,split,split#1,splitqs,splitqs#1,splitqs#2,splitqs#3,#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#} TcT has computed the following interpretation: p(#0) = [0] [0] p(#EQ) = [0] [0] p(#GT) = [2] [0] p(#LT) = [0] [0] p(#and) = [1 0] x1 + [2] [0 0] [3] p(#ckgt) = [1 1] x1 + [3] [0 3] [2] p(#compare) = [1 1] x1 + [0 0] x2 + [1] [2 2] [0 1] [0] p(#eq) = [0] [0] p(#equal) = [0] [0] p(#false) = [0] [0] p(#greater) = [0] [0] p(#neg) = [3] [0] p(#pos) = [2] [1] p(#s) = [1 3] x1 + [2] [0 0] [1] p(#true) = [0] [0] p(::) = [0 1] x1 + [1 0] x2 + [0] [0 0] [0 1] [1] p(append) = [2 0] x1 + [0] [0 1] [0] p(append#1) = [0] [0] p(insert) = [1 0] x2 + [1] [0 1] [1] p(insert#1) = [1 0] x2 + [1] [0 1] [1] p(insert#2) = [1 0] x1 + [1] [0 1] [1] p(insert#3) = [0 1] x1 + [1 0] x3 + [1] [0 0] [0 1] [2] p(insert#4) = [1 0] x3 + [0 1] x5 + [1] [0 1] [0 0] [2] p(nil) = [0] [0] p(quicksort) = [1 2] x1 + [0] [2 0] [0] p(quicksort#1) = [1 1] x1 + [2] [1 1] [0] p(quicksort#2) = [1 0] x1 + [1 0] x2 + [2] [0 0] [0 0] [0] p(sortAll) = [2 0] x1 + [2] [0 1] [0] p(sortAll#1) = [0 0] x1 + [1] [2 0] [2] p(sortAll#2) = [2 0] x2 + [0] [0 0] [0] p(split) = [0 1] x1 + [0] [0 2] [0] p(split#1) = [0 1] x1 + [0] [0 2] [0] p(splitAndSort) = [1 0] x1 + [0] [0 2] [1] p(splitqs) = [0 0] x1 + [0 1] x2 + [0] [1 0] [1 1] [0] p(splitqs#1) = [0 1] x1 + [0 0] x2 + [0] [0 1] [1 0] [0] p(splitqs#2) = [1 0] x1 + [0 0] x2 + [1] [1 0] [1 0] [1] p(splitqs#3) = [0 1] x2 + [0 1] x3 + [1] [0 1] [0 0] [1] p(tuple#2) = [0 1] x1 + [0 1] x2 + [0] [0 1] [0 0] [0] p(#and#) = [0] [1] p(#ckgt#) = [2 2] x1 + [2] [0 0] [0] p(#compare#) = [0] [0] p(#eq#) = [0 1] x1 + [0 0] x2 + [0] [0 1] [2 1] [0] p(#equal#) = [0 1] x2 + [0] [0 1] [0] p(#greater#) = [2 0] x2 + [1] [0 1] [0] p(append#) = [1 1] x1 + [1] [1 1] [2] p(append#1#) = [1 0] x1 + [0 0] x2 + [0] [0 0] [1 0] [0] p(insert#) = [0 0] x2 + [0] [2 2] [0] p(insert#1#) = [0 0] x2 + [0] [1 1] [0] p(insert#2#) = [0 1] x1 + [1 1] x2 + [1 0] x3 + [2 0] x4 + [0] [0 1] [0 1] [0 0] [0 0] [0] p(insert#3#) = [1 2] x1 + [0 0] x2 + [0 0] x4 + [0] [2 1] [2 0] [0 1] [0] p(insert#4#) = [0 0] x1 + [0 2] x2 + [0 0] x3 + [2 1] x4 + [2 0] x5 + [0 0] x6 + [2] [0 1] [0 1] [2 1] [0 0] [0 2] [0 1] [2] p(quicksort#) = [0 2] x1 + [0] [0 0] [0] p(quicksort#1#) = [0 2] x1 + [0] [2 3] [3] p(quicksort#2#) = [2 0] x1 + [0 0] x2 + [0] [2 0] [2 2] [0] p(sortAll#) = [3 0] x1 + [0] [0 0] [0] p(sortAll#1#) = [3 0] x1 + [0] [0 0] [0] p(sortAll#2#) = [0 2] x1 + [3 0] x2 + [0] [0 0] [0 0] [0] p(split#) = [2] [1] p(split#1#) = [0] [0] p(splitAndSort#) = [2 3] x1 + [2] [0 0] [0] p(splitqs#) = [0 1] x1 + [1 0] x2 + [2] [0 1] [0 0] [3] p(splitqs#1#) = [0 0] x1 + [0] [1 0] [2] p(splitqs#2#) = [2] [0] p(splitqs#3#) = [0 0] x2 + [0] [1 0] [0] p(c_1) = [0] [2] p(c_2) = [2 0] x2 + [0] [0 2] [0] p(c_3) = [0] [0] p(c_4) = [0 2] x1 + [1] [2 2] [0] p(c_5) = [0] [1] p(c_6) = [0 0] x1 + [0] [1 1] [0] p(c_7) = [0 0] x1 + [0] [1 0] [1] p(c_8) = [0 0] x1 + [0] [0 2] [1] p(c_9) = [0] [1] p(c_10) = [0] [0] p(c_11) = [1] [2] p(c_12) = [2] [0] p(c_13) = [1 0] x1 + [0] [0 0] [0] p(c_14) = [1 0] x1 + [0 0] x2 + [0] [0 0] [1 1] [1] p(c_15) = [0] [0] p(c_16) = [1 0] x1 + [1 1] x2 + [0] [0 0] [0 0] [0] p(c_17) = [0] [0] p(c_18) = [0] [0] p(c_19) = [0] [0] p(c_20) = [0 0] x1 + [0] [0 2] [2] p(c_21) = [0 0] x1 + [0] [2 0] [2] p(c_22) = [0 0] x1 + [2] [1 0] [2] p(c_23) = [0] [1] p(c_24) = [2] [2] p(c_25) = [0] [1] p(c_26) = [0] [0] p(c_27) = [2] [1] p(c_28) = [0 1] x1 + [0] [2 0] [0] p(c_29) = [0] [0] p(c_30) = [2] [1] p(c_31) = [1] [0] p(c_32) = [2] [1] p(c_33) = [0] [0] p(c_34) = [0] [0] p(c_35) = [0] [0] p(c_36) = [0] [2] p(c_37) = [0] [0] p(c_38) = [1] [0] p(c_39) = [0] [2] p(c_40) = [0] [1] p(c_41) = [1] [1] p(c_42) = [0] [2] p(c_43) = [1] [0] p(c_44) = [0] [0] p(c_45) = [2] [1] p(c_46) = [2] [0] p(c_47) = [0 1] x1 + [0] [1 0] [0] p(c_48) = [0] [0] p(c_49) = [0 0] x1 + [1] [1 0] [0] p(c_50) = [1] [0] p(c_51) = [0] [1] p(c_52) = [0] [2] p(c_53) = [2] [0] p(c_54) = [2] [0] p(c_55) = [2 1] x1 + [2] [1 0] [1] p(c_56) = [0] [0] p(c_57) = [1] [2] p(c_58) = [0] [1] p(c_59) = [0] [0] p(c_60) = [0] [0] p(c_61) = [0] [1] p(c_62) = [1 2] x1 + [0 0] x2 + [2 0] x3 + [0] [0 1] [0 1] [1 0] [2] p(c_63) = [0] [0] p(c_64) = [2] [2] p(c_65) = [0] [2] p(c_66) = [0] [0] p(c_67) = [0] [0] p(c_68) = [1] [0] p(c_69) = [0] [2] p(c_70) = [1 0] x1 + [0 2] x3 + [1] [1 0] [0 2] [0] Following rules are strictly oriented: quicksort#1#(::(@z,@zs)) = [0 0] @z + [0 2] @zs + [2] [0 2] [2 3] [6] > [0 0] @z + [0 2] @zs + [0] [0 2] [1 0] [6] = c_14(quicksort#2#(splitqs(@z ,@zs) ,@z) ,splitqs#(@z,@zs)) Following rules are (at-least) weakly oriented: quicksort#(@l) = [0 2] @l + [0] [0 0] [0] >= [0 2] @l + [0] [0 0] [0] = c_13(quicksort#1#(@l)) quicksort#2#(tuple#2(@xs,@ys) = [0 2] @xs + [0 2] @ys + [0 ,@z) 0] @z + [0] [0 2] [0 2] [2 2] [0] >= [0 2] @xs + [0 2] @ys + [0] [0 0] [0 0] [0] = c_16(quicksort#(@xs) ,quicksort#(@ys)) sortAll#(@l) = [3 0] @l + [0] [0 0] [0] >= [3 0] @l + [0] [0 0] [0] = sortAll#1#(@l) sortAll#1#(::(@x,@xs)) = [0 3] @x + [3 0] @xs + [0] [0 0] [0 0] [0] >= [0 2] @x + [3 0] @xs + [0] [0 0] [0 0] [0] = sortAll#2#(@x,@xs) sortAll#2#(tuple#2(@vals,@key) = [0 2] @vals + [3 0] @xs + [0] ,@xs) [0 0] [0 0] [0] >= [0 2] @vals + [0] [0 0] [0] = quicksort#(@vals) sortAll#2#(tuple#2(@vals,@key) = [0 2] @vals + [3 0] @xs + [0] ,@xs) [0 0] [0 0] [0] >= [3 0] @xs + [0] [0 0] [0] = sortAll#(@xs) splitAndSort#(@l) = [2 3] @l + [2] [0 0] [0] >= [0 3] @l + [0] [0 0] [0] = sortAll#(split(@l)) insert(@x,@l) = [1 0] @l + [1] [0 1] [1] >= [1 0] @l + [1] [0 1] [1] = insert#1(@x,@l,@x) insert#1(tuple#2(@valX,@keyX) = [1 0] @l + [1] ,@l [0 1] [1] ,@x) >= [1 0] @l + [1] [0 1] [1] = insert#2(@l,@keyX,@valX,@x) insert#2(::(@l1,@ls) = [0 1] @l1 + [1 0] @ls + [1] ,@keyX [0 0] [0 1] [2] ,@valX ,@x) >= [0 1] @l1 + [1 0] @ls + [1] [0 0] [0 1] [2] = insert#3(@l1,@keyX,@ls,@valX,@x) insert#2(nil(),@keyX,@valX,@x) = [1] [1] >= [1] [1] = ::(tuple#2(::(@valX,nil()) ,@keyX) ,nil()) insert#3(tuple#2(@vals1,@key1) = [1 0] @ls + [0 1] @vals1 + [1] ,@keyX [0 1] [0 0] [2] ,@ls ,@valX ,@x) >= [1 0] @ls + [0 1] @vals1 + [1] [0 1] [0 0] [2] = insert#4(#equal(@key1,@keyX) ,@key1 ,@ls ,@valX ,@vals1 ,@x) insert#4(#false() = [1 0] @ls + [0 1] @vals1 + [1] ,@key1 [0 1] [0 0] [2] ,@ls ,@valX ,@vals1 ,@x) >= [1 0] @ls + [0 1] @vals1 + [1] [0 1] [0 0] [2] = ::(tuple#2(@vals1,@key1) ,insert(@x,@ls)) insert#4(#true() = [1 0] @ls + [0 1] @vals1 + [1] ,@key1 [0 1] [0 0] [2] ,@ls ,@valX ,@vals1 ,@x) >= [1 0] @ls + [0 1] @vals1 + [1] [0 1] [0 0] [1] = ::(tuple#2(::(@valX,@vals1) ,@key1) ,@ls) split(@l) = [0 1] @l + [0] [0 2] [0] >= [0 1] @l + [0] [0 2] [0] = split#1(@l) split#1(::(@x,@xs)) = [0 1] @xs + [1] [0 2] [2] >= [0 1] @xs + [1] [0 2] [1] = insert(@x,split(@xs)) split#1(nil()) = [0] [0] >= [0] [0] = nil() splitqs(@pivot,@l) = [0 1] @l + [0 0] @pivot + [0] [1 1] [1 0] [0] >= [0 1] @l + [0 0] @pivot + [0] [0 1] [1 0] [0] = splitqs#1(@l,@pivot) splitqs#1(::(@x,@xs),@pivot) = [0 0] @pivot + [0 1] @xs + [1] [1 0] [0 1] [1] >= [0 0] @pivot + [0 1] @xs + [1] [1 0] [0 1] [1] = splitqs#2(splitqs(@pivot,@xs) ,@pivot ,@x) splitqs#1(nil(),@pivot) = [0 0] @pivot + [0] [1 0] [0] >= [0] [0] = tuple#2(nil(),nil()) splitqs#2(tuple#2(@ls,@rs) = [0 1] @ls + [0 0] @pivot + [0 ,@pivot 1] @rs + [1] ,@x) [0 1] [1 0] [0 1] [1] >= [0 1] @ls + [0 1] @rs + [1] [0 1] [0 0] [1] = splitqs#3(#greater(@x,@pivot) ,@ls ,@rs ,@x) splitqs#3(#false(),@ls,@rs,@x) = [0 1] @ls + [0 1] @rs + [1] [0 1] [0 0] [1] >= [0 1] @ls + [0 1] @rs + [1] [0 1] [0 0] [1] = tuple#2(::(@x,@ls),@rs) splitqs#3(#true(),@ls,@rs,@x) = [0 1] @ls + [0 1] @rs + [1] [0 1] [0 0] [1] >= [0 1] @ls + [0 1] @rs + [1] [0 1] [0 0] [0] = tuple#2(@ls,::(@x,@rs)) *** 1.1.1.1.1.1.1.2.1.1.1.2.1.1.1.1.1.2.1.1.1 Progress [(?,O(1))] *** Considered Problem: Strict DP Rules: quicksort#(@l) -> c_13(quicksort#1#(@l)) quicksort#2#(tuple#2(@xs,@ys),@z) -> c_16(quicksort#(@xs),quicksort#(@ys)) Strict TRS Rules: Weak DP Rules: quicksort#1#(::(@z,@zs)) -> c_14(quicksort#2#(splitqs(@z,@zs),@z),splitqs#(@z,@zs)) 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 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)) 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/2,c_17/1,c_18/1,c_19/0,c_20/2,c_21/1,c_22/1,c_23/0,c_24/1,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 basic terms: {#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#}/{#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} Applied Processor: Assumption Proof: () *** 1.1.1.1.1.1.1.2.1.1.1.2.1.1.1.1.1.2.1.2 Progress [(?,O(n^2))] *** Considered Problem: Strict DP Rules: quicksort#(@l) -> c_13(quicksort#1#(@l)) Strict TRS Rules: Weak DP Rules: quicksort#1#(::(@z,@zs)) -> c_14(quicksort#2#(splitqs(@z,@zs),@z),splitqs#(@z,@zs)) 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) splitAndSort#(@l) -> sortAll#(split(@l)) Weak TRS 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)) 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/2,c_17/1,c_18/1,c_19/0,c_20/2,c_21/1,c_22/1,c_23/0,c_24/1,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 basic terms: {#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#}/{#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} Applied Processor: PredecessorEstimationCP {onSelectionCP = any intersect of rules of CDG leaf and strict-rules, withComplexityPair = NaturalMI {miDimension = 2, miDegree = 2, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Nothing, greedy = NoGreedy}} Proof: We first use the processor NaturalMI {miDimension = 2, miDegree = 2, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Nothing, greedy = NoGreedy} to orient following rules strictly: 1: quicksort#(@l) -> c_13(quicksort#1#(@l)) Consider the set of all dependency pairs 1: quicksort#(@l) -> c_13(quicksort#1#(@l)) 2: quicksort#1#(::(@z,@zs)) -> c_14(quicksort#2#(splitqs(@z ,@zs) ,@z) ,splitqs#(@z,@zs)) 3: quicksort#2#(tuple#2(@xs,@ys) ,@z) -> c_16(quicksort#(@xs) ,quicksort#(@ys)) 4: sortAll#(@l) -> sortAll#1#(@l) 5: sortAll#1#(::(@x,@xs)) -> sortAll#2#(@x,@xs) 6: sortAll#2#(tuple#2(@vals,@key) ,@xs) -> quicksort#(@vals) 7: sortAll#2#(tuple#2(@vals,@key) ,@xs) -> sortAll#(@xs) 8: splitAndSort#(@l) -> sortAll#(split(@l)) Processor NaturalMI {miDimension = 2, miDegree = 2, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Nothing, greedy = NoGreedy}induces the complexity certificateTIME (?,O(n^2)) SPACE(?,?)on application of the dependency pairs {1} These cover all (indirect) predecessors of dependency pairs {1,2,3,8} their number of applications is equally bounded. The dependency pairs are shifted into the weak component. *** 1.1.1.1.1.1.1.2.1.1.1.2.1.1.1.1.1.2.1.2.1 Progress [(?,O(n^2))] *** Considered Problem: Strict DP Rules: quicksort#(@l) -> c_13(quicksort#1#(@l)) Strict TRS Rules: Weak DP Rules: quicksort#1#(::(@z,@zs)) -> c_14(quicksort#2#(splitqs(@z,@zs),@z),splitqs#(@z,@zs)) 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) splitAndSort#(@l) -> sortAll#(split(@l)) Weak TRS 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)) 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/2,c_17/1,c_18/1,c_19/0,c_20/2,c_21/1,c_22/1,c_23/0,c_24/1,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 basic terms: {#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#}/{#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} Applied Processor: NaturalMI {miDimension = 2, miDegree = 2, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Just first alternative for predecessorEstimation any intersect of rules of CDG leaf and strict-rules, greedy = NoGreedy} Proof: We apply a matrix interpretation of kind constructor based matrix interpretation: The following argument positions are considered usable: uargs(c_13) = {1}, uargs(c_14) = {1}, uargs(c_16) = {1,2} Following symbols are considered usable: {insert,insert#1,insert#2,insert#3,insert#4,split,split#1,splitqs,splitqs#1,splitqs#2,splitqs#3,#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#} TcT has computed the following interpretation: p(#0) = [0] [3] p(#EQ) = [0] [0] p(#GT) = [0] [0] p(#LT) = [0] [0] p(#and) = [1 2] x1 + [0] [0 3] [0] p(#ckgt) = [0] [3] p(#compare) = [1 0] x1 + [0 0] x2 + [2] [0 1] [1 1] [0] p(#eq) = [0] [1] p(#equal) = [0] [0] p(#false) = [2] [0] p(#greater) = [0] [0] p(#neg) = [0 0] x1 + [1] [0 1] [2] p(#pos) = [1 0] x1 + [0] [0 1] [0] p(#s) = [1 0] x1 + [2] [0 0] [0] p(#true) = [0] [0] p(::) = [0 3] x1 + [1 0] x2 + [0] [0 0] [0 1] [1] p(append) = [1] [2] p(append#1) = [0 2] x1 + [1 0] x2 + [1] [2 0] [1 1] [1] p(insert) = [1 0] x2 + [3] [0 1] [1] p(insert#1) = [1 0] x2 + [3] [0 1] [1] p(insert#2) = [1 0] x1 + [3] [0 1] [1] p(insert#3) = [0 3] x1 + [1 0] x3 + [3] [0 0] [0 1] [2] p(insert#4) = [1 0] x3 + [0 3] x5 + [3] [0 1] [0 0] [2] p(nil) = [0] [0] p(quicksort) = [2 0] x1 + [0] [0 0] [0] p(quicksort#1) = [0] [2] p(quicksort#2) = [2] [0] p(sortAll) = [1 0] x1 + [2] [0 0] [1] p(sortAll#1) = [0] [2] p(sortAll#2) = [0] [1] p(split) = [0 3] x1 + [0] [0 1] [0] p(split#1) = [0 3] x1 + [0] [0 1] [0] p(splitAndSort) = [0 0] x1 + [2] [0 2] [0] p(splitqs) = [0 0] x1 + [0 3] x2 + [0] [0 2] [0 2] [0] p(splitqs#1) = [0 3] x1 + [0 0] x2 + [0] [0 2] [0 2] [0] p(splitqs#2) = [1 0] x1 + [3] [0 1] [2] p(splitqs#3) = [0 3] x2 + [0 3] x3 + [3] [0 1] [0 0] [1] p(tuple#2) = [0 3] x1 + [0 3] x2 + [0] [0 1] [0 0] [0] p(#and#) = [0 0] x1 + [0] [1 0] [0] p(#ckgt#) = [0 2] x1 + [0] [1 0] [0] p(#compare#) = [2 0] x2 + [0] [2 2] [2] p(#eq#) = [1] [2] p(#equal#) = [1 1] x2 + [0] [0 0] [0] p(#greater#) = [1 0] x1 + [0] [0 1] [2] p(append#) = [0 0] x2 + [0] [2 2] [0] p(append#1#) = [0 1] x1 + [0 1] x2 + [2] [1 0] [0 0] [0] p(insert#) = [0 0] x2 + [0] [0 1] [2] p(insert#1#) = [0 0] x1 + [2] [1 0] [0] p(insert#2#) = [0 0] x1 + [0 0] x3 + [1] [0 2] [0 1] [1] p(insert#3#) = [2 2] x5 + [0] [0 1] [0] p(insert#4#) = [0 2] x1 + [1 2] x4 + [1] [2 0] [0 2] [0] p(quicksort#) = [0 3] x1 + [1] [0 0] [0] p(quicksort#1#) = [0 3] x1 + [0] [2 1] [3] p(quicksort#2#) = [1 0] x1 + [2] [0 0] [2] p(sortAll#) = [1 0] x1 + [2] [0 0] [0] p(sortAll#1#) = [1 0] x1 + [2] [0 0] [0] p(sortAll#2#) = [0 3] x1 + [1 0] x2 + [2] [0 0] [0 0] [0] p(split#) = [0 0] x1 + [1] [1 0] [0] p(split#1#) = [0] [0] p(splitAndSort#) = [0 3] x1 + [2] [2 2] [1] p(splitqs#) = [0 2] x1 + [2 0] x2 + [0] [0 2] [0 0] [1] p(splitqs#1#) = [0] [1] p(splitqs#2#) = [2 1] x1 + [0 0] x3 + [0] [0 2] [0 2] [1] p(splitqs#3#) = [1 2] x1 + [0 2] x3 + [1 0] x4 + [0] [0 2] [2 1] [1 2] [1] p(c_1) = [2 0] x1 + [2] [2 0] [0] p(c_2) = [2 0] x1 + [0 0] x2 + [1] [1 0] [2 0] [0] p(c_3) = [0 0] x1 + [0] [2 0] [0] p(c_4) = [1] [1] p(c_5) = [0] [2] p(c_6) = [0] [1] p(c_7) = [1] [0] p(c_8) = [0] [0] p(c_9) = [0] [2] p(c_10) = [0 1] x1 + [2] [0 2] [0] p(c_11) = [0 0] x1 + [0] [0 1] [0] p(c_12) = [0] [0] p(c_13) = [1 0] x1 + [0] [0 0] [0] p(c_14) = [1 0] x1 + [0 0] x2 + [1] [0 0] [1 2] [0] p(c_15) = [2] [1] p(c_16) = [1 0] x1 + [1 1] x2 + [0] [0 0] [0 1] [2] p(c_17) = [0 0] x1 + [0] [2 1] [0] p(c_18) = [0 0] x1 + [2] [0 2] [0] p(c_19) = [2] [0] p(c_20) = [0 0] x1 + [2 2] x2 + [2] [0 1] [0 2] [2] p(c_21) = [1] [0] p(c_22) = [2 0] x1 + [2] [0 0] [2] p(c_23) = [2] [0] p(c_24) = [1 0] x1 + [0] [0 2] [0] p(c_25) = [0] [1] p(c_26) = [0] [1] p(c_27) = [0] [0] p(c_28) = [0] [1] p(c_29) = [0] [1] p(c_30) = [0] [0] p(c_31) = [1] [0] p(c_32) = [2] [2] p(c_33) = [2] [0] p(c_34) = [0] [0] p(c_35) = [1] [0] p(c_36) = [2] [0] p(c_37) = [0] [1] p(c_38) = [1] [1] p(c_39) = [0] [2] p(c_40) = [2] [1] p(c_41) = [1] [1] p(c_42) = [1] [0] p(c_43) = [0 0] x1 + [1] [2 0] [1] p(c_44) = [0] [2] p(c_45) = [0] [0] p(c_46) = [1] [0] p(c_47) = [0 0] x1 + [0] [1 2] [2] p(c_48) = [0] [1] p(c_49) = [0] [0] p(c_50) = [1] [2] p(c_51) = [0] [0] p(c_52) = [0] [0] p(c_53) = [0] [0] p(c_54) = [1] [0] p(c_55) = [0 2] x1 + [0] [2 0] [0] p(c_56) = [2] [0] p(c_57) = [0] [1] p(c_58) = [0] [0] p(c_59) = [0] [2] p(c_60) = [1] [1] p(c_61) = [0] [2] p(c_62) = [2 0] x1 + [2 0] x2 + [0] [0 0] [2 2] [0] p(c_63) = [0] [1] p(c_64) = [1] [2] p(c_65) = [0] [0] p(c_66) = [1] [0] p(c_67) = [0] [1] p(c_68) = [1] [1] p(c_69) = [2] [0] p(c_70) = [0 0] x1 + [0 2] x3 + [0] [0 1] [1 1] [2] Following rules are strictly oriented: quicksort#(@l) = [0 3] @l + [1] [0 0] [0] > [0 3] @l + [0] [0 0] [0] = c_13(quicksort#1#(@l)) Following rules are (at-least) weakly oriented: quicksort#1#(::(@z,@zs)) = [0 0] @z + [0 3] @zs + [3] [0 6] [2 1] [4] >= [0 0] @z + [0 3] @zs + [3] [0 6] [2 0] [2] = c_14(quicksort#2#(splitqs(@z ,@zs) ,@z) ,splitqs#(@z,@zs)) quicksort#2#(tuple#2(@xs,@ys) = [0 3] @xs + [0 3] @ys + [2] ,@z) [0 0] [0 0] [2] >= [0 3] @xs + [0 3] @ys + [2] [0 0] [0 0] [2] = c_16(quicksort#(@xs) ,quicksort#(@ys)) sortAll#(@l) = [1 0] @l + [2] [0 0] [0] >= [1 0] @l + [2] [0 0] [0] = sortAll#1#(@l) sortAll#1#(::(@x,@xs)) = [0 3] @x + [1 0] @xs + [2] [0 0] [0 0] [0] >= [0 3] @x + [1 0] @xs + [2] [0 0] [0 0] [0] = sortAll#2#(@x,@xs) sortAll#2#(tuple#2(@vals,@key) = [0 3] @vals + [1 0] @xs + [2] ,@xs) [0 0] [0 0] [0] >= [0 3] @vals + [1] [0 0] [0] = quicksort#(@vals) sortAll#2#(tuple#2(@vals,@key) = [0 3] @vals + [1 0] @xs + [2] ,@xs) [0 0] [0 0] [0] >= [1 0] @xs + [2] [0 0] [0] = sortAll#(@xs) splitAndSort#(@l) = [0 3] @l + [2] [2 2] [1] >= [0 3] @l + [2] [0 0] [0] = sortAll#(split(@l)) insert(@x,@l) = [1 0] @l + [3] [0 1] [1] >= [1 0] @l + [3] [0 1] [1] = insert#1(@x,@l,@x) insert#1(tuple#2(@valX,@keyX) = [1 0] @l + [3] ,@l [0 1] [1] ,@x) >= [1 0] @l + [3] [0 1] [1] = insert#2(@l,@keyX,@valX,@x) insert#2(::(@l1,@ls) = [0 3] @l1 + [1 0] @ls + [3] ,@keyX [0 0] [0 1] [2] ,@valX ,@x) >= [0 3] @l1 + [1 0] @ls + [3] [0 0] [0 1] [2] = insert#3(@l1,@keyX,@ls,@valX,@x) insert#2(nil(),@keyX,@valX,@x) = [3] [1] >= [3] [1] = ::(tuple#2(::(@valX,nil()) ,@keyX) ,nil()) insert#3(tuple#2(@vals1,@key1) = [1 0] @ls + [0 3] @vals1 + [3] ,@keyX [0 1] [0 0] [2] ,@ls ,@valX ,@x) >= [1 0] @ls + [0 3] @vals1 + [3] [0 1] [0 0] [2] = insert#4(#equal(@key1,@keyX) ,@key1 ,@ls ,@valX ,@vals1 ,@x) insert#4(#false() = [1 0] @ls + [0 3] @vals1 + [3] ,@key1 [0 1] [0 0] [2] ,@ls ,@valX ,@vals1 ,@x) >= [1 0] @ls + [0 3] @vals1 + [3] [0 1] [0 0] [2] = ::(tuple#2(@vals1,@key1) ,insert(@x,@ls)) insert#4(#true() = [1 0] @ls + [0 3] @vals1 + [3] ,@key1 [0 1] [0 0] [2] ,@ls ,@valX ,@vals1 ,@x) >= [1 0] @ls + [0 3] @vals1 + [3] [0 1] [0 0] [1] = ::(tuple#2(::(@valX,@vals1) ,@key1) ,@ls) split(@l) = [0 3] @l + [0] [0 1] [0] >= [0 3] @l + [0] [0 1] [0] = split#1(@l) split#1(::(@x,@xs)) = [0 3] @xs + [3] [0 1] [1] >= [0 3] @xs + [3] [0 1] [1] = insert(@x,split(@xs)) split#1(nil()) = [0] [0] >= [0] [0] = nil() splitqs(@pivot,@l) = [0 3] @l + [0 0] @pivot + [0] [0 2] [0 2] [0] >= [0 3] @l + [0 0] @pivot + [0] [0 2] [0 2] [0] = splitqs#1(@l,@pivot) splitqs#1(::(@x,@xs),@pivot) = [0 0] @pivot + [0 3] @xs + [3] [0 2] [0 2] [2] >= [0 0] @pivot + [0 3] @xs + [3] [0 2] [0 2] [2] = splitqs#2(splitqs(@pivot,@xs) ,@pivot ,@x) splitqs#1(nil(),@pivot) = [0 0] @pivot + [0] [0 2] [0] >= [0] [0] = tuple#2(nil(),nil()) splitqs#2(tuple#2(@ls,@rs) = [0 3] @ls + [0 3] @rs + [3] ,@pivot [0 1] [0 0] [2] ,@x) >= [0 3] @ls + [0 3] @rs + [3] [0 1] [0 0] [1] = splitqs#3(#greater(@x,@pivot) ,@ls ,@rs ,@x) splitqs#3(#false(),@ls,@rs,@x) = [0 3] @ls + [0 3] @rs + [3] [0 1] [0 0] [1] >= [0 3] @ls + [0 3] @rs + [3] [0 1] [0 0] [1] = tuple#2(::(@x,@ls),@rs) splitqs#3(#true(),@ls,@rs,@x) = [0 3] @ls + [0 3] @rs + [3] [0 1] [0 0] [1] >= [0 3] @ls + [0 3] @rs + [3] [0 1] [0 0] [0] = tuple#2(@ls,::(@x,@rs)) *** 1.1.1.1.1.1.1.2.1.1.1.2.1.1.1.1.1.2.1.2.1.1 Progress [(?,O(1))] *** Considered Problem: Strict DP Rules: Strict TRS Rules: Weak DP Rules: 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(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) splitAndSort#(@l) -> sortAll#(split(@l)) Weak TRS 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)) 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/2,c_17/1,c_18/1,c_19/0,c_20/2,c_21/1,c_22/1,c_23/0,c_24/1,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 basic terms: {#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#}/{#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} Applied Processor: Assumption Proof: () *** 1.1.1.1.1.1.1.2.1.1.1.2.1.1.1.1.1.2.1.2.2 Progress [(O(1),O(1))] *** Considered Problem: Strict DP Rules: Strict TRS Rules: Weak DP Rules: 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(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) splitAndSort#(@l) -> sortAll#(split(@l)) Weak TRS 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)) 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/2,c_17/1,c_18/1,c_19/0,c_20/2,c_21/1,c_22/1,c_23/0,c_24/1,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 basic terms: {#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#}/{#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} Applied Processor: RemoveWeakSuffixes Proof: Consider the dependency graph 1:W:quicksort#(@l) -> c_13(quicksort#1#(@l)) -->_1 quicksort#1#(::(@z,@zs)) -> c_14(quicksort#2#(splitqs(@z,@zs),@z),splitqs#(@z,@zs)):2 2:W: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(quicksort#(@xs),quicksort#(@ys)):3 3:W:quicksort#2#(tuple#2(@xs,@ys),@z) -> c_16(quicksort#(@xs),quicksort#(@ys)) -->_2 quicksort#(@l) -> c_13(quicksort#1#(@l)):1 -->_1 quicksort#(@l) -> c_13(quicksort#1#(@l)):1 4:W:sortAll#(@l) -> sortAll#1#(@l) -->_1 sortAll#1#(::(@x,@xs)) -> sortAll#2#(@x,@xs):5 5:W:sortAll#1#(::(@x,@xs)) -> sortAll#2#(@x,@xs) -->_1 sortAll#2#(tuple#2(@vals,@key),@xs) -> sortAll#(@xs):7 -->_1 sortAll#2#(tuple#2(@vals,@key),@xs) -> quicksort#(@vals):6 6:W:sortAll#2#(tuple#2(@vals,@key),@xs) -> quicksort#(@vals) -->_1 quicksort#(@l) -> c_13(quicksort#1#(@l)):1 7:W:sortAll#2#(tuple#2(@vals,@key),@xs) -> sortAll#(@xs) -->_1 sortAll#(@l) -> sortAll#1#(@l):4 8:W:splitAndSort#(@l) -> sortAll#(split(@l)) -->_1 sortAll#(@l) -> sortAll#1#(@l):4 The following weak DPs constitute a sub-graph of the DG that is closed under successors. The DPs are removed. 8: splitAndSort#(@l) -> sortAll#(split(@l)) 4: sortAll#(@l) -> sortAll#1#(@l) 7: sortAll#2#(tuple#2(@vals,@key) ,@xs) -> sortAll#(@xs) 5: sortAll#1#(::(@x,@xs)) -> sortAll#2#(@x,@xs) 6: sortAll#2#(tuple#2(@vals,@key) ,@xs) -> quicksort#(@vals) 1: quicksort#(@l) -> c_13(quicksort#1#(@l)) 3: quicksort#2#(tuple#2(@xs,@ys) ,@z) -> c_16(quicksort#(@xs) ,quicksort#(@ys)) 2: quicksort#1#(::(@z,@zs)) -> c_14(quicksort#2#(splitqs(@z ,@zs) ,@z) ,splitqs#(@z,@zs)) *** 1.1.1.1.1.1.1.2.1.1.1.2.1.1.1.1.1.2.1.2.2.1 Progress [(O(1),O(1))] *** Considered Problem: Strict DP Rules: Strict TRS Rules: Weak DP Rules: Weak TRS 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)) 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/2,c_17/1,c_18/1,c_19/0,c_20/2,c_21/1,c_22/1,c_23/0,c_24/1,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 basic terms: {#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#}/{#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} Applied Processor: EmptyProcessor Proof: The problem is already closed. The intended complexity is O(1). *** 1.1.1.1.1.1.1.2.1.1.1.2.1.1.1.1.1.2.2 Progress [(?,O(n^2))] *** Considered Problem: Strict DP Rules: splitqs#(@pivot,@l) -> c_25(splitqs#1#(@l,@pivot)) splitqs#1#(::(@x,@xs),@pivot) -> c_26(splitqs#(@pivot,@xs)) Strict TRS Rules: Weak DP Rules: 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) -> 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 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)) 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/2,c_17/1,c_18/1,c_19/0,c_20/2,c_21/1,c_22/1,c_23/0,c_24/1,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 basic terms: {#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#}/{#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} Applied Processor: PredecessorEstimationCP {onSelectionCP = any intersect of rules of CDG leaf and strict-rules, withComplexityPair = NaturalMI {miDimension = 2, miDegree = 2, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Nothing, greedy = NoGreedy}} Proof: We first use the processor NaturalMI {miDimension = 2, miDegree = 2, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Nothing, greedy = NoGreedy} to orient following rules strictly: 1: splitqs#(@pivot,@l) -> c_25(splitqs#1#(@l,@pivot)) Consider the set of all dependency pairs 1: splitqs#(@pivot,@l) -> c_25(splitqs#1#(@l,@pivot)) 2: splitqs#1#(::(@x,@xs),@pivot) -> c_26(splitqs#(@pivot,@xs)) 3: quicksort#(@l) -> quicksort#1#(@l) 4: quicksort#1#(::(@z,@zs)) -> quicksort#2#(splitqs(@z,@zs),@z) 5: quicksort#1#(::(@z,@zs)) -> splitqs#(@z,@zs) 6: quicksort#2#(tuple#2(@xs,@ys) ,@z) -> quicksort#(@xs) 7: quicksort#2#(tuple#2(@xs,@ys) ,@z) -> quicksort#(@ys) 8: sortAll#(@l) -> sortAll#1#(@l) 9: sortAll#1#(::(@x,@xs)) -> sortAll#2#(@x,@xs) 10: sortAll#2#(tuple#2(@vals,@key) ,@xs) -> quicksort#(@vals) 11: sortAll#2#(tuple#2(@vals,@key) ,@xs) -> sortAll#(@xs) 12: splitAndSort#(@l) -> sortAll#(split(@l)) Processor NaturalMI {miDimension = 2, miDegree = 2, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Nothing, greedy = NoGreedy}induces the complexity certificateTIME (?,O(n^2)) SPACE(?,?)on application of the dependency pairs {1} These cover all (indirect) predecessors of dependency pairs {1,2,12} their number of applications is equally bounded. The dependency pairs are shifted into the weak component. *** 1.1.1.1.1.1.1.2.1.1.1.2.1.1.1.1.1.2.2.1 Progress [(?,O(n^2))] *** Considered Problem: Strict DP Rules: splitqs#(@pivot,@l) -> c_25(splitqs#1#(@l,@pivot)) splitqs#1#(::(@x,@xs),@pivot) -> c_26(splitqs#(@pivot,@xs)) Strict TRS Rules: Weak DP Rules: 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) -> 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 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)) 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/2,c_17/1,c_18/1,c_19/0,c_20/2,c_21/1,c_22/1,c_23/0,c_24/1,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 basic terms: {#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#}/{#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} Applied Processor: NaturalMI {miDimension = 2, miDegree = 2, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Just first alternative for predecessorEstimation any intersect of rules of CDG leaf and strict-rules, greedy = NoGreedy} Proof: We apply a matrix interpretation of kind constructor based matrix interpretation: The following argument positions are considered usable: uargs(c_25) = {1}, uargs(c_26) = {1} Following symbols are considered usable: {insert,insert#1,insert#2,insert#3,insert#4,split,split#1,splitqs,splitqs#1,splitqs#2,splitqs#3,#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#} TcT has computed the following interpretation: p(#0) = [0] [0] p(#EQ) = [0] [2] p(#GT) = [1] [0] p(#LT) = [0] [0] p(#and) = [0 1] x2 + [0] [0 2] [0] p(#ckgt) = [2 3] x1 + [1] [2 0] [0] p(#compare) = [0 1] x1 + [0 3] x2 + [1] [2 1] [0 0] [0] p(#eq) = [0 2] x2 + [0] [0 0] [0] p(#equal) = [0] [0] p(#false) = [0] [0] p(#greater) = [0] [0] p(#neg) = [1 0] x1 + [2] [0 0] [0] p(#pos) = [0 1] x1 + [0] [0 1] [0] p(#s) = [0 3] x1 + [0] [0 1] [1] p(#true) = [0] [0] p(::) = [0 1] x1 + [1 0] x2 + [0] [0 0] [0 1] [1] p(append) = [0 2] x1 + [0] [2 2] [0] p(append#1) = [0 0] x1 + [0] [0 2] [0] p(insert) = [1 0] x2 + [1] [0 1] [1] p(insert#1) = [1 0] x2 + [1] [0 1] [1] p(insert#2) = [1 0] x1 + [1] [0 1] [1] p(insert#3) = [0 1] x1 + [1 0] x3 + [1] [0 0] [0 1] [2] p(insert#4) = [1 0] x3 + [0 1] x5 + [1] [0 1] [0 0] [2] p(nil) = [0] [0] p(quicksort) = [0 1] x1 + [0] [0 2] [1] p(quicksort#1) = [0] [1] p(quicksort#2) = [1 1] x1 + [2 0] x2 + [1] [0 0] [0 2] [2] p(sortAll) = [0 0] x1 + [2] [0 1] [1] p(sortAll#1) = [1] [0] p(sortAll#2) = [2] [2] p(split) = [0 1] x1 + [0] [0 1] [0] p(split#1) = [0 1] x1 + [0] [0 1] [0] p(splitAndSort) = [1 2] x1 + [0] [2 2] [0] p(splitqs) = [0 2] x2 + [0] [0 2] [1] p(splitqs#1) = [0 2] x1 + [0] [0 2] [1] p(splitqs#2) = [1 0] x1 + [2] [1 0] [2] p(splitqs#3) = [0 2] x2 + [0 2] x3 + [2] [0 1] [0 1] [2] p(tuple#2) = [0 2] x1 + [0 2] x2 + [0] [0 1] [0 0] [0] p(#and#) = [0 1] x1 + [0 1] x2 + [2] [0 0] [1 2] [0] p(#ckgt#) = [2 2] x1 + [2] [0 2] [0] p(#compare#) = [2] [0] p(#eq#) = [2 0] x2 + [0] [0 2] [0] p(#equal#) = [2] [0] p(#greater#) = [0 0] x1 + [0] [1 1] [0] p(append#) = [1 2] x1 + [0 0] x2 + [0] [0 1] [0 2] [0] p(append#1#) = [0 0] x2 + [0] [0 2] [0] p(insert#) = [0 0] x1 + [0 0] x2 + [0] [2 1] [1 1] [1] p(insert#1#) = [1 2] x1 + [2 1] x2 + [1] [0 1] [0 1] [2] p(insert#2#) = [0 1] x1 + [0 1] x3 + [2 0] x4 + [0] [1 0] [2 0] [0 0] [1] p(insert#3#) = [2 0] x1 + [1 0] x3 + [0 2] x4 + [0 0] x5 + [0] [0 0] [0 1] [2 1] [0 1] [2] p(insert#4#) = [0 1] x1 + [0 0] x2 + [2 0] x3 + [0 0] x4 + [0 2] x5 + [2] [1 2] [1 0] [0 1] [0 1] [2 2] [2] p(quicksort#) = [0 2] x1 + [0] [0 2] [0] p(quicksort#1#) = [0 2] x1 + [0] [0 2] [0] p(quicksort#2#) = [1 0] x1 + [0] [1 0] [2] p(sortAll#) = [2 1] x1 + [0] [2 0] [1] p(sortAll#1#) = [2 1] x1 + [0] [2 0] [1] p(sortAll#2#) = [0 2] x1 + [2 1] x2 + [0] [0 2] [2 0] [1] p(split#) = [0] [0] p(split#1#) = [0] [2] p(splitAndSort#) = [2 3] x1 + [0] [2 2] [1] p(splitqs#) = [0 2] x2 + [2] [0 0] [0] p(splitqs#1#) = [0 2] x1 + [0] [0 0] [1] p(splitqs#2#) = [1 0] x1 + [2 1] x2 + [0 1] x3 + [0] [0 1] [0 1] [1 2] [0] p(splitqs#3#) = [0 2] x2 + [0] [0 0] [0] p(c_1) = [2 0] x1 + [0] [0 0] [1] p(c_2) = [0 1] x1 + [1 2] x2 + [0] [0 1] [0 1] [0] p(c_3) = [2 0] x1 + [1] [1 1] [0] p(c_4) = [0 0] x1 + [0] [1 2] [0] p(c_5) = [1] [2] p(c_6) = [1 1] x1 + [1] [0 0] [2] p(c_7) = [2] [1] p(c_8) = [0 0] x1 + [0] [2 0] [0] p(c_9) = [0] [2] p(c_10) = [0 0] x1 + [2] [1 0] [0] p(c_11) = [0] [0] p(c_12) = [0] [0] p(c_13) = [0 2] x1 + [2] [0 0] [0] p(c_14) = [0 0] x2 + [0] [0 1] [0] p(c_15) = [0] [0] p(c_16) = [0 0] x2 + [0] [2 0] [0] p(c_17) = [0 0] x1 + [0] [2 0] [0] p(c_18) = [2 2] x1 + [2] [0 0] [0] p(c_19) = [2] [0] p(c_20) = [0 1] x1 + [2 1] x2 + [0] [0 1] [0 0] [0] p(c_21) = [0 0] x1 + [0] [1 1] [1] p(c_22) = [0] [0] p(c_23) = [0] [0] p(c_24) = [1] [0] p(c_25) = [1 0] x1 + [0] [0 0] [0] p(c_26) = [1 0] x1 + [0] [0 1] [0] p(c_27) = [2] [1] p(c_28) = [0] [0] p(c_29) = [1] [2] p(c_30) = [0] [0] p(c_31) = [0] [0] p(c_32) = [0] [2] p(c_33) = [0] [1] p(c_34) = [0] [2] p(c_35) = [1] [1] p(c_36) = [0] [0] p(c_37) = [1] [0] p(c_38) = [0] [1] p(c_39) = [2] [0] p(c_40) = [0] [0] p(c_41) = [2] [1] p(c_42) = [0] [2] p(c_43) = [1 0] x1 + [1] [1 0] [0] p(c_44) = [1] [2] p(c_45) = [0] [0] p(c_46) = [2] [0] p(c_47) = [2 0] x1 + [0] [1 0] [1] p(c_48) = [1] [1] p(c_49) = [0] [0] p(c_50) = [1] [2] p(c_51) = [0] [0] p(c_52) = [1] [0] p(c_53) = [0] [0] p(c_54) = [1] [0] p(c_55) = [1 2] x1 + [1] [0 0] [0] p(c_56) = [2] [1] p(c_57) = [0] [2] p(c_58) = [1] [2] p(c_59) = [0 1] x1 + [0] [0 0] [2] p(c_60) = [1] [1] p(c_61) = [0 0] x1 + [0] [0 2] [1] p(c_62) = [2] [0] p(c_63) = [0] [0] p(c_64) = [2] [0] p(c_65) = [0] [1] p(c_66) = [1] [1] p(c_67) = [0] [0] p(c_68) = [2] [0] p(c_69) = [1] [1] p(c_70) = [2 0] x1 + [2 2] x3 + [0] [0 2] [2 0] [1] Following rules are strictly oriented: splitqs#(@pivot,@l) = [0 2] @l + [2] [0 0] [0] > [0 2] @l + [0] [0 0] [0] = c_25(splitqs#1#(@l,@pivot)) Following rules are (at-least) weakly oriented: quicksort#(@l) = [0 2] @l + [0] [0 2] [0] >= [0 2] @l + [0] [0 2] [0] = quicksort#1#(@l) quicksort#1#(::(@z,@zs)) = [0 2] @zs + [2] [0 2] [2] >= [0 2] @zs + [0] [0 2] [2] = quicksort#2#(splitqs(@z,@zs),@z) quicksort#1#(::(@z,@zs)) = [0 2] @zs + [2] [0 2] [2] >= [0 2] @zs + [2] [0 0] [0] = splitqs#(@z,@zs) quicksort#2#(tuple#2(@xs,@ys) = [0 2] @xs + [0 2] @ys + [0] ,@z) [0 2] [0 2] [2] >= [0 2] @xs + [0] [0 2] [0] = quicksort#(@xs) quicksort#2#(tuple#2(@xs,@ys) = [0 2] @xs + [0 2] @ys + [0] ,@z) [0 2] [0 2] [2] >= [0 2] @ys + [0] [0 2] [0] = quicksort#(@ys) sortAll#(@l) = [2 1] @l + [0] [2 0] [1] >= [2 1] @l + [0] [2 0] [1] = sortAll#1#(@l) sortAll#1#(::(@x,@xs)) = [0 2] @x + [2 1] @xs + [1] [0 2] [2 0] [1] >= [0 2] @x + [2 1] @xs + [0] [0 2] [2 0] [1] = sortAll#2#(@x,@xs) sortAll#2#(tuple#2(@vals,@key) = [0 2] @vals + [2 1] @xs + [0] ,@xs) [0 2] [2 0] [1] >= [0 2] @vals + [0] [0 2] [0] = quicksort#(@vals) sortAll#2#(tuple#2(@vals,@key) = [0 2] @vals + [2 1] @xs + [0] ,@xs) [0 2] [2 0] [1] >= [2 1] @xs + [0] [2 0] [1] = sortAll#(@xs) splitAndSort#(@l) = [2 3] @l + [0] [2 2] [1] >= [0 3] @l + [0] [0 2] [1] = sortAll#(split(@l)) splitqs#1#(::(@x,@xs),@pivot) = [0 2] @xs + [2] [0 0] [1] >= [0 2] @xs + [2] [0 0] [0] = c_26(splitqs#(@pivot,@xs)) insert(@x,@l) = [1 0] @l + [1] [0 1] [1] >= [1 0] @l + [1] [0 1] [1] = insert#1(@x,@l,@x) insert#1(tuple#2(@valX,@keyX) = [1 0] @l + [1] ,@l [0 1] [1] ,@x) >= [1 0] @l + [1] [0 1] [1] = insert#2(@l,@keyX,@valX,@x) insert#2(::(@l1,@ls) = [0 1] @l1 + [1 0] @ls + [1] ,@keyX [0 0] [0 1] [2] ,@valX ,@x) >= [0 1] @l1 + [1 0] @ls + [1] [0 0] [0 1] [2] = insert#3(@l1,@keyX,@ls,@valX,@x) insert#2(nil(),@keyX,@valX,@x) = [1] [1] >= [1] [1] = ::(tuple#2(::(@valX,nil()) ,@keyX) ,nil()) insert#3(tuple#2(@vals1,@key1) = [1 0] @ls + [0 1] @vals1 + [1] ,@keyX [0 1] [0 0] [2] ,@ls ,@valX ,@x) >= [1 0] @ls + [0 1] @vals1 + [1] [0 1] [0 0] [2] = insert#4(#equal(@key1,@keyX) ,@key1 ,@ls ,@valX ,@vals1 ,@x) insert#4(#false() = [1 0] @ls + [0 1] @vals1 + [1] ,@key1 [0 1] [0 0] [2] ,@ls ,@valX ,@vals1 ,@x) >= [1 0] @ls + [0 1] @vals1 + [1] [0 1] [0 0] [2] = ::(tuple#2(@vals1,@key1) ,insert(@x,@ls)) insert#4(#true() = [1 0] @ls + [0 1] @vals1 + [1] ,@key1 [0 1] [0 0] [2] ,@ls ,@valX ,@vals1 ,@x) >= [1 0] @ls + [0 1] @vals1 + [1] [0 1] [0 0] [1] = ::(tuple#2(::(@valX,@vals1) ,@key1) ,@ls) split(@l) = [0 1] @l + [0] [0 1] [0] >= [0 1] @l + [0] [0 1] [0] = split#1(@l) split#1(::(@x,@xs)) = [0 1] @xs + [1] [0 1] [1] >= [0 1] @xs + [1] [0 1] [1] = insert(@x,split(@xs)) split#1(nil()) = [0] [0] >= [0] [0] = nil() splitqs(@pivot,@l) = [0 2] @l + [0] [0 2] [1] >= [0 2] @l + [0] [0 2] [1] = splitqs#1(@l,@pivot) splitqs#1(::(@x,@xs),@pivot) = [0 2] @xs + [2] [0 2] [3] >= [0 2] @xs + [2] [0 2] [2] = splitqs#2(splitqs(@pivot,@xs) ,@pivot ,@x) splitqs#1(nil(),@pivot) = [0] [1] >= [0] [0] = tuple#2(nil(),nil()) splitqs#2(tuple#2(@ls,@rs) = [0 2] @ls + [0 2] @rs + [2] ,@pivot [0 2] [0 2] [2] ,@x) >= [0 2] @ls + [0 2] @rs + [2] [0 1] [0 1] [2] = splitqs#3(#greater(@x,@pivot) ,@ls ,@rs ,@x) splitqs#3(#false(),@ls,@rs,@x) = [0 2] @ls + [0 2] @rs + [2] [0 1] [0 1] [2] >= [0 2] @ls + [0 2] @rs + [2] [0 1] [0 0] [1] = tuple#2(::(@x,@ls),@rs) splitqs#3(#true(),@ls,@rs,@x) = [0 2] @ls + [0 2] @rs + [2] [0 1] [0 1] [2] >= [0 2] @ls + [0 2] @rs + [2] [0 1] [0 0] [0] = tuple#2(@ls,::(@x,@rs)) *** 1.1.1.1.1.1.1.2.1.1.1.2.1.1.1.1.1.2.2.1.1 Progress [(?,O(1))] *** Considered Problem: Strict DP Rules: splitqs#1#(::(@x,@xs),@pivot) -> c_26(splitqs#(@pivot,@xs)) Strict TRS Rules: Weak DP Rules: 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) -> 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)) Weak TRS 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)) 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/2,c_17/1,c_18/1,c_19/0,c_20/2,c_21/1,c_22/1,c_23/0,c_24/1,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 basic terms: {#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#}/{#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} Applied Processor: Assumption Proof: () *** 1.1.1.1.1.1.1.2.1.1.1.2.1.1.1.1.1.2.2.2 Progress [(O(1),O(1))] *** Considered Problem: Strict DP Rules: Strict TRS Rules: Weak DP Rules: 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) -> 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 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)) 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/2,c_17/1,c_18/1,c_19/0,c_20/2,c_21/1,c_22/1,c_23/0,c_24/1,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 basic terms: {#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#}/{#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} Applied Processor: RemoveWeakSuffixes Proof: Consider the dependency graph 1:W:quicksort#(@l) -> quicksort#1#(@l) -->_1 quicksort#1#(::(@z,@zs)) -> splitqs#(@z,@zs):3 -->_1 quicksort#1#(::(@z,@zs)) -> quicksort#2#(splitqs(@z,@zs),@z):2 2:W:quicksort#1#(::(@z,@zs)) -> quicksort#2#(splitqs(@z,@zs),@z) -->_1 quicksort#2#(tuple#2(@xs,@ys),@z) -> quicksort#(@ys):5 -->_1 quicksort#2#(tuple#2(@xs,@ys),@z) -> quicksort#(@xs):4 3:W:quicksort#1#(::(@z,@zs)) -> splitqs#(@z,@zs) -->_1 splitqs#(@pivot,@l) -> c_25(splitqs#1#(@l,@pivot)):11 4:W:quicksort#2#(tuple#2(@xs,@ys),@z) -> quicksort#(@xs) -->_1 quicksort#(@l) -> quicksort#1#(@l):1 5:W:quicksort#2#(tuple#2(@xs,@ys),@z) -> quicksort#(@ys) -->_1 quicksort#(@l) -> quicksort#1#(@l):1 6:W:sortAll#(@l) -> sortAll#1#(@l) -->_1 sortAll#1#(::(@x,@xs)) -> sortAll#2#(@x,@xs):7 7:W:sortAll#1#(::(@x,@xs)) -> sortAll#2#(@x,@xs) -->_1 sortAll#2#(tuple#2(@vals,@key),@xs) -> sortAll#(@xs):9 -->_1 sortAll#2#(tuple#2(@vals,@key),@xs) -> quicksort#(@vals):8 8:W:sortAll#2#(tuple#2(@vals,@key),@xs) -> quicksort#(@vals) -->_1 quicksort#(@l) -> quicksort#1#(@l):1 9:W:sortAll#2#(tuple#2(@vals,@key),@xs) -> sortAll#(@xs) -->_1 sortAll#(@l) -> sortAll#1#(@l):6 10:W:splitAndSort#(@l) -> sortAll#(split(@l)) -->_1 sortAll#(@l) -> sortAll#1#(@l):6 11:W:splitqs#(@pivot,@l) -> c_25(splitqs#1#(@l,@pivot)) -->_1 splitqs#1#(::(@x,@xs),@pivot) -> c_26(splitqs#(@pivot,@xs)):12 12:W:splitqs#1#(::(@x,@xs),@pivot) -> c_26(splitqs#(@pivot,@xs)) -->_1 splitqs#(@pivot,@l) -> c_25(splitqs#1#(@l,@pivot)):11 The following weak DPs constitute a sub-graph of the DG that is closed under successors. The DPs are removed. 10: splitAndSort#(@l) -> sortAll#(split(@l)) 6: sortAll#(@l) -> sortAll#1#(@l) 9: sortAll#2#(tuple#2(@vals,@key) ,@xs) -> sortAll#(@xs) 7: sortAll#1#(::(@x,@xs)) -> sortAll#2#(@x,@xs) 8: sortAll#2#(tuple#2(@vals,@key) ,@xs) -> quicksort#(@vals) 1: quicksort#(@l) -> quicksort#1#(@l) 5: quicksort#2#(tuple#2(@xs,@ys) ,@z) -> quicksort#(@ys) 2: quicksort#1#(::(@z,@zs)) -> quicksort#2#(splitqs(@z,@zs),@z) 4: quicksort#2#(tuple#2(@xs,@ys) ,@z) -> quicksort#(@xs) 3: quicksort#1#(::(@z,@zs)) -> splitqs#(@z,@zs) 11: splitqs#(@pivot,@l) -> c_25(splitqs#1#(@l,@pivot)) 12: splitqs#1#(::(@x,@xs),@pivot) -> c_26(splitqs#(@pivot,@xs)) *** 1.1.1.1.1.1.1.2.1.1.1.2.1.1.1.1.1.2.2.2.1 Progress [(O(1),O(1))] *** Considered Problem: Strict DP Rules: Strict TRS Rules: Weak DP Rules: Weak TRS 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)) 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/2,c_17/1,c_18/1,c_19/0,c_20/2,c_21/1,c_22/1,c_23/0,c_24/1,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 basic terms: {#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#}/{#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} Applied Processor: EmptyProcessor Proof: The problem is already closed. The intended complexity is O(1). *** 1.1.1.1.1.1.1.2.1.1.1.2.1.1.2 Progress [(?,O(n^1))] *** Considered Problem: Strict DP Rules: 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(split#(@xs)) splitAndSort#(@l) -> c_24(sortAll#(split(@l)),split#(@l)) Strict TRS Rules: Weak DP Rules: 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(quicksort#(@xs),quicksort#(@ys)) splitqs#(@pivot,@l) -> c_25(splitqs#1#(@l,@pivot)) splitqs#1#(::(@x,@xs),@pivot) -> c_26(splitqs#(@pivot,@xs)) Weak TRS 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)) 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/2,c_17/1,c_18/1,c_19/0,c_20/2,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 basic terms: {#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#}/{#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} Applied Processor: RemoveWeakSuffixes Proof: 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)) -->_1 quicksort#(@l) -> c_13(quicksort#1#(@l)):7 -->_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(split#(@xs)):5 5:S:split#1#(::(@x,@xs)) -> c_22(split#(@xs)) -->_1 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 7:W:quicksort#(@l) -> c_13(quicksort#1#(@l)) -->_1 quicksort#1#(::(@z,@zs)) -> c_14(quicksort#2#(splitqs(@z,@zs),@z),splitqs#(@z,@zs)):8 8:W: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)):10 -->_1 quicksort#2#(tuple#2(@xs,@ys),@z) -> c_16(quicksort#(@xs),quicksort#(@ys)):9 9:W:quicksort#2#(tuple#2(@xs,@ys),@z) -> c_16(quicksort#(@xs),quicksort#(@ys)) -->_2 quicksort#(@l) -> c_13(quicksort#1#(@l)):7 -->_1 quicksort#(@l) -> c_13(quicksort#1#(@l)):7 10:W:splitqs#(@pivot,@l) -> c_25(splitqs#1#(@l,@pivot)) -->_1 splitqs#1#(::(@x,@xs),@pivot) -> c_26(splitqs#(@pivot,@xs)):11 11:W:splitqs#1#(::(@x,@xs),@pivot) -> c_26(splitqs#(@pivot,@xs)) -->_1 splitqs#(@pivot,@l) -> c_25(splitqs#1#(@l,@pivot)):10 The following weak DPs constitute a sub-graph of the DG that is closed under successors. The DPs are removed. 7: quicksort#(@l) -> c_13(quicksort#1#(@l)) 9: quicksort#2#(tuple#2(@xs,@ys) ,@z) -> c_16(quicksort#(@xs) ,quicksort#(@ys)) 8: quicksort#1#(::(@z,@zs)) -> c_14(quicksort#2#(splitqs(@z ,@zs) ,@z) ,splitqs#(@z,@zs)) 10: splitqs#(@pivot,@l) -> c_25(splitqs#1#(@l,@pivot)) 11: splitqs#1#(::(@x,@xs),@pivot) -> c_26(splitqs#(@pivot,@xs)) *** 1.1.1.1.1.1.1.2.1.1.1.2.1.1.2.1 Progress [(?,O(n^1))] *** Considered Problem: Strict DP Rules: 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(split#(@xs)) splitAndSort#(@l) -> c_24(sortAll#(split(@l)),split#(@l)) Strict TRS Rules: Weak DP Rules: Weak TRS 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)) 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/2,c_17/1,c_18/1,c_19/0,c_20/2,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 basic terms: {#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#}/{#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} Applied Processor: SimplifyRHS Proof: 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(split#(@xs)):5 5:S:split#1#(::(@x,@xs)) -> c_22(split#(@xs)) -->_1 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)) *** 1.1.1.1.1.1.1.2.1.1.1.2.1.1.2.1.1 Progress [(?,O(n^1))] *** Considered Problem: Strict DP Rules: 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)) Strict TRS Rules: Weak DP Rules: Weak TRS 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)) 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/2,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 basic terms: {#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#}/{#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} Applied Processor: UsableRules Proof: 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)) *** 1.1.1.1.1.1.1.2.1.1.1.2.1.1.2.1.1.1 Progress [(?,O(n^1))] *** Considered Problem: Strict DP Rules: 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)) Strict TRS Rules: Weak DP Rules: Weak TRS 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() 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/2,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 basic terms: {#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#}/{#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} Applied Processor: Decompose {onSelection = all cycle independent sub-graph, withBound = RelativeAdd} Proof: We analyse the complexity of following sub-problems (R) and (S). Problem (S) is obtained from the input problem by shifting strict rules from (R) into the weak component. Problem (R) Strict DP Rules: 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)) Strict TRS Rules: Weak DP Rules: 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 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() 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/2,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 basic terms: {#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#}/{#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} Problem (S) Strict DP Rules: split#(@l) -> c_21(split#1#(@l)) split#1#(::(@x,@xs)) -> c_22(split#(@xs)) splitAndSort#(@l) -> c_24(sortAll#(split(@l)),split#(@l)) Strict TRS Rules: Weak DP Rules: 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)) Weak TRS 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() 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/2,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 basic terms: {#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#}/{#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} *** 1.1.1.1.1.1.1.2.1.1.1.2.1.1.2.1.1.1.1 Progress [(?,O(n^1))] *** Considered Problem: Strict DP Rules: 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)) Strict TRS Rules: Weak DP Rules: 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 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() 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/2,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 basic terms: {#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#}/{#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} Applied Processor: RemoveWeakSuffixes Proof: 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(sortAll#(@xs)):3 3:S:sortAll#2#(tuple#2(@vals,@key),@xs) -> c_20(sortAll#(@xs)) -->_1 sortAll#(@l) -> c_17(sortAll#1#(@l)):1 4:W:split#(@l) -> c_21(split#1#(@l)) -->_1 split#1#(::(@x,@xs)) -> c_22(split#(@xs)):5 5:W:split#1#(::(@x,@xs)) -> c_22(split#(@xs)) -->_1 split#(@l) -> c_21(split#1#(@l)):4 6:W: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 The following weak DPs constitute a sub-graph of the DG that is closed under successors. The DPs are removed. 4: split#(@l) -> c_21(split#1#(@l)) 5: split#1#(::(@x,@xs)) -> c_22(split#(@xs)) *** 1.1.1.1.1.1.1.2.1.1.1.2.1.1.2.1.1.1.1.1 Progress [(?,O(n^1))] *** Considered Problem: Strict DP Rules: 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)) Strict TRS Rules: Weak DP Rules: splitAndSort#(@l) -> c_24(sortAll#(split(@l)),split#(@l)) Weak TRS 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() 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/2,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 basic terms: {#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#}/{#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} Applied Processor: SimplifyRHS Proof: 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(sortAll#(@xs)):3 3:S:sortAll#2#(tuple#2(@vals,@key),@xs) -> c_20(sortAll#(@xs)) -->_1 sortAll#(@l) -> c_17(sortAll#1#(@l)):1 6:W:splitAndSort#(@l) -> c_24(sortAll#(split(@l)),split#(@l)) -->_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: splitAndSort#(@l) -> c_24(sortAll#(split(@l))) *** 1.1.1.1.1.1.1.2.1.1.1.2.1.1.2.1.1.1.1.1.1 Progress [(?,O(n^1))] *** Considered Problem: Strict DP Rules: 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)) Strict TRS Rules: Weak DP Rules: splitAndSort#(@l) -> c_24(sortAll#(split(@l))) Weak TRS 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() 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/2,c_17/1,c_18/1,c_19/0,c_20/1,c_21/1,c_22/1,c_23/0,c_24/1,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 basic terms: {#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#}/{#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} Applied Processor: PredecessorEstimationCP {onSelectionCP = any intersect of rules of CDG leaf and strict-rules, withComplexityPair = NaturalMI {miDimension = 1, miDegree = 1, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Nothing, greedy = NoGreedy}} Proof: We first use the processor NaturalMI {miDimension = 1, miDegree = 1, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Nothing, greedy = NoGreedy} to orient following rules strictly: 2: sortAll#1#(::(@x,@xs)) -> c_18(sortAll#2#(@x,@xs)) Consider the set of all dependency pairs 1: sortAll#(@l) -> c_17(sortAll#1#(@l)) 2: sortAll#1#(::(@x,@xs)) -> c_18(sortAll#2#(@x,@xs)) 3: sortAll#2#(tuple#2(@vals,@key) ,@xs) -> c_20(sortAll#(@xs)) 4: splitAndSort#(@l) -> c_24(sortAll#(split(@l))) Processor NaturalMI {miDimension = 1, miDegree = 1, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Nothing, greedy = NoGreedy}induces the complexity certificateTIME (?,O(n^1)) SPACE(?,?)on application of the dependency pairs {2} These cover all (indirect) predecessors of dependency pairs {1,2,3,4} their number of applications is equally bounded. The dependency pairs are shifted into the weak component. *** 1.1.1.1.1.1.1.2.1.1.1.2.1.1.2.1.1.1.1.1.1.1 Progress [(?,O(n^1))] *** Considered Problem: Strict DP Rules: 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)) Strict TRS Rules: Weak DP Rules: splitAndSort#(@l) -> c_24(sortAll#(split(@l))) Weak TRS 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() 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/2,c_17/1,c_18/1,c_19/0,c_20/1,c_21/1,c_22/1,c_23/0,c_24/1,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 basic terms: {#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#}/{#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} Applied Processor: NaturalMI {miDimension = 1, miDegree = 1, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Just first alternative for predecessorEstimation any intersect of rules of CDG leaf and strict-rules, greedy = NoGreedy} Proof: We apply a matrix interpretation of kind constructor based matrix interpretation: The following argument positions are considered usable: uargs(c_17) = {1}, uargs(c_18) = {1}, uargs(c_20) = {1}, uargs(c_24) = {1} Following symbols are considered usable: {#and,#eq,#equal,insert,insert#1,insert#2,insert#3,insert#4,split,split#1,#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#} TcT has computed the following interpretation: p(#0) = [0] p(#EQ) = [0] p(#GT) = [0] p(#LT) = [1] p(#and) = [1] x2 + [0] p(#ckgt) = [0] p(#compare) = [0] p(#eq) = [1] p(#equal) = [1] p(#false) = [1] p(#greater) = [0] p(#neg) = [1] x1 + [0] p(#pos) = [1] x1 + [0] p(#s) = [1] x1 + [0] p(#true) = [1] p(::) = [1] x2 + [2] p(append) = [0] p(append#1) = [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 + [3] 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 + [2] p(split#1) = [2] x1 + [0] p(splitAndSort) = [0] p(splitqs) = [0] p(splitqs#1) = [0] p(splitqs#2) = [0] p(splitqs#3) = [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#) = [2] x2 + [2] p(insert#) = [1] x2 + [0] p(insert#1#) = [4] x2 + [0] p(insert#2#) = [1] x4 + [2] p(insert#3#) = [1] x2 + [1] p(insert#4#) = [1] p(quicksort#) = [1] p(quicksort#1#) = [1] p(quicksort#2#) = [0] p(sortAll#) = [2] x1 + [2] p(sortAll#1#) = [2] x1 + [2] p(sortAll#2#) = [2] x2 + [2] p(split#) = [1] x1 + [1] p(split#1#) = [2] p(splitAndSort#) = [4] x1 + [7] p(splitqs#) = [0] p(splitqs#1#) = [4] x1 + [1] p(splitqs#2#) = [2] x3 + [1] p(splitqs#3#) = [4] x2 + [0] p(c_1) = [2] p(c_2) = [1] x1 + [4] p(c_3) = [4] p(c_4) = [0] p(c_5) = [0] p(c_6) = [2] p(c_7) = [0] p(c_8) = [1] p(c_9) = [0] p(c_10) = [0] p(c_11) = [0] p(c_12) = [0] p(c_13) = [0] p(c_14) = [1] x1 + [1] p(c_15) = [0] p(c_16) = [1] x1 + [4] x2 + [0] p(c_17) = [1] x1 + [0] p(c_18) = [1] x1 + [2] p(c_19) = [0] p(c_20) = [1] x1 + [0] p(c_21) = [2] x1 + [2] p(c_22) = [1] x1 + [0] p(c_23) = [0] p(c_24) = [1] x1 + [1] p(c_25) = [4] x1 + [1] p(c_26) = [2] p(c_27) = [1] p(c_28) = [1] x1 + [1] p(c_29) = [1] p(c_30) = [4] p(c_31) = [0] p(c_32) = [0] p(c_33) = [0] p(c_34) = [0] p(c_35) = [1] p(c_36) = [1] p(c_37) = [1] p(c_38) = [0] p(c_39) = [4] p(c_40) = [0] p(c_41) = [0] p(c_42) = [0] p(c_43) = [1] x1 + [1] p(c_44) = [4] p(c_45) = [4] p(c_46) = [0] p(c_47) = [1] x1 + [2] p(c_48) = [1] p(c_49) = [4] x1 + [0] p(c_50) = [0] p(c_51) = [1] p(c_52) = [1] p(c_53) = [1] p(c_54) = [0] p(c_55) = [0] p(c_56) = [1] p(c_57) = [1] p(c_58) = [2] p(c_59) = [4] x1 + [0] p(c_60) = [0] p(c_61) = [1] x1 + [0] p(c_62) = [1] x3 + [0] p(c_63) = [1] p(c_64) = [0] p(c_65) = [0] p(c_66) = [1] p(c_67) = [4] p(c_68) = [4] p(c_69) = [0] p(c_70) = [0] Following rules are strictly oriented: sortAll#1#(::(@x,@xs)) = [2] @xs + [6] > [2] @xs + [4] = c_18(sortAll#2#(@x,@xs)) Following rules are (at-least) weakly oriented: sortAll#(@l) = [2] @l + [2] >= [2] @l + [2] = c_17(sortAll#1#(@l)) sortAll#2#(tuple#2(@vals,@key) = [2] @xs + [2] ,@xs) >= [2] @xs + [2] = c_20(sortAll#(@xs)) splitAndSort#(@l) = [4] @l + [7] >= [4] @l + [7] = c_24(sortAll#(split(@l))) #and(#false(),#false()) = [1] >= [1] = #false() #and(#false(),#true()) = [1] >= [1] = #false() #and(#true(),#false()) = [1] >= [1] = #false() #and(#true(),#true()) = [1] >= [1] = #true() #eq(#0(),#0()) = [1] >= [1] = #true() #eq(#0(),#neg(@y)) = [1] >= [1] = #false() #eq(#0(),#pos(@y)) = [1] >= [1] = #false() #eq(#0(),#s(@y)) = [1] >= [1] = #false() #eq(#neg(@x),#0()) = [1] >= [1] = #false() #eq(#neg(@x),#neg(@y)) = [1] >= [1] = #eq(@x,@y) #eq(#neg(@x),#pos(@y)) = [1] >= [1] = #false() #eq(#pos(@x),#0()) = [1] >= [1] = #false() #eq(#pos(@x),#neg(@y)) = [1] >= [1] = #false() #eq(#pos(@x),#pos(@y)) = [1] >= [1] = #eq(@x,@y) #eq(#s(@x),#0()) = [1] >= [1] = #false() #eq(#s(@x),#s(@y)) = [1] >= [1] = #eq(@x,@y) #eq(::(@x_1,@x_2),::(@y_1,@y_2)) = [1] >= [1] = #and(#eq(@x_1,@y_1) ,#eq(@x_2,@y_2)) #eq(::(@x_1,@x_2),nil()) = [1] >= [1] = #false() #eq(::(@x_1,@x_2) = [1] ,tuple#2(@y_1,@y_2)) >= [1] = #false() #eq(nil(),::(@y_1,@y_2)) = [1] >= [1] = #false() #eq(nil(),nil()) = [1] >= [1] = #true() #eq(nil(),tuple#2(@y_1,@y_2)) = [1] >= [1] = #false() #eq(tuple#2(@x_1,@x_2) = [1] ,::(@y_1,@y_2)) >= [1] = #false() #eq(tuple#2(@x_1,@x_2),nil()) = [1] >= [1] = #false() #eq(tuple#2(@x_1,@x_2) = [1] ,tuple#2(@y_1,@y_2)) >= [1] = #and(#eq(@x_1,@y_1) ,#eq(@x_2,@y_2)) #equal(@x,@y) = [1] >= [1] = #eq(@x,@y) insert(@x,@l) = [1] @l + [2] >= [1] @l + [2] = insert#1(@x,@l,@x) insert#1(tuple#2(@valX,@keyX) = [1] @l + [2] ,@l ,@x) >= [1] @l + [2] = insert#2(@l,@keyX,@valX,@x) insert#2(::(@l1,@ls) = [1] @ls + [4] ,@keyX ,@valX ,@x) >= [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) = [1] @ls + [4] ,@keyX ,@ls ,@valX ,@x) >= [1] @ls + [4] = insert#4(#equal(@key1,@keyX) ,@key1 ,@ls ,@valX ,@vals1 ,@x) insert#4(#false() = [1] @ls + [4] ,@key1 ,@ls ,@valX ,@vals1 ,@x) >= [1] @ls + [4] = ::(tuple#2(@vals1,@key1) ,insert(@x,@ls)) insert#4(#true() = [1] @ls + [4] ,@key1 ,@ls ,@valX ,@vals1 ,@x) >= [1] @ls + [2] = ::(tuple#2(::(@valX,@vals1) ,@key1) ,@ls) split(@l) = [2] @l + [2] >= [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() *** 1.1.1.1.1.1.1.2.1.1.1.2.1.1.2.1.1.1.1.1.1.1.1 Progress [(?,O(1))] *** Considered Problem: Strict DP Rules: sortAll#(@l) -> c_17(sortAll#1#(@l)) sortAll#2#(tuple#2(@vals,@key),@xs) -> c_20(sortAll#(@xs)) Strict TRS Rules: Weak DP Rules: sortAll#1#(::(@x,@xs)) -> c_18(sortAll#2#(@x,@xs)) splitAndSort#(@l) -> c_24(sortAll#(split(@l))) Weak TRS 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() 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/2,c_17/1,c_18/1,c_19/0,c_20/1,c_21/1,c_22/1,c_23/0,c_24/1,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 basic terms: {#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#}/{#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} Applied Processor: Assumption Proof: () *** 1.1.1.1.1.1.1.2.1.1.1.2.1.1.2.1.1.1.1.1.1.2 Progress [(O(1),O(1))] *** Considered Problem: Strict DP Rules: Strict TRS Rules: Weak DP Rules: 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)) splitAndSort#(@l) -> c_24(sortAll#(split(@l))) Weak TRS 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() 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/2,c_17/1,c_18/1,c_19/0,c_20/1,c_21/1,c_22/1,c_23/0,c_24/1,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 basic terms: {#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#}/{#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} Applied Processor: RemoveWeakSuffixes Proof: Consider the dependency graph 1:W:sortAll#(@l) -> c_17(sortAll#1#(@l)) -->_1 sortAll#1#(::(@x,@xs)) -> c_18(sortAll#2#(@x,@xs)):2 2:W:sortAll#1#(::(@x,@xs)) -> c_18(sortAll#2#(@x,@xs)) -->_1 sortAll#2#(tuple#2(@vals,@key),@xs) -> c_20(sortAll#(@xs)):3 3:W:sortAll#2#(tuple#2(@vals,@key),@xs) -> c_20(sortAll#(@xs)) -->_1 sortAll#(@l) -> c_17(sortAll#1#(@l)):1 4:W:splitAndSort#(@l) -> c_24(sortAll#(split(@l))) -->_1 sortAll#(@l) -> c_17(sortAll#1#(@l)):1 The following weak DPs constitute a sub-graph of the DG that is closed under successors. The DPs are removed. 4: splitAndSort#(@l) -> c_24(sortAll#(split(@l))) 1: sortAll#(@l) -> c_17(sortAll#1#(@l)) 3: sortAll#2#(tuple#2(@vals,@key) ,@xs) -> c_20(sortAll#(@xs)) 2: sortAll#1#(::(@x,@xs)) -> c_18(sortAll#2#(@x,@xs)) *** 1.1.1.1.1.1.1.2.1.1.1.2.1.1.2.1.1.1.1.1.1.2.1 Progress [(O(1),O(1))] *** Considered Problem: Strict DP Rules: Strict TRS Rules: Weak DP Rules: Weak TRS 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() 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/2,c_17/1,c_18/1,c_19/0,c_20/1,c_21/1,c_22/1,c_23/0,c_24/1,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 basic terms: {#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#}/{#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} Applied Processor: EmptyProcessor Proof: The problem is already closed. The intended complexity is O(1). *** 1.1.1.1.1.1.1.2.1.1.1.2.1.1.2.1.1.1.2 Progress [(?,O(n^1))] *** Considered Problem: Strict DP Rules: split#(@l) -> c_21(split#1#(@l)) split#1#(::(@x,@xs)) -> c_22(split#(@xs)) splitAndSort#(@l) -> c_24(sortAll#(split(@l)),split#(@l)) Strict TRS Rules: Weak DP Rules: 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)) Weak TRS 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() 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/2,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 basic terms: {#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#}/{#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} Applied Processor: RemoveWeakSuffixes Proof: Consider the dependency graph 1:S:split#(@l) -> c_21(split#1#(@l)) -->_1 split#1#(::(@x,@xs)) -> c_22(split#(@xs)):2 2:S:split#1#(::(@x,@xs)) -> c_22(split#(@xs)) -->_1 split#(@l) -> c_21(split#1#(@l)):1 3:S:splitAndSort#(@l) -> c_24(sortAll#(split(@l)),split#(@l)) -->_1 sortAll#(@l) -> c_17(sortAll#1#(@l)):4 -->_2 split#(@l) -> c_21(split#1#(@l)):1 4:W:sortAll#(@l) -> c_17(sortAll#1#(@l)) -->_1 sortAll#1#(::(@x,@xs)) -> c_18(sortAll#2#(@x,@xs)):5 5:W:sortAll#1#(::(@x,@xs)) -> c_18(sortAll#2#(@x,@xs)) -->_1 sortAll#2#(tuple#2(@vals,@key),@xs) -> c_20(sortAll#(@xs)):6 6:W:sortAll#2#(tuple#2(@vals,@key),@xs) -> c_20(sortAll#(@xs)) -->_1 sortAll#(@l) -> c_17(sortAll#1#(@l)):4 The following weak DPs constitute a sub-graph of the DG that is closed under successors. The DPs are removed. 4: sortAll#(@l) -> c_17(sortAll#1#(@l)) 6: sortAll#2#(tuple#2(@vals,@key) ,@xs) -> c_20(sortAll#(@xs)) 5: sortAll#1#(::(@x,@xs)) -> c_18(sortAll#2#(@x,@xs)) *** 1.1.1.1.1.1.1.2.1.1.1.2.1.1.2.1.1.1.2.1 Progress [(?,O(n^1))] *** Considered Problem: Strict DP Rules: split#(@l) -> c_21(split#1#(@l)) split#1#(::(@x,@xs)) -> c_22(split#(@xs)) splitAndSort#(@l) -> c_24(sortAll#(split(@l)),split#(@l)) Strict TRS Rules: Weak DP Rules: Weak TRS 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() 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/2,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 basic terms: {#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#}/{#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} Applied Processor: SimplifyRHS Proof: Consider the dependency graph 1:S:split#(@l) -> c_21(split#1#(@l)) -->_1 split#1#(::(@x,@xs)) -> c_22(split#(@xs)):2 2:S:split#1#(::(@x,@xs)) -> c_22(split#(@xs)) -->_1 split#(@l) -> c_21(split#1#(@l)):1 3:S:splitAndSort#(@l) -> c_24(sortAll#(split(@l)),split#(@l)) -->_2 split#(@l) -> c_21(split#1#(@l)):1 Due to missing edges in the depndency graph, the right-hand sides of following rules could be simplified: splitAndSort#(@l) -> c_24(split#(@l)) *** 1.1.1.1.1.1.1.2.1.1.1.2.1.1.2.1.1.1.2.1.1 Progress [(?,O(n^1))] *** Considered Problem: Strict DP Rules: split#(@l) -> c_21(split#1#(@l)) split#1#(::(@x,@xs)) -> c_22(split#(@xs)) splitAndSort#(@l) -> c_24(split#(@l)) Strict TRS Rules: Weak DP Rules: Weak TRS 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() 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/2,c_17/1,c_18/1,c_19/0,c_20/1,c_21/1,c_22/1,c_23/0,c_24/1,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 basic terms: {#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#}/{#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} Applied Processor: UsableRules Proof: We replace rewrite rules by usable rules: split#(@l) -> c_21(split#1#(@l)) split#1#(::(@x,@xs)) -> c_22(split#(@xs)) splitAndSort#(@l) -> c_24(split#(@l)) *** 1.1.1.1.1.1.1.2.1.1.1.2.1.1.2.1.1.1.2.1.1.1 Progress [(?,O(n^1))] *** Considered Problem: Strict DP Rules: split#(@l) -> c_21(split#1#(@l)) split#1#(::(@x,@xs)) -> c_22(split#(@xs)) splitAndSort#(@l) -> c_24(split#(@l)) Strict TRS Rules: Weak DP Rules: Weak TRS Rules: 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/2,c_17/1,c_18/1,c_19/0,c_20/1,c_21/1,c_22/1,c_23/0,c_24/1,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 basic terms: {#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#}/{#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} Applied Processor: Decompose {onSelection = all cycle independent sub-graph, withBound = RelativeAdd} Proof: We analyse the complexity of following sub-problems (R) and (S). Problem (S) is obtained from the input problem by shifting strict rules from (R) into the weak component. Problem (R) Strict DP Rules: split#(@l) -> c_21(split#1#(@l)) split#1#(::(@x,@xs)) -> c_22(split#(@xs)) Strict TRS Rules: Weak DP Rules: splitAndSort#(@l) -> c_24(split#(@l)) Weak TRS Rules: 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/2,c_17/1,c_18/1,c_19/0,c_20/1,c_21/1,c_22/1,c_23/0,c_24/1,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 basic terms: {#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#}/{#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} Problem (S) Strict DP Rules: splitAndSort#(@l) -> c_24(split#(@l)) Strict TRS Rules: Weak DP Rules: split#(@l) -> c_21(split#1#(@l)) split#1#(::(@x,@xs)) -> c_22(split#(@xs)) Weak TRS Rules: 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/2,c_17/1,c_18/1,c_19/0,c_20/1,c_21/1,c_22/1,c_23/0,c_24/1,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 basic terms: {#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#}/{#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} *** 1.1.1.1.1.1.1.2.1.1.1.2.1.1.2.1.1.1.2.1.1.1.1 Progress [(?,O(n^1))] *** Considered Problem: Strict DP Rules: split#(@l) -> c_21(split#1#(@l)) split#1#(::(@x,@xs)) -> c_22(split#(@xs)) Strict TRS Rules: Weak DP Rules: splitAndSort#(@l) -> c_24(split#(@l)) Weak TRS Rules: 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/2,c_17/1,c_18/1,c_19/0,c_20/1,c_21/1,c_22/1,c_23/0,c_24/1,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 basic terms: {#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#}/{#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} Applied Processor: PredecessorEstimationCP {onSelectionCP = any intersect of rules of CDG leaf and strict-rules, withComplexityPair = NaturalMI {miDimension = 1, miDegree = 1, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Nothing, greedy = NoGreedy}} Proof: We first use the processor NaturalMI {miDimension = 1, miDegree = 1, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Nothing, greedy = NoGreedy} to orient following rules strictly: 2: split#1#(::(@x,@xs)) -> c_22(split#(@xs)) Consider the set of all dependency pairs 1: split#(@l) -> c_21(split#1#(@l)) 2: split#1#(::(@x,@xs)) -> c_22(split#(@xs)) 3: splitAndSort#(@l) -> c_24(split#(@l)) Processor NaturalMI {miDimension = 1, miDegree = 1, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Nothing, greedy = NoGreedy}induces the complexity certificateTIME (?,O(n^1)) SPACE(?,?)on application of the dependency pairs {2} These cover all (indirect) predecessors of dependency pairs {1,2,3} their number of applications is equally bounded. The dependency pairs are shifted into the weak component. *** 1.1.1.1.1.1.1.2.1.1.1.2.1.1.2.1.1.1.2.1.1.1.1.1 Progress [(?,O(n^1))] *** Considered Problem: Strict DP Rules: split#(@l) -> c_21(split#1#(@l)) split#1#(::(@x,@xs)) -> c_22(split#(@xs)) Strict TRS Rules: Weak DP Rules: splitAndSort#(@l) -> c_24(split#(@l)) Weak TRS Rules: 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/2,c_17/1,c_18/1,c_19/0,c_20/1,c_21/1,c_22/1,c_23/0,c_24/1,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 basic terms: {#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#}/{#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} Applied Processor: NaturalMI {miDimension = 1, miDegree = 1, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Just first alternative for predecessorEstimation any intersect of rules of CDG leaf and strict-rules, greedy = NoGreedy} Proof: We apply a matrix interpretation of kind constructor based matrix interpretation: The following argument positions are considered usable: uargs(c_21) = {1}, uargs(c_22) = {1}, uargs(c_24) = {1} Following symbols are considered usable: {#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#} TcT has computed the following interpretation: p(#0) = [0] p(#EQ) = [0] p(#GT) = [0] p(#LT) = [0] p(#and) = [0] p(#ckgt) = [0] p(#compare) = [0] p(#eq) = [0] p(#equal) = [0] p(#false) = [0] p(#greater) = [1] x2 + [0] p(#neg) = [0] p(#pos) = [1] x1 + [0] p(#s) = [0] p(#true) = [0] p(::) = [1] x1 + [1] x2 + [1] p(append) = [1] x1 + [0] p(append#1) = [0] p(insert) = [0] p(insert#1) = [0] p(insert#2) = [1] x1 + [0] p(insert#3) = [0] p(insert#4) = [2] x5 + [1] x6 + [0] p(nil) = [1] p(quicksort) = [1] p(quicksort#1) = [4] x1 + [0] p(quicksort#2) = [1] p(sortAll) = [1] x1 + [0] p(sortAll#1) = [1] x1 + [0] p(sortAll#2) = [1] x1 + [0] p(split) = [1] x1 + [0] p(split#1) = [1] p(splitAndSort) = [1] p(splitqs) = [8] x1 + [0] p(splitqs#1) = [4] x1 + [1] p(splitqs#2) = [1] x2 + [1] p(splitqs#3) = [8] x1 + [2] x2 + [1] p(tuple#2) = [1] x2 + [1] p(#and#) = [1] x1 + [1] x2 + [0] p(#ckgt#) = [8] 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#) = [0] p(sortAll#1#) = [0] p(sortAll#2#) = [0] p(split#) = [4] x1 + [0] p(split#1#) = [4] x1 + [0] p(splitAndSort#) = [4] x1 + [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) = [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) = [0] p(c_18) = [0] p(c_19) = [0] p(c_20) = [0] p(c_21) = [1] x1 + [0] p(c_22) = [1] x1 + [1] p(c_23) = [0] p(c_24) = [1] x1 + [0] p(c_25) = [1] x1 + [0] p(c_26) = [0] p(c_27) = [0] p(c_28) = [2] x1 + [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) = [4] p(c_38) = [0] p(c_39) = [0] p(c_40) = [0] p(c_41) = [1] p(c_42) = [8] p(c_43) = [0] p(c_44) = [1] p(c_45) = [1] p(c_46) = [1] p(c_47) = [0] p(c_48) = [1] p(c_49) = [1] p(c_50) = [8] p(c_51) = [4] p(c_52) = [0] p(c_53) = [0] p(c_54) = [0] p(c_55) = [1] p(c_56) = [0] p(c_57) = [1] p(c_58) = [1] p(c_59) = [2] x1 + [1] p(c_60) = [1] p(c_61) = [2] p(c_62) = [1] x1 + [2] p(c_63) = [2] p(c_64) = [2] p(c_65) = [2] p(c_66) = [1] p(c_67) = [0] p(c_68) = [0] p(c_69) = [0] p(c_70) = [2] x1 + [4] x2 + [0] Following rules are strictly oriented: split#1#(::(@x,@xs)) = [4] @x + [4] @xs + [4] > [4] @xs + [1] = c_22(split#(@xs)) Following rules are (at-least) weakly oriented: split#(@l) = [4] @l + [0] >= [4] @l + [0] = c_21(split#1#(@l)) splitAndSort#(@l) = [4] @l + [0] >= [4] @l + [0] = c_24(split#(@l)) *** 1.1.1.1.1.1.1.2.1.1.1.2.1.1.2.1.1.1.2.1.1.1.1.1.1 Progress [(?,O(1))] *** Considered Problem: Strict DP Rules: split#(@l) -> c_21(split#1#(@l)) Strict TRS Rules: Weak DP Rules: split#1#(::(@x,@xs)) -> c_22(split#(@xs)) splitAndSort#(@l) -> c_24(split#(@l)) Weak TRS Rules: 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/2,c_17/1,c_18/1,c_19/0,c_20/1,c_21/1,c_22/1,c_23/0,c_24/1,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 basic terms: {#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#}/{#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} Applied Processor: Assumption Proof: () *** 1.1.1.1.1.1.1.2.1.1.1.2.1.1.2.1.1.1.2.1.1.1.1.2 Progress [(O(1),O(1))] *** Considered Problem: Strict DP Rules: Strict TRS Rules: Weak DP Rules: split#(@l) -> c_21(split#1#(@l)) split#1#(::(@x,@xs)) -> c_22(split#(@xs)) splitAndSort#(@l) -> c_24(split#(@l)) Weak TRS Rules: 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/2,c_17/1,c_18/1,c_19/0,c_20/1,c_21/1,c_22/1,c_23/0,c_24/1,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 basic terms: {#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#}/{#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} Applied Processor: RemoveWeakSuffixes Proof: Consider the dependency graph 1:W:split#(@l) -> c_21(split#1#(@l)) -->_1 split#1#(::(@x,@xs)) -> c_22(split#(@xs)):2 2:W:split#1#(::(@x,@xs)) -> c_22(split#(@xs)) -->_1 split#(@l) -> c_21(split#1#(@l)):1 3:W:splitAndSort#(@l) -> c_24(split#(@l)) -->_1 split#(@l) -> c_21(split#1#(@l)):1 The following weak DPs constitute a sub-graph of the DG that is closed under successors. The DPs are removed. 3: splitAndSort#(@l) -> c_24(split#(@l)) 1: split#(@l) -> c_21(split#1#(@l)) 2: split#1#(::(@x,@xs)) -> c_22(split#(@xs)) *** 1.1.1.1.1.1.1.2.1.1.1.2.1.1.2.1.1.1.2.1.1.1.1.2.1 Progress [(O(1),O(1))] *** Considered Problem: Strict DP Rules: Strict TRS Rules: Weak DP Rules: Weak TRS Rules: 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/2,c_17/1,c_18/1,c_19/0,c_20/1,c_21/1,c_22/1,c_23/0,c_24/1,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 basic terms: {#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#}/{#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} Applied Processor: EmptyProcessor Proof: The problem is already closed. The intended complexity is O(1). *** 1.1.1.1.1.1.1.2.1.1.1.2.1.1.2.1.1.1.2.1.1.1.2 Progress [(O(1),O(1))] *** Considered Problem: Strict DP Rules: splitAndSort#(@l) -> c_24(split#(@l)) Strict TRS Rules: Weak DP Rules: split#(@l) -> c_21(split#1#(@l)) split#1#(::(@x,@xs)) -> c_22(split#(@xs)) Weak TRS Rules: 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/2,c_17/1,c_18/1,c_19/0,c_20/1,c_21/1,c_22/1,c_23/0,c_24/1,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 basic terms: {#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#}/{#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} Applied Processor: PredecessorEstimation {onSelection = all simple predecessor estimation selector} Proof: We estimate the number of application of {1} by application of Pre({1}) = {}. Here rules are labelled as follows: 1: splitAndSort#(@l) -> c_24(split#(@l)) 2: split#(@l) -> c_21(split#1#(@l)) 3: split#1#(::(@x,@xs)) -> c_22(split#(@xs)) *** 1.1.1.1.1.1.1.2.1.1.1.2.1.1.2.1.1.1.2.1.1.1.2.1 Progress [(O(1),O(1))] *** Considered Problem: Strict DP Rules: Strict TRS Rules: Weak DP Rules: split#(@l) -> c_21(split#1#(@l)) split#1#(::(@x,@xs)) -> c_22(split#(@xs)) splitAndSort#(@l) -> c_24(split#(@l)) Weak TRS Rules: 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/2,c_17/1,c_18/1,c_19/0,c_20/1,c_21/1,c_22/1,c_23/0,c_24/1,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 basic terms: {#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#}/{#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} Applied Processor: RemoveWeakSuffixes Proof: Consider the dependency graph 1:W:split#(@l) -> c_21(split#1#(@l)) -->_1 split#1#(::(@x,@xs)) -> c_22(split#(@xs)):2 2:W:split#1#(::(@x,@xs)) -> c_22(split#(@xs)) -->_1 split#(@l) -> c_21(split#1#(@l)):1 3:W:splitAndSort#(@l) -> c_24(split#(@l)) -->_1 split#(@l) -> c_21(split#1#(@l)):1 The following weak DPs constitute a sub-graph of the DG that is closed under successors. The DPs are removed. 3: splitAndSort#(@l) -> c_24(split#(@l)) 1: split#(@l) -> c_21(split#1#(@l)) 2: split#1#(::(@x,@xs)) -> c_22(split#(@xs)) *** 1.1.1.1.1.1.1.2.1.1.1.2.1.1.2.1.1.1.2.1.1.1.2.1.1 Progress [(O(1),O(1))] *** Considered Problem: Strict DP Rules: Strict TRS Rules: Weak DP Rules: Weak TRS Rules: 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/2,c_17/1,c_18/1,c_19/0,c_20/1,c_21/1,c_22/1,c_23/0,c_24/1,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 basic terms: {#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#}/{#0,#EQ,#GT,#LT,#false,#neg,#pos,#s,#true,::,nil,tuple#2} Applied Processor: EmptyProcessor Proof: The problem is already closed. The intended complexity is O(1).