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