MAYBE * Step 1: DependencyPairs MAYBE + Considered Problem: - Strict TRS: rev(++(x,y)) -> ++(rev1(x,y),rev2(x,y)) rev(nil()) -> nil() rev1(x,++(y,z)) -> rev1(y,z) rev1(x,nil()) -> x rev2(x,++(y,z)) -> rev(++(x,rev(rev2(y,z)))) rev2(x,nil()) -> nil() - Signature: {rev/1,rev1/2,rev2/2} / {++/2,nil/0} - Obligation: innermost runtime complexity wrt. defined symbols {rev,rev1,rev2} and constructors {++,nil} + Applied Processor: DependencyPairs {dpKind_ = DT} + Details: We add the following dependency tuples: Strict DPs rev#(++(x,y)) -> c_1(rev1#(x,y),rev2#(x,y)) rev#(nil()) -> c_2() rev1#(x,++(y,z)) -> c_3(rev1#(y,z)) rev1#(x,nil()) -> c_4() rev2#(x,++(y,z)) -> c_5(rev#(++(x,rev(rev2(y,z)))),rev#(rev2(y,z)),rev2#(y,z)) rev2#(x,nil()) -> c_6() Weak DPs and mark the set of starting terms. * Step 2: PredecessorEstimation MAYBE + Considered Problem: - Strict DPs: rev#(++(x,y)) -> c_1(rev1#(x,y),rev2#(x,y)) rev#(nil()) -> c_2() rev1#(x,++(y,z)) -> c_3(rev1#(y,z)) rev1#(x,nil()) -> c_4() rev2#(x,++(y,z)) -> c_5(rev#(++(x,rev(rev2(y,z)))),rev#(rev2(y,z)),rev2#(y,z)) rev2#(x,nil()) -> c_6() - Weak TRS: rev(++(x,y)) -> ++(rev1(x,y),rev2(x,y)) rev(nil()) -> nil() rev1(x,++(y,z)) -> rev1(y,z) rev1(x,nil()) -> x rev2(x,++(y,z)) -> rev(++(x,rev(rev2(y,z)))) rev2(x,nil()) -> nil() - Signature: {rev/1,rev1/2,rev2/2,rev#/1,rev1#/2,rev2#/2} / {++/2,nil/0,c_1/2,c_2/0,c_3/1,c_4/0,c_5/3,c_6/0} - Obligation: innermost runtime complexity wrt. defined symbols {rev#,rev1#,rev2#} and constructors {++,nil} + Applied Processor: PredecessorEstimation {onSelection = all simple predecessor estimation selector} + Details: We estimate the number of application of {2,4,6} by application of Pre({2,4,6}) = {1,3,5}. Here rules are labelled as follows: 1: rev#(++(x,y)) -> c_1(rev1#(x,y),rev2#(x,y)) 2: rev#(nil()) -> c_2() 3: rev1#(x,++(y,z)) -> c_3(rev1#(y,z)) 4: rev1#(x,nil()) -> c_4() 5: rev2#(x,++(y,z)) -> c_5(rev#(++(x,rev(rev2(y,z)))),rev#(rev2(y,z)),rev2#(y,z)) 6: rev2#(x,nil()) -> c_6() * Step 3: RemoveWeakSuffixes MAYBE + Considered Problem: - Strict DPs: rev#(++(x,y)) -> c_1(rev1#(x,y),rev2#(x,y)) rev1#(x,++(y,z)) -> c_3(rev1#(y,z)) rev2#(x,++(y,z)) -> c_5(rev#(++(x,rev(rev2(y,z)))),rev#(rev2(y,z)),rev2#(y,z)) - Weak DPs: rev#(nil()) -> c_2() rev1#(x,nil()) -> c_4() rev2#(x,nil()) -> c_6() - Weak TRS: rev(++(x,y)) -> ++(rev1(x,y),rev2(x,y)) rev(nil()) -> nil() rev1(x,++(y,z)) -> rev1(y,z) rev1(x,nil()) -> x rev2(x,++(y,z)) -> rev(++(x,rev(rev2(y,z)))) rev2(x,nil()) -> nil() - Signature: {rev/1,rev1/2,rev2/2,rev#/1,rev1#/2,rev2#/2} / {++/2,nil/0,c_1/2,c_2/0,c_3/1,c_4/0,c_5/3,c_6/0} - Obligation: innermost runtime complexity wrt. defined symbols {rev#,rev1#,rev2#} and constructors {++,nil} + Applied Processor: RemoveWeakSuffixes + Details: Consider the dependency graph 1:S:rev#(++(x,y)) -> c_1(rev1#(x,y),rev2#(x,y)) -->_2 rev2#(x,++(y,z)) -> c_5(rev#(++(x,rev(rev2(y,z)))),rev#(rev2(y,z)),rev2#(y,z)):3 -->_1 rev1#(x,++(y,z)) -> c_3(rev1#(y,z)):2 -->_2 rev2#(x,nil()) -> c_6():6 -->_1 rev1#(x,nil()) -> c_4():5 2:S:rev1#(x,++(y,z)) -> c_3(rev1#(y,z)) -->_1 rev1#(x,nil()) -> c_4():5 -->_1 rev1#(x,++(y,z)) -> c_3(rev1#(y,z)):2 3:S:rev2#(x,++(y,z)) -> c_5(rev#(++(x,rev(rev2(y,z)))),rev#(rev2(y,z)),rev2#(y,z)) -->_3 rev2#(x,nil()) -> c_6():6 -->_2 rev#(nil()) -> c_2():4 -->_3 rev2#(x,++(y,z)) -> c_5(rev#(++(x,rev(rev2(y,z)))),rev#(rev2(y,z)),rev2#(y,z)):3 -->_2 rev#(++(x,y)) -> c_1(rev1#(x,y),rev2#(x,y)):1 -->_1 rev#(++(x,y)) -> c_1(rev1#(x,y),rev2#(x,y)):1 4:W:rev#(nil()) -> c_2() 5:W:rev1#(x,nil()) -> c_4() 6:W:rev2#(x,nil()) -> c_6() The following weak DPs constitute a sub-graph of the DG that is closed under successors. The DPs are removed. 5: rev1#(x,nil()) -> c_4() 4: rev#(nil()) -> c_2() 6: rev2#(x,nil()) -> c_6() * Step 4: Failure MAYBE + Considered Problem: - Strict DPs: rev#(++(x,y)) -> c_1(rev1#(x,y),rev2#(x,y)) rev1#(x,++(y,z)) -> c_3(rev1#(y,z)) rev2#(x,++(y,z)) -> c_5(rev#(++(x,rev(rev2(y,z)))),rev#(rev2(y,z)),rev2#(y,z)) - Weak TRS: rev(++(x,y)) -> ++(rev1(x,y),rev2(x,y)) rev(nil()) -> nil() rev1(x,++(y,z)) -> rev1(y,z) rev1(x,nil()) -> x rev2(x,++(y,z)) -> rev(++(x,rev(rev2(y,z)))) rev2(x,nil()) -> nil() - Signature: {rev/1,rev1/2,rev2/2,rev#/1,rev1#/2,rev2#/2} / {++/2,nil/0,c_1/2,c_2/0,c_3/1,c_4/0,c_5/3,c_6/0} - Obligation: innermost runtime complexity wrt. defined symbols {rev#,rev1#,rev2#} and constructors {++,nil} + Applied Processor: EmptyProcessor + Details: The problem is still open. MAYBE