MAYBE * Step 1: InnermostRuleRemoval MAYBE + Considered Problem: - Strict TRS: activate(X) -> X activate(n__prod(X1,X2)) -> prod(X1,X2) activate(n__s(X)) -> s(X) add(0(),X) -> X add(s(X),Y) -> s(add(X,Y)) fact(X) -> if(zero(X),n__s(0()),n__prod(X,fact(p(X)))) if(false(),X,Y) -> activate(Y) if(true(),X,Y) -> activate(X) p(s(X)) -> X prod(X1,X2) -> n__prod(X1,X2) prod(0(),X) -> 0() prod(s(X),Y) -> add(Y,prod(X,Y)) s(X) -> n__s(X) zero(0()) -> true() zero(s(X)) -> false() - Signature: {activate/1,add/2,fact/1,if/3,p/1,prod/2,s/1,zero/1} / {0/0,false/0,n__prod/2,n__s/1,true/0} - Obligation: innermost runtime complexity wrt. defined symbols {activate,add,fact,if,p,prod,s,zero} and constructors {0 ,false,n__prod,n__s,true} + Applied Processor: InnermostRuleRemoval + Details: Arguments of following rules are not normal-forms. add(s(X),Y) -> s(add(X,Y)) p(s(X)) -> X prod(s(X),Y) -> add(Y,prod(X,Y)) zero(s(X)) -> false() All above mentioned rules can be savely removed. * Step 2: DependencyPairs MAYBE + Considered Problem: - Strict TRS: activate(X) -> X activate(n__prod(X1,X2)) -> prod(X1,X2) activate(n__s(X)) -> s(X) add(0(),X) -> X fact(X) -> if(zero(X),n__s(0()),n__prod(X,fact(p(X)))) if(false(),X,Y) -> activate(Y) if(true(),X,Y) -> activate(X) prod(X1,X2) -> n__prod(X1,X2) prod(0(),X) -> 0() s(X) -> n__s(X) zero(0()) -> true() - Signature: {activate/1,add/2,fact/1,if/3,p/1,prod/2,s/1,zero/1} / {0/0,false/0,n__prod/2,n__s/1,true/0} - Obligation: innermost runtime complexity wrt. defined symbols {activate,add,fact,if,p,prod,s,zero} and constructors {0 ,false,n__prod,n__s,true} + Applied Processor: DependencyPairs {dpKind_ = DT} + Details: We add the following dependency tuples: Strict DPs activate#(X) -> c_1() activate#(n__prod(X1,X2)) -> c_2(prod#(X1,X2)) activate#(n__s(X)) -> c_3(s#(X)) add#(0(),X) -> c_4() fact#(X) -> c_5(if#(zero(X),n__s(0()),n__prod(X,fact(p(X)))),zero#(X),fact#(p(X)),p#(X)) if#(false(),X,Y) -> c_6(activate#(Y)) if#(true(),X,Y) -> c_7(activate#(X)) prod#(X1,X2) -> c_8() prod#(0(),X) -> c_9() s#(X) -> c_10() zero#(0()) -> c_11() Weak DPs and mark the set of starting terms. * Step 3: UsableRules MAYBE + Considered Problem: - Strict DPs: activate#(X) -> c_1() activate#(n__prod(X1,X2)) -> c_2(prod#(X1,X2)) activate#(n__s(X)) -> c_3(s#(X)) add#(0(),X) -> c_4() fact#(X) -> c_5(if#(zero(X),n__s(0()),n__prod(X,fact(p(X)))),zero#(X),fact#(p(X)),p#(X)) if#(false(),X,Y) -> c_6(activate#(Y)) if#(true(),X,Y) -> c_7(activate#(X)) prod#(X1,X2) -> c_8() prod#(0(),X) -> c_9() s#(X) -> c_10() zero#(0()) -> c_11() - Weak TRS: activate(X) -> X activate(n__prod(X1,X2)) -> prod(X1,X2) activate(n__s(X)) -> s(X) add(0(),X) -> X fact(X) -> if(zero(X),n__s(0()),n__prod(X,fact(p(X)))) if(false(),X,Y) -> activate(Y) if(true(),X,Y) -> activate(X) prod(X1,X2) -> n__prod(X1,X2) prod(0(),X) -> 0() s(X) -> n__s(X) zero(0()) -> true() - Signature: {activate/1,add/2,fact/1,if/3,p/1,prod/2,s/1,zero/1,activate#/1,add#/2,fact#/1,if#/3,p#/1,prod#/2,s#/1 ,zero#/1} / {0/0,false/0,n__prod/2,n__s/1,true/0,c_1/0,c_2/1,c_3/1,c_4/0,c_5/4,c_6/1,c_7/1,c_8/0,c_9/0 ,c_10/0,c_11/0} - Obligation: innermost runtime complexity wrt. defined symbols {activate#,add#,fact#,if#,p#,prod#,s# ,zero#} and constructors {0,false,n__prod,n__s,true} + Applied Processor: UsableRules + Details: We replace rewrite rules by usable rules: activate(X) -> X activate(n__prod(X1,X2)) -> prod(X1,X2) activate(n__s(X)) -> s(X) fact(X) -> if(zero(X),n__s(0()),n__prod(X,fact(p(X)))) if(false(),X,Y) -> activate(Y) if(true(),X,Y) -> activate(X) prod(X1,X2) -> n__prod(X1,X2) prod(0(),X) -> 0() s(X) -> n__s(X) zero(0()) -> true() activate#(X) -> c_1() activate#(n__prod(X1,X2)) -> c_2(prod#(X1,X2)) activate#(n__s(X)) -> c_3(s#(X)) add#(0(),X) -> c_4() fact#(X) -> c_5(if#(zero(X),n__s(0()),n__prod(X,fact(p(X)))),zero#(X),fact#(p(X)),p#(X)) if#(false(),X,Y) -> c_6(activate#(Y)) if#(true(),X,Y) -> c_7(activate#(X)) prod#(X1,X2) -> c_8() prod#(0(),X) -> c_9() s#(X) -> c_10() zero#(0()) -> c_11() * Step 4: PredecessorEstimation MAYBE + Considered Problem: - Strict DPs: activate#(X) -> c_1() activate#(n__prod(X1,X2)) -> c_2(prod#(X1,X2)) activate#(n__s(X)) -> c_3(s#(X)) add#(0(),X) -> c_4() fact#(X) -> c_5(if#(zero(X),n__s(0()),n__prod(X,fact(p(X)))),zero#(X),fact#(p(X)),p#(X)) if#(false(),X,Y) -> c_6(activate#(Y)) if#(true(),X,Y) -> c_7(activate#(X)) prod#(X1,X2) -> c_8() prod#(0(),X) -> c_9() s#(X) -> c_10() zero#(0()) -> c_11() - Weak TRS: activate(X) -> X activate(n__prod(X1,X2)) -> prod(X1,X2) activate(n__s(X)) -> s(X) fact(X) -> if(zero(X),n__s(0()),n__prod(X,fact(p(X)))) if(false(),X,Y) -> activate(Y) if(true(),X,Y) -> activate(X) prod(X1,X2) -> n__prod(X1,X2) prod(0(),X) -> 0() s(X) -> n__s(X) zero(0()) -> true() - Signature: {activate/1,add/2,fact/1,if/3,p/1,prod/2,s/1,zero/1,activate#/1,add#/2,fact#/1,if#/3,p#/1,prod#/2,s#/1 ,zero#/1} / {0/0,false/0,n__prod/2,n__s/1,true/0,c_1/0,c_2/1,c_3/1,c_4/0,c_5/4,c_6/1,c_7/1,c_8/0,c_9/0 ,c_10/0,c_11/0} - Obligation: innermost runtime complexity wrt. defined symbols {activate#,add#,fact#,if#,p#,prod#,s# ,zero#} and constructors {0,false,n__prod,n__s,true} + Applied Processor: PredecessorEstimation {onSelection = all simple predecessor estimation selector} + Details: We estimate the number of application of {1,4,8,9,10,11} by application of Pre({1,4,8,9,10,11}) = {2,3,5,6,7}. Here rules are labelled as follows: 1: activate#(X) -> c_1() 2: activate#(n__prod(X1,X2)) -> c_2(prod#(X1,X2)) 3: activate#(n__s(X)) -> c_3(s#(X)) 4: add#(0(),X) -> c_4() 5: fact#(X) -> c_5(if#(zero(X),n__s(0()),n__prod(X,fact(p(X)))),zero#(X),fact#(p(X)),p#(X)) 6: if#(false(),X,Y) -> c_6(activate#(Y)) 7: if#(true(),X,Y) -> c_7(activate#(X)) 8: prod#(X1,X2) -> c_8() 9: prod#(0(),X) -> c_9() 10: s#(X) -> c_10() 11: zero#(0()) -> c_11() * Step 5: PredecessorEstimation MAYBE + Considered Problem: - Strict DPs: activate#(n__prod(X1,X2)) -> c_2(prod#(X1,X2)) activate#(n__s(X)) -> c_3(s#(X)) fact#(X) -> c_5(if#(zero(X),n__s(0()),n__prod(X,fact(p(X)))),zero#(X),fact#(p(X)),p#(X)) if#(false(),X,Y) -> c_6(activate#(Y)) if#(true(),X,Y) -> c_7(activate#(X)) - Weak DPs: activate#(X) -> c_1() add#(0(),X) -> c_4() prod#(X1,X2) -> c_8() prod#(0(),X) -> c_9() s#(X) -> c_10() zero#(0()) -> c_11() - Weak TRS: activate(X) -> X activate(n__prod(X1,X2)) -> prod(X1,X2) activate(n__s(X)) -> s(X) fact(X) -> if(zero(X),n__s(0()),n__prod(X,fact(p(X)))) if(false(),X,Y) -> activate(Y) if(true(),X,Y) -> activate(X) prod(X1,X2) -> n__prod(X1,X2) prod(0(),X) -> 0() s(X) -> n__s(X) zero(0()) -> true() - Signature: {activate/1,add/2,fact/1,if/3,p/1,prod/2,s/1,zero/1,activate#/1,add#/2,fact#/1,if#/3,p#/1,prod#/2,s#/1 ,zero#/1} / {0/0,false/0,n__prod/2,n__s/1,true/0,c_1/0,c_2/1,c_3/1,c_4/0,c_5/4,c_6/1,c_7/1,c_8/0,c_9/0 ,c_10/0,c_11/0} - Obligation: innermost runtime complexity wrt. defined symbols {activate#,add#,fact#,if#,p#,prod#,s# ,zero#} and constructors {0,false,n__prod,n__s,true} + Applied Processor: PredecessorEstimation {onSelection = all simple predecessor estimation selector} + Details: We estimate the number of application of {1,2} by application of Pre({1,2}) = {4,5}. Here rules are labelled as follows: 1: activate#(n__prod(X1,X2)) -> c_2(prod#(X1,X2)) 2: activate#(n__s(X)) -> c_3(s#(X)) 3: fact#(X) -> c_5(if#(zero(X),n__s(0()),n__prod(X,fact(p(X)))),zero#(X),fact#(p(X)),p#(X)) 4: if#(false(),X,Y) -> c_6(activate#(Y)) 5: if#(true(),X,Y) -> c_7(activate#(X)) 6: activate#(X) -> c_1() 7: add#(0(),X) -> c_4() 8: prod#(X1,X2) -> c_8() 9: prod#(0(),X) -> c_9() 10: s#(X) -> c_10() 11: zero#(0()) -> c_11() * Step 6: PredecessorEstimation MAYBE + Considered Problem: - Strict DPs: fact#(X) -> c_5(if#(zero(X),n__s(0()),n__prod(X,fact(p(X)))),zero#(X),fact#(p(X)),p#(X)) if#(false(),X,Y) -> c_6(activate#(Y)) if#(true(),X,Y) -> c_7(activate#(X)) - Weak DPs: activate#(X) -> c_1() activate#(n__prod(X1,X2)) -> c_2(prod#(X1,X2)) activate#(n__s(X)) -> c_3(s#(X)) add#(0(),X) -> c_4() prod#(X1,X2) -> c_8() prod#(0(),X) -> c_9() s#(X) -> c_10() zero#(0()) -> c_11() - Weak TRS: activate(X) -> X activate(n__prod(X1,X2)) -> prod(X1,X2) activate(n__s(X)) -> s(X) fact(X) -> if(zero(X),n__s(0()),n__prod(X,fact(p(X)))) if(false(),X,Y) -> activate(Y) if(true(),X,Y) -> activate(X) prod(X1,X2) -> n__prod(X1,X2) prod(0(),X) -> 0() s(X) -> n__s(X) zero(0()) -> true() - Signature: {activate/1,add/2,fact/1,if/3,p/1,prod/2,s/1,zero/1,activate#/1,add#/2,fact#/1,if#/3,p#/1,prod#/2,s#/1 ,zero#/1} / {0/0,false/0,n__prod/2,n__s/1,true/0,c_1/0,c_2/1,c_3/1,c_4/0,c_5/4,c_6/1,c_7/1,c_8/0,c_9/0 ,c_10/0,c_11/0} - Obligation: innermost runtime complexity wrt. defined symbols {activate#,add#,fact#,if#,p#,prod#,s# ,zero#} and constructors {0,false,n__prod,n__s,true} + Applied Processor: PredecessorEstimation {onSelection = all simple predecessor estimation selector} + Details: We estimate the number of application of {2,3} by application of Pre({2,3}) = {1}. Here rules are labelled as follows: 1: fact#(X) -> c_5(if#(zero(X),n__s(0()),n__prod(X,fact(p(X)))),zero#(X),fact#(p(X)),p#(X)) 2: if#(false(),X,Y) -> c_6(activate#(Y)) 3: if#(true(),X,Y) -> c_7(activate#(X)) 4: activate#(X) -> c_1() 5: activate#(n__prod(X1,X2)) -> c_2(prod#(X1,X2)) 6: activate#(n__s(X)) -> c_3(s#(X)) 7: add#(0(),X) -> c_4() 8: prod#(X1,X2) -> c_8() 9: prod#(0(),X) -> c_9() 10: s#(X) -> c_10() 11: zero#(0()) -> c_11() * Step 7: RemoveWeakSuffixes MAYBE + Considered Problem: - Strict DPs: fact#(X) -> c_5(if#(zero(X),n__s(0()),n__prod(X,fact(p(X)))),zero#(X),fact#(p(X)),p#(X)) - Weak DPs: activate#(X) -> c_1() activate#(n__prod(X1,X2)) -> c_2(prod#(X1,X2)) activate#(n__s(X)) -> c_3(s#(X)) add#(0(),X) -> c_4() if#(false(),X,Y) -> c_6(activate#(Y)) if#(true(),X,Y) -> c_7(activate#(X)) prod#(X1,X2) -> c_8() prod#(0(),X) -> c_9() s#(X) -> c_10() zero#(0()) -> c_11() - Weak TRS: activate(X) -> X activate(n__prod(X1,X2)) -> prod(X1,X2) activate(n__s(X)) -> s(X) fact(X) -> if(zero(X),n__s(0()),n__prod(X,fact(p(X)))) if(false(),X,Y) -> activate(Y) if(true(),X,Y) -> activate(X) prod(X1,X2) -> n__prod(X1,X2) prod(0(),X) -> 0() s(X) -> n__s(X) zero(0()) -> true() - Signature: {activate/1,add/2,fact/1,if/3,p/1,prod/2,s/1,zero/1,activate#/1,add#/2,fact#/1,if#/3,p#/1,prod#/2,s#/1 ,zero#/1} / {0/0,false/0,n__prod/2,n__s/1,true/0,c_1/0,c_2/1,c_3/1,c_4/0,c_5/4,c_6/1,c_7/1,c_8/0,c_9/0 ,c_10/0,c_11/0} - Obligation: innermost runtime complexity wrt. defined symbols {activate#,add#,fact#,if#,p#,prod#,s# ,zero#} and constructors {0,false,n__prod,n__s,true} + Applied Processor: RemoveWeakSuffixes + Details: Consider the dependency graph 1:S:fact#(X) -> c_5(if#(zero(X),n__s(0()),n__prod(X,fact(p(X)))),zero#(X),fact#(p(X)),p#(X)) -->_1 if#(true(),X,Y) -> c_7(activate#(X)):7 -->_1 if#(false(),X,Y) -> c_6(activate#(Y)):6 -->_2 zero#(0()) -> c_11():11 -->_3 fact#(X) -> c_5(if#(zero(X),n__s(0()),n__prod(X,fact(p(X)))),zero#(X),fact#(p(X)),p#(X)):1 2:W:activate#(X) -> c_1() 3:W:activate#(n__prod(X1,X2)) -> c_2(prod#(X1,X2)) -->_1 prod#(0(),X) -> c_9():9 -->_1 prod#(X1,X2) -> c_8():8 4:W:activate#(n__s(X)) -> c_3(s#(X)) -->_1 s#(X) -> c_10():10 5:W:add#(0(),X) -> c_4() 6:W:if#(false(),X,Y) -> c_6(activate#(Y)) -->_1 activate#(n__s(X)) -> c_3(s#(X)):4 -->_1 activate#(n__prod(X1,X2)) -> c_2(prod#(X1,X2)):3 -->_1 activate#(X) -> c_1():2 7:W:if#(true(),X,Y) -> c_7(activate#(X)) -->_1 activate#(n__s(X)) -> c_3(s#(X)):4 -->_1 activate#(n__prod(X1,X2)) -> c_2(prod#(X1,X2)):3 -->_1 activate#(X) -> c_1():2 8:W:prod#(X1,X2) -> c_8() 9:W:prod#(0(),X) -> c_9() 10:W:s#(X) -> c_10() 11:W:zero#(0()) -> c_11() The following weak DPs constitute a sub-graph of the DG that is closed under successors. The DPs are removed. 5: add#(0(),X) -> c_4() 11: zero#(0()) -> c_11() 6: if#(false(),X,Y) -> c_6(activate#(Y)) 7: if#(true(),X,Y) -> c_7(activate#(X)) 2: activate#(X) -> c_1() 3: activate#(n__prod(X1,X2)) -> c_2(prod#(X1,X2)) 8: prod#(X1,X2) -> c_8() 9: prod#(0(),X) -> c_9() 4: activate#(n__s(X)) -> c_3(s#(X)) 10: s#(X) -> c_10() * Step 8: SimplifyRHS MAYBE + Considered Problem: - Strict DPs: fact#(X) -> c_5(if#(zero(X),n__s(0()),n__prod(X,fact(p(X)))),zero#(X),fact#(p(X)),p#(X)) - Weak TRS: activate(X) -> X activate(n__prod(X1,X2)) -> prod(X1,X2) activate(n__s(X)) -> s(X) fact(X) -> if(zero(X),n__s(0()),n__prod(X,fact(p(X)))) if(false(),X,Y) -> activate(Y) if(true(),X,Y) -> activate(X) prod(X1,X2) -> n__prod(X1,X2) prod(0(),X) -> 0() s(X) -> n__s(X) zero(0()) -> true() - Signature: {activate/1,add/2,fact/1,if/3,p/1,prod/2,s/1,zero/1,activate#/1,add#/2,fact#/1,if#/3,p#/1,prod#/2,s#/1 ,zero#/1} / {0/0,false/0,n__prod/2,n__s/1,true/0,c_1/0,c_2/1,c_3/1,c_4/0,c_5/4,c_6/1,c_7/1,c_8/0,c_9/0 ,c_10/0,c_11/0} - Obligation: innermost runtime complexity wrt. defined symbols {activate#,add#,fact#,if#,p#,prod#,s# ,zero#} and constructors {0,false,n__prod,n__s,true} + Applied Processor: SimplifyRHS + Details: Consider the dependency graph 1:S:fact#(X) -> c_5(if#(zero(X),n__s(0()),n__prod(X,fact(p(X)))),zero#(X),fact#(p(X)),p#(X)) -->_3 fact#(X) -> c_5(if#(zero(X),n__s(0()),n__prod(X,fact(p(X)))),zero#(X),fact#(p(X)),p#(X)):1 Due to missing edges in the depndency graph, the right-hand sides of following rules could be simplified: fact#(X) -> c_5(fact#(p(X))) * Step 9: UsableRules MAYBE + Considered Problem: - Strict DPs: fact#(X) -> c_5(fact#(p(X))) - Weak TRS: activate(X) -> X activate(n__prod(X1,X2)) -> prod(X1,X2) activate(n__s(X)) -> s(X) fact(X) -> if(zero(X),n__s(0()),n__prod(X,fact(p(X)))) if(false(),X,Y) -> activate(Y) if(true(),X,Y) -> activate(X) prod(X1,X2) -> n__prod(X1,X2) prod(0(),X) -> 0() s(X) -> n__s(X) zero(0()) -> true() - Signature: {activate/1,add/2,fact/1,if/3,p/1,prod/2,s/1,zero/1,activate#/1,add#/2,fact#/1,if#/3,p#/1,prod#/2,s#/1 ,zero#/1} / {0/0,false/0,n__prod/2,n__s/1,true/0,c_1/0,c_2/1,c_3/1,c_4/0,c_5/1,c_6/1,c_7/1,c_8/0,c_9/0 ,c_10/0,c_11/0} - Obligation: innermost runtime complexity wrt. defined symbols {activate#,add#,fact#,if#,p#,prod#,s# ,zero#} and constructors {0,false,n__prod,n__s,true} + Applied Processor: UsableRules + Details: We replace rewrite rules by usable rules: fact#(X) -> c_5(fact#(p(X))) * Step 10: Failure MAYBE + Considered Problem: - Strict DPs: fact#(X) -> c_5(fact#(p(X))) - Signature: {activate/1,add/2,fact/1,if/3,p/1,prod/2,s/1,zero/1,activate#/1,add#/2,fact#/1,if#/3,p#/1,prod#/2,s#/1 ,zero#/1} / {0/0,false/0,n__prod/2,n__s/1,true/0,c_1/0,c_2/1,c_3/1,c_4/0,c_5/1,c_6/1,c_7/1,c_8/0,c_9/0 ,c_10/0,c_11/0} - Obligation: innermost runtime complexity wrt. defined symbols {activate#,add#,fact#,if#,p#,prod#,s# ,zero#} and constructors {0,false,n__prod,n__s,true} + Applied Processor: EmptyProcessor + Details: The problem is still open. MAYBE