YES(O(1),O(n^1)) 591.15/297.12 YES(O(1),O(n^1)) 591.15/297.12 591.15/297.12 We are left with following problem, upon which TcT provides the 591.15/297.12 certificate YES(O(1),O(n^1)). 591.15/297.12 591.15/297.12 Strict Trs: 591.15/297.12 { __(X1, X2) -> n____(X1, X2) 591.15/297.12 , __(X, nil()) -> X 591.15/297.12 , __(__(X, Y), Z) -> __(X, __(Y, Z)) 591.15/297.12 , __(nil(), X) -> X 591.15/297.12 , nil() -> n__nil() 591.15/297.12 , U11(tt()) -> tt() 591.15/297.12 , U21(tt(), V2) -> U22(isList(activate(V2))) 591.15/297.12 , U22(tt()) -> tt() 591.15/297.12 , isList(V) -> U11(isNeList(activate(V))) 591.15/297.12 , isList(n__nil()) -> tt() 591.15/297.12 , isList(n____(V1, V2)) -> U21(isList(activate(V1)), activate(V2)) 591.15/297.12 , activate(X) -> X 591.15/297.12 , activate(n__nil()) -> nil() 591.15/297.12 , activate(n____(X1, X2)) -> __(X1, X2) 591.15/297.12 , activate(n__a()) -> a() 591.15/297.12 , activate(n__e()) -> e() 591.15/297.12 , activate(n__i()) -> i() 591.15/297.12 , activate(n__o()) -> o() 591.15/297.12 , activate(n__u()) -> u() 591.15/297.12 , U31(tt()) -> tt() 591.15/297.12 , U41(tt(), V2) -> U42(isNeList(activate(V2))) 591.15/297.12 , U42(tt()) -> tt() 591.15/297.12 , isNeList(V) -> U31(isQid(activate(V))) 591.15/297.12 , isNeList(n____(V1, V2)) -> 591.15/297.12 U41(isList(activate(V1)), activate(V2)) 591.15/297.12 , isNeList(n____(V1, V2)) -> 591.15/297.12 U51(isNeList(activate(V1)), activate(V2)) 591.15/297.12 , U51(tt(), V2) -> U52(isList(activate(V2))) 591.15/297.12 , U52(tt()) -> tt() 591.15/297.12 , U61(tt()) -> tt() 591.15/297.12 , U71(tt(), P) -> U72(isPal(activate(P))) 591.15/297.12 , U72(tt()) -> tt() 591.15/297.12 , isPal(V) -> U81(isNePal(activate(V))) 591.15/297.12 , isPal(n__nil()) -> tt() 591.15/297.12 , U81(tt()) -> tt() 591.15/297.12 , isQid(n__a()) -> tt() 591.15/297.12 , isQid(n__e()) -> tt() 591.15/297.12 , isQid(n__i()) -> tt() 591.15/297.12 , isQid(n__o()) -> tt() 591.15/297.12 , isQid(n__u()) -> tt() 591.15/297.12 , isNePal(V) -> U61(isQid(activate(V))) 591.15/297.12 , isNePal(n____(I, __(P, I))) -> 591.15/297.12 U71(isQid(activate(I)), activate(P)) 591.15/297.12 , a() -> n__a() 591.15/297.12 , e() -> n__e() 591.15/297.12 , i() -> n__i() 591.15/297.12 , o() -> n__o() 591.15/297.12 , u() -> n__u() } 591.15/297.12 Obligation: 591.15/297.12 runtime complexity 591.15/297.12 Answer: 591.15/297.12 YES(O(1),O(n^1)) 591.15/297.12 591.15/297.12 The weightgap principle applies (using the following nonconstant 591.15/297.12 growth matrix-interpretation) 591.15/297.12 591.15/297.12 The following argument positions are usable: 591.15/297.12 Uargs(__) = {2}, Uargs(U11) = {1}, Uargs(U21) = {1, 2}, 591.15/297.12 Uargs(U22) = {1}, Uargs(isList) = {1}, Uargs(activate) = {1}, 591.15/297.12 Uargs(U31) = {1}, Uargs(U41) = {1, 2}, Uargs(U42) = {1}, 591.15/297.12 Uargs(isNeList) = {1}, Uargs(U51) = {1, 2}, Uargs(U52) = {1}, 591.15/297.12 Uargs(U61) = {1}, Uargs(U71) = {1, 2}, Uargs(U72) = {1}, 591.15/297.12 Uargs(isPal) = {1}, Uargs(U81) = {1}, Uargs(n____) = {2}, 591.15/297.12 Uargs(isQid) = {1}, Uargs(isNePal) = {1} 591.15/297.12 591.15/297.12 TcT has computed the following matrix interpretation satisfying 591.15/297.12 not(EDA) and not(IDA(1)). 591.15/297.12 591.15/297.12 [__](x1, x2) = [1] x1 + [1] x2 + [1] 591.15/297.12 591.15/297.12 [nil] = [0] 591.15/297.12 591.15/297.12 [U11](x1) = [1] x1 + [0] 591.15/297.12 591.15/297.12 [tt] = [0] 591.15/297.12 591.15/297.12 [U21](x1, x2) = [1] x1 + [1] x2 + [0] 591.15/297.12 591.15/297.12 [U22](x1) = [1] x1 + [0] 591.15/297.12 591.15/297.12 [isList](x1) = [1] x1 + [0] 591.15/297.12 591.15/297.12 [activate](x1) = [1] x1 + [0] 591.15/297.12 591.15/297.12 [U31](x1) = [1] x1 + [0] 591.15/297.12 591.15/297.12 [U41](x1, x2) = [1] x1 + [1] x2 + [0] 591.15/297.12 591.15/297.12 [U42](x1) = [1] x1 + [0] 591.15/297.12 591.15/297.12 [isNeList](x1) = [1] x1 + [0] 591.15/297.12 591.15/297.12 [U51](x1, x2) = [1] x1 + [1] x2 + [0] 591.15/297.12 591.15/297.12 [U52](x1) = [1] x1 + [0] 591.15/297.12 591.15/297.12 [U61](x1) = [1] x1 + [0] 591.15/297.12 591.15/297.12 [U71](x1, x2) = [1] x1 + [1] x2 + [0] 591.15/297.12 591.15/297.12 [U72](x1) = [1] x1 + [0] 591.15/297.12 591.15/297.12 [isPal](x1) = [1] x1 + [0] 591.15/297.12 591.15/297.12 [U81](x1) = [1] x1 + [0] 591.15/297.12 591.15/297.12 [n__nil] = [0] 591.15/297.12 591.15/297.12 [n____](x1, x2) = [1] x1 + [1] x2 + [0] 591.15/297.12 591.15/297.12 [isQid](x1) = [1] x1 + [0] 591.15/297.12 591.15/297.12 [isNePal](x1) = [1] x1 + [0] 591.15/297.12 591.15/297.12 [n__a] = [0] 591.15/297.12 591.15/297.12 [n__e] = [0] 591.15/297.12 591.15/297.12 [n__i] = [0] 591.15/297.12 591.15/297.12 [n__o] = [0] 591.15/297.12 591.15/297.12 [n__u] = [0] 591.15/297.12 591.15/297.12 [a] = [7] 591.15/297.12 591.15/297.12 [e] = [7] 591.15/297.12 591.15/297.12 [i] = [7] 591.15/297.12 591.15/297.12 [o] = [7] 591.15/297.12 591.15/297.12 [u] = [7] 591.15/297.12 591.15/297.12 The order satisfies the following ordering constraints: 591.15/297.12 591.15/297.12 [__(X1, X2)] = [1] X1 + [1] X2 + [1] 591.15/297.12 > [1] X1 + [1] X2 + [0] 591.15/297.12 = [n____(X1, X2)] 591.15/297.12 591.15/297.12 [__(X, nil())] = [1] X + [1] 591.15/297.12 > [1] X + [0] 591.15/297.12 = [X] 591.15/297.12 591.15/297.12 [__(__(X, Y), Z)] = [1] X + [1] Y + [1] Z + [2] 591.15/297.12 >= [1] X + [1] Y + [1] Z + [2] 591.15/297.12 = [__(X, __(Y, Z))] 591.15/297.12 591.15/297.12 [__(nil(), X)] = [1] X + [1] 591.15/297.12 > [1] X + [0] 591.15/297.12 = [X] 591.15/297.12 591.15/297.12 [nil()] = [0] 591.15/297.12 >= [0] 591.15/297.12 = [n__nil()] 591.15/297.12 591.15/297.12 [U11(tt())] = [0] 591.15/297.12 >= [0] 591.15/297.12 = [tt()] 591.15/297.12 591.15/297.12 [U21(tt(), V2)] = [1] V2 + [0] 591.15/297.12 >= [1] V2 + [0] 591.15/297.12 = [U22(isList(activate(V2)))] 591.15/297.12 591.15/297.12 [U22(tt())] = [0] 591.15/297.12 >= [0] 591.15/297.12 = [tt()] 591.15/297.12 591.15/297.12 [isList(V)] = [1] V + [0] 591.15/297.12 >= [1] V + [0] 591.15/297.12 = [U11(isNeList(activate(V)))] 591.15/297.12 591.15/297.12 [isList(n__nil())] = [0] 591.15/297.12 >= [0] 591.15/297.13 = [tt()] 591.15/297.13 591.15/297.13 [isList(n____(V1, V2))] = [1] V2 + [1] V1 + [0] 591.15/297.13 >= [1] V2 + [1] V1 + [0] 591.15/297.13 = [U21(isList(activate(V1)), activate(V2))] 591.15/297.13 591.15/297.13 [activate(X)] = [1] X + [0] 591.15/297.13 >= [1] X + [0] 591.15/297.13 = [X] 591.15/297.13 591.15/297.13 [activate(n__nil())] = [0] 591.15/297.13 >= [0] 591.15/297.13 = [nil()] 591.15/297.13 591.15/297.13 [activate(n____(X1, X2))] = [1] X1 + [1] X2 + [0] 591.15/297.13 ? [1] X1 + [1] X2 + [1] 591.15/297.13 = [__(X1, X2)] 591.15/297.13 591.15/297.13 [activate(n__a())] = [0] 591.15/297.13 ? [7] 591.15/297.13 = [a()] 591.15/297.13 591.15/297.13 [activate(n__e())] = [0] 591.15/297.13 ? [7] 591.15/297.13 = [e()] 591.15/297.13 591.15/297.13 [activate(n__i())] = [0] 591.15/297.13 ? [7] 591.15/297.13 = [i()] 591.15/297.13 591.15/297.13 [activate(n__o())] = [0] 591.15/297.13 ? [7] 591.15/297.13 = [o()] 591.15/297.13 591.15/297.13 [activate(n__u())] = [0] 591.15/297.13 ? [7] 591.15/297.13 = [u()] 591.15/297.13 591.15/297.13 [U31(tt())] = [0] 591.15/297.13 >= [0] 591.15/297.13 = [tt()] 591.15/297.13 591.15/297.13 [U41(tt(), V2)] = [1] V2 + [0] 591.15/297.13 >= [1] V2 + [0] 591.15/297.13 = [U42(isNeList(activate(V2)))] 591.15/297.13 591.15/297.13 [U42(tt())] = [0] 591.15/297.13 >= [0] 591.15/297.13 = [tt()] 591.15/297.13 591.15/297.13 [isNeList(V)] = [1] V + [0] 591.15/297.13 >= [1] V + [0] 591.15/297.13 = [U31(isQid(activate(V)))] 591.15/297.13 591.15/297.13 [isNeList(n____(V1, V2))] = [1] V2 + [1] V1 + [0] 591.15/297.13 >= [1] V2 + [1] V1 + [0] 591.15/297.13 = [U41(isList(activate(V1)), activate(V2))] 591.15/297.13 591.15/297.13 [isNeList(n____(V1, V2))] = [1] V2 + [1] V1 + [0] 591.15/297.13 >= [1] V2 + [1] V1 + [0] 591.15/297.13 = [U51(isNeList(activate(V1)), activate(V2))] 591.15/297.13 591.15/297.13 [U51(tt(), V2)] = [1] V2 + [0] 591.15/297.13 >= [1] V2 + [0] 591.15/297.13 = [U52(isList(activate(V2)))] 591.15/297.13 591.15/297.13 [U52(tt())] = [0] 591.15/297.13 >= [0] 591.15/297.13 = [tt()] 591.15/297.13 591.15/297.13 [U61(tt())] = [0] 591.15/297.13 >= [0] 591.15/297.13 = [tt()] 591.15/297.13 591.15/297.13 [U71(tt(), P)] = [1] P + [0] 591.15/297.13 >= [1] P + [0] 591.15/297.13 = [U72(isPal(activate(P)))] 591.15/297.13 591.15/297.13 [U72(tt())] = [0] 591.15/297.13 >= [0] 591.15/297.13 = [tt()] 591.15/297.13 591.15/297.13 [isPal(V)] = [1] V + [0] 591.15/297.13 >= [1] V + [0] 591.15/297.13 = [U81(isNePal(activate(V)))] 591.15/297.13 591.15/297.13 [isPal(n__nil())] = [0] 591.15/297.13 >= [0] 591.15/297.13 = [tt()] 591.15/297.13 591.15/297.13 [U81(tt())] = [0] 591.15/297.13 >= [0] 591.15/297.13 = [tt()] 591.15/297.13 591.15/297.13 [isQid(n__a())] = [0] 591.15/297.13 >= [0] 591.15/297.13 = [tt()] 591.15/297.13 591.15/297.13 [isQid(n__e())] = [0] 591.15/297.13 >= [0] 591.15/297.13 = [tt()] 591.15/297.13 591.15/297.13 [isQid(n__i())] = [0] 591.15/297.13 >= [0] 591.15/297.13 = [tt()] 591.15/297.13 591.15/297.13 [isQid(n__o())] = [0] 591.15/297.13 >= [0] 591.15/297.13 = [tt()] 591.15/297.13 591.15/297.13 [isQid(n__u())] = [0] 591.15/297.13 >= [0] 591.15/297.13 = [tt()] 591.15/297.13 591.15/297.13 [isNePal(V)] = [1] V + [0] 591.15/297.13 >= [1] V + [0] 591.15/297.13 = [U61(isQid(activate(V)))] 591.15/297.13 591.15/297.13 [isNePal(n____(I, __(P, I)))] = [1] P + [2] I + [1] 591.15/297.13 > [1] P + [1] I + [0] 591.15/297.13 = [U71(isQid(activate(I)), activate(P))] 591.15/297.13 591.15/297.13 [a()] = [7] 591.15/297.13 > [0] 591.15/297.13 = [n__a()] 591.15/297.13 591.15/297.13 [e()] = [7] 591.15/297.13 > [0] 591.15/297.13 = [n__e()] 591.15/297.13 591.15/297.13 [i()] = [7] 591.15/297.13 > [0] 591.15/297.13 = [n__i()] 591.15/297.13 591.15/297.13 [o()] = [7] 591.15/297.13 > [0] 591.15/297.13 = [n__o()] 591.15/297.13 591.15/297.13 [u()] = [7] 591.15/297.13 > [0] 591.15/297.13 = [n__u()] 591.15/297.13 591.15/297.13 591.15/297.13 Further, it can be verified that all rules not oriented are covered by the weightgap condition. 591.15/297.13 591.15/297.13 We are left with following problem, upon which TcT provides the 591.15/297.13 certificate YES(O(1),O(n^1)). 591.15/297.13 591.15/297.13 Strict Trs: 591.15/297.13 { __(__(X, Y), Z) -> __(X, __(Y, Z)) 591.15/297.13 , nil() -> n__nil() 591.15/297.13 , U11(tt()) -> tt() 591.15/297.13 , U21(tt(), V2) -> U22(isList(activate(V2))) 591.15/297.13 , U22(tt()) -> tt() 591.15/297.13 , isList(V) -> U11(isNeList(activate(V))) 591.15/297.13 , isList(n__nil()) -> tt() 591.15/297.13 , isList(n____(V1, V2)) -> U21(isList(activate(V1)), activate(V2)) 591.15/297.13 , activate(X) -> X 591.15/297.13 , activate(n__nil()) -> nil() 591.15/297.13 , activate(n____(X1, X2)) -> __(X1, X2) 591.15/297.13 , activate(n__a()) -> a() 591.15/297.13 , activate(n__e()) -> e() 591.15/297.13 , activate(n__i()) -> i() 591.15/297.13 , activate(n__o()) -> o() 591.15/297.13 , activate(n__u()) -> u() 591.15/297.13 , U31(tt()) -> tt() 591.15/297.13 , U41(tt(), V2) -> U42(isNeList(activate(V2))) 591.15/297.13 , U42(tt()) -> tt() 591.15/297.13 , isNeList(V) -> U31(isQid(activate(V))) 591.15/297.13 , isNeList(n____(V1, V2)) -> 591.15/297.13 U41(isList(activate(V1)), activate(V2)) 591.15/297.13 , isNeList(n____(V1, V2)) -> 591.15/297.13 U51(isNeList(activate(V1)), activate(V2)) 591.15/297.13 , U51(tt(), V2) -> U52(isList(activate(V2))) 591.15/297.13 , U52(tt()) -> tt() 591.15/297.13 , U61(tt()) -> tt() 591.15/297.13 , U71(tt(), P) -> U72(isPal(activate(P))) 591.15/297.13 , U72(tt()) -> tt() 591.15/297.13 , isPal(V) -> U81(isNePal(activate(V))) 591.15/297.13 , isPal(n__nil()) -> tt() 591.15/297.13 , U81(tt()) -> tt() 591.15/297.13 , isQid(n__a()) -> tt() 591.15/297.13 , isQid(n__e()) -> tt() 591.15/297.13 , isQid(n__i()) -> tt() 591.15/297.13 , isQid(n__o()) -> tt() 591.15/297.13 , isQid(n__u()) -> tt() 591.15/297.13 , isNePal(V) -> U61(isQid(activate(V))) } 591.15/297.13 Weak Trs: 591.15/297.13 { __(X1, X2) -> n____(X1, X2) 591.15/297.13 , __(X, nil()) -> X 591.15/297.13 , __(nil(), X) -> X 591.15/297.13 , isNePal(n____(I, __(P, I))) -> 591.15/297.13 U71(isQid(activate(I)), activate(P)) 591.15/297.13 , a() -> n__a() 591.15/297.13 , e() -> n__e() 591.15/297.13 , i() -> n__i() 591.15/297.13 , o() -> n__o() 591.15/297.13 , u() -> n__u() } 591.15/297.13 Obligation: 591.15/297.13 runtime complexity 591.15/297.13 Answer: 591.15/297.13 YES(O(1),O(n^1)) 591.15/297.13 591.15/297.13 The weightgap principle applies (using the following nonconstant 591.15/297.13 growth matrix-interpretation) 591.15/297.13 591.15/297.13 The following argument positions are usable: 591.15/297.13 Uargs(__) = {2}, Uargs(U11) = {1}, Uargs(U21) = {1, 2}, 591.15/297.13 Uargs(U22) = {1}, Uargs(isList) = {1}, Uargs(activate) = {1}, 591.15/297.13 Uargs(U31) = {1}, Uargs(U41) = {1, 2}, Uargs(U42) = {1}, 591.15/297.13 Uargs(isNeList) = {1}, Uargs(U51) = {1, 2}, Uargs(U52) = {1}, 591.15/297.13 Uargs(U61) = {1}, Uargs(U71) = {1, 2}, Uargs(U72) = {1}, 591.15/297.13 Uargs(isPal) = {1}, Uargs(U81) = {1}, Uargs(n____) = {2}, 591.15/297.13 Uargs(isQid) = {1}, Uargs(isNePal) = {1} 591.15/297.13 591.15/297.13 TcT has computed the following matrix interpretation satisfying 591.15/297.13 not(EDA) and not(IDA(1)). 591.15/297.13 591.15/297.13 [__](x1, x2) = [1] x1 + [1] x2 + [4] 591.15/297.13 591.15/297.13 [nil] = [5] 591.15/297.13 591.15/297.13 [U11](x1) = [1] x1 + [0] 591.15/297.13 591.15/297.13 [tt] = [0] 591.15/297.13 591.15/297.13 [U21](x1, x2) = [1] x1 + [1] x2 + [0] 591.15/297.13 591.15/297.13 [U22](x1) = [1] x1 + [0] 591.15/297.13 591.15/297.13 [isList](x1) = [1] x1 + [0] 591.15/297.13 591.15/297.13 [activate](x1) = [1] x1 + [0] 591.15/297.13 591.15/297.13 [U31](x1) = [1] x1 + [0] 591.15/297.13 591.15/297.13 [U41](x1, x2) = [1] x1 + [1] x2 + [0] 591.15/297.13 591.15/297.13 [U42](x1) = [1] x1 + [0] 591.15/297.13 591.15/297.13 [isNeList](x1) = [1] x1 + [0] 591.15/297.13 591.15/297.13 [U51](x1, x2) = [1] x1 + [1] x2 + [0] 591.15/297.13 591.15/297.13 [U52](x1) = [1] x1 + [0] 591.15/297.13 591.15/297.13 [U61](x1) = [1] x1 + [0] 591.15/297.13 591.15/297.13 [U71](x1, x2) = [1] x1 + [1] x2 + [0] 591.15/297.13 591.15/297.13 [U72](x1) = [1] x1 + [0] 591.15/297.13 591.15/297.13 [isPal](x1) = [1] x1 + [0] 591.15/297.13 591.15/297.13 [U81](x1) = [1] x1 + [0] 591.15/297.13 591.15/297.13 [n__nil] = [0] 591.15/297.13 591.15/297.13 [n____](x1, x2) = [1] x1 + [1] x2 + [0] 591.15/297.13 591.15/297.13 [isQid](x1) = [1] x1 + [0] 591.15/297.13 591.15/297.13 [isNePal](x1) = [1] x1 + [4] 591.15/297.13 591.15/297.13 [n__a] = [0] 591.15/297.13 591.15/297.13 [n__e] = [0] 591.15/297.13 591.15/297.13 [n__i] = [0] 591.15/297.13 591.15/297.13 [n__o] = [0] 591.15/297.13 591.15/297.13 [n__u] = [0] 591.15/297.13 591.15/297.13 [a] = [7] 591.15/297.13 591.15/297.13 [e] = [7] 591.15/297.13 591.15/297.13 [i] = [7] 591.15/297.13 591.15/297.13 [o] = [7] 591.15/297.13 591.15/297.13 [u] = [7] 591.15/297.13 591.15/297.13 The order satisfies the following ordering constraints: 591.15/297.13 591.15/297.13 [__(X1, X2)] = [1] X1 + [1] X2 + [4] 591.15/297.13 > [1] X1 + [1] X2 + [0] 591.15/297.13 = [n____(X1, X2)] 591.15/297.13 591.15/297.13 [__(X, nil())] = [1] X + [9] 591.15/297.13 > [1] X + [0] 591.15/297.13 = [X] 591.15/297.13 591.15/297.13 [__(__(X, Y), Z)] = [1] X + [1] Y + [1] Z + [8] 591.15/297.13 >= [1] X + [1] Y + [1] Z + [8] 591.15/297.13 = [__(X, __(Y, Z))] 591.15/297.13 591.15/297.13 [__(nil(), X)] = [1] X + [9] 591.15/297.13 > [1] X + [0] 591.15/297.13 = [X] 591.15/297.13 591.15/297.13 [nil()] = [5] 591.15/297.13 > [0] 591.15/297.13 = [n__nil()] 591.15/297.13 591.15/297.13 [U11(tt())] = [0] 591.15/297.13 >= [0] 591.15/297.13 = [tt()] 591.15/297.13 591.15/297.13 [U21(tt(), V2)] = [1] V2 + [0] 591.15/297.13 >= [1] V2 + [0] 591.15/297.13 = [U22(isList(activate(V2)))] 591.15/297.13 591.15/297.13 [U22(tt())] = [0] 591.15/297.13 >= [0] 591.15/297.13 = [tt()] 591.15/297.13 591.15/297.13 [isList(V)] = [1] V + [0] 591.15/297.13 >= [1] V + [0] 591.15/297.13 = [U11(isNeList(activate(V)))] 591.15/297.13 591.15/297.13 [isList(n__nil())] = [0] 591.15/297.13 >= [0] 591.15/297.13 = [tt()] 591.15/297.13 591.15/297.13 [isList(n____(V1, V2))] = [1] V2 + [1] V1 + [0] 591.15/297.13 >= [1] V2 + [1] V1 + [0] 591.15/297.13 = [U21(isList(activate(V1)), activate(V2))] 591.15/297.13 591.15/297.13 [activate(X)] = [1] X + [0] 591.15/297.13 >= [1] X + [0] 591.15/297.13 = [X] 591.15/297.13 591.15/297.13 [activate(n__nil())] = [0] 591.15/297.13 ? [5] 591.15/297.13 = [nil()] 591.15/297.13 591.15/297.13 [activate(n____(X1, X2))] = [1] X1 + [1] X2 + [0] 591.15/297.13 ? [1] X1 + [1] X2 + [4] 591.15/297.13 = [__(X1, X2)] 591.15/297.13 591.15/297.13 [activate(n__a())] = [0] 591.15/297.13 ? [7] 591.15/297.13 = [a()] 591.15/297.13 591.15/297.13 [activate(n__e())] = [0] 591.15/297.13 ? [7] 591.15/297.13 = [e()] 591.15/297.13 591.15/297.13 [activate(n__i())] = [0] 591.15/297.13 ? [7] 591.15/297.13 = [i()] 591.15/297.13 591.15/297.13 [activate(n__o())] = [0] 591.15/297.13 ? [7] 591.15/297.13 = [o()] 591.15/297.13 591.15/297.13 [activate(n__u())] = [0] 591.15/297.13 ? [7] 591.15/297.13 = [u()] 591.15/297.13 591.15/297.13 [U31(tt())] = [0] 591.15/297.13 >= [0] 591.15/297.13 = [tt()] 591.15/297.13 591.15/297.13 [U41(tt(), V2)] = [1] V2 + [0] 591.15/297.13 >= [1] V2 + [0] 591.15/297.13 = [U42(isNeList(activate(V2)))] 591.15/297.13 591.15/297.13 [U42(tt())] = [0] 591.15/297.13 >= [0] 591.15/297.13 = [tt()] 591.15/297.13 591.15/297.13 [isNeList(V)] = [1] V + [0] 591.15/297.13 >= [1] V + [0] 591.15/297.13 = [U31(isQid(activate(V)))] 591.15/297.13 591.15/297.13 [isNeList(n____(V1, V2))] = [1] V2 + [1] V1 + [0] 591.15/297.13 >= [1] V2 + [1] V1 + [0] 591.15/297.13 = [U41(isList(activate(V1)), activate(V2))] 591.15/297.13 591.15/297.13 [isNeList(n____(V1, V2))] = [1] V2 + [1] V1 + [0] 591.15/297.13 >= [1] V2 + [1] V1 + [0] 591.15/297.13 = [U51(isNeList(activate(V1)), activate(V2))] 591.15/297.13 591.15/297.13 [U51(tt(), V2)] = [1] V2 + [0] 591.15/297.13 >= [1] V2 + [0] 591.15/297.13 = [U52(isList(activate(V2)))] 591.15/297.13 591.15/297.13 [U52(tt())] = [0] 591.15/297.13 >= [0] 591.15/297.13 = [tt()] 591.15/297.13 591.15/297.13 [U61(tt())] = [0] 591.15/297.13 >= [0] 591.15/297.13 = [tt()] 591.15/297.13 591.15/297.13 [U71(tt(), P)] = [1] P + [0] 591.15/297.13 >= [1] P + [0] 591.15/297.13 = [U72(isPal(activate(P)))] 591.15/297.13 591.15/297.13 [U72(tt())] = [0] 591.15/297.13 >= [0] 591.15/297.13 = [tt()] 591.15/297.13 591.15/297.13 [isPal(V)] = [1] V + [0] 591.15/297.13 ? [1] V + [4] 591.15/297.13 = [U81(isNePal(activate(V)))] 591.15/297.13 591.15/297.13 [isPal(n__nil())] = [0] 591.15/297.13 >= [0] 591.15/297.13 = [tt()] 591.15/297.13 591.15/297.13 [U81(tt())] = [0] 591.15/297.13 >= [0] 591.15/297.13 = [tt()] 591.15/297.13 591.15/297.13 [isQid(n__a())] = [0] 591.15/297.13 >= [0] 591.15/297.13 = [tt()] 591.15/297.13 591.15/297.13 [isQid(n__e())] = [0] 591.15/297.13 >= [0] 591.15/297.13 = [tt()] 591.15/297.13 591.15/297.13 [isQid(n__i())] = [0] 591.15/297.13 >= [0] 591.15/297.13 = [tt()] 591.15/297.13 591.15/297.13 [isQid(n__o())] = [0] 591.15/297.13 >= [0] 591.15/297.13 = [tt()] 591.15/297.13 591.15/297.13 [isQid(n__u())] = [0] 591.15/297.13 >= [0] 591.15/297.13 = [tt()] 591.15/297.13 591.15/297.13 [isNePal(V)] = [1] V + [4] 591.15/297.13 > [1] V + [0] 591.15/297.13 = [U61(isQid(activate(V)))] 591.15/297.13 591.15/297.13 [isNePal(n____(I, __(P, I)))] = [1] P + [2] I + [8] 591.15/297.13 > [1] P + [1] I + [0] 591.15/297.13 = [U71(isQid(activate(I)), activate(P))] 591.15/297.13 591.15/297.13 [a()] = [7] 591.15/297.13 > [0] 591.15/297.13 = [n__a()] 591.15/297.13 591.15/297.13 [e()] = [7] 591.15/297.13 > [0] 591.15/297.13 = [n__e()] 591.15/297.13 591.15/297.13 [i()] = [7] 591.15/297.13 > [0] 591.15/297.13 = [n__i()] 591.15/297.13 591.15/297.13 [o()] = [7] 591.15/297.13 > [0] 591.15/297.13 = [n__o()] 591.15/297.13 591.15/297.13 [u()] = [7] 591.15/297.13 > [0] 591.15/297.13 = [n__u()] 591.15/297.13 591.15/297.13 591.15/297.13 Further, it can be verified that all rules not oriented are covered by the weightgap condition. 591.15/297.13 591.15/297.13 We are left with following problem, upon which TcT provides the 591.15/297.13 certificate YES(O(1),O(n^1)). 591.15/297.13 591.15/297.13 Strict Trs: 591.15/297.13 { __(__(X, Y), Z) -> __(X, __(Y, Z)) 591.15/297.13 , U11(tt()) -> tt() 591.15/297.13 , U21(tt(), V2) -> U22(isList(activate(V2))) 591.15/297.13 , U22(tt()) -> tt() 591.15/297.13 , isList(V) -> U11(isNeList(activate(V))) 591.15/297.13 , isList(n__nil()) -> tt() 591.15/297.13 , isList(n____(V1, V2)) -> U21(isList(activate(V1)), activate(V2)) 591.15/297.13 , activate(X) -> X 591.15/297.13 , activate(n__nil()) -> nil() 591.15/297.13 , activate(n____(X1, X2)) -> __(X1, X2) 591.15/297.13 , activate(n__a()) -> a() 591.15/297.13 , activate(n__e()) -> e() 591.15/297.13 , activate(n__i()) -> i() 591.15/297.13 , activate(n__o()) -> o() 591.15/297.13 , activate(n__u()) -> u() 591.15/297.13 , U31(tt()) -> tt() 591.15/297.13 , U41(tt(), V2) -> U42(isNeList(activate(V2))) 591.15/297.13 , U42(tt()) -> tt() 591.15/297.13 , isNeList(V) -> U31(isQid(activate(V))) 591.15/297.13 , isNeList(n____(V1, V2)) -> 591.15/297.13 U41(isList(activate(V1)), activate(V2)) 591.15/297.13 , isNeList(n____(V1, V2)) -> 591.15/297.13 U51(isNeList(activate(V1)), activate(V2)) 591.15/297.13 , U51(tt(), V2) -> U52(isList(activate(V2))) 591.15/297.13 , U52(tt()) -> tt() 591.15/297.13 , U61(tt()) -> tt() 591.15/297.13 , U71(tt(), P) -> U72(isPal(activate(P))) 591.15/297.13 , U72(tt()) -> tt() 591.15/297.13 , isPal(V) -> U81(isNePal(activate(V))) 591.15/297.13 , isPal(n__nil()) -> tt() 591.15/297.13 , U81(tt()) -> tt() 591.15/297.13 , isQid(n__a()) -> tt() 591.15/297.13 , isQid(n__e()) -> tt() 591.15/297.13 , isQid(n__i()) -> tt() 591.15/297.13 , isQid(n__o()) -> tt() 591.15/297.13 , isQid(n__u()) -> tt() } 591.15/297.13 Weak Trs: 591.15/297.13 { __(X1, X2) -> n____(X1, X2) 591.15/297.13 , __(X, nil()) -> X 591.15/297.13 , __(nil(), X) -> X 591.15/297.13 , nil() -> n__nil() 591.15/297.13 , isNePal(V) -> U61(isQid(activate(V))) 591.15/297.13 , isNePal(n____(I, __(P, I))) -> 591.15/297.13 U71(isQid(activate(I)), activate(P)) 591.15/297.13 , a() -> n__a() 591.15/297.13 , e() -> n__e() 591.15/297.13 , i() -> n__i() 591.15/297.13 , o() -> n__o() 591.15/297.13 , u() -> n__u() } 591.15/297.13 Obligation: 591.15/297.13 runtime complexity 591.15/297.13 Answer: 591.15/297.13 YES(O(1),O(n^1)) 591.15/297.13 591.15/297.13 The weightgap principle applies (using the following nonconstant 591.15/297.13 growth matrix-interpretation) 591.15/297.13 591.15/297.13 The following argument positions are usable: 591.15/297.13 Uargs(__) = {2}, Uargs(U11) = {1}, Uargs(U21) = {1, 2}, 591.15/297.13 Uargs(U22) = {1}, Uargs(isList) = {1}, Uargs(activate) = {1}, 591.15/297.13 Uargs(U31) = {1}, Uargs(U41) = {1, 2}, Uargs(U42) = {1}, 591.15/297.13 Uargs(isNeList) = {1}, Uargs(U51) = {1, 2}, Uargs(U52) = {1}, 591.15/297.13 Uargs(U61) = {1}, Uargs(U71) = {1, 2}, Uargs(U72) = {1}, 591.15/297.13 Uargs(isPal) = {1}, Uargs(U81) = {1}, Uargs(n____) = {2}, 591.15/297.13 Uargs(isQid) = {1}, Uargs(isNePal) = {1} 591.15/297.13 591.15/297.13 TcT has computed the following matrix interpretation satisfying 591.15/297.13 not(EDA) and not(IDA(1)). 591.15/297.13 591.15/297.13 [__](x1, x2) = [1] x1 + [1] x2 + [4] 591.15/297.13 591.15/297.13 [nil] = [7] 591.15/297.13 591.15/297.13 [U11](x1) = [1] x1 + [0] 591.15/297.13 591.15/297.13 [tt] = [1] 591.15/297.13 591.15/297.13 [U21](x1, x2) = [1] x1 + [1] x2 + [0] 591.15/297.13 591.15/297.13 [U22](x1) = [1] x1 + [0] 591.15/297.13 591.15/297.13 [isList](x1) = [1] x1 + [0] 591.15/297.13 591.15/297.13 [activate](x1) = [1] x1 + [0] 591.15/297.13 591.15/297.13 [U31](x1) = [1] x1 + [0] 591.15/297.13 591.15/297.13 [U41](x1, x2) = [1] x1 + [1] x2 + [0] 591.15/297.13 591.15/297.13 [U42](x1) = [1] x1 + [0] 591.15/297.13 591.15/297.13 [isNeList](x1) = [1] x1 + [0] 591.15/297.13 591.15/297.13 [U51](x1, x2) = [1] x1 + [1] x2 + [0] 591.15/297.13 591.15/297.13 [U52](x1) = [1] x1 + [0] 591.15/297.13 591.15/297.13 [U61](x1) = [1] x1 + [0] 591.15/297.13 591.15/297.13 [U71](x1, x2) = [1] x1 + [1] x2 + [0] 591.15/297.13 591.15/297.13 [U72](x1) = [1] x1 + [0] 591.15/297.13 591.15/297.13 [isPal](x1) = [1] x1 + [0] 591.15/297.13 591.15/297.13 [U81](x1) = [1] x1 + [0] 591.15/297.13 591.15/297.13 [n__nil] = [0] 591.15/297.13 591.15/297.13 [n____](x1, x2) = [1] x1 + [1] x2 + [0] 591.15/297.13 591.15/297.13 [isQid](x1) = [1] x1 + [0] 591.15/297.13 591.15/297.13 [isNePal](x1) = [1] x1 + [4] 591.15/297.13 591.15/297.13 [n__a] = [0] 591.15/297.13 591.15/297.13 [n__e] = [0] 591.15/297.13 591.15/297.13 [n__i] = [0] 591.15/297.13 591.15/297.13 [n__o] = [0] 591.15/297.13 591.15/297.13 [n__u] = [0] 591.15/297.13 591.15/297.13 [a] = [7] 591.15/297.13 591.15/297.13 [e] = [7] 591.15/297.13 591.15/297.13 [i] = [7] 591.15/297.13 591.15/297.13 [o] = [7] 591.15/297.13 591.15/297.13 [u] = [7] 591.15/297.13 591.15/297.13 The order satisfies the following ordering constraints: 591.15/297.13 591.15/297.13 [__(X1, X2)] = [1] X1 + [1] X2 + [4] 591.15/297.13 > [1] X1 + [1] X2 + [0] 591.15/297.13 = [n____(X1, X2)] 591.15/297.13 591.15/297.13 [__(X, nil())] = [1] X + [11] 591.15/297.13 > [1] X + [0] 591.15/297.13 = [X] 591.15/297.13 591.15/297.13 [__(__(X, Y), Z)] = [1] X + [1] Y + [1] Z + [8] 591.15/297.13 >= [1] X + [1] Y + [1] Z + [8] 591.15/297.13 = [__(X, __(Y, Z))] 591.15/297.13 591.15/297.13 [__(nil(), X)] = [1] X + [11] 591.15/297.13 > [1] X + [0] 591.15/297.13 = [X] 591.15/297.13 591.15/297.13 [nil()] = [7] 591.15/297.13 > [0] 591.15/297.13 = [n__nil()] 591.15/297.13 591.15/297.13 [U11(tt())] = [1] 591.15/297.13 >= [1] 591.15/297.13 = [tt()] 591.15/297.13 591.15/297.13 [U21(tt(), V2)] = [1] V2 + [1] 591.15/297.13 > [1] V2 + [0] 591.15/297.13 = [U22(isList(activate(V2)))] 591.15/297.13 591.15/297.13 [U22(tt())] = [1] 591.15/297.13 >= [1] 591.15/297.13 = [tt()] 591.15/297.13 591.15/297.13 [isList(V)] = [1] V + [0] 591.15/297.13 >= [1] V + [0] 591.15/297.13 = [U11(isNeList(activate(V)))] 591.15/297.13 591.15/297.13 [isList(n__nil())] = [0] 591.15/297.13 ? [1] 591.15/297.13 = [tt()] 591.15/297.13 591.15/297.13 [isList(n____(V1, V2))] = [1] V2 + [1] V1 + [0] 591.15/297.13 >= [1] V2 + [1] V1 + [0] 591.15/297.13 = [U21(isList(activate(V1)), activate(V2))] 591.15/297.13 591.15/297.13 [activate(X)] = [1] X + [0] 591.15/297.13 >= [1] X + [0] 591.15/297.13 = [X] 591.15/297.13 591.15/297.13 [activate(n__nil())] = [0] 591.15/297.13 ? [7] 591.15/297.13 = [nil()] 591.15/297.13 591.15/297.13 [activate(n____(X1, X2))] = [1] X1 + [1] X2 + [0] 591.15/297.13 ? [1] X1 + [1] X2 + [4] 591.15/297.13 = [__(X1, X2)] 591.15/297.13 591.15/297.13 [activate(n__a())] = [0] 591.15/297.13 ? [7] 591.15/297.13 = [a()] 591.15/297.13 591.15/297.13 [activate(n__e())] = [0] 591.15/297.13 ? [7] 591.15/297.13 = [e()] 591.15/297.13 591.15/297.13 [activate(n__i())] = [0] 591.15/297.13 ? [7] 591.15/297.13 = [i()] 591.15/297.13 591.15/297.13 [activate(n__o())] = [0] 591.15/297.13 ? [7] 591.15/297.13 = [o()] 591.15/297.13 591.15/297.13 [activate(n__u())] = [0] 591.15/297.13 ? [7] 591.15/297.13 = [u()] 591.15/297.13 591.15/297.13 [U31(tt())] = [1] 591.15/297.13 >= [1] 591.15/297.13 = [tt()] 591.15/297.13 591.15/297.13 [U41(tt(), V2)] = [1] V2 + [1] 591.15/297.13 > [1] V2 + [0] 591.15/297.13 = [U42(isNeList(activate(V2)))] 591.15/297.13 591.15/297.13 [U42(tt())] = [1] 591.15/297.13 >= [1] 591.15/297.13 = [tt()] 591.15/297.13 591.15/297.13 [isNeList(V)] = [1] V + [0] 591.15/297.13 >= [1] V + [0] 591.15/297.13 = [U31(isQid(activate(V)))] 591.15/297.13 591.15/297.13 [isNeList(n____(V1, V2))] = [1] V2 + [1] V1 + [0] 591.15/297.13 >= [1] V2 + [1] V1 + [0] 591.15/297.13 = [U41(isList(activate(V1)), activate(V2))] 591.15/297.13 591.15/297.13 [isNeList(n____(V1, V2))] = [1] V2 + [1] V1 + [0] 591.15/297.13 >= [1] V2 + [1] V1 + [0] 591.15/297.13 = [U51(isNeList(activate(V1)), activate(V2))] 591.15/297.13 591.15/297.13 [U51(tt(), V2)] = [1] V2 + [1] 591.15/297.13 > [1] V2 + [0] 591.15/297.13 = [U52(isList(activate(V2)))] 591.15/297.13 591.15/297.13 [U52(tt())] = [1] 591.15/297.13 >= [1] 591.15/297.13 = [tt()] 591.15/297.13 591.15/297.13 [U61(tt())] = [1] 591.15/297.13 >= [1] 591.15/297.13 = [tt()] 591.15/297.13 591.15/297.13 [U71(tt(), P)] = [1] P + [1] 591.15/297.13 > [1] P + [0] 591.15/297.13 = [U72(isPal(activate(P)))] 591.15/297.13 591.15/297.13 [U72(tt())] = [1] 591.15/297.13 >= [1] 591.15/297.13 = [tt()] 591.15/297.13 591.15/297.13 [isPal(V)] = [1] V + [0] 591.15/297.13 ? [1] V + [4] 591.15/297.13 = [U81(isNePal(activate(V)))] 591.15/297.13 591.15/297.13 [isPal(n__nil())] = [0] 591.15/297.13 ? [1] 591.15/297.13 = [tt()] 591.15/297.13 591.15/297.13 [U81(tt())] = [1] 591.15/297.13 >= [1] 591.15/297.13 = [tt()] 591.15/297.13 591.15/297.13 [isQid(n__a())] = [0] 591.15/297.13 ? [1] 591.15/297.13 = [tt()] 591.15/297.13 591.15/297.13 [isQid(n__e())] = [0] 591.15/297.13 ? [1] 591.15/297.13 = [tt()] 591.15/297.13 591.15/297.13 [isQid(n__i())] = [0] 591.15/297.13 ? [1] 591.15/297.13 = [tt()] 591.15/297.13 591.15/297.13 [isQid(n__o())] = [0] 591.15/297.13 ? [1] 591.15/297.13 = [tt()] 591.15/297.13 591.15/297.13 [isQid(n__u())] = [0] 591.15/297.13 ? [1] 591.15/297.13 = [tt()] 591.15/297.13 591.15/297.13 [isNePal(V)] = [1] V + [4] 591.15/297.13 > [1] V + [0] 591.15/297.13 = [U61(isQid(activate(V)))] 591.15/297.13 591.15/297.13 [isNePal(n____(I, __(P, I)))] = [1] P + [2] I + [8] 591.15/297.13 > [1] P + [1] I + [0] 591.15/297.13 = [U71(isQid(activate(I)), activate(P))] 591.15/297.13 591.15/297.13 [a()] = [7] 591.15/297.13 > [0] 591.15/297.14 = [n__a()] 591.15/297.14 591.15/297.14 [e()] = [7] 591.15/297.14 > [0] 591.15/297.14 = [n__e()] 591.15/297.14 591.15/297.14 [i()] = [7] 591.15/297.14 > [0] 591.15/297.14 = [n__i()] 591.15/297.14 591.15/297.14 [o()] = [7] 591.15/297.14 > [0] 591.15/297.14 = [n__o()] 591.15/297.14 591.15/297.14 [u()] = [7] 591.15/297.14 > [0] 591.15/297.14 = [n__u()] 591.15/297.14 591.15/297.14 591.15/297.14 Further, it can be verified that all rules not oriented are covered by the weightgap condition. 591.15/297.14 591.15/297.14 We are left with following problem, upon which TcT provides the 591.15/297.14 certificate YES(O(1),O(n^1)). 591.15/297.14 591.15/297.14 Strict Trs: 591.15/297.14 { __(__(X, Y), Z) -> __(X, __(Y, Z)) 591.15/297.14 , U11(tt()) -> tt() 591.15/297.14 , U22(tt()) -> tt() 591.15/297.14 , isList(V) -> U11(isNeList(activate(V))) 591.15/297.14 , isList(n__nil()) -> tt() 591.15/297.14 , isList(n____(V1, V2)) -> U21(isList(activate(V1)), activate(V2)) 591.15/297.14 , activate(X) -> X 591.15/297.14 , activate(n__nil()) -> nil() 591.15/297.14 , activate(n____(X1, X2)) -> __(X1, X2) 591.15/297.14 , activate(n__a()) -> a() 591.15/297.14 , activate(n__e()) -> e() 591.15/297.14 , activate(n__i()) -> i() 591.15/297.14 , activate(n__o()) -> o() 591.15/297.14 , activate(n__u()) -> u() 591.15/297.14 , U31(tt()) -> tt() 591.15/297.14 , U42(tt()) -> tt() 591.15/297.14 , isNeList(V) -> U31(isQid(activate(V))) 591.15/297.14 , isNeList(n____(V1, V2)) -> 591.15/297.14 U41(isList(activate(V1)), activate(V2)) 591.15/297.14 , isNeList(n____(V1, V2)) -> 591.15/297.14 U51(isNeList(activate(V1)), activate(V2)) 591.15/297.14 , U52(tt()) -> tt() 591.15/297.14 , U61(tt()) -> tt() 591.15/297.14 , U72(tt()) -> tt() 591.15/297.14 , isPal(V) -> U81(isNePal(activate(V))) 591.15/297.14 , isPal(n__nil()) -> tt() 591.15/297.14 , U81(tt()) -> tt() 591.15/297.14 , isQid(n__a()) -> tt() 591.15/297.14 , isQid(n__e()) -> tt() 591.15/297.14 , isQid(n__i()) -> tt() 591.15/297.14 , isQid(n__o()) -> tt() 591.15/297.14 , isQid(n__u()) -> tt() } 591.15/297.14 Weak Trs: 591.15/297.14 { __(X1, X2) -> n____(X1, X2) 591.15/297.14 , __(X, nil()) -> X 591.15/297.14 , __(nil(), X) -> X 591.15/297.14 , nil() -> n__nil() 591.15/297.14 , U21(tt(), V2) -> U22(isList(activate(V2))) 591.15/297.14 , U41(tt(), V2) -> U42(isNeList(activate(V2))) 591.15/297.14 , U51(tt(), V2) -> U52(isList(activate(V2))) 591.15/297.14 , U71(tt(), P) -> U72(isPal(activate(P))) 591.15/297.14 , isNePal(V) -> U61(isQid(activate(V))) 591.15/297.14 , isNePal(n____(I, __(P, I))) -> 591.15/297.14 U71(isQid(activate(I)), activate(P)) 591.15/297.14 , a() -> n__a() 591.15/297.14 , e() -> n__e() 591.15/297.14 , i() -> n__i() 591.15/297.14 , o() -> n__o() 591.15/297.14 , u() -> n__u() } 591.15/297.14 Obligation: 591.15/297.14 runtime complexity 591.15/297.14 Answer: 591.15/297.14 YES(O(1),O(n^1)) 591.15/297.14 591.15/297.14 The weightgap principle applies (using the following nonconstant 591.15/297.14 growth matrix-interpretation) 591.15/297.14 591.15/297.14 The following argument positions are usable: 591.15/297.14 Uargs(__) = {2}, Uargs(U11) = {1}, Uargs(U21) = {1, 2}, 591.15/297.14 Uargs(U22) = {1}, Uargs(isList) = {1}, Uargs(activate) = {1}, 591.15/297.14 Uargs(U31) = {1}, Uargs(U41) = {1, 2}, Uargs(U42) = {1}, 591.15/297.14 Uargs(isNeList) = {1}, Uargs(U51) = {1, 2}, Uargs(U52) = {1}, 591.15/297.14 Uargs(U61) = {1}, Uargs(U71) = {1, 2}, Uargs(U72) = {1}, 591.15/297.14 Uargs(isPal) = {1}, Uargs(U81) = {1}, Uargs(n____) = {2}, 591.15/297.14 Uargs(isQid) = {1}, Uargs(isNePal) = {1} 591.15/297.14 591.15/297.14 TcT has computed the following matrix interpretation satisfying 591.15/297.14 not(EDA) and not(IDA(1)). 591.15/297.14 591.15/297.14 [__](x1, x2) = [1] x1 + [1] x2 + [4] 591.15/297.14 591.15/297.14 [nil] = [7] 591.15/297.14 591.15/297.14 [U11](x1) = [1] x1 + [0] 591.15/297.14 591.15/297.14 [tt] = [1] 591.15/297.14 591.15/297.14 [U21](x1, x2) = [1] x1 + [1] x2 + [0] 591.15/297.14 591.15/297.14 [U22](x1) = [1] x1 + [0] 591.15/297.14 591.15/297.14 [isList](x1) = [1] x1 + [1] 591.15/297.14 591.15/297.14 [activate](x1) = [1] x1 + [0] 591.15/297.14 591.15/297.14 [U31](x1) = [1] x1 + [0] 591.15/297.14 591.15/297.14 [U41](x1, x2) = [1] x1 + [1] x2 + [0] 591.15/297.14 591.15/297.14 [U42](x1) = [1] x1 + [0] 591.15/297.14 591.15/297.14 [isNeList](x1) = [1] x1 + [0] 591.15/297.14 591.15/297.14 [U51](x1, x2) = [1] x1 + [1] x2 + [0] 591.15/297.14 591.15/297.14 [U52](x1) = [1] x1 + [0] 591.15/297.14 591.15/297.14 [U61](x1) = [1] x1 + [0] 591.15/297.14 591.15/297.14 [U71](x1, x2) = [1] x1 + [1] x2 + [0] 591.15/297.14 591.15/297.14 [U72](x1) = [1] x1 + [0] 591.15/297.14 591.15/297.14 [isPal](x1) = [1] x1 + [0] 591.15/297.14 591.15/297.14 [U81](x1) = [1] x1 + [0] 591.15/297.14 591.15/297.14 [n__nil] = [0] 591.15/297.14 591.15/297.14 [n____](x1, x2) = [1] x1 + [1] x2 + [0] 591.15/297.14 591.15/297.14 [isQid](x1) = [1] x1 + [0] 591.15/297.14 591.15/297.14 [isNePal](x1) = [1] x1 + [4] 591.15/297.14 591.15/297.14 [n__a] = [0] 591.15/297.14 591.15/297.14 [n__e] = [0] 591.15/297.14 591.15/297.14 [n__i] = [0] 591.15/297.14 591.15/297.14 [n__o] = [0] 591.15/297.14 591.15/297.14 [n__u] = [0] 591.15/297.14 591.15/297.14 [a] = [7] 591.15/297.14 591.15/297.14 [e] = [7] 591.15/297.14 591.15/297.14 [i] = [7] 591.15/297.14 591.15/297.14 [o] = [7] 591.15/297.14 591.15/297.14 [u] = [7] 591.15/297.14 591.15/297.14 The order satisfies the following ordering constraints: 591.15/297.14 591.15/297.14 [__(X1, X2)] = [1] X1 + [1] X2 + [4] 591.15/297.14 > [1] X1 + [1] X2 + [0] 591.15/297.14 = [n____(X1, X2)] 591.15/297.14 591.15/297.14 [__(X, nil())] = [1] X + [11] 591.15/297.14 > [1] X + [0] 591.15/297.14 = [X] 591.15/297.14 591.15/297.14 [__(__(X, Y), Z)] = [1] X + [1] Y + [1] Z + [8] 591.15/297.14 >= [1] X + [1] Y + [1] Z + [8] 591.15/297.14 = [__(X, __(Y, Z))] 591.15/297.14 591.15/297.14 [__(nil(), X)] = [1] X + [11] 591.15/297.14 > [1] X + [0] 591.15/297.14 = [X] 591.15/297.14 591.15/297.14 [nil()] = [7] 591.15/297.14 > [0] 591.15/297.14 = [n__nil()] 591.15/297.14 591.15/297.14 [U11(tt())] = [1] 591.15/297.14 >= [1] 591.15/297.14 = [tt()] 591.15/297.14 591.15/297.14 [U21(tt(), V2)] = [1] V2 + [1] 591.15/297.14 >= [1] V2 + [1] 591.15/297.14 = [U22(isList(activate(V2)))] 591.15/297.14 591.15/297.14 [U22(tt())] = [1] 591.15/297.14 >= [1] 591.15/297.14 = [tt()] 591.15/297.14 591.15/297.14 [isList(V)] = [1] V + [1] 591.15/297.14 > [1] V + [0] 591.15/297.14 = [U11(isNeList(activate(V)))] 591.15/297.14 591.15/297.14 [isList(n__nil())] = [1] 591.15/297.14 >= [1] 591.15/297.14 = [tt()] 591.15/297.14 591.15/297.14 [isList(n____(V1, V2))] = [1] V2 + [1] V1 + [1] 591.15/297.14 >= [1] V2 + [1] V1 + [1] 591.15/297.14 = [U21(isList(activate(V1)), activate(V2))] 591.15/297.14 591.15/297.14 [activate(X)] = [1] X + [0] 591.15/297.14 >= [1] X + [0] 591.15/297.14 = [X] 591.15/297.14 591.15/297.14 [activate(n__nil())] = [0] 591.15/297.14 ? [7] 591.15/297.14 = [nil()] 591.15/297.14 591.15/297.14 [activate(n____(X1, X2))] = [1] X1 + [1] X2 + [0] 591.15/297.14 ? [1] X1 + [1] X2 + [4] 591.15/297.14 = [__(X1, X2)] 591.15/297.14 591.15/297.14 [activate(n__a())] = [0] 591.15/297.14 ? [7] 591.15/297.14 = [a()] 591.15/297.14 591.15/297.14 [activate(n__e())] = [0] 591.15/297.14 ? [7] 591.15/297.14 = [e()] 591.15/297.14 591.15/297.14 [activate(n__i())] = [0] 591.15/297.14 ? [7] 591.15/297.14 = [i()] 591.15/297.14 591.15/297.14 [activate(n__o())] = [0] 591.15/297.14 ? [7] 591.15/297.14 = [o()] 591.15/297.14 591.15/297.14 [activate(n__u())] = [0] 591.15/297.14 ? [7] 591.15/297.14 = [u()] 591.15/297.14 591.15/297.14 [U31(tt())] = [1] 591.15/297.14 >= [1] 591.15/297.14 = [tt()] 591.15/297.14 591.15/297.14 [U41(tt(), V2)] = [1] V2 + [1] 591.15/297.14 > [1] V2 + [0] 591.15/297.14 = [U42(isNeList(activate(V2)))] 591.15/297.14 591.15/297.14 [U42(tt())] = [1] 591.15/297.14 >= [1] 591.15/297.14 = [tt()] 591.15/297.14 591.15/297.14 [isNeList(V)] = [1] V + [0] 591.15/297.14 >= [1] V + [0] 591.15/297.14 = [U31(isQid(activate(V)))] 591.15/297.14 591.15/297.14 [isNeList(n____(V1, V2))] = [1] V2 + [1] V1 + [0] 591.15/297.14 ? [1] V2 + [1] V1 + [1] 591.15/297.14 = [U41(isList(activate(V1)), activate(V2))] 591.15/297.14 591.15/297.14 [isNeList(n____(V1, V2))] = [1] V2 + [1] V1 + [0] 591.15/297.14 >= [1] V2 + [1] V1 + [0] 591.15/297.14 = [U51(isNeList(activate(V1)), activate(V2))] 591.15/297.14 591.15/297.14 [U51(tt(), V2)] = [1] V2 + [1] 591.15/297.14 >= [1] V2 + [1] 591.15/297.14 = [U52(isList(activate(V2)))] 591.15/297.14 591.15/297.14 [U52(tt())] = [1] 591.15/297.14 >= [1] 591.15/297.14 = [tt()] 591.15/297.14 591.15/297.14 [U61(tt())] = [1] 591.15/297.14 >= [1] 591.15/297.14 = [tt()] 591.15/297.14 591.15/297.14 [U71(tt(), P)] = [1] P + [1] 591.15/297.14 > [1] P + [0] 591.15/297.14 = [U72(isPal(activate(P)))] 591.15/297.14 591.15/297.14 [U72(tt())] = [1] 591.15/297.14 >= [1] 591.15/297.14 = [tt()] 591.15/297.14 591.15/297.14 [isPal(V)] = [1] V + [0] 591.15/297.14 ? [1] V + [4] 591.15/297.14 = [U81(isNePal(activate(V)))] 591.15/297.14 591.15/297.14 [isPal(n__nil())] = [0] 591.15/297.14 ? [1] 591.15/297.14 = [tt()] 591.15/297.14 591.15/297.14 [U81(tt())] = [1] 591.15/297.14 >= [1] 591.15/297.14 = [tt()] 591.15/297.14 591.15/297.14 [isQid(n__a())] = [0] 591.15/297.14 ? [1] 591.15/297.14 = [tt()] 591.15/297.14 591.15/297.14 [isQid(n__e())] = [0] 591.15/297.14 ? [1] 591.15/297.14 = [tt()] 591.15/297.14 591.15/297.14 [isQid(n__i())] = [0] 591.15/297.14 ? [1] 591.15/297.14 = [tt()] 591.15/297.14 591.15/297.14 [isQid(n__o())] = [0] 591.15/297.14 ? [1] 591.15/297.14 = [tt()] 591.15/297.14 591.15/297.14 [isQid(n__u())] = [0] 591.15/297.14 ? [1] 591.15/297.14 = [tt()] 591.15/297.14 591.15/297.14 [isNePal(V)] = [1] V + [4] 591.15/297.14 > [1] V + [0] 591.15/297.14 = [U61(isQid(activate(V)))] 591.15/297.14 591.15/297.14 [isNePal(n____(I, __(P, I)))] = [1] P + [2] I + [8] 591.15/297.14 > [1] P + [1] I + [0] 591.15/297.14 = [U71(isQid(activate(I)), activate(P))] 591.15/297.14 591.15/297.14 [a()] = [7] 591.15/297.14 > [0] 591.15/297.14 = [n__a()] 591.15/297.14 591.15/297.14 [e()] = [7] 591.15/297.14 > [0] 591.15/297.14 = [n__e()] 591.15/297.14 591.15/297.14 [i()] = [7] 591.15/297.14 > [0] 591.15/297.14 = [n__i()] 591.15/297.14 591.15/297.14 [o()] = [7] 591.15/297.14 > [0] 591.15/297.14 = [n__o()] 591.15/297.14 591.15/297.14 [u()] = [7] 591.15/297.14 > [0] 591.15/297.14 = [n__u()] 591.15/297.14 591.15/297.14 591.15/297.14 Further, it can be verified that all rules not oriented are covered by the weightgap condition. 591.15/297.14 591.15/297.14 We are left with following problem, upon which TcT provides the 591.15/297.14 certificate YES(O(1),O(n^1)). 591.15/297.14 591.15/297.14 Strict Trs: 591.15/297.14 { __(__(X, Y), Z) -> __(X, __(Y, Z)) 591.15/297.14 , U11(tt()) -> tt() 591.15/297.14 , U22(tt()) -> tt() 591.15/297.14 , isList(n__nil()) -> tt() 591.15/297.14 , isList(n____(V1, V2)) -> U21(isList(activate(V1)), activate(V2)) 591.15/297.14 , activate(X) -> X 591.15/297.14 , activate(n__nil()) -> nil() 591.15/297.14 , activate(n____(X1, X2)) -> __(X1, X2) 591.15/297.14 , activate(n__a()) -> a() 591.15/297.14 , activate(n__e()) -> e() 591.15/297.14 , activate(n__i()) -> i() 591.15/297.14 , activate(n__o()) -> o() 591.15/297.14 , activate(n__u()) -> u() 591.15/297.14 , U31(tt()) -> tt() 591.15/297.14 , U42(tt()) -> tt() 591.15/297.14 , isNeList(V) -> U31(isQid(activate(V))) 591.15/297.14 , isNeList(n____(V1, V2)) -> 591.15/297.14 U41(isList(activate(V1)), activate(V2)) 591.15/297.14 , isNeList(n____(V1, V2)) -> 591.15/297.14 U51(isNeList(activate(V1)), activate(V2)) 591.15/297.14 , U52(tt()) -> tt() 591.15/297.14 , U61(tt()) -> tt() 591.15/297.14 , U72(tt()) -> tt() 591.15/297.14 , isPal(V) -> U81(isNePal(activate(V))) 591.15/297.14 , isPal(n__nil()) -> tt() 591.15/297.14 , U81(tt()) -> tt() 591.15/297.14 , isQid(n__a()) -> tt() 591.15/297.14 , isQid(n__e()) -> tt() 591.15/297.14 , isQid(n__i()) -> tt() 591.15/297.14 , isQid(n__o()) -> tt() 591.15/297.14 , isQid(n__u()) -> tt() } 591.15/297.14 Weak Trs: 591.15/297.14 { __(X1, X2) -> n____(X1, X2) 591.15/297.14 , __(X, nil()) -> X 591.15/297.14 , __(nil(), X) -> X 591.15/297.14 , nil() -> n__nil() 591.15/297.14 , U21(tt(), V2) -> U22(isList(activate(V2))) 591.15/297.14 , isList(V) -> U11(isNeList(activate(V))) 591.15/297.14 , U41(tt(), V2) -> U42(isNeList(activate(V2))) 591.15/297.14 , U51(tt(), V2) -> U52(isList(activate(V2))) 591.15/297.14 , U71(tt(), P) -> U72(isPal(activate(P))) 591.15/297.14 , isNePal(V) -> U61(isQid(activate(V))) 591.15/297.14 , isNePal(n____(I, __(P, I))) -> 591.15/297.14 U71(isQid(activate(I)), activate(P)) 591.15/297.14 , a() -> n__a() 591.15/297.14 , e() -> n__e() 591.15/297.14 , i() -> n__i() 591.15/297.14 , o() -> n__o() 591.15/297.14 , u() -> n__u() } 591.15/297.14 Obligation: 591.15/297.14 runtime complexity 591.15/297.14 Answer: 591.15/297.14 YES(O(1),O(n^1)) 591.15/297.14 591.15/297.14 The weightgap principle applies (using the following nonconstant 591.15/297.14 growth matrix-interpretation) 591.15/297.14 591.15/297.14 The following argument positions are usable: 591.15/297.14 Uargs(__) = {2}, Uargs(U11) = {1}, Uargs(U21) = {1, 2}, 591.15/297.14 Uargs(U22) = {1}, Uargs(isList) = {1}, Uargs(activate) = {1}, 591.15/297.14 Uargs(U31) = {1}, Uargs(U41) = {1, 2}, Uargs(U42) = {1}, 591.15/297.14 Uargs(isNeList) = {1}, Uargs(U51) = {1, 2}, Uargs(U52) = {1}, 591.15/297.14 Uargs(U61) = {1}, Uargs(U71) = {1, 2}, Uargs(U72) = {1}, 591.15/297.14 Uargs(isPal) = {1}, Uargs(U81) = {1}, Uargs(n____) = {2}, 591.15/297.14 Uargs(isQid) = {1}, Uargs(isNePal) = {1} 591.15/297.14 591.15/297.14 TcT has computed the following matrix interpretation satisfying 591.15/297.14 not(EDA) and not(IDA(1)). 591.15/297.14 591.15/297.14 [__](x1, x2) = [1] x1 + [1] x2 + [4] 591.15/297.14 591.15/297.14 [nil] = [7] 591.15/297.14 591.15/297.14 [U11](x1) = [1] x1 + [0] 591.15/297.14 591.15/297.14 [tt] = [0] 591.15/297.14 591.15/297.14 [U21](x1, x2) = [1] x1 + [1] x2 + [0] 591.15/297.14 591.15/297.14 [U22](x1) = [1] x1 + [0] 591.15/297.14 591.15/297.14 [isList](x1) = [1] x1 + [0] 591.15/297.14 591.15/297.14 [activate](x1) = [1] x1 + [0] 591.15/297.14 591.15/297.14 [U31](x1) = [1] x1 + [0] 591.15/297.14 591.15/297.14 [U41](x1, x2) = [1] x1 + [1] x2 + [0] 591.15/297.14 591.15/297.14 [U42](x1) = [1] x1 + [0] 591.15/297.14 591.15/297.14 [isNeList](x1) = [1] x1 + [0] 591.15/297.14 591.15/297.14 [U51](x1, x2) = [1] x1 + [1] x2 + [0] 591.15/297.14 591.15/297.14 [U52](x1) = [1] x1 + [0] 591.15/297.14 591.15/297.14 [U61](x1) = [1] x1 + [0] 591.15/297.14 591.15/297.14 [U71](x1, x2) = [1] x1 + [1] x2 + [0] 591.15/297.14 591.15/297.14 [U72](x1) = [1] x1 + [0] 591.15/297.14 591.15/297.14 [isPal](x1) = [1] x1 + [0] 591.15/297.14 591.15/297.14 [U81](x1) = [1] x1 + [0] 591.15/297.14 591.15/297.14 [n__nil] = [0] 591.15/297.14 591.15/297.14 [n____](x1, x2) = [1] x1 + [1] x2 + [4] 591.15/297.14 591.15/297.14 [isQid](x1) = [1] x1 + [0] 591.15/297.14 591.15/297.14 [isNePal](x1) = [1] x1 + [4] 591.15/297.14 591.15/297.14 [n__a] = [0] 591.15/297.14 591.15/297.14 [n__e] = [0] 591.15/297.14 591.15/297.14 [n__i] = [0] 591.15/297.14 591.15/297.14 [n__o] = [0] 591.15/297.14 591.15/297.14 [n__u] = [1] 591.15/297.14 591.15/297.14 [a] = [7] 591.15/297.14 591.15/297.14 [e] = [7] 591.15/297.14 591.15/297.14 [i] = [7] 591.15/297.14 591.15/297.14 [o] = [7] 591.15/297.14 591.15/297.14 [u] = [7] 591.15/297.14 591.15/297.14 The order satisfies the following ordering constraints: 591.15/297.14 591.15/297.14 [__(X1, X2)] = [1] X1 + [1] X2 + [4] 591.15/297.14 >= [1] X1 + [1] X2 + [4] 591.15/297.14 = [n____(X1, X2)] 591.15/297.14 591.15/297.14 [__(X, nil())] = [1] X + [11] 591.15/297.14 > [1] X + [0] 591.15/297.14 = [X] 591.15/297.14 591.15/297.14 [__(__(X, Y), Z)] = [1] X + [1] Y + [1] Z + [8] 591.15/297.14 >= [1] X + [1] Y + [1] Z + [8] 591.15/297.14 = [__(X, __(Y, Z))] 591.15/297.14 591.15/297.14 [__(nil(), X)] = [1] X + [11] 591.15/297.14 > [1] X + [0] 591.15/297.14 = [X] 591.15/297.14 591.15/297.14 [nil()] = [7] 591.15/297.14 > [0] 591.15/297.14 = [n__nil()] 591.15/297.14 591.15/297.14 [U11(tt())] = [0] 591.15/297.14 >= [0] 591.15/297.14 = [tt()] 591.15/297.14 591.15/297.14 [U21(tt(), V2)] = [1] V2 + [0] 591.15/297.14 >= [1] V2 + [0] 591.15/297.14 = [U22(isList(activate(V2)))] 591.15/297.14 591.15/297.14 [U22(tt())] = [0] 591.15/297.14 >= [0] 591.15/297.14 = [tt()] 591.15/297.14 591.15/297.14 [isList(V)] = [1] V + [0] 591.15/297.14 >= [1] V + [0] 591.15/297.14 = [U11(isNeList(activate(V)))] 591.15/297.14 591.15/297.14 [isList(n__nil())] = [0] 591.15/297.14 >= [0] 591.15/297.14 = [tt()] 591.15/297.14 591.15/297.14 [isList(n____(V1, V2))] = [1] V2 + [1] V1 + [4] 591.15/297.14 > [1] V2 + [1] V1 + [0] 591.15/297.14 = [U21(isList(activate(V1)), activate(V2))] 591.15/297.14 591.15/297.14 [activate(X)] = [1] X + [0] 591.15/297.14 >= [1] X + [0] 591.15/297.14 = [X] 591.15/297.14 591.15/297.14 [activate(n__nil())] = [0] 591.15/297.14 ? [7] 591.15/297.14 = [nil()] 591.15/297.14 591.15/297.14 [activate(n____(X1, X2))] = [1] X1 + [1] X2 + [4] 591.15/297.14 >= [1] X1 + [1] X2 + [4] 591.15/297.14 = [__(X1, X2)] 591.15/297.14 591.15/297.14 [activate(n__a())] = [0] 591.15/297.14 ? [7] 591.15/297.14 = [a()] 591.15/297.14 591.15/297.14 [activate(n__e())] = [0] 591.15/297.14 ? [7] 591.15/297.14 = [e()] 591.15/297.14 591.15/297.14 [activate(n__i())] = [0] 591.15/297.14 ? [7] 591.15/297.14 = [i()] 591.15/297.14 591.15/297.14 [activate(n__o())] = [0] 591.15/297.14 ? [7] 591.15/297.14 = [o()] 591.15/297.14 591.15/297.14 [activate(n__u())] = [1] 591.15/297.14 ? [7] 591.15/297.14 = [u()] 591.15/297.14 591.15/297.14 [U31(tt())] = [0] 591.15/297.14 >= [0] 591.15/297.14 = [tt()] 591.15/297.14 591.15/297.14 [U41(tt(), V2)] = [1] V2 + [0] 591.15/297.14 >= [1] V2 + [0] 591.15/297.14 = [U42(isNeList(activate(V2)))] 591.15/297.14 591.15/297.14 [U42(tt())] = [0] 591.15/297.14 >= [0] 591.15/297.14 = [tt()] 591.15/297.14 591.15/297.14 [isNeList(V)] = [1] V + [0] 591.15/297.14 >= [1] V + [0] 591.15/297.14 = [U31(isQid(activate(V)))] 591.15/297.14 591.15/297.14 [isNeList(n____(V1, V2))] = [1] V2 + [1] V1 + [4] 591.15/297.14 > [1] V2 + [1] V1 + [0] 591.15/297.14 = [U41(isList(activate(V1)), activate(V2))] 591.15/297.14 591.15/297.14 [isNeList(n____(V1, V2))] = [1] V2 + [1] V1 + [4] 591.15/297.14 > [1] V2 + [1] V1 + [0] 591.15/297.14 = [U51(isNeList(activate(V1)), activate(V2))] 591.15/297.14 591.15/297.14 [U51(tt(), V2)] = [1] V2 + [0] 591.15/297.14 >= [1] V2 + [0] 591.15/297.14 = [U52(isList(activate(V2)))] 591.15/297.14 591.15/297.14 [U52(tt())] = [0] 591.15/297.14 >= [0] 591.15/297.14 = [tt()] 591.15/297.14 591.15/297.14 [U61(tt())] = [0] 591.15/297.14 >= [0] 591.15/297.14 = [tt()] 591.15/297.14 591.15/297.14 [U71(tt(), P)] = [1] P + [0] 591.15/297.14 >= [1] P + [0] 591.15/297.14 = [U72(isPal(activate(P)))] 591.15/297.14 591.15/297.14 [U72(tt())] = [0] 591.15/297.14 >= [0] 591.15/297.14 = [tt()] 591.15/297.14 591.15/297.14 [isPal(V)] = [1] V + [0] 591.15/297.14 ? [1] V + [4] 591.15/297.14 = [U81(isNePal(activate(V)))] 591.15/297.14 591.15/297.14 [isPal(n__nil())] = [0] 591.15/297.14 >= [0] 591.15/297.14 = [tt()] 591.15/297.14 591.15/297.14 [U81(tt())] = [0] 591.15/297.14 >= [0] 591.15/297.14 = [tt()] 591.15/297.14 591.15/297.14 [isQid(n__a())] = [0] 591.15/297.14 >= [0] 591.15/297.14 = [tt()] 591.15/297.14 591.15/297.14 [isQid(n__e())] = [0] 591.15/297.14 >= [0] 591.15/297.14 = [tt()] 591.15/297.14 591.15/297.14 [isQid(n__i())] = [0] 591.15/297.14 >= [0] 591.15/297.14 = [tt()] 591.15/297.14 591.15/297.14 [isQid(n__o())] = [0] 591.15/297.14 >= [0] 591.15/297.14 = [tt()] 591.15/297.14 591.15/297.14 [isQid(n__u())] = [1] 591.15/297.14 > [0] 591.15/297.14 = [tt()] 591.15/297.14 591.15/297.14 [isNePal(V)] = [1] V + [4] 591.15/297.14 > [1] V + [0] 591.15/297.14 = [U61(isQid(activate(V)))] 591.15/297.14 591.15/297.14 [isNePal(n____(I, __(P, I)))] = [1] P + [2] I + [12] 591.15/297.14 > [1] P + [1] I + [0] 591.15/297.14 = [U71(isQid(activate(I)), activate(P))] 591.15/297.14 591.15/297.14 [a()] = [7] 591.15/297.14 > [0] 591.15/297.14 = [n__a()] 591.15/297.14 591.15/297.14 [e()] = [7] 591.15/297.14 > [0] 591.15/297.14 = [n__e()] 591.15/297.14 591.15/297.14 [i()] = [7] 591.15/297.14 > [0] 591.15/297.14 = [n__i()] 591.15/297.14 591.15/297.14 [o()] = [7] 591.15/297.14 > [0] 591.15/297.14 = [n__o()] 591.15/297.14 591.15/297.14 [u()] = [7] 591.15/297.14 > [1] 591.15/297.14 = [n__u()] 591.15/297.14 591.15/297.14 591.15/297.14 Further, it can be verified that all rules not oriented are covered by the weightgap condition. 591.15/297.14 591.15/297.14 We are left with following problem, upon which TcT provides the 591.15/297.14 certificate YES(O(1),O(n^1)). 591.15/297.14 591.15/297.14 Strict Trs: 591.15/297.14 { __(__(X, Y), Z) -> __(X, __(Y, Z)) 591.15/297.14 , U11(tt()) -> tt() 591.15/297.14 , U22(tt()) -> tt() 591.15/297.14 , isList(n__nil()) -> tt() 591.15/297.14 , activate(X) -> X 591.15/297.14 , activate(n__nil()) -> nil() 591.15/297.14 , activate(n____(X1, X2)) -> __(X1, X2) 591.15/297.14 , activate(n__a()) -> a() 591.15/297.14 , activate(n__e()) -> e() 591.15/297.14 , activate(n__i()) -> i() 591.15/297.14 , activate(n__o()) -> o() 591.15/297.14 , activate(n__u()) -> u() 591.15/297.14 , U31(tt()) -> tt() 591.15/297.14 , U42(tt()) -> tt() 591.15/297.14 , isNeList(V) -> U31(isQid(activate(V))) 591.15/297.14 , U52(tt()) -> tt() 591.15/297.14 , U61(tt()) -> tt() 591.15/297.14 , U72(tt()) -> tt() 591.15/297.14 , isPal(V) -> U81(isNePal(activate(V))) 591.15/297.14 , isPal(n__nil()) -> tt() 591.15/297.14 , U81(tt()) -> tt() 591.15/297.14 , isQid(n__a()) -> tt() 591.15/297.14 , isQid(n__e()) -> tt() 591.15/297.14 , isQid(n__i()) -> tt() 591.15/297.14 , isQid(n__o()) -> tt() } 591.15/297.14 Weak Trs: 591.15/297.14 { __(X1, X2) -> n____(X1, X2) 591.15/297.14 , __(X, nil()) -> X 591.15/297.14 , __(nil(), X) -> X 591.15/297.14 , nil() -> n__nil() 591.15/297.14 , U21(tt(), V2) -> U22(isList(activate(V2))) 591.15/297.14 , isList(V) -> U11(isNeList(activate(V))) 591.15/297.14 , isList(n____(V1, V2)) -> U21(isList(activate(V1)), activate(V2)) 591.15/297.14 , U41(tt(), V2) -> U42(isNeList(activate(V2))) 591.15/297.14 , isNeList(n____(V1, V2)) -> 591.15/297.14 U41(isList(activate(V1)), activate(V2)) 591.15/297.14 , isNeList(n____(V1, V2)) -> 591.15/297.14 U51(isNeList(activate(V1)), activate(V2)) 591.15/297.14 , U51(tt(), V2) -> U52(isList(activate(V2))) 591.15/297.14 , U71(tt(), P) -> U72(isPal(activate(P))) 591.15/297.14 , isQid(n__u()) -> tt() 591.15/297.14 , isNePal(V) -> U61(isQid(activate(V))) 591.15/297.14 , isNePal(n____(I, __(P, I))) -> 591.15/297.14 U71(isQid(activate(I)), activate(P)) 591.15/297.14 , a() -> n__a() 591.15/297.14 , e() -> n__e() 591.15/297.14 , i() -> n__i() 591.15/297.14 , o() -> n__o() 591.15/297.14 , u() -> n__u() } 591.15/297.14 Obligation: 591.15/297.14 runtime complexity 591.15/297.14 Answer: 591.15/297.14 YES(O(1),O(n^1)) 591.15/297.14 591.15/297.14 The weightgap principle applies (using the following nonconstant 591.15/297.14 growth matrix-interpretation) 591.15/297.14 591.15/297.14 The following argument positions are usable: 591.15/297.14 Uargs(__) = {2}, Uargs(U11) = {1}, Uargs(U21) = {1, 2}, 591.15/297.14 Uargs(U22) = {1}, Uargs(isList) = {1}, Uargs(activate) = {1}, 591.15/297.14 Uargs(U31) = {1}, Uargs(U41) = {1, 2}, Uargs(U42) = {1}, 591.15/297.14 Uargs(isNeList) = {1}, Uargs(U51) = {1, 2}, Uargs(U52) = {1}, 591.15/297.14 Uargs(U61) = {1}, Uargs(U71) = {1, 2}, Uargs(U72) = {1}, 591.15/297.14 Uargs(isPal) = {1}, Uargs(U81) = {1}, Uargs(n____) = {2}, 591.15/297.14 Uargs(isQid) = {1}, Uargs(isNePal) = {1} 591.15/297.14 591.15/297.14 TcT has computed the following matrix interpretation satisfying 591.15/297.14 not(EDA) and not(IDA(1)). 591.15/297.14 591.15/297.14 [__](x1, x2) = [1] x1 + [1] x2 + [4] 591.15/297.14 591.15/297.14 [nil] = [7] 591.15/297.14 591.15/297.14 [U11](x1) = [1] x1 + [0] 591.15/297.14 591.15/297.14 [tt] = [0] 591.15/297.14 591.15/297.14 [U21](x1, x2) = [1] x1 + [1] x2 + [0] 591.15/297.14 591.15/297.14 [U22](x1) = [1] x1 + [0] 591.15/297.14 591.15/297.14 [isList](x1) = [1] x1 + [0] 591.15/297.14 591.15/297.14 [activate](x1) = [1] x1 + [0] 591.15/297.14 591.15/297.14 [U31](x1) = [1] x1 + [0] 591.15/297.14 591.15/297.14 [U41](x1, x2) = [1] x1 + [1] x2 + [0] 591.15/297.14 591.15/297.14 [U42](x1) = [1] x1 + [0] 591.15/297.14 591.15/297.14 [isNeList](x1) = [1] x1 + [0] 591.15/297.14 591.15/297.14 [U51](x1, x2) = [1] x1 + [1] x2 + [0] 591.15/297.14 591.15/297.14 [U52](x1) = [1] x1 + [0] 591.15/297.14 591.15/297.14 [U61](x1) = [1] x1 + [0] 591.15/297.14 591.15/297.14 [U71](x1, x2) = [1] x1 + [1] x2 + [0] 591.15/297.14 591.15/297.14 [U72](x1) = [1] x1 + [0] 591.15/297.14 591.15/297.14 [isPal](x1) = [1] x1 + [0] 591.15/297.14 591.15/297.14 [U81](x1) = [1] x1 + [0] 591.15/297.14 591.15/297.14 [n__nil] = [1] 591.15/297.14 591.15/297.14 [n____](x1, x2) = [1] x1 + [1] x2 + [0] 591.15/297.14 591.15/297.14 [isQid](x1) = [1] x1 + [0] 591.15/297.14 591.15/297.14 [isNePal](x1) = [1] x1 + [0] 591.15/297.14 591.15/297.14 [n__a] = [0] 591.15/297.14 591.15/297.14 [n__e] = [0] 591.15/297.14 591.15/297.14 [n__i] = [0] 591.15/297.14 591.15/297.14 [n__o] = [0] 591.15/297.14 591.15/297.14 [n__u] = [0] 591.15/297.14 591.15/297.14 [a] = [7] 591.15/297.14 591.15/297.14 [e] = [7] 591.15/297.14 591.15/297.14 [i] = [7] 591.15/297.14 591.15/297.14 [o] = [7] 591.15/297.14 591.15/297.14 [u] = [7] 591.15/297.14 591.15/297.14 The order satisfies the following ordering constraints: 591.15/297.14 591.15/297.14 [__(X1, X2)] = [1] X1 + [1] X2 + [4] 591.15/297.14 > [1] X1 + [1] X2 + [0] 591.15/297.14 = [n____(X1, X2)] 591.15/297.14 591.15/297.14 [__(X, nil())] = [1] X + [11] 591.15/297.14 > [1] X + [0] 591.15/297.14 = [X] 591.15/297.14 591.15/297.14 [__(__(X, Y), Z)] = [1] X + [1] Y + [1] Z + [8] 591.15/297.14 >= [1] X + [1] Y + [1] Z + [8] 591.15/297.14 = [__(X, __(Y, Z))] 591.15/297.14 591.15/297.14 [__(nil(), X)] = [1] X + [11] 591.15/297.14 > [1] X + [0] 591.15/297.14 = [X] 591.15/297.14 591.15/297.14 [nil()] = [7] 591.15/297.14 > [1] 591.15/297.14 = [n__nil()] 591.15/297.14 591.15/297.14 [U11(tt())] = [0] 591.15/297.14 >= [0] 591.15/297.14 = [tt()] 591.15/297.14 591.15/297.14 [U21(tt(), V2)] = [1] V2 + [0] 591.15/297.14 >= [1] V2 + [0] 591.15/297.14 = [U22(isList(activate(V2)))] 591.15/297.14 591.15/297.14 [U22(tt())] = [0] 591.15/297.14 >= [0] 591.15/297.14 = [tt()] 591.15/297.14 591.15/297.14 [isList(V)] = [1] V + [0] 591.15/297.14 >= [1] V + [0] 591.15/297.14 = [U11(isNeList(activate(V)))] 591.15/297.14 591.15/297.14 [isList(n__nil())] = [1] 591.15/297.14 > [0] 591.15/297.14 = [tt()] 591.15/297.14 591.15/297.15 [isList(n____(V1, V2))] = [1] V2 + [1] V1 + [0] 591.15/297.15 >= [1] V2 + [1] V1 + [0] 591.15/297.15 = [U21(isList(activate(V1)), activate(V2))] 591.15/297.15 591.15/297.15 [activate(X)] = [1] X + [0] 591.15/297.15 >= [1] X + [0] 591.15/297.15 = [X] 591.15/297.15 591.15/297.15 [activate(n__nil())] = [1] 591.15/297.15 ? [7] 591.15/297.15 = [nil()] 591.15/297.15 591.15/297.15 [activate(n____(X1, X2))] = [1] X1 + [1] X2 + [0] 591.15/297.15 ? [1] X1 + [1] X2 + [4] 591.15/297.15 = [__(X1, X2)] 591.15/297.15 591.15/297.15 [activate(n__a())] = [0] 591.15/297.15 ? [7] 591.15/297.15 = [a()] 591.15/297.15 591.15/297.15 [activate(n__e())] = [0] 591.15/297.15 ? [7] 591.15/297.15 = [e()] 591.15/297.15 591.15/297.15 [activate(n__i())] = [0] 591.15/297.15 ? [7] 591.15/297.15 = [i()] 591.15/297.15 591.15/297.15 [activate(n__o())] = [0] 591.15/297.15 ? [7] 591.15/297.15 = [o()] 591.15/297.15 591.15/297.15 [activate(n__u())] = [0] 591.15/297.15 ? [7] 591.15/297.15 = [u()] 591.15/297.15 591.15/297.15 [U31(tt())] = [0] 591.15/297.15 >= [0] 591.15/297.15 = [tt()] 591.15/297.15 591.15/297.15 [U41(tt(), V2)] = [1] V2 + [0] 591.15/297.15 >= [1] V2 + [0] 591.15/297.15 = [U42(isNeList(activate(V2)))] 591.15/297.15 591.15/297.15 [U42(tt())] = [0] 591.15/297.15 >= [0] 591.15/297.15 = [tt()] 591.15/297.15 591.15/297.15 [isNeList(V)] = [1] V + [0] 591.15/297.15 >= [1] V + [0] 591.15/297.15 = [U31(isQid(activate(V)))] 591.15/297.15 591.15/297.15 [isNeList(n____(V1, V2))] = [1] V2 + [1] V1 + [0] 591.15/297.15 >= [1] V2 + [1] V1 + [0] 591.15/297.15 = [U41(isList(activate(V1)), activate(V2))] 591.15/297.15 591.15/297.15 [isNeList(n____(V1, V2))] = [1] V2 + [1] V1 + [0] 591.15/297.15 >= [1] V2 + [1] V1 + [0] 591.15/297.15 = [U51(isNeList(activate(V1)), activate(V2))] 591.15/297.15 591.15/297.15 [U51(tt(), V2)] = [1] V2 + [0] 591.15/297.15 >= [1] V2 + [0] 591.15/297.15 = [U52(isList(activate(V2)))] 591.15/297.15 591.15/297.15 [U52(tt())] = [0] 591.15/297.15 >= [0] 591.15/297.15 = [tt()] 591.15/297.15 591.15/297.15 [U61(tt())] = [0] 591.15/297.15 >= [0] 591.15/297.15 = [tt()] 591.15/297.15 591.15/297.15 [U71(tt(), P)] = [1] P + [0] 591.15/297.15 >= [1] P + [0] 591.15/297.15 = [U72(isPal(activate(P)))] 591.15/297.15 591.15/297.15 [U72(tt())] = [0] 591.15/297.15 >= [0] 591.15/297.15 = [tt()] 591.15/297.15 591.15/297.15 [isPal(V)] = [1] V + [0] 591.15/297.15 >= [1] V + [0] 591.15/297.15 = [U81(isNePal(activate(V)))] 591.15/297.15 591.15/297.15 [isPal(n__nil())] = [1] 591.15/297.15 > [0] 591.15/297.15 = [tt()] 591.15/297.15 591.15/297.15 [U81(tt())] = [0] 591.15/297.15 >= [0] 591.15/297.15 = [tt()] 591.15/297.15 591.15/297.15 [isQid(n__a())] = [0] 591.15/297.15 >= [0] 591.15/297.15 = [tt()] 591.15/297.15 591.15/297.15 [isQid(n__e())] = [0] 591.15/297.15 >= [0] 591.15/297.15 = [tt()] 591.15/297.15 591.15/297.15 [isQid(n__i())] = [0] 591.15/297.15 >= [0] 591.15/297.15 = [tt()] 591.15/297.15 591.15/297.15 [isQid(n__o())] = [0] 591.15/297.15 >= [0] 591.15/297.15 = [tt()] 591.15/297.15 591.15/297.15 [isQid(n__u())] = [0] 591.15/297.15 >= [0] 591.15/297.15 = [tt()] 591.15/297.15 591.15/297.15 [isNePal(V)] = [1] V + [0] 591.15/297.15 >= [1] V + [0] 591.15/297.15 = [U61(isQid(activate(V)))] 591.15/297.15 591.15/297.15 [isNePal(n____(I, __(P, I)))] = [1] P + [2] I + [4] 591.15/297.15 > [1] P + [1] I + [0] 591.15/297.15 = [U71(isQid(activate(I)), activate(P))] 591.15/297.15 591.15/297.15 [a()] = [7] 591.15/297.15 > [0] 591.15/297.15 = [n__a()] 591.15/297.15 591.15/297.15 [e()] = [7] 591.15/297.15 > [0] 591.15/297.15 = [n__e()] 591.15/297.15 591.15/297.15 [i()] = [7] 591.15/297.15 > [0] 591.15/297.15 = [n__i()] 591.15/297.15 591.15/297.15 [o()] = [7] 591.15/297.15 > [0] 591.15/297.15 = [n__o()] 591.15/297.15 591.15/297.15 [u()] = [7] 591.15/297.15 > [0] 591.15/297.15 = [n__u()] 591.15/297.15 591.15/297.15 591.15/297.15 Further, it can be verified that all rules not oriented are covered by the weightgap condition. 591.15/297.15 591.15/297.15 We are left with following problem, upon which TcT provides the 591.15/297.15 certificate YES(O(1),O(n^1)). 591.15/297.15 591.15/297.15 Strict Trs: 591.15/297.15 { __(__(X, Y), Z) -> __(X, __(Y, Z)) 591.15/297.15 , U11(tt()) -> tt() 591.15/297.15 , U22(tt()) -> tt() 591.15/297.15 , activate(X) -> X 591.15/297.15 , activate(n__nil()) -> nil() 591.15/297.15 , activate(n____(X1, X2)) -> __(X1, X2) 591.15/297.15 , activate(n__a()) -> a() 591.15/297.15 , activate(n__e()) -> e() 591.15/297.15 , activate(n__i()) -> i() 591.15/297.15 , activate(n__o()) -> o() 591.15/297.15 , activate(n__u()) -> u() 591.15/297.15 , U31(tt()) -> tt() 591.15/297.15 , U42(tt()) -> tt() 591.15/297.15 , isNeList(V) -> U31(isQid(activate(V))) 591.15/297.15 , U52(tt()) -> tt() 591.15/297.15 , U61(tt()) -> tt() 591.15/297.15 , U72(tt()) -> tt() 591.15/297.15 , isPal(V) -> U81(isNePal(activate(V))) 591.15/297.15 , U81(tt()) -> tt() 591.15/297.15 , isQid(n__a()) -> tt() 591.15/297.15 , isQid(n__e()) -> tt() 591.15/297.15 , isQid(n__i()) -> tt() 591.15/297.15 , isQid(n__o()) -> tt() } 591.15/297.15 Weak Trs: 591.15/297.15 { __(X1, X2) -> n____(X1, X2) 591.15/297.15 , __(X, nil()) -> X 591.15/297.15 , __(nil(), X) -> X 591.15/297.15 , nil() -> n__nil() 591.15/297.15 , U21(tt(), V2) -> U22(isList(activate(V2))) 591.15/297.15 , isList(V) -> U11(isNeList(activate(V))) 591.15/297.15 , isList(n__nil()) -> tt() 591.15/297.15 , isList(n____(V1, V2)) -> U21(isList(activate(V1)), activate(V2)) 591.15/297.15 , U41(tt(), V2) -> U42(isNeList(activate(V2))) 591.15/297.15 , isNeList(n____(V1, V2)) -> 591.15/297.15 U41(isList(activate(V1)), activate(V2)) 591.15/297.15 , isNeList(n____(V1, V2)) -> 591.15/297.15 U51(isNeList(activate(V1)), activate(V2)) 591.15/297.15 , U51(tt(), V2) -> U52(isList(activate(V2))) 591.15/297.15 , U71(tt(), P) -> U72(isPal(activate(P))) 591.15/297.15 , isPal(n__nil()) -> tt() 591.15/297.15 , isQid(n__u()) -> tt() 591.15/297.15 , isNePal(V) -> U61(isQid(activate(V))) 591.15/297.15 , isNePal(n____(I, __(P, I))) -> 591.15/297.15 U71(isQid(activate(I)), activate(P)) 591.15/297.15 , a() -> n__a() 591.15/297.15 , e() -> n__e() 591.15/297.15 , i() -> n__i() 591.15/297.15 , o() -> n__o() 591.15/297.15 , u() -> n__u() } 591.15/297.15 Obligation: 591.15/297.15 runtime complexity 591.15/297.15 Answer: 591.15/297.15 YES(O(1),O(n^1)) 591.15/297.15 591.15/297.15 The weightgap principle applies (using the following nonconstant 591.15/297.15 growth matrix-interpretation) 591.15/297.15 591.15/297.15 The following argument positions are usable: 591.15/297.15 Uargs(__) = {2}, Uargs(U11) = {1}, Uargs(U21) = {1, 2}, 591.15/297.15 Uargs(U22) = {1}, Uargs(isList) = {1}, Uargs(activate) = {1}, 591.15/297.15 Uargs(U31) = {1}, Uargs(U41) = {1, 2}, Uargs(U42) = {1}, 591.15/297.15 Uargs(isNeList) = {1}, Uargs(U51) = {1, 2}, Uargs(U52) = {1}, 591.15/297.15 Uargs(U61) = {1}, Uargs(U71) = {1, 2}, Uargs(U72) = {1}, 591.15/297.15 Uargs(isPal) = {1}, Uargs(U81) = {1}, Uargs(n____) = {2}, 591.15/297.15 Uargs(isQid) = {1}, Uargs(isNePal) = {1} 591.15/297.15 591.15/297.15 TcT has computed the following matrix interpretation satisfying 591.15/297.15 not(EDA) and not(IDA(1)). 591.15/297.15 591.15/297.15 [__](x1, x2) = [1] x1 + [1] x2 + [0] 591.15/297.15 591.15/297.15 [nil] = [7] 591.15/297.15 591.15/297.15 [U11](x1) = [1] x1 + [0] 591.15/297.15 591.15/297.15 [tt] = [0] 591.15/297.15 591.15/297.15 [U21](x1, x2) = [1] x1 + [1] x2 + [0] 591.15/297.15 591.15/297.15 [U22](x1) = [1] x1 + [0] 591.15/297.15 591.15/297.15 [isList](x1) = [1] x1 + [0] 591.15/297.15 591.15/297.15 [activate](x1) = [1] x1 + [0] 591.15/297.15 591.15/297.15 [U31](x1) = [1] x1 + [0] 591.15/297.15 591.15/297.15 [U41](x1, x2) = [1] x1 + [1] x2 + [0] 591.15/297.15 591.15/297.15 [U42](x1) = [1] x1 + [0] 591.15/297.15 591.15/297.15 [isNeList](x1) = [1] x1 + [0] 591.15/297.15 591.15/297.15 [U51](x1, x2) = [1] x1 + [1] x2 + [0] 591.15/297.15 591.15/297.15 [U52](x1) = [1] x1 + [0] 591.15/297.15 591.15/297.15 [U61](x1) = [1] x1 + [0] 591.15/297.15 591.15/297.15 [U71](x1, x2) = [1] x1 + [1] x2 + [0] 591.15/297.15 591.15/297.15 [U72](x1) = [1] x1 + [0] 591.15/297.15 591.15/297.15 [isPal](x1) = [1] x1 + [0] 591.15/297.15 591.15/297.15 [U81](x1) = [1] x1 + [0] 591.15/297.15 591.15/297.15 [n__nil] = [0] 591.15/297.15 591.15/297.15 [n____](x1, x2) = [1] x1 + [1] x2 + [0] 591.15/297.15 591.15/297.15 [isQid](x1) = [1] x1 + [0] 591.15/297.15 591.15/297.15 [isNePal](x1) = [1] x1 + [4] 591.15/297.15 591.15/297.15 [n__a] = [0] 591.15/297.15 591.15/297.15 [n__e] = [0] 591.15/297.15 591.15/297.15 [n__i] = [1] 591.15/297.15 591.15/297.15 [n__o] = [0] 591.15/297.15 591.15/297.15 [n__u] = [0] 591.15/297.15 591.15/297.15 [a] = [7] 591.15/297.15 591.15/297.15 [e] = [7] 591.15/297.15 591.15/297.15 [i] = [7] 591.15/297.15 591.15/297.15 [o] = [7] 591.15/297.15 591.15/297.15 [u] = [7] 591.15/297.15 591.15/297.15 The order satisfies the following ordering constraints: 591.15/297.15 591.15/297.15 [__(X1, X2)] = [1] X1 + [1] X2 + [0] 591.15/297.15 >= [1] X1 + [1] X2 + [0] 591.15/297.15 = [n____(X1, X2)] 591.15/297.15 591.15/297.15 [__(X, nil())] = [1] X + [7] 591.15/297.15 > [1] X + [0] 591.15/297.15 = [X] 591.15/297.15 591.15/297.15 [__(__(X, Y), Z)] = [1] X + [1] Y + [1] Z + [0] 591.15/297.15 >= [1] X + [1] Y + [1] Z + [0] 591.15/297.15 = [__(X, __(Y, Z))] 591.15/297.15 591.15/297.15 [__(nil(), X)] = [1] X + [7] 591.15/297.15 > [1] X + [0] 591.15/297.15 = [X] 591.15/297.15 591.15/297.15 [nil()] = [7] 591.15/297.15 > [0] 591.15/297.15 = [n__nil()] 591.15/297.15 591.15/297.15 [U11(tt())] = [0] 591.15/297.15 >= [0] 591.15/297.15 = [tt()] 591.15/297.15 591.15/297.15 [U21(tt(), V2)] = [1] V2 + [0] 591.15/297.15 >= [1] V2 + [0] 591.15/297.15 = [U22(isList(activate(V2)))] 591.15/297.15 591.15/297.15 [U22(tt())] = [0] 591.15/297.15 >= [0] 591.15/297.15 = [tt()] 591.15/297.15 591.15/297.15 [isList(V)] = [1] V + [0] 591.15/297.15 >= [1] V + [0] 591.15/297.15 = [U11(isNeList(activate(V)))] 591.15/297.15 591.15/297.15 [isList(n__nil())] = [0] 591.15/297.15 >= [0] 591.15/297.15 = [tt()] 591.15/297.15 591.15/297.15 [isList(n____(V1, V2))] = [1] V2 + [1] V1 + [0] 591.15/297.15 >= [1] V2 + [1] V1 + [0] 591.15/297.15 = [U21(isList(activate(V1)), activate(V2))] 591.15/297.15 591.15/297.15 [activate(X)] = [1] X + [0] 591.15/297.15 >= [1] X + [0] 591.15/297.15 = [X] 591.15/297.15 591.15/297.15 [activate(n__nil())] = [0] 591.15/297.15 ? [7] 591.15/297.15 = [nil()] 591.15/297.15 591.15/297.15 [activate(n____(X1, X2))] = [1] X1 + [1] X2 + [0] 591.15/297.15 >= [1] X1 + [1] X2 + [0] 591.15/297.15 = [__(X1, X2)] 591.15/297.15 591.15/297.15 [activate(n__a())] = [0] 591.15/297.15 ? [7] 591.15/297.15 = [a()] 591.15/297.15 591.15/297.15 [activate(n__e())] = [0] 591.15/297.15 ? [7] 591.15/297.15 = [e()] 591.15/297.15 591.15/297.15 [activate(n__i())] = [1] 591.15/297.15 ? [7] 591.15/297.15 = [i()] 591.15/297.15 591.15/297.15 [activate(n__o())] = [0] 591.15/297.15 ? [7] 591.15/297.15 = [o()] 591.15/297.15 591.15/297.15 [activate(n__u())] = [0] 591.15/297.15 ? [7] 591.15/297.15 = [u()] 591.15/297.15 591.15/297.15 [U31(tt())] = [0] 591.15/297.15 >= [0] 591.15/297.15 = [tt()] 591.15/297.15 591.15/297.15 [U41(tt(), V2)] = [1] V2 + [0] 591.15/297.15 >= [1] V2 + [0] 591.15/297.15 = [U42(isNeList(activate(V2)))] 591.15/297.15 591.15/297.15 [U42(tt())] = [0] 591.15/297.15 >= [0] 591.15/297.15 = [tt()] 591.15/297.15 591.15/297.15 [isNeList(V)] = [1] V + [0] 591.15/297.15 >= [1] V + [0] 591.15/297.15 = [U31(isQid(activate(V)))] 591.15/297.15 591.15/297.15 [isNeList(n____(V1, V2))] = [1] V2 + [1] V1 + [0] 591.15/297.15 >= [1] V2 + [1] V1 + [0] 591.15/297.15 = [U41(isList(activate(V1)), activate(V2))] 591.15/297.15 591.15/297.15 [isNeList(n____(V1, V2))] = [1] V2 + [1] V1 + [0] 591.15/297.15 >= [1] V2 + [1] V1 + [0] 591.15/297.15 = [U51(isNeList(activate(V1)), activate(V2))] 591.15/297.15 591.15/297.15 [U51(tt(), V2)] = [1] V2 + [0] 591.15/297.15 >= [1] V2 + [0] 591.15/297.15 = [U52(isList(activate(V2)))] 591.15/297.15 591.15/297.15 [U52(tt())] = [0] 591.15/297.15 >= [0] 591.15/297.15 = [tt()] 591.15/297.15 591.15/297.15 [U61(tt())] = [0] 591.15/297.15 >= [0] 591.15/297.15 = [tt()] 591.15/297.15 591.15/297.15 [U71(tt(), P)] = [1] P + [0] 591.15/297.15 >= [1] P + [0] 591.15/297.15 = [U72(isPal(activate(P)))] 591.15/297.15 591.15/297.15 [U72(tt())] = [0] 591.15/297.15 >= [0] 591.15/297.15 = [tt()] 591.15/297.15 591.15/297.15 [isPal(V)] = [1] V + [0] 591.15/297.15 ? [1] V + [4] 591.15/297.15 = [U81(isNePal(activate(V)))] 591.15/297.15 591.15/297.15 [isPal(n__nil())] = [0] 591.15/297.15 >= [0] 591.15/297.15 = [tt()] 591.15/297.15 591.15/297.15 [U81(tt())] = [0] 591.15/297.15 >= [0] 591.15/297.15 = [tt()] 591.15/297.15 591.15/297.15 [isQid(n__a())] = [0] 591.15/297.15 >= [0] 591.15/297.15 = [tt()] 591.15/297.15 591.15/297.15 [isQid(n__e())] = [0] 591.15/297.15 >= [0] 591.15/297.15 = [tt()] 591.15/297.15 591.15/297.15 [isQid(n__i())] = [1] 591.15/297.15 > [0] 591.15/297.15 = [tt()] 591.15/297.15 591.15/297.15 [isQid(n__o())] = [0] 591.15/297.15 >= [0] 591.15/297.15 = [tt()] 591.15/297.15 591.15/297.15 [isQid(n__u())] = [0] 591.15/297.15 >= [0] 591.15/297.15 = [tt()] 591.15/297.15 591.15/297.15 [isNePal(V)] = [1] V + [4] 591.15/297.15 > [1] V + [0] 591.15/297.15 = [U61(isQid(activate(V)))] 591.15/297.15 591.15/297.15 [isNePal(n____(I, __(P, I)))] = [1] P + [2] I + [4] 591.15/297.15 > [1] P + [1] I + [0] 591.15/297.15 = [U71(isQid(activate(I)), activate(P))] 591.15/297.15 591.15/297.15 [a()] = [7] 591.15/297.15 > [0] 591.15/297.15 = [n__a()] 591.15/297.15 591.15/297.15 [e()] = [7] 591.15/297.15 > [0] 591.15/297.15 = [n__e()] 591.15/297.15 591.15/297.15 [i()] = [7] 591.15/297.15 > [1] 591.15/297.15 = [n__i()] 591.15/297.15 591.15/297.15 [o()] = [7] 591.15/297.15 > [0] 591.15/297.15 = [n__o()] 591.15/297.15 591.15/297.15 [u()] = [7] 591.15/297.15 > [0] 591.15/297.15 = [n__u()] 591.15/297.15 591.15/297.15 591.15/297.15 Further, it can be verified that all rules not oriented are covered by the weightgap condition. 591.15/297.15 591.15/297.15 We are left with following problem, upon which TcT provides the 591.15/297.15 certificate YES(O(1),O(n^1)). 591.15/297.15 591.15/297.15 Strict Trs: 591.15/297.15 { __(__(X, Y), Z) -> __(X, __(Y, Z)) 591.15/297.15 , U11(tt()) -> tt() 591.15/297.15 , U22(tt()) -> tt() 591.15/297.15 , activate(X) -> X 591.15/297.15 , activate(n__nil()) -> nil() 591.15/297.15 , activate(n____(X1, X2)) -> __(X1, X2) 591.15/297.15 , activate(n__a()) -> a() 591.15/297.15 , activate(n__e()) -> e() 591.15/297.15 , activate(n__i()) -> i() 591.15/297.15 , activate(n__o()) -> o() 591.15/297.15 , activate(n__u()) -> u() 591.15/297.15 , U31(tt()) -> tt() 591.15/297.15 , U42(tt()) -> tt() 591.15/297.15 , isNeList(V) -> U31(isQid(activate(V))) 591.15/297.15 , U52(tt()) -> tt() 591.15/297.15 , U61(tt()) -> tt() 591.15/297.15 , U72(tt()) -> tt() 591.15/297.15 , isPal(V) -> U81(isNePal(activate(V))) 591.15/297.15 , U81(tt()) -> tt() 591.15/297.15 , isQid(n__a()) -> tt() 591.15/297.15 , isQid(n__e()) -> tt() 591.15/297.15 , isQid(n__o()) -> tt() } 591.15/297.15 Weak Trs: 591.15/297.15 { __(X1, X2) -> n____(X1, X2) 591.15/297.15 , __(X, nil()) -> X 591.15/297.15 , __(nil(), X) -> X 591.15/297.15 , nil() -> n__nil() 591.15/297.15 , U21(tt(), V2) -> U22(isList(activate(V2))) 591.15/297.15 , isList(V) -> U11(isNeList(activate(V))) 591.15/297.15 , isList(n__nil()) -> tt() 591.15/297.15 , isList(n____(V1, V2)) -> U21(isList(activate(V1)), activate(V2)) 591.15/297.15 , U41(tt(), V2) -> U42(isNeList(activate(V2))) 591.15/297.15 , isNeList(n____(V1, V2)) -> 591.15/297.15 U41(isList(activate(V1)), activate(V2)) 591.15/297.15 , isNeList(n____(V1, V2)) -> 591.15/297.15 U51(isNeList(activate(V1)), activate(V2)) 591.15/297.15 , U51(tt(), V2) -> U52(isList(activate(V2))) 591.15/297.15 , U71(tt(), P) -> U72(isPal(activate(P))) 591.15/297.15 , isPal(n__nil()) -> tt() 591.15/297.15 , isQid(n__i()) -> tt() 591.15/297.15 , isQid(n__u()) -> tt() 591.15/297.15 , isNePal(V) -> U61(isQid(activate(V))) 591.15/297.15 , isNePal(n____(I, __(P, I))) -> 591.15/297.15 U71(isQid(activate(I)), activate(P)) 591.15/297.15 , a() -> n__a() 591.15/297.15 , e() -> n__e() 591.15/297.15 , i() -> n__i() 591.15/297.15 , o() -> n__o() 591.15/297.15 , u() -> n__u() } 591.15/297.15 Obligation: 591.15/297.15 runtime complexity 591.15/297.15 Answer: 591.15/297.15 YES(O(1),O(n^1)) 591.15/297.15 591.15/297.15 The weightgap principle applies (using the following nonconstant 591.15/297.15 growth matrix-interpretation) 591.15/297.15 591.15/297.15 The following argument positions are usable: 591.15/297.15 Uargs(__) = {2}, Uargs(U11) = {1}, Uargs(U21) = {1, 2}, 591.15/297.15 Uargs(U22) = {1}, Uargs(isList) = {1}, Uargs(activate) = {1}, 591.15/297.15 Uargs(U31) = {1}, Uargs(U41) = {1, 2}, Uargs(U42) = {1}, 591.15/297.15 Uargs(isNeList) = {1}, Uargs(U51) = {1, 2}, Uargs(U52) = {1}, 591.15/297.15 Uargs(U61) = {1}, Uargs(U71) = {1, 2}, Uargs(U72) = {1}, 591.15/297.15 Uargs(isPal) = {1}, Uargs(U81) = {1}, Uargs(n____) = {2}, 591.15/297.15 Uargs(isQid) = {1}, Uargs(isNePal) = {1} 591.15/297.15 591.15/297.15 TcT has computed the following matrix interpretation satisfying 591.15/297.15 not(EDA) and not(IDA(1)). 591.15/297.15 591.15/297.15 [__](x1, x2) = [1] x1 + [1] x2 + [0] 591.15/297.15 591.15/297.15 [nil] = [7] 591.15/297.15 591.15/297.15 [U11](x1) = [1] x1 + [0] 591.15/297.15 591.15/297.15 [tt] = [0] 591.15/297.15 591.15/297.15 [U21](x1, x2) = [1] x1 + [1] x2 + [0] 591.15/297.15 591.15/297.15 [U22](x1) = [1] x1 + [0] 591.15/297.15 591.15/297.15 [isList](x1) = [1] x1 + [0] 591.15/297.15 591.15/297.15 [activate](x1) = [1] x1 + [0] 591.15/297.15 591.15/297.15 [U31](x1) = [1] x1 + [0] 591.15/297.15 591.15/297.15 [U41](x1, x2) = [1] x1 + [1] x2 + [0] 591.15/297.15 591.15/297.15 [U42](x1) = [1] x1 + [0] 591.15/297.15 591.15/297.15 [isNeList](x1) = [1] x1 + [0] 591.15/297.15 591.15/297.15 [U51](x1, x2) = [1] x1 + [1] x2 + [0] 591.15/297.15 591.15/297.15 [U52](x1) = [1] x1 + [0] 591.15/297.15 591.15/297.15 [U61](x1) = [1] x1 + [0] 591.15/297.15 591.15/297.15 [U71](x1, x2) = [1] x1 + [1] x2 + [0] 591.15/297.15 591.15/297.15 [U72](x1) = [1] x1 + [0] 591.15/297.15 591.15/297.15 [isPal](x1) = [1] x1 + [0] 591.15/297.15 591.15/297.15 [U81](x1) = [1] x1 + [0] 591.15/297.15 591.15/297.15 [n__nil] = [0] 591.15/297.15 591.15/297.15 [n____](x1, x2) = [1] x1 + [1] x2 + [0] 591.15/297.15 591.15/297.15 [isQid](x1) = [1] x1 + [0] 591.15/297.15 591.15/297.15 [isNePal](x1) = [1] x1 + [0] 591.15/297.15 591.15/297.15 [n__a] = [0] 591.15/297.15 591.15/297.15 [n__e] = [0] 591.15/297.15 591.15/297.15 [n__i] = [0] 591.15/297.15 591.15/297.15 [n__o] = [1] 591.15/297.15 591.15/297.15 [n__u] = [0] 591.15/297.15 591.15/297.15 [a] = [7] 591.15/297.15 591.15/297.15 [e] = [7] 591.15/297.15 591.15/297.15 [i] = [7] 591.15/297.15 591.15/297.15 [o] = [7] 591.15/297.15 591.15/297.15 [u] = [7] 591.15/297.15 591.15/297.15 The order satisfies the following ordering constraints: 591.15/297.15 591.15/297.15 [__(X1, X2)] = [1] X1 + [1] X2 + [0] 591.15/297.15 >= [1] X1 + [1] X2 + [0] 591.15/297.15 = [n____(X1, X2)] 591.15/297.15 591.15/297.15 [__(X, nil())] = [1] X + [7] 591.15/297.15 > [1] X + [0] 591.15/297.15 = [X] 591.15/297.15 591.15/297.15 [__(__(X, Y), Z)] = [1] X + [1] Y + [1] Z + [0] 591.15/297.15 >= [1] X + [1] Y + [1] Z + [0] 591.15/297.15 = [__(X, __(Y, Z))] 591.15/297.15 591.15/297.15 [__(nil(), X)] = [1] X + [7] 591.15/297.15 > [1] X + [0] 591.15/297.15 = [X] 591.15/297.15 591.15/297.15 [nil()] = [7] 591.15/297.15 > [0] 591.15/297.15 = [n__nil()] 591.15/297.15 591.15/297.15 [U11(tt())] = [0] 591.15/297.15 >= [0] 591.15/297.15 = [tt()] 591.15/297.15 591.15/297.15 [U21(tt(), V2)] = [1] V2 + [0] 591.15/297.15 >= [1] V2 + [0] 591.15/297.15 = [U22(isList(activate(V2)))] 591.15/297.15 591.15/297.15 [U22(tt())] = [0] 591.15/297.15 >= [0] 591.15/297.15 = [tt()] 591.15/297.15 591.15/297.15 [isList(V)] = [1] V + [0] 591.15/297.15 >= [1] V + [0] 591.15/297.15 = [U11(isNeList(activate(V)))] 591.15/297.15 591.15/297.15 [isList(n__nil())] = [0] 591.15/297.15 >= [0] 591.15/297.15 = [tt()] 591.15/297.15 591.15/297.15 [isList(n____(V1, V2))] = [1] V2 + [1] V1 + [0] 591.15/297.15 >= [1] V2 + [1] V1 + [0] 591.15/297.15 = [U21(isList(activate(V1)), activate(V2))] 591.15/297.15 591.15/297.15 [activate(X)] = [1] X + [0] 591.15/297.15 >= [1] X + [0] 591.15/297.15 = [X] 591.15/297.15 591.15/297.15 [activate(n__nil())] = [0] 591.15/297.15 ? [7] 591.15/297.15 = [nil()] 591.15/297.15 591.15/297.15 [activate(n____(X1, X2))] = [1] X1 + [1] X2 + [0] 591.15/297.15 >= [1] X1 + [1] X2 + [0] 591.15/297.15 = [__(X1, X2)] 591.15/297.15 591.15/297.15 [activate(n__a())] = [0] 591.15/297.15 ? [7] 591.15/297.15 = [a()] 591.15/297.15 591.15/297.15 [activate(n__e())] = [0] 591.15/297.15 ? [7] 591.15/297.15 = [e()] 591.15/297.15 591.15/297.15 [activate(n__i())] = [0] 591.15/297.15 ? [7] 591.15/297.15 = [i()] 591.15/297.15 591.15/297.15 [activate(n__o())] = [1] 591.15/297.15 ? [7] 591.15/297.15 = [o()] 591.15/297.15 591.15/297.15 [activate(n__u())] = [0] 591.15/297.15 ? [7] 591.15/297.15 = [u()] 591.15/297.15 591.15/297.15 [U31(tt())] = [0] 591.15/297.15 >= [0] 591.15/297.15 = [tt()] 591.15/297.15 591.15/297.15 [U41(tt(), V2)] = [1] V2 + [0] 591.15/297.15 >= [1] V2 + [0] 591.15/297.15 = [U42(isNeList(activate(V2)))] 591.15/297.15 591.15/297.15 [U42(tt())] = [0] 591.15/297.15 >= [0] 591.15/297.15 = [tt()] 591.15/297.15 591.15/297.15 [isNeList(V)] = [1] V + [0] 591.15/297.15 >= [1] V + [0] 591.15/297.15 = [U31(isQid(activate(V)))] 591.15/297.15 591.15/297.15 [isNeList(n____(V1, V2))] = [1] V2 + [1] V1 + [0] 591.15/297.15 >= [1] V2 + [1] V1 + [0] 591.15/297.15 = [U41(isList(activate(V1)), activate(V2))] 591.15/297.15 591.15/297.15 [isNeList(n____(V1, V2))] = [1] V2 + [1] V1 + [0] 591.15/297.15 >= [1] V2 + [1] V1 + [0] 591.15/297.15 = [U51(isNeList(activate(V1)), activate(V2))] 591.15/297.15 591.15/297.15 [U51(tt(), V2)] = [1] V2 + [0] 591.15/297.15 >= [1] V2 + [0] 591.15/297.15 = [U52(isList(activate(V2)))] 591.15/297.15 591.15/297.15 [U52(tt())] = [0] 591.15/297.15 >= [0] 591.15/297.15 = [tt()] 591.15/297.15 591.15/297.15 [U61(tt())] = [0] 591.15/297.15 >= [0] 591.15/297.15 = [tt()] 591.15/297.15 591.15/297.15 [U71(tt(), P)] = [1] P + [0] 591.15/297.15 >= [1] P + [0] 591.15/297.15 = [U72(isPal(activate(P)))] 591.15/297.15 591.15/297.15 [U72(tt())] = [0] 591.15/297.15 >= [0] 591.15/297.15 = [tt()] 591.15/297.15 591.15/297.15 [isPal(V)] = [1] V + [0] 591.15/297.15 >= [1] V + [0] 591.15/297.15 = [U81(isNePal(activate(V)))] 591.15/297.15 591.15/297.15 [isPal(n__nil())] = [0] 591.15/297.15 >= [0] 591.15/297.15 = [tt()] 591.15/297.15 591.15/297.15 [U81(tt())] = [0] 591.15/297.15 >= [0] 591.15/297.15 = [tt()] 591.15/297.15 591.15/297.15 [isQid(n__a())] = [0] 591.15/297.15 >= [0] 591.15/297.15 = [tt()] 591.15/297.15 591.15/297.15 [isQid(n__e())] = [0] 591.15/297.15 >= [0] 591.15/297.15 = [tt()] 591.15/297.15 591.15/297.15 [isQid(n__i())] = [0] 591.15/297.15 >= [0] 591.15/297.15 = [tt()] 591.15/297.15 591.15/297.15 [isQid(n__o())] = [1] 591.15/297.15 > [0] 591.15/297.15 = [tt()] 591.15/297.15 591.15/297.15 [isQid(n__u())] = [0] 591.15/297.15 >= [0] 591.15/297.15 = [tt()] 591.15/297.15 591.15/297.15 [isNePal(V)] = [1] V + [0] 591.15/297.15 >= [1] V + [0] 591.15/297.15 = [U61(isQid(activate(V)))] 591.15/297.15 591.15/297.15 [isNePal(n____(I, __(P, I)))] = [1] P + [2] I + [0] 591.15/297.15 >= [1] P + [1] I + [0] 591.15/297.15 = [U71(isQid(activate(I)), activate(P))] 591.15/297.15 591.15/297.15 [a()] = [7] 591.15/297.15 > [0] 591.15/297.15 = [n__a()] 591.15/297.16 591.15/297.16 [e()] = [7] 591.15/297.16 > [0] 591.15/297.16 = [n__e()] 591.15/297.16 591.15/297.16 [i()] = [7] 591.15/297.16 > [0] 591.15/297.16 = [n__i()] 591.15/297.16 591.15/297.16 [o()] = [7] 591.15/297.16 > [1] 591.15/297.16 = [n__o()] 591.15/297.16 591.15/297.16 [u()] = [7] 591.15/297.16 > [0] 591.15/297.16 = [n__u()] 591.15/297.16 591.15/297.16 591.15/297.16 Further, it can be verified that all rules not oriented are covered by the weightgap condition. 591.15/297.16 591.15/297.16 We are left with following problem, upon which TcT provides the 591.15/297.16 certificate YES(O(1),O(n^1)). 591.15/297.16 591.15/297.16 Strict Trs: 591.15/297.16 { __(__(X, Y), Z) -> __(X, __(Y, Z)) 591.15/297.16 , U11(tt()) -> tt() 591.15/297.16 , U22(tt()) -> tt() 591.15/297.16 , activate(X) -> X 591.15/297.16 , activate(n__nil()) -> nil() 591.15/297.16 , activate(n____(X1, X2)) -> __(X1, X2) 591.15/297.16 , activate(n__a()) -> a() 591.15/297.16 , activate(n__e()) -> e() 591.15/297.16 , activate(n__i()) -> i() 591.15/297.16 , activate(n__o()) -> o() 591.15/297.16 , activate(n__u()) -> u() 591.15/297.16 , U31(tt()) -> tt() 591.15/297.16 , U42(tt()) -> tt() 591.15/297.16 , isNeList(V) -> U31(isQid(activate(V))) 591.15/297.16 , U52(tt()) -> tt() 591.15/297.16 , U61(tt()) -> tt() 591.15/297.16 , U72(tt()) -> tt() 591.15/297.16 , isPal(V) -> U81(isNePal(activate(V))) 591.15/297.16 , U81(tt()) -> tt() 591.15/297.16 , isQid(n__a()) -> tt() 591.15/297.16 , isQid(n__e()) -> tt() } 591.15/297.16 Weak Trs: 591.15/297.16 { __(X1, X2) -> n____(X1, X2) 591.15/297.16 , __(X, nil()) -> X 591.15/297.16 , __(nil(), X) -> X 591.15/297.16 , nil() -> n__nil() 591.15/297.16 , U21(tt(), V2) -> U22(isList(activate(V2))) 591.15/297.16 , isList(V) -> U11(isNeList(activate(V))) 591.15/297.16 , isList(n__nil()) -> tt() 591.15/297.16 , isList(n____(V1, V2)) -> U21(isList(activate(V1)), activate(V2)) 591.15/297.16 , U41(tt(), V2) -> U42(isNeList(activate(V2))) 591.15/297.16 , isNeList(n____(V1, V2)) -> 591.15/297.16 U41(isList(activate(V1)), activate(V2)) 591.15/297.16 , isNeList(n____(V1, V2)) -> 591.15/297.16 U51(isNeList(activate(V1)), activate(V2)) 591.15/297.16 , U51(tt(), V2) -> U52(isList(activate(V2))) 591.15/297.16 , U71(tt(), P) -> U72(isPal(activate(P))) 591.15/297.16 , isPal(n__nil()) -> tt() 591.15/297.16 , isQid(n__i()) -> tt() 591.15/297.16 , isQid(n__o()) -> tt() 591.15/297.16 , isQid(n__u()) -> tt() 591.15/297.16 , isNePal(V) -> U61(isQid(activate(V))) 591.15/297.16 , isNePal(n____(I, __(P, I))) -> 591.15/297.16 U71(isQid(activate(I)), activate(P)) 591.15/297.16 , a() -> n__a() 591.15/297.16 , e() -> n__e() 591.15/297.16 , i() -> n__i() 591.15/297.16 , o() -> n__o() 591.15/297.16 , u() -> n__u() } 591.15/297.16 Obligation: 591.15/297.16 runtime complexity 591.15/297.16 Answer: 591.15/297.16 YES(O(1),O(n^1)) 591.15/297.16 591.15/297.16 The weightgap principle applies (using the following nonconstant 591.15/297.16 growth matrix-interpretation) 591.15/297.16 591.15/297.16 The following argument positions are usable: 591.15/297.16 Uargs(__) = {2}, Uargs(U11) = {1}, Uargs(U21) = {1, 2}, 591.15/297.16 Uargs(U22) = {1}, Uargs(isList) = {1}, Uargs(activate) = {1}, 591.15/297.16 Uargs(U31) = {1}, Uargs(U41) = {1, 2}, Uargs(U42) = {1}, 591.15/297.16 Uargs(isNeList) = {1}, Uargs(U51) = {1, 2}, Uargs(U52) = {1}, 591.15/297.16 Uargs(U61) = {1}, Uargs(U71) = {1, 2}, Uargs(U72) = {1}, 591.15/297.16 Uargs(isPal) = {1}, Uargs(U81) = {1}, Uargs(n____) = {2}, 591.15/297.16 Uargs(isQid) = {1}, Uargs(isNePal) = {1} 591.15/297.16 591.15/297.16 TcT has computed the following matrix interpretation satisfying 591.15/297.16 not(EDA) and not(IDA(1)). 591.15/297.16 591.15/297.16 [__](x1, x2) = [1] x1 + [1] x2 + [4] 591.15/297.16 591.15/297.16 [nil] = [7] 591.15/297.16 591.15/297.16 [U11](x1) = [1] x1 + [0] 591.15/297.16 591.15/297.16 [tt] = [1] 591.15/297.16 591.15/297.16 [U21](x1, x2) = [1] x1 + [1] x2 + [0] 591.15/297.16 591.15/297.16 [U22](x1) = [1] x1 + [0] 591.15/297.16 591.15/297.16 [isList](x1) = [1] x1 + [1] 591.15/297.16 591.15/297.16 [activate](x1) = [1] x1 + [0] 591.15/297.16 591.15/297.16 [U31](x1) = [1] x1 + [0] 591.15/297.16 591.15/297.16 [U41](x1, x2) = [1] x1 + [1] x2 + [0] 591.15/297.16 591.15/297.16 [U42](x1) = [1] x1 + [0] 591.15/297.16 591.15/297.16 [isNeList](x1) = [1] x1 + [0] 591.15/297.16 591.15/297.16 [U51](x1, x2) = [1] x1 + [1] x2 + [0] 591.15/297.16 591.15/297.16 [U52](x1) = [1] x1 + [0] 591.15/297.16 591.15/297.16 [U61](x1) = [1] x1 + [0] 591.15/297.16 591.15/297.16 [U71](x1, x2) = [1] x1 + [1] x2 + [0] 591.15/297.16 591.15/297.16 [U72](x1) = [1] x1 + [0] 591.15/297.16 591.15/297.16 [isPal](x1) = [1] x1 + [1] 591.15/297.16 591.15/297.16 [U81](x1) = [1] x1 + [0] 591.15/297.16 591.15/297.16 [n__nil] = [0] 591.15/297.16 591.15/297.16 [n____](x1, x2) = [1] x1 + [1] x2 + [4] 591.15/297.16 591.15/297.16 [isQid](x1) = [1] x1 + [0] 591.15/297.16 591.15/297.16 [isNePal](x1) = [1] x1 + [0] 591.15/297.16 591.15/297.16 [n__a] = [0] 591.15/297.16 591.15/297.16 [n__e] = [0] 591.15/297.16 591.15/297.16 [n__i] = [1] 591.15/297.16 591.15/297.16 [n__o] = [1] 591.15/297.16 591.15/297.16 [n__u] = [1] 591.15/297.16 591.15/297.16 [a] = [7] 591.15/297.16 591.15/297.16 [e] = [7] 591.15/297.16 591.15/297.16 [i] = [7] 591.15/297.16 591.15/297.16 [o] = [7] 591.15/297.16 591.15/297.16 [u] = [7] 591.15/297.16 591.15/297.16 The order satisfies the following ordering constraints: 591.15/297.16 591.15/297.16 [__(X1, X2)] = [1] X1 + [1] X2 + [4] 591.15/297.16 >= [1] X1 + [1] X2 + [4] 591.15/297.16 = [n____(X1, X2)] 591.15/297.16 591.15/297.16 [__(X, nil())] = [1] X + [11] 591.15/297.16 > [1] X + [0] 591.15/297.16 = [X] 591.15/297.16 591.15/297.16 [__(__(X, Y), Z)] = [1] X + [1] Y + [1] Z + [8] 591.15/297.16 >= [1] X + [1] Y + [1] Z + [8] 591.15/297.16 = [__(X, __(Y, Z))] 591.15/297.16 591.15/297.16 [__(nil(), X)] = [1] X + [11] 591.15/297.16 > [1] X + [0] 591.15/297.16 = [X] 591.15/297.16 591.15/297.16 [nil()] = [7] 591.15/297.16 > [0] 591.15/297.16 = [n__nil()] 591.15/297.16 591.15/297.16 [U11(tt())] = [1] 591.15/297.16 >= [1] 591.15/297.16 = [tt()] 591.15/297.16 591.15/297.16 [U21(tt(), V2)] = [1] V2 + [1] 591.15/297.16 >= [1] V2 + [1] 591.15/297.16 = [U22(isList(activate(V2)))] 591.15/297.16 591.15/297.16 [U22(tt())] = [1] 591.15/297.16 >= [1] 591.15/297.16 = [tt()] 591.15/297.16 591.15/297.16 [isList(V)] = [1] V + [1] 591.15/297.16 > [1] V + [0] 591.15/297.16 = [U11(isNeList(activate(V)))] 591.15/297.16 591.15/297.16 [isList(n__nil())] = [1] 591.15/297.16 >= [1] 591.15/297.16 = [tt()] 591.15/297.16 591.15/297.16 [isList(n____(V1, V2))] = [1] V2 + [1] V1 + [5] 591.15/297.16 > [1] V2 + [1] V1 + [1] 591.15/297.16 = [U21(isList(activate(V1)), activate(V2))] 591.15/297.16 591.15/297.16 [activate(X)] = [1] X + [0] 591.15/297.16 >= [1] X + [0] 591.15/297.16 = [X] 591.15/297.16 591.15/297.16 [activate(n__nil())] = [0] 591.15/297.16 ? [7] 591.15/297.16 = [nil()] 591.15/297.16 591.15/297.16 [activate(n____(X1, X2))] = [1] X1 + [1] X2 + [4] 591.15/297.16 >= [1] X1 + [1] X2 + [4] 591.15/297.16 = [__(X1, X2)] 591.15/297.16 591.15/297.16 [activate(n__a())] = [0] 591.15/297.16 ? [7] 591.15/297.16 = [a()] 591.15/297.16 591.15/297.16 [activate(n__e())] = [0] 591.15/297.16 ? [7] 591.15/297.16 = [e()] 591.15/297.16 591.15/297.16 [activate(n__i())] = [1] 591.15/297.16 ? [7] 591.15/297.16 = [i()] 591.15/297.16 591.15/297.16 [activate(n__o())] = [1] 591.15/297.16 ? [7] 591.15/297.16 = [o()] 591.15/297.16 591.15/297.16 [activate(n__u())] = [1] 591.15/297.16 ? [7] 591.15/297.16 = [u()] 591.15/297.16 591.15/297.16 [U31(tt())] = [1] 591.15/297.16 >= [1] 591.15/297.16 = [tt()] 591.15/297.16 591.15/297.16 [U41(tt(), V2)] = [1] V2 + [1] 591.15/297.16 > [1] V2 + [0] 591.15/297.16 = [U42(isNeList(activate(V2)))] 591.15/297.16 591.15/297.16 [U42(tt())] = [1] 591.15/297.16 >= [1] 591.15/297.16 = [tt()] 591.15/297.16 591.15/297.16 [isNeList(V)] = [1] V + [0] 591.15/297.16 >= [1] V + [0] 591.15/297.16 = [U31(isQid(activate(V)))] 591.15/297.16 591.15/297.16 [isNeList(n____(V1, V2))] = [1] V2 + [1] V1 + [4] 591.15/297.16 > [1] V2 + [1] V1 + [1] 591.15/297.16 = [U41(isList(activate(V1)), activate(V2))] 591.15/297.16 591.15/297.16 [isNeList(n____(V1, V2))] = [1] V2 + [1] V1 + [4] 591.15/297.16 > [1] V2 + [1] V1 + [0] 591.15/297.16 = [U51(isNeList(activate(V1)), activate(V2))] 591.15/297.16 591.15/297.16 [U51(tt(), V2)] = [1] V2 + [1] 591.15/297.16 >= [1] V2 + [1] 591.15/297.16 = [U52(isList(activate(V2)))] 591.15/297.16 591.15/297.16 [U52(tt())] = [1] 591.15/297.16 >= [1] 591.15/297.16 = [tt()] 591.15/297.16 591.15/297.16 [U61(tt())] = [1] 591.15/297.16 >= [1] 591.15/297.16 = [tt()] 591.15/297.16 591.15/297.16 [U71(tt(), P)] = [1] P + [1] 591.15/297.16 >= [1] P + [1] 591.15/297.16 = [U72(isPal(activate(P)))] 591.15/297.16 591.15/297.16 [U72(tt())] = [1] 591.15/297.16 >= [1] 591.15/297.16 = [tt()] 591.15/297.16 591.15/297.16 [isPal(V)] = [1] V + [1] 591.15/297.16 > [1] V + [0] 591.15/297.16 = [U81(isNePal(activate(V)))] 591.15/297.16 591.15/297.16 [isPal(n__nil())] = [1] 591.15/297.16 >= [1] 591.15/297.16 = [tt()] 591.15/297.16 591.15/297.16 [U81(tt())] = [1] 591.15/297.16 >= [1] 591.15/297.16 = [tt()] 591.15/297.16 591.15/297.16 [isQid(n__a())] = [0] 591.15/297.16 ? [1] 591.15/297.16 = [tt()] 591.15/297.16 591.15/297.16 [isQid(n__e())] = [0] 591.15/297.16 ? [1] 591.15/297.16 = [tt()] 591.15/297.16 591.15/297.16 [isQid(n__i())] = [1] 591.15/297.16 >= [1] 591.15/297.16 = [tt()] 591.15/297.16 591.15/297.16 [isQid(n__o())] = [1] 591.15/297.16 >= [1] 591.15/297.16 = [tt()] 591.15/297.16 591.15/297.16 [isQid(n__u())] = [1] 591.15/297.16 >= [1] 591.15/297.16 = [tt()] 591.15/297.16 591.15/297.16 [isNePal(V)] = [1] V + [0] 591.15/297.16 >= [1] V + [0] 591.15/297.16 = [U61(isQid(activate(V)))] 591.15/297.16 591.15/297.16 [isNePal(n____(I, __(P, I)))] = [1] P + [2] I + [8] 591.15/297.16 > [1] P + [1] I + [0] 591.15/297.16 = [U71(isQid(activate(I)), activate(P))] 591.15/297.16 591.15/297.16 [a()] = [7] 591.15/297.16 > [0] 591.15/297.16 = [n__a()] 591.15/297.16 591.15/297.16 [e()] = [7] 591.15/297.16 > [0] 591.15/297.16 = [n__e()] 591.15/297.16 591.15/297.16 [i()] = [7] 591.15/297.16 > [1] 591.15/297.16 = [n__i()] 591.15/297.16 591.15/297.16 [o()] = [7] 591.15/297.16 > [1] 591.15/297.16 = [n__o()] 591.15/297.16 591.15/297.16 [u()] = [7] 591.15/297.16 > [1] 591.15/297.16 = [n__u()] 591.15/297.16 591.15/297.16 591.15/297.16 Further, it can be verified that all rules not oriented are covered by the weightgap condition. 591.15/297.16 591.15/297.16 We are left with following problem, upon which TcT provides the 591.15/297.16 certificate YES(O(1),O(n^1)). 591.15/297.16 591.15/297.16 Strict Trs: 591.15/297.16 { __(__(X, Y), Z) -> __(X, __(Y, Z)) 591.15/297.16 , U11(tt()) -> tt() 591.15/297.16 , U22(tt()) -> tt() 591.15/297.16 , activate(X) -> X 591.15/297.16 , activate(n__nil()) -> nil() 591.15/297.16 , activate(n____(X1, X2)) -> __(X1, X2) 591.15/297.16 , activate(n__a()) -> a() 591.15/297.16 , activate(n__e()) -> e() 591.15/297.16 , activate(n__i()) -> i() 591.15/297.16 , activate(n__o()) -> o() 591.15/297.16 , activate(n__u()) -> u() 591.15/297.16 , U31(tt()) -> tt() 591.15/297.16 , U42(tt()) -> tt() 591.15/297.16 , isNeList(V) -> U31(isQid(activate(V))) 591.15/297.16 , U52(tt()) -> tt() 591.15/297.16 , U61(tt()) -> tt() 591.15/297.16 , U72(tt()) -> tt() 591.15/297.16 , U81(tt()) -> tt() 591.15/297.16 , isQid(n__a()) -> tt() 591.15/297.16 , isQid(n__e()) -> tt() } 591.15/297.16 Weak Trs: 591.15/297.16 { __(X1, X2) -> n____(X1, X2) 591.15/297.16 , __(X, nil()) -> X 591.15/297.16 , __(nil(), X) -> X 591.15/297.16 , nil() -> n__nil() 591.15/297.16 , U21(tt(), V2) -> U22(isList(activate(V2))) 591.15/297.16 , isList(V) -> U11(isNeList(activate(V))) 591.15/297.16 , isList(n__nil()) -> tt() 591.15/297.16 , isList(n____(V1, V2)) -> U21(isList(activate(V1)), activate(V2)) 591.15/297.16 , U41(tt(), V2) -> U42(isNeList(activate(V2))) 591.15/297.16 , isNeList(n____(V1, V2)) -> 591.15/297.16 U41(isList(activate(V1)), activate(V2)) 591.15/297.16 , isNeList(n____(V1, V2)) -> 591.15/297.16 U51(isNeList(activate(V1)), activate(V2)) 591.15/297.16 , U51(tt(), V2) -> U52(isList(activate(V2))) 591.15/297.16 , U71(tt(), P) -> U72(isPal(activate(P))) 591.15/297.16 , isPal(V) -> U81(isNePal(activate(V))) 591.15/297.16 , isPal(n__nil()) -> tt() 591.15/297.16 , isQid(n__i()) -> tt() 591.15/297.16 , isQid(n__o()) -> tt() 591.15/297.16 , isQid(n__u()) -> tt() 591.15/297.16 , isNePal(V) -> U61(isQid(activate(V))) 591.15/297.16 , isNePal(n____(I, __(P, I))) -> 591.15/297.16 U71(isQid(activate(I)), activate(P)) 591.15/297.16 , a() -> n__a() 591.15/297.16 , e() -> n__e() 591.15/297.16 , i() -> n__i() 591.15/297.16 , o() -> n__o() 591.15/297.16 , u() -> n__u() } 591.15/297.16 Obligation: 591.15/297.16 runtime complexity 591.15/297.16 Answer: 591.15/297.16 YES(O(1),O(n^1)) 591.15/297.16 591.15/297.16 The weightgap principle applies (using the following nonconstant 591.15/297.16 growth matrix-interpretation) 591.15/297.16 591.15/297.16 The following argument positions are usable: 591.15/297.16 Uargs(__) = {2}, Uargs(U11) = {1}, Uargs(U21) = {1, 2}, 591.15/297.16 Uargs(U22) = {1}, Uargs(isList) = {1}, Uargs(activate) = {1}, 591.15/297.16 Uargs(U31) = {1}, Uargs(U41) = {1, 2}, Uargs(U42) = {1}, 591.15/297.16 Uargs(isNeList) = {1}, Uargs(U51) = {1, 2}, Uargs(U52) = {1}, 591.15/297.16 Uargs(U61) = {1}, Uargs(U71) = {1, 2}, Uargs(U72) = {1}, 591.15/297.16 Uargs(isPal) = {1}, Uargs(U81) = {1}, Uargs(n____) = {2}, 591.15/297.16 Uargs(isQid) = {1}, Uargs(isNePal) = {1} 591.15/297.16 591.15/297.16 TcT has computed the following matrix interpretation satisfying 591.15/297.16 not(EDA) and not(IDA(1)). 591.15/297.16 591.15/297.16 [__](x1, x2) = [1] x1 + [1] x2 + [7] 591.15/297.16 591.15/297.16 [nil] = [7] 591.15/297.16 591.15/297.16 [U11](x1) = [1] x1 + [0] 591.15/297.16 591.15/297.16 [tt] = [0] 591.15/297.16 591.15/297.16 [U21](x1, x2) = [1] x1 + [1] x2 + [0] 591.15/297.16 591.15/297.16 [U22](x1) = [1] x1 + [0] 591.15/297.16 591.15/297.16 [isList](x1) = [1] x1 + [0] 591.15/297.16 591.15/297.16 [activate](x1) = [1] x1 + [0] 591.15/297.16 591.15/297.16 [U31](x1) = [1] x1 + [0] 591.15/297.16 591.15/297.16 [U41](x1, x2) = [1] x1 + [1] x2 + [0] 591.15/297.16 591.15/297.16 [U42](x1) = [1] x1 + [0] 591.15/297.16 591.15/297.16 [isNeList](x1) = [1] x1 + [0] 591.15/297.16 591.15/297.16 [U51](x1, x2) = [1] x1 + [1] x2 + [0] 591.15/297.16 591.15/297.16 [U52](x1) = [1] x1 + [0] 591.15/297.16 591.15/297.16 [U61](x1) = [1] x1 + [0] 591.15/297.16 591.15/297.16 [U71](x1, x2) = [1] x1 + [1] x2 + [0] 591.15/297.16 591.15/297.16 [U72](x1) = [1] x1 + [0] 591.15/297.16 591.15/297.16 [isPal](x1) = [1] x1 + [0] 591.15/297.16 591.15/297.16 [U81](x1) = [1] x1 + [0] 591.15/297.16 591.15/297.16 [n__nil] = [0] 591.15/297.16 591.15/297.16 [n____](x1, x2) = [1] x1 + [1] x2 + [1] 591.15/297.16 591.15/297.16 [isQid](x1) = [1] x1 + [0] 591.15/297.16 591.15/297.16 [isNePal](x1) = [1] x1 + [0] 591.15/297.16 591.15/297.16 [n__a] = [0] 591.15/297.16 591.15/297.16 [n__e] = [1] 591.15/297.16 591.15/297.16 [n__i] = [0] 591.15/297.16 591.15/297.16 [n__o] = [0] 591.15/297.16 591.15/297.16 [n__u] = [0] 591.15/297.16 591.15/297.16 [a] = [7] 591.15/297.16 591.15/297.16 [e] = [7] 591.15/297.16 591.15/297.16 [i] = [7] 591.15/297.16 591.15/297.16 [o] = [7] 591.15/297.16 591.15/297.16 [u] = [7] 591.15/297.16 591.15/297.16 The order satisfies the following ordering constraints: 591.15/297.16 591.15/297.16 [__(X1, X2)] = [1] X1 + [1] X2 + [7] 591.15/297.16 > [1] X1 + [1] X2 + [1] 591.15/297.16 = [n____(X1, X2)] 591.15/297.16 591.15/297.16 [__(X, nil())] = [1] X + [14] 591.15/297.16 > [1] X + [0] 591.15/297.16 = [X] 591.15/297.16 591.15/297.16 [__(__(X, Y), Z)] = [1] X + [1] Y + [1] Z + [14] 591.15/297.16 >= [1] X + [1] Y + [1] Z + [14] 591.15/297.16 = [__(X, __(Y, Z))] 591.15/297.16 591.15/297.16 [__(nil(), X)] = [1] X + [14] 591.15/297.16 > [1] X + [0] 591.15/297.16 = [X] 591.15/297.16 591.15/297.16 [nil()] = [7] 591.15/297.16 > [0] 591.15/297.16 = [n__nil()] 591.15/297.16 591.15/297.16 [U11(tt())] = [0] 591.15/297.16 >= [0] 591.15/297.16 = [tt()] 591.15/297.16 591.15/297.16 [U21(tt(), V2)] = [1] V2 + [0] 591.15/297.16 >= [1] V2 + [0] 591.15/297.16 = [U22(isList(activate(V2)))] 591.15/297.16 591.15/297.16 [U22(tt())] = [0] 591.15/297.16 >= [0] 591.15/297.16 = [tt()] 591.15/297.16 591.15/297.16 [isList(V)] = [1] V + [0] 591.15/297.16 >= [1] V + [0] 591.15/297.16 = [U11(isNeList(activate(V)))] 591.15/297.16 591.15/297.16 [isList(n__nil())] = [0] 591.15/297.16 >= [0] 591.15/297.16 = [tt()] 591.15/297.16 591.15/297.16 [isList(n____(V1, V2))] = [1] V2 + [1] V1 + [1] 591.15/297.16 > [1] V2 + [1] V1 + [0] 591.15/297.16 = [U21(isList(activate(V1)), activate(V2))] 591.15/297.16 591.15/297.16 [activate(X)] = [1] X + [0] 591.15/297.16 >= [1] X + [0] 591.15/297.16 = [X] 591.15/297.16 591.15/297.16 [activate(n__nil())] = [0] 591.15/297.16 ? [7] 591.15/297.16 = [nil()] 591.15/297.16 591.15/297.16 [activate(n____(X1, X2))] = [1] X1 + [1] X2 + [1] 591.15/297.16 ? [1] X1 + [1] X2 + [7] 591.15/297.16 = [__(X1, X2)] 591.15/297.16 591.15/297.16 [activate(n__a())] = [0] 591.15/297.16 ? [7] 591.15/297.16 = [a()] 591.15/297.16 591.15/297.16 [activate(n__e())] = [1] 591.15/297.16 ? [7] 591.15/297.16 = [e()] 591.15/297.16 591.15/297.16 [activate(n__i())] = [0] 591.15/297.16 ? [7] 591.15/297.16 = [i()] 591.15/297.16 591.15/297.16 [activate(n__o())] = [0] 591.15/297.16 ? [7] 591.15/297.16 = [o()] 591.15/297.16 591.15/297.16 [activate(n__u())] = [0] 591.15/297.16 ? [7] 591.15/297.16 = [u()] 591.15/297.16 591.15/297.16 [U31(tt())] = [0] 591.15/297.16 >= [0] 591.15/297.16 = [tt()] 591.15/297.16 591.15/297.16 [U41(tt(), V2)] = [1] V2 + [0] 591.15/297.16 >= [1] V2 + [0] 591.15/297.16 = [U42(isNeList(activate(V2)))] 591.15/297.16 591.15/297.16 [U42(tt())] = [0] 591.15/297.16 >= [0] 591.15/297.16 = [tt()] 591.15/297.16 591.15/297.16 [isNeList(V)] = [1] V + [0] 591.15/297.16 >= [1] V + [0] 591.15/297.16 = [U31(isQid(activate(V)))] 591.15/297.16 591.15/297.16 [isNeList(n____(V1, V2))] = [1] V2 + [1] V1 + [1] 591.15/297.16 > [1] V2 + [1] V1 + [0] 591.15/297.16 = [U41(isList(activate(V1)), activate(V2))] 591.15/297.16 591.15/297.16 [isNeList(n____(V1, V2))] = [1] V2 + [1] V1 + [1] 591.15/297.16 > [1] V2 + [1] V1 + [0] 591.15/297.16 = [U51(isNeList(activate(V1)), activate(V2))] 591.15/297.16 591.15/297.16 [U51(tt(), V2)] = [1] V2 + [0] 591.15/297.16 >= [1] V2 + [0] 591.15/297.16 = [U52(isList(activate(V2)))] 591.15/297.16 591.15/297.16 [U52(tt())] = [0] 591.15/297.16 >= [0] 591.15/297.16 = [tt()] 591.15/297.16 591.15/297.16 [U61(tt())] = [0] 591.15/297.16 >= [0] 591.15/297.16 = [tt()] 591.15/297.16 591.15/297.16 [U71(tt(), P)] = [1] P + [0] 591.15/297.16 >= [1] P + [0] 591.15/297.16 = [U72(isPal(activate(P)))] 591.15/297.16 591.15/297.16 [U72(tt())] = [0] 591.15/297.16 >= [0] 591.15/297.16 = [tt()] 591.15/297.16 591.15/297.16 [isPal(V)] = [1] V + [0] 591.15/297.16 >= [1] V + [0] 591.15/297.16 = [U81(isNePal(activate(V)))] 591.15/297.16 591.15/297.16 [isPal(n__nil())] = [0] 591.15/297.16 >= [0] 591.15/297.16 = [tt()] 591.15/297.16 591.15/297.16 [U81(tt())] = [0] 591.15/297.16 >= [0] 591.15/297.16 = [tt()] 591.15/297.16 591.15/297.16 [isQid(n__a())] = [0] 591.15/297.16 >= [0] 591.15/297.16 = [tt()] 591.15/297.16 591.15/297.16 [isQid(n__e())] = [1] 591.15/297.16 > [0] 591.15/297.16 = [tt()] 591.15/297.16 591.15/297.16 [isQid(n__i())] = [0] 591.15/297.16 >= [0] 591.15/297.16 = [tt()] 591.15/297.16 591.15/297.16 [isQid(n__o())] = [0] 591.15/297.16 >= [0] 591.15/297.16 = [tt()] 591.15/297.16 591.15/297.16 [isQid(n__u())] = [0] 591.15/297.16 >= [0] 591.15/297.16 = [tt()] 591.15/297.16 591.15/297.16 [isNePal(V)] = [1] V + [0] 591.15/297.16 >= [1] V + [0] 591.15/297.16 = [U61(isQid(activate(V)))] 591.15/297.16 591.15/297.16 [isNePal(n____(I, __(P, I)))] = [1] P + [2] I + [8] 591.15/297.16 > [1] P + [1] I + [0] 591.15/297.16 = [U71(isQid(activate(I)), activate(P))] 591.15/297.16 591.15/297.16 [a()] = [7] 591.15/297.16 > [0] 591.15/297.16 = [n__a()] 591.15/297.16 591.15/297.16 [e()] = [7] 591.15/297.16 > [1] 591.15/297.16 = [n__e()] 591.15/297.16 591.15/297.16 [i()] = [7] 591.15/297.16 > [0] 591.15/297.16 = [n__i()] 591.15/297.16 591.15/297.16 [o()] = [7] 591.15/297.16 > [0] 591.15/297.16 = [n__o()] 591.15/297.16 591.15/297.16 [u()] = [7] 591.15/297.16 > [0] 591.15/297.16 = [n__u()] 591.15/297.16 591.15/297.16 591.15/297.16 Further, it can be verified that all rules not oriented are covered by the weightgap condition. 591.15/297.16 591.15/297.16 We are left with following problem, upon which TcT provides the 591.15/297.16 certificate YES(O(1),O(n^1)). 591.15/297.16 591.15/297.16 Strict Trs: 591.15/297.16 { __(__(X, Y), Z) -> __(X, __(Y, Z)) 591.15/297.16 , U11(tt()) -> tt() 591.15/297.16 , U22(tt()) -> tt() 591.15/297.16 , activate(X) -> X 591.15/297.16 , activate(n__nil()) -> nil() 591.15/297.16 , activate(n____(X1, X2)) -> __(X1, X2) 591.15/297.16 , activate(n__a()) -> a() 591.15/297.16 , activate(n__e()) -> e() 591.15/297.16 , activate(n__i()) -> i() 591.15/297.16 , activate(n__o()) -> o() 591.15/297.16 , activate(n__u()) -> u() 591.15/297.16 , U31(tt()) -> tt() 591.15/297.16 , U42(tt()) -> tt() 591.15/297.16 , isNeList(V) -> U31(isQid(activate(V))) 591.15/297.16 , U52(tt()) -> tt() 591.15/297.16 , U61(tt()) -> tt() 591.15/297.16 , U72(tt()) -> tt() 591.15/297.16 , U81(tt()) -> tt() 591.15/297.16 , isQid(n__a()) -> tt() } 591.15/297.16 Weak Trs: 591.15/297.16 { __(X1, X2) -> n____(X1, X2) 591.15/297.16 , __(X, nil()) -> X 591.15/297.16 , __(nil(), X) -> X 591.15/297.16 , nil() -> n__nil() 591.15/297.16 , U21(tt(), V2) -> U22(isList(activate(V2))) 591.15/297.16 , isList(V) -> U11(isNeList(activate(V))) 591.15/297.16 , isList(n__nil()) -> tt() 591.15/297.16 , isList(n____(V1, V2)) -> U21(isList(activate(V1)), activate(V2)) 591.15/297.16 , U41(tt(), V2) -> U42(isNeList(activate(V2))) 591.15/297.16 , isNeList(n____(V1, V2)) -> 591.15/297.16 U41(isList(activate(V1)), activate(V2)) 591.15/297.16 , isNeList(n____(V1, V2)) -> 591.15/297.16 U51(isNeList(activate(V1)), activate(V2)) 591.15/297.16 , U51(tt(), V2) -> U52(isList(activate(V2))) 591.15/297.16 , U71(tt(), P) -> U72(isPal(activate(P))) 591.15/297.16 , isPal(V) -> U81(isNePal(activate(V))) 591.15/297.16 , isPal(n__nil()) -> tt() 591.15/297.16 , isQid(n__e()) -> tt() 591.15/297.16 , isQid(n__i()) -> tt() 591.15/297.16 , isQid(n__o()) -> tt() 591.15/297.16 , isQid(n__u()) -> tt() 591.15/297.16 , isNePal(V) -> U61(isQid(activate(V))) 591.15/297.16 , isNePal(n____(I, __(P, I))) -> 591.15/297.16 U71(isQid(activate(I)), activate(P)) 591.15/297.16 , a() -> n__a() 591.15/297.16 , e() -> n__e() 591.15/297.16 , i() -> n__i() 591.15/297.16 , o() -> n__o() 591.15/297.16 , u() -> n__u() } 591.15/297.16 Obligation: 591.15/297.16 runtime complexity 591.15/297.16 Answer: 591.15/297.16 YES(O(1),O(n^1)) 591.15/297.16 591.15/297.16 The weightgap principle applies (using the following nonconstant 591.15/297.16 growth matrix-interpretation) 591.15/297.16 591.15/297.16 The following argument positions are usable: 591.15/297.16 Uargs(__) = {2}, Uargs(U11) = {1}, Uargs(U21) = {1, 2}, 591.15/297.16 Uargs(U22) = {1}, Uargs(isList) = {1}, Uargs(activate) = {1}, 591.15/297.16 Uargs(U31) = {1}, Uargs(U41) = {1, 2}, Uargs(U42) = {1}, 591.15/297.16 Uargs(isNeList) = {1}, Uargs(U51) = {1, 2}, Uargs(U52) = {1}, 591.15/297.16 Uargs(U61) = {1}, Uargs(U71) = {1, 2}, Uargs(U72) = {1}, 591.15/297.16 Uargs(isPal) = {1}, Uargs(U81) = {1}, Uargs(n____) = {2}, 591.15/297.16 Uargs(isQid) = {1}, Uargs(isNePal) = {1} 591.15/297.16 591.15/297.16 TcT has computed the following matrix interpretation satisfying 591.15/297.16 not(EDA) and not(IDA(1)). 591.15/297.16 591.15/297.16 [__](x1, x2) = [1] x1 + [1] x2 + [7] 591.15/297.16 591.15/297.16 [nil] = [7] 591.15/297.16 591.15/297.16 [U11](x1) = [1] x1 + [0] 591.15/297.16 591.15/297.16 [tt] = [0] 591.15/297.16 591.15/297.16 [U21](x1, x2) = [1] x1 + [1] x2 + [0] 591.15/297.16 591.15/297.16 [U22](x1) = [1] x1 + [0] 591.15/297.16 591.15/297.16 [isList](x1) = [1] x1 + [0] 591.15/297.16 591.15/297.16 [activate](x1) = [1] x1 + [0] 591.15/297.16 591.15/297.16 [U31](x1) = [1] x1 + [0] 591.15/297.16 591.15/297.16 [U41](x1, x2) = [1] x1 + [1] x2 + [0] 591.15/297.16 591.15/297.16 [U42](x1) = [1] x1 + [0] 591.15/297.16 591.15/297.16 [isNeList](x1) = [1] x1 + [0] 591.15/297.16 591.15/297.16 [U51](x1, x2) = [1] x1 + [1] x2 + [0] 591.15/297.16 591.15/297.16 [U52](x1) = [1] x1 + [0] 591.15/297.16 591.15/297.16 [U61](x1) = [1] x1 + [0] 591.15/297.16 591.15/297.16 [U71](x1, x2) = [1] x1 + [1] x2 + [0] 591.15/297.16 591.15/297.16 [U72](x1) = [1] x1 + [0] 591.15/297.16 591.15/297.16 [isPal](x1) = [1] x1 + [0] 591.15/297.16 591.15/297.16 [U81](x1) = [1] x1 + [0] 591.15/297.16 591.15/297.16 [n__nil] = [0] 591.15/297.16 591.15/297.16 [n____](x1, x2) = [1] x1 + [1] x2 + [1] 591.15/297.16 591.15/297.16 [isQid](x1) = [1] x1 + [0] 591.15/297.16 591.15/297.16 [isNePal](x1) = [1] x1 + [0] 591.15/297.16 591.15/297.16 [n__a] = [1] 591.15/297.16 591.15/297.16 [n__e] = [0] 591.15/297.16 591.15/297.16 [n__i] = [0] 591.15/297.16 591.15/297.16 [n__o] = [0] 591.15/297.16 591.15/297.16 [n__u] = [0] 591.15/297.16 591.15/297.16 [a] = [7] 591.15/297.16 591.15/297.16 [e] = [7] 591.15/297.16 591.15/297.16 [i] = [7] 591.15/297.16 591.15/297.16 [o] = [7] 591.15/297.16 591.15/297.16 [u] = [7] 591.15/297.16 591.15/297.16 The order satisfies the following ordering constraints: 591.15/297.16 591.15/297.16 [__(X1, X2)] = [1] X1 + [1] X2 + [7] 591.15/297.16 > [1] X1 + [1] X2 + [1] 591.15/297.16 = [n____(X1, X2)] 591.15/297.16 591.15/297.16 [__(X, nil())] = [1] X + [14] 591.15/297.16 > [1] X + [0] 591.15/297.16 = [X] 591.15/297.16 591.15/297.16 [__(__(X, Y), Z)] = [1] X + [1] Y + [1] Z + [14] 591.15/297.16 >= [1] X + [1] Y + [1] Z + [14] 591.15/297.16 = [__(X, __(Y, Z))] 591.15/297.16 591.15/297.16 [__(nil(), X)] = [1] X + [14] 591.15/297.16 > [1] X + [0] 591.15/297.16 = [X] 591.15/297.16 591.15/297.16 [nil()] = [7] 591.15/297.16 > [0] 591.15/297.16 = [n__nil()] 591.15/297.16 591.15/297.16 [U11(tt())] = [0] 591.15/297.16 >= [0] 591.15/297.16 = [tt()] 591.15/297.16 591.15/297.16 [U21(tt(), V2)] = [1] V2 + [0] 591.15/297.16 >= [1] V2 + [0] 591.15/297.16 = [U22(isList(activate(V2)))] 591.15/297.16 591.15/297.16 [U22(tt())] = [0] 591.15/297.16 >= [0] 591.15/297.16 = [tt()] 591.15/297.16 591.15/297.16 [isList(V)] = [1] V + [0] 591.15/297.16 >= [1] V + [0] 591.15/297.16 = [U11(isNeList(activate(V)))] 591.15/297.16 591.15/297.16 [isList(n__nil())] = [0] 591.15/297.16 >= [0] 591.15/297.16 = [tt()] 591.15/297.16 591.15/297.16 [isList(n____(V1, V2))] = [1] V2 + [1] V1 + [1] 591.15/297.16 > [1] V2 + [1] V1 + [0] 591.15/297.16 = [U21(isList(activate(V1)), activate(V2))] 591.15/297.16 591.15/297.16 [activate(X)] = [1] X + [0] 591.15/297.16 >= [1] X + [0] 591.15/297.16 = [X] 591.15/297.16 591.15/297.16 [activate(n__nil())] = [0] 591.15/297.16 ? [7] 591.15/297.16 = [nil()] 591.15/297.16 591.15/297.16 [activate(n____(X1, X2))] = [1] X1 + [1] X2 + [1] 591.15/297.16 ? [1] X1 + [1] X2 + [7] 591.15/297.16 = [__(X1, X2)] 591.15/297.16 591.15/297.16 [activate(n__a())] = [1] 591.15/297.16 ? [7] 591.15/297.16 = [a()] 591.15/297.16 591.15/297.16 [activate(n__e())] = [0] 591.15/297.16 ? [7] 591.15/297.16 = [e()] 591.15/297.16 591.15/297.16 [activate(n__i())] = [0] 591.15/297.16 ? [7] 591.15/297.16 = [i()] 591.15/297.16 591.15/297.16 [activate(n__o())] = [0] 591.15/297.16 ? [7] 591.15/297.16 = [o()] 591.15/297.16 591.15/297.16 [activate(n__u())] = [0] 591.15/297.16 ? [7] 591.15/297.16 = [u()] 591.15/297.16 591.15/297.16 [U31(tt())] = [0] 591.15/297.16 >= [0] 591.15/297.16 = [tt()] 591.15/297.16 591.15/297.16 [U41(tt(), V2)] = [1] V2 + [0] 591.15/297.16 >= [1] V2 + [0] 591.15/297.16 = [U42(isNeList(activate(V2)))] 591.15/297.16 591.15/297.16 [U42(tt())] = [0] 591.15/297.16 >= [0] 591.15/297.16 = [tt()] 591.15/297.16 591.15/297.16 [isNeList(V)] = [1] V + [0] 591.15/297.16 >= [1] V + [0] 591.15/297.16 = [U31(isQid(activate(V)))] 591.15/297.16 591.15/297.16 [isNeList(n____(V1, V2))] = [1] V2 + [1] V1 + [1] 591.15/297.17 > [1] V2 + [1] V1 + [0] 591.15/297.17 = [U41(isList(activate(V1)), activate(V2))] 591.15/297.17 591.15/297.17 [isNeList(n____(V1, V2))] = [1] V2 + [1] V1 + [1] 591.15/297.17 > [1] V2 + [1] V1 + [0] 591.15/297.17 = [U51(isNeList(activate(V1)), activate(V2))] 591.15/297.17 591.15/297.17 [U51(tt(), V2)] = [1] V2 + [0] 591.15/297.17 >= [1] V2 + [0] 591.15/297.17 = [U52(isList(activate(V2)))] 591.15/297.17 591.15/297.17 [U52(tt())] = [0] 591.15/297.17 >= [0] 591.15/297.17 = [tt()] 591.15/297.17 591.15/297.17 [U61(tt())] = [0] 591.15/297.17 >= [0] 591.15/297.17 = [tt()] 591.15/297.17 591.15/297.17 [U71(tt(), P)] = [1] P + [0] 591.15/297.17 >= [1] P + [0] 591.15/297.17 = [U72(isPal(activate(P)))] 591.15/297.17 591.15/297.17 [U72(tt())] = [0] 591.15/297.17 >= [0] 591.15/297.17 = [tt()] 591.15/297.17 591.15/297.17 [isPal(V)] = [1] V + [0] 591.15/297.17 >= [1] V + [0] 591.15/297.17 = [U81(isNePal(activate(V)))] 591.15/297.17 591.15/297.17 [isPal(n__nil())] = [0] 591.15/297.17 >= [0] 591.15/297.17 = [tt()] 591.15/297.17 591.15/297.17 [U81(tt())] = [0] 591.15/297.17 >= [0] 591.15/297.17 = [tt()] 591.15/297.17 591.15/297.17 [isQid(n__a())] = [1] 591.15/297.17 > [0] 591.15/297.17 = [tt()] 591.15/297.17 591.15/297.17 [isQid(n__e())] = [0] 591.15/297.17 >= [0] 591.15/297.17 = [tt()] 591.15/297.17 591.15/297.17 [isQid(n__i())] = [0] 591.15/297.17 >= [0] 591.15/297.17 = [tt()] 591.15/297.17 591.15/297.17 [isQid(n__o())] = [0] 591.15/297.17 >= [0] 591.15/297.17 = [tt()] 591.15/297.17 591.15/297.17 [isQid(n__u())] = [0] 591.15/297.17 >= [0] 591.15/297.17 = [tt()] 591.15/297.17 591.15/297.17 [isNePal(V)] = [1] V + [0] 591.15/297.17 >= [1] V + [0] 591.15/297.17 = [U61(isQid(activate(V)))] 591.15/297.17 591.15/297.17 [isNePal(n____(I, __(P, I)))] = [1] P + [2] I + [8] 591.15/297.17 > [1] P + [1] I + [0] 591.15/297.17 = [U71(isQid(activate(I)), activate(P))] 591.15/297.17 591.15/297.17 [a()] = [7] 591.15/297.17 > [1] 591.15/297.17 = [n__a()] 591.15/297.17 591.15/297.17 [e()] = [7] 591.15/297.17 > [0] 591.15/297.17 = [n__e()] 591.15/297.17 591.15/297.17 [i()] = [7] 591.15/297.17 > [0] 591.15/297.17 = [n__i()] 591.15/297.17 591.15/297.17 [o()] = [7] 591.15/297.17 > [0] 591.15/297.17 = [n__o()] 591.15/297.17 591.15/297.17 [u()] = [7] 591.15/297.17 > [0] 591.15/297.17 = [n__u()] 591.15/297.17 591.15/297.17 591.15/297.17 Further, it can be verified that all rules not oriented are covered by the weightgap condition. 591.15/297.17 591.15/297.17 We are left with following problem, upon which TcT provides the 591.15/297.17 certificate YES(O(1),O(n^1)). 591.15/297.17 591.15/297.17 Strict Trs: 591.15/297.17 { __(__(X, Y), Z) -> __(X, __(Y, Z)) 591.15/297.17 , U11(tt()) -> tt() 591.15/297.17 , U22(tt()) -> tt() 591.15/297.17 , activate(X) -> X 591.15/297.17 , activate(n__nil()) -> nil() 591.15/297.17 , activate(n____(X1, X2)) -> __(X1, X2) 591.15/297.17 , activate(n__a()) -> a() 591.15/297.17 , activate(n__e()) -> e() 591.15/297.17 , activate(n__i()) -> i() 591.15/297.17 , activate(n__o()) -> o() 591.15/297.17 , activate(n__u()) -> u() 591.15/297.17 , U31(tt()) -> tt() 591.15/297.17 , U42(tt()) -> tt() 591.15/297.17 , isNeList(V) -> U31(isQid(activate(V))) 591.15/297.17 , U52(tt()) -> tt() 591.15/297.17 , U61(tt()) -> tt() 591.15/297.17 , U72(tt()) -> tt() 591.15/297.17 , U81(tt()) -> tt() } 591.15/297.17 Weak Trs: 591.15/297.17 { __(X1, X2) -> n____(X1, X2) 591.15/297.17 , __(X, nil()) -> X 591.15/297.17 , __(nil(), X) -> X 591.15/297.17 , nil() -> n__nil() 591.15/297.17 , U21(tt(), V2) -> U22(isList(activate(V2))) 591.15/297.17 , isList(V) -> U11(isNeList(activate(V))) 591.15/297.17 , isList(n__nil()) -> tt() 591.15/297.17 , isList(n____(V1, V2)) -> U21(isList(activate(V1)), activate(V2)) 591.15/297.17 , U41(tt(), V2) -> U42(isNeList(activate(V2))) 591.15/297.17 , isNeList(n____(V1, V2)) -> 591.15/297.17 U41(isList(activate(V1)), activate(V2)) 591.15/297.17 , isNeList(n____(V1, V2)) -> 591.15/297.17 U51(isNeList(activate(V1)), activate(V2)) 591.15/297.17 , U51(tt(), V2) -> U52(isList(activate(V2))) 591.15/297.17 , U71(tt(), P) -> U72(isPal(activate(P))) 591.15/297.17 , isPal(V) -> U81(isNePal(activate(V))) 591.15/297.17 , isPal(n__nil()) -> tt() 591.15/297.17 , isQid(n__a()) -> tt() 591.15/297.17 , isQid(n__e()) -> tt() 591.15/297.17 , isQid(n__i()) -> tt() 591.15/297.17 , isQid(n__o()) -> tt() 591.15/297.17 , isQid(n__u()) -> tt() 591.15/297.17 , isNePal(V) -> U61(isQid(activate(V))) 591.15/297.17 , isNePal(n____(I, __(P, I))) -> 591.15/297.17 U71(isQid(activate(I)), activate(P)) 591.15/297.17 , a() -> n__a() 591.15/297.17 , e() -> n__e() 591.15/297.17 , i() -> n__i() 591.15/297.17 , o() -> n__o() 591.15/297.17 , u() -> n__u() } 591.15/297.17 Obligation: 591.15/297.17 runtime complexity 591.15/297.17 Answer: 591.15/297.17 YES(O(1),O(n^1)) 591.15/297.17 591.15/297.17 The weightgap principle applies (using the following nonconstant 591.15/297.17 growth matrix-interpretation) 591.15/297.17 591.15/297.17 The following argument positions are usable: 591.15/297.17 Uargs(__) = {2}, Uargs(U11) = {1}, Uargs(U21) = {1, 2}, 591.15/297.17 Uargs(U22) = {1}, Uargs(isList) = {1}, Uargs(activate) = {1}, 591.15/297.17 Uargs(U31) = {1}, Uargs(U41) = {1, 2}, Uargs(U42) = {1}, 591.15/297.17 Uargs(isNeList) = {1}, Uargs(U51) = {1, 2}, Uargs(U52) = {1}, 591.15/297.17 Uargs(U61) = {1}, Uargs(U71) = {1, 2}, Uargs(U72) = {1}, 591.15/297.17 Uargs(isPal) = {1}, Uargs(U81) = {1}, Uargs(n____) = {2}, 591.15/297.17 Uargs(isQid) = {1}, Uargs(isNePal) = {1} 591.15/297.17 591.15/297.17 TcT has computed the following matrix interpretation satisfying 591.15/297.17 not(EDA) and not(IDA(1)). 591.15/297.17 591.15/297.17 [__](x1, x2) = [1] x1 + [1] x2 + [7] 591.15/297.17 591.15/297.17 [nil] = [7] 591.15/297.17 591.15/297.17 [U11](x1) = [1] x1 + [0] 591.15/297.17 591.15/297.17 [tt] = [1] 591.15/297.17 591.15/297.17 [U21](x1, x2) = [1] x1 + [1] x2 + [0] 591.15/297.17 591.15/297.17 [U22](x1) = [1] x1 + [0] 591.15/297.17 591.15/297.17 [isList](x1) = [1] x1 + [1] 591.15/297.17 591.15/297.17 [activate](x1) = [1] x1 + [0] 591.15/297.17 591.15/297.17 [U31](x1) = [1] x1 + [0] 591.15/297.17 591.15/297.17 [U41](x1, x2) = [1] x1 + [1] x2 + [0] 591.15/297.17 591.15/297.17 [U42](x1) = [1] x1 + [0] 591.15/297.17 591.15/297.17 [isNeList](x1) = [1] x1 + [1] 591.15/297.17 591.15/297.17 [U51](x1, x2) = [1] x1 + [1] x2 + [0] 591.15/297.17 591.15/297.17 [U52](x1) = [1] x1 + [0] 591.15/297.17 591.15/297.17 [U61](x1) = [1] x1 + [0] 591.15/297.17 591.15/297.17 [U71](x1, x2) = [1] x1 + [1] x2 + [0] 591.15/297.17 591.15/297.17 [U72](x1) = [1] x1 + [0] 591.15/297.17 591.15/297.17 [isPal](x1) = [1] x1 + [1] 591.15/297.17 591.15/297.17 [U81](x1) = [1] x1 + [0] 591.15/297.17 591.15/297.17 [n__nil] = [0] 591.15/297.17 591.15/297.17 [n____](x1, x2) = [1] x1 + [1] x2 + [0] 591.15/297.17 591.15/297.17 [isQid](x1) = [1] x1 + [0] 591.15/297.17 591.15/297.17 [isNePal](x1) = [1] x1 + [1] 591.15/297.17 591.15/297.17 [n__a] = [1] 591.15/297.17 591.15/297.17 [n__e] = [1] 591.15/297.17 591.15/297.17 [n__i] = [1] 591.15/297.17 591.15/297.17 [n__o] = [1] 591.15/297.17 591.15/297.17 [n__u] = [1] 591.15/297.17 591.15/297.17 [a] = [7] 591.15/297.17 591.15/297.17 [e] = [7] 591.15/297.17 591.15/297.17 [i] = [7] 591.15/297.17 591.15/297.17 [o] = [7] 591.15/297.17 591.15/297.17 [u] = [7] 591.15/297.17 591.15/297.17 The order satisfies the following ordering constraints: 591.15/297.17 591.15/297.17 [__(X1, X2)] = [1] X1 + [1] X2 + [7] 591.15/297.17 > [1] X1 + [1] X2 + [0] 591.15/297.17 = [n____(X1, X2)] 591.15/297.17 591.15/297.17 [__(X, nil())] = [1] X + [14] 591.15/297.17 > [1] X + [0] 591.15/297.17 = [X] 591.15/297.17 591.15/297.17 [__(__(X, Y), Z)] = [1] X + [1] Y + [1] Z + [14] 591.15/297.17 >= [1] X + [1] Y + [1] Z + [14] 591.15/297.17 = [__(X, __(Y, Z))] 591.15/297.17 591.15/297.17 [__(nil(), X)] = [1] X + [14] 591.15/297.17 > [1] X + [0] 591.15/297.17 = [X] 591.15/297.17 591.15/297.17 [nil()] = [7] 591.15/297.17 > [0] 591.15/297.17 = [n__nil()] 591.15/297.17 591.15/297.17 [U11(tt())] = [1] 591.15/297.17 >= [1] 591.15/297.17 = [tt()] 591.15/297.17 591.15/297.17 [U21(tt(), V2)] = [1] V2 + [1] 591.15/297.17 >= [1] V2 + [1] 591.15/297.17 = [U22(isList(activate(V2)))] 591.15/297.17 591.15/297.17 [U22(tt())] = [1] 591.15/297.17 >= [1] 591.15/297.17 = [tt()] 591.15/297.17 591.15/297.17 [isList(V)] = [1] V + [1] 591.15/297.17 >= [1] V + [1] 591.15/297.17 = [U11(isNeList(activate(V)))] 591.15/297.17 591.15/297.17 [isList(n__nil())] = [1] 591.15/297.17 >= [1] 591.15/297.17 = [tt()] 591.15/297.17 591.15/297.17 [isList(n____(V1, V2))] = [1] V2 + [1] V1 + [1] 591.15/297.17 >= [1] V2 + [1] V1 + [1] 591.15/297.17 = [U21(isList(activate(V1)), activate(V2))] 591.15/297.17 591.15/297.17 [activate(X)] = [1] X + [0] 591.15/297.17 >= [1] X + [0] 591.15/297.17 = [X] 591.15/297.17 591.15/297.17 [activate(n__nil())] = [0] 591.15/297.17 ? [7] 591.15/297.17 = [nil()] 591.15/297.17 591.15/297.17 [activate(n____(X1, X2))] = [1] X1 + [1] X2 + [0] 591.15/297.17 ? [1] X1 + [1] X2 + [7] 591.15/297.17 = [__(X1, X2)] 591.15/297.17 591.15/297.17 [activate(n__a())] = [1] 591.15/297.17 ? [7] 591.15/297.17 = [a()] 591.15/297.17 591.15/297.17 [activate(n__e())] = [1] 591.15/297.17 ? [7] 591.15/297.17 = [e()] 591.15/297.17 591.15/297.17 [activate(n__i())] = [1] 591.15/297.17 ? [7] 591.15/297.17 = [i()] 591.15/297.17 591.15/297.17 [activate(n__o())] = [1] 591.15/297.17 ? [7] 591.15/297.17 = [o()] 591.15/297.17 591.15/297.17 [activate(n__u())] = [1] 591.15/297.17 ? [7] 591.15/297.17 = [u()] 591.15/297.17 591.15/297.17 [U31(tt())] = [1] 591.15/297.17 >= [1] 591.15/297.17 = [tt()] 591.15/297.17 591.15/297.17 [U41(tt(), V2)] = [1] V2 + [1] 591.15/297.17 >= [1] V2 + [1] 591.15/297.17 = [U42(isNeList(activate(V2)))] 591.15/297.17 591.15/297.17 [U42(tt())] = [1] 591.15/297.17 >= [1] 591.15/297.17 = [tt()] 591.15/297.17 591.15/297.17 [isNeList(V)] = [1] V + [1] 591.15/297.17 > [1] V + [0] 591.15/297.17 = [U31(isQid(activate(V)))] 591.15/297.17 591.15/297.17 [isNeList(n____(V1, V2))] = [1] V2 + [1] V1 + [1] 591.15/297.17 >= [1] V2 + [1] V1 + [1] 591.15/297.17 = [U41(isList(activate(V1)), activate(V2))] 591.15/297.17 591.15/297.17 [isNeList(n____(V1, V2))] = [1] V2 + [1] V1 + [1] 591.15/297.17 >= [1] V2 + [1] V1 + [1] 591.15/297.17 = [U51(isNeList(activate(V1)), activate(V2))] 591.15/297.17 591.15/297.17 [U51(tt(), V2)] = [1] V2 + [1] 591.15/297.17 >= [1] V2 + [1] 591.15/297.17 = [U52(isList(activate(V2)))] 591.15/297.17 591.15/297.17 [U52(tt())] = [1] 591.15/297.17 >= [1] 591.15/297.17 = [tt()] 591.15/297.17 591.15/297.17 [U61(tt())] = [1] 591.15/297.17 >= [1] 591.15/297.17 = [tt()] 591.15/297.17 591.15/297.17 [U71(tt(), P)] = [1] P + [1] 591.15/297.17 >= [1] P + [1] 591.15/297.17 = [U72(isPal(activate(P)))] 591.15/297.17 591.15/297.17 [U72(tt())] = [1] 591.15/297.17 >= [1] 591.15/297.17 = [tt()] 591.15/297.17 591.15/297.17 [isPal(V)] = [1] V + [1] 591.15/297.17 >= [1] V + [1] 591.15/297.17 = [U81(isNePal(activate(V)))] 591.15/297.17 591.15/297.17 [isPal(n__nil())] = [1] 591.15/297.17 >= [1] 591.15/297.17 = [tt()] 591.15/297.17 591.15/297.17 [U81(tt())] = [1] 591.15/297.17 >= [1] 591.15/297.17 = [tt()] 591.15/297.17 591.15/297.17 [isQid(n__a())] = [1] 591.15/297.17 >= [1] 591.15/297.17 = [tt()] 591.15/297.17 591.15/297.17 [isQid(n__e())] = [1] 591.15/297.17 >= [1] 591.15/297.17 = [tt()] 591.15/297.17 591.15/297.17 [isQid(n__i())] = [1] 591.15/297.17 >= [1] 591.15/297.17 = [tt()] 591.15/297.17 591.15/297.17 [isQid(n__o())] = [1] 591.15/297.17 >= [1] 591.15/297.17 = [tt()] 591.15/297.17 591.15/297.17 [isQid(n__u())] = [1] 591.15/297.17 >= [1] 591.15/297.17 = [tt()] 591.15/297.17 591.15/297.17 [isNePal(V)] = [1] V + [1] 591.15/297.17 > [1] V + [0] 591.15/297.17 = [U61(isQid(activate(V)))] 591.15/297.17 591.15/297.17 [isNePal(n____(I, __(P, I)))] = [1] P + [2] I + [8] 591.15/297.17 > [1] P + [1] I + [0] 591.15/297.17 = [U71(isQid(activate(I)), activate(P))] 591.15/297.17 591.15/297.17 [a()] = [7] 591.15/297.17 > [1] 591.15/297.17 = [n__a()] 591.15/297.17 591.15/297.17 [e()] = [7] 591.15/297.17 > [1] 591.15/297.17 = [n__e()] 591.15/297.17 591.15/297.17 [i()] = [7] 591.15/297.17 > [1] 591.15/297.17 = [n__i()] 591.15/297.17 591.15/297.17 [o()] = [7] 591.15/297.17 > [1] 591.15/297.17 = [n__o()] 591.15/297.17 591.15/297.17 [u()] = [7] 591.15/297.17 > [1] 591.15/297.17 = [n__u()] 591.15/297.17 591.15/297.17 591.15/297.17 Further, it can be verified that all rules not oriented are covered by the weightgap condition. 591.15/297.17 591.15/297.17 We are left with following problem, upon which TcT provides the 591.15/297.17 certificate YES(O(1),O(n^1)). 591.15/297.17 591.15/297.17 Strict Trs: 591.15/297.17 { __(__(X, Y), Z) -> __(X, __(Y, Z)) 591.15/297.17 , U11(tt()) -> tt() 591.15/297.17 , U22(tt()) -> tt() 591.15/297.17 , activate(X) -> X 591.15/297.17 , activate(n__nil()) -> nil() 591.15/297.17 , activate(n____(X1, X2)) -> __(X1, X2) 591.15/297.17 , activate(n__a()) -> a() 591.15/297.17 , activate(n__e()) -> e() 591.15/297.17 , activate(n__i()) -> i() 591.15/297.17 , activate(n__o()) -> o() 591.15/297.17 , activate(n__u()) -> u() 591.15/297.17 , U31(tt()) -> tt() 591.15/297.17 , U42(tt()) -> tt() 591.15/297.17 , U52(tt()) -> tt() 591.15/297.17 , U61(tt()) -> tt() 591.15/297.17 , U72(tt()) -> tt() 591.15/297.17 , U81(tt()) -> tt() } 591.15/297.17 Weak Trs: 591.15/297.17 { __(X1, X2) -> n____(X1, X2) 591.15/297.17 , __(X, nil()) -> X 591.15/297.17 , __(nil(), X) -> X 591.15/297.17 , nil() -> n__nil() 591.15/297.17 , U21(tt(), V2) -> U22(isList(activate(V2))) 591.15/297.17 , isList(V) -> U11(isNeList(activate(V))) 591.15/297.17 , isList(n__nil()) -> tt() 591.15/297.17 , isList(n____(V1, V2)) -> U21(isList(activate(V1)), activate(V2)) 591.15/297.17 , U41(tt(), V2) -> U42(isNeList(activate(V2))) 591.15/297.17 , isNeList(V) -> U31(isQid(activate(V))) 591.15/297.17 , isNeList(n____(V1, V2)) -> 591.15/297.17 U41(isList(activate(V1)), activate(V2)) 591.15/297.17 , isNeList(n____(V1, V2)) -> 591.15/297.17 U51(isNeList(activate(V1)), activate(V2)) 591.15/297.17 , U51(tt(), V2) -> U52(isList(activate(V2))) 591.15/297.17 , U71(tt(), P) -> U72(isPal(activate(P))) 591.15/297.17 , isPal(V) -> U81(isNePal(activate(V))) 591.15/297.17 , isPal(n__nil()) -> tt() 591.15/297.17 , isQid(n__a()) -> tt() 591.15/297.17 , isQid(n__e()) -> tt() 591.15/297.17 , isQid(n__i()) -> tt() 591.15/297.17 , isQid(n__o()) -> tt() 591.15/297.17 , isQid(n__u()) -> tt() 591.15/297.17 , isNePal(V) -> U61(isQid(activate(V))) 591.15/297.17 , isNePal(n____(I, __(P, I))) -> 591.15/297.17 U71(isQid(activate(I)), activate(P)) 591.15/297.17 , a() -> n__a() 591.15/297.17 , e() -> n__e() 591.15/297.17 , i() -> n__i() 591.15/297.17 , o() -> n__o() 591.15/297.17 , u() -> n__u() } 591.15/297.17 Obligation: 591.15/297.17 runtime complexity 591.15/297.17 Answer: 591.15/297.17 YES(O(1),O(n^1)) 591.15/297.17 591.15/297.17 The weightgap principle applies (using the following nonconstant 591.15/297.17 growth matrix-interpretation) 591.15/297.17 591.15/297.17 The following argument positions are usable: 591.15/297.17 Uargs(__) = {2}, Uargs(U11) = {1}, Uargs(U21) = {1, 2}, 591.15/297.17 Uargs(U22) = {1}, Uargs(isList) = {1}, Uargs(activate) = {1}, 591.15/297.17 Uargs(U31) = {1}, Uargs(U41) = {1, 2}, Uargs(U42) = {1}, 591.15/297.17 Uargs(isNeList) = {1}, Uargs(U51) = {1, 2}, Uargs(U52) = {1}, 591.15/297.17 Uargs(U61) = {1}, Uargs(U71) = {1, 2}, Uargs(U72) = {1}, 591.15/297.17 Uargs(isPal) = {1}, Uargs(U81) = {1}, Uargs(n____) = {2}, 591.15/297.17 Uargs(isQid) = {1}, Uargs(isNePal) = {1} 591.15/297.17 591.15/297.17 TcT has computed the following matrix interpretation satisfying 591.15/297.17 not(EDA) and not(IDA(1)). 591.15/297.17 591.15/297.17 [__](x1, x2) = [1] x1 + [1] x2 + [0] 591.15/297.17 591.15/297.17 [nil] = [7] 591.15/297.17 591.15/297.17 [U11](x1) = [1] x1 + [0] 591.15/297.17 591.15/297.17 [tt] = [0] 591.15/297.17 591.15/297.17 [U21](x1, x2) = [1] x1 + [1] x2 + [0] 591.15/297.17 591.15/297.17 [U22](x1) = [1] x1 + [0] 591.15/297.17 591.15/297.17 [isList](x1) = [1] x1 + [0] 591.15/297.17 591.15/297.17 [activate](x1) = [1] x1 + [0] 591.15/297.17 591.15/297.17 [U31](x1) = [1] x1 + [0] 591.15/297.17 591.15/297.17 [U41](x1, x2) = [1] x1 + [1] x2 + [0] 591.15/297.17 591.15/297.17 [U42](x1) = [1] x1 + [0] 591.15/297.17 591.15/297.17 [isNeList](x1) = [1] x1 + [0] 591.15/297.17 591.15/297.17 [U51](x1, x2) = [1] x1 + [1] x2 + [0] 591.15/297.17 591.15/297.17 [U52](x1) = [1] x1 + [0] 591.15/297.17 591.15/297.17 [U61](x1) = [1] x1 + [2] 591.15/297.17 591.15/297.17 [U71](x1, x2) = [1] x1 + [1] x2 + [4] 591.15/297.17 591.15/297.17 [U72](x1) = [1] x1 + [0] 591.15/297.17 591.15/297.17 [isPal](x1) = [1] x1 + [4] 591.15/297.17 591.15/297.17 [U81](x1) = [1] x1 + [0] 591.15/297.17 591.15/297.17 [n__nil] = [0] 591.15/297.17 591.15/297.17 [n____](x1, x2) = [1] x1 + [1] x2 + [0] 591.15/297.17 591.15/297.17 [isQid](x1) = [1] x1 + [0] 591.15/297.17 591.15/297.17 [isNePal](x1) = [1] x1 + [4] 591.15/297.17 591.15/297.17 [n__a] = [0] 591.15/297.17 591.15/297.17 [n__e] = [0] 591.15/297.17 591.15/297.17 [n__i] = [0] 591.15/297.17 591.15/297.17 [n__o] = [0] 591.15/297.17 591.15/297.17 [n__u] = [0] 591.15/297.17 591.15/297.17 [a] = [7] 591.15/297.17 591.15/297.17 [e] = [7] 591.15/297.17 591.15/297.17 [i] = [7] 591.15/297.17 591.15/297.17 [o] = [7] 591.15/297.17 591.15/297.17 [u] = [7] 591.15/297.17 591.15/297.17 The order satisfies the following ordering constraints: 591.15/297.17 591.15/297.17 [__(X1, X2)] = [1] X1 + [1] X2 + [0] 591.15/297.17 >= [1] X1 + [1] X2 + [0] 591.15/297.17 = [n____(X1, X2)] 591.15/297.17 591.15/297.17 [__(X, nil())] = [1] X + [7] 591.15/297.17 > [1] X + [0] 591.15/297.17 = [X] 591.15/297.17 591.15/297.17 [__(__(X, Y), Z)] = [1] X + [1] Y + [1] Z + [0] 591.15/297.17 >= [1] X + [1] Y + [1] Z + [0] 591.15/297.17 = [__(X, __(Y, Z))] 591.15/297.17 591.15/297.17 [__(nil(), X)] = [1] X + [7] 591.15/297.17 > [1] X + [0] 591.15/297.17 = [X] 591.15/297.17 591.15/297.17 [nil()] = [7] 591.15/297.17 > [0] 591.15/297.17 = [n__nil()] 591.15/297.17 591.15/297.17 [U11(tt())] = [0] 591.15/297.17 >= [0] 591.15/297.17 = [tt()] 591.15/297.17 591.15/297.17 [U21(tt(), V2)] = [1] V2 + [0] 591.15/297.17 >= [1] V2 + [0] 591.15/297.17 = [U22(isList(activate(V2)))] 591.15/297.17 591.15/297.17 [U22(tt())] = [0] 591.15/297.17 >= [0] 591.15/297.17 = [tt()] 591.15/297.17 591.15/297.17 [isList(V)] = [1] V + [0] 591.15/297.17 >= [1] V + [0] 591.15/297.17 = [U11(isNeList(activate(V)))] 591.15/297.17 591.15/297.17 [isList(n__nil())] = [0] 591.15/297.17 >= [0] 591.15/297.17 = [tt()] 591.15/297.17 591.15/297.17 [isList(n____(V1, V2))] = [1] V2 + [1] V1 + [0] 591.15/297.17 >= [1] V2 + [1] V1 + [0] 591.15/297.17 = [U21(isList(activate(V1)), activate(V2))] 591.15/297.17 591.15/297.17 [activate(X)] = [1] X + [0] 591.15/297.17 >= [1] X + [0] 591.15/297.17 = [X] 591.15/297.17 591.15/297.17 [activate(n__nil())] = [0] 591.15/297.17 ? [7] 591.15/297.17 = [nil()] 591.15/297.17 591.15/297.17 [activate(n____(X1, X2))] = [1] X1 + [1] X2 + [0] 591.15/297.17 >= [1] X1 + [1] X2 + [0] 591.15/297.17 = [__(X1, X2)] 591.15/297.17 591.15/297.17 [activate(n__a())] = [0] 591.15/297.17 ? [7] 591.15/297.17 = [a()] 591.15/297.17 591.15/297.17 [activate(n__e())] = [0] 591.15/297.17 ? [7] 591.15/297.17 = [e()] 591.15/297.17 591.15/297.17 [activate(n__i())] = [0] 591.15/297.17 ? [7] 591.15/297.17 = [i()] 591.15/297.17 591.15/297.17 [activate(n__o())] = [0] 591.15/297.17 ? [7] 591.15/297.17 = [o()] 591.15/297.17 591.15/297.17 [activate(n__u())] = [0] 591.15/297.17 ? [7] 591.15/297.17 = [u()] 591.15/297.17 591.15/297.17 [U31(tt())] = [0] 591.15/297.17 >= [0] 591.15/297.17 = [tt()] 591.15/297.17 591.15/297.17 [U41(tt(), V2)] = [1] V2 + [0] 591.15/297.17 >= [1] V2 + [0] 591.15/297.17 = [U42(isNeList(activate(V2)))] 591.15/297.17 591.15/297.17 [U42(tt())] = [0] 591.15/297.17 >= [0] 591.15/297.17 = [tt()] 591.15/297.17 591.15/297.17 [isNeList(V)] = [1] V + [0] 591.15/297.17 >= [1] V + [0] 591.15/297.17 = [U31(isQid(activate(V)))] 591.15/297.17 591.15/297.17 [isNeList(n____(V1, V2))] = [1] V2 + [1] V1 + [0] 591.15/297.17 >= [1] V2 + [1] V1 + [0] 591.15/297.17 = [U41(isList(activate(V1)), activate(V2))] 591.15/297.17 591.15/297.17 [isNeList(n____(V1, V2))] = [1] V2 + [1] V1 + [0] 591.15/297.17 >= [1] V2 + [1] V1 + [0] 591.15/297.17 = [U51(isNeList(activate(V1)), activate(V2))] 591.15/297.17 591.15/297.17 [U51(tt(), V2)] = [1] V2 + [0] 591.15/297.17 >= [1] V2 + [0] 591.15/297.17 = [U52(isList(activate(V2)))] 591.15/297.17 591.15/297.17 [U52(tt())] = [0] 591.15/297.17 >= [0] 591.15/297.17 = [tt()] 591.15/297.17 591.15/297.17 [U61(tt())] = [2] 591.15/297.17 > [0] 591.15/297.17 = [tt()] 591.15/297.17 591.15/297.17 [U71(tt(), P)] = [1] P + [4] 591.15/297.17 >= [1] P + [4] 591.15/297.17 = [U72(isPal(activate(P)))] 591.15/297.17 591.15/297.17 [U72(tt())] = [0] 591.15/297.17 >= [0] 591.15/297.17 = [tt()] 591.15/297.17 591.15/297.17 [isPal(V)] = [1] V + [4] 591.15/297.17 >= [1] V + [4] 591.15/297.17 = [U81(isNePal(activate(V)))] 591.15/297.17 591.15/297.17 [isPal(n__nil())] = [4] 591.15/297.17 > [0] 591.15/297.17 = [tt()] 591.15/297.17 591.15/297.17 [U81(tt())] = [0] 591.15/297.17 >= [0] 591.15/297.17 = [tt()] 591.15/297.17 591.15/297.17 [isQid(n__a())] = [0] 591.15/297.17 >= [0] 591.15/297.17 = [tt()] 591.15/297.17 591.15/297.17 [isQid(n__e())] = [0] 591.15/297.17 >= [0] 591.15/297.17 = [tt()] 591.15/297.17 591.15/297.17 [isQid(n__i())] = [0] 591.15/297.17 >= [0] 591.15/297.17 = [tt()] 591.15/297.17 591.15/297.17 [isQid(n__o())] = [0] 591.15/297.17 >= [0] 591.15/297.17 = [tt()] 591.15/297.17 591.15/297.17 [isQid(n__u())] = [0] 591.15/297.17 >= [0] 591.15/297.17 = [tt()] 591.15/297.17 591.15/297.17 [isNePal(V)] = [1] V + [4] 591.15/297.17 > [1] V + [2] 591.15/297.17 = [U61(isQid(activate(V)))] 591.15/297.17 591.15/297.17 [isNePal(n____(I, __(P, I)))] = [1] P + [2] I + [4] 591.15/297.17 >= [1] P + [1] I + [4] 591.15/297.17 = [U71(isQid(activate(I)), activate(P))] 591.15/297.17 591.15/297.17 [a()] = [7] 591.15/297.17 > [0] 591.15/297.17 = [n__a()] 591.15/297.17 591.15/297.17 [e()] = [7] 591.15/297.18 > [0] 591.15/297.18 = [n__e()] 591.15/297.18 591.15/297.18 [i()] = [7] 591.15/297.18 > [0] 591.15/297.18 = [n__i()] 591.15/297.18 591.15/297.18 [o()] = [7] 591.15/297.18 > [0] 591.15/297.18 = [n__o()] 591.15/297.18 591.15/297.18 [u()] = [7] 591.15/297.18 > [0] 591.15/297.18 = [n__u()] 591.15/297.18 591.15/297.18 591.15/297.18 Further, it can be verified that all rules not oriented are covered by the weightgap condition. 591.15/297.18 591.15/297.18 We are left with following problem, upon which TcT provides the 591.15/297.18 certificate YES(O(1),O(n^1)). 591.15/297.18 591.15/297.18 Strict Trs: 591.15/297.18 { __(__(X, Y), Z) -> __(X, __(Y, Z)) 591.15/297.18 , U11(tt()) -> tt() 591.15/297.18 , U22(tt()) -> tt() 591.15/297.18 , activate(X) -> X 591.15/297.18 , activate(n__nil()) -> nil() 591.15/297.18 , activate(n____(X1, X2)) -> __(X1, X2) 591.15/297.18 , activate(n__a()) -> a() 591.15/297.18 , activate(n__e()) -> e() 591.15/297.18 , activate(n__i()) -> i() 591.15/297.18 , activate(n__o()) -> o() 591.15/297.18 , activate(n__u()) -> u() 591.15/297.18 , U31(tt()) -> tt() 591.15/297.18 , U42(tt()) -> tt() 591.15/297.18 , U52(tt()) -> tt() 591.15/297.18 , U72(tt()) -> tt() 591.15/297.18 , U81(tt()) -> tt() } 591.15/297.18 Weak Trs: 591.15/297.18 { __(X1, X2) -> n____(X1, X2) 591.15/297.18 , __(X, nil()) -> X 591.15/297.18 , __(nil(), X) -> X 591.15/297.18 , nil() -> n__nil() 591.15/297.18 , U21(tt(), V2) -> U22(isList(activate(V2))) 591.15/297.18 , isList(V) -> U11(isNeList(activate(V))) 591.15/297.18 , isList(n__nil()) -> tt() 591.15/297.18 , isList(n____(V1, V2)) -> U21(isList(activate(V1)), activate(V2)) 591.15/297.18 , U41(tt(), V2) -> U42(isNeList(activate(V2))) 591.15/297.18 , isNeList(V) -> U31(isQid(activate(V))) 591.15/297.18 , isNeList(n____(V1, V2)) -> 591.15/297.18 U41(isList(activate(V1)), activate(V2)) 591.15/297.18 , isNeList(n____(V1, V2)) -> 591.15/297.18 U51(isNeList(activate(V1)), activate(V2)) 591.15/297.18 , U51(tt(), V2) -> U52(isList(activate(V2))) 591.15/297.18 , U61(tt()) -> tt() 591.15/297.18 , U71(tt(), P) -> U72(isPal(activate(P))) 591.15/297.18 , isPal(V) -> U81(isNePal(activate(V))) 591.15/297.18 , isPal(n__nil()) -> tt() 591.15/297.18 , isQid(n__a()) -> tt() 591.15/297.18 , isQid(n__e()) -> tt() 591.15/297.18 , isQid(n__i()) -> tt() 591.15/297.18 , isQid(n__o()) -> tt() 591.15/297.18 , isQid(n__u()) -> tt() 591.15/297.18 , isNePal(V) -> U61(isQid(activate(V))) 591.15/297.18 , isNePal(n____(I, __(P, I))) -> 591.15/297.18 U71(isQid(activate(I)), activate(P)) 591.15/297.18 , a() -> n__a() 591.15/297.18 , e() -> n__e() 591.15/297.18 , i() -> n__i() 591.15/297.18 , o() -> n__o() 591.15/297.18 , u() -> n__u() } 591.15/297.18 Obligation: 591.15/297.18 runtime complexity 591.15/297.18 Answer: 591.15/297.18 YES(O(1),O(n^1)) 591.15/297.18 591.15/297.18 The weightgap principle applies (using the following nonconstant 591.15/297.18 growth matrix-interpretation) 591.15/297.18 591.15/297.18 The following argument positions are usable: 591.15/297.18 Uargs(__) = {2}, Uargs(U11) = {1}, Uargs(U21) = {1, 2}, 591.15/297.18 Uargs(U22) = {1}, Uargs(isList) = {1}, Uargs(activate) = {1}, 591.15/297.18 Uargs(U31) = {1}, Uargs(U41) = {1, 2}, Uargs(U42) = {1}, 591.15/297.18 Uargs(isNeList) = {1}, Uargs(U51) = {1, 2}, Uargs(U52) = {1}, 591.15/297.18 Uargs(U61) = {1}, Uargs(U71) = {1, 2}, Uargs(U72) = {1}, 591.15/297.18 Uargs(isPal) = {1}, Uargs(U81) = {1}, Uargs(n____) = {2}, 591.15/297.18 Uargs(isQid) = {1}, Uargs(isNePal) = {1} 591.15/297.18 591.15/297.18 TcT has computed the following matrix interpretation satisfying 591.15/297.18 not(EDA) and not(IDA(1)). 591.15/297.18 591.15/297.18 [__](x1, x2) = [1] x1 + [1] x2 + [1] 591.15/297.18 591.15/297.18 [nil] = [7] 591.15/297.18 591.15/297.18 [U11](x1) = [1] x1 + [0] 591.15/297.18 591.15/297.18 [tt] = [0] 591.15/297.18 591.15/297.18 [U21](x1, x2) = [1] x1 + [1] x2 + [0] 591.15/297.18 591.15/297.18 [U22](x1) = [1] x1 + [0] 591.15/297.18 591.15/297.18 [isList](x1) = [1] x1 + [0] 591.15/297.18 591.15/297.18 [activate](x1) = [1] x1 + [0] 591.15/297.18 591.15/297.18 [U31](x1) = [1] x1 + [0] 591.15/297.18 591.15/297.18 [U41](x1, x2) = [1] x1 + [1] x2 + [1] 591.15/297.18 591.15/297.18 [U42](x1) = [1] x1 + [1] 591.15/297.18 591.15/297.18 [isNeList](x1) = [1] x1 + [0] 591.15/297.18 591.15/297.18 [U51](x1, x2) = [1] x1 + [1] x2 + [0] 591.15/297.18 591.15/297.18 [U52](x1) = [1] x1 + [0] 591.15/297.18 591.15/297.18 [U61](x1) = [1] x1 + [0] 591.15/297.18 591.15/297.18 [U71](x1, x2) = [1] x1 + [1] x2 + [4] 591.15/297.18 591.15/297.18 [U72](x1) = [1] x1 + [0] 591.15/297.18 591.15/297.18 [isPal](x1) = [1] x1 + [4] 591.15/297.18 591.15/297.18 [U81](x1) = [1] x1 + [0] 591.15/297.18 591.15/297.18 [n__nil] = [0] 591.15/297.18 591.15/297.18 [n____](x1, x2) = [1] x1 + [1] x2 + [1] 591.15/297.18 591.15/297.18 [isQid](x1) = [1] x1 + [0] 591.15/297.18 591.15/297.18 [isNePal](x1) = [1] x1 + [2] 591.15/297.18 591.15/297.18 [n__a] = [0] 591.15/297.18 591.15/297.18 [n__e] = [0] 591.15/297.18 591.15/297.18 [n__i] = [0] 591.15/297.18 591.15/297.18 [n__o] = [0] 591.15/297.18 591.15/297.18 [n__u] = [0] 591.15/297.18 591.15/297.18 [a] = [7] 591.15/297.18 591.15/297.18 [e] = [7] 591.15/297.18 591.15/297.18 [i] = [7] 591.15/297.18 591.15/297.18 [o] = [7] 591.15/297.18 591.15/297.18 [u] = [7] 591.15/297.18 591.15/297.18 The order satisfies the following ordering constraints: 591.15/297.18 591.15/297.18 [__(X1, X2)] = [1] X1 + [1] X2 + [1] 591.15/297.18 >= [1] X1 + [1] X2 + [1] 591.15/297.18 = [n____(X1, X2)] 591.15/297.18 591.15/297.18 [__(X, nil())] = [1] X + [8] 591.15/297.18 > [1] X + [0] 591.15/297.18 = [X] 591.15/297.18 591.15/297.18 [__(__(X, Y), Z)] = [1] X + [1] Y + [1] Z + [2] 591.15/297.18 >= [1] X + [1] Y + [1] Z + [2] 591.15/297.18 = [__(X, __(Y, Z))] 591.15/297.18 591.15/297.18 [__(nil(), X)] = [1] X + [8] 591.15/297.18 > [1] X + [0] 591.15/297.18 = [X] 591.15/297.18 591.15/297.18 [nil()] = [7] 591.15/297.18 > [0] 591.15/297.18 = [n__nil()] 591.15/297.18 591.15/297.18 [U11(tt())] = [0] 591.15/297.18 >= [0] 591.15/297.18 = [tt()] 591.15/297.18 591.15/297.18 [U21(tt(), V2)] = [1] V2 + [0] 591.15/297.18 >= [1] V2 + [0] 591.15/297.18 = [U22(isList(activate(V2)))] 591.15/297.18 591.15/297.18 [U22(tt())] = [0] 591.15/297.18 >= [0] 591.15/297.18 = [tt()] 591.15/297.18 591.15/297.18 [isList(V)] = [1] V + [0] 591.15/297.18 >= [1] V + [0] 591.15/297.18 = [U11(isNeList(activate(V)))] 591.15/297.18 591.15/297.18 [isList(n__nil())] = [0] 591.15/297.18 >= [0] 591.15/297.18 = [tt()] 591.15/297.18 591.15/297.18 [isList(n____(V1, V2))] = [1] V2 + [1] V1 + [1] 591.15/297.18 > [1] V2 + [1] V1 + [0] 591.15/297.18 = [U21(isList(activate(V1)), activate(V2))] 591.15/297.18 591.15/297.18 [activate(X)] = [1] X + [0] 591.15/297.18 >= [1] X + [0] 591.15/297.18 = [X] 591.15/297.18 591.15/297.18 [activate(n__nil())] = [0] 591.15/297.18 ? [7] 591.15/297.18 = [nil()] 591.15/297.18 591.15/297.18 [activate(n____(X1, X2))] = [1] X1 + [1] X2 + [1] 591.15/297.18 >= [1] X1 + [1] X2 + [1] 591.15/297.18 = [__(X1, X2)] 591.15/297.18 591.15/297.18 [activate(n__a())] = [0] 591.15/297.18 ? [7] 591.15/297.18 = [a()] 591.15/297.18 591.15/297.18 [activate(n__e())] = [0] 591.15/297.18 ? [7] 591.15/297.18 = [e()] 591.15/297.18 591.15/297.18 [activate(n__i())] = [0] 591.15/297.18 ? [7] 591.15/297.18 = [i()] 591.15/297.18 591.15/297.18 [activate(n__o())] = [0] 591.15/297.18 ? [7] 591.15/297.18 = [o()] 591.15/297.18 591.15/297.18 [activate(n__u())] = [0] 591.15/297.18 ? [7] 591.15/297.18 = [u()] 591.15/297.18 591.15/297.18 [U31(tt())] = [0] 591.15/297.18 >= [0] 591.15/297.18 = [tt()] 591.15/297.18 591.15/297.18 [U41(tt(), V2)] = [1] V2 + [1] 591.15/297.18 >= [1] V2 + [1] 591.15/297.18 = [U42(isNeList(activate(V2)))] 591.15/297.18 591.15/297.18 [U42(tt())] = [1] 591.15/297.18 > [0] 591.15/297.18 = [tt()] 591.15/297.18 591.15/297.18 [isNeList(V)] = [1] V + [0] 591.15/297.18 >= [1] V + [0] 591.15/297.18 = [U31(isQid(activate(V)))] 591.15/297.18 591.15/297.18 [isNeList(n____(V1, V2))] = [1] V2 + [1] V1 + [1] 591.15/297.18 >= [1] V2 + [1] V1 + [1] 591.15/297.18 = [U41(isList(activate(V1)), activate(V2))] 591.15/297.18 591.15/297.18 [isNeList(n____(V1, V2))] = [1] V2 + [1] V1 + [1] 591.15/297.18 > [1] V2 + [1] V1 + [0] 591.15/297.18 = [U51(isNeList(activate(V1)), activate(V2))] 591.15/297.18 591.15/297.18 [U51(tt(), V2)] = [1] V2 + [0] 591.15/297.18 >= [1] V2 + [0] 591.15/297.18 = [U52(isList(activate(V2)))] 591.15/297.18 591.15/297.18 [U52(tt())] = [0] 591.15/297.18 >= [0] 591.15/297.18 = [tt()] 591.15/297.18 591.15/297.18 [U61(tt())] = [0] 591.15/297.18 >= [0] 591.15/297.18 = [tt()] 591.15/297.18 591.15/297.18 [U71(tt(), P)] = [1] P + [4] 591.15/297.18 >= [1] P + [4] 591.15/297.18 = [U72(isPal(activate(P)))] 591.15/297.18 591.15/297.18 [U72(tt())] = [0] 591.15/297.18 >= [0] 591.15/297.18 = [tt()] 591.15/297.18 591.15/297.18 [isPal(V)] = [1] V + [4] 591.15/297.18 > [1] V + [2] 591.15/297.18 = [U81(isNePal(activate(V)))] 591.15/297.18 591.15/297.18 [isPal(n__nil())] = [4] 591.15/297.18 > [0] 591.15/297.18 = [tt()] 591.15/297.18 591.15/297.18 [U81(tt())] = [0] 591.15/297.18 >= [0] 591.15/297.18 = [tt()] 591.15/297.18 591.15/297.18 [isQid(n__a())] = [0] 591.15/297.18 >= [0] 591.15/297.18 = [tt()] 591.15/297.18 591.15/297.18 [isQid(n__e())] = [0] 591.15/297.18 >= [0] 591.15/297.18 = [tt()] 591.15/297.18 591.15/297.18 [isQid(n__i())] = [0] 591.15/297.18 >= [0] 591.15/297.18 = [tt()] 591.15/297.18 591.15/297.18 [isQid(n__o())] = [0] 591.15/297.18 >= [0] 591.15/297.18 = [tt()] 591.15/297.18 591.15/297.18 [isQid(n__u())] = [0] 591.15/297.18 >= [0] 591.15/297.18 = [tt()] 591.15/297.18 591.15/297.18 [isNePal(V)] = [1] V + [2] 591.15/297.18 > [1] V + [0] 591.15/297.18 = [U61(isQid(activate(V)))] 591.15/297.18 591.15/297.18 [isNePal(n____(I, __(P, I)))] = [1] P + [2] I + [4] 591.15/297.18 >= [1] P + [1] I + [4] 591.15/297.18 = [U71(isQid(activate(I)), activate(P))] 591.15/297.18 591.15/297.18 [a()] = [7] 591.15/297.18 > [0] 591.15/297.18 = [n__a()] 591.15/297.18 591.15/297.18 [e()] = [7] 591.15/297.18 > [0] 591.15/297.18 = [n__e()] 591.15/297.18 591.15/297.18 [i()] = [7] 591.15/297.18 > [0] 591.15/297.18 = [n__i()] 591.15/297.18 591.15/297.18 [o()] = [7] 591.15/297.18 > [0] 591.15/297.18 = [n__o()] 591.15/297.18 591.15/297.18 [u()] = [7] 591.15/297.18 > [0] 591.15/297.18 = [n__u()] 591.15/297.18 591.15/297.18 591.15/297.18 Further, it can be verified that all rules not oriented are covered by the weightgap condition. 591.15/297.18 591.15/297.18 We are left with following problem, upon which TcT provides the 591.15/297.18 certificate YES(O(1),O(n^1)). 591.15/297.18 591.15/297.18 Strict Trs: 591.15/297.18 { __(__(X, Y), Z) -> __(X, __(Y, Z)) 591.15/297.18 , U11(tt()) -> tt() 591.15/297.18 , U22(tt()) -> tt() 591.15/297.18 , activate(X) -> X 591.15/297.18 , activate(n__nil()) -> nil() 591.15/297.18 , activate(n____(X1, X2)) -> __(X1, X2) 591.15/297.18 , activate(n__a()) -> a() 591.15/297.18 , activate(n__e()) -> e() 591.15/297.18 , activate(n__i()) -> i() 591.15/297.18 , activate(n__o()) -> o() 591.15/297.18 , activate(n__u()) -> u() 591.15/297.18 , U31(tt()) -> tt() 591.15/297.18 , U52(tt()) -> tt() 591.15/297.18 , U72(tt()) -> tt() 591.15/297.18 , U81(tt()) -> tt() } 591.15/297.18 Weak Trs: 591.15/297.18 { __(X1, X2) -> n____(X1, X2) 591.15/297.18 , __(X, nil()) -> X 591.15/297.18 , __(nil(), X) -> X 591.15/297.18 , nil() -> n__nil() 591.15/297.18 , U21(tt(), V2) -> U22(isList(activate(V2))) 591.15/297.18 , isList(V) -> U11(isNeList(activate(V))) 591.15/297.18 , isList(n__nil()) -> tt() 591.15/297.18 , isList(n____(V1, V2)) -> U21(isList(activate(V1)), activate(V2)) 591.15/297.18 , U41(tt(), V2) -> U42(isNeList(activate(V2))) 591.15/297.18 , U42(tt()) -> tt() 591.15/297.18 , isNeList(V) -> U31(isQid(activate(V))) 591.15/297.18 , isNeList(n____(V1, V2)) -> 591.15/297.18 U41(isList(activate(V1)), activate(V2)) 591.15/297.18 , isNeList(n____(V1, V2)) -> 591.15/297.18 U51(isNeList(activate(V1)), activate(V2)) 591.15/297.18 , U51(tt(), V2) -> U52(isList(activate(V2))) 591.15/297.18 , U61(tt()) -> tt() 591.15/297.18 , U71(tt(), P) -> U72(isPal(activate(P))) 591.15/297.18 , isPal(V) -> U81(isNePal(activate(V))) 591.15/297.18 , isPal(n__nil()) -> tt() 591.15/297.18 , isQid(n__a()) -> tt() 591.15/297.18 , isQid(n__e()) -> tt() 591.15/297.18 , isQid(n__i()) -> tt() 591.15/297.18 , isQid(n__o()) -> tt() 591.15/297.18 , isQid(n__u()) -> tt() 591.15/297.18 , isNePal(V) -> U61(isQid(activate(V))) 591.15/297.18 , isNePal(n____(I, __(P, I))) -> 591.15/297.18 U71(isQid(activate(I)), activate(P)) 591.15/297.18 , a() -> n__a() 591.15/297.18 , e() -> n__e() 591.15/297.18 , i() -> n__i() 591.15/297.18 , o() -> n__o() 591.15/297.18 , u() -> n__u() } 591.15/297.18 Obligation: 591.15/297.18 runtime complexity 591.15/297.18 Answer: 591.15/297.18 YES(O(1),O(n^1)) 591.15/297.18 591.15/297.18 The weightgap principle applies (using the following nonconstant 591.15/297.18 growth matrix-interpretation) 591.15/297.18 591.15/297.18 The following argument positions are usable: 591.15/297.18 Uargs(__) = {2}, Uargs(U11) = {1}, Uargs(U21) = {1, 2}, 591.15/297.18 Uargs(U22) = {1}, Uargs(isList) = {1}, Uargs(activate) = {1}, 591.15/297.18 Uargs(U31) = {1}, Uargs(U41) = {1, 2}, Uargs(U42) = {1}, 591.15/297.18 Uargs(isNeList) = {1}, Uargs(U51) = {1, 2}, Uargs(U52) = {1}, 591.15/297.18 Uargs(U61) = {1}, Uargs(U71) = {1, 2}, Uargs(U72) = {1}, 591.15/297.18 Uargs(isPal) = {1}, Uargs(U81) = {1}, Uargs(n____) = {2}, 591.15/297.18 Uargs(isQid) = {1}, Uargs(isNePal) = {1} 591.15/297.18 591.15/297.18 TcT has computed the following matrix interpretation satisfying 591.15/297.18 not(EDA) and not(IDA(1)). 591.15/297.18 591.15/297.18 [__](x1, x2) = [1] x1 + [1] x2 + [0] 591.15/297.18 591.15/297.18 [nil] = [7] 591.15/297.18 591.15/297.18 [U11](x1) = [1] x1 + [0] 591.15/297.18 591.15/297.18 [tt] = [1] 591.15/297.18 591.15/297.18 [U21](x1, x2) = [1] x1 + [1] x2 + [0] 591.15/297.18 591.15/297.18 [U22](x1) = [1] x1 + [0] 591.15/297.18 591.15/297.18 [isList](x1) = [1] x1 + [0] 591.15/297.18 591.15/297.18 [activate](x1) = [1] x1 + [0] 591.15/297.18 591.15/297.18 [U31](x1) = [1] x1 + [0] 591.15/297.18 591.15/297.18 [U41](x1, x2) = [1] x1 + [1] x2 + [0] 591.15/297.18 591.15/297.18 [U42](x1) = [1] x1 + [1] 591.15/297.18 591.15/297.18 [isNeList](x1) = [1] x1 + [0] 591.15/297.18 591.15/297.18 [U51](x1, x2) = [1] x1 + [1] x2 + [0] 591.15/297.18 591.15/297.18 [U52](x1) = [1] x1 + [0] 591.15/297.18 591.15/297.18 [U61](x1) = [1] x1 + [0] 591.15/297.18 591.15/297.18 [U71](x1, x2) = [1] x1 + [1] x2 + [0] 591.15/297.18 591.15/297.18 [U72](x1) = [1] x1 + [1] 591.15/297.18 591.15/297.18 [isPal](x1) = [1] x1 + [0] 591.15/297.18 591.15/297.18 [U81](x1) = [1] x1 + [0] 591.15/297.18 591.15/297.18 [n__nil] = [1] 591.15/297.18 591.15/297.18 [n____](x1, x2) = [1] x1 + [1] x2 + [0] 591.15/297.18 591.15/297.18 [isQid](x1) = [1] x1 + [0] 591.15/297.18 591.15/297.18 [isNePal](x1) = [1] x1 + [0] 591.15/297.18 591.15/297.18 [n__a] = [1] 591.15/297.18 591.15/297.18 [n__e] = [1] 591.15/297.18 591.15/297.18 [n__i] = [1] 591.15/297.18 591.15/297.18 [n__o] = [1] 591.15/297.18 591.15/297.18 [n__u] = [1] 591.15/297.18 591.15/297.18 [a] = [7] 591.15/297.18 591.15/297.18 [e] = [7] 591.15/297.18 591.15/297.18 [i] = [7] 591.15/297.18 591.15/297.18 [o] = [7] 591.15/297.18 591.15/297.18 [u] = [7] 591.15/297.18 591.15/297.18 The order satisfies the following ordering constraints: 591.15/297.18 591.15/297.18 [__(X1, X2)] = [1] X1 + [1] X2 + [0] 591.15/297.18 >= [1] X1 + [1] X2 + [0] 591.15/297.18 = [n____(X1, X2)] 591.15/297.18 591.15/297.18 [__(X, nil())] = [1] X + [7] 591.15/297.18 > [1] X + [0] 591.15/297.18 = [X] 591.15/297.18 591.15/297.18 [__(__(X, Y), Z)] = [1] X + [1] Y + [1] Z + [0] 591.15/297.18 >= [1] X + [1] Y + [1] Z + [0] 591.15/297.18 = [__(X, __(Y, Z))] 591.15/297.18 591.15/297.18 [__(nil(), X)] = [1] X + [7] 591.15/297.18 > [1] X + [0] 591.15/297.18 = [X] 591.15/297.18 591.15/297.18 [nil()] = [7] 591.15/297.18 > [1] 591.15/297.18 = [n__nil()] 591.15/297.18 591.15/297.18 [U11(tt())] = [1] 591.15/297.18 >= [1] 591.15/297.18 = [tt()] 591.15/297.18 591.15/297.18 [U21(tt(), V2)] = [1] V2 + [1] 591.15/297.18 > [1] V2 + [0] 591.15/297.18 = [U22(isList(activate(V2)))] 591.15/297.18 591.15/297.18 [U22(tt())] = [1] 591.15/297.18 >= [1] 591.15/297.18 = [tt()] 591.15/297.18 591.15/297.18 [isList(V)] = [1] V + [0] 591.15/297.18 >= [1] V + [0] 591.15/297.18 = [U11(isNeList(activate(V)))] 591.15/297.18 591.15/297.18 [isList(n__nil())] = [1] 591.15/297.18 >= [1] 591.15/297.18 = [tt()] 591.15/297.18 591.15/297.18 [isList(n____(V1, V2))] = [1] V2 + [1] V1 + [0] 591.15/297.18 >= [1] V2 + [1] V1 + [0] 591.15/297.18 = [U21(isList(activate(V1)), activate(V2))] 591.15/297.18 591.15/297.18 [activate(X)] = [1] X + [0] 591.15/297.18 >= [1] X + [0] 591.15/297.18 = [X] 591.15/297.18 591.15/297.18 [activate(n__nil())] = [1] 591.15/297.18 ? [7] 591.15/297.18 = [nil()] 591.15/297.18 591.15/297.18 [activate(n____(X1, X2))] = [1] X1 + [1] X2 + [0] 591.15/297.18 >= [1] X1 + [1] X2 + [0] 591.15/297.18 = [__(X1, X2)] 591.15/297.18 591.15/297.18 [activate(n__a())] = [1] 591.15/297.18 ? [7] 591.15/297.18 = [a()] 591.15/297.18 591.15/297.18 [activate(n__e())] = [1] 591.15/297.18 ? [7] 591.15/297.18 = [e()] 591.15/297.18 591.15/297.18 [activate(n__i())] = [1] 591.15/297.18 ? [7] 591.15/297.18 = [i()] 591.15/297.18 591.15/297.18 [activate(n__o())] = [1] 591.15/297.18 ? [7] 591.15/297.18 = [o()] 591.15/297.18 591.15/297.18 [activate(n__u())] = [1] 591.15/297.18 ? [7] 591.15/297.18 = [u()] 591.15/297.18 591.15/297.18 [U31(tt())] = [1] 591.15/297.18 >= [1] 591.15/297.18 = [tt()] 591.15/297.18 591.15/297.18 [U41(tt(), V2)] = [1] V2 + [1] 591.15/297.18 >= [1] V2 + [1] 591.15/297.18 = [U42(isNeList(activate(V2)))] 591.15/297.18 591.15/297.18 [U42(tt())] = [2] 591.15/297.18 > [1] 591.15/297.18 = [tt()] 591.15/297.18 591.15/297.18 [isNeList(V)] = [1] V + [0] 591.15/297.18 >= [1] V + [0] 591.15/297.18 = [U31(isQid(activate(V)))] 591.15/297.18 591.15/297.18 [isNeList(n____(V1, V2))] = [1] V2 + [1] V1 + [0] 591.15/297.18 >= [1] V2 + [1] V1 + [0] 591.15/297.18 = [U41(isList(activate(V1)), activate(V2))] 591.15/297.18 591.15/297.18 [isNeList(n____(V1, V2))] = [1] V2 + [1] V1 + [0] 591.15/297.18 >= [1] V2 + [1] V1 + [0] 591.15/297.18 = [U51(isNeList(activate(V1)), activate(V2))] 591.15/297.18 591.15/297.18 [U51(tt(), V2)] = [1] V2 + [1] 591.15/297.18 > [1] V2 + [0] 591.15/297.18 = [U52(isList(activate(V2)))] 591.15/297.18 591.15/297.18 [U52(tt())] = [1] 591.15/297.18 >= [1] 591.15/297.18 = [tt()] 591.15/297.18 591.15/297.18 [U61(tt())] = [1] 591.15/297.18 >= [1] 591.15/297.18 = [tt()] 591.15/297.18 591.15/297.18 [U71(tt(), P)] = [1] P + [1] 591.15/297.18 >= [1] P + [1] 591.15/297.18 = [U72(isPal(activate(P)))] 591.15/297.18 591.15/297.18 [U72(tt())] = [2] 591.15/297.18 > [1] 591.15/297.18 = [tt()] 591.15/297.18 591.15/297.18 [isPal(V)] = [1] V + [0] 591.15/297.18 >= [1] V + [0] 591.15/297.18 = [U81(isNePal(activate(V)))] 591.15/297.18 591.15/297.18 [isPal(n__nil())] = [1] 591.15/297.18 >= [1] 591.15/297.18 = [tt()] 591.15/297.18 591.15/297.18 [U81(tt())] = [1] 591.15/297.18 >= [1] 591.15/297.18 = [tt()] 591.15/297.18 591.15/297.18 [isQid(n__a())] = [1] 591.15/297.18 >= [1] 591.15/297.18 = [tt()] 591.15/297.18 591.15/297.18 [isQid(n__e())] = [1] 591.15/297.18 >= [1] 591.15/297.18 = [tt()] 591.15/297.18 591.15/297.18 [isQid(n__i())] = [1] 591.15/297.18 >= [1] 591.15/297.18 = [tt()] 591.15/297.18 591.15/297.18 [isQid(n__o())] = [1] 591.15/297.18 >= [1] 591.15/297.18 = [tt()] 591.15/297.18 591.15/297.18 [isQid(n__u())] = [1] 591.15/297.18 >= [1] 591.15/297.18 = [tt()] 591.15/297.18 591.15/297.18 [isNePal(V)] = [1] V + [0] 591.15/297.18 >= [1] V + [0] 591.15/297.18 = [U61(isQid(activate(V)))] 591.15/297.18 591.15/297.18 [isNePal(n____(I, __(P, I)))] = [1] P + [2] I + [0] 591.15/297.18 >= [1] P + [1] I + [0] 591.15/297.18 = [U71(isQid(activate(I)), activate(P))] 591.15/297.18 591.15/297.18 [a()] = [7] 591.15/297.18 > [1] 591.15/297.18 = [n__a()] 591.15/297.18 591.15/297.18 [e()] = [7] 591.15/297.18 > [1] 591.15/297.18 = [n__e()] 591.15/297.18 591.15/297.18 [i()] = [7] 591.15/297.18 > [1] 591.15/297.18 = [n__i()] 591.15/297.18 591.15/297.18 [o()] = [7] 591.15/297.18 > [1] 591.15/297.18 = [n__o()] 591.15/297.18 591.15/297.18 [u()] = [7] 591.15/297.18 > [1] 591.15/297.18 = [n__u()] 591.15/297.18 591.15/297.18 591.15/297.18 Further, it can be verified that all rules not oriented are covered by the weightgap condition. 591.15/297.18 591.15/297.18 We are left with following problem, upon which TcT provides the 591.15/297.18 certificate YES(O(1),O(n^1)). 591.15/297.18 591.15/297.18 Strict Trs: 591.15/297.18 { __(__(X, Y), Z) -> __(X, __(Y, Z)) 591.15/297.18 , U11(tt()) -> tt() 591.15/297.18 , U22(tt()) -> tt() 591.15/297.18 , activate(X) -> X 591.15/297.18 , activate(n__nil()) -> nil() 591.15/297.18 , activate(n____(X1, X2)) -> __(X1, X2) 591.15/297.18 , activate(n__a()) -> a() 591.15/297.18 , activate(n__e()) -> e() 591.15/297.18 , activate(n__i()) -> i() 591.15/297.18 , activate(n__o()) -> o() 591.15/297.18 , activate(n__u()) -> u() 591.15/297.18 , U31(tt()) -> tt() 591.15/297.18 , U52(tt()) -> tt() 591.15/297.18 , U81(tt()) -> tt() } 591.15/297.18 Weak Trs: 591.15/297.18 { __(X1, X2) -> n____(X1, X2) 591.15/297.18 , __(X, nil()) -> X 591.15/297.18 , __(nil(), X) -> X 591.15/297.18 , nil() -> n__nil() 591.15/297.18 , U21(tt(), V2) -> U22(isList(activate(V2))) 591.15/297.18 , isList(V) -> U11(isNeList(activate(V))) 591.15/297.18 , isList(n__nil()) -> tt() 591.15/297.18 , isList(n____(V1, V2)) -> U21(isList(activate(V1)), activate(V2)) 591.15/297.18 , U41(tt(), V2) -> U42(isNeList(activate(V2))) 591.15/297.18 , U42(tt()) -> tt() 591.15/297.18 , isNeList(V) -> U31(isQid(activate(V))) 591.15/297.18 , isNeList(n____(V1, V2)) -> 591.15/297.18 U41(isList(activate(V1)), activate(V2)) 591.15/297.18 , isNeList(n____(V1, V2)) -> 591.15/297.18 U51(isNeList(activate(V1)), activate(V2)) 591.15/297.18 , U51(tt(), V2) -> U52(isList(activate(V2))) 591.15/297.18 , U61(tt()) -> tt() 591.15/297.18 , U71(tt(), P) -> U72(isPal(activate(P))) 591.15/297.18 , U72(tt()) -> tt() 591.15/297.18 , isPal(V) -> U81(isNePal(activate(V))) 591.15/297.18 , isPal(n__nil()) -> tt() 591.15/297.18 , isQid(n__a()) -> tt() 591.15/297.18 , isQid(n__e()) -> tt() 591.15/297.18 , isQid(n__i()) -> tt() 591.15/297.18 , isQid(n__o()) -> tt() 591.15/297.18 , isQid(n__u()) -> tt() 591.15/297.18 , isNePal(V) -> U61(isQid(activate(V))) 591.15/297.18 , isNePal(n____(I, __(P, I))) -> 591.15/297.18 U71(isQid(activate(I)), activate(P)) 591.15/297.18 , a() -> n__a() 591.15/297.18 , e() -> n__e() 591.15/297.18 , i() -> n__i() 591.15/297.18 , o() -> n__o() 591.15/297.18 , u() -> n__u() } 591.15/297.18 Obligation: 591.15/297.18 runtime complexity 591.15/297.18 Answer: 591.15/297.18 YES(O(1),O(n^1)) 591.15/297.18 591.15/297.18 The weightgap principle applies (using the following nonconstant 591.15/297.18 growth matrix-interpretation) 591.15/297.18 591.15/297.18 The following argument positions are usable: 591.15/297.18 Uargs(__) = {2}, Uargs(U11) = {1}, Uargs(U21) = {1, 2}, 591.15/297.18 Uargs(U22) = {1}, Uargs(isList) = {1}, Uargs(activate) = {1}, 591.15/297.18 Uargs(U31) = {1}, Uargs(U41) = {1, 2}, Uargs(U42) = {1}, 591.15/297.18 Uargs(isNeList) = {1}, Uargs(U51) = {1, 2}, Uargs(U52) = {1}, 591.15/297.18 Uargs(U61) = {1}, Uargs(U71) = {1, 2}, Uargs(U72) = {1}, 591.15/297.18 Uargs(isPal) = {1}, Uargs(U81) = {1}, Uargs(n____) = {2}, 591.15/297.18 Uargs(isQid) = {1}, Uargs(isNePal) = {1} 591.15/297.18 591.15/297.18 TcT has computed the following matrix interpretation satisfying 591.15/297.18 not(EDA) and not(IDA(1)). 591.15/297.18 591.15/297.18 [__](x1, x2) = [1] x1 + [1] x2 + [0] 591.15/297.18 591.15/297.18 [nil] = [7] 591.15/297.18 591.15/297.18 [U11](x1) = [1] x1 + [0] 591.15/297.18 591.15/297.18 [tt] = [4] 591.15/297.18 591.15/297.18 [U21](x1, x2) = [1] x1 + [1] x2 + [0] 591.15/297.18 591.15/297.18 [U22](x1) = [1] x1 + [0] 591.15/297.18 591.15/297.18 [isList](x1) = [1] x1 + [0] 591.15/297.18 591.15/297.18 [activate](x1) = [1] x1 + [0] 591.15/297.18 591.15/297.18 [U31](x1) = [1] x1 + [0] 591.15/297.18 591.15/297.18 [U41](x1, x2) = [1] x1 + [1] x2 + [0] 591.15/297.18 591.15/297.18 [U42](x1) = [1] x1 + [3] 591.15/297.18 591.15/297.18 [isNeList](x1) = [1] x1 + [0] 591.15/297.18 591.15/297.18 [U51](x1, x2) = [1] x1 + [1] x2 + [0] 591.15/297.18 591.15/297.18 [U52](x1) = [1] x1 + [1] 591.15/297.18 591.15/297.18 [U61](x1) = [1] x1 + [0] 591.15/297.18 591.15/297.18 [U71](x1, x2) = [1] x1 + [1] x2 + [0] 591.15/297.18 591.15/297.18 [U72](x1) = [1] x1 + [3] 591.15/297.18 591.15/297.18 [isPal](x1) = [1] x1 + [0] 591.15/297.18 591.15/297.18 [U81](x1) = [1] x1 + [0] 591.15/297.18 591.15/297.18 [n__nil] = [4] 591.15/297.18 591.15/297.18 [n____](x1, x2) = [1] x1 + [1] x2 + [0] 591.15/297.18 591.15/297.18 [isQid](x1) = [1] x1 + [0] 591.15/297.18 591.15/297.18 [isNePal](x1) = [1] x1 + [0] 591.15/297.18 591.15/297.18 [n__a] = [7] 591.15/297.18 591.15/297.18 [n__e] = [7] 591.15/297.18 591.15/297.18 [n__i] = [7] 591.15/297.18 591.15/297.18 [n__o] = [7] 591.15/297.18 591.15/297.18 [n__u] = [7] 591.15/297.18 591.15/297.18 [a] = [7] 591.15/297.18 591.15/297.18 [e] = [7] 591.15/297.18 591.15/297.18 [i] = [7] 591.15/297.18 591.15/297.18 [o] = [7] 591.15/297.18 591.15/297.18 [u] = [7] 591.15/297.18 591.15/297.18 The order satisfies the following ordering constraints: 591.15/297.18 591.15/297.18 [__(X1, X2)] = [1] X1 + [1] X2 + [0] 591.15/297.18 >= [1] X1 + [1] X2 + [0] 591.15/297.18 = [n____(X1, X2)] 591.15/297.18 591.15/297.18 [__(X, nil())] = [1] X + [7] 591.15/297.18 > [1] X + [0] 591.15/297.18 = [X] 591.15/297.18 591.15/297.18 [__(__(X, Y), Z)] = [1] X + [1] Y + [1] Z + [0] 591.15/297.18 >= [1] X + [1] Y + [1] Z + [0] 591.15/297.18 = [__(X, __(Y, Z))] 591.15/297.18 591.15/297.18 [__(nil(), X)] = [1] X + [7] 591.15/297.18 > [1] X + [0] 591.15/297.18 = [X] 591.15/297.18 591.15/297.18 [nil()] = [7] 591.15/297.18 > [4] 591.15/297.18 = [n__nil()] 591.15/297.18 591.15/297.18 [U11(tt())] = [4] 591.15/297.18 >= [4] 591.15/297.18 = [tt()] 591.15/297.18 591.15/297.18 [U21(tt(), V2)] = [1] V2 + [4] 591.15/297.18 > [1] V2 + [0] 591.15/297.18 = [U22(isList(activate(V2)))] 591.15/297.18 591.15/297.18 [U22(tt())] = [4] 591.15/297.18 >= [4] 591.15/297.18 = [tt()] 591.15/297.18 591.15/297.18 [isList(V)] = [1] V + [0] 591.15/297.18 >= [1] V + [0] 591.15/297.18 = [U11(isNeList(activate(V)))] 591.15/297.18 591.15/297.18 [isList(n__nil())] = [4] 591.15/297.18 >= [4] 591.15/297.18 = [tt()] 591.15/297.18 591.15/297.18 [isList(n____(V1, V2))] = [1] V2 + [1] V1 + [0] 591.15/297.18 >= [1] V2 + [1] V1 + [0] 591.15/297.18 = [U21(isList(activate(V1)), activate(V2))] 591.15/297.19 591.15/297.19 [activate(X)] = [1] X + [0] 591.15/297.19 >= [1] X + [0] 591.15/297.19 = [X] 591.15/297.19 591.15/297.19 [activate(n__nil())] = [4] 591.15/297.19 ? [7] 591.15/297.19 = [nil()] 591.15/297.19 591.15/297.19 [activate(n____(X1, X2))] = [1] X1 + [1] X2 + [0] 591.15/297.19 >= [1] X1 + [1] X2 + [0] 591.15/297.19 = [__(X1, X2)] 591.15/297.19 591.15/297.19 [activate(n__a())] = [7] 591.15/297.19 >= [7] 591.15/297.19 = [a()] 591.15/297.19 591.15/297.19 [activate(n__e())] = [7] 591.15/297.19 >= [7] 591.15/297.19 = [e()] 591.15/297.19 591.15/297.19 [activate(n__i())] = [7] 591.15/297.19 >= [7] 591.15/297.19 = [i()] 591.15/297.19 591.15/297.19 [activate(n__o())] = [7] 591.15/297.19 >= [7] 591.15/297.19 = [o()] 591.15/297.19 591.15/297.19 [activate(n__u())] = [7] 591.15/297.19 >= [7] 591.15/297.19 = [u()] 591.15/297.19 591.15/297.19 [U31(tt())] = [4] 591.15/297.19 >= [4] 591.15/297.19 = [tt()] 591.15/297.19 591.15/297.19 [U41(tt(), V2)] = [1] V2 + [4] 591.15/297.19 > [1] V2 + [3] 591.15/297.19 = [U42(isNeList(activate(V2)))] 591.15/297.19 591.15/297.19 [U42(tt())] = [7] 591.15/297.19 > [4] 591.15/297.19 = [tt()] 591.15/297.19 591.15/297.19 [isNeList(V)] = [1] V + [0] 591.15/297.19 >= [1] V + [0] 591.15/297.19 = [U31(isQid(activate(V)))] 591.15/297.19 591.15/297.19 [isNeList(n____(V1, V2))] = [1] V2 + [1] V1 + [0] 591.15/297.19 >= [1] V2 + [1] V1 + [0] 591.15/297.19 = [U41(isList(activate(V1)), activate(V2))] 591.15/297.19 591.15/297.19 [isNeList(n____(V1, V2))] = [1] V2 + [1] V1 + [0] 591.15/297.19 >= [1] V2 + [1] V1 + [0] 591.15/297.19 = [U51(isNeList(activate(V1)), activate(V2))] 591.15/297.19 591.15/297.19 [U51(tt(), V2)] = [1] V2 + [4] 591.15/297.19 > [1] V2 + [1] 591.15/297.19 = [U52(isList(activate(V2)))] 591.15/297.19 591.15/297.19 [U52(tt())] = [5] 591.15/297.19 > [4] 591.15/297.19 = [tt()] 591.15/297.19 591.15/297.19 [U61(tt())] = [4] 591.15/297.19 >= [4] 591.15/297.19 = [tt()] 591.15/297.19 591.15/297.19 [U71(tt(), P)] = [1] P + [4] 591.15/297.19 > [1] P + [3] 591.15/297.19 = [U72(isPal(activate(P)))] 591.15/297.19 591.15/297.19 [U72(tt())] = [7] 591.15/297.19 > [4] 591.15/297.19 = [tt()] 591.15/297.19 591.15/297.19 [isPal(V)] = [1] V + [0] 591.15/297.19 >= [1] V + [0] 591.15/297.19 = [U81(isNePal(activate(V)))] 591.15/297.19 591.15/297.19 [isPal(n__nil())] = [4] 591.15/297.19 >= [4] 591.15/297.19 = [tt()] 591.15/297.19 591.15/297.19 [U81(tt())] = [4] 591.15/297.19 >= [4] 591.15/297.19 = [tt()] 591.15/297.19 591.15/297.19 [isQid(n__a())] = [7] 591.15/297.19 > [4] 591.15/297.19 = [tt()] 591.15/297.19 591.15/297.19 [isQid(n__e())] = [7] 591.15/297.19 > [4] 591.15/297.19 = [tt()] 591.15/297.19 591.15/297.19 [isQid(n__i())] = [7] 591.15/297.19 > [4] 591.15/297.19 = [tt()] 591.15/297.19 591.15/297.19 [isQid(n__o())] = [7] 591.15/297.19 > [4] 591.15/297.19 = [tt()] 591.15/297.19 591.15/297.19 [isQid(n__u())] = [7] 591.15/297.19 > [4] 591.15/297.19 = [tt()] 591.15/297.19 591.15/297.19 [isNePal(V)] = [1] V + [0] 591.15/297.19 >= [1] V + [0] 591.15/297.19 = [U61(isQid(activate(V)))] 591.15/297.19 591.15/297.19 [isNePal(n____(I, __(P, I)))] = [1] P + [2] I + [0] 591.15/297.19 >= [1] P + [1] I + [0] 591.15/297.19 = [U71(isQid(activate(I)), activate(P))] 591.15/297.19 591.15/297.19 [a()] = [7] 591.15/297.19 >= [7] 591.15/297.19 = [n__a()] 591.15/297.19 591.15/297.19 [e()] = [7] 591.15/297.19 >= [7] 591.15/297.19 = [n__e()] 591.15/297.19 591.15/297.19 [i()] = [7] 591.15/297.19 >= [7] 591.15/297.19 = [n__i()] 591.15/297.19 591.15/297.19 [o()] = [7] 591.15/297.19 >= [7] 591.15/297.19 = [n__o()] 591.15/297.19 591.15/297.19 [u()] = [7] 591.15/297.19 >= [7] 591.15/297.19 = [n__u()] 591.15/297.19 591.15/297.19 591.15/297.19 Further, it can be verified that all rules not oriented are covered by the weightgap condition. 591.15/297.19 591.15/297.19 We are left with following problem, upon which TcT provides the 591.15/297.19 certificate YES(O(1),O(n^1)). 591.15/297.19 591.15/297.19 Strict Trs: 591.15/297.19 { __(__(X, Y), Z) -> __(X, __(Y, Z)) 591.15/297.19 , U11(tt()) -> tt() 591.15/297.19 , U22(tt()) -> tt() 591.15/297.19 , activate(X) -> X 591.15/297.19 , activate(n__nil()) -> nil() 591.15/297.19 , activate(n____(X1, X2)) -> __(X1, X2) 591.15/297.19 , activate(n__a()) -> a() 591.15/297.19 , activate(n__e()) -> e() 591.15/297.19 , activate(n__i()) -> i() 591.15/297.19 , activate(n__o()) -> o() 591.15/297.19 , activate(n__u()) -> u() 591.15/297.19 , U31(tt()) -> tt() 591.15/297.19 , U81(tt()) -> tt() } 591.15/297.19 Weak Trs: 591.15/297.19 { __(X1, X2) -> n____(X1, X2) 591.15/297.19 , __(X, nil()) -> X 591.15/297.19 , __(nil(), X) -> X 591.15/297.19 , nil() -> n__nil() 591.15/297.19 , U21(tt(), V2) -> U22(isList(activate(V2))) 591.15/297.19 , isList(V) -> U11(isNeList(activate(V))) 591.15/297.19 , isList(n__nil()) -> tt() 591.15/297.19 , isList(n____(V1, V2)) -> U21(isList(activate(V1)), activate(V2)) 591.15/297.19 , U41(tt(), V2) -> U42(isNeList(activate(V2))) 591.15/297.19 , U42(tt()) -> tt() 591.15/297.19 , isNeList(V) -> U31(isQid(activate(V))) 591.15/297.19 , isNeList(n____(V1, V2)) -> 591.15/297.19 U41(isList(activate(V1)), activate(V2)) 591.15/297.19 , isNeList(n____(V1, V2)) -> 591.15/297.19 U51(isNeList(activate(V1)), activate(V2)) 591.15/297.19 , U51(tt(), V2) -> U52(isList(activate(V2))) 591.15/297.19 , U52(tt()) -> tt() 591.15/297.19 , U61(tt()) -> tt() 591.15/297.19 , U71(tt(), P) -> U72(isPal(activate(P))) 591.15/297.19 , U72(tt()) -> tt() 591.15/297.19 , isPal(V) -> U81(isNePal(activate(V))) 591.15/297.19 , isPal(n__nil()) -> tt() 591.15/297.19 , isQid(n__a()) -> tt() 591.15/297.19 , isQid(n__e()) -> tt() 591.15/297.19 , isQid(n__i()) -> tt() 591.15/297.19 , isQid(n__o()) -> tt() 591.15/297.19 , isQid(n__u()) -> tt() 591.15/297.19 , isNePal(V) -> U61(isQid(activate(V))) 591.15/297.19 , isNePal(n____(I, __(P, I))) -> 591.15/297.19 U71(isQid(activate(I)), activate(P)) 591.15/297.19 , a() -> n__a() 591.15/297.19 , e() -> n__e() 591.15/297.19 , i() -> n__i() 591.15/297.19 , o() -> n__o() 591.15/297.19 , u() -> n__u() } 591.15/297.19 Obligation: 591.15/297.19 runtime complexity 591.15/297.19 Answer: 591.15/297.19 YES(O(1),O(n^1)) 591.15/297.19 591.15/297.19 The weightgap principle applies (using the following nonconstant 591.15/297.19 growth matrix-interpretation) 591.15/297.19 591.15/297.19 The following argument positions are usable: 591.15/297.19 Uargs(__) = {2}, Uargs(U11) = {1}, Uargs(U21) = {1, 2}, 591.15/297.19 Uargs(U22) = {1}, Uargs(isList) = {1}, Uargs(activate) = {1}, 591.15/297.19 Uargs(U31) = {1}, Uargs(U41) = {1, 2}, Uargs(U42) = {1}, 591.15/297.19 Uargs(isNeList) = {1}, Uargs(U51) = {1, 2}, Uargs(U52) = {1}, 591.15/297.19 Uargs(U61) = {1}, Uargs(U71) = {1, 2}, Uargs(U72) = {1}, 591.15/297.19 Uargs(isPal) = {1}, Uargs(U81) = {1}, Uargs(n____) = {2}, 591.15/297.19 Uargs(isQid) = {1}, Uargs(isNePal) = {1} 591.15/297.19 591.15/297.19 TcT has computed the following matrix interpretation satisfying 591.15/297.19 not(EDA) and not(IDA(1)). 591.15/297.19 591.15/297.19 [__](x1, x2) = [1] x1 + [1] x2 + [6] 591.15/297.19 591.15/297.19 [nil] = [7] 591.15/297.19 591.15/297.19 [U11](x1) = [1] x1 + [0] 591.15/297.19 591.15/297.19 [tt] = [0] 591.15/297.19 591.15/297.19 [U21](x1, x2) = [1] x1 + [1] x2 + [4] 591.15/297.19 591.15/297.19 [U22](x1) = [1] x1 + [1] 591.15/297.19 591.15/297.19 [isList](x1) = [1] x1 + [3] 591.15/297.19 591.15/297.19 [activate](x1) = [1] x1 + [0] 591.15/297.19 591.15/297.19 [U31](x1) = [1] x1 + [0] 591.15/297.19 591.15/297.19 [U41](x1, x2) = [1] x1 + [1] x2 + [4] 591.15/297.19 591.15/297.19 [U42](x1) = [1] x1 + [0] 591.15/297.19 591.15/297.19 [isNeList](x1) = [1] x1 + [3] 591.15/297.19 591.15/297.19 [U51](x1, x2) = [1] x1 + [1] x2 + [4] 591.15/297.19 591.15/297.19 [U52](x1) = [1] x1 + [0] 591.15/297.19 591.15/297.19 [U61](x1) = [1] x1 + [0] 591.15/297.19 591.15/297.19 [U71](x1, x2) = [1] x1 + [1] x2 + [4] 591.15/297.19 591.15/297.19 [U72](x1) = [1] x1 + [0] 591.15/297.19 591.15/297.19 [isPal](x1) = [1] x1 + [4] 591.15/297.19 591.15/297.19 [U81](x1) = [1] x1 + [0] 591.15/297.19 591.15/297.19 [n__nil] = [0] 591.15/297.19 591.15/297.19 [n____](x1, x2) = [1] x1 + [1] x2 + [5] 591.15/297.19 591.15/297.19 [isQid](x1) = [1] x1 + [3] 591.15/297.19 591.15/297.19 [isNePal](x1) = [1] x1 + [4] 591.15/297.19 591.15/297.19 [n__a] = [0] 591.15/297.19 591.15/297.19 [n__e] = [0] 591.15/297.19 591.15/297.19 [n__i] = [1] 591.15/297.19 591.15/297.19 [n__o] = [1] 591.15/297.19 591.15/297.19 [n__u] = [0] 591.15/297.19 591.15/297.19 [a] = [7] 591.15/297.19 591.15/297.19 [e] = [7] 591.15/297.19 591.15/297.19 [i] = [7] 591.15/297.19 591.15/297.19 [o] = [7] 591.15/297.19 591.15/297.19 [u] = [7] 591.15/297.19 591.15/297.19 The order satisfies the following ordering constraints: 591.15/297.19 591.15/297.19 [__(X1, X2)] = [1] X1 + [1] X2 + [6] 591.15/297.19 > [1] X1 + [1] X2 + [5] 591.15/297.19 = [n____(X1, X2)] 591.15/297.19 591.15/297.19 [__(X, nil())] = [1] X + [13] 591.15/297.19 > [1] X + [0] 591.15/297.19 = [X] 591.15/297.19 591.15/297.19 [__(__(X, Y), Z)] = [1] X + [1] Y + [1] Z + [12] 591.15/297.19 >= [1] X + [1] Y + [1] Z + [12] 591.15/297.19 = [__(X, __(Y, Z))] 591.15/297.19 591.15/297.19 [__(nil(), X)] = [1] X + [13] 591.15/297.19 > [1] X + [0] 591.15/297.19 = [X] 591.15/297.19 591.15/297.19 [nil()] = [7] 591.15/297.19 > [0] 591.15/297.19 = [n__nil()] 591.15/297.19 591.15/297.19 [U11(tt())] = [0] 591.15/297.19 >= [0] 591.15/297.19 = [tt()] 591.15/297.19 591.15/297.19 [U21(tt(), V2)] = [1] V2 + [4] 591.15/297.19 >= [1] V2 + [4] 591.15/297.19 = [U22(isList(activate(V2)))] 591.15/297.19 591.15/297.19 [U22(tt())] = [1] 591.15/297.19 > [0] 591.15/297.19 = [tt()] 591.15/297.19 591.15/297.19 [isList(V)] = [1] V + [3] 591.15/297.19 >= [1] V + [3] 591.15/297.19 = [U11(isNeList(activate(V)))] 591.15/297.19 591.15/297.19 [isList(n__nil())] = [3] 591.15/297.19 > [0] 591.15/297.19 = [tt()] 591.15/297.19 591.15/297.19 [isList(n____(V1, V2))] = [1] V2 + [1] V1 + [8] 591.15/297.19 > [1] V2 + [1] V1 + [7] 591.15/297.19 = [U21(isList(activate(V1)), activate(V2))] 591.15/297.19 591.15/297.19 [activate(X)] = [1] X + [0] 591.15/297.19 >= [1] X + [0] 591.15/297.19 = [X] 591.15/297.19 591.15/297.19 [activate(n__nil())] = [0] 591.15/297.19 ? [7] 591.15/297.19 = [nil()] 591.15/297.19 591.15/297.19 [activate(n____(X1, X2))] = [1] X1 + [1] X2 + [5] 591.15/297.19 ? [1] X1 + [1] X2 + [6] 591.15/297.19 = [__(X1, X2)] 591.15/297.19 591.15/297.19 [activate(n__a())] = [0] 591.15/297.19 ? [7] 591.15/297.19 = [a()] 591.15/297.19 591.15/297.19 [activate(n__e())] = [0] 591.15/297.19 ? [7] 591.15/297.19 = [e()] 591.15/297.19 591.15/297.19 [activate(n__i())] = [1] 591.15/297.19 ? [7] 591.15/297.19 = [i()] 591.15/297.19 591.15/297.19 [activate(n__o())] = [1] 591.15/297.19 ? [7] 591.15/297.19 = [o()] 591.15/297.19 591.15/297.19 [activate(n__u())] = [0] 591.15/297.19 ? [7] 591.15/297.19 = [u()] 591.15/297.19 591.15/297.19 [U31(tt())] = [0] 591.15/297.19 >= [0] 591.15/297.19 = [tt()] 591.15/297.19 591.15/297.19 [U41(tt(), V2)] = [1] V2 + [4] 591.15/297.19 > [1] V2 + [3] 591.15/297.19 = [U42(isNeList(activate(V2)))] 591.15/297.19 591.15/297.19 [U42(tt())] = [0] 591.15/297.19 >= [0] 591.15/297.19 = [tt()] 591.15/297.19 591.15/297.19 [isNeList(V)] = [1] V + [3] 591.15/297.19 >= [1] V + [3] 591.15/297.19 = [U31(isQid(activate(V)))] 591.15/297.19 591.15/297.19 [isNeList(n____(V1, V2))] = [1] V2 + [1] V1 + [8] 591.15/297.19 > [1] V2 + [1] V1 + [7] 591.15/297.19 = [U41(isList(activate(V1)), activate(V2))] 591.15/297.19 591.15/297.19 [isNeList(n____(V1, V2))] = [1] V2 + [1] V1 + [8] 591.15/297.19 > [1] V2 + [1] V1 + [7] 591.15/297.19 = [U51(isNeList(activate(V1)), activate(V2))] 591.15/297.19 591.15/297.19 [U51(tt(), V2)] = [1] V2 + [4] 591.15/297.19 > [1] V2 + [3] 591.15/297.19 = [U52(isList(activate(V2)))] 591.15/297.19 591.15/297.19 [U52(tt())] = [0] 591.15/297.19 >= [0] 591.15/297.19 = [tt()] 591.15/297.19 591.15/297.19 [U61(tt())] = [0] 591.15/297.19 >= [0] 591.15/297.19 = [tt()] 591.15/297.19 591.15/297.19 [U71(tt(), P)] = [1] P + [4] 591.15/297.19 >= [1] P + [4] 591.15/297.19 = [U72(isPal(activate(P)))] 591.15/297.19 591.15/297.19 [U72(tt())] = [0] 591.15/297.19 >= [0] 591.15/297.19 = [tt()] 591.15/297.19 591.15/297.19 [isPal(V)] = [1] V + [4] 591.15/297.19 >= [1] V + [4] 591.15/297.19 = [U81(isNePal(activate(V)))] 591.15/297.19 591.15/297.19 [isPal(n__nil())] = [4] 591.15/297.19 > [0] 591.15/297.19 = [tt()] 591.15/297.19 591.15/297.19 [U81(tt())] = [0] 591.15/297.19 >= [0] 591.15/297.19 = [tt()] 591.15/297.19 591.15/297.19 [isQid(n__a())] = [3] 591.15/297.19 > [0] 591.15/297.19 = [tt()] 591.15/297.19 591.15/297.19 [isQid(n__e())] = [3] 591.15/297.19 > [0] 591.15/297.19 = [tt()] 591.15/297.19 591.15/297.19 [isQid(n__i())] = [4] 591.15/297.19 > [0] 591.15/297.19 = [tt()] 591.15/297.19 591.15/297.19 [isQid(n__o())] = [4] 591.15/297.19 > [0] 591.15/297.19 = [tt()] 591.15/297.19 591.15/297.19 [isQid(n__u())] = [3] 591.15/297.19 > [0] 591.15/297.19 = [tt()] 591.15/297.19 591.15/297.19 [isNePal(V)] = [1] V + [4] 591.15/297.19 > [1] V + [3] 591.15/297.19 = [U61(isQid(activate(V)))] 591.15/297.19 591.15/297.19 [isNePal(n____(I, __(P, I)))] = [1] P + [2] I + [15] 591.15/297.19 > [1] P + [1] I + [7] 591.15/297.19 = [U71(isQid(activate(I)), activate(P))] 591.15/297.19 591.15/297.19 [a()] = [7] 591.15/297.19 > [0] 591.15/297.19 = [n__a()] 591.15/297.19 591.15/297.19 [e()] = [7] 591.15/297.19 > [0] 591.15/297.19 = [n__e()] 591.15/297.19 591.15/297.19 [i()] = [7] 591.15/297.19 > [1] 591.15/297.19 = [n__i()] 591.15/297.19 591.15/297.19 [o()] = [7] 591.15/297.19 > [1] 591.15/297.19 = [n__o()] 591.15/297.19 591.15/297.19 [u()] = [7] 591.15/297.19 > [0] 591.15/297.19 = [n__u()] 591.15/297.19 591.15/297.19 591.15/297.19 Further, it can be verified that all rules not oriented are covered by the weightgap condition. 591.15/297.19 591.15/297.19 We are left with following problem, upon which TcT provides the 591.15/297.19 certificate YES(O(1),O(n^1)). 591.15/297.19 591.15/297.19 Strict Trs: 591.15/297.19 { __(__(X, Y), Z) -> __(X, __(Y, Z)) 591.15/297.19 , U11(tt()) -> tt() 591.15/297.19 , activate(X) -> X 591.15/297.19 , activate(n__nil()) -> nil() 591.15/297.19 , activate(n____(X1, X2)) -> __(X1, X2) 591.15/297.19 , activate(n__a()) -> a() 591.15/297.19 , activate(n__e()) -> e() 591.15/297.19 , activate(n__i()) -> i() 591.15/297.19 , activate(n__o()) -> o() 591.15/297.19 , activate(n__u()) -> u() 591.15/297.19 , U31(tt()) -> tt() 591.15/297.19 , U81(tt()) -> tt() } 591.15/297.19 Weak Trs: 591.15/297.19 { __(X1, X2) -> n____(X1, X2) 591.15/297.19 , __(X, nil()) -> X 591.15/297.19 , __(nil(), X) -> X 591.15/297.19 , nil() -> n__nil() 591.15/297.19 , U21(tt(), V2) -> U22(isList(activate(V2))) 591.15/297.19 , U22(tt()) -> tt() 591.15/297.19 , isList(V) -> U11(isNeList(activate(V))) 591.15/297.19 , isList(n__nil()) -> tt() 591.15/297.19 , isList(n____(V1, V2)) -> U21(isList(activate(V1)), activate(V2)) 591.15/297.19 , U41(tt(), V2) -> U42(isNeList(activate(V2))) 591.15/297.19 , U42(tt()) -> tt() 591.15/297.19 , isNeList(V) -> U31(isQid(activate(V))) 591.15/297.19 , isNeList(n____(V1, V2)) -> 591.15/297.19 U41(isList(activate(V1)), activate(V2)) 591.15/297.19 , isNeList(n____(V1, V2)) -> 591.15/297.19 U51(isNeList(activate(V1)), activate(V2)) 591.15/297.19 , U51(tt(), V2) -> U52(isList(activate(V2))) 591.15/297.19 , U52(tt()) -> tt() 591.15/297.19 , U61(tt()) -> tt() 591.15/297.19 , U71(tt(), P) -> U72(isPal(activate(P))) 591.15/297.19 , U72(tt()) -> tt() 591.15/297.19 , isPal(V) -> U81(isNePal(activate(V))) 591.15/297.19 , isPal(n__nil()) -> tt() 591.15/297.19 , isQid(n__a()) -> tt() 591.15/297.19 , isQid(n__e()) -> tt() 591.15/297.19 , isQid(n__i()) -> tt() 591.15/297.19 , isQid(n__o()) -> tt() 591.15/297.19 , isQid(n__u()) -> tt() 591.15/297.19 , isNePal(V) -> U61(isQid(activate(V))) 591.15/297.19 , isNePal(n____(I, __(P, I))) -> 591.15/297.19 U71(isQid(activate(I)), activate(P)) 591.15/297.19 , a() -> n__a() 591.15/297.19 , e() -> n__e() 591.15/297.19 , i() -> n__i() 591.15/297.19 , o() -> n__o() 591.15/297.19 , u() -> n__u() } 591.15/297.19 Obligation: 591.15/297.19 runtime complexity 591.15/297.19 Answer: 591.15/297.19 YES(O(1),O(n^1)) 591.15/297.19 591.15/297.19 The weightgap principle applies (using the following nonconstant 591.15/297.19 growth matrix-interpretation) 591.15/297.19 591.15/297.19 The following argument positions are usable: 591.15/297.19 Uargs(__) = {2}, Uargs(U11) = {1}, Uargs(U21) = {1, 2}, 591.15/297.19 Uargs(U22) = {1}, Uargs(isList) = {1}, Uargs(activate) = {1}, 591.15/297.19 Uargs(U31) = {1}, Uargs(U41) = {1, 2}, Uargs(U42) = {1}, 591.15/297.19 Uargs(isNeList) = {1}, Uargs(U51) = {1, 2}, Uargs(U52) = {1}, 591.15/297.19 Uargs(U61) = {1}, Uargs(U71) = {1, 2}, Uargs(U72) = {1}, 591.15/297.19 Uargs(isPal) = {1}, Uargs(U81) = {1}, Uargs(n____) = {2}, 591.15/297.19 Uargs(isQid) = {1}, Uargs(isNePal) = {1} 591.15/297.19 591.15/297.19 TcT has computed the following matrix interpretation satisfying 591.15/297.19 not(EDA) and not(IDA(1)). 591.15/297.19 591.15/297.19 [__](x1, x2) = [1] x1 + [1] x2 + [6] 591.15/297.19 591.15/297.19 [nil] = [7] 591.15/297.19 591.15/297.19 [U11](x1) = [1] x1 + [0] 591.15/297.19 591.15/297.19 [tt] = [1] 591.15/297.19 591.15/297.19 [U21](x1, x2) = [1] x1 + [1] x2 + [0] 591.15/297.19 591.15/297.19 [U22](x1) = [1] x1 + [1] 591.15/297.19 591.15/297.19 [isList](x1) = [1] x1 + [0] 591.15/297.19 591.15/297.19 [activate](x1) = [1] x1 + [0] 591.15/297.19 591.15/297.19 [U31](x1) = [1] x1 + [0] 591.15/297.19 591.15/297.19 [U41](x1, x2) = [1] x1 + [1] x2 + [0] 591.15/297.19 591.15/297.19 [U42](x1) = [1] x1 + [1] 591.15/297.19 591.15/297.19 [isNeList](x1) = [1] x1 + [0] 591.15/297.19 591.15/297.19 [U51](x1, x2) = [1] x1 + [1] x2 + [0] 591.15/297.19 591.15/297.19 [U52](x1) = [1] x1 + [1] 591.15/297.19 591.15/297.19 [U61](x1) = [1] x1 + [0] 591.15/297.19 591.15/297.19 [U71](x1, x2) = [1] x1 + [1] x2 + [6] 591.15/297.19 591.15/297.19 [U72](x1) = [1] x1 + [0] 591.15/297.19 591.15/297.19 [isPal](x1) = [1] x1 + [7] 591.15/297.19 591.15/297.19 [U81](x1) = [1] x1 + [7] 591.15/297.19 591.15/297.19 [n__nil] = [1] 591.15/297.19 591.15/297.19 [n____](x1, x2) = [1] x1 + [1] x2 + [0] 591.15/297.19 591.15/297.19 [isQid](x1) = [1] x1 + [0] 591.15/297.19 591.15/297.19 [isNePal](x1) = [1] x1 + [0] 591.15/297.19 591.15/297.19 [n__a] = [1] 591.15/297.19 591.15/297.19 [n__e] = [1] 591.15/297.19 591.15/297.19 [n__i] = [1] 591.15/297.19 591.15/297.19 [n__o] = [1] 591.15/297.19 591.15/297.19 [n__u] = [1] 591.15/297.19 591.15/297.19 [a] = [7] 591.15/297.19 591.15/297.19 [e] = [7] 591.15/297.19 591.15/297.19 [i] = [7] 591.15/297.19 591.15/297.19 [o] = [7] 591.15/297.19 591.15/297.19 [u] = [7] 591.15/297.19 591.15/297.19 The order satisfies the following ordering constraints: 591.15/297.19 591.15/297.19 [__(X1, X2)] = [1] X1 + [1] X2 + [6] 591.15/297.19 > [1] X1 + [1] X2 + [0] 591.15/297.19 = [n____(X1, X2)] 591.15/297.19 591.15/297.19 [__(X, nil())] = [1] X + [13] 591.15/297.19 > [1] X + [0] 591.15/297.19 = [X] 591.15/297.19 591.15/297.19 [__(__(X, Y), Z)] = [1] X + [1] Y + [1] Z + [12] 591.15/297.19 >= [1] X + [1] Y + [1] Z + [12] 591.15/297.19 = [__(X, __(Y, Z))] 591.15/297.19 591.15/297.19 [__(nil(), X)] = [1] X + [13] 591.15/297.19 > [1] X + [0] 591.15/297.19 = [X] 591.15/297.19 591.15/297.19 [nil()] = [7] 591.15/297.19 > [1] 591.15/297.19 = [n__nil()] 591.15/297.19 591.15/297.19 [U11(tt())] = [1] 591.15/297.19 >= [1] 591.15/297.19 = [tt()] 591.15/297.19 591.15/297.19 [U21(tt(), V2)] = [1] V2 + [1] 591.15/297.19 >= [1] V2 + [1] 591.15/297.19 = [U22(isList(activate(V2)))] 591.15/297.19 591.15/297.19 [U22(tt())] = [2] 591.15/297.19 > [1] 591.15/297.19 = [tt()] 591.15/297.19 591.15/297.19 [isList(V)] = [1] V + [0] 591.15/297.19 >= [1] V + [0] 591.15/297.19 = [U11(isNeList(activate(V)))] 591.15/297.19 591.15/297.19 [isList(n__nil())] = [1] 591.15/297.19 >= [1] 591.15/297.19 = [tt()] 591.15/297.19 591.15/297.19 [isList(n____(V1, V2))] = [1] V2 + [1] V1 + [0] 591.15/297.19 >= [1] V2 + [1] V1 + [0] 591.15/297.19 = [U21(isList(activate(V1)), activate(V2))] 591.15/297.19 591.15/297.19 [activate(X)] = [1] X + [0] 591.15/297.19 >= [1] X + [0] 591.15/297.19 = [X] 591.15/297.19 591.15/297.19 [activate(n__nil())] = [1] 591.15/297.19 ? [7] 591.15/297.19 = [nil()] 591.15/297.19 591.15/297.19 [activate(n____(X1, X2))] = [1] X1 + [1] X2 + [0] 591.15/297.19 ? [1] X1 + [1] X2 + [6] 591.15/297.19 = [__(X1, X2)] 591.15/297.19 591.15/297.19 [activate(n__a())] = [1] 591.15/297.19 ? [7] 591.15/297.19 = [a()] 591.15/297.19 591.15/297.19 [activate(n__e())] = [1] 591.15/297.19 ? [7] 591.15/297.19 = [e()] 591.15/297.19 591.15/297.19 [activate(n__i())] = [1] 591.15/297.19 ? [7] 591.15/297.19 = [i()] 591.15/297.19 591.15/297.19 [activate(n__o())] = [1] 591.15/297.19 ? [7] 591.15/297.19 = [o()] 591.15/297.19 591.15/297.19 [activate(n__u())] = [1] 591.15/297.19 ? [7] 591.15/297.19 = [u()] 591.15/297.19 591.15/297.19 [U31(tt())] = [1] 591.15/297.19 >= [1] 591.15/297.19 = [tt()] 591.15/297.19 591.15/297.19 [U41(tt(), V2)] = [1] V2 + [1] 591.15/297.19 >= [1] V2 + [1] 591.15/297.19 = [U42(isNeList(activate(V2)))] 591.15/297.19 591.15/297.19 [U42(tt())] = [2] 591.15/297.19 > [1] 591.15/297.19 = [tt()] 591.15/297.19 591.15/297.19 [isNeList(V)] = [1] V + [0] 591.15/297.19 >= [1] V + [0] 591.15/297.19 = [U31(isQid(activate(V)))] 591.15/297.19 591.15/297.19 [isNeList(n____(V1, V2))] = [1] V2 + [1] V1 + [0] 591.15/297.19 >= [1] V2 + [1] V1 + [0] 591.15/297.19 = [U41(isList(activate(V1)), activate(V2))] 591.15/297.19 591.15/297.19 [isNeList(n____(V1, V2))] = [1] V2 + [1] V1 + [0] 591.15/297.19 >= [1] V2 + [1] V1 + [0] 591.15/297.19 = [U51(isNeList(activate(V1)), activate(V2))] 591.15/297.19 591.15/297.19 [U51(tt(), V2)] = [1] V2 + [1] 591.15/297.19 >= [1] V2 + [1] 591.15/297.19 = [U52(isList(activate(V2)))] 591.15/297.19 591.15/297.19 [U52(tt())] = [2] 591.15/297.19 > [1] 591.15/297.19 = [tt()] 591.15/297.19 591.15/297.19 [U61(tt())] = [1] 591.15/297.19 >= [1] 591.15/297.19 = [tt()] 591.15/297.19 591.15/297.19 [U71(tt(), P)] = [1] P + [7] 591.15/297.19 >= [1] P + [7] 591.15/297.19 = [U72(isPal(activate(P)))] 591.15/297.19 591.15/297.19 [U72(tt())] = [1] 591.15/297.19 >= [1] 591.15/297.19 = [tt()] 591.15/297.19 591.15/297.19 [isPal(V)] = [1] V + [7] 591.15/297.19 >= [1] V + [7] 591.15/297.19 = [U81(isNePal(activate(V)))] 591.15/297.19 591.15/297.19 [isPal(n__nil())] = [8] 591.15/297.19 > [1] 591.15/297.19 = [tt()] 591.15/297.19 591.15/297.19 [U81(tt())] = [8] 591.15/297.19 > [1] 591.15/297.19 = [tt()] 591.15/297.19 591.15/297.19 [isQid(n__a())] = [1] 591.15/297.19 >= [1] 591.15/297.19 = [tt()] 591.15/297.19 591.15/297.19 [isQid(n__e())] = [1] 591.15/297.19 >= [1] 591.15/297.19 = [tt()] 591.15/297.19 591.15/297.19 [isQid(n__i())] = [1] 591.15/297.19 >= [1] 591.15/297.19 = [tt()] 591.15/297.19 591.15/297.19 [isQid(n__o())] = [1] 591.15/297.19 >= [1] 591.15/297.19 = [tt()] 591.15/297.19 591.15/297.19 [isQid(n__u())] = [1] 591.15/297.19 >= [1] 591.15/297.19 = [tt()] 591.15/297.19 591.15/297.19 [isNePal(V)] = [1] V + [0] 591.15/297.19 >= [1] V + [0] 591.15/297.19 = [U61(isQid(activate(V)))] 591.15/297.19 591.15/297.19 [isNePal(n____(I, __(P, I)))] = [1] P + [2] I + [6] 591.15/297.19 >= [1] P + [1] I + [6] 591.15/297.19 = [U71(isQid(activate(I)), activate(P))] 591.15/297.19 591.15/297.19 [a()] = [7] 591.15/297.19 > [1] 591.15/297.19 = [n__a()] 591.15/297.19 591.15/297.19 [e()] = [7] 591.15/297.19 > [1] 591.36/297.20 = [n__e()] 591.36/297.20 591.36/297.20 [i()] = [7] 591.36/297.20 > [1] 591.36/297.20 = [n__i()] 591.36/297.20 591.36/297.20 [o()] = [7] 591.36/297.20 > [1] 591.36/297.20 = [n__o()] 591.36/297.20 591.36/297.20 [u()] = [7] 591.36/297.20 > [1] 591.36/297.20 = [n__u()] 591.36/297.20 591.36/297.20 591.36/297.20 Further, it can be verified that all rules not oriented are covered by the weightgap condition. 591.36/297.20 591.36/297.20 We are left with following problem, upon which TcT provides the 591.36/297.20 certificate YES(O(1),O(n^1)). 591.36/297.20 591.36/297.20 Strict Trs: 591.36/297.20 { __(__(X, Y), Z) -> __(X, __(Y, Z)) 591.36/297.20 , U11(tt()) -> tt() 591.36/297.20 , activate(X) -> X 591.36/297.20 , activate(n__nil()) -> nil() 591.36/297.20 , activate(n____(X1, X2)) -> __(X1, X2) 591.36/297.20 , activate(n__a()) -> a() 591.36/297.20 , activate(n__e()) -> e() 591.36/297.20 , activate(n__i()) -> i() 591.36/297.20 , activate(n__o()) -> o() 591.36/297.20 , activate(n__u()) -> u() 591.36/297.20 , U31(tt()) -> tt() } 591.36/297.20 Weak Trs: 591.36/297.20 { __(X1, X2) -> n____(X1, X2) 591.36/297.20 , __(X, nil()) -> X 591.36/297.20 , __(nil(), X) -> X 591.36/297.20 , nil() -> n__nil() 591.36/297.20 , U21(tt(), V2) -> U22(isList(activate(V2))) 591.36/297.20 , U22(tt()) -> tt() 591.36/297.20 , isList(V) -> U11(isNeList(activate(V))) 591.36/297.20 , isList(n__nil()) -> tt() 591.36/297.20 , isList(n____(V1, V2)) -> U21(isList(activate(V1)), activate(V2)) 591.36/297.20 , U41(tt(), V2) -> U42(isNeList(activate(V2))) 591.36/297.20 , U42(tt()) -> tt() 591.36/297.20 , isNeList(V) -> U31(isQid(activate(V))) 591.36/297.20 , isNeList(n____(V1, V2)) -> 591.36/297.20 U41(isList(activate(V1)), activate(V2)) 591.36/297.20 , isNeList(n____(V1, V2)) -> 591.36/297.20 U51(isNeList(activate(V1)), activate(V2)) 591.36/297.20 , U51(tt(), V2) -> U52(isList(activate(V2))) 591.36/297.20 , U52(tt()) -> tt() 591.36/297.20 , U61(tt()) -> tt() 591.36/297.20 , U71(tt(), P) -> U72(isPal(activate(P))) 591.36/297.20 , U72(tt()) -> tt() 591.36/297.20 , isPal(V) -> U81(isNePal(activate(V))) 591.36/297.20 , isPal(n__nil()) -> tt() 591.36/297.20 , U81(tt()) -> tt() 591.36/297.20 , isQid(n__a()) -> tt() 591.36/297.20 , isQid(n__e()) -> tt() 591.36/297.20 , isQid(n__i()) -> tt() 591.36/297.20 , isQid(n__o()) -> tt() 591.36/297.20 , isQid(n__u()) -> tt() 591.36/297.20 , isNePal(V) -> U61(isQid(activate(V))) 591.36/297.20 , isNePal(n____(I, __(P, I))) -> 591.36/297.20 U71(isQid(activate(I)), activate(P)) 591.36/297.20 , a() -> n__a() 591.36/297.20 , e() -> n__e() 591.36/297.20 , i() -> n__i() 591.36/297.20 , o() -> n__o() 591.36/297.20 , u() -> n__u() } 591.36/297.20 Obligation: 591.36/297.20 runtime complexity 591.36/297.20 Answer: 591.36/297.20 YES(O(1),O(n^1)) 591.36/297.20 591.36/297.20 The weightgap principle applies (using the following nonconstant 591.36/297.20 growth matrix-interpretation) 591.36/297.20 591.36/297.20 The following argument positions are usable: 591.36/297.20 Uargs(__) = {2}, Uargs(U11) = {1}, Uargs(U21) = {1, 2}, 591.36/297.20 Uargs(U22) = {1}, Uargs(isList) = {1}, Uargs(activate) = {1}, 591.36/297.20 Uargs(U31) = {1}, Uargs(U41) = {1, 2}, Uargs(U42) = {1}, 591.36/297.20 Uargs(isNeList) = {1}, Uargs(U51) = {1, 2}, Uargs(U52) = {1}, 591.36/297.20 Uargs(U61) = {1}, Uargs(U71) = {1, 2}, Uargs(U72) = {1}, 591.36/297.20 Uargs(isPal) = {1}, Uargs(U81) = {1}, Uargs(n____) = {2}, 591.36/297.20 Uargs(isQid) = {1}, Uargs(isNePal) = {1} 591.36/297.20 591.36/297.20 TcT has computed the following matrix interpretation satisfying 591.36/297.20 not(EDA) and not(IDA(1)). 591.36/297.20 591.36/297.20 [__](x1, x2) = [1] x1 + [1] x2 + [4] 591.36/297.20 591.36/297.20 [nil] = [7] 591.36/297.20 591.36/297.20 [U11](x1) = [1] x1 + [4] 591.36/297.20 591.36/297.20 [tt] = [4] 591.36/297.20 591.36/297.20 [U21](x1, x2) = [1] x1 + [1] x2 + [4] 591.36/297.20 591.36/297.20 [U22](x1) = [1] x1 + [3] 591.36/297.20 591.36/297.20 [isList](x1) = [1] x1 + [4] 591.36/297.20 591.36/297.20 [activate](x1) = [1] x1 + [0] 591.36/297.20 591.36/297.20 [U31](x1) = [1] x1 + [0] 591.36/297.20 591.36/297.20 [U41](x1, x2) = [1] x1 + [1] x2 + [0] 591.36/297.20 591.36/297.20 [U42](x1) = [1] x1 + [3] 591.36/297.20 591.36/297.20 [isNeList](x1) = [1] x1 + [0] 591.36/297.20 591.36/297.20 [U51](x1, x2) = [1] x1 + [1] x2 + [0] 591.36/297.20 591.36/297.20 [U52](x1) = [1] x1 + [0] 591.36/297.20 591.36/297.20 [U61](x1) = [1] x1 + [0] 591.36/297.20 591.36/297.20 [U71](x1, x2) = [1] x1 + [1] x2 + [0] 591.36/297.20 591.36/297.20 [U72](x1) = [1] x1 + [3] 591.36/297.20 591.36/297.20 [isPal](x1) = [1] x1 + [0] 591.36/297.20 591.36/297.20 [U81](x1) = [1] x1 + [0] 591.36/297.20 591.36/297.20 [n__nil] = [4] 591.36/297.20 591.36/297.20 [n____](x1, x2) = [1] x1 + [1] x2 + [4] 591.36/297.20 591.36/297.20 [isQid](x1) = [1] x1 + [0] 591.36/297.20 591.36/297.20 [isNePal](x1) = [1] x1 + [0] 591.36/297.20 591.36/297.20 [n__a] = [7] 591.36/297.20 591.36/297.20 [n__e] = [7] 591.36/297.20 591.36/297.20 [n__i] = [7] 591.36/297.20 591.36/297.20 [n__o] = [7] 591.36/297.20 591.36/297.20 [n__u] = [7] 591.36/297.20 591.36/297.20 [a] = [7] 591.36/297.20 591.36/297.20 [e] = [7] 591.36/297.20 591.36/297.20 [i] = [7] 591.36/297.20 591.36/297.20 [o] = [7] 591.36/297.20 591.36/297.20 [u] = [7] 591.36/297.20 591.36/297.20 The order satisfies the following ordering constraints: 591.36/297.20 591.36/297.20 [__(X1, X2)] = [1] X1 + [1] X2 + [4] 591.36/297.20 >= [1] X1 + [1] X2 + [4] 591.36/297.20 = [n____(X1, X2)] 591.36/297.20 591.36/297.20 [__(X, nil())] = [1] X + [11] 591.36/297.20 > [1] X + [0] 591.36/297.20 = [X] 591.36/297.20 591.36/297.20 [__(__(X, Y), Z)] = [1] X + [1] Y + [1] Z + [8] 591.36/297.20 >= [1] X + [1] Y + [1] Z + [8] 591.36/297.20 = [__(X, __(Y, Z))] 591.36/297.20 591.36/297.20 [__(nil(), X)] = [1] X + [11] 591.36/297.20 > [1] X + [0] 591.36/297.20 = [X] 591.36/297.20 591.36/297.20 [nil()] = [7] 591.36/297.20 > [4] 591.36/297.20 = [n__nil()] 591.36/297.20 591.36/297.20 [U11(tt())] = [8] 591.36/297.20 > [4] 591.36/297.20 = [tt()] 591.36/297.20 591.36/297.20 [U21(tt(), V2)] = [1] V2 + [8] 591.36/297.20 > [1] V2 + [7] 591.36/297.20 = [U22(isList(activate(V2)))] 591.36/297.20 591.36/297.20 [U22(tt())] = [7] 591.36/297.20 > [4] 591.36/297.20 = [tt()] 591.36/297.20 591.36/297.20 [isList(V)] = [1] V + [4] 591.36/297.20 >= [1] V + [4] 591.36/297.20 = [U11(isNeList(activate(V)))] 591.36/297.20 591.36/297.20 [isList(n__nil())] = [8] 591.36/297.20 > [4] 591.36/297.20 = [tt()] 591.36/297.20 591.36/297.20 [isList(n____(V1, V2))] = [1] V2 + [1] V1 + [8] 591.36/297.20 >= [1] V2 + [1] V1 + [8] 591.36/297.20 = [U21(isList(activate(V1)), activate(V2))] 591.36/297.20 591.36/297.20 [activate(X)] = [1] X + [0] 591.36/297.20 >= [1] X + [0] 591.36/297.20 = [X] 591.36/297.20 591.36/297.20 [activate(n__nil())] = [4] 591.36/297.20 ? [7] 591.36/297.20 = [nil()] 591.36/297.20 591.36/297.20 [activate(n____(X1, X2))] = [1] X1 + [1] X2 + [4] 591.36/297.20 >= [1] X1 + [1] X2 + [4] 591.36/297.20 = [__(X1, X2)] 591.36/297.20 591.36/297.20 [activate(n__a())] = [7] 591.36/297.20 >= [7] 591.36/297.20 = [a()] 591.36/297.20 591.36/297.20 [activate(n__e())] = [7] 591.36/297.20 >= [7] 591.36/297.20 = [e()] 591.36/297.20 591.36/297.20 [activate(n__i())] = [7] 591.36/297.20 >= [7] 591.36/297.20 = [i()] 591.36/297.20 591.36/297.20 [activate(n__o())] = [7] 591.36/297.20 >= [7] 591.36/297.20 = [o()] 591.36/297.20 591.36/297.20 [activate(n__u())] = [7] 591.36/297.20 >= [7] 591.36/297.20 = [u()] 591.36/297.20 591.36/297.20 [U31(tt())] = [4] 591.36/297.20 >= [4] 591.36/297.20 = [tt()] 591.36/297.20 591.36/297.20 [U41(tt(), V2)] = [1] V2 + [4] 591.36/297.20 > [1] V2 + [3] 591.36/297.20 = [U42(isNeList(activate(V2)))] 591.36/297.20 591.36/297.20 [U42(tt())] = [7] 591.36/297.20 > [4] 591.36/297.20 = [tt()] 591.36/297.20 591.36/297.20 [isNeList(V)] = [1] V + [0] 591.36/297.20 >= [1] V + [0] 591.36/297.20 = [U31(isQid(activate(V)))] 591.36/297.20 591.36/297.20 [isNeList(n____(V1, V2))] = [1] V2 + [1] V1 + [4] 591.36/297.20 >= [1] V2 + [1] V1 + [4] 591.36/297.20 = [U41(isList(activate(V1)), activate(V2))] 591.36/297.20 591.36/297.20 [isNeList(n____(V1, V2))] = [1] V2 + [1] V1 + [4] 591.36/297.20 > [1] V2 + [1] V1 + [0] 591.36/297.20 = [U51(isNeList(activate(V1)), activate(V2))] 591.36/297.20 591.36/297.20 [U51(tt(), V2)] = [1] V2 + [4] 591.36/297.20 >= [1] V2 + [4] 591.36/297.20 = [U52(isList(activate(V2)))] 591.36/297.20 591.36/297.20 [U52(tt())] = [4] 591.36/297.20 >= [4] 591.36/297.20 = [tt()] 591.36/297.20 591.36/297.20 [U61(tt())] = [4] 591.36/297.20 >= [4] 591.36/297.20 = [tt()] 591.36/297.20 591.36/297.20 [U71(tt(), P)] = [1] P + [4] 591.36/297.20 > [1] P + [3] 591.36/297.20 = [U72(isPal(activate(P)))] 591.36/297.20 591.36/297.20 [U72(tt())] = [7] 591.36/297.20 > [4] 591.36/297.20 = [tt()] 591.36/297.20 591.36/297.20 [isPal(V)] = [1] V + [0] 591.36/297.20 >= [1] V + [0] 591.36/297.20 = [U81(isNePal(activate(V)))] 591.36/297.20 591.36/297.20 [isPal(n__nil())] = [4] 591.36/297.20 >= [4] 591.36/297.20 = [tt()] 591.36/297.20 591.36/297.20 [U81(tt())] = [4] 591.36/297.20 >= [4] 591.36/297.20 = [tt()] 591.36/297.20 591.36/297.20 [isQid(n__a())] = [7] 591.36/297.20 > [4] 591.36/297.20 = [tt()] 591.36/297.20 591.36/297.20 [isQid(n__e())] = [7] 591.36/297.20 > [4] 591.36/297.20 = [tt()] 591.36/297.20 591.36/297.20 [isQid(n__i())] = [7] 591.36/297.20 > [4] 591.36/297.20 = [tt()] 591.36/297.20 591.36/297.20 [isQid(n__o())] = [7] 591.36/297.20 > [4] 591.36/297.20 = [tt()] 591.36/297.20 591.36/297.20 [isQid(n__u())] = [7] 591.36/297.20 > [4] 591.36/297.20 = [tt()] 591.36/297.20 591.36/297.20 [isNePal(V)] = [1] V + [0] 591.36/297.20 >= [1] V + [0] 591.36/297.20 = [U61(isQid(activate(V)))] 591.36/297.20 591.36/297.20 [isNePal(n____(I, __(P, I)))] = [1] P + [2] I + [8] 591.36/297.20 > [1] P + [1] I + [0] 591.36/297.20 = [U71(isQid(activate(I)), activate(P))] 591.36/297.20 591.36/297.20 [a()] = [7] 591.36/297.20 >= [7] 591.36/297.20 = [n__a()] 591.36/297.20 591.36/297.20 [e()] = [7] 591.36/297.20 >= [7] 591.36/297.20 = [n__e()] 591.36/297.20 591.36/297.20 [i()] = [7] 591.36/297.20 >= [7] 591.36/297.20 = [n__i()] 591.36/297.20 591.36/297.20 [o()] = [7] 591.36/297.20 >= [7] 591.36/297.20 = [n__o()] 591.36/297.20 591.36/297.20 [u()] = [7] 591.36/297.20 >= [7] 591.36/297.20 = [n__u()] 591.36/297.20 591.36/297.20 591.36/297.20 Further, it can be verified that all rules not oriented are covered by the weightgap condition. 591.36/297.20 591.36/297.20 We are left with following problem, upon which TcT provides the 591.36/297.20 certificate YES(O(1),O(n^1)). 591.36/297.20 591.36/297.20 Strict Trs: 591.36/297.20 { __(__(X, Y), Z) -> __(X, __(Y, Z)) 591.36/297.20 , activate(X) -> X 591.36/297.20 , activate(n__nil()) -> nil() 591.36/297.20 , activate(n____(X1, X2)) -> __(X1, X2) 591.36/297.20 , activate(n__a()) -> a() 591.36/297.20 , activate(n__e()) -> e() 591.36/297.20 , activate(n__i()) -> i() 591.36/297.20 , activate(n__o()) -> o() 591.36/297.20 , activate(n__u()) -> u() 591.36/297.20 , U31(tt()) -> tt() } 591.36/297.20 Weak Trs: 591.36/297.20 { __(X1, X2) -> n____(X1, X2) 591.36/297.20 , __(X, nil()) -> X 591.36/297.20 , __(nil(), X) -> X 591.36/297.20 , nil() -> n__nil() 591.36/297.20 , U11(tt()) -> tt() 591.36/297.20 , U21(tt(), V2) -> U22(isList(activate(V2))) 591.36/297.20 , U22(tt()) -> tt() 591.36/297.20 , isList(V) -> U11(isNeList(activate(V))) 591.36/297.20 , isList(n__nil()) -> tt() 591.36/297.20 , isList(n____(V1, V2)) -> U21(isList(activate(V1)), activate(V2)) 591.36/297.20 , U41(tt(), V2) -> U42(isNeList(activate(V2))) 591.36/297.20 , U42(tt()) -> tt() 591.36/297.20 , isNeList(V) -> U31(isQid(activate(V))) 591.36/297.20 , isNeList(n____(V1, V2)) -> 591.36/297.20 U41(isList(activate(V1)), activate(V2)) 591.36/297.20 , isNeList(n____(V1, V2)) -> 591.36/297.20 U51(isNeList(activate(V1)), activate(V2)) 591.36/297.20 , U51(tt(), V2) -> U52(isList(activate(V2))) 591.36/297.20 , U52(tt()) -> tt() 591.36/297.20 , U61(tt()) -> tt() 591.36/297.20 , U71(tt(), P) -> U72(isPal(activate(P))) 591.36/297.20 , U72(tt()) -> tt() 591.36/297.20 , isPal(V) -> U81(isNePal(activate(V))) 591.36/297.20 , isPal(n__nil()) -> tt() 591.36/297.20 , U81(tt()) -> tt() 591.36/297.20 , isQid(n__a()) -> tt() 591.36/297.20 , isQid(n__e()) -> tt() 591.36/297.20 , isQid(n__i()) -> tt() 591.36/297.20 , isQid(n__o()) -> tt() 591.36/297.20 , isQid(n__u()) -> tt() 591.36/297.20 , isNePal(V) -> U61(isQid(activate(V))) 591.36/297.20 , isNePal(n____(I, __(P, I))) -> 591.36/297.20 U71(isQid(activate(I)), activate(P)) 591.36/297.20 , a() -> n__a() 591.36/297.20 , e() -> n__e() 591.36/297.20 , i() -> n__i() 591.36/297.20 , o() -> n__o() 591.36/297.20 , u() -> n__u() } 591.36/297.20 Obligation: 591.36/297.20 runtime complexity 591.36/297.20 Answer: 591.36/297.20 YES(O(1),O(n^1)) 591.36/297.20 591.36/297.20 The weightgap principle applies (using the following nonconstant 591.36/297.20 growth matrix-interpretation) 591.36/297.20 591.36/297.20 The following argument positions are usable: 591.36/297.20 Uargs(__) = {2}, Uargs(U11) = {1}, Uargs(U21) = {1, 2}, 591.36/297.20 Uargs(U22) = {1}, Uargs(isList) = {1}, Uargs(activate) = {1}, 591.36/297.20 Uargs(U31) = {1}, Uargs(U41) = {1, 2}, Uargs(U42) = {1}, 591.36/297.20 Uargs(isNeList) = {1}, Uargs(U51) = {1, 2}, Uargs(U52) = {1}, 591.36/297.20 Uargs(U61) = {1}, Uargs(U71) = {1, 2}, Uargs(U72) = {1}, 591.36/297.20 Uargs(isPal) = {1}, Uargs(U81) = {1}, Uargs(n____) = {2}, 591.36/297.20 Uargs(isQid) = {1}, Uargs(isNePal) = {1} 591.36/297.20 591.36/297.20 TcT has computed the following matrix interpretation satisfying 591.36/297.20 not(EDA) and not(IDA(1)). 591.36/297.20 591.36/297.20 [__](x1, x2) = [1] x1 + [1] x2 + [4] 591.36/297.20 591.36/297.20 [nil] = [7] 591.36/297.20 591.36/297.20 [U11](x1) = [1] x1 + [0] 591.36/297.20 591.36/297.20 [tt] = [4] 591.36/297.20 591.36/297.20 [U21](x1, x2) = [1] x1 + [1] x2 + [4] 591.36/297.20 591.36/297.20 [U22](x1) = [1] x1 + [1] 591.36/297.20 591.36/297.20 [isList](x1) = [1] x1 + [5] 591.36/297.20 591.36/297.20 [activate](x1) = [1] x1 + [0] 591.36/297.20 591.36/297.20 [U31](x1) = [1] x1 + [1] 591.36/297.20 591.36/297.20 [U41](x1, x2) = [1] x1 + [1] x2 + [2] 591.36/297.20 591.36/297.20 [U42](x1) = [1] x1 + [1] 591.36/297.20 591.36/297.20 [isNeList](x1) = [1] x1 + [5] 591.36/297.20 591.36/297.20 [U51](x1, x2) = [1] x1 + [1] x2 + [4] 591.36/297.20 591.36/297.20 [U52](x1) = [1] x1 + [1] 591.36/297.20 591.36/297.20 [U61](x1) = [1] x1 + [0] 591.36/297.20 591.36/297.20 [U71](x1, x2) = [1] x1 + [1] x2 + [4] 591.36/297.20 591.36/297.20 [U72](x1) = [1] x1 + [3] 591.36/297.20 591.36/297.20 [isPal](x1) = [1] x1 + [4] 591.36/297.20 591.36/297.20 [U81](x1) = [1] x1 + [0] 591.36/297.20 591.36/297.20 [n__nil] = [0] 591.36/297.20 591.36/297.20 [n____](x1, x2) = [1] x1 + [1] x2 + [4] 591.36/297.20 591.36/297.20 [isQid](x1) = [1] x1 + [4] 591.36/297.20 591.36/297.20 [isNePal](x1) = [1] x1 + [4] 591.36/297.20 591.36/297.20 [n__a] = [0] 591.36/297.20 591.36/297.20 [n__e] = [0] 591.36/297.20 591.36/297.20 [n__i] = [0] 591.36/297.20 591.36/297.20 [n__o] = [0] 591.36/297.20 591.36/297.20 [n__u] = [0] 591.36/297.20 591.36/297.20 [a] = [7] 591.36/297.20 591.36/297.20 [e] = [7] 591.36/297.20 591.36/297.20 [i] = [7] 591.36/297.20 591.36/297.20 [o] = [7] 591.36/297.20 591.36/297.20 [u] = [7] 591.36/297.20 591.36/297.20 The order satisfies the following ordering constraints: 591.36/297.20 591.36/297.20 [__(X1, X2)] = [1] X1 + [1] X2 + [4] 591.36/297.20 >= [1] X1 + [1] X2 + [4] 591.36/297.20 = [n____(X1, X2)] 591.36/297.20 591.36/297.20 [__(X, nil())] = [1] X + [11] 591.36/297.20 > [1] X + [0] 591.36/297.20 = [X] 591.36/297.20 591.36/297.20 [__(__(X, Y), Z)] = [1] X + [1] Y + [1] Z + [8] 591.36/297.20 >= [1] X + [1] Y + [1] Z + [8] 591.36/297.20 = [__(X, __(Y, Z))] 591.36/297.20 591.36/297.20 [__(nil(), X)] = [1] X + [11] 591.36/297.20 > [1] X + [0] 591.36/297.20 = [X] 591.36/297.20 591.36/297.20 [nil()] = [7] 591.36/297.20 > [0] 591.36/297.20 = [n__nil()] 591.36/297.20 591.36/297.20 [U11(tt())] = [4] 591.36/297.20 >= [4] 591.36/297.20 = [tt()] 591.36/297.20 591.36/297.20 [U21(tt(), V2)] = [1] V2 + [8] 591.36/297.20 > [1] V2 + [6] 591.36/297.20 = [U22(isList(activate(V2)))] 591.36/297.20 591.36/297.20 [U22(tt())] = [5] 591.36/297.20 > [4] 591.36/297.20 = [tt()] 591.36/297.20 591.36/297.20 [isList(V)] = [1] V + [5] 591.36/297.20 >= [1] V + [5] 591.36/297.20 = [U11(isNeList(activate(V)))] 591.36/297.20 591.36/297.20 [isList(n__nil())] = [5] 591.36/297.20 > [4] 591.36/297.20 = [tt()] 591.36/297.20 591.36/297.20 [isList(n____(V1, V2))] = [1] V2 + [1] V1 + [9] 591.36/297.20 >= [1] V2 + [1] V1 + [9] 591.36/297.20 = [U21(isList(activate(V1)), activate(V2))] 591.36/297.20 591.36/297.20 [activate(X)] = [1] X + [0] 591.36/297.20 >= [1] X + [0] 591.36/297.20 = [X] 591.36/297.20 591.36/297.20 [activate(n__nil())] = [0] 591.36/297.20 ? [7] 591.36/297.20 = [nil()] 591.36/297.20 591.36/297.20 [activate(n____(X1, X2))] = [1] X1 + [1] X2 + [4] 591.36/297.20 >= [1] X1 + [1] X2 + [4] 591.36/297.20 = [__(X1, X2)] 591.36/297.20 591.36/297.20 [activate(n__a())] = [0] 591.36/297.20 ? [7] 591.36/297.20 = [a()] 591.36/297.20 591.36/297.20 [activate(n__e())] = [0] 591.36/297.20 ? [7] 591.36/297.20 = [e()] 591.36/297.20 591.36/297.20 [activate(n__i())] = [0] 591.36/297.20 ? [7] 591.36/297.20 = [i()] 591.36/297.20 591.36/297.20 [activate(n__o())] = [0] 591.36/297.20 ? [7] 591.36/297.20 = [o()] 591.36/297.20 591.36/297.20 [activate(n__u())] = [0] 591.36/297.20 ? [7] 591.36/297.20 = [u()] 591.36/297.20 591.36/297.20 [U31(tt())] = [5] 591.36/297.20 > [4] 591.36/297.20 = [tt()] 591.36/297.20 591.36/297.20 [U41(tt(), V2)] = [1] V2 + [6] 591.36/297.20 >= [1] V2 + [6] 591.36/297.20 = [U42(isNeList(activate(V2)))] 591.36/297.20 591.36/297.20 [U42(tt())] = [5] 591.36/297.20 > [4] 591.36/297.20 = [tt()] 591.36/297.20 591.36/297.20 [isNeList(V)] = [1] V + [5] 591.36/297.20 >= [1] V + [5] 591.36/297.20 = [U31(isQid(activate(V)))] 591.36/297.20 591.36/297.20 [isNeList(n____(V1, V2))] = [1] V2 + [1] V1 + [9] 591.36/297.20 > [1] V2 + [1] V1 + [7] 591.36/297.20 = [U41(isList(activate(V1)), activate(V2))] 591.36/297.20 591.36/297.20 [isNeList(n____(V1, V2))] = [1] V2 + [1] V1 + [9] 591.36/297.20 >= [1] V2 + [1] V1 + [9] 591.36/297.20 = [U51(isNeList(activate(V1)), activate(V2))] 591.36/297.20 591.36/297.20 [U51(tt(), V2)] = [1] V2 + [8] 591.36/297.20 > [1] V2 + [6] 591.36/297.20 = [U52(isList(activate(V2)))] 591.36/297.20 591.36/297.20 [U52(tt())] = [5] 591.36/297.20 > [4] 591.36/297.20 = [tt()] 591.36/297.20 591.36/297.20 [U61(tt())] = [4] 591.36/297.20 >= [4] 591.36/297.20 = [tt()] 591.36/297.20 591.36/297.20 [U71(tt(), P)] = [1] P + [8] 591.36/297.20 > [1] P + [7] 591.36/297.20 = [U72(isPal(activate(P)))] 591.36/297.20 591.36/297.20 [U72(tt())] = [7] 591.36/297.20 > [4] 591.36/297.20 = [tt()] 591.36/297.20 591.36/297.20 [isPal(V)] = [1] V + [4] 591.36/297.20 >= [1] V + [4] 591.36/297.20 = [U81(isNePal(activate(V)))] 591.36/297.20 591.36/297.20 [isPal(n__nil())] = [4] 591.36/297.20 >= [4] 591.36/297.20 = [tt()] 591.36/297.20 591.36/297.20 [U81(tt())] = [4] 591.36/297.20 >= [4] 591.36/297.20 = [tt()] 591.36/297.20 591.36/297.20 [isQid(n__a())] = [4] 591.36/297.20 >= [4] 591.36/297.20 = [tt()] 591.36/297.20 591.36/297.20 [isQid(n__e())] = [4] 591.36/297.20 >= [4] 591.36/297.20 = [tt()] 591.36/297.20 591.36/297.20 [isQid(n__i())] = [4] 591.36/297.20 >= [4] 591.36/297.20 = [tt()] 591.36/297.20 591.36/297.20 [isQid(n__o())] = [4] 591.36/297.20 >= [4] 591.36/297.20 = [tt()] 591.36/297.20 591.36/297.20 [isQid(n__u())] = [4] 591.36/297.20 >= [4] 591.36/297.20 = [tt()] 591.36/297.20 591.36/297.20 [isNePal(V)] = [1] V + [4] 591.36/297.20 >= [1] V + [4] 591.36/297.20 = [U61(isQid(activate(V)))] 591.36/297.20 591.36/297.20 [isNePal(n____(I, __(P, I)))] = [1] P + [2] I + [12] 591.36/297.20 > [1] P + [1] I + [8] 591.36/297.20 = [U71(isQid(activate(I)), activate(P))] 591.36/297.20 591.36/297.20 [a()] = [7] 591.36/297.20 > [0] 591.36/297.20 = [n__a()] 591.36/297.20 591.36/297.20 [e()] = [7] 591.36/297.20 > [0] 591.36/297.20 = [n__e()] 591.36/297.20 591.36/297.20 [i()] = [7] 591.36/297.20 > [0] 591.36/297.20 = [n__i()] 591.36/297.20 591.36/297.20 [o()] = [7] 591.36/297.20 > [0] 591.36/297.20 = [n__o()] 591.36/297.20 591.36/297.20 [u()] = [7] 591.36/297.20 > [0] 591.36/297.20 = [n__u()] 591.36/297.20 591.36/297.20 591.36/297.20 Further, it can be verified that all rules not oriented are covered by the weightgap condition. 591.36/297.20 591.36/297.20 We are left with following problem, upon which TcT provides the 591.36/297.20 certificate YES(O(1),O(n^1)). 591.36/297.20 591.36/297.20 Strict Trs: 591.36/297.20 { __(__(X, Y), Z) -> __(X, __(Y, Z)) 591.36/297.20 , activate(X) -> X 591.36/297.20 , activate(n__nil()) -> nil() 591.36/297.20 , activate(n____(X1, X2)) -> __(X1, X2) 591.36/297.20 , activate(n__a()) -> a() 591.36/297.20 , activate(n__e()) -> e() 591.36/297.20 , activate(n__i()) -> i() 591.36/297.20 , activate(n__o()) -> o() 591.36/297.20 , activate(n__u()) -> u() } 591.36/297.20 Weak Trs: 591.36/297.20 { __(X1, X2) -> n____(X1, X2) 591.36/297.20 , __(X, nil()) -> X 591.36/297.20 , __(nil(), X) -> X 591.36/297.20 , nil() -> n__nil() 591.36/297.20 , U11(tt()) -> tt() 591.36/297.20 , U21(tt(), V2) -> U22(isList(activate(V2))) 591.36/297.20 , U22(tt()) -> tt() 591.36/297.20 , isList(V) -> U11(isNeList(activate(V))) 591.36/297.20 , isList(n__nil()) -> tt() 591.36/297.20 , isList(n____(V1, V2)) -> U21(isList(activate(V1)), activate(V2)) 591.36/297.20 , U31(tt()) -> tt() 591.36/297.20 , U41(tt(), V2) -> U42(isNeList(activate(V2))) 591.36/297.20 , U42(tt()) -> tt() 591.36/297.20 , isNeList(V) -> U31(isQid(activate(V))) 591.36/297.20 , isNeList(n____(V1, V2)) -> 591.36/297.20 U41(isList(activate(V1)), activate(V2)) 591.36/297.20 , isNeList(n____(V1, V2)) -> 591.36/297.20 U51(isNeList(activate(V1)), activate(V2)) 591.36/297.20 , U51(tt(), V2) -> U52(isList(activate(V2))) 591.36/297.20 , U52(tt()) -> tt() 591.36/297.20 , U61(tt()) -> tt() 591.36/297.20 , U71(tt(), P) -> U72(isPal(activate(P))) 591.36/297.20 , U72(tt()) -> tt() 591.36/297.20 , isPal(V) -> U81(isNePal(activate(V))) 591.36/297.20 , isPal(n__nil()) -> tt() 591.36/297.20 , U81(tt()) -> tt() 591.36/297.20 , isQid(n__a()) -> tt() 591.36/297.20 , isQid(n__e()) -> tt() 591.36/297.20 , isQid(n__i()) -> tt() 591.36/297.20 , isQid(n__o()) -> tt() 591.36/297.20 , isQid(n__u()) -> tt() 591.36/297.20 , isNePal(V) -> U61(isQid(activate(V))) 591.36/297.20 , isNePal(n____(I, __(P, I))) -> 591.36/297.20 U71(isQid(activate(I)), activate(P)) 591.36/297.20 , a() -> n__a() 591.36/297.20 , e() -> n__e() 591.36/297.20 , i() -> n__i() 591.36/297.20 , o() -> n__o() 591.36/297.20 , u() -> n__u() } 591.36/297.20 Obligation: 591.36/297.20 runtime complexity 591.36/297.20 Answer: 591.36/297.20 YES(O(1),O(n^1)) 591.36/297.20 591.36/297.20 The weightgap principle applies (using the following nonconstant 591.36/297.20 growth matrix-interpretation) 591.36/297.20 591.36/297.20 The following argument positions are usable: 591.36/297.20 Uargs(__) = {2}, Uargs(U11) = {1}, Uargs(U21) = {1, 2}, 591.36/297.20 Uargs(U22) = {1}, Uargs(isList) = {1}, Uargs(activate) = {1}, 591.36/297.20 Uargs(U31) = {1}, Uargs(U41) = {1, 2}, Uargs(U42) = {1}, 591.36/297.20 Uargs(isNeList) = {1}, Uargs(U51) = {1, 2}, Uargs(U52) = {1}, 591.36/297.20 Uargs(U61) = {1}, Uargs(U71) = {1, 2}, Uargs(U72) = {1}, 591.36/297.20 Uargs(isPal) = {1}, Uargs(U81) = {1}, Uargs(n____) = {2}, 591.36/297.20 Uargs(isQid) = {1}, Uargs(isNePal) = {1} 591.36/297.20 591.36/297.20 TcT has computed the following matrix interpretation satisfying 591.36/297.20 not(EDA) and not(IDA(1)). 591.36/297.20 591.36/297.20 [__](x1, x2) = [1] x1 + [1] x2 + [4] 591.36/297.20 591.36/297.20 [nil] = [7] 591.36/297.20 591.36/297.20 [U11](x1) = [1] x1 + [0] 591.36/297.20 591.36/297.20 [tt] = [7] 591.36/297.20 591.36/297.20 [U21](x1, x2) = [1] x1 + [1] x2 + [1] 591.36/297.20 591.36/297.20 [U22](x1) = [1] x1 + [2] 591.36/297.20 591.36/297.20 [isList](x1) = [1] x1 + [5] 591.36/297.20 591.36/297.20 [activate](x1) = [1] x1 + [1] 591.36/297.20 591.36/297.20 [U31](x1) = [1] x1 + [0] 591.36/297.20 591.36/297.20 [U41](x1, x2) = [1] x1 + [1] x2 + [0] 591.36/297.20 591.36/297.20 [U42](x1) = [1] x1 + [1] 591.36/297.20 591.36/297.20 [isNeList](x1) = [1] x1 + [4] 591.36/297.20 591.36/297.20 [U51](x1, x2) = [1] x1 + [1] x2 + [0] 591.36/297.20 591.36/297.20 [U52](x1) = [1] x1 + [1] 591.36/297.20 591.36/297.20 [U61](x1) = [1] x1 + [0] 591.36/297.20 591.36/297.20 [U71](x1, x2) = [1] x1 + [1] x2 + [0] 591.36/297.20 591.36/297.20 [U72](x1) = [1] x1 + [0] 591.36/297.20 591.36/297.20 [isPal](x1) = [1] x1 + [2] 591.36/297.20 591.36/297.20 [U81](x1) = [1] x1 + [0] 591.36/297.20 591.36/297.20 [n__nil] = [7] 591.36/297.20 591.36/297.20 [n____](x1, x2) = [1] x1 + [1] x2 + [4] 591.36/297.20 591.36/297.20 [isQid](x1) = [1] x1 + [0] 591.36/297.20 591.36/297.20 [isNePal](x1) = [1] x1 + [1] 591.36/297.20 591.36/297.20 [n__a] = [7] 591.36/297.20 591.36/297.20 [n__e] = [7] 591.36/297.20 591.36/297.20 [n__i] = [7] 591.36/297.20 591.36/297.20 [n__o] = [7] 591.36/297.20 591.36/297.20 [n__u] = [7] 591.36/297.20 591.36/297.20 [a] = [7] 591.36/297.20 591.36/297.20 [e] = [7] 591.36/297.20 591.36/297.20 [i] = [7] 591.36/297.20 591.36/297.20 [o] = [7] 591.36/297.20 591.36/297.20 [u] = [7] 591.36/297.20 591.36/297.20 The order satisfies the following ordering constraints: 591.36/297.20 591.36/297.20 [__(X1, X2)] = [1] X1 + [1] X2 + [4] 591.36/297.20 >= [1] X1 + [1] X2 + [4] 591.36/297.20 = [n____(X1, X2)] 591.36/297.20 591.36/297.20 [__(X, nil())] = [1] X + [11] 591.36/297.20 > [1] X + [0] 591.36/297.20 = [X] 591.36/297.20 591.36/297.20 [__(__(X, Y), Z)] = [1] X + [1] Y + [1] Z + [8] 591.36/297.20 >= [1] X + [1] Y + [1] Z + [8] 591.36/297.20 = [__(X, __(Y, Z))] 591.36/297.20 591.36/297.20 [__(nil(), X)] = [1] X + [11] 591.36/297.20 > [1] X + [0] 591.36/297.20 = [X] 591.36/297.20 591.36/297.20 [nil()] = [7] 591.36/297.20 >= [7] 591.36/297.20 = [n__nil()] 591.36/297.20 591.36/297.20 [U11(tt())] = [7] 591.36/297.20 >= [7] 591.36/297.20 = [tt()] 591.36/297.20 591.36/297.20 [U21(tt(), V2)] = [1] V2 + [8] 591.36/297.20 >= [1] V2 + [8] 591.36/297.20 = [U22(isList(activate(V2)))] 591.36/297.20 591.36/297.20 [U22(tt())] = [9] 591.36/297.20 > [7] 591.36/297.20 = [tt()] 591.36/297.20 591.36/297.21 [isList(V)] = [1] V + [5] 591.36/297.21 >= [1] V + [5] 591.36/297.21 = [U11(isNeList(activate(V)))] 591.36/297.21 591.36/297.21 [isList(n__nil())] = [12] 591.36/297.21 > [7] 591.36/297.21 = [tt()] 591.36/297.21 591.36/297.21 [isList(n____(V1, V2))] = [1] V2 + [1] V1 + [9] 591.36/297.21 > [1] V2 + [1] V1 + [8] 591.36/297.21 = [U21(isList(activate(V1)), activate(V2))] 591.36/297.21 591.36/297.21 [activate(X)] = [1] X + [1] 591.36/297.21 > [1] X + [0] 591.36/297.21 = [X] 591.36/297.21 591.36/297.21 [activate(n__nil())] = [8] 591.36/297.21 > [7] 591.36/297.21 = [nil()] 591.36/297.21 591.36/297.21 [activate(n____(X1, X2))] = [1] X1 + [1] X2 + [5] 591.36/297.21 > [1] X1 + [1] X2 + [4] 591.36/297.21 = [__(X1, X2)] 591.36/297.21 591.36/297.21 [activate(n__a())] = [8] 591.36/297.21 > [7] 591.36/297.21 = [a()] 591.36/297.21 591.36/297.21 [activate(n__e())] = [8] 591.36/297.21 > [7] 591.36/297.21 = [e()] 591.36/297.21 591.36/297.21 [activate(n__i())] = [8] 591.36/297.21 > [7] 591.36/297.21 = [i()] 591.36/297.21 591.36/297.21 [activate(n__o())] = [8] 591.36/297.21 > [7] 591.36/297.21 = [o()] 591.36/297.21 591.36/297.21 [activate(n__u())] = [8] 591.36/297.21 > [7] 591.36/297.21 = [u()] 591.36/297.21 591.36/297.21 [U31(tt())] = [7] 591.36/297.21 >= [7] 591.36/297.21 = [tt()] 591.36/297.21 591.36/297.21 [U41(tt(), V2)] = [1] V2 + [7] 591.36/297.21 > [1] V2 + [6] 591.36/297.21 = [U42(isNeList(activate(V2)))] 591.36/297.21 591.36/297.21 [U42(tt())] = [8] 591.36/297.21 > [7] 591.36/297.21 = [tt()] 591.36/297.21 591.36/297.21 [isNeList(V)] = [1] V + [4] 591.36/297.21 > [1] V + [1] 591.36/297.21 = [U31(isQid(activate(V)))] 591.36/297.21 591.36/297.21 [isNeList(n____(V1, V2))] = [1] V2 + [1] V1 + [8] 591.36/297.21 > [1] V2 + [1] V1 + [7] 591.36/297.21 = [U41(isList(activate(V1)), activate(V2))] 591.36/297.21 591.36/297.21 [isNeList(n____(V1, V2))] = [1] V2 + [1] V1 + [8] 591.36/297.21 > [1] V2 + [1] V1 + [6] 591.36/297.21 = [U51(isNeList(activate(V1)), activate(V2))] 591.36/297.21 591.36/297.21 [U51(tt(), V2)] = [1] V2 + [7] 591.36/297.21 >= [1] V2 + [7] 591.36/297.21 = [U52(isList(activate(V2)))] 591.36/297.21 591.36/297.21 [U52(tt())] = [8] 591.36/297.21 > [7] 591.36/297.21 = [tt()] 591.36/297.21 591.36/297.21 [U61(tt())] = [7] 591.36/297.21 >= [7] 591.36/297.21 = [tt()] 591.36/297.21 591.36/297.21 [U71(tt(), P)] = [1] P + [7] 591.36/297.21 > [1] P + [3] 591.36/297.21 = [U72(isPal(activate(P)))] 591.36/297.21 591.36/297.21 [U72(tt())] = [7] 591.36/297.21 >= [7] 591.36/297.21 = [tt()] 591.36/297.21 591.36/297.21 [isPal(V)] = [1] V + [2] 591.36/297.21 >= [1] V + [2] 591.36/297.21 = [U81(isNePal(activate(V)))] 591.36/297.21 591.36/297.21 [isPal(n__nil())] = [9] 591.36/297.21 > [7] 591.36/297.21 = [tt()] 591.36/297.21 591.36/297.21 [U81(tt())] = [7] 591.36/297.21 >= [7] 591.36/297.21 = [tt()] 591.36/297.21 591.36/297.21 [isQid(n__a())] = [7] 591.36/297.21 >= [7] 591.36/297.21 = [tt()] 591.36/297.21 591.36/297.21 [isQid(n__e())] = [7] 591.36/297.21 >= [7] 591.36/297.21 = [tt()] 591.36/297.21 591.36/297.21 [isQid(n__i())] = [7] 591.36/297.21 >= [7] 591.36/297.21 = [tt()] 591.36/297.21 591.36/297.21 [isQid(n__o())] = [7] 591.36/297.21 >= [7] 591.36/297.21 = [tt()] 591.36/297.21 591.36/297.21 [isQid(n__u())] = [7] 591.36/297.21 >= [7] 591.36/297.21 = [tt()] 591.36/297.21 591.36/297.21 [isNePal(V)] = [1] V + [1] 591.36/297.21 >= [1] V + [1] 591.36/297.21 = [U61(isQid(activate(V)))] 591.36/297.21 591.36/297.21 [isNePal(n____(I, __(P, I)))] = [1] P + [2] I + [9] 591.36/297.21 > [1] P + [1] I + [2] 591.36/297.21 = [U71(isQid(activate(I)), activate(P))] 591.36/297.21 591.36/297.21 [a()] = [7] 591.36/297.21 >= [7] 591.36/297.21 = [n__a()] 591.36/297.21 591.36/297.21 [e()] = [7] 591.36/297.21 >= [7] 591.36/297.21 = [n__e()] 591.36/297.21 591.36/297.21 [i()] = [7] 591.36/297.21 >= [7] 591.36/297.21 = [n__i()] 591.36/297.21 591.36/297.21 [o()] = [7] 591.36/297.21 >= [7] 591.36/297.21 = [n__o()] 591.36/297.21 591.36/297.21 [u()] = [7] 591.36/297.21 >= [7] 591.36/297.21 = [n__u()] 591.36/297.21 591.36/297.21 591.36/297.21 Further, it can be verified that all rules not oriented are covered by the weightgap condition. 591.36/297.21 591.36/297.21 We are left with following problem, upon which TcT provides the 591.36/297.21 certificate YES(O(1),O(n^1)). 591.36/297.21 591.36/297.21 Strict Trs: { __(__(X, Y), Z) -> __(X, __(Y, Z)) } 591.36/297.21 Weak Trs: 591.36/297.21 { __(X1, X2) -> n____(X1, X2) 591.36/297.21 , __(X, nil()) -> X 591.36/297.21 , __(nil(), X) -> X 591.36/297.21 , nil() -> n__nil() 591.36/297.21 , U11(tt()) -> tt() 591.36/297.21 , U21(tt(), V2) -> U22(isList(activate(V2))) 591.36/297.21 , U22(tt()) -> tt() 591.36/297.21 , isList(V) -> U11(isNeList(activate(V))) 591.36/297.21 , isList(n__nil()) -> tt() 591.36/297.21 , isList(n____(V1, V2)) -> U21(isList(activate(V1)), activate(V2)) 591.36/297.21 , activate(X) -> X 591.36/297.21 , activate(n__nil()) -> nil() 591.36/297.21 , activate(n____(X1, X2)) -> __(X1, X2) 591.36/297.21 , activate(n__a()) -> a() 591.36/297.21 , activate(n__e()) -> e() 591.36/297.21 , activate(n__i()) -> i() 591.36/297.21 , activate(n__o()) -> o() 591.36/297.21 , activate(n__u()) -> u() 591.36/297.21 , U31(tt()) -> tt() 591.36/297.21 , U41(tt(), V2) -> U42(isNeList(activate(V2))) 591.36/297.21 , U42(tt()) -> tt() 591.36/297.21 , isNeList(V) -> U31(isQid(activate(V))) 591.36/297.21 , isNeList(n____(V1, V2)) -> 591.36/297.21 U41(isList(activate(V1)), activate(V2)) 591.36/297.21 , isNeList(n____(V1, V2)) -> 591.36/297.21 U51(isNeList(activate(V1)), activate(V2)) 591.36/297.21 , U51(tt(), V2) -> U52(isList(activate(V2))) 591.36/297.21 , U52(tt()) -> tt() 591.36/297.21 , U61(tt()) -> tt() 591.36/297.21 , U71(tt(), P) -> U72(isPal(activate(P))) 591.36/297.21 , U72(tt()) -> tt() 591.36/297.21 , isPal(V) -> U81(isNePal(activate(V))) 591.36/297.21 , isPal(n__nil()) -> tt() 591.36/297.21 , U81(tt()) -> tt() 591.36/297.21 , isQid(n__a()) -> tt() 591.36/297.21 , isQid(n__e()) -> tt() 591.36/297.21 , isQid(n__i()) -> tt() 591.36/297.21 , isQid(n__o()) -> tt() 591.36/297.21 , isQid(n__u()) -> tt() 591.36/297.21 , isNePal(V) -> U61(isQid(activate(V))) 591.36/297.21 , isNePal(n____(I, __(P, I))) -> 591.36/297.21 U71(isQid(activate(I)), activate(P)) 591.36/297.21 , a() -> n__a() 591.36/297.21 , e() -> n__e() 591.36/297.21 , i() -> n__i() 591.36/297.21 , o() -> n__o() 591.36/297.21 , u() -> n__u() } 591.36/297.21 Obligation: 591.36/297.21 runtime complexity 591.36/297.21 Answer: 591.36/297.21 YES(O(1),O(n^1)) 591.36/297.21 591.36/297.21 We use the processor 'matrix interpretation of dimension 2' to 591.36/297.21 orient following rules strictly. 591.36/297.21 591.36/297.21 Trs: { __(__(X, Y), Z) -> __(X, __(Y, Z)) } 591.36/297.21 591.36/297.21 The induced complexity on above rules (modulo remaining rules) is 591.36/297.21 YES(?,O(n^1)) . These rules are moved into the corresponding weak 591.36/297.21 component(s). 591.36/297.21 591.36/297.21 Sub-proof: 591.36/297.21 ---------- 591.36/297.21 The following argument positions are usable: 591.36/297.21 Uargs(__) = {2}, Uargs(U11) = {1}, Uargs(U21) = {1, 2}, 591.36/297.21 Uargs(U22) = {1}, Uargs(isList) = {1}, Uargs(activate) = {1}, 591.36/297.21 Uargs(U31) = {1}, Uargs(U41) = {1, 2}, Uargs(U42) = {1}, 591.36/297.21 Uargs(isNeList) = {1}, Uargs(U51) = {1, 2}, Uargs(U52) = {1}, 591.36/297.21 Uargs(U61) = {1}, Uargs(U71) = {1, 2}, Uargs(U72) = {1}, 591.36/297.21 Uargs(isPal) = {1}, Uargs(U81) = {1}, Uargs(n____) = {2}, 591.36/297.21 Uargs(isQid) = {1}, Uargs(isNePal) = {1} 591.36/297.21 591.36/297.21 TcT has computed the following constructor-based matrix 591.36/297.21 interpretation satisfying not(EDA) and not(IDA(1)). 591.36/297.21 591.36/297.21 [__](x1, x2) = [1 2] x1 + [1 0] x2 + [2] 591.36/297.21 [0 1] [0 1] [4] 591.36/297.21 591.36/297.21 [nil] = [2] 591.36/297.21 [0] 591.36/297.21 591.36/297.21 [U11](x1) = [1 0] x1 + [0] 591.36/297.21 [0 0] [0] 591.36/297.21 591.36/297.21 [tt] = [2] 591.36/297.21 [0] 591.36/297.21 591.36/297.21 [U21](x1, x2) = [1 0] x1 + [4 0] x2 + [4] 591.36/297.21 [0 0] [0 0] [0] 591.36/297.21 591.36/297.21 [U22](x1) = [1 0] x1 + [0] 591.36/297.21 [0 0] [0] 591.36/297.21 591.36/297.21 [isList](x1) = [4 0] x1 + [0] 591.36/297.21 [0 0] [0] 591.36/297.21 591.36/297.21 [activate](x1) = [1 0] x1 + [0] 591.36/297.21 [4 1] [0] 591.36/297.21 591.36/297.21 [U31](x1) = [1 0] x1 + [0] 591.36/297.21 [0 0] [0] 591.36/297.21 591.36/297.21 [U41](x1, x2) = [1 0] x1 + [4 0] x2 + [0] 591.36/297.21 [0 0] [0 0] [0] 591.36/297.21 591.36/297.21 [U42](x1) = [1 0] x1 + [2] 591.36/297.21 [0 0] [0] 591.36/297.21 591.36/297.21 [isNeList](x1) = [4 0] x1 + [0] 591.36/297.21 [0 4] [0] 591.36/297.21 591.36/297.21 [U51](x1, x2) = [1 0] x1 + [4 0] x2 + [0] 591.36/297.21 [0 0] [0 0] [0] 591.36/297.21 591.36/297.21 [U52](x1) = [1 0] x1 + [0] 591.36/297.21 [0 0] [0] 591.36/297.21 591.36/297.21 [U61](x1) = [1 0] x1 + [0] 591.36/297.21 [0 0] [0] 591.36/297.21 591.36/297.21 [U71](x1, x2) = [2 0] x1 + [1 0] x2 + [0] 591.36/297.21 [0 0] [0 0] [4] 591.36/297.21 591.36/297.21 [U72](x1) = [1 0] x1 + [0] 591.36/297.21 [0 0] [0] 591.36/297.21 591.36/297.21 [isPal](x1) = [1 0] x1 + [4] 591.36/297.21 [4 4] [4] 591.36/297.21 591.36/297.21 [U81](x1) = [1 0] x1 + [0] 591.36/297.21 [4 0] [0] 591.36/297.21 591.36/297.21 [n__nil] = [2] 591.36/297.21 [0] 591.36/297.21 591.36/297.21 [n____](x1, x2) = [1 2] x1 + [1 0] x2 + [2] 591.36/297.21 [0 0] [0 1] [0] 591.36/297.21 591.36/297.21 [isQid](x1) = [1 0] x1 + [0] 591.36/297.21 [0 0] [4] 591.36/297.21 591.36/297.21 [isNePal](x1) = [1 0] x1 + [0] 591.36/297.21 [0 0] [4] 591.36/297.21 591.36/297.21 [n__a] = [2] 591.36/297.21 [0] 591.36/297.21 591.36/297.21 [n__e] = [2] 591.36/297.21 [0] 591.36/297.21 591.36/297.21 [n__i] = [2] 591.36/297.21 [0] 591.36/297.21 591.36/297.21 [n__o] = [2] 591.36/297.21 [0] 591.36/297.21 591.36/297.21 [n__u] = [2] 591.36/297.21 [0] 591.36/297.21 591.36/297.21 [a] = [2] 591.36/297.21 [7] 591.36/297.21 591.36/297.21 [e] = [2] 591.36/297.21 [7] 591.36/297.21 591.36/297.21 [i] = [2] 591.36/297.21 [7] 591.36/297.21 591.36/297.21 [o] = [2] 591.36/297.21 [7] 591.36/297.21 591.36/297.21 [u] = [2] 591.36/297.21 [7] 591.36/297.21 591.36/297.21 The order satisfies the following ordering constraints: 591.36/297.21 591.36/297.21 [__(X1, X2)] = [1 2] X1 + [1 0] X2 + [2] 591.36/297.21 [0 1] [0 1] [4] 591.36/297.21 >= [1 2] X1 + [1 0] X2 + [2] 591.36/297.21 [0 0] [0 1] [0] 591.36/297.21 = [n____(X1, X2)] 591.36/297.21 591.36/297.21 [__(X, nil())] = [1 2] X + [4] 591.36/297.21 [0 1] [4] 591.36/297.21 > [1 0] X + [0] 591.36/297.21 [0 1] [0] 591.36/297.21 = [X] 591.36/297.21 591.36/297.21 [__(__(X, Y), Z)] = [1 4] X + [1 2] Y + [1 0] Z + [12] 591.36/297.21 [0 1] [0 1] [0 1] [8] 591.36/297.21 > [1 2] X + [1 2] Y + [1 0] Z + [4] 591.36/297.21 [0 1] [0 1] [0 1] [8] 591.36/297.21 = [__(X, __(Y, Z))] 591.36/297.21 591.36/297.21 [__(nil(), X)] = [1 0] X + [4] 591.36/297.21 [0 1] [4] 591.36/297.21 > [1 0] X + [0] 591.36/297.21 [0 1] [0] 591.36/297.21 = [X] 591.36/297.21 591.36/297.21 [nil()] = [2] 591.36/297.21 [0] 591.36/297.21 >= [2] 591.36/297.21 [0] 591.36/297.21 = [n__nil()] 591.36/297.21 591.36/297.21 [U11(tt())] = [2] 591.36/297.21 [0] 591.36/297.21 >= [2] 591.36/297.21 [0] 591.36/297.21 = [tt()] 591.36/297.21 591.36/297.21 [U21(tt(), V2)] = [4 0] V2 + [6] 591.36/297.21 [0 0] [0] 591.36/297.21 > [4 0] V2 + [0] 591.36/297.21 [0 0] [0] 591.36/297.21 = [U22(isList(activate(V2)))] 591.36/297.21 591.36/297.21 [U22(tt())] = [2] 591.36/297.21 [0] 591.36/297.21 >= [2] 591.36/297.21 [0] 591.36/297.21 = [tt()] 591.36/297.21 591.36/297.21 [isList(V)] = [4 0] V + [0] 591.36/297.21 [0 0] [0] 591.36/297.21 >= [4 0] V + [0] 591.36/297.21 [0 0] [0] 591.36/297.21 = [U11(isNeList(activate(V)))] 591.36/297.21 591.36/297.21 [isList(n__nil())] = [8] 591.36/297.21 [0] 591.36/297.21 > [2] 591.36/297.21 [0] 591.36/297.21 = [tt()] 591.36/297.21 591.36/297.21 [isList(n____(V1, V2))] = [4 0] V2 + [4 8] V1 + [8] 591.36/297.21 [0 0] [0 0] [0] 591.36/297.21 > [4 0] V2 + [4 0] V1 + [4] 591.36/297.21 [0 0] [0 0] [0] 591.36/297.21 = [U21(isList(activate(V1)), activate(V2))] 591.36/297.21 591.36/297.21 [activate(X)] = [1 0] X + [0] 591.36/297.21 [4 1] [0] 591.36/297.21 >= [1 0] X + [0] 591.36/297.21 [0 1] [0] 591.36/297.21 = [X] 591.36/297.21 591.36/297.21 [activate(n__nil())] = [2] 591.36/297.21 [8] 591.36/297.21 >= [2] 591.36/297.21 [0] 591.36/297.21 = [nil()] 591.36/297.21 591.36/297.21 [activate(n____(X1, X2))] = [1 2] X1 + [1 0] X2 + [2] 591.36/297.21 [4 8] [4 1] [8] 591.36/297.21 >= [1 2] X1 + [1 0] X2 + [2] 591.36/297.21 [0 1] [0 1] [4] 591.36/297.21 = [__(X1, X2)] 591.36/297.21 591.36/297.21 [activate(n__a())] = [2] 591.36/297.21 [8] 591.36/297.21 >= [2] 591.36/297.21 [7] 591.36/297.21 = [a()] 591.36/297.21 591.36/297.21 [activate(n__e())] = [2] 591.36/297.21 [8] 591.36/297.21 >= [2] 591.36/297.21 [7] 591.36/297.21 = [e()] 591.36/297.21 591.36/297.21 [activate(n__i())] = [2] 591.36/297.21 [8] 591.36/297.21 >= [2] 591.36/297.21 [7] 591.36/297.21 = [i()] 591.36/297.21 591.36/297.21 [activate(n__o())] = [2] 591.36/297.21 [8] 591.36/297.21 >= [2] 591.36/297.21 [7] 591.36/297.21 = [o()] 591.36/297.21 591.36/297.21 [activate(n__u())] = [2] 591.36/297.21 [8] 591.36/297.21 >= [2] 591.36/297.21 [7] 591.36/297.21 = [u()] 591.36/297.21 591.36/297.21 [U31(tt())] = [2] 591.36/297.21 [0] 591.36/297.21 >= [2] 591.36/297.21 [0] 591.36/297.21 = [tt()] 591.36/297.21 591.36/297.21 [U41(tt(), V2)] = [4 0] V2 + [2] 591.36/297.21 [0 0] [0] 591.36/297.21 >= [4 0] V2 + [2] 591.36/297.21 [0 0] [0] 591.36/297.21 = [U42(isNeList(activate(V2)))] 591.36/297.21 591.36/297.21 [U42(tt())] = [4] 591.36/297.21 [0] 591.36/297.21 > [2] 591.36/297.21 [0] 591.36/297.21 = [tt()] 591.36/297.21 591.36/297.21 [isNeList(V)] = [4 0] V + [0] 591.36/297.21 [0 4] [0] 591.36/297.21 >= [1 0] V + [0] 591.36/297.21 [0 0] [0] 591.36/297.21 = [U31(isQid(activate(V)))] 591.36/297.21 591.36/297.21 [isNeList(n____(V1, V2))] = [4 0] V2 + [4 8] V1 + [8] 591.36/297.21 [0 4] [0 0] [0] 591.36/297.21 > [4 0] V2 + [4 0] V1 + [0] 591.36/297.21 [0 0] [0 0] [0] 591.36/297.21 = [U41(isList(activate(V1)), activate(V2))] 591.36/297.21 591.36/297.21 [isNeList(n____(V1, V2))] = [4 0] V2 + [4 8] V1 + [8] 591.36/297.21 [0 4] [0 0] [0] 591.36/297.21 > [4 0] V2 + [4 0] V1 + [0] 591.36/297.21 [0 0] [0 0] [0] 591.36/297.21 = [U51(isNeList(activate(V1)), activate(V2))] 591.36/297.21 591.36/297.21 [U51(tt(), V2)] = [4 0] V2 + [2] 591.36/297.21 [0 0] [0] 591.36/297.21 > [4 0] V2 + [0] 591.36/297.21 [0 0] [0] 591.36/297.21 = [U52(isList(activate(V2)))] 591.36/297.21 591.36/297.21 [U52(tt())] = [2] 591.36/297.21 [0] 591.36/297.21 >= [2] 591.36/297.21 [0] 591.36/297.21 = [tt()] 591.36/297.21 591.36/297.21 [U61(tt())] = [2] 591.36/297.21 [0] 591.36/297.21 >= [2] 591.36/297.21 [0] 591.36/297.21 = [tt()] 591.36/297.21 591.36/297.21 [U71(tt(), P)] = [1 0] P + [4] 591.36/297.21 [0 0] [4] 591.36/297.21 >= [1 0] P + [4] 591.36/297.21 [0 0] [0] 591.36/297.21 = [U72(isPal(activate(P)))] 591.36/297.21 591.36/297.21 [U72(tt())] = [2] 591.36/297.21 [0] 591.36/297.21 >= [2] 591.36/297.21 [0] 591.36/297.21 = [tt()] 591.36/297.21 591.36/297.21 [isPal(V)] = [1 0] V + [4] 591.36/297.21 [4 4] [4] 591.36/297.21 > [1 0] V + [0] 591.36/297.21 [4 0] [0] 591.36/297.21 = [U81(isNePal(activate(V)))] 591.36/297.21 591.36/297.21 [isPal(n__nil())] = [6] 591.36/297.21 [12] 591.36/297.21 > [2] 591.36/297.21 [0] 591.36/297.21 = [tt()] 591.36/297.21 591.36/297.21 [U81(tt())] = [2] 591.36/297.21 [8] 591.36/297.21 >= [2] 591.36/297.21 [0] 591.36/297.21 = [tt()] 591.36/297.21 591.36/297.21 [isQid(n__a())] = [2] 591.36/297.21 [4] 591.36/297.21 >= [2] 591.36/297.21 [0] 591.36/297.21 = [tt()] 591.36/297.21 591.36/297.21 [isQid(n__e())] = [2] 591.36/297.21 [4] 591.36/297.21 >= [2] 591.36/297.21 [0] 591.36/297.21 = [tt()] 591.36/297.21 591.36/297.21 [isQid(n__i())] = [2] 591.36/297.21 [4] 591.36/297.21 >= [2] 591.36/297.21 [0] 591.36/297.21 = [tt()] 591.36/297.21 591.36/297.21 [isQid(n__o())] = [2] 591.36/297.21 [4] 591.36/297.21 >= [2] 591.36/297.21 [0] 591.36/297.21 = [tt()] 591.36/297.21 591.36/297.21 [isQid(n__u())] = [2] 591.36/297.21 [4] 591.36/297.21 >= [2] 591.36/297.21 [0] 591.36/297.21 = [tt()] 591.36/297.21 591.36/297.21 [isNePal(V)] = [1 0] V + [0] 591.36/297.21 [0 0] [4] 591.36/297.21 >= [1 0] V + [0] 591.36/297.21 [0 0] [0] 591.36/297.21 = [U61(isQid(activate(V)))] 591.36/297.21 591.36/297.21 [isNePal(n____(I, __(P, I)))] = [1 2] P + [2 2] I + [4] 591.36/297.21 [0 0] [0 0] [4] 591.36/297.21 > [1 0] P + [2 0] I + [0] 591.36/297.21 [0 0] [0 0] [4] 591.36/297.21 = [U71(isQid(activate(I)), activate(P))] 591.36/297.21 591.36/297.21 [a()] = [2] 591.36/297.21 [7] 591.36/297.21 >= [2] 591.36/297.21 [0] 591.36/297.21 = [n__a()] 591.36/297.21 591.36/297.21 [e()] = [2] 591.36/297.21 [7] 591.36/297.21 >= [2] 591.36/297.21 [0] 591.36/297.21 = [n__e()] 591.36/297.21 591.36/297.21 [i()] = [2] 591.36/297.21 [7] 591.36/297.21 >= [2] 591.36/297.21 [0] 591.36/297.21 = [n__i()] 591.36/297.21 591.36/297.21 [o()] = [2] 591.36/297.21 [7] 591.36/297.21 >= [2] 591.36/297.21 [0] 591.36/297.21 = [n__o()] 591.36/297.21 591.36/297.21 [u()] = [2] 591.36/297.21 [7] 591.36/297.21 >= [2] 591.36/297.21 [0] 591.36/297.21 = [n__u()] 591.36/297.21 591.36/297.21 591.36/297.21 We return to the main proof. 591.36/297.21 591.36/297.21 We are left with following problem, upon which TcT provides the 591.36/297.21 certificate YES(O(1),O(1)). 591.36/297.21 591.36/297.21 Weak Trs: 591.36/297.21 { __(X1, X2) -> n____(X1, X2) 591.36/297.21 , __(X, nil()) -> X 591.36/297.21 , __(__(X, Y), Z) -> __(X, __(Y, Z)) 591.36/297.21 , __(nil(), X) -> X 591.36/297.21 , nil() -> n__nil() 591.36/297.21 , U11(tt()) -> tt() 591.36/297.21 , U21(tt(), V2) -> U22(isList(activate(V2))) 591.36/297.21 , U22(tt()) -> tt() 591.36/297.21 , isList(V) -> U11(isNeList(activate(V))) 591.36/297.21 , isList(n__nil()) -> tt() 591.36/297.21 , isList(n____(V1, V2)) -> U21(isList(activate(V1)), activate(V2)) 591.36/297.21 , activate(X) -> X 591.36/297.21 , activate(n__nil()) -> nil() 591.36/297.21 , activate(n____(X1, X2)) -> __(X1, X2) 591.36/297.21 , activate(n__a()) -> a() 591.36/297.21 , activate(n__e()) -> e() 591.36/297.21 , activate(n__i()) -> i() 591.36/297.21 , activate(n__o()) -> o() 591.36/297.21 , activate(n__u()) -> u() 591.36/297.21 , U31(tt()) -> tt() 591.36/297.21 , U41(tt(), V2) -> U42(isNeList(activate(V2))) 591.36/297.21 , U42(tt()) -> tt() 591.36/297.21 , isNeList(V) -> U31(isQid(activate(V))) 591.36/297.21 , isNeList(n____(V1, V2)) -> 591.36/297.21 U41(isList(activate(V1)), activate(V2)) 591.36/297.21 , isNeList(n____(V1, V2)) -> 591.36/297.21 U51(isNeList(activate(V1)), activate(V2)) 591.36/297.21 , U51(tt(), V2) -> U52(isList(activate(V2))) 591.36/297.21 , U52(tt()) -> tt() 591.36/297.21 , U61(tt()) -> tt() 591.36/297.21 , U71(tt(), P) -> U72(isPal(activate(P))) 591.36/297.21 , U72(tt()) -> tt() 591.36/297.21 , isPal(V) -> U81(isNePal(activate(V))) 591.36/297.21 , isPal(n__nil()) -> tt() 591.36/297.21 , U81(tt()) -> tt() 591.36/297.21 , isQid(n__a()) -> tt() 591.36/297.21 , isQid(n__e()) -> tt() 591.36/297.21 , isQid(n__i()) -> tt() 591.36/297.21 , isQid(n__o()) -> tt() 591.36/297.21 , isQid(n__u()) -> tt() 591.36/297.21 , isNePal(V) -> U61(isQid(activate(V))) 591.36/297.21 , isNePal(n____(I, __(P, I))) -> 591.36/297.21 U71(isQid(activate(I)), activate(P)) 591.36/297.21 , a() -> n__a() 591.36/297.21 , e() -> n__e() 591.36/297.21 , i() -> n__i() 591.36/297.21 , o() -> n__o() 591.36/297.21 , u() -> n__u() } 591.36/297.21 Obligation: 591.36/297.21 runtime complexity 591.36/297.21 Answer: 591.36/297.21 YES(O(1),O(1)) 591.36/297.21 591.36/297.21 Empty rules are trivially bounded 591.36/297.21 591.36/297.21 Hurray, we answered YES(O(1),O(n^1)) 591.68/297.55 EOF