WORST_CASE(?,O(n^2)) * Step 1: Ara WORST_CASE(?,O(n^2)) + Considered Problem: - Strict TRS: domatch(patcs,Cons(x,xs),n) -> domatch[Ite](prefix(patcs,Cons(x,xs)),patcs,Cons(x,xs),n) domatch(Cons(x,xs),Nil(),n) -> Nil() domatch(Nil(),Nil(),n) -> Cons(n,Nil()) eqNatList(Cons(x,xs),Cons(y,ys)) -> eqNatList[Ite](!EQ(x,y),y,ys,x,xs) eqNatList(Cons(x,xs),Nil()) -> False() eqNatList(Nil(),Cons(y,ys)) -> False() eqNatList(Nil(),Nil()) -> True() notEmpty(Cons(x,xs)) -> True() notEmpty(Nil()) -> False() prefix(Cons(x,xs),Nil()) -> False() prefix(Cons(x',xs'),Cons(x,xs)) -> and(!EQ(x',x),prefix(xs',xs)) prefix(Nil(),cs) -> True() strmatch(patstr,str) -> domatch(patstr,str,Nil()) - Weak TRS: !EQ(0(),0()) -> True() !EQ(0(),S(y)) -> False() !EQ(S(x),0()) -> False() !EQ(S(x),S(y)) -> !EQ(x,y) and(False(),False()) -> False() and(False(),True()) -> False() and(True(),False()) -> False() and(True(),True()) -> True() domatch[Ite](False(),patcs,Cons(x,xs),n) -> domatch(patcs,xs,Cons(n,Cons(Nil(),Nil()))) domatch[Ite](True(),patcs,Cons(x,xs),n) -> Cons(n,domatch(patcs,xs,Cons(n,Cons(Nil(),Nil())))) eqNatList[Ite](False(),y,ys,x,xs) -> False() eqNatList[Ite](True(),y,ys,x,xs) -> eqNatList(xs,ys) - Signature: {!EQ/2,and/2,domatch/3,domatch[Ite]/4,eqNatList/2,eqNatList[Ite]/5,notEmpty/1,prefix/2,strmatch/2} / {0/0 ,Cons/2,False/0,Nil/0,S/1,True/0} - Obligation: innermost runtime complexity wrt. defined symbols {!EQ,and,domatch,domatch[Ite],eqNatList,eqNatList[Ite] ,notEmpty,prefix,strmatch} and constructors {0,Cons,False,Nil,S,True} + Applied Processor: Ara {heuristics_ = NoHeuristics, minDegree = 1, maxDegree = 3, araTimeout = 60, araFindStrictRules = Nothing, araSmtSolver = Z3} + Details: Signatures used: ---------------- !EQ :: [A(0, 0) x A(0, 0)] -(0)-> A(12, 12) 0 :: [] -(0)-> A(0, 0) Cons :: [A(0, 0) x A(12, 9)] -(3)-> A(3, 9) Cons :: [A(0, 0) x A(8, 0)] -(8)-> A(8, 0) Cons :: [A(0, 0) x A(15, 3)] -(12)-> A(12, 3) Cons :: [A(0, 0) x A(8, 6)] -(2)-> A(2, 6) Cons :: [A(0, 0) x A(9, 8)] -(1)-> A(1, 8) Cons :: [A(0, 0) x A(0, 0)] -(0)-> A(0, 0) Cons :: [A(0, 0) x A(1, 0)] -(1)-> A(1, 0) Cons :: [A(0, 0) x A(9, 9)] -(0)-> A(0, 9) False :: [] -(0)-> A(7, 3) False :: [] -(0)-> A(3, 3) False :: [] -(0)-> A(9, 9) False :: [] -(0)-> A(15, 15) Nil :: [] -(0)-> A(3, 9) Nil :: [] -(0)-> A(8, 0) Nil :: [] -(0)-> A(2, 6) Nil :: [] -(0)-> A(12, 3) Nil :: [] -(0)-> A(1, 8) Nil :: [] -(0)-> A(1, 0) Nil :: [] -(0)-> A(0, 0) Nil :: [] -(0)-> A(7, 7) Nil :: [] -(0)-> A(7, 13) S :: [A(0, 0)] -(0)-> A(0, 0) True :: [] -(0)-> A(3, 3) True :: [] -(0)-> A(7, 3) True :: [] -(0)-> A(9, 9) True :: [] -(0)-> A(15, 15) and :: [A(7, 3) x A(3, 3)] -(0)-> A(15, 15) domatch :: [A(8, 0) x A(3, 9) x A(0, 0)] -(3)-> A(0, 0) domatch[Ite] :: [A(9, 9) x A(8, 0) x A(0, 9) x A(0, 0)] -(3)-> A(0, 0) eqNatList :: [A(12, 3) x A(2, 6)] -(4)-> A(14, 14) eqNatList[Ite] :: [A(9, 9) x A(0, 0) x A(7, 6) x A(0, 0) x A(15, 3)] -(12)-> A(14, 14) notEmpty :: [A(1, 8)] -(11)-> A(0, 0) prefix :: [A(0, 0) x A(1, 0)] -(1)-> A(12, 12) strmatch :: [A(14, 14) x A(10, 15)] -(15)-> A(0, 0) Cost-free Signatures used: -------------------------- !EQ :: [A_cf(0, 0) x A_cf(0, 0)] -(0)-> A_cf(13, 13) !EQ :: [A_cf(0, 0) x A_cf(0, 0)] -(0)-> A_cf(5, 5) !EQ :: [A_cf(0, 0) x A_cf(0, 0)] -(0)-> A_cf(0, 0) !EQ :: [A_cf(0, 0) x A_cf(0, 0)] -(0)-> A_cf(13, 11) 0 :: [] -(0)-> A_cf(0, 0) Cons :: [A_cf(0, 0) x A_cf(0, 0)] -(0)-> A_cf(0, 0) Cons :: [A_cf(0, 0) x A_cf(3, 3)] -(0)-> A_cf(0, 3) Cons :: [A_cf(0, 0) x A_cf(2, 2)] -(0)-> A_cf(0, 2) Cons :: [A_cf(0, 0) x A_cf(14, 14)] -(0)-> A_cf(0, 14) Cons :: [A_cf(0, 0) x A_cf(3, 0)] -(3)-> A_cf(3, 0) Cons :: [A_cf(0, 0) x A_cf(5, 5)] -(0)-> A_cf(0, 5) Cons :: [A_cf(0, 0) x A_cf(9, 6)] -(3)-> A_cf(3, 6) Cons :: [A_cf(0, 0) x A_cf(8, 8)] -(0)-> A_cf(0, 8) Cons :: [A_cf(0, 0) x A_cf(5, 0)] -(5)-> A_cf(5, 0) Cons :: [A_cf(0, 0) x A_cf(7, 6)] -(1)-> A_cf(1, 6) Cons :: [A_cf(0, 0) x A_cf(1, 1)] -(0)-> A_cf(0, 1) Cons :: [A_cf(0, 0) x A_cf(5, 4)] -(1)-> A_cf(1, 4) Cons :: [A_cf(0, 0) x A_cf(12, 12)] -(0)-> A_cf(0, 12) False :: [] -(0)-> A_cf(1, 1) False :: [] -(0)-> A_cf(15, 15) False :: [] -(0)-> A_cf(3, 3) False :: [] -(0)-> A_cf(15, 11) False :: [] -(0)-> A_cf(11, 11) False :: [] -(0)-> A_cf(0, 0) False :: [] -(0)-> A_cf(0, 1) False :: [] -(0)-> A_cf(7, 11) False :: [] -(0)-> A_cf(11, 15) False :: [] -(0)-> A_cf(3, 11) False :: [] -(0)-> A_cf(15, 13) False :: [] -(0)-> A_cf(1, 5) False :: [] -(0)-> A_cf(2, 2) Nil :: [] -(0)-> A_cf(0, 0) Nil :: [] -(0)-> A_cf(3, 3) Nil :: [] -(0)-> A_cf(11, 11) Nil :: [] -(0)-> A_cf(15, 11) Nil :: [] -(0)-> A_cf(15, 15) Nil :: [] -(0)-> A_cf(3, 0) Nil :: [] -(0)-> A_cf(3, 11) Nil :: [] -(0)-> A_cf(15, 13) Nil :: [] -(0)-> A_cf(5, 0) Nil :: [] -(0)-> A_cf(11, 13) S :: [A_cf(0, 0)] -(0)-> A_cf(0, 0) True :: [] -(0)-> A_cf(1, 1) True :: [] -(0)-> A_cf(3, 3) True :: [] -(0)-> A_cf(15, 15) True :: [] -(0)-> A_cf(15, 11) True :: [] -(0)-> A_cf(11, 11) True :: [] -(0)-> A_cf(0, 0) True :: [] -(0)-> A_cf(0, 1) True :: [] -(0)-> A_cf(11, 15) True :: [] -(0)-> A_cf(7, 11) True :: [] -(0)-> A_cf(3, 11) True :: [] -(0)-> A_cf(1, 5) True :: [] -(0)-> A_cf(2, 2) and :: [A_cf(1, 1) x A_cf(3, 3)] -(0)-> A_cf(12, 12) and :: [A_cf(1, 1) x A_cf(3, 3)] -(0)-> A_cf(12, 8) and :: [A_cf(0, 0) x A_cf(0, 0)] -(0)-> A_cf(0, 0) and :: [A_cf(1, 1) x A_cf(0, 1)] -(0)-> A_cf(10, 12) and :: [A_cf(1, 1) x A_cf(1, 1)] -(0)-> A_cf(6, 8) domatch :: [A_cf(0, 0) x A_cf(0, 0) x A_cf(0, 0)] -(0)-> A_cf(0, 0) domatch :: [A_cf(0, 0) x A_cf(3, 0) x A_cf(0, 0)] -(0)-> A_cf(0, 0) domatch :: [A_cf(0, 0) x A_cf(5, 0) x A_cf(0, 0)] -(0)-> A_cf(0, 0) domatch[Ite] :: [A_cf(1, 1) x A_cf(0, 0) x A_cf(0, 0) x A_cf(0, 0)] -(0)-> A_cf(0, 0) domatch[Ite] :: [A_cf(0, 1) x A_cf(0, 0) x A_cf(3, 0) x A_cf(0, 0)] -(0)-> A_cf(0, 0) domatch[Ite] :: [A_cf(1, 1) x A_cf(0, 0) x A_cf(5, 0) x A_cf(0, 0)] -(0)-> A_cf(0, 0) eqNatList :: [A_cf(0, 0) x A_cf(0, 0)] -(0)-> A_cf(0, 0) eqNatList :: [A_cf(3, 0) x A_cf(5, 0)] -(8)-> A_cf(0, 0) eqNatList[Ite] :: [A_cf(1, 1) x A_cf(0, 0) x A_cf(0, 0) x A_cf(0, 0) x A_cf(0, 0)] -(0)-> A_cf(0, 0) eqNatList[Ite] :: [A_cf(1, 5) x A_cf(0, 0) x A_cf(5, 0) x A_cf(0, 0) x A_cf(3, 0)] -(8)-> A_cf(0, 0) prefix :: [A_cf(0, 0) x A_cf(0, 0)] -(0)-> A_cf(12, 12) prefix :: [A_cf(0, 0) x A_cf(0, 0)] -(0)-> A_cf(12, 8) prefix :: [A_cf(0, 0) x A_cf(0, 0)] -(0)-> A_cf(0, 0) prefix :: [A_cf(0, 0) x A_cf(0, 0)] -(0)-> A_cf(4, 10) prefix :: [A_cf(0, 0) x A_cf(0, 0)] -(0)-> A_cf(3, 6) Base Constructor Signatures used: --------------------------------- 0_A :: [] -(0)-> A(1, 0) 0_A :: [] -(0)-> A(0, 1) Cons_A :: [A(0, 0) x A(1, 0)] -(1)-> A(1, 0) Cons_A :: [A(0, 0) x A(1, 1)] -(0)-> A(0, 1) False_A :: [] -(0)-> A(1, 0) False_A :: [] -(0)-> A(0, 1) Nil_A :: [] -(0)-> A(1, 0) Nil_A :: [] -(0)-> A(0, 1) S_A :: [A(0, 0)] -(0)-> A(1, 0) S_A :: [A(0, 0)] -(0)-> A(0, 1) True_A :: [] -(0)-> A(1, 0) True_A :: [] -(0)-> A(0, 1) * Step 2: Open MAYBE - Strict TRS: domatch(patcs,Cons(x,xs),n) -> domatch[Ite](prefix(patcs,Cons(x,xs)),patcs,Cons(x,xs),n) domatch(Cons(x,xs),Nil(),n) -> Nil() domatch(Nil(),Nil(),n) -> Cons(n,Nil()) eqNatList(Cons(x,xs),Cons(y,ys)) -> eqNatList[Ite](!EQ(x,y),y,ys,x,xs) eqNatList(Cons(x,xs),Nil()) -> False() eqNatList(Nil(),Cons(y,ys)) -> False() eqNatList(Nil(),Nil()) -> True() notEmpty(Cons(x,xs)) -> True() notEmpty(Nil()) -> False() prefix(Cons(x,xs),Nil()) -> False() prefix(Cons(x',xs'),Cons(x,xs)) -> and(!EQ(x',x),prefix(xs',xs)) prefix(Nil(),cs) -> True() strmatch(patstr,str) -> domatch(patstr,str,Nil()) - Weak TRS: !EQ(0(),0()) -> True() !EQ(0(),S(y)) -> False() !EQ(S(x),0()) -> False() !EQ(S(x),S(y)) -> !EQ(x,y) and(False(),False()) -> False() and(False(),True()) -> False() and(True(),False()) -> False() and(True(),True()) -> True() domatch[Ite](False(),patcs,Cons(x,xs),n) -> domatch(patcs,xs,Cons(n,Cons(Nil(),Nil()))) domatch[Ite](True(),patcs,Cons(x,xs),n) -> Cons(n,domatch(patcs,xs,Cons(n,Cons(Nil(),Nil())))) eqNatList[Ite](False(),y,ys,x,xs) -> False() eqNatList[Ite](True(),y,ys,x,xs) -> eqNatList(xs,ys) - Signature: {!EQ/2,and/2,domatch/3,domatch[Ite]/4,eqNatList/2,eqNatList[Ite]/5,notEmpty/1,prefix/2,strmatch/2} / {0/0 ,Cons/2,False/0,Nil/0,S/1,True/0} - Obligation: innermost runtime complexity wrt. defined symbols {!EQ,and,domatch,domatch[Ite],eqNatList,eqNatList[Ite] ,notEmpty,prefix,strmatch} and constructors {0,Cons,False,Nil,S,True} Following problems could not be solved: - Strict TRS: domatch(patcs,Cons(x,xs),n) -> domatch[Ite](prefix(patcs,Cons(x,xs)),patcs,Cons(x,xs),n) domatch(Cons(x,xs),Nil(),n) -> Nil() domatch(Nil(),Nil(),n) -> Cons(n,Nil()) eqNatList(Cons(x,xs),Cons(y,ys)) -> eqNatList[Ite](!EQ(x,y),y,ys,x,xs) eqNatList(Cons(x,xs),Nil()) -> False() eqNatList(Nil(),Cons(y,ys)) -> False() eqNatList(Nil(),Nil()) -> True() notEmpty(Cons(x,xs)) -> True() notEmpty(Nil()) -> False() prefix(Cons(x,xs),Nil()) -> False() prefix(Cons(x',xs'),Cons(x,xs)) -> and(!EQ(x',x),prefix(xs',xs)) prefix(Nil(),cs) -> True() strmatch(patstr,str) -> domatch(patstr,str,Nil()) - Weak TRS: !EQ(0(),0()) -> True() !EQ(0(),S(y)) -> False() !EQ(S(x),0()) -> False() !EQ(S(x),S(y)) -> !EQ(x,y) and(False(),False()) -> False() and(False(),True()) -> False() and(True(),False()) -> False() and(True(),True()) -> True() domatch[Ite](False(),patcs,Cons(x,xs),n) -> domatch(patcs,xs,Cons(n,Cons(Nil(),Nil()))) domatch[Ite](True(),patcs,Cons(x,xs),n) -> Cons(n,domatch(patcs,xs,Cons(n,Cons(Nil(),Nil())))) eqNatList[Ite](False(),y,ys,x,xs) -> False() eqNatList[Ite](True(),y,ys,x,xs) -> eqNatList(xs,ys) - Signature: {!EQ/2,and/2,domatch/3,domatch[Ite]/4,eqNatList/2,eqNatList[Ite]/5,notEmpty/1,prefix/2,strmatch/2} / {0/0 ,Cons/2,False/0,Nil/0,S/1,True/0} - Obligation: innermost runtime complexity wrt. defined symbols {!EQ,and,domatch,domatch[Ite],eqNatList,eqNatList[Ite] ,notEmpty,prefix,strmatch} and constructors {0,Cons,False,Nil,S,True} WORST_CASE(?,O(n^2))