We consider the following Problem: Strict Trs: { #equal(@x, @y) -> #eq(@x, @y) , and(@x, @y) -> #and(@x, @y) , eq(@l1, @l2) -> eq#1(@l1, @l2) , eq#1(::(@x, @xs), @l2) -> eq#3(@l2, @x, @xs) , eq#1(nil(), @l2) -> eq#2(@l2) , eq#2(::(@y, @ys)) -> #false() , eq#2(nil()) -> #true() , eq#3(::(@y, @ys), @x, @xs) -> and(#equal(@x, @y), eq(@xs, @ys)) , eq#3(nil(), @x, @xs) -> #false() , nub(@l) -> nub#1(@l) , nub#1(::(@x, @xs)) -> ::(@x, nub(remove(@x, @xs))) , nub#1(nil()) -> nil() , remove(@x, @l) -> remove#1(@l, @x) , remove#1(::(@y, @ys), @x) -> remove#2(eq(@x, @y), @x, @y, @ys) , remove#1(nil(), @x) -> nil() , remove#2(#false(), @x, @y, @ys) -> ::(@y, remove(@x, @ys)) , remove#2(#true(), @x, @y, @ys) -> remove(@x, @ys)} Weak Trs: { #and(#false(), #false()) -> #false() , #and(#false(), #true()) -> #false() , #and(#true(), #false()) -> #false() , #and(#true(), #true()) -> #true() , #eq(#0(), #0()) -> #true() , #eq(#0(), #neg(@y)) -> #false() , #eq(#0(), #pos(@y)) -> #false() , #eq(#0(), #s(@y)) -> #false() , #eq(#neg(@x), #0()) -> #false() , #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y) , #eq(#neg(@x), #pos(@y)) -> #false() , #eq(#pos(@x), #0()) -> #false() , #eq(#pos(@x), #neg(@y)) -> #false() , #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y) , #eq(#s(@x), #0()) -> #false() , #eq(#s(@x), #s(@y)) -> #eq(@x, @y) , #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) -> #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) , #eq(::(@x_1, @x_2), nil()) -> #false() , #eq(nil(), ::(@y_1, @y_2)) -> #false() , #eq(nil(), nil()) -> #true()} StartTerms: basic terms Strategy: innermost Certificate: YES(?,O(n^2)) Proof: We consider the following Problem: Strict Trs: { #equal(@x, @y) -> #eq(@x, @y) , and(@x, @y) -> #and(@x, @y) , eq(@l1, @l2) -> eq#1(@l1, @l2) , eq#1(::(@x, @xs), @l2) -> eq#3(@l2, @x, @xs) , eq#1(nil(), @l2) -> eq#2(@l2) , eq#2(::(@y, @ys)) -> #false() , eq#2(nil()) -> #true() , eq#3(::(@y, @ys), @x, @xs) -> and(#equal(@x, @y), eq(@xs, @ys)) , eq#3(nil(), @x, @xs) -> #false() , nub(@l) -> nub#1(@l) , nub#1(::(@x, @xs)) -> ::(@x, nub(remove(@x, @xs))) , nub#1(nil()) -> nil() , remove(@x, @l) -> remove#1(@l, @x) , remove#1(::(@y, @ys), @x) -> remove#2(eq(@x, @y), @x, @y, @ys) , remove#1(nil(), @x) -> nil() , remove#2(#false(), @x, @y, @ys) -> ::(@y, remove(@x, @ys)) , remove#2(#true(), @x, @y, @ys) -> remove(@x, @ys)} Weak Trs: { #and(#false(), #false()) -> #false() , #and(#false(), #true()) -> #false() , #and(#true(), #false()) -> #false() , #and(#true(), #true()) -> #true() , #eq(#0(), #0()) -> #true() , #eq(#0(), #neg(@y)) -> #false() , #eq(#0(), #pos(@y)) -> #false() , #eq(#0(), #s(@y)) -> #false() , #eq(#neg(@x), #0()) -> #false() , #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y) , #eq(#neg(@x), #pos(@y)) -> #false() , #eq(#pos(@x), #0()) -> #false() , #eq(#pos(@x), #neg(@y)) -> #false() , #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y) , #eq(#s(@x), #0()) -> #false() , #eq(#s(@x), #s(@y)) -> #eq(@x, @y) , #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) -> #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) , #eq(::(@x_1, @x_2), nil()) -> #false() , #eq(nil(), ::(@y_1, @y_2)) -> #false() , #eq(nil(), nil()) -> #true()} StartTerms: basic terms Strategy: innermost Certificate: YES(?,O(n^2)) Proof: The weightgap principle applies, where following rules are oriented strictly: TRS Component: { and(@x, @y) -> #and(@x, @y) , eq#2(::(@y, @ys)) -> #false() , eq#2(nil()) -> #true() , eq#3(nil(), @x, @xs) -> #false() , nub#1(nil()) -> nil() , remove#1(nil(), @x) -> nil()} Interpretation of nonconstant growth: ------------------------------------- The following argument positions are usable: Uargs(remove) = {}, Uargs(eq#2) = {}, Uargs(#equal) = {}, Uargs(eq) = {}, Uargs(#eq) = {}, Uargs(::) = {2}, Uargs(and) = {1, 2}, Uargs(remove#1) = {}, Uargs(nub) = {1}, Uargs(#pos) = {}, Uargs(#neg) = {}, Uargs(remove#2) = {1}, Uargs(eq#1) = {}, Uargs(#and) = {1, 2}, Uargs(eq#3) = {}, Uargs(#s) = {}, Uargs(nub#1) = {} We have the following EDA-non-satisfying and IDA(1)-non-satisfying matrix interpretation: Interpretation Functions: remove(x1, x2) = [0 0] x1 + [0 0] x2 + [0] [0 0] [1 1] [0] eq#2(x1) = [0 0] x1 + [1] [0 0] [1] #equal(x1, x2) = [0 0] x1 + [0 0] x2 + [0] [0 0] [0 0] [0] eq(x1, x2) = [0 0] x1 + [0 0] x2 + [0] [0 0] [0 0] [0] #eq(x1, x2) = [0 0] x1 + [0 0] x2 + [0] [0 0] [0 0] [1] #true() = [0] [0] #false() = [0] [0] ::(x1, x2) = [0 0] x1 + [1 0] x2 + [1] [0 0] [0 0] [1] and(x1, x2) = [1 0] x1 + [1 0] x2 + [1] [0 0] [0 0] [1] remove#1(x1, x2) = [0 0] x1 + [0 0] x2 + [1] [0 0] [0 0] [1] nub(x1) = [1 0] x1 + [0] [0 0] [0] #pos(x1) = [0 0] x1 + [0] [0 0] [0] #0() = [0] [0] #neg(x1) = [0 0] x1 + [0] [0 0] [0] remove#2(x1, x2, x3, x4) = [1 0] x1 + [0 0] x2 + [0 0] x3 + [0 0] x4 + [1] [0 0] [1 1] [1 1] [0 0] [1] eq#1(x1, x2) = [0 0] x1 + [0 0] x2 + [1] [0 0] [0 0] [1] #and(x1, x2) = [1 0] x1 + [1 0] x2 + [0] [0 0] [0 0] [1] eq#3(x1, x2, x3) = [0 0] x1 + [0 0] x2 + [0 0] x3 + [1] [0 0] [0 0] [0 0] [1] #s(x1) = [0 0] x1 + [0] [0 0] [0] nub#1(x1) = [0 0] x1 + [1] [1 0] [0] nil() = [0] [0] The strictly oriented rules are moved into the weak component. We consider the following Problem: Strict Trs: { #equal(@x, @y) -> #eq(@x, @y) , eq(@l1, @l2) -> eq#1(@l1, @l2) , eq#1(::(@x, @xs), @l2) -> eq#3(@l2, @x, @xs) , eq#1(nil(), @l2) -> eq#2(@l2) , eq#3(::(@y, @ys), @x, @xs) -> and(#equal(@x, @y), eq(@xs, @ys)) , nub(@l) -> nub#1(@l) , nub#1(::(@x, @xs)) -> ::(@x, nub(remove(@x, @xs))) , remove(@x, @l) -> remove#1(@l, @x) , remove#1(::(@y, @ys), @x) -> remove#2(eq(@x, @y), @x, @y, @ys) , remove#2(#false(), @x, @y, @ys) -> ::(@y, remove(@x, @ys)) , remove#2(#true(), @x, @y, @ys) -> remove(@x, @ys)} Weak Trs: { and(@x, @y) -> #and(@x, @y) , eq#2(::(@y, @ys)) -> #false() , eq#2(nil()) -> #true() , eq#3(nil(), @x, @xs) -> #false() , nub#1(nil()) -> nil() , remove#1(nil(), @x) -> nil() , #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(nil(), ::(@y_1, @y_2)) -> #false() , #eq(nil(), nil()) -> #true()} StartTerms: basic terms Strategy: innermost Certificate: YES(?,O(n^2)) Proof: The weightgap principle applies, where following rules are oriented strictly: TRS Component: {remove#2(#true(), @x, @y, @ys) -> remove(@x, @ys)} Interpretation of nonconstant growth: ------------------------------------- The following argument positions are usable: Uargs(remove) = {}, Uargs(eq#2) = {}, Uargs(#equal) = {}, Uargs(eq) = {}, Uargs(#eq) = {}, Uargs(::) = {2}, Uargs(and) = {1, 2}, Uargs(remove#1) = {}, Uargs(nub) = {1}, Uargs(#pos) = {}, Uargs(#neg) = {}, Uargs(remove#2) = {1}, Uargs(eq#1) = {}, Uargs(#and) = {1, 2}, Uargs(eq#3) = {}, Uargs(#s) = {}, Uargs(nub#1) = {} We have the following EDA-non-satisfying and IDA(1)-non-satisfying matrix interpretation: Interpretation Functions: remove(x1, x2) = [0 0] x1 + [0 0] x2 + [0] [0 0] [0 0] [0] eq#2(x1) = [0 0] x1 + [1] [0 0] [1] #equal(x1, x2) = [0 0] x1 + [0 0] x2 + [0] [0 0] [1 1] [0] eq(x1, x2) = [0 0] x1 + [0 0] x2 + [0] [0 0] [0 0] [0] #eq(x1, x2) = [0 0] x1 + [0 0] x2 + [0] [0 0] [0 0] [1] #true() = [0] [0] #false() = [0] [0] ::(x1, x2) = [0 0] x1 + [1 0] x2 + [1] [0 0] [0 0] [1] and(x1, x2) = [1 0] x1 + [1 0] x2 + [1] [0 0] [0 0] [1] remove#1(x1, x2) = [0 0] x1 + [0 0] x2 + [1] [0 0] [0 0] [1] nub(x1) = [1 0] x1 + [0] [0 0] [0] #pos(x1) = [0 0] x1 + [0] [0 0] [0] #0() = [0] [0] #neg(x1) = [0 0] x1 + [0] [0 0] [0] remove#2(x1, x2, x3, x4) = [1 0] x1 + [0 0] x2 + [0 0] x3 + [0 0] x4 + [1] [0 0] [1 1] [1 1] [0 0] [1] eq#1(x1, x2) = [0 0] x1 + [0 0] x2 + [1] [0 0] [0 0] [1] #and(x1, x2) = [1 0] x1 + [1 0] x2 + [0] [0 0] [0 0] [1] eq#3(x1, x2, x3) = [0 0] x1 + [0 0] x2 + [0 0] x3 + [1] [0 0] [0 0] [0 0] [1] #s(x1) = [0 0] x1 + [0] [0 0] [0] nub#1(x1) = [0 0] x1 + [1] [1 0] [0] nil() = [0] [0] The strictly oriented rules are moved into the weak component. We consider the following Problem: Strict Trs: { #equal(@x, @y) -> #eq(@x, @y) , eq(@l1, @l2) -> eq#1(@l1, @l2) , eq#1(::(@x, @xs), @l2) -> eq#3(@l2, @x, @xs) , eq#1(nil(), @l2) -> eq#2(@l2) , eq#3(::(@y, @ys), @x, @xs) -> and(#equal(@x, @y), eq(@xs, @ys)) , nub(@l) -> nub#1(@l) , nub#1(::(@x, @xs)) -> ::(@x, nub(remove(@x, @xs))) , remove(@x, @l) -> remove#1(@l, @x) , remove#1(::(@y, @ys), @x) -> remove#2(eq(@x, @y), @x, @y, @ys) , remove#2(#false(), @x, @y, @ys) -> ::(@y, remove(@x, @ys))} Weak Trs: { remove#2(#true(), @x, @y, @ys) -> remove(@x, @ys) , and(@x, @y) -> #and(@x, @y) , eq#2(::(@y, @ys)) -> #false() , eq#2(nil()) -> #true() , eq#3(nil(), @x, @xs) -> #false() , nub#1(nil()) -> nil() , remove#1(nil(), @x) -> nil() , #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(nil(), ::(@y_1, @y_2)) -> #false() , #eq(nil(), nil()) -> #true()} StartTerms: basic terms Strategy: innermost Certificate: YES(?,O(n^2)) Proof: The weightgap principle applies, where following rules are oriented strictly: TRS Component: {eq#1(nil(), @l2) -> eq#2(@l2)} Interpretation of nonconstant growth: ------------------------------------- The following argument positions are usable: Uargs(remove) = {}, Uargs(eq#2) = {}, Uargs(#equal) = {}, Uargs(eq) = {}, Uargs(#eq) = {}, Uargs(::) = {2}, Uargs(and) = {1, 2}, Uargs(remove#1) = {}, Uargs(nub) = {1}, Uargs(#pos) = {}, Uargs(#neg) = {}, Uargs(remove#2) = {1}, Uargs(eq#1) = {}, Uargs(#and) = {1, 2}, Uargs(eq#3) = {}, Uargs(#s) = {}, Uargs(nub#1) = {} We have the following EDA-non-satisfying and IDA(1)-non-satisfying matrix interpretation: Interpretation Functions: remove(x1, x2) = [0 0] x1 + [0 0] x2 + [0] [0 0] [0 0] [0] eq#2(x1) = [0 0] x1 + [0] [0 0] [1] #equal(x1, x2) = [0 0] x1 + [0 0] x2 + [0] [0 0] [1 1] [0] eq(x1, x2) = [0 0] x1 + [0 0] x2 + [0] [0 0] [0 0] [0] #eq(x1, x2) = [0 0] x1 + [0 0] x2 + [0] [0 0] [0 0] [1] #true() = [0] [0] #false() = [0] [0] ::(x1, x2) = [0 0] x1 + [1 0] x2 + [1] [0 0] [0 0] [1] and(x1, x2) = [1 0] x1 + [1 0] x2 + [1] [0 0] [0 0] [1] remove#1(x1, x2) = [0 0] x1 + [0 0] x2 + [1] [0 0] [0 0] [1] nub(x1) = [1 0] x1 + [0] [0 0] [0] #pos(x1) = [0 0] x1 + [0] [0 0] [0] #0() = [0] [0] #neg(x1) = [0 0] x1 + [0] [0 0] [0] remove#2(x1, x2, x3, x4) = [1 0] x1 + [0 0] x2 + [0 0] x3 + [0 0] x4 + [1] [0 0] [1 1] [1 1] [0 0] [1] eq#1(x1, x2) = [0 0] x1 + [0 0] x2 + [1] [0 0] [0 0] [1] #and(x1, x2) = [1 0] x1 + [1 0] x2 + [0] [0 0] [0 0] [1] eq#3(x1, x2, x3) = [0 0] x1 + [0 0] x2 + [0 0] x3 + [1] [0 0] [0 0] [0 0] [1] #s(x1) = [0 0] x1 + [0] [0 0] [0] nub#1(x1) = [0 0] x1 + [1] [1 0] [0] nil() = [0] [0] The strictly oriented rules are moved into the weak component. We consider the following Problem: Strict Trs: { #equal(@x, @y) -> #eq(@x, @y) , eq(@l1, @l2) -> eq#1(@l1, @l2) , eq#1(::(@x, @xs), @l2) -> eq#3(@l2, @x, @xs) , eq#3(::(@y, @ys), @x, @xs) -> and(#equal(@x, @y), eq(@xs, @ys)) , nub(@l) -> nub#1(@l) , nub#1(::(@x, @xs)) -> ::(@x, nub(remove(@x, @xs))) , remove(@x, @l) -> remove#1(@l, @x) , remove#1(::(@y, @ys), @x) -> remove#2(eq(@x, @y), @x, @y, @ys) , remove#2(#false(), @x, @y, @ys) -> ::(@y, remove(@x, @ys))} Weak Trs: { eq#1(nil(), @l2) -> eq#2(@l2) , remove#2(#true(), @x, @y, @ys) -> remove(@x, @ys) , and(@x, @y) -> #and(@x, @y) , eq#2(::(@y, @ys)) -> #false() , eq#2(nil()) -> #true() , eq#3(nil(), @x, @xs) -> #false() , nub#1(nil()) -> nil() , remove#1(nil(), @x) -> nil() , #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(nil(), ::(@y_1, @y_2)) -> #false() , #eq(nil(), nil()) -> #true()} StartTerms: basic terms Strategy: innermost Certificate: YES(?,O(n^2)) Proof: The weightgap principle applies, where following rules are oriented strictly: TRS Component: {remove#2(#false(), @x, @y, @ys) -> ::(@y, remove(@x, @ys))} Interpretation of nonconstant growth: ------------------------------------- The following argument positions are usable: Uargs(remove) = {}, Uargs(eq#2) = {}, Uargs(#equal) = {}, Uargs(eq) = {}, Uargs(#eq) = {}, Uargs(::) = {2}, Uargs(and) = {1, 2}, Uargs(remove#1) = {}, Uargs(nub) = {1}, Uargs(#pos) = {}, Uargs(#neg) = {}, Uargs(remove#2) = {1}, Uargs(eq#1) = {}, Uargs(#and) = {1, 2}, Uargs(eq#3) = {}, Uargs(#s) = {}, Uargs(nub#1) = {} We have the following EDA-non-satisfying and IDA(1)-non-satisfying matrix interpretation: Interpretation Functions: remove(x1, x2) = [0 0] x1 + [0 0] x2 + [0] [0 0] [1 1] [0] eq#2(x1) = [0 0] x1 + [1] [0 0] [1] #equal(x1, x2) = [0 0] x1 + [0 0] x2 + [0] [0 0] [0 0] [0] eq(x1, x2) = [0 0] x1 + [0 0] x2 + [0] [0 0] [0 0] [0] #eq(x1, x2) = [0 0] x1 + [0 0] x2 + [0] [1 0] [0 1] [0] #true() = [0] [0] #false() = [0] [1] ::(x1, x2) = [0 0] x1 + [1 0] x2 + [1] [0 0] [0 0] [1] and(x1, x2) = [1 0] x1 + [1 0] x2 + [1] [0 0] [0 0] [1] remove#1(x1, x2) = [0 0] x1 + [0 0] x2 + [1] [0 0] [0 0] [1] nub(x1) = [1 0] x1 + [0] [0 0] [0] #pos(x1) = [1 0] x1 + [0] [0 1] [2] #0() = [0] [1] #neg(x1) = [1 0] x1 + [0] [0 1] [2] remove#2(x1, x2, x3, x4) = [1 1] x1 + [0 0] x2 + [0 0] x3 + [0 0] x4 + [1] [0 0] [1 1] [1 1] [1 1] [1] eq#1(x1, x2) = [0 0] x1 + [0 0] x2 + [1] [0 0] [0 0] [1] #and(x1, x2) = [1 0] x1 + [1 0] x2 + [0] [0 0] [0 0] [1] eq#3(x1, x2, x3) = [0 0] x1 + [0 0] x2 + [0 0] x3 + [1] [0 0] [0 0] [0 0] [1] #s(x1) = [1 0] x1 + [0] [0 1] [2] nub#1(x1) = [0 0] x1 + [1] [1 0] [0] nil() = [0] [0] The strictly oriented rules are moved into the weak component. We consider the following Problem: Strict Trs: { #equal(@x, @y) -> #eq(@x, @y) , eq(@l1, @l2) -> eq#1(@l1, @l2) , eq#1(::(@x, @xs), @l2) -> eq#3(@l2, @x, @xs) , eq#3(::(@y, @ys), @x, @xs) -> and(#equal(@x, @y), eq(@xs, @ys)) , nub(@l) -> nub#1(@l) , nub#1(::(@x, @xs)) -> ::(@x, nub(remove(@x, @xs))) , remove(@x, @l) -> remove#1(@l, @x) , remove#1(::(@y, @ys), @x) -> remove#2(eq(@x, @y), @x, @y, @ys)} Weak Trs: { remove#2(#false(), @x, @y, @ys) -> ::(@y, remove(@x, @ys)) , eq#1(nil(), @l2) -> eq#2(@l2) , remove#2(#true(), @x, @y, @ys) -> remove(@x, @ys) , and(@x, @y) -> #and(@x, @y) , eq#2(::(@y, @ys)) -> #false() , eq#2(nil()) -> #true() , eq#3(nil(), @x, @xs) -> #false() , nub#1(nil()) -> nil() , remove#1(nil(), @x) -> nil() , #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(nil(), ::(@y_1, @y_2)) -> #false() , #eq(nil(), nil()) -> #true()} StartTerms: basic terms Strategy: innermost Certificate: YES(?,O(n^2)) Proof: The weightgap principle applies, where following rules are oriented strictly: TRS Component: {remove#1(::(@y, @ys), @x) -> remove#2(eq(@x, @y), @x, @y, @ys)} Interpretation of nonconstant growth: ------------------------------------- The following argument positions are usable: Uargs(remove) = {}, Uargs(eq#2) = {}, Uargs(#equal) = {}, Uargs(eq) = {}, Uargs(#eq) = {}, Uargs(::) = {2}, Uargs(and) = {1, 2}, Uargs(remove#1) = {}, Uargs(nub) = {1}, Uargs(#pos) = {}, Uargs(#neg) = {}, Uargs(remove#2) = {1}, Uargs(eq#1) = {}, Uargs(#and) = {1, 2}, Uargs(eq#3) = {}, Uargs(#s) = {}, Uargs(nub#1) = {} We have the following EDA-non-satisfying and IDA(1)-non-satisfying matrix interpretation: Interpretation Functions: remove(x1, x2) = [0 0] x1 + [0 0] x2 + [0] [0 0] [0 0] [0] eq#2(x1) = [0 0] x1 + [1] [0 0] [1] #equal(x1, x2) = [0 0] x1 + [0 0] x2 + [0] [0 0] [1 1] [0] eq(x1, x2) = [0 0] x1 + [0 0] x2 + [0] [0 0] [0 0] [0] #eq(x1, x2) = [0 0] x1 + [0 0] x2 + [0] [1 0] [0 1] [0] #true() = [0] [0] #false() = [0] [1] ::(x1, x2) = [0 0] x1 + [1 0] x2 + [1] [0 0] [0 0] [1] and(x1, x2) = [1 0] x1 + [1 0] x2 + [1] [0 0] [0 0] [1] remove#1(x1, x2) = [0 0] x1 + [0 0] x2 + [1] [0 0] [1 1] [1] nub(x1) = [1 0] x1 + [0] [0 0] [0] #pos(x1) = [1 0] x1 + [0] [0 1] [2] #0() = [0] [1] #neg(x1) = [1 0] x1 + [0] [0 1] [2] remove#2(x1, x2, x3, x4) = [1 1] x1 + [0 0] x2 + [0 0] x3 + [0 0] x4 + [0] [0 0] [1 1] [0 0] [0 0] [1] eq#1(x1, x2) = [0 0] x1 + [0 0] x2 + [1] [0 0] [0 0] [1] #and(x1, x2) = [1 0] x1 + [1 0] x2 + [0] [0 0] [0 0] [1] eq#3(x1, x2, x3) = [0 0] x1 + [0 0] x2 + [0 0] x3 + [1] [0 0] [0 0] [0 0] [1] #s(x1) = [1 0] x1 + [0] [0 1] [2] nub#1(x1) = [0 0] x1 + [1] [1 0] [0] nil() = [0] [0] The strictly oriented rules are moved into the weak component. We consider the following Problem: Strict Trs: { #equal(@x, @y) -> #eq(@x, @y) , eq(@l1, @l2) -> eq#1(@l1, @l2) , eq#1(::(@x, @xs), @l2) -> eq#3(@l2, @x, @xs) , eq#3(::(@y, @ys), @x, @xs) -> and(#equal(@x, @y), eq(@xs, @ys)) , nub(@l) -> nub#1(@l) , nub#1(::(@x, @xs)) -> ::(@x, nub(remove(@x, @xs))) , remove(@x, @l) -> remove#1(@l, @x)} Weak Trs: { remove#1(::(@y, @ys), @x) -> remove#2(eq(@x, @y), @x, @y, @ys) , remove#2(#false(), @x, @y, @ys) -> ::(@y, remove(@x, @ys)) , eq#1(nil(), @l2) -> eq#2(@l2) , remove#2(#true(), @x, @y, @ys) -> remove(@x, @ys) , and(@x, @y) -> #and(@x, @y) , eq#2(::(@y, @ys)) -> #false() , eq#2(nil()) -> #true() , eq#3(nil(), @x, @xs) -> #false() , nub#1(nil()) -> nil() , remove#1(nil(), @x) -> nil() , #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(nil(), ::(@y_1, @y_2)) -> #false() , #eq(nil(), nil()) -> #true()} StartTerms: basic terms Strategy: innermost Certificate: YES(?,O(n^2)) Proof: The weightgap principle applies, where following rules are oriented strictly: TRS Component: {nub#1(::(@x, @xs)) -> ::(@x, nub(remove(@x, @xs)))} Interpretation of nonconstant growth: ------------------------------------- The following argument positions are usable: Uargs(remove) = {}, Uargs(eq#2) = {}, Uargs(#equal) = {}, Uargs(eq) = {}, Uargs(#eq) = {}, Uargs(::) = {2}, Uargs(and) = {1, 2}, Uargs(remove#1) = {}, Uargs(nub) = {1}, Uargs(#pos) = {}, Uargs(#neg) = {}, Uargs(remove#2) = {1}, Uargs(eq#1) = {}, Uargs(#and) = {1, 2}, Uargs(eq#3) = {}, Uargs(#s) = {}, Uargs(nub#1) = {} We have the following EDA-non-satisfying and IDA(1)-non-satisfying matrix interpretation: Interpretation Functions: remove(x1, x2) = [0 0] x1 + [0 0] x2 + [0] [0 0] [0 0] [0] eq#2(x1) = [0 0] x1 + [1] [0 0] [1] #equal(x1, x2) = [0 0] x1 + [0 0] x2 + [0] [0 0] [1 1] [0] eq(x1, x2) = [0 0] x1 + [0 0] x2 + [0] [0 0] [0 0] [1] #eq(x1, x2) = [0 0] x1 + [0 0] x2 + [0] [0 0] [0 0] [1] #true() = [0] [1] #false() = [0] [1] ::(x1, x2) = [0 0] x1 + [1 0] x2 + [0] [0 0] [0 0] [1] and(x1, x2) = [1 0] x1 + [1 0] x2 + [1] [0 0] [0 0] [1] remove#1(x1, x2) = [0 0] x1 + [0 0] x2 + [1] [0 0] [1 1] [1] nub(x1) = [1 0] x1 + [0] [0 0] [0] #pos(x1) = [1 0] x1 + [0] [0 1] [0] #0() = [0] [0] #neg(x1) = [0 0] x1 + [0] [0 0] [0] remove#2(x1, x2, x3, x4) = [1 0] x1 + [0 0] x2 + [0 0] x3 + [0 0] x4 + [1] [0 1] [1 1] [0 0] [0 0] [0] eq#1(x1, x2) = [0 0] x1 + [0 0] x2 + [1] [0 0] [0 0] [1] #and(x1, x2) = [1 0] x1 + [1 0] x2 + [0] [0 0] [0 0] [1] eq#3(x1, x2, x3) = [0 0] x1 + [0 0] x2 + [0 0] x3 + [1] [0 0] [0 0] [0 0] [1] #s(x1) = [0 0] x1 + [0] [0 0] [0] nub#1(x1) = [0 0] x1 + [1] [1 0] [1] nil() = [0] [0] The strictly oriented rules are moved into the weak component. We consider the following Problem: Strict Trs: { #equal(@x, @y) -> #eq(@x, @y) , eq(@l1, @l2) -> eq#1(@l1, @l2) , eq#1(::(@x, @xs), @l2) -> eq#3(@l2, @x, @xs) , eq#3(::(@y, @ys), @x, @xs) -> and(#equal(@x, @y), eq(@xs, @ys)) , nub(@l) -> nub#1(@l) , remove(@x, @l) -> remove#1(@l, @x)} Weak Trs: { nub#1(::(@x, @xs)) -> ::(@x, nub(remove(@x, @xs))) , remove#1(::(@y, @ys), @x) -> remove#2(eq(@x, @y), @x, @y, @ys) , remove#2(#false(), @x, @y, @ys) -> ::(@y, remove(@x, @ys)) , eq#1(nil(), @l2) -> eq#2(@l2) , remove#2(#true(), @x, @y, @ys) -> remove(@x, @ys) , and(@x, @y) -> #and(@x, @y) , eq#2(::(@y, @ys)) -> #false() , eq#2(nil()) -> #true() , eq#3(nil(), @x, @xs) -> #false() , nub#1(nil()) -> nil() , remove#1(nil(), @x) -> nil() , #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(nil(), ::(@y_1, @y_2)) -> #false() , #eq(nil(), nil()) -> #true()} StartTerms: basic terms Strategy: innermost Certificate: YES(?,O(n^2)) Proof: The weightgap principle applies, where following rules are oriented strictly: TRS Component: {remove(@x, @l) -> remove#1(@l, @x)} Interpretation of nonconstant growth: ------------------------------------- The following argument positions are usable: Uargs(remove) = {}, Uargs(eq#2) = {}, Uargs(#equal) = {}, Uargs(eq) = {}, Uargs(#eq) = {}, Uargs(::) = {2}, Uargs(and) = {1, 2}, Uargs(remove#1) = {}, Uargs(nub) = {1}, Uargs(#pos) = {}, Uargs(#neg) = {}, Uargs(remove#2) = {1}, Uargs(eq#1) = {}, Uargs(#and) = {1, 2}, Uargs(eq#3) = {}, Uargs(#s) = {}, Uargs(nub#1) = {} We have the following EDA-non-satisfying and IDA(1)-non-satisfying matrix interpretation: Interpretation Functions: remove(x1, x2) = [0 0] x1 + [0 0] x2 + [1] [1 1] [0 0] [1] eq#2(x1) = [0 0] x1 + [1] [0 0] [1] #equal(x1, x2) = [0 0] x1 + [0 0] x2 + [0] [0 0] [0 0] [0] eq(x1, x2) = [0 0] x1 + [0 0] x2 + [0] [0 0] [0 0] [0] #eq(x1, x2) = [0 0] x1 + [0 0] x2 + [0] [0 0] [0 1] [0] #true() = [0] [1] #false() = [0] [1] ::(x1, x2) = [0 0] x1 + [1 0] x2 + [0] [0 0] [0 0] [1] and(x1, x2) = [1 1] x1 + [1 0] x2 + [1] [0 0] [0 0] [1] remove#1(x1, x2) = [0 0] x1 + [0 0] x2 + [0] [0 0] [1 1] [1] nub(x1) = [1 0] x1 + [0] [0 0] [0] #pos(x1) = [0 0] x1 + [0] [0 1] [2] #0() = [0] [1] #neg(x1) = [0 0] x1 + [0] [0 1] [2] remove#2(x1, x2, x3, x4) = [1 1] x1 + [0 0] x2 + [0 0] x3 + [0 0] x4 + [0] [0 0] [1 1] [0 0] [0 0] [1] eq#1(x1, x2) = [0 0] x1 + [0 0] x2 + [1] [0 0] [0 0] [1] #and(x1, x2) = [1 0] x1 + [1 0] x2 + [0] [0 0] [0 0] [1] eq#3(x1, x2, x3) = [0 0] x1 + [0 0] x2 + [0 0] x3 + [1] [0 0] [0 0] [0 0] [1] #s(x1) = [0 0] x1 + [0] [0 1] [2] nub#1(x1) = [0 0] x1 + [1] [1 0] [1] nil() = [0] [1] The strictly oriented rules are moved into the weak component. We consider the following Problem: Strict Trs: { #equal(@x, @y) -> #eq(@x, @y) , eq(@l1, @l2) -> eq#1(@l1, @l2) , eq#1(::(@x, @xs), @l2) -> eq#3(@l2, @x, @xs) , eq#3(::(@y, @ys), @x, @xs) -> and(#equal(@x, @y), eq(@xs, @ys)) , nub(@l) -> nub#1(@l)} Weak Trs: { remove(@x, @l) -> remove#1(@l, @x) , nub#1(::(@x, @xs)) -> ::(@x, nub(remove(@x, @xs))) , remove#1(::(@y, @ys), @x) -> remove#2(eq(@x, @y), @x, @y, @ys) , remove#2(#false(), @x, @y, @ys) -> ::(@y, remove(@x, @ys)) , eq#1(nil(), @l2) -> eq#2(@l2) , remove#2(#true(), @x, @y, @ys) -> remove(@x, @ys) , and(@x, @y) -> #and(@x, @y) , eq#2(::(@y, @ys)) -> #false() , eq#2(nil()) -> #true() , eq#3(nil(), @x, @xs) -> #false() , nub#1(nil()) -> nil() , remove#1(nil(), @x) -> nil() , #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(nil(), ::(@y_1, @y_2)) -> #false() , #eq(nil(), nil()) -> #true()} StartTerms: basic terms Strategy: innermost Certificate: YES(?,O(n^2)) Proof: The weightgap principle applies, where following rules are oriented strictly: TRS Component: {eq#3(::(@y, @ys), @x, @xs) -> and(#equal(@x, @y), eq(@xs, @ys))} Interpretation of nonconstant growth: ------------------------------------- The following argument positions are usable: Uargs(remove) = {}, Uargs(eq#2) = {}, Uargs(#equal) = {}, Uargs(eq) = {}, Uargs(#eq) = {}, Uargs(::) = {2}, Uargs(and) = {1, 2}, Uargs(remove#1) = {}, Uargs(nub) = {1}, Uargs(#pos) = {}, Uargs(#neg) = {}, Uargs(remove#2) = {1}, Uargs(eq#1) = {}, Uargs(#and) = {1, 2}, Uargs(eq#3) = {}, Uargs(#s) = {}, Uargs(nub#1) = {} We have the following EDA-non-satisfying and IDA(1)-non-satisfying matrix interpretation: Interpretation Functions: remove(x1, x2) = [0 0] x1 + [1 2] x2 + [0] [0 0] [0 0] [0] eq#2(x1) = [0 0] x1 + [1] [0 1] [1] #equal(x1, x2) = [0 0] x1 + [0 0] x2 + [0] [0 0] [0 0] [0] eq(x1, x2) = [0 0] x1 + [0 0] x2 + [0] [0 0] [0 0] [0] #eq(x1, x2) = [0 0] x1 + [0 0] x2 + [0] [0 0] [0 0] [3] #true() = [0] [0] #false() = [0] [3] ::(x1, x2) = [0 0] x1 + [1 2] x2 + [0] [0 0] [0 0] [3] and(x1, x2) = [1 0] x1 + [1 0] x2 + [0] [0 0] [0 0] [3] remove#1(x1, x2) = [1 2] x1 + [0 0] x2 + [0] [0 0] [0 0] [0] nub(x1) = [1 3] x1 + [0] [0 0] [0] #pos(x1) = [1 0] x1 + [0] [0 1] [0] #0() = [0] [0] #neg(x1) = [0 0] x1 + [0] [0 0] [0] remove#2(x1, x2, x3, x4) = [1 0] x1 + [0 0] x2 + [0 0] x3 + [1 2] x4 + [0] [0 1] [0 0] [0 0] [0 0] [0] eq#1(x1, x2) = [0 0] x1 + [0 0] x2 + [1] [0 0] [0 1] [1] #and(x1, x2) = [1 0] x1 + [1 0] x2 + [0] [0 0] [0 0] [3] eq#3(x1, x2, x3) = [0 0] x1 + [0 0] x2 + [0 0] x3 + [1] [0 0] [0 0] [0 0] [3] #s(x1) = [0 0] x1 + [0] [0 0] [0] nub#1(x1) = [1 3] x1 + [0] [0 0] [3] nil() = [0] [0] The strictly oriented rules are moved into the weak component. We consider the following Problem: Strict Trs: { #equal(@x, @y) -> #eq(@x, @y) , eq(@l1, @l2) -> eq#1(@l1, @l2) , eq#1(::(@x, @xs), @l2) -> eq#3(@l2, @x, @xs) , nub(@l) -> nub#1(@l)} Weak Trs: { eq#3(::(@y, @ys), @x, @xs) -> and(#equal(@x, @y), eq(@xs, @ys)) , remove(@x, @l) -> remove#1(@l, @x) , nub#1(::(@x, @xs)) -> ::(@x, nub(remove(@x, @xs))) , remove#1(::(@y, @ys), @x) -> remove#2(eq(@x, @y), @x, @y, @ys) , remove#2(#false(), @x, @y, @ys) -> ::(@y, remove(@x, @ys)) , eq#1(nil(), @l2) -> eq#2(@l2) , remove#2(#true(), @x, @y, @ys) -> remove(@x, @ys) , and(@x, @y) -> #and(@x, @y) , eq#2(::(@y, @ys)) -> #false() , eq#2(nil()) -> #true() , eq#3(nil(), @x, @xs) -> #false() , nub#1(nil()) -> nil() , remove#1(nil(), @x) -> nil() , #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(nil(), ::(@y_1, @y_2)) -> #false() , #eq(nil(), nil()) -> #true()} StartTerms: basic terms Strategy: innermost Certificate: YES(?,O(n^2)) Proof: The weightgap principle applies, where following rules are oriented strictly: TRS Component: {nub(@l) -> nub#1(@l)} Interpretation of nonconstant growth: ------------------------------------- The following argument positions are usable: Uargs(remove) = {}, Uargs(eq#2) = {}, Uargs(#equal) = {}, Uargs(eq) = {}, Uargs(#eq) = {}, Uargs(::) = {2}, Uargs(and) = {1, 2}, Uargs(remove#1) = {}, Uargs(nub) = {1}, Uargs(#pos) = {}, Uargs(#neg) = {}, Uargs(remove#2) = {1}, Uargs(eq#1) = {}, Uargs(#and) = {1, 2}, Uargs(eq#3) = {}, Uargs(#s) = {}, Uargs(nub#1) = {} We have the following EDA-non-satisfying and IDA(1)-non-satisfying matrix interpretation: Interpretation Functions: remove(x1, x2) = [0 0] x1 + [0 0] x2 + [0] [0 0] [0 0] [1] eq#2(x1) = [0 0] x1 + [1] [0 0] [1] #equal(x1, x2) = [0 0] x1 + [0 0] x2 + [0] [0 0] [0 0] [0] eq(x1, x2) = [0 0] x1 + [0 0] x2 + [0] [0 0] [0 0] [0] #eq(x1, x2) = [0 0] x1 + [0 0] x2 + [0] [0 0] [0 0] [1] #true() = [0] [0] #false() = [0] [1] ::(x1, x2) = [0 0] x1 + [1 0] x2 + [0] [0 0] [0 0] [2] and(x1, x2) = [1 0] x1 + [1 0] x2 + [1] [0 0] [0 0] [1] remove#1(x1, x2) = [0 0] x1 + [0 0] x2 + [0] [0 0] [0 0] [1] nub(x1) = [1 2] x1 + [1] [0 0] [3] #pos(x1) = [1 0] x1 + [0] [0 1] [0] #0() = [0] [0] #neg(x1) = [0 0] x1 + [0] [0 0] [0] remove#2(x1, x2, x3, x4) = [1 0] x1 + [0 0] x2 + [0 0] x3 + [0 0] x4 + [0] [0 1] [0 0] [0 0] [0 0] [1] eq#1(x1, x2) = [0 0] x1 + [0 0] x2 + [1] [0 0] [0 0] [1] #and(x1, x2) = [1 0] x1 + [1 0] x2 + [0] [0 0] [0 0] [1] eq#3(x1, x2, x3) = [0 0] x1 + [0 0] x2 + [0 0] x3 + [1] [0 0] [0 0] [0 0] [1] #s(x1) = [0 0] x1 + [0] [0 0] [0] nub#1(x1) = [0 2] x1 + [0] [0 0] [3] nil() = [0] [0] The strictly oriented rules are moved into the weak component. We consider the following Problem: Strict Trs: { #equal(@x, @y) -> #eq(@x, @y) , eq(@l1, @l2) -> eq#1(@l1, @l2) , eq#1(::(@x, @xs), @l2) -> eq#3(@l2, @x, @xs)} Weak Trs: { nub(@l) -> nub#1(@l) , eq#3(::(@y, @ys), @x, @xs) -> and(#equal(@x, @y), eq(@xs, @ys)) , remove(@x, @l) -> remove#1(@l, @x) , nub#1(::(@x, @xs)) -> ::(@x, nub(remove(@x, @xs))) , remove#1(::(@y, @ys), @x) -> remove#2(eq(@x, @y), @x, @y, @ys) , remove#2(#false(), @x, @y, @ys) -> ::(@y, remove(@x, @ys)) , eq#1(nil(), @l2) -> eq#2(@l2) , remove#2(#true(), @x, @y, @ys) -> remove(@x, @ys) , and(@x, @y) -> #and(@x, @y) , eq#2(::(@y, @ys)) -> #false() , eq#2(nil()) -> #true() , eq#3(nil(), @x, @xs) -> #false() , nub#1(nil()) -> nil() , remove#1(nil(), @x) -> nil() , #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(nil(), ::(@y_1, @y_2)) -> #false() , #eq(nil(), nil()) -> #true()} StartTerms: basic terms Strategy: innermost Certificate: YES(?,O(n^2)) Proof: The weightgap principle applies, where following rules are oriented strictly: TRS Component: {eq#1(::(@x, @xs), @l2) -> eq#3(@l2, @x, @xs)} Interpretation of nonconstant growth: ------------------------------------- The following argument positions are usable: Uargs(remove) = {}, Uargs(eq#2) = {}, Uargs(#equal) = {}, Uargs(eq) = {}, Uargs(#eq) = {}, Uargs(::) = {2}, Uargs(and) = {1, 2}, Uargs(remove#1) = {}, Uargs(nub) = {1}, Uargs(#pos) = {}, Uargs(#neg) = {}, Uargs(remove#2) = {1}, Uargs(eq#1) = {}, Uargs(#and) = {1, 2}, Uargs(eq#3) = {}, Uargs(#s) = {}, Uargs(nub#1) = {} We have the following EDA-non-satisfying and IDA(1)-non-satisfying matrix interpretation: Interpretation Functions: remove(x1, x2) = [0 0] x1 + [0 0] x2 + [0] [1 1] [0 0] [3] eq#2(x1) = [0 0] x1 + [1] [0 1] [1] #equal(x1, x2) = [0 0] x1 + [0 0] x2 + [0] [0 0] [0 0] [0] eq(x1, x2) = [0 0] x1 + [0 0] x2 + [0] [0 0] [0 0] [0] #eq(x1, x2) = [0 0] x1 + [0 0] x2 + [0] [0 0] [0 0] [1] #true() = [0] [0] #false() = [0] [0] ::(x1, x2) = [0 0] x1 + [1 0] x2 + [0] [0 0] [0 0] [3] and(x1, x2) = [1 0] x1 + [1 0] x2 + [0] [0 0] [0 0] [1] remove#1(x1, x2) = [0 0] x1 + [0 0] x2 + [0] [0 0] [1 1] [3] nub(x1) = [1 0] x1 + [1] [0 0] [3] #pos(x1) = [0 0] x1 + [0] [0 0] [0] #0() = [0] [0] #neg(x1) = [0 0] x1 + [0] [0 0] [0] remove#2(x1, x2, x3, x4) = [1 0] x1 + [0 0] x2 + [0 0] x3 + [0 0] x4 + [0] [0 0] [1 1] [0 0] [0 0] [3] eq#1(x1, x2) = [0 0] x1 + [0 0] x2 + [1] [0 0] [0 1] [1] #and(x1, x2) = [1 0] x1 + [1 0] x2 + [0] [0 0] [0 0] [1] eq#3(x1, x2, x3) = [0 0] x1 + [0 0] x2 + [0 0] x3 + [0] [0 0] [0 0] [0 0] [1] #s(x1) = [0 0] x1 + [0] [0 0] [0] nub#1(x1) = [0 0] x1 + [1] [0 0] [3] nil() = [0] [3] The strictly oriented rules are moved into the weak component. We consider the following Problem: Strict Trs: { #equal(@x, @y) -> #eq(@x, @y) , eq(@l1, @l2) -> eq#1(@l1, @l2)} Weak Trs: { eq#1(::(@x, @xs), @l2) -> eq#3(@l2, @x, @xs) , nub(@l) -> nub#1(@l) , eq#3(::(@y, @ys), @x, @xs) -> and(#equal(@x, @y), eq(@xs, @ys)) , remove(@x, @l) -> remove#1(@l, @x) , nub#1(::(@x, @xs)) -> ::(@x, nub(remove(@x, @xs))) , remove#1(::(@y, @ys), @x) -> remove#2(eq(@x, @y), @x, @y, @ys) , remove#2(#false(), @x, @y, @ys) -> ::(@y, remove(@x, @ys)) , eq#1(nil(), @l2) -> eq#2(@l2) , remove#2(#true(), @x, @y, @ys) -> remove(@x, @ys) , and(@x, @y) -> #and(@x, @y) , eq#2(::(@y, @ys)) -> #false() , eq#2(nil()) -> #true() , eq#3(nil(), @x, @xs) -> #false() , nub#1(nil()) -> nil() , remove#1(nil(), @x) -> nil() , #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(nil(), ::(@y_1, @y_2)) -> #false() , #eq(nil(), nil()) -> #true()} StartTerms: basic terms Strategy: innermost Certificate: YES(?,O(n^2)) Proof: The weightgap principle applies, where following rules are oriented strictly: TRS Component: {#equal(@x, @y) -> #eq(@x, @y)} Interpretation of nonconstant growth: ------------------------------------- The following argument positions are usable: Uargs(remove) = {}, Uargs(eq#2) = {}, Uargs(#equal) = {}, Uargs(eq) = {}, Uargs(#eq) = {}, Uargs(::) = {2}, Uargs(and) = {1, 2}, Uargs(remove#1) = {}, Uargs(nub) = {1}, Uargs(#pos) = {}, Uargs(#neg) = {}, Uargs(remove#2) = {1}, Uargs(eq#1) = {}, Uargs(#and) = {1, 2}, Uargs(eq#3) = {}, Uargs(#s) = {}, Uargs(nub#1) = {} We have the following EDA-non-satisfying and IDA(1)-non-satisfying matrix interpretation: Interpretation Functions: remove(x1, x2) = [0 0] x1 + [0 0] x2 + [0] [1 1] [0 0] [1] eq#2(x1) = [0 0] x1 + [1] [0 0] [1] #equal(x1, x2) = [0 0] x1 + [0 0] x2 + [1] [0 0] [0 0] [2] eq(x1, x2) = [0 0] x1 + [0 0] x2 + [0] [0 0] [0 0] [0] #eq(x1, x2) = [0 0] x1 + [0 0] x2 + [0] [0 0] [0 0] [1] #true() = [0] [0] #false() = [0] [0] ::(x1, x2) = [0 0] x1 + [1 0] x2 + [0] [0 0] [0 0] [1] and(x1, x2) = [1 0] x1 + [1 0] x2 + [0] [0 0] [1 0] [1] remove#1(x1, x2) = [0 0] x1 + [0 0] x2 + [0] [0 0] [1 1] [1] nub(x1) = [1 0] x1 + [0] [1 0] [2] #pos(x1) = [0 0] x1 + [0] [0 0] [0] #0() = [0] [0] #neg(x1) = [0 0] x1 + [0] [0 0] [0] remove#2(x1, x2, x3, x4) = [1 0] x1 + [0 0] x2 + [0 0] x3 + [0 0] x4 + [0] [0 0] [1 1] [0 0] [0 0] [1] eq#1(x1, x2) = [0 0] x1 + [0 0] x2 + [1] [0 0] [0 0] [1] #and(x1, x2) = [1 0] x1 + [1 0] x2 + [0] [0 0] [0 0] [1] eq#3(x1, x2, x3) = [0 0] x1 + [0 0] x2 + [0 0] x3 + [1] [0 0] [0 0] [0 0] [1] #s(x1) = [0 0] x1 + [0] [0 0] [0] nub#1(x1) = [0 0] x1 + [0] [1 0] [1] nil() = [0] [0] The strictly oriented rules are moved into the weak component. We consider the following Problem: Strict Trs: {eq(@l1, @l2) -> eq#1(@l1, @l2)} Weak Trs: { #equal(@x, @y) -> #eq(@x, @y) , eq#1(::(@x, @xs), @l2) -> eq#3(@l2, @x, @xs) , nub(@l) -> nub#1(@l) , eq#3(::(@y, @ys), @x, @xs) -> and(#equal(@x, @y), eq(@xs, @ys)) , remove(@x, @l) -> remove#1(@l, @x) , nub#1(::(@x, @xs)) -> ::(@x, nub(remove(@x, @xs))) , remove#1(::(@y, @ys), @x) -> remove#2(eq(@x, @y), @x, @y, @ys) , remove#2(#false(), @x, @y, @ys) -> ::(@y, remove(@x, @ys)) , eq#1(nil(), @l2) -> eq#2(@l2) , remove#2(#true(), @x, @y, @ys) -> remove(@x, @ys) , and(@x, @y) -> #and(@x, @y) , eq#2(::(@y, @ys)) -> #false() , eq#2(nil()) -> #true() , eq#3(nil(), @x, @xs) -> #false() , nub#1(nil()) -> nil() , remove#1(nil(), @x) -> nil() , #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(nil(), ::(@y_1, @y_2)) -> #false() , #eq(nil(), nil()) -> #true()} StartTerms: basic terms Strategy: innermost Certificate: YES(?,O(n^2)) Proof: We consider the following Problem: Strict Trs: {eq(@l1, @l2) -> eq#1(@l1, @l2)} Weak Trs: { #equal(@x, @y) -> #eq(@x, @y) , eq#1(::(@x, @xs), @l2) -> eq#3(@l2, @x, @xs) , nub(@l) -> nub#1(@l) , eq#3(::(@y, @ys), @x, @xs) -> and(#equal(@x, @y), eq(@xs, @ys)) , remove(@x, @l) -> remove#1(@l, @x) , nub#1(::(@x, @xs)) -> ::(@x, nub(remove(@x, @xs))) , remove#1(::(@y, @ys), @x) -> remove#2(eq(@x, @y), @x, @y, @ys) , remove#2(#false(), @x, @y, @ys) -> ::(@y, remove(@x, @ys)) , eq#1(nil(), @l2) -> eq#2(@l2) , remove#2(#true(), @x, @y, @ys) -> remove(@x, @ys) , and(@x, @y) -> #and(@x, @y) , eq#2(::(@y, @ys)) -> #false() , eq#2(nil()) -> #true() , eq#3(nil(), @x, @xs) -> #false() , nub#1(nil()) -> nil() , remove#1(nil(), @x) -> nil() , #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(nil(), ::(@y_1, @y_2)) -> #false() , #eq(nil(), nil()) -> #true()} StartTerms: basic terms Strategy: innermost Certificate: YES(?,O(n^2)) Proof: The following argument positions are usable: Uargs(remove) = {}, Uargs(eq#2) = {}, Uargs(#equal) = {}, Uargs(eq) = {}, Uargs(#eq) = {}, Uargs(::) = {2}, Uargs(and) = {1, 2}, Uargs(remove#1) = {}, Uargs(nub) = {1}, Uargs(#pos) = {}, Uargs(#neg) = {}, Uargs(remove#2) = {1}, Uargs(eq#1) = {}, Uargs(#and) = {1, 2}, Uargs(eq#3) = {}, Uargs(#s) = {}, Uargs(nub#1) = {} We have the following constructor-based EDA-non-satisfying and IDA(2)-non-satisfying matrix interpretation: Interpretation Functions: remove(x1, x2) = [0 0 0] x1 + [1 1 0] x2 + [0] [0 0 0] [0 0 1] [0] [0 0 0] [0 0 1] [0] eq#2(x1) = [0 0 1] x1 + [0] [2 0 0] [0] [0 0 0] [0] #equal(x1, x2) = [0 0 0] x1 + [0 0 1] x2 + [0] [0 0 0] [0 2 0] [1] [0 0 0] [0 2 0] [0] eq(x1, x2) = [0 0 0] x1 + [0 0 1] x2 + [1] [0 0 0] [2 0 0] [0] [0 0 0] [2 0 0] [0] #eq(x1, x2) = [0 0 0] x1 + [0 0 1] x2 + [0] [0 0 0] [0 2 0] [0] [0 0 0] [0 0 0] [0] #true() = [1] [0] [0] #false() = [1] [0] [0] ::(x1, x2) = [0 2 0] x1 + [1 1 1] x2 + [1] [0 0 1] [0 0 1] [0] [0 0 1] [0 0 1] [2] and(x1, x2) = [1 0 0] x1 + [1 0 0] x2 + [0] [0 1 0] [1 0 0] [0] [0 0 2] [0 0 1] [1] remove#1(x1, x2) = [1 1 0] x1 + [0 0 0] x2 + [0] [0 0 1] [0 0 0] [0] [0 0 1] [0 0 0] [0] nub(x1) = [2 0 0] x1 + [0] [0 1 0] [0] [0 0 1] [0] #pos(x1) = [0 0 0] x1 + [0] [0 1 0] [0] [0 0 1] [1] #0() = [0] [0] [2] #neg(x1) = [0 0 0] x1 + [0] [0 1 0] [0] [0 0 1] [1] remove#2(x1, x2, x3, x4) = [1 0 0] x1 + [0 0 0] x2 + [0 2 0] x3 + [1 1 2] x4 + [0] [0 0 0] [0 0 0] [0 0 1] [0 0 1] [0] [0 0 0] [0 0 0] [0 0 1] [0 0 1] [2] eq#1(x1, x2) = [0 0 0] x1 + [0 0 1] x2 + [0] [0 0 0] [2 0 0] [0] [0 0 0] [2 0 0] [0] #and(x1, x2) = [1 0 0] x1 + [1 0 0] x2 + [0] [0 0 0] [1 0 0] [0] [0 0 0] [0 0 0] [0] eq#3(x1, x2, x3) = [0 0 1] x1 + [0 0 0] x2 + [0 0 0] x3 + [0] [2 0 0] [0 0 0] [0 0 0] [0] [2 0 0] [0 0 0] [0 0 0] [0] #s(x1) = [0 0 0] x1 + [0] [0 1 0] [0] [0 0 1] [2] nub#1(x1) = [2 0 0] x1 + [0] [0 1 0] [0] [0 0 1] [0] nil() = [2] [2] [2] Hurray, we answered YES(?,O(n^2))