* Step 1: ToInnermost WORST_CASE(?,O(1)) + Considered Problem: - Strict TRS: filter(cons(X),0(),M) -> cons(0()) filter(cons(X),s(N),M) -> cons(X) nats(N) -> cons(N) sieve(cons(0())) -> cons(0()) sieve(cons(s(N))) -> cons(s(N)) zprimes() -> sieve(nats(s(s(0())))) - Signature: {filter/3,nats/1,sieve/1,zprimes/0} / {0/0,cons/1,s/1} - Obligation: runtime complexity wrt. defined symbols {filter,nats,sieve,zprimes} and constructors {0,cons,s} + Applied Processor: ToInnermost + Details: switch to innermost, as the system is overlay and right linear and does not contain weak rules * Step 2: DependencyPairs WORST_CASE(?,O(1)) + Considered Problem: - Strict TRS: filter(cons(X),0(),M) -> cons(0()) filter(cons(X),s(N),M) -> cons(X) nats(N) -> cons(N) sieve(cons(0())) -> cons(0()) sieve(cons(s(N))) -> cons(s(N)) zprimes() -> sieve(nats(s(s(0())))) - Signature: {filter/3,nats/1,sieve/1,zprimes/0} / {0/0,cons/1,s/1} - Obligation: innermost runtime complexity wrt. defined symbols {filter,nats,sieve,zprimes} and constructors {0,cons,s} + Applied Processor: DependencyPairs {dpKind_ = DT} + Details: We add the following dependency tuples: Strict DPs filter#(cons(X),0(),M) -> c_1() filter#(cons(X),s(N),M) -> c_2() nats#(N) -> c_3() sieve#(cons(0())) -> c_4() sieve#(cons(s(N))) -> c_5() zprimes#() -> c_6(sieve#(nats(s(s(0())))),nats#(s(s(0())))) Weak DPs and mark the set of starting terms. * Step 3: UsableRules WORST_CASE(?,O(1)) + Considered Problem: - Strict DPs: filter#(cons(X),0(),M) -> c_1() filter#(cons(X),s(N),M) -> c_2() nats#(N) -> c_3() sieve#(cons(0())) -> c_4() sieve#(cons(s(N))) -> c_5() zprimes#() -> c_6(sieve#(nats(s(s(0())))),nats#(s(s(0())))) - Weak TRS: filter(cons(X),0(),M) -> cons(0()) filter(cons(X),s(N),M) -> cons(X) nats(N) -> cons(N) sieve(cons(0())) -> cons(0()) sieve(cons(s(N))) -> cons(s(N)) zprimes() -> sieve(nats(s(s(0())))) - Signature: {filter/3,nats/1,sieve/1,zprimes/0,filter#/3,nats#/1,sieve#/1,zprimes#/0} / {0/0,cons/1,s/1,c_1/0,c_2/0 ,c_3/0,c_4/0,c_5/0,c_6/2} - Obligation: innermost runtime complexity wrt. defined symbols {filter#,nats#,sieve#,zprimes#} and constructors {0,cons ,s} + Applied Processor: UsableRules + Details: We replace rewrite rules by usable rules: nats(N) -> cons(N) filter#(cons(X),0(),M) -> c_1() filter#(cons(X),s(N),M) -> c_2() nats#(N) -> c_3() sieve#(cons(0())) -> c_4() sieve#(cons(s(N))) -> c_5() zprimes#() -> c_6(sieve#(nats(s(s(0())))),nats#(s(s(0())))) * Step 4: Trivial WORST_CASE(?,O(1)) + Considered Problem: - Strict DPs: filter#(cons(X),0(),M) -> c_1() filter#(cons(X),s(N),M) -> c_2() nats#(N) -> c_3() sieve#(cons(0())) -> c_4() sieve#(cons(s(N))) -> c_5() zprimes#() -> c_6(sieve#(nats(s(s(0())))),nats#(s(s(0())))) - Weak TRS: nats(N) -> cons(N) - Signature: {filter/3,nats/1,sieve/1,zprimes/0,filter#/3,nats#/1,sieve#/1,zprimes#/0} / {0/0,cons/1,s/1,c_1/0,c_2/0 ,c_3/0,c_4/0,c_5/0,c_6/2} - Obligation: innermost runtime complexity wrt. defined symbols {filter#,nats#,sieve#,zprimes#} and constructors {0,cons ,s} + Applied Processor: Trivial + Details: Consider the dependency graph 1:S:filter#(cons(X),0(),M) -> c_1() 2:S:filter#(cons(X),s(N),M) -> c_2() 3:S:nats#(N) -> c_3() 4:S:sieve#(cons(0())) -> c_4() 5:S:sieve#(cons(s(N))) -> c_5() 6:S:zprimes#() -> c_6(sieve#(nats(s(s(0())))),nats#(s(s(0())))) -->_1 sieve#(cons(s(N))) -> c_5():5 -->_1 sieve#(cons(0())) -> c_4():4 -->_2 nats#(N) -> c_3():3 The dependency graph contains no loops, we remove all dependency pairs. * Step 5: EmptyProcessor WORST_CASE(?,O(1)) + Considered Problem: - Weak TRS: nats(N) -> cons(N) - Signature: {filter/3,nats/1,sieve/1,zprimes/0,filter#/3,nats#/1,sieve#/1,zprimes#/0} / {0/0,cons/1,s/1,c_1/0,c_2/0 ,c_3/0,c_4/0,c_5/0,c_6/2} - Obligation: innermost runtime complexity wrt. defined symbols {filter#,nats#,sieve#,zprimes#} and constructors {0,cons ,s} + Applied Processor: EmptyProcessor + Details: The problem is already closed. The intended complexity is O(1). WORST_CASE(?,O(1))