Certification Problem

Input (TPDB Runtime_Complexity_Innermost_Rewriting/Frederiksen_Others/strmatch)

The relative rewrite relation R/S is considered where R is the following TRS

prefix(Cons(x',xs'),Cons(x,xs)) and(!EQ(x',x),prefix(xs',xs)) (1)
domatch(Cons(x,xs),Nil,n) Nil (2)
domatch(Nil,Nil,n) Cons(n,Nil) (3)
prefix(Cons(x,xs),Nil) False (4)
prefix(Nil,cs) True (5)
domatch(patcs,Cons(x,xs),n) domatch[Ite](prefix(patcs,Cons(x,xs)),patcs,Cons(x,xs),n) (6)
eqNatList(Cons(x,xs),Cons(y,ys)) eqNatList[Ite](!EQ(x,y),y,ys,x,xs) (7)
eqNatList(Cons(x,xs),Nil) False (8)
eqNatList(Nil,Cons(y,ys)) False (9)
eqNatList(Nil,Nil) True (10)
notEmpty(Cons(x,xs)) True (11)
notEmpty(Nil) False (12)
strmatch(patstr,str) domatch(patstr,str,Nil) (13)

and S is the following TRS.

and(False,False) False (14)
and(True,False) False (15)
and(False,True) False (16)
and(True,True) True (17)
!EQ(S(x),S(y)) !EQ(x,y) (18)
!EQ(0,S(y)) False (19)
!EQ(S(x),0) False (20)
!EQ(0,0) True (21)
domatch[Ite](False,patcs,Cons(x,xs),n) domatch(patcs,xs,Cons(n,Cons(Nil,Nil))) (22)
domatch[Ite](True,patcs,Cons(x,xs),n) Cons(n,domatch(patcs,xs,Cons(n,Cons(Nil,Nil)))) (23)
eqNatList[Ite](False,y,ys,x,xs) False (24)
eqNatList[Ite](True,y,ys,x,xs) eqNatList(xs,ys) (25)
The evaluation strategy is innermost.

Property / Task

Determine bounds on the runtime complexity.

Answer / Result

An upperbound for the complexity is O(n2).

Proof (by AProVE @ termCOMP 2023)

1 Dependency Tuples

