* 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))