We get the following set of dependency tuples:
prefix#(Cons(z0,z1),Cons(z2,z3)) c12(and#(!EQ(z0,z2),prefix(z1,z3)),!EQ#(z0,z2),prefix#(z1,z3)) (27)
originates from
prefix(Cons(z0,z1),Cons(z2,z3)) and(!EQ(z0,z2),prefix(z1,z3)) (26)
prefix#(Cons(z0,z1),Nil) c13 (29)
originates from
prefix(Cons(z0,z1),Nil) False (28)
prefix#(Nil,z0) c14 (31)
originates from
prefix(Nil,z0) True (30)
domatch#(Cons(z0,z1),Nil,z2) c15 (33)
originates from
domatch(Cons(z0,z1),Nil,z2) Nil (32)
domatch#(Nil,Nil,z0) c16 (35)
originates from
domatch(Nil,Nil,z0) Cons(z0,Nil) (34)
domatch#(z0,Cons(z1,z2),z3) c17(domatch[Ite]#(prefix(z0,Cons(z1,z2)),z0,Cons(z1,z2),z3),prefix#(z0,Cons(z1,z2))) (37)
originates from
domatch(z0,Cons(z1,z2),z3) domatch[Ite](prefix(z0,Cons(z1,z2)),z0,Cons(z1,z2),z3) (36)
eqNatList#(Cons(z0,z1),Cons(z2,z3)) c18(eqNatList[Ite]#(!EQ(z0,z2),z2,z3,z0,z1),!EQ#(z0,z2)) (39)
originates from
eqNatList(Cons(z0,z1),Cons(z2,z3)) eqNatList[Ite](!EQ(z0,z2),z2,z3,z0,z1) (38)
eqNatList#(Cons(z0,z1),Nil) c19 (41)
originates from
eqNatList(Cons(z0,z1),Nil) False (40)
eqNatList#(Nil,Cons(z0,z1)) c20 (43)
originates from
eqNatList(Nil,Cons(z0,z1)) False (42)
eqNatList#(Nil,Nil) c21 (44)
originates from
eqNatList(Nil,Nil) True (10)
notEmpty#(Cons(z0,z1)) c22 (46)
originates from
notEmpty(Cons(z0,z1)) True (45)
notEmpty#(Nil) c23 (47)
originates from
notEmpty(Nil) False (12)
strmatch#(z0,z1) c24(domatch#(z0,z1,Nil)) (49)
originates from
strmatch(z0,z1) domatch(z0,z1,Nil) (48)
and#(False,False) c (50)
originates from
and(False,False) False (14)
and#(True,False) c1 (51)
originates from
and(True,False) False (15)
and#(False,True) c2 (52)
originates from
and(False,True) False (16)
and#(True,True) c3 (53)
originates from
and(True,True) True (17)
!EQ#(S(z0),S(z1)) c4(!EQ#(z0,z1)) (55)
originates from
!EQ(S(z0),S(z1)) !EQ(z0,z1) (54)
!EQ#(0,S(z0)) c5 (57)
originates from
!EQ(0,S(z0)) False (56)
!EQ#(S(z0),0) c6 (59)
originates from
!EQ(S(z0),0) False (58)
!EQ#(0,0) c7 (60)
originates from
!EQ(0,0) True (21)
domatch[Ite]#(False,z0,Cons(z1,z2),z3) c8(domatch#(z0,z2,Cons(z3,Cons(Nil,Nil)))) (62)
originates from
domatch[Ite](False,z0,Cons(z1,z2),z3) domatch(z0,z2,Cons(z3,Cons(Nil,Nil))) (61)
domatch[Ite]#(True,z0,Cons(z1,z2),z3) c9(domatch#(z0,z2,Cons(z3,Cons(Nil,Nil)))) (64)
originates from
domatch[Ite](True,z0,Cons(z1,z2),z3) Cons(z3,domatch(z0,z2,Cons(z3,Cons(Nil,Nil)))) (63)
eqNatList[Ite]#(False,z0,z1,z2,z3) c10 (66)
originates from
eqNatList[Ite](False,z0,z1,z2,z3) False (65)
eqNatList[Ite]#(True,z0,z1,z2,z3) c11(eqNatList#(z3,z1)) (68)
originates from
eqNatList[Ite](True,z0,z1,z2,z3) eqNatList(z3,z1) (67)
Moreover, we add the following terms to the innermost strategy.
and#(False,False)
and#(True,False)
and#(False,True)
and#(True,True)
!EQ#(S(z0),S(z1))
!EQ#(0,S(z0))
!EQ#(S(z0),0)
!EQ#(0,0)
domatch[Ite]#(False,z0,Cons(z1,z2),z3)
domatch[Ite]#(True,z0,Cons(z1,z2),z3)
eqNatList[Ite]#(False,z0,z1,z2,z3)
eqNatList[Ite]#(True,z0,z1,z2,z3)
prefix#(Cons(z0,z1),Cons(z2,z3))
prefix#(Cons(z0,z1),Nil)
prefix#(Nil,z0)
domatch#(Cons(z0,z1),Nil,z2)
domatch#(Nil,Nil,z0)
domatch#(z0,Cons(z1,z2),z3)
eqNatList#(Cons(z0,z1),Cons(z2,z3))
eqNatList#(Cons(z0,z1),Nil)
eqNatList#(Nil,Cons(z0,z1))
eqNatList#(Nil,Nil)
notEmpty#(Cons(z0,z1))
notEmpty#(Nil)
strmatch#(z0,z1)

1.1 Usable Rules

We remove the following rules since they are not usable.
domatch[Ite](False,z0,Cons(z1,z2),z3) domatch(z0,z2,Cons(z3,Cons(Nil,Nil))) (61)
domatch[Ite](True,z0,Cons(z1,z2),z3) Cons(z3,domatch(z0,z2,Cons(z3,Cons(Nil,Nil)))) (63)
eqNatList[Ite](False,z0,z1,z2,z3) False (65)
eqNatList[Ite](True,z0,z1,z2,z3) eqNatList(z3,z1) (67)
domatch(Cons(z0,z1),Nil,z2) Nil (32)
domatch(Nil,Nil,z0) Cons(z0,Nil) (34)
domatch(z0,Cons(z1,z2),z3) domatch[Ite](prefix(z0,Cons(z1,z2)),z0,Cons(z1,z2),z3) (36)
eqNatList(Cons(z0,z1),Cons(z2,z3)) eqNatList[Ite](!EQ(z0,z2),z2,z3,z0,z1) (38)
eqNatList(Cons(z0,z1),Nil) False (40)
eqNatList(Nil,Cons(z0,z1)) False (42)
eqNatList(Nil,Nil) True (10)
notEmpty(Cons(z0,z1)) True (45)
notEmpty(Nil) False (12)
strmatch(z0,z1) domatch(z0,z1,Nil) (48)

1.1.1 Rule Shifting

The rules
domatch#(Cons(z0,z1),Nil,z2) c15 (33)
notEmpty#(Cons(z0,z1)) c22 (46)
notEmpty#(Nil) c23 (47)
strmatch#(z0,z1) c24(domatch#(z0,z1,Nil)) (49)
are strictly oriented by the following linear polynomial interpretation over the naturals
[c] = 0
[c1] = 0
[c2] = 0
[c3] = 0
[c4(x1)] = 1 · x1 + 0
[c5] = 0
[c6] = 0
[c7] = 0
[c8(x1)] = 1 · x1 + 0
[c9(x1)] = 1 · x1 + 0
[c10] = 0
[c11(x1)] = 1 · x1 + 0
[c12(x1, x2, x3)] = 1 · x1 + 0 + 1 · x2 + 1 · x3
[c13] = 0
[c14] = 0
[c15] = 0
[c16] = 0
[c17(x1, x2)] = 1 · x1 + 0 + 1 · x2
[c18(x1, x2)] = 1 · x1 + 0 + 1 · x2
[c19] = 0
[c20] = 0
[c21] = 0
[c22] = 0
[c23] = 0
[c24(x1)] = 1 · x1 + 0
[!EQ(x1, x2)] = 1
[prefix(x1, x2)] = 0
[and(x1, x2)] = 1
[and#(x1, x2)] = 0
[!EQ#(x1, x2)] = 0
[domatch[Ite]#(x1,...,x4)] = 1 · x2 + 0
[eqNatList[Ite]#(x1,...,x5)] = 0
[prefix#(x1, x2)] = 0
[domatch#(x1, x2, x3)] = 1 · x1 + 0
[eqNatList#(x1, x2)] = 0
[notEmpty#(x1)] = 1 + 1 · x1
[strmatch#(x1, x2)] = 1 + 1 · x1
[S(x1)] = 1 + 1 · x1
[0] = 1
[False] = 0
[True] = 0
[Cons(x1, x2)] = 1
[Nil] = 0
which has the intended complexity. Here, only the following usable rules have been considered:
and#(False,False) c (50)
and#(True,False) c1 (51)
and#(False,True) c2 (52)
and#(True,True) c3 (53)
!EQ#(S(z0),S(z1)) c4(!EQ#(z0,z1)) (55)
!EQ#(0,S(z0)) c5 (57)
!EQ#(S(z0),0) c6 (59)
!EQ#(0,0) c7 (60)
domatch[Ite]#(False,z0,Cons(z1,z2),z3) c8(domatch#(z0,z2,Cons(z3,Cons(Nil,Nil)))) (62)
domatch[Ite]#(True,z0,Cons(z1,z2),z3) c9(domatch#(z0,z2,Cons(z3,Cons(Nil,Nil)))) (64)
eqNatList[Ite]#(False,z0,z1,z2,z3) c10 (66)
eqNatList[Ite]#(True,z0,z1,z2,z3) c11(eqNatList#(z3,z1)) (68)
prefix#(Cons(z0,z1),Cons(z2,z3)) c12(and#(!EQ(z0,z2),prefix(z1,z3)),!EQ#(z0,z2),prefix#(z1,z3)) (27)
prefix#(Cons(z0,z1),Nil) c13 (29)
prefix#(Nil,z0) c14 (31)
domatch#(Cons(z0,z1),Nil,z2) c15 (33)
domatch#(Nil,Nil,z0) c16 (35)
domatch#(z0,Cons(z1,z2),z3) c17(domatch[Ite]#(prefix(z0,Cons(z1,z2)),z0,Cons(z1,z2),z3),prefix#(z0,Cons(z1,z2))) (37)
eqNatList#(Cons(z0,z1),Cons(z2,z3)) c18(eqNatList[Ite]#(!EQ(z0,z2),z2,z3,z0,z1),!EQ#(z0,z2)) (39)
eqNatList#(Cons(z0,z1),Nil) c19 (41)
eqNatList#(Nil,Cons(z0,z1)) c20 (43)
eqNatList#(Nil,Nil) c21 (44)
notEmpty#(Cons(z0,z1)) c22 (46)
notEmpty#(Nil) c23 (47)
strmatch#(z0,z1) c24(domatch#(z0,z1,Nil)) (49)

1.1.1.1 Rule Shifting

The rules
domatch#(Nil,Nil,z0) c16 (35)
are strictly oriented by the following linear polynomial interpretation over the naturals
[c] = 0
[c1] = 0
[c2] = 0
[c3] = 0
[c4(x1)] = 1 · x1 + 0
[c5] = 0
[c6] = 0
[c7] = 0
[c8(x1)] = 1 · x1 + 0
[c9(x1)] = 1 · x1 + 0
[c10] = 0
[c11(x1)] = 1 · x1 + 0
[c12(x1, x2, x3)] = 1 · x1 + 0 + 1 · x2 + 1 · x3
[c13] = 0
[c14] = 0
[c15] = 0
[c16] = 0
[c17(x1, x2)] = 1 · x1 + 0 + 1 · x2
[c18(x1, x2)] = 1 · x1 + 0 + 1 · x2
[c19] = 0
[c20] = 0
[c21] = 0
[c22] = 0
[c23] = 0
[c24(x1)] = 1 · x1 + 0
[!EQ(x1, x2)] = 1
[prefix(x1, x2)] = 1
[and(x1, x2)] = 1
[and#(x1, x2)] = 0
[!EQ#(x1, x2)] = 0
[domatch[Ite]#(x1,...,x4)] = 1 · x2 + 0 + 1 · x3
[eqNatList[Ite]#(x1,...,x5)] = 0
[prefix#(x1, x2)] = 0
[domatch#(x1, x2, x3)] = 1 · x1 + 0
[eqNatList#(x1, x2)] = 0
[notEmpty#(x1)] = 0
[strmatch#(x1, x2)] = 1 · x1 + 0
[S(x1)] = 1 + 1 · x1
[0] = 1
[False] = 1
[True] = 0
[Cons(x1, x2)] = 0
[Nil] = 1
which has the intended complexity. Here, only the following usable rules have been considered:
and#(False,False) c (50)
and#(True,False) c1 (51)
and#(False,True) c2 (52)
and#(True,True) c3 (53)
!EQ#(S(z0),S(z1)) c4(!EQ#(z0,z1)) (55)
!EQ#(0,S(z0)) c5 (57)
!EQ#(S(z0),0) c6 (59)
!EQ#(0,0) c7 (60)
domatch[Ite]#(False,z0,Cons(z1,z2),z3) c8(domatch#(z0,z2,Cons(z3,Cons(Nil,Nil)))) (62)
domatch[Ite]#(True,z0,Cons(z1,z2),z3) c9(domatch#(z0,z2,Cons(z3,Cons(Nil,Nil)))) (64)
eqNatList[Ite]#(False,z0,z1,z2,z3) c10 (66)
eqNatList[Ite]#(True,z0,z1,z2,z3) c11(eqNatList#(z3,z1)) (68)
prefix#(Cons(z0,z1),Cons(z2,z3)) c12(and#(!EQ(z0,z2),prefix(z1,z3)),!EQ#(z0,z2),prefix#(z1,z3)) (27)
prefix#(Cons(z0,z1),Nil) c13 (29)
prefix#(Nil,z0) c14 (31)
domatch#(Cons(z0,z1),Nil,z2) c15 (33)
domatch#(Nil,Nil,z0) c16 (35)
domatch#(z0,Cons(z1,z2),z3) c17(domatch[Ite]#(prefix(z0,Cons(z1,z2)),z0,Cons(z1,z2),z3),prefix#(z0,Cons(z1,z2))) (37)
eqNatList#(Cons(z0,z1),Cons(z2,z3)) c18(eqNatList[Ite]#(!EQ(z0,z2),z2,z3,z0,z1),!EQ#(z0,z2)) (39)
eqNatList#(Cons(z0,z1),Nil) c19 (41)
eqNatList#(Nil,Cons(z0,z1)) c20 (43)
eqNatList#(Nil,Nil) c21 (44)
notEmpty#(Cons(z0,z1)) c22 (46)
notEmpty#(Nil) c23 (47)
strmatch#(z0,z1) c24(domatch#(z0,z1,Nil)) (49)

1.1.1.1.1 Rule Shifting

The rules
eqNatList#(Cons(z0,z1),Nil) c19 (41)
eqNatList#(Nil,Cons(z0,z1)) c20 (43)
eqNatList#(Nil,Nil) c21 (44)
are strictly oriented by the following linear polynomial interpretation over the naturals
[c] = 0
[c1] = 0
[c2] = 0
[c3] = 0
[c4(x1)] = 1 · x1 + 0
[c5] = 0
[c6] = 0
[c7] = 0
[c8(x1)] = 1 · x1 + 0
[c9(x1)] = 1 · x1 + 0
[c10] = 0
[c11(x1)] = 1 · x1 + 0
[c12(x1, x2, x3)] = 1 · x1 + 0 + 1 · x2 + 1 · x3
[c13] = 0
[c14] = 0
[c15] = 0
[c16] = 0
[c17(x1, x2)] = 1 · x1 + 0 + 1 · x2
[c18(x1, x2)] = 1 · x1 + 0 + 1 · x2
[c19] = 0
[c20] = 0
[c21] = 0
[c22] = 0
[c23] = 0
[c24(x1)] = 1 · x1 + 0
[!EQ(x1, x2)] = 1
[prefix(x1, x2)] = 1
[and(x1, x2)] = 1
[and#(x1, x2)] = 0
[!EQ#(x1, x2)] = 0
[domatch[Ite]#(x1,...,x4)] = 1 · x2 + 0 + 1 · x3
[eqNatList[Ite]#(x1,...,x5)] = 1
[prefix#(x1, x2)] = 0
[domatch#(x1, x2, x3)] = 1 · x1 + 0
[eqNatList#(x1, x2)] = 1
[notEmpty#(x1)] = 0
[strmatch#(x1, x2)] = 1 · x1 + 0
[S(x1)] = 1 + 1 · x1
[0] = 1
[False] = 1
[True] = 0
[Cons(x1, x2)] = 0
[Nil] = 0
which has the intended complexity. Here, only the following usable rules have been considered:
and#(False,False) c (50)
and#(True,False) c1 (51)
and#(False,True) c2 (52)
and#(True,True) c3 (53)
!EQ#(S(z0),S(z1)) c4(!EQ#(z0,z1)) (55)
!EQ#(0,S(z0)) c5 (57)
!EQ#(S(z0),0) c6 (59)
!EQ#(0,0) c7 (60)
domatch[Ite]#(False,z0,Cons(z1,z2),z3) c8(domatch#(z0,z2,Cons(z3,Cons(Nil,Nil)))) (62)
domatch[Ite]#(True,z0,Cons(z1,z2),z3) c9(domatch#(z0,z2,Cons(z3,Cons(Nil,Nil)))) (64)
eqNatList[Ite]#(False,z0,z1,z2,z3) c10 (66)
eqNatList[Ite]#(True,z0,z1,z2,z3) c11(eqNatList#(z3,z1)) (68)
prefix#(Cons(z0,z1),Cons(z2,z3)) c12(and#(!EQ(z0,z2),prefix(z1,z3)),!EQ#(z0,z2),prefix#(z1,z3)) (27)
prefix#(Cons(z0,z1),Nil) c13 (29)
prefix#(Nil,z0) c14 (31)
domatch#(Cons(z0,z1),Nil,z2) c15 (33)
domatch#(Nil,Nil,z0) c16 (35)
domatch#(z0,Cons(z1,z2),z3) c17(domatch[Ite]#(prefix(z0,Cons(z1,z2)),z0,Cons(z1,z2),z3),prefix#(z0,Cons(z1,z2))) (37)
eqNatList#(Cons(z0,z1),Cons(z2,z3)) c18(eqNatList[Ite]#(!EQ(z0,z2),z2,z3,z0,z1),!EQ#(z0,z2)) (39)
eqNatList#(Cons(z0,z1),Nil) c19 (41)
eqNatList#(Nil,Cons(z0,z1)) c20 (43)
eqNatList#(Nil,Nil) c21 (44)
notEmpty#(Cons(z0,z1)) c22 (46)
notEmpty#(Nil) c23 (47)
strmatch#(z0,z1) c24(domatch#(z0,z1,Nil)) (49)

1.1.1.1.1.1 Rule Shifting

The rules
prefix#(Cons(z0,z1),Nil) c13 (29)
prefix#(Nil,z0) c14 (31)
are strictly oriented by the following linear polynomial interpretation over the naturals
[c] = 0
[c1] = 0
[c2] = 0
[c3] = 0
[c4(x1)] = 1 · x1 + 0
[c5] = 0
[c6] = 0
[c7] = 0
[c8(x1)] = 1 · x1 + 0
[c9(x1)] = 1 · x1 + 0
[c10] = 0
[c11(x1)] = 1 · x1 + 0
[c12(x1, x2, x3)] = 1 · x1 + 0 + 1 · x2 + 1 · x3
[c13] = 0
[c14] = 0
[c15] = 0
[c16] = 0
[c17(x1, x2)] = 1 · x1 + 0 + 1 · x2
[c18(x1, x2)] = 1 · x1 + 0 + 1 · x2
[c19] = 0
[c20] = 0
[c21] = 0
[c22] = 0
[c23] = 0
[c24(x1)] = 1 · x1 + 0
[!EQ(x1, x2)] = 1
[prefix(x1, x2)] = 1
[and(x1, x2)] = 1
[and#(x1, x2)] = 0
[!EQ#(x1, x2)] = 0
[domatch[Ite]#(x1,...,x4)] = 1 · x2 + 0 + 1 · x3
[eqNatList[Ite]#(x1,...,x5)] = 0
[prefix#(x1, x2)] = 1
[domatch#(x1, x2, x3)] = 1 + 1 · x1 + 1 · x2
[eqNatList#(x1, x2)] = 0
[notEmpty#(x1)] = 0
[strmatch#(x1, x2)] = 1 + 1 · x1 + 1 · x2
[S(x1)] = 1 + 1 · x1
[0] = 1
[False] = 1
[True] = 0
[Cons(x1, x2)] = 1 + 1 · x2
[Nil] = 0
which has the intended complexity. Here, only the following usable rules have been considered:
and#(False,False) c (50)
and#(True,False) c1 (51)
and#(False,True) c2 (52)
and#(True,True) c3 (53)
!EQ#(S(z0),S(z1)) c4(!EQ#(z0,z1)) (55)
!EQ#(0,S(z0)) c5 (57)
!EQ#(S(z0),0) c6 (59)
!EQ#(0,0) c7 (60)
domatch[Ite]#(False,z0,Cons(z1,z2),z3) c8(domatch#(z0,z2,Cons(z3,Cons(Nil,Nil)))) (62)
domatch[Ite]#(True,z0,Cons(z1,z2),z3) c9(domatch#(z0,z2,Cons(z3,Cons(Nil,Nil)))) (64)
eqNatList[Ite]#(False,z0,z1,z2,z3) c10 (66)
eqNatList[Ite]#(True,z0,z1,z2,z3) c11(eqNatList#(z3,z1)) (68)
prefix#(Cons(z0,z1),Cons(z2,z3)) c12(and#(!EQ(z0,z2),prefix(z1,z3)),!EQ#(z0,z2),prefix#(z1,z3)) (27)
prefix#(Cons(z0,z1),Nil) c13 (29)
prefix#(Nil,z0) c14 (31)
domatch#(Cons(z0,z1),Nil,z2) c15 (33)
domatch#(Nil,Nil,z0) c16 (35)
domatch#(z0,Cons(z1,z2),z3) c17(domatch[Ite]#(prefix(z0,Cons(z1,z2)),z0,Cons(z1,z2),z3),prefix#(z0,Cons(z1,z2))) (37)
eqNatList#(Cons(z0,z1),Cons(z2,z3)) c18(eqNatList[Ite]#(!EQ(z0,z2),z2,z3,z0,z1),!EQ#(z0,z2)) (39)
eqNatList#(Cons(z0,z1),Nil) c19 (41)
eqNatList#(Nil,Cons(z0,z1)) c20 (43)
eqNatList#(Nil,Nil) c21 (44)
notEmpty#(Cons(z0,z1)) c22 (46)
notEmpty#(Nil) c23 (47)
strmatch#(z0,z1) c24(domatch#(z0,z1,Nil)) (49)

1.1.1.1.1.1.1 Rule Shifting

The rules
eqNatList#(Cons(z0,z1),Cons(z2,z3)) c18(eqNatList[Ite]#(!EQ(z0,z2),z2,z3,z0,z1),!EQ#(z0,z2)) (39)
are strictly oriented by the following linear polynomial interpretation over the naturals
[c] = 0
[c1] = 0
[c2] = 0
[c3] = 0
[c4(x1)] = 1 · x1 + 0
[c5] = 0
[c6] = 0
[c7] = 0
[c8(x1)] = 1 · x1 + 0
[c9(x1)] = 1 · x1 + 0
[c10] = 0
[c11(x1)] = 1 · x1 + 0
[c12(x1, x2, x3)] = 1 · x1 + 0 + 1 · x2 + 1 · x3
[c13] = 0
[c14] = 0
[c15] = 0
[c16] = 0
[c17(x1, x2)] = 1 · x1 + 0 + 1 · x2
[c18(x1, x2)] = 1 · x1 + 0 + 1 · x2
[c19] = 0
[c20] = 0
[c21] = 0
[c22] = 0
[c23] = 0
[c24(x1)] = 1 · x1 + 0
[!EQ(x1, x2)] = 2
[prefix(x1, x2)] = 1 + 3 · x1 + 2 · x2
[and(x1, x2)] = 2 · x1 + 0
[and#(x1, x2)] = 0
[!EQ#(x1, x2)] = 0
[domatch[Ite]#(x1,...,x4)] = 0
[eqNatList[Ite]#(x1,...,x5)] = 3 · x3 + 0
[prefix#(x1, x2)] = 0
[domatch#(x1, x2, x3)] = 0
[eqNatList#(x1, x2)] = 3 · x2 + 0
[notEmpty#(x1)] = 0
[strmatch#(x1, x2)] = 1 + 1 · x1
[S(x1)] = 1 · x1 + 0
[0] = 0
[False] = 0
[True] = 0
[Cons(x1, x2)] = 3 + 1 · x2
[Nil] = 0
which has the intended complexity. Here, only the following usable rules have been considered:
and#(False,False) c (50)
and#(True,False) c1 (51)
and#(False,True) c2 (52)
and#(True,True) c3 (53)
!EQ#(S(z0),S(z1)) c4(!EQ#(z0,z1)) (55)
!EQ#(0,S(z0)) c5 (57)
!EQ#(S(z0),0) c6 (59)
!EQ#(0,0) c7 (60)
domatch[Ite]#(False,z0,Cons(z1,z2),z3) c8(domatch#(z0,z2,Cons(z3,Cons(Nil,Nil)))) (62)
domatch[Ite]#(True,z0,Cons(z1,z2),z3) c9(domatch#(z0,z2,Cons(z3,Cons(Nil,Nil)))) (64)
eqNatList[Ite]#(False,z0,z1,z2,z3) c10 (66)
eqNatList[Ite]#(True,z0,z1,z2,z3) c11(eqNatList#(z3,z1)) (68)
prefix#(Cons(z0,z1),Cons(z2,z3)) c12(and#(!EQ(z0,z2),prefix(z1,z3)),!EQ#(z0,z2),prefix#(z1,z3)) (27)
prefix#(Cons(z0,z1),Nil) c13 (29)
prefix#(Nil,z0) c14 (31)
domatch#(Cons(z0,z1),Nil,z2) c15 (33)
domatch#(Nil,Nil,z0) c16 (35)
domatch#(z0,Cons(z1,z2),z3) c17(domatch[Ite]#(prefix(z0,Cons(z1,z2)),z0,Cons(z1,z2),z3),prefix#(z0,Cons(z1,z2))) (37)
eqNatList#(Cons(z0,z1),Cons(z2,z3)) c18(eqNatList[Ite]#(!EQ(z0,z2),z2,z3,z0,z1),!EQ#(z0,z2)) (39)
eqNatList#(Cons(z0,z1),Nil) c19 (41)
eqNatList#(Nil,Cons(z0,z1)) c20 (43)
eqNatList#(Nil,Nil) c21 (44)
notEmpty#(Cons(z0,z1)) c22 (46)
notEmpty#(Nil) c23 (47)
strmatch#(z0,z1) c24(domatch#(z0,z1,Nil)) (49)

1.1.1.1.1.1.1.1 Rule Shifting

The rules
domatch#(z0,Cons(z1,z2),z3) c17(domatch[Ite]#(prefix(z0,Cons(z1,z2)),z0,Cons(z1,z2),z3),prefix#(z0,Cons(z1,z2))) (37)
are strictly oriented by the following linear polynomial interpretation over the naturals
[c] = 0
[c1] = 0
[c2] = 0
[c3] = 0
[c4(x1)] = 1 · x1 + 0
[c5] = 0
[c6] = 0
[c7] = 0
[c8(x1)] = 1 · x1 + 0
[c9(x1)] = 1 · x1 + 0
[c10] = 0
[c11(x1)] = 1 · x1 + 0
[c12(x1, x2, x3)] = 1 · x1 + 0 + 1 · x2 + 1 · x3
[c13] = 0
[c14] = 0
[c15] = 0
[c16] = 0
[c17(x1, x2)] = 1 · x1 + 0 + 1 · x2
[c18(x1, x2)] = 1 · x1 + 0 + 1 · x2
[c19] = 0
[c20] = 0
[c21] = 0
[c22] = 0
[c23] = 0
[c24(x1)] = 1 · x1 + 0
[!EQ(x1, x2)] = 1
[prefix(x1, x2)] = 1
[and(x1, x2)] = 1
[and#(x1, x2)] = 0
[!EQ#(x1, x2)] = 0
[domatch[Ite]#(x1,...,x4)] = 1 · x2 + 0 + 1 · x3
[eqNatList[Ite]#(x1,...,x5)] = 0
[prefix#(x1, x2)] = 0
[domatch#(x1, x2, x3)] = 1 + 1 · x1 + 1 · x2
[eqNatList#(x1, x2)] = 0
[notEmpty#(x1)] = 0
[strmatch#(x1, x2)] = 1 + 1 · x1 + 1 · x2
[S(x1)] = 1 + 1 · x1
[0] = 1
[False] = 1
[True] = 0
[Cons(x1, x2)] = 1 + 1 · x2
[Nil] = 0
which has the intended complexity. Here, only the following usable rules have been considered:
and#(False,False) c (50)
and#(True,False) c1 (51)
and#(False,True) c2 (52)
and#(True,True) c3 (53)
!EQ#(S(z0),S(z1)) c4(!EQ#(z0,z1)) (55)
!EQ#(0,S(z0)) c5 (57)
!EQ#(S(z0),0) c6 (59)
!EQ#(0,0) c7 (60)
domatch[Ite]#(False,z0,Cons(z1,z2),z3) c8(domatch#(z0,z2,Cons(z3,Cons(Nil,Nil)))) (62)
domatch[Ite]#(True,z0,Cons(z1,z2),z3) c9(domatch#(z0,z2,Cons(z3,Cons(Nil,Nil)))) (64)
eqNatList[Ite]#(False,z0,z1,z2,z3) c10 (66)
eqNatList[Ite]#(True,z0,z1,z2,z3) c11(eqNatList#(z3,z1)) (68)
prefix#(Cons(z0,z1),Cons(z2,z3)) c12(and#(!EQ(z0,z2),prefix(z1,z3)),!EQ#(z0,z2),prefix#(z1,z3)) (27)
prefix#(Cons(z0,z1),Nil) c13 (29)
prefix#(Nil,z0) c14 (31)
domatch#(Cons(z0,z1),Nil,z2) c15 (33)
domatch#(Nil,Nil,z0) c16 (35)
domatch#(z0,Cons(z1,z2),z3) c17(domatch[Ite]#(prefix(z0,Cons(z1,z2)),z0,Cons(z1,z2),z3),prefix#(z0,Cons(z1,z2))) (37)
eqNatList#(Cons(z0,z1),Cons(z2,z3)) c18(eqNatList[Ite]#(!EQ(z0,z2),z2,z3,z0,z1),!EQ#(z0,z2)) (39)
eqNatList#(Cons(z0,z1),Nil) c19 (41)
eqNatList#(Nil,Cons(z0,z1)) c20 (43)
eqNatList#(Nil,Nil) c21 (44)
notEmpty#(Cons(z0,z1)) c22 (46)
notEmpty#(Nil) c23 (47)
strmatch#(z0,z1) c24(domatch#(z0,z1,Nil)) (49)

1.1.1.1.1.1.1.1.1 Rule Shifting

The rules
prefix#(Cons(z0,z1),Cons(z2,z3)) c12(and#(!EQ(z0,z2),prefix(z1,z3)),!EQ#(z0,z2),prefix#(z1,z3)) (27)
are strictly oriented by the following non-linear polynomial interpretation over the naturals
[c] = 0
[c1] = 0
[c2] = 0
[c3] = 0
[c4(x1)] = 1 · x1 + 0
[c5] = 0
[c6] = 0
[c7] = 0
[c8(x1)] = 1 · x1 + 0
[c9(x1)] = 1 · x1 + 0
[c10] = 0
[c11(x1)] = 1 · x1 + 0
[c12(x1, x2, x3)] = 1 · x1 + 0 + 1 · x2 + 1 · x3
[c13] = 0
[c14] = 0
[c15] = 0
[c16] = 0
[c17(x1, x2)] = 1 · x1 + 0 + 1 · x2
[c18(x1, x2)] = 1 · x1 + 0 + 1 · x2
[c19] = 0
[c20] = 0
[c21] = 0
[c22] = 0
[c23] = 0
[c24(x1)] = 1 · x1 + 0
[!EQ(x1, x2)] = 0
[prefix(x1, x2)] = 0
[and(x1, x2)] = 1
[and#(x1, x2)] = 0
[!EQ#(x1, x2)] = 0
[domatch[Ite]#(x1,...,x4)] = 1 · x4 + 0 + 1 · x3 · x3 + 2 · x2 · x3
[eqNatList[Ite]#(x1,...,x5)] = 0
[prefix#(x1, x2)] = 1 · x1 + 0
[domatch#(x1, x2, x3)] = 1 · x1 + 0 + 1 · x3 + 2 · x2 · x1 + 1 · x2 · x2
[eqNatList#(x1, x2)] = 0
[notEmpty#(x1)] = 0
[strmatch#(x1, x2)] = 1 + 2 · x1 + 2 · x2 + 1 · x2 · x2 + 2 · x1 · x2 + 2 · x1 · x1
[S(x1)] = 0
[0] = 2
[False] = 0
[True] = 0
[Cons(x1, x2)] = 2 + 1 · x2
[Nil] = 0
which has the intended complexity. Here, only the following usable rules have been considered:
and#(False,False) c (50)
and#(True,False) c1 (51)
and#(False,True) c2 (52)
and#(True,True) c3 (53)
!EQ#(S(z0),S(z1)) c4(!EQ#(z0,z1)) (55)
!EQ#(0,S(z0)) c5 (57)
!EQ#(S(z0),0) c6 (59)
!EQ#(0,0) c7 (60)
domatch[Ite]#(False,z0,Cons(z1,z2),z3) c8(domatch#(z0,z2,Cons(z3,Cons(Nil,Nil)))) (62)
domatch[Ite]#(True,z0,Cons(z1,z2),z3) c9(domatch#(z0,z2,Cons(z3,Cons(Nil,Nil)))) (64)
eqNatList[Ite]#(False,z0,z1,z2,z3) c10 (66)
eqNatList[Ite]#(True,z0,z1,z2,z3) c11(eqNatList#(z3,z1)) (68)
prefix#(Cons(z0,z1),Cons(z2,z3)) c12(and#(!EQ(z0,z2),prefix(z1,z3)),!EQ#(z0,z2),prefix#(z1,z3)) (27)
prefix#(Cons(z0,z1),Nil) c13 (29)
prefix#(Nil,z0) c14 (31)
domatch#(Cons(z0,z1),Nil,z2) c15 (33)
domatch#(Nil,Nil,z0) c16 (35)
domatch#(z0,Cons(z1,z2),z3) c17(domatch[Ite]#(prefix(z0,Cons(z1,z2)),z0,Cons(z1,z2),z3),prefix#(z0,Cons(z1,z2))) (37)
eqNatList#(Cons(z0,z1),Cons(z2,z3)) c18(eqNatList[Ite]#(!EQ(z0,z2),z2,z3,z0,z1),!EQ#(z0,z2)) (39)
eqNatList#(Cons(z0,z1),Nil) c19 (41)
eqNatList#(Nil,Cons(z0,z1)) c20 (43)
eqNatList#(Nil,Nil) c21 (44)
notEmpty#(Cons(z0,z1)) c22 (46)
notEmpty#(Nil) c23 (47)
strmatch#(z0,z1) c24(domatch#(z0,z1,Nil)) (49)

1.1.1.1.1.1.1.1.1.1 R is empty

There are no rules in the TRS R. Hence, R/S has complexity O(1).