*** 1 Progress [(O(1),O(n^2))]  ***
    Considered Problem:
      Strict DP Rules:
        
      Strict TRS Rules:
        a__filter(X1,X2,X3) -> filter(X1,X2,X3)
        a__filter(cons(X,Y),0(),M) -> cons(0(),filter(Y,M,M))
        a__filter(cons(X,Y),s(N),M) -> cons(mark(X),filter(Y,N,M))
        a__nats(N) -> cons(mark(N),nats(s(N)))
        a__nats(X) -> nats(X)
        a__sieve(X) -> sieve(X)
        a__sieve(cons(0(),Y)) -> cons(0(),sieve(Y))
        a__sieve(cons(s(N),Y)) -> cons(s(mark(N)),sieve(filter(Y,N,N)))
        a__zprimes() -> a__sieve(a__nats(s(s(0()))))
        a__zprimes() -> zprimes()
        mark(0()) -> 0()
        mark(cons(X1,X2)) -> cons(mark(X1),X2)
        mark(filter(X1,X2,X3)) -> a__filter(mark(X1),mark(X2),mark(X3))
        mark(nats(X)) -> a__nats(mark(X))
        mark(s(X)) -> s(mark(X))
        mark(sieve(X)) -> a__sieve(mark(X))
        mark(zprimes()) -> a__zprimes()
      Weak DP Rules:
        
      Weak TRS Rules:
        
      Signature:
        {a__filter/3,a__nats/1,a__sieve/1,a__zprimes/0,mark/1} / {0/0,cons/2,filter/3,nats/1,s/1,sieve/1,zprimes/0}
      Obligation:
        Innermost
        basic terms: {a__filter,a__nats,a__sieve,a__zprimes,mark}/{0,cons,filter,nats,s,sieve,zprimes}
    Applied Processor:
      WeightGap {wgDimension = 1, wgDegree = 1, wgKind = Algebraic, wgUArgs = UArgs, wgOn = WgOnAny}
    Proof:
      The weightgap principle applies using the following nonconstant growth matrix-interpretation:
        We apply a matrix interpretation of kind constructor based matrix interpretation:
        The following argument positions are considered usable:
          uargs(a__filter) = {1,2,3},
          uargs(a__nats) = {1},
          uargs(a__sieve) = {1},
          uargs(cons) = {1},
          uargs(s) = {1}
        
        Following symbols are considered usable:
          {}
        TcT has computed the following interpretation:
                   p(0) = [0]                           
           p(a__filter) = [1] x1 + [1] x2 + [1] x3 + [0]
             p(a__nats) = [1] x1 + [0]                  
            p(a__sieve) = [1] x1 + [0]                  
          p(a__zprimes) = [0]                           
                p(cons) = [1] x1 + [0]                  
              p(filter) = [1] x1 + [1] x2 + [1] x3 + [0]
                p(mark) = [1] x1 + [1]                  
                p(nats) = [1] x1 + [0]                  
                   p(s) = [1] x1 + [0]                  
               p(sieve) = [1] x1 + [0]                  
             p(zprimes) = [0]                           
        
        Following rules are strictly oriented:
              mark(0()) = [1]         
                        > [0]         
                        = 0()         
        
        mark(zprimes()) = [1]         
                        > [0]         
                        = a__zprimes()
        
        
        Following rules are (at-least) weakly oriented:
                a__filter(X1,X2,X3) =  [1] X1 + [1] X2 + [1] X3 + [0]
                                    >= [1] X1 + [1] X2 + [1] X3 + [0]
                                    =  filter(X1,X2,X3)              
        
         a__filter(cons(X,Y),0(),M) =  [1] M + [1] X + [0]           
                                    >= [0]                           
                                    =  cons(0(),filter(Y,M,M))       
        
        a__filter(cons(X,Y),s(N),M) =  [1] M + [1] N + [1] X + [0]   
                                    >= [1] X + [1]                   
                                    =  cons(mark(X),filter(Y,N,M))   
        
                         a__nats(N) =  [1] N + [0]                   
                                    >= [1] N + [1]                   
                                    =  cons(mark(N),nats(s(N)))      
        
                         a__nats(X) =  [1] X + [0]                   
                                    >= [1] X + [0]                   
                                    =  nats(X)                       
        
                        a__sieve(X) =  [1] X + [0]                   
                                    >= [1] X + [0]                   
                                    =  sieve(X)                      
        
              a__sieve(cons(0(),Y)) =  [0]                           
                                    >= [0]                           
                                    =  cons(0(),sieve(Y))            
        
             a__sieve(cons(s(N),Y)) =  [1] N + [0]                   
                                    >= [1] N + [1]                   
                                    =  cons(s(mark(N))               
                                           ,sieve(filter(Y,N,N)))    
        
                       a__zprimes() =  [0]                           
                                    >= [0]                           
                                    =  a__sieve(a__nats(s(s(0()))))  
        
                       a__zprimes() =  [0]                           
                                    >= [0]                           
                                    =  zprimes()                     
        
                  mark(cons(X1,X2)) =  [1] X1 + [1]                  
                                    >= [1] X1 + [1]                  
                                    =  cons(mark(X1),X2)             
        
             mark(filter(X1,X2,X3)) =  [1] X1 + [1] X2 + [1] X3 + [1]
                                    >= [1] X1 + [1] X2 + [1] X3 + [3]
                                    =  a__filter(mark(X1)            
                                                ,mark(X2)            
                                                ,mark(X3))           
        
                      mark(nats(X)) =  [1] X + [1]                   
                                    >= [1] X + [1]                   
                                    =  a__nats(mark(X))              
        
                         mark(s(X)) =  [1] X + [1]                   
                                    >= [1] X + [1]                   
                                    =  s(mark(X))                    
        
                     mark(sieve(X)) =  [1] X + [1]                   
                                    >= [1] X + [1]                   
                                    =  a__sieve(mark(X))             
        
      Further, it can be verified that all rules not oriented are covered by the weightgap condition.
*** 1.1 Progress [(O(1),O(n^2))]  ***
    Considered Problem:
      Strict DP Rules:
        
      Strict TRS Rules:
        a__filter(X1,X2,X3) -> filter(X1,X2,X3)
        a__filter(cons(X,Y),0(),M) -> cons(0(),filter(Y,M,M))
        a__filter(cons(X,Y),s(N),M) -> cons(mark(X),filter(Y,N,M))
        a__nats(N) -> cons(mark(N),nats(s(N)))
        a__nats(X) -> nats(X)
        a__sieve(X) -> sieve(X)
        a__sieve(cons(0(),Y)) -> cons(0(),sieve(Y))
        a__sieve(cons(s(N),Y)) -> cons(s(mark(N)),sieve(filter(Y,N,N)))
        a__zprimes() -> a__sieve(a__nats(s(s(0()))))
        a__zprimes() -> zprimes()
        mark(cons(X1,X2)) -> cons(mark(X1),X2)
        mark(filter(X1,X2,X3)) -> a__filter(mark(X1),mark(X2),mark(X3))
        mark(nats(X)) -> a__nats(mark(X))
        mark(s(X)) -> s(mark(X))
        mark(sieve(X)) -> a__sieve(mark(X))
      Weak DP Rules:
        
      Weak TRS Rules:
        mark(0()) -> 0()
        mark(zprimes()) -> a__zprimes()
      Signature:
        {a__filter/3,a__nats/1,a__sieve/1,a__zprimes/0,mark/1} / {0/0,cons/2,filter/3,nats/1,s/1,sieve/1,zprimes/0}
      Obligation:
        Innermost
        basic terms: {a__filter,a__nats,a__sieve,a__zprimes,mark}/{0,cons,filter,nats,s,sieve,zprimes}
    Applied Processor:
      WeightGap {wgDimension = 1, wgDegree = 1, wgKind = Algebraic, wgUArgs = UArgs, wgOn = WgOnAny}
    Proof:
      The weightgap principle applies using the following nonconstant growth matrix-interpretation:
        We apply a matrix interpretation of kind constructor based matrix interpretation:
        The following argument positions are considered usable:
          uargs(a__filter) = {1,2,3},
          uargs(a__nats) = {1},
          uargs(a__sieve) = {1},
          uargs(cons) = {1},
          uargs(s) = {1}
        
        Following symbols are considered usable:
          {}
        TcT has computed the following interpretation:
                   p(0) = [0]                           
           p(a__filter) = [1] x1 + [1] x2 + [1] x3 + [0]
             p(a__nats) = [1] x1 + [0]                  
            p(a__sieve) = [1] x1 + [0]                  
          p(a__zprimes) = [0]                           
                p(cons) = [1] x1 + [0]                  
              p(filter) = [1] x1 + [1] x2 + [1] x3 + [0]
                p(mark) = [1] x1 + [0]                  
                p(nats) = [1] x1 + [0]                  
                   p(s) = [1] x1 + [0]                  
               p(sieve) = [1] x1 + [7]                  
             p(zprimes) = [0]                           
        
        Following rules are strictly oriented:
        mark(sieve(X)) = [1] X + [7]      
                       > [1] X + [0]      
                       = a__sieve(mark(X))
        
        
        Following rules are (at-least) weakly oriented:
                a__filter(X1,X2,X3) =  [1] X1 + [1] X2 + [1] X3 + [0]
                                    >= [1] X1 + [1] X2 + [1] X3 + [0]
                                    =  filter(X1,X2,X3)              
        
         a__filter(cons(X,Y),0(),M) =  [1] M + [1] X + [0]           
                                    >= [0]                           
                                    =  cons(0(),filter(Y,M,M))       
        
        a__filter(cons(X,Y),s(N),M) =  [1] M + [1] N + [1] X + [0]   
                                    >= [1] X + [0]                   
                                    =  cons(mark(X),filter(Y,N,M))   
        
                         a__nats(N) =  [1] N + [0]                   
                                    >= [1] N + [0]                   
                                    =  cons(mark(N),nats(s(N)))      
        
                         a__nats(X) =  [1] X + [0]                   
                                    >= [1] X + [0]                   
                                    =  nats(X)                       
        
                        a__sieve(X) =  [1] X + [0]                   
                                    >= [1] X + [7]                   
                                    =  sieve(X)                      
        
              a__sieve(cons(0(),Y)) =  [0]                           
                                    >= [0]                           
                                    =  cons(0(),sieve(Y))            
        
             a__sieve(cons(s(N),Y)) =  [1] N + [0]                   
                                    >= [1] N + [0]                   
                                    =  cons(s(mark(N))               
                                           ,sieve(filter(Y,N,N)))    
        
                       a__zprimes() =  [0]                           
                                    >= [0]                           
                                    =  a__sieve(a__nats(s(s(0()))))  
        
                       a__zprimes() =  [0]                           
                                    >= [0]                           
                                    =  zprimes()                     
        
                          mark(0()) =  [0]                           
                                    >= [0]                           
                                    =  0()                           
        
                  mark(cons(X1,X2)) =  [1] X1 + [0]                  
                                    >= [1] X1 + [0]                  
                                    =  cons(mark(X1),X2)             
        
             mark(filter(X1,X2,X3)) =  [1] X1 + [1] X2 + [1] X3 + [0]
                                    >= [1] X1 + [1] X2 + [1] X3 + [0]
                                    =  a__filter(mark(X1)            
                                                ,mark(X2)            
                                                ,mark(X3))           
        
                      mark(nats(X)) =  [1] X + [0]                   
                                    >= [1] X + [0]                   
                                    =  a__nats(mark(X))              
        
                         mark(s(X)) =  [1] X + [0]                   
                                    >= [1] X + [0]                   
                                    =  s(mark(X))                    
        
                    mark(zprimes()) =  [0]                           
                                    >= [0]                           
                                    =  a__zprimes()                  
        
      Further, it can be verified that all rules not oriented are covered by the weightgap condition.
*** 1.1.1 Progress [(O(1),O(n^2))]  ***
    Considered Problem:
      Strict DP Rules:
        
      Strict TRS Rules:
        a__filter(X1,X2,X3) -> filter(X1,X2,X3)
        a__filter(cons(X,Y),0(),M) -> cons(0(),filter(Y,M,M))
        a__filter(cons(X,Y),s(N),M) -> cons(mark(X),filter(Y,N,M))
        a__nats(N) -> cons(mark(N),nats(s(N)))
        a__nats(X) -> nats(X)
        a__sieve(X) -> sieve(X)
        a__sieve(cons(0(),Y)) -> cons(0(),sieve(Y))
        a__sieve(cons(s(N),Y)) -> cons(s(mark(N)),sieve(filter(Y,N,N)))
        a__zprimes() -> a__sieve(a__nats(s(s(0()))))
        a__zprimes() -> zprimes()
        mark(cons(X1,X2)) -> cons(mark(X1),X2)
        mark(filter(X1,X2,X3)) -> a__filter(mark(X1),mark(X2),mark(X3))
        mark(nats(X)) -> a__nats(mark(X))
        mark(s(X)) -> s(mark(X))
      Weak DP Rules:
        
      Weak TRS Rules:
        mark(0()) -> 0()
        mark(sieve(X)) -> a__sieve(mark(X))
        mark(zprimes()) -> a__zprimes()
      Signature:
        {a__filter/3,a__nats/1,a__sieve/1,a__zprimes/0,mark/1} / {0/0,cons/2,filter/3,nats/1,s/1,sieve/1,zprimes/0}
      Obligation:
        Innermost
        basic terms: {a__filter,a__nats,a__sieve,a__zprimes,mark}/{0,cons,filter,nats,s,sieve,zprimes}
    Applied Processor:
      WeightGap {wgDimension = 1, wgDegree = 1, wgKind = Algebraic, wgUArgs = UArgs, wgOn = WgOnAny}
    Proof:
      The weightgap principle applies using the following nonconstant growth matrix-interpretation:
        We apply a matrix interpretation of kind constructor based matrix interpretation:
        The following argument positions are considered usable:
          uargs(a__filter) = {1,2,3},
          uargs(a__nats) = {1},
          uargs(a__sieve) = {1},
          uargs(cons) = {1},
          uargs(s) = {1}
        
        Following symbols are considered usable:
          {}
        TcT has computed the following interpretation:
                   p(0) = [5]                           
           p(a__filter) = [1] x1 + [1] x2 + [1] x3 + [3]
             p(a__nats) = [1] x1 + [0]                  
            p(a__sieve) = [1] x1 + [0]                  
          p(a__zprimes) = [1]                           
                p(cons) = [1] x1 + [0]                  
              p(filter) = [1] x1 + [1] x2 + [1] x3 + [7]
                p(mark) = [1] x1 + [1]                  
                p(nats) = [1] x1 + [0]                  
                   p(s) = [1] x1 + [0]                  
               p(sieve) = [1] x1 + [0]                  
             p(zprimes) = [0]                           
        
        Following rules are strictly oriented:
         a__filter(cons(X,Y),0(),M) = [1] M + [1] X + [8]           
                                    > [5]                           
                                    = cons(0(),filter(Y,M,M))       
        
        a__filter(cons(X,Y),s(N),M) = [1] M + [1] N + [1] X + [3]   
                                    > [1] X + [1]                   
                                    = cons(mark(X),filter(Y,N,M))   
        
                       a__zprimes() = [1]                           
                                    > [0]                           
                                    = zprimes()                     
        
             mark(filter(X1,X2,X3)) = [1] X1 + [1] X2 + [1] X3 + [8]
                                    > [1] X1 + [1] X2 + [1] X3 + [6]
                                    = a__filter(mark(X1)            
                                               ,mark(X2)            
                                               ,mark(X3))           
        
        
        Following rules are (at-least) weakly oriented:
           a__filter(X1,X2,X3) =  [1] X1 + [1] X2 + [1] X3 + [3]
                               >= [1] X1 + [1] X2 + [1] X3 + [7]
                               =  filter(X1,X2,X3)              
        
                    a__nats(N) =  [1] N + [0]                   
                               >= [1] N + [1]                   
                               =  cons(mark(N),nats(s(N)))      
        
                    a__nats(X) =  [1] X + [0]                   
                               >= [1] X + [0]                   
                               =  nats(X)                       
        
                   a__sieve(X) =  [1] X + [0]                   
                               >= [1] X + [0]                   
                               =  sieve(X)                      
        
         a__sieve(cons(0(),Y)) =  [5]                           
                               >= [5]                           
                               =  cons(0(),sieve(Y))            
        
        a__sieve(cons(s(N),Y)) =  [1] N + [0]                   
                               >= [1] N + [1]                   
                               =  cons(s(mark(N))               
                                      ,sieve(filter(Y,N,N)))    
        
                  a__zprimes() =  [1]                           
                               >= [5]                           
                               =  a__sieve(a__nats(s(s(0()))))  
        
                     mark(0()) =  [6]                           
                               >= [5]                           
                               =  0()                           
        
             mark(cons(X1,X2)) =  [1] X1 + [1]                  
                               >= [1] X1 + [1]                  
                               =  cons(mark(X1),X2)             
        
                 mark(nats(X)) =  [1] X + [1]                   
                               >= [1] X + [1]                   
                               =  a__nats(mark(X))              
        
                    mark(s(X)) =  [1] X + [1]                   
                               >= [1] X + [1]                   
                               =  s(mark(X))                    
        
                mark(sieve(X)) =  [1] X + [1]                   
                               >= [1] X + [1]                   
                               =  a__sieve(mark(X))             
        
               mark(zprimes()) =  [1]                           
                               >= [1]                           
                               =  a__zprimes()                  
        
      Further, it can be verified that all rules not oriented are covered by the weightgap condition.
*** 1.1.1.1 Progress [(O(1),O(n^2))]  ***
    Considered Problem:
      Strict DP Rules:
        
      Strict TRS Rules:
        a__filter(X1,X2,X3) -> filter(X1,X2,X3)
        a__nats(N) -> cons(mark(N),nats(s(N)))
        a__nats(X) -> nats(X)
        a__sieve(X) -> sieve(X)
        a__sieve(cons(0(),Y)) -> cons(0(),sieve(Y))
        a__sieve(cons(s(N),Y)) -> cons(s(mark(N)),sieve(filter(Y,N,N)))
        a__zprimes() -> a__sieve(a__nats(s(s(0()))))
        mark(cons(X1,X2)) -> cons(mark(X1),X2)
        mark(nats(X)) -> a__nats(mark(X))
        mark(s(X)) -> s(mark(X))
      Weak DP Rules:
        
      Weak TRS Rules:
        a__filter(cons(X,Y),0(),M) -> cons(0(),filter(Y,M,M))
        a__filter(cons(X,Y),s(N),M) -> cons(mark(X),filter(Y,N,M))
        a__zprimes() -> zprimes()
        mark(0()) -> 0()
        mark(filter(X1,X2,X3)) -> a__filter(mark(X1),mark(X2),mark(X3))
        mark(sieve(X)) -> a__sieve(mark(X))
        mark(zprimes()) -> a__zprimes()
      Signature:
        {a__filter/3,a__nats/1,a__sieve/1,a__zprimes/0,mark/1} / {0/0,cons/2,filter/3,nats/1,s/1,sieve/1,zprimes/0}
      Obligation:
        Innermost
        basic terms: {a__filter,a__nats,a__sieve,a__zprimes,mark}/{0,cons,filter,nats,s,sieve,zprimes}
    Applied Processor:
      WeightGap {wgDimension = 1, wgDegree = 1, wgKind = Algebraic, wgUArgs = UArgs, wgOn = WgOnAny}
    Proof:
      The weightgap principle applies using the following nonconstant growth matrix-interpretation:
        We apply a matrix interpretation of kind constructor based matrix interpretation:
        The following argument positions are considered usable:
          uargs(a__filter) = {1,2,3},
          uargs(a__nats) = {1},
          uargs(a__sieve) = {1},
          uargs(cons) = {1},
          uargs(s) = {1}
        
        Following symbols are considered usable:
          {}
        TcT has computed the following interpretation:
                   p(0) = [1]                           
           p(a__filter) = [1] x1 + [1] x2 + [1] x3 + [0]
             p(a__nats) = [1] x1 + [0]                  
            p(a__sieve) = [1] x1 + [0]                  
          p(a__zprimes) = [3]                           
                p(cons) = [1] x1 + [4]                  
              p(filter) = [1] x1 + [1] x2 + [1] x3 + [0]
                p(mark) = [1] x1 + [0]                  
                p(nats) = [1] x1 + [6]                  
                   p(s) = [1] x1 + [3]                  
               p(sieve) = [1] x1 + [0]                  
             p(zprimes) = [3]                           
        
        Following rules are strictly oriented:
        mark(nats(X)) = [1] X + [6]     
                      > [1] X + [0]     
                      = a__nats(mark(X))
        
        
        Following rules are (at-least) weakly oriented:
                a__filter(X1,X2,X3) =  [1] X1 + [1] X2 + [1] X3 + [0]
                                    >= [1] X1 + [1] X2 + [1] X3 + [0]
                                    =  filter(X1,X2,X3)              
        
         a__filter(cons(X,Y),0(),M) =  [1] M + [1] X + [5]           
                                    >= [5]                           
                                    =  cons(0(),filter(Y,M,M))       
        
        a__filter(cons(X,Y),s(N),M) =  [1] M + [1] N + [1] X + [7]   
                                    >= [1] X + [4]                   
                                    =  cons(mark(X),filter(Y,N,M))   
        
                         a__nats(N) =  [1] N + [0]                   
                                    >= [1] N + [4]                   
                                    =  cons(mark(N),nats(s(N)))      
        
                         a__nats(X) =  [1] X + [0]                   
                                    >= [1] X + [6]                   
                                    =  nats(X)                       
        
                        a__sieve(X) =  [1] X + [0]                   
                                    >= [1] X + [0]                   
                                    =  sieve(X)                      
        
              a__sieve(cons(0(),Y)) =  [5]                           
                                    >= [5]                           
                                    =  cons(0(),sieve(Y))            
        
             a__sieve(cons(s(N),Y)) =  [1] N + [7]                   
                                    >= [1] N + [7]                   
                                    =  cons(s(mark(N))               
                                           ,sieve(filter(Y,N,N)))    
        
                       a__zprimes() =  [3]                           
                                    >= [7]                           
                                    =  a__sieve(a__nats(s(s(0()))))  
        
                       a__zprimes() =  [3]                           
                                    >= [3]                           
                                    =  zprimes()                     
        
                          mark(0()) =  [1]                           
                                    >= [1]                           
                                    =  0()                           
        
                  mark(cons(X1,X2)) =  [1] X1 + [4]                  
                                    >= [1] X1 + [4]                  
                                    =  cons(mark(X1),X2)             
        
             mark(filter(X1,X2,X3)) =  [1] X1 + [1] X2 + [1] X3 + [0]
                                    >= [1] X1 + [1] X2 + [1] X3 + [0]
                                    =  a__filter(mark(X1)            
                                                ,mark(X2)            
                                                ,mark(X3))           
        
                         mark(s(X)) =  [1] X + [3]                   
                                    >= [1] X + [3]                   
                                    =  s(mark(X))                    
        
                     mark(sieve(X)) =  [1] X + [0]                   
                                    >= [1] X + [0]                   
                                    =  a__sieve(mark(X))             
        
                    mark(zprimes()) =  [3]                           
                                    >= [3]                           
                                    =  a__zprimes()                  
        
      Further, it can be verified that all rules not oriented are covered by the weightgap condition.
*** 1.1.1.1.1 Progress [(O(1),O(n^2))]  ***
    Considered Problem:
      Strict DP Rules:
        
      Strict TRS Rules:
        a__filter(X1,X2,X3) -> filter(X1,X2,X3)
        a__nats(N) -> cons(mark(N),nats(s(N)))
        a__nats(X) -> nats(X)
        a__sieve(X) -> sieve(X)
        a__sieve(cons(0(),Y)) -> cons(0(),sieve(Y))
        a__sieve(cons(s(N),Y)) -> cons(s(mark(N)),sieve(filter(Y,N,N)))
        a__zprimes() -> a__sieve(a__nats(s(s(0()))))
        mark(cons(X1,X2)) -> cons(mark(X1),X2)
        mark(s(X)) -> s(mark(X))
      Weak DP Rules:
        
      Weak TRS Rules:
        a__filter(cons(X,Y),0(),M) -> cons(0(),filter(Y,M,M))
        a__filter(cons(X,Y),s(N),M) -> cons(mark(X),filter(Y,N,M))
        a__zprimes() -> zprimes()
        mark(0()) -> 0()
        mark(filter(X1,X2,X3)) -> a__filter(mark(X1),mark(X2),mark(X3))
        mark(nats(X)) -> a__nats(mark(X))
        mark(sieve(X)) -> a__sieve(mark(X))
        mark(zprimes()) -> a__zprimes()
      Signature:
        {a__filter/3,a__nats/1,a__sieve/1,a__zprimes/0,mark/1} / {0/0,cons/2,filter/3,nats/1,s/1,sieve/1,zprimes/0}
      Obligation:
        Innermost
        basic terms: {a__filter,a__nats,a__sieve,a__zprimes,mark}/{0,cons,filter,nats,s,sieve,zprimes}
    Applied Processor:
      WeightGap {wgDimension = 1, wgDegree = 1, wgKind = Algebraic, wgUArgs = UArgs, wgOn = WgOnAny}
    Proof:
      The weightgap principle applies using the following nonconstant growth matrix-interpretation:
        We apply a matrix interpretation of kind constructor based matrix interpretation:
        The following argument positions are considered usable:
          uargs(a__filter) = {1,2,3},
          uargs(a__nats) = {1},
          uargs(a__sieve) = {1},
          uargs(cons) = {1},
          uargs(s) = {1}
        
        Following symbols are considered usable:
          {}
        TcT has computed the following interpretation:
                   p(0) = [7]                           
           p(a__filter) = [1] x1 + [1] x2 + [1] x3 + [0]
             p(a__nats) = [1] x1 + [4]                  
            p(a__sieve) = [1] x1 + [0]                  
          p(a__zprimes) = [4]                           
                p(cons) = [1] x1 + [1]                  
              p(filter) = [1] x1 + [1] x2 + [1] x3 + [7]
                p(mark) = [1] x1 + [1]                  
                p(nats) = [1] x1 + [4]                  
                   p(s) = [1] x1 + [2]                  
               p(sieve) = [1] x1 + [0]                  
             p(zprimes) = [4]                           
        
        Following rules are strictly oriented:
        a__nats(N) = [1] N + [4]             
                   > [1] N + [2]             
                   = cons(mark(N),nats(s(N)))
        
        
        Following rules are (at-least) weakly oriented:
                a__filter(X1,X2,X3) =  [1] X1 + [1] X2 + [1] X3 + [0]
                                    >= [1] X1 + [1] X2 + [1] X3 + [7]
                                    =  filter(X1,X2,X3)              
        
         a__filter(cons(X,Y),0(),M) =  [1] M + [1] X + [8]           
                                    >= [8]                           
                                    =  cons(0(),filter(Y,M,M))       
        
        a__filter(cons(X,Y),s(N),M) =  [1] M + [1] N + [1] X + [3]   
                                    >= [1] X + [2]                   
                                    =  cons(mark(X),filter(Y,N,M))   
        
                         a__nats(X) =  [1] X + [4]                   
                                    >= [1] X + [4]                   
                                    =  nats(X)                       
        
                        a__sieve(X) =  [1] X + [0]                   
                                    >= [1] X + [0]                   
                                    =  sieve(X)                      
        
              a__sieve(cons(0(),Y)) =  [8]                           
                                    >= [8]                           
                                    =  cons(0(),sieve(Y))            
        
             a__sieve(cons(s(N),Y)) =  [1] N + [3]                   
                                    >= [1] N + [4]                   
                                    =  cons(s(mark(N))               
                                           ,sieve(filter(Y,N,N)))    
        
                       a__zprimes() =  [4]                           
                                    >= [15]                          
                                    =  a__sieve(a__nats(s(s(0()))))  
        
                       a__zprimes() =  [4]                           
                                    >= [4]                           
                                    =  zprimes()                     
        
                          mark(0()) =  [8]                           
                                    >= [7]                           
                                    =  0()                           
        
                  mark(cons(X1,X2)) =  [1] X1 + [2]                  
                                    >= [1] X1 + [2]                  
                                    =  cons(mark(X1),X2)             
        
             mark(filter(X1,X2,X3)) =  [1] X1 + [1] X2 + [1] X3 + [8]
                                    >= [1] X1 + [1] X2 + [1] X3 + [3]
                                    =  a__filter(mark(X1)            
                                                ,mark(X2)            
                                                ,mark(X3))           
        
                      mark(nats(X)) =  [1] X + [5]                   
                                    >= [1] X + [5]                   
                                    =  a__nats(mark(X))              
        
                         mark(s(X)) =  [1] X + [3]                   
                                    >= [1] X + [3]                   
                                    =  s(mark(X))                    
        
                     mark(sieve(X)) =  [1] X + [1]                   
                                    >= [1] X + [1]                   
                                    =  a__sieve(mark(X))             
        
                    mark(zprimes()) =  [5]                           
                                    >= [4]                           
                                    =  a__zprimes()                  
        
      Further, it can be verified that all rules not oriented are covered by the weightgap condition.
*** 1.1.1.1.1.1 Progress [(O(1),O(n^2))]  ***
    Considered Problem:
      Strict DP Rules:
        
      Strict TRS Rules:
        a__filter(X1,X2,X3) -> filter(X1,X2,X3)
        a__nats(X) -> nats(X)
        a__sieve(X) -> sieve(X)
        a__sieve(cons(0(),Y)) -> cons(0(),sieve(Y))
        a__sieve(cons(s(N),Y)) -> cons(s(mark(N)),sieve(filter(Y,N,N)))
        a__zprimes() -> a__sieve(a__nats(s(s(0()))))
        mark(cons(X1,X2)) -> cons(mark(X1),X2)
        mark(s(X)) -> s(mark(X))
      Weak DP Rules:
        
      Weak TRS Rules:
        a__filter(cons(X,Y),0(),M) -> cons(0(),filter(Y,M,M))
        a__filter(cons(X,Y),s(N),M) -> cons(mark(X),filter(Y,N,M))
        a__nats(N) -> cons(mark(N),nats(s(N)))
        a__zprimes() -> zprimes()
        mark(0()) -> 0()
        mark(filter(X1,X2,X3)) -> a__filter(mark(X1),mark(X2),mark(X3))
        mark(nats(X)) -> a__nats(mark(X))
        mark(sieve(X)) -> a__sieve(mark(X))
        mark(zprimes()) -> a__zprimes()
      Signature:
        {a__filter/3,a__nats/1,a__sieve/1,a__zprimes/0,mark/1} / {0/0,cons/2,filter/3,nats/1,s/1,sieve/1,zprimes/0}
      Obligation:
        Innermost
        basic terms: {a__filter,a__nats,a__sieve,a__zprimes,mark}/{0,cons,filter,nats,s,sieve,zprimes}
    Applied Processor:
      WeightGap {wgDimension = 1, wgDegree = 1, wgKind = Algebraic, wgUArgs = UArgs, wgOn = WgOnAny}
    Proof:
      The weightgap principle applies using the following nonconstant growth matrix-interpretation:
        We apply a matrix interpretation of kind constructor based matrix interpretation:
        The following argument positions are considered usable:
          uargs(a__filter) = {1,2,3},
          uargs(a__nats) = {1},
          uargs(a__sieve) = {1},
          uargs(cons) = {1},
          uargs(s) = {1}
        
        Following symbols are considered usable:
          {}
        TcT has computed the following interpretation:
                   p(0) = [6]                           
           p(a__filter) = [1] x1 + [1] x2 + [1] x3 + [0]
             p(a__nats) = [1] x1 + [5]                  
            p(a__sieve) = [1] x1 + [1]                  
          p(a__zprimes) = [0]                           
                p(cons) = [1] x1 + [0]                  
              p(filter) = [1] x1 + [1] x2 + [1] x3 + [0]
                p(mark) = [1] x1 + [0]                  
                p(nats) = [1] x1 + [5]                  
                   p(s) = [1] x1 + [1]                  
               p(sieve) = [1] x1 + [6]                  
             p(zprimes) = [0]                           
        
        Following rules are strictly oriented:
         a__sieve(cons(0(),Y)) = [7]                       
                               > [6]                       
                               = cons(0(),sieve(Y))        
        
        a__sieve(cons(s(N),Y)) = [1] N + [2]               
                               > [1] N + [1]               
                               = cons(s(mark(N))           
                                     ,sieve(filter(Y,N,N)))
        
        
        Following rules are (at-least) weakly oriented:
                a__filter(X1,X2,X3) =  [1] X1 + [1] X2 + [1] X3 + [0]
                                    >= [1] X1 + [1] X2 + [1] X3 + [0]
                                    =  filter(X1,X2,X3)              
        
         a__filter(cons(X,Y),0(),M) =  [1] M + [1] X + [6]           
                                    >= [6]                           
                                    =  cons(0(),filter(Y,M,M))       
        
        a__filter(cons(X,Y),s(N),M) =  [1] M + [1] N + [1] X + [1]   
                                    >= [1] X + [0]                   
                                    =  cons(mark(X),filter(Y,N,M))   
        
                         a__nats(N) =  [1] N + [5]                   
                                    >= [1] N + [0]                   
                                    =  cons(mark(N),nats(s(N)))      
        
                         a__nats(X) =  [1] X + [5]                   
                                    >= [1] X + [5]                   
                                    =  nats(X)                       
        
                        a__sieve(X) =  [1] X + [1]                   
                                    >= [1] X + [6]                   
                                    =  sieve(X)                      
        
                       a__zprimes() =  [0]                           
                                    >= [14]                          
                                    =  a__sieve(a__nats(s(s(0()))))  
        
                       a__zprimes() =  [0]                           
                                    >= [0]                           
                                    =  zprimes()                     
        
                          mark(0()) =  [6]                           
                                    >= [6]                           
                                    =  0()                           
        
                  mark(cons(X1,X2)) =  [1] X1 + [0]                  
                                    >= [1] X1 + [0]                  
                                    =  cons(mark(X1),X2)             
        
             mark(filter(X1,X2,X3)) =  [1] X1 + [1] X2 + [1] X3 + [0]
                                    >= [1] X1 + [1] X2 + [1] X3 + [0]
                                    =  a__filter(mark(X1)            
                                                ,mark(X2)            
                                                ,mark(X3))           
        
                      mark(nats(X)) =  [1] X + [5]                   
                                    >= [1] X + [5]                   
                                    =  a__nats(mark(X))              
        
                         mark(s(X)) =  [1] X + [1]                   
                                    >= [1] X + [1]                   
                                    =  s(mark(X))                    
        
                     mark(sieve(X)) =  [1] X + [6]                   
                                    >= [1] X + [1]                   
                                    =  a__sieve(mark(X))             
        
                    mark(zprimes()) =  [0]                           
                                    >= [0]                           
                                    =  a__zprimes()                  
        
      Further, it can be verified that all rules not oriented are covered by the weightgap condition.
*** 1.1.1.1.1.1.1 Progress [(O(1),O(n^2))]  ***
    Considered Problem:
      Strict DP Rules:
        
      Strict TRS Rules:
        a__filter(X1,X2,X3) -> filter(X1,X2,X3)
        a__nats(X) -> nats(X)
        a__sieve(X) -> sieve(X)
        a__zprimes() -> a__sieve(a__nats(s(s(0()))))
        mark(cons(X1,X2)) -> cons(mark(X1),X2)
        mark(s(X)) -> s(mark(X))
      Weak DP Rules:
        
      Weak TRS Rules:
        a__filter(cons(X,Y),0(),M) -> cons(0(),filter(Y,M,M))
        a__filter(cons(X,Y),s(N),M) -> cons(mark(X),filter(Y,N,M))
        a__nats(N) -> cons(mark(N),nats(s(N)))
        a__sieve(cons(0(),Y)) -> cons(0(),sieve(Y))
        a__sieve(cons(s(N),Y)) -> cons(s(mark(N)),sieve(filter(Y,N,N)))
        a__zprimes() -> zprimes()
        mark(0()) -> 0()
        mark(filter(X1,X2,X3)) -> a__filter(mark(X1),mark(X2),mark(X3))
        mark(nats(X)) -> a__nats(mark(X))
        mark(sieve(X)) -> a__sieve(mark(X))
        mark(zprimes()) -> a__zprimes()
      Signature:
        {a__filter/3,a__nats/1,a__sieve/1,a__zprimes/0,mark/1} / {0/0,cons/2,filter/3,nats/1,s/1,sieve/1,zprimes/0}
      Obligation:
        Innermost
        basic terms: {a__filter,a__nats,a__sieve,a__zprimes,mark}/{0,cons,filter,nats,s,sieve,zprimes}
    Applied Processor:
      WeightGap {wgDimension = 1, wgDegree = 1, wgKind = Algebraic, wgUArgs = UArgs, wgOn = WgOnAny}
    Proof:
      The weightgap principle applies using the following nonconstant growth matrix-interpretation:
        We apply a matrix interpretation of kind constructor based matrix interpretation:
        The following argument positions are considered usable:
          uargs(a__filter) = {1,2,3},
          uargs(a__nats) = {1},
          uargs(a__sieve) = {1},
          uargs(cons) = {1},
          uargs(s) = {1}
        
        Following symbols are considered usable:
          {}
        TcT has computed the following interpretation:
                   p(0) = [0]                           
           p(a__filter) = [1] x1 + [1] x2 + [1] x3 + [1]
             p(a__nats) = [1] x1 + [0]                  
            p(a__sieve) = [1] x1 + [0]                  
          p(a__zprimes) = [1]                           
                p(cons) = [1] x1 + [0]                  
              p(filter) = [1] x1 + [1] x2 + [1] x3 + [2]
                p(mark) = [1] x1 + [0]                  
                p(nats) = [1] x1 + [4]                  
                   p(s) = [1] x1 + [0]                  
               p(sieve) = [1] x1 + [1]                  
             p(zprimes) = [1]                           
        
        Following rules are strictly oriented:
        a__zprimes() = [1]                         
                     > [0]                         
                     = a__sieve(a__nats(s(s(0()))))
        
        
        Following rules are (at-least) weakly oriented:
                a__filter(X1,X2,X3) =  [1] X1 + [1] X2 + [1] X3 + [1]
                                    >= [1] X1 + [1] X2 + [1] X3 + [2]
                                    =  filter(X1,X2,X3)              
        
         a__filter(cons(X,Y),0(),M) =  [1] M + [1] X + [1]           
                                    >= [0]                           
                                    =  cons(0(),filter(Y,M,M))       
        
        a__filter(cons(X,Y),s(N),M) =  [1] M + [1] N + [1] X + [1]   
                                    >= [1] X + [0]                   
                                    =  cons(mark(X),filter(Y,N,M))   
        
                         a__nats(N) =  [1] N + [0]                   
                                    >= [1] N + [0]                   
                                    =  cons(mark(N),nats(s(N)))      
        
                         a__nats(X) =  [1] X + [0]                   
                                    >= [1] X + [4]                   
                                    =  nats(X)                       
        
                        a__sieve(X) =  [1] X + [0]                   
                                    >= [1] X + [1]                   
                                    =  sieve(X)                      
        
              a__sieve(cons(0(),Y)) =  [0]                           
                                    >= [0]                           
                                    =  cons(0(),sieve(Y))            
        
             a__sieve(cons(s(N),Y)) =  [1] N + [0]                   
                                    >= [1] N + [0]                   
                                    =  cons(s(mark(N))               
                                           ,sieve(filter(Y,N,N)))    
        
                       a__zprimes() =  [1]                           
                                    >= [1]                           
                                    =  zprimes()                     
        
                          mark(0()) =  [0]                           
                                    >= [0]                           
                                    =  0()                           
        
                  mark(cons(X1,X2)) =  [1] X1 + [0]                  
                                    >= [1] X1 + [0]                  
                                    =  cons(mark(X1),X2)             
        
             mark(filter(X1,X2,X3)) =  [1] X1 + [1] X2 + [1] X3 + [2]
                                    >= [1] X1 + [1] X2 + [1] X3 + [1]
                                    =  a__filter(mark(X1)            
                                                ,mark(X2)            
                                                ,mark(X3))           
        
                      mark(nats(X)) =  [1] X + [4]                   
                                    >= [1] X + [0]                   
                                    =  a__nats(mark(X))              
        
                         mark(s(X)) =  [1] X + [0]                   
                                    >= [1] X + [0]                   
                                    =  s(mark(X))                    
        
                     mark(sieve(X)) =  [1] X + [1]                   
                                    >= [1] X + [0]                   
                                    =  a__sieve(mark(X))             
        
                    mark(zprimes()) =  [1]                           
                                    >= [1]                           
                                    =  a__zprimes()                  
        
      Further, it can be verified that all rules not oriented are covered by the weightgap condition.
*** 1.1.1.1.1.1.1.1 Progress [(O(1),O(n^2))]  ***
    Considered Problem:
      Strict DP Rules:
        
      Strict TRS Rules:
        a__filter(X1,X2,X3) -> filter(X1,X2,X3)
        a__nats(X) -> nats(X)
        a__sieve(X) -> sieve(X)
        mark(cons(X1,X2)) -> cons(mark(X1),X2)
        mark(s(X)) -> s(mark(X))
      Weak DP Rules:
        
      Weak TRS Rules:
        a__filter(cons(X,Y),0(),M) -> cons(0(),filter(Y,M,M))
        a__filter(cons(X,Y),s(N),M) -> cons(mark(X),filter(Y,N,M))
        a__nats(N) -> cons(mark(N),nats(s(N)))
        a__sieve(cons(0(),Y)) -> cons(0(),sieve(Y))
        a__sieve(cons(s(N),Y)) -> cons(s(mark(N)),sieve(filter(Y,N,N)))
        a__zprimes() -> a__sieve(a__nats(s(s(0()))))
        a__zprimes() -> zprimes()
        mark(0()) -> 0()
        mark(filter(X1,X2,X3)) -> a__filter(mark(X1),mark(X2),mark(X3))
        mark(nats(X)) -> a__nats(mark(X))
        mark(sieve(X)) -> a__sieve(mark(X))
        mark(zprimes()) -> a__zprimes()
      Signature:
        {a__filter/3,a__nats/1,a__sieve/1,a__zprimes/0,mark/1} / {0/0,cons/2,filter/3,nats/1,s/1,sieve/1,zprimes/0}
      Obligation:
        Innermost
        basic terms: {a__filter,a__nats,a__sieve,a__zprimes,mark}/{0,cons,filter,nats,s,sieve,zprimes}
    Applied Processor:
      NaturalMI {miDimension = 2, miDegree = 2, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Just any strict-rules, greedy = NoGreedy}
    Proof:
      We apply a matrix interpretation of kind constructor based matrix interpretation:
      The following argument positions are considered usable:
        uargs(a__filter) = {1,2,3},
        uargs(a__nats) = {1},
        uargs(a__sieve) = {1},
        uargs(cons) = {1},
        uargs(s) = {1}
      
      Following symbols are considered usable:
        {a__filter,a__nats,a__sieve,a__zprimes,mark}
      TcT has computed the following interpretation:
                 p(0) = [1]                     
                        [1]                     
         p(a__filter) = [1 2] x1 + [1 0] x2 + [1
                        0] x3 + [0]             
                        [0 1]      [0 1]      [0
                        1]      [0]             
           p(a__nats) = [1 1] x1 + [0]          
                        [0 1]      [0]          
          p(a__sieve) = [1 1] x1 + [0]          
                        [0 1]      [0]          
        p(a__zprimes) = [7]                     
                        [3]                     
              p(cons) = [1 0] x1 + [0]          
                        [0 1]      [0]          
            p(filter) = [1 2] x1 + [1 0] x2 + [1
                        0] x3 + [0]             
                        [0 1]      [0 1]      [0
                        1]      [0]             
              p(mark) = [1 1] x1 + [0]          
                        [0 1]      [0]          
              p(nats) = [1 1] x1 + [0]          
                        [0 1]      [0]          
                 p(s) = [1 0] x1 + [0]          
                        [0 1]      [1]          
             p(sieve) = [1 1] x1 + [0]          
                        [0 1]      [0]          
           p(zprimes) = [4]                     
                        [3]                     
      
      Following rules are strictly oriented:
      mark(s(X)) = [1 1] X + [1]
                   [0 1]     [1]
                 > [1 1] X + [0]
                   [0 1]     [1]
                 = s(mark(X))   
      
      
      Following rules are (at-least) weakly oriented:
              a__filter(X1,X2,X3) =  [1 2] X1 + [1 0] X2 + [1    
                                     0] X3 + [0]                 
                                     [0 1]      [0 1]      [0    
                                     1]      [0]                 
                                  >= [1 2] X1 + [1 0] X2 + [1    
                                     0] X3 + [0]                 
                                     [0 1]      [0 1]      [0    
                                     1]      [0]                 
                                  =  filter(X1,X2,X3)            
      
       a__filter(cons(X,Y),0(),M) =  [1 0] M + [1 2] X + [1]     
                                     [0 1]     [0 1]     [1]     
                                  >= [1]                         
                                     [1]                         
                                  =  cons(0(),filter(Y,M,M))     
      
      a__filter(cons(X,Y),s(N),M) =  [1 0] M + [1 0] N + [1      
                                     2] X + [0]                  
                                     [0 1]     [0 1]     [0      
                                     1]     [1]                  
                                  >= [1 1] X + [0]               
                                     [0 1]     [0]               
                                  =  cons(mark(X),filter(Y,N,M)) 
      
                       a__nats(N) =  [1 1] N + [0]               
                                     [0 1]     [0]               
                                  >= [1 1] N + [0]               
                                     [0 1]     [0]               
                                  =  cons(mark(N),nats(s(N)))    
      
                       a__nats(X) =  [1 1] X + [0]               
                                     [0 1]     [0]               
                                  >= [1 1] X + [0]               
                                     [0 1]     [0]               
                                  =  nats(X)                     
      
                      a__sieve(X) =  [1 1] X + [0]               
                                     [0 1]     [0]               
                                  >= [1 1] X + [0]               
                                     [0 1]     [0]               
                                  =  sieve(X)                    
      
            a__sieve(cons(0(),Y)) =  [2]                         
                                     [1]                         
                                  >= [1]                         
                                     [1]                         
                                  =  cons(0(),sieve(Y))          
      
           a__sieve(cons(s(N),Y)) =  [1 1] N + [1]               
                                     [0 1]     [1]               
                                  >= [1 1] N + [0]               
                                     [0 1]     [1]               
                                  =  cons(s(mark(N))             
                                         ,sieve(filter(Y,N,N)))  
      
                     a__zprimes() =  [7]                         
                                     [3]                         
                                  >= [7]                         
                                     [3]                         
                                  =  a__sieve(a__nats(s(s(0()))))
      
                     a__zprimes() =  [7]                         
                                     [3]                         
                                  >= [4]                         
                                     [3]                         
                                  =  zprimes()                   
      
                        mark(0()) =  [2]                         
                                     [1]                         
                                  >= [1]                         
                                     [1]                         
                                  =  0()                         
      
                mark(cons(X1,X2)) =  [1 1] X1 + [0]              
                                     [0 1]      [0]              
                                  >= [1 1] X1 + [0]              
                                     [0 1]      [0]              
                                  =  cons(mark(X1),X2)           
      
           mark(filter(X1,X2,X3)) =  [1 3] X1 + [1 1] X2 + [1    
                                     1] X3 + [0]                 
                                     [0 1]      [0 1]      [0    
                                     1]      [0]                 
                                  >= [1 3] X1 + [1 1] X2 + [1    
                                     1] X3 + [0]                 
                                     [0 1]      [0 1]      [0    
                                     1]      [0]                 
                                  =  a__filter(mark(X1)          
                                              ,mark(X2)          
                                              ,mark(X3))         
      
                    mark(nats(X)) =  [1 2] X + [0]               
                                     [0 1]     [0]               
                                  >= [1 2] X + [0]               
                                     [0 1]     [0]               
                                  =  a__nats(mark(X))            
      
                   mark(sieve(X)) =  [1 2] X + [0]               
                                     [0 1]     [0]               
                                  >= [1 2] X + [0]               
                                     [0 1]     [0]               
                                  =  a__sieve(mark(X))           
      
                  mark(zprimes()) =  [7]                         
                                     [3]                         
                                  >= [7]                         
                                     [3]                         
                                  =  a__zprimes()                
      
*** 1.1.1.1.1.1.1.1.1 Progress [(O(1),O(n^2))]  ***
    Considered Problem:
      Strict DP Rules:
        
      Strict TRS Rules:
        a__filter(X1,X2,X3) -> filter(X1,X2,X3)
        a__nats(X) -> nats(X)
        a__sieve(X) -> sieve(X)
        mark(cons(X1,X2)) -> cons(mark(X1),X2)
      Weak DP Rules:
        
      Weak TRS Rules:
        a__filter(cons(X,Y),0(),M) -> cons(0(),filter(Y,M,M))
        a__filter(cons(X,Y),s(N),M) -> cons(mark(X),filter(Y,N,M))
        a__nats(N) -> cons(mark(N),nats(s(N)))
        a__sieve(cons(0(),Y)) -> cons(0(),sieve(Y))
        a__sieve(cons(s(N),Y)) -> cons(s(mark(N)),sieve(filter(Y,N,N)))
        a__zprimes() -> a__sieve(a__nats(s(s(0()))))
        a__zprimes() -> zprimes()
        mark(0()) -> 0()
        mark(filter(X1,X2,X3)) -> a__filter(mark(X1),mark(X2),mark(X3))
        mark(nats(X)) -> a__nats(mark(X))
        mark(s(X)) -> s(mark(X))
        mark(sieve(X)) -> a__sieve(mark(X))
        mark(zprimes()) -> a__zprimes()
      Signature:
        {a__filter/3,a__nats/1,a__sieve/1,a__zprimes/0,mark/1} / {0/0,cons/2,filter/3,nats/1,s/1,sieve/1,zprimes/0}
      Obligation:
        Innermost
        basic terms: {a__filter,a__nats,a__sieve,a__zprimes,mark}/{0,cons,filter,nats,s,sieve,zprimes}
    Applied Processor:
      NaturalMI {miDimension = 2, miDegree = 2, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Just any strict-rules, greedy = NoGreedy}
    Proof:
      We apply a matrix interpretation of kind constructor based matrix interpretation:
      The following argument positions are considered usable:
        uargs(a__filter) = {1,2,3},
        uargs(a__nats) = {1},
        uargs(a__sieve) = {1},
        uargs(cons) = {1},
        uargs(s) = {1}
      
      Following symbols are considered usable:
        {a__filter,a__nats,a__sieve,a__zprimes,mark}
      TcT has computed the following interpretation:
                 p(0) = [0]                     
                        [0]                     
         p(a__filter) = [1 4] x1 + [1 0] x2 + [1
                        0] x3 + [0]             
                        [0 1]      [0 1]      [0
                        1]      [0]             
           p(a__nats) = [1 4] x1 + [3]          
                        [0 1]      [0]          
          p(a__sieve) = [1 4] x1 + [4]          
                        [0 1]      [2]          
        p(a__zprimes) = [7]                     
                        [2]                     
              p(cons) = [1 0] x1 + [0]          
                        [0 1]      [0]          
            p(filter) = [1 4] x1 + [1 0] x2 + [1
                        0] x3 + [0]             
                        [0 1]      [0 1]      [0
                        1]      [0]             
              p(mark) = [1 4] x1 + [0]          
                        [0 1]      [0]          
              p(nats) = [1 4] x1 + [3]          
                        [0 1]      [0]          
                 p(s) = [1 5] x1 + [0]          
                        [0 1]      [0]          
             p(sieve) = [1 4] x1 + [0]          
                        [0 1]      [2]          
           p(zprimes) = [0]                     
                        [2]                     
      
      Following rules are strictly oriented:
      a__sieve(X) = [1 4] X + [4]
                    [0 1]     [2]
                  > [1 4] X + [0]
                    [0 1]     [2]
                  = sieve(X)     
      
      
      Following rules are (at-least) weakly oriented:
              a__filter(X1,X2,X3) =  [1 4] X1 + [1 0] X2 + [1    
                                     0] X3 + [0]                 
                                     [0 1]      [0 1]      [0    
                                     1]      [0]                 
                                  >= [1 4] X1 + [1 0] X2 + [1    
                                     0] X3 + [0]                 
                                     [0 1]      [0 1]      [0    
                                     1]      [0]                 
                                  =  filter(X1,X2,X3)            
      
       a__filter(cons(X,Y),0(),M) =  [1 0] M + [1 4] X + [0]     
                                     [0 1]     [0 1]     [0]     
                                  >= [0]                         
                                     [0]                         
                                  =  cons(0(),filter(Y,M,M))     
      
      a__filter(cons(X,Y),s(N),M) =  [1 0] M + [1 5] N + [1      
                                     4] X + [0]                  
                                     [0 1]     [0 1]     [0      
                                     1]     [0]                  
                                  >= [1 4] X + [0]               
                                     [0 1]     [0]               
                                  =  cons(mark(X),filter(Y,N,M)) 
      
                       a__nats(N) =  [1 4] N + [3]               
                                     [0 1]     [0]               
                                  >= [1 4] N + [0]               
                                     [0 1]     [0]               
                                  =  cons(mark(N),nats(s(N)))    
      
                       a__nats(X) =  [1 4] X + [3]               
                                     [0 1]     [0]               
                                  >= [1 4] X + [3]               
                                     [0 1]     [0]               
                                  =  nats(X)                     
      
            a__sieve(cons(0(),Y)) =  [4]                         
                                     [2]                         
                                  >= [0]                         
                                     [0]                         
                                  =  cons(0(),sieve(Y))          
      
           a__sieve(cons(s(N),Y)) =  [1 9] N + [4]               
                                     [0 1]     [2]               
                                  >= [1 9] N + [0]               
                                     [0 1]     [0]               
                                  =  cons(s(mark(N))             
                                         ,sieve(filter(Y,N,N)))  
      
                     a__zprimes() =  [7]                         
                                     [2]                         
                                  >= [7]                         
                                     [2]                         
                                  =  a__sieve(a__nats(s(s(0()))))
      
                     a__zprimes() =  [7]                         
                                     [2]                         
                                  >= [0]                         
                                     [2]                         
                                  =  zprimes()                   
      
                        mark(0()) =  [0]                         
                                     [0]                         
                                  >= [0]                         
                                     [0]                         
                                  =  0()                         
      
                mark(cons(X1,X2)) =  [1 4] X1 + [0]              
                                     [0 1]      [0]              
                                  >= [1 4] X1 + [0]              
                                     [0 1]      [0]              
                                  =  cons(mark(X1),X2)           
      
           mark(filter(X1,X2,X3)) =  [1 8] X1 + [1 4] X2 + [1    
                                     4] X3 + [0]                 
                                     [0 1]      [0 1]      [0    
                                     1]      [0]                 
                                  >= [1 8] X1 + [1 4] X2 + [1    
                                     4] X3 + [0]                 
                                     [0 1]      [0 1]      [0    
                                     1]      [0]                 
                                  =  a__filter(mark(X1)          
                                              ,mark(X2)          
                                              ,mark(X3))         
      
                    mark(nats(X)) =  [1 8] X + [3]               
                                     [0 1]     [0]               
                                  >= [1 8] X + [3]               
                                     [0 1]     [0]               
                                  =  a__nats(mark(X))            
      
                       mark(s(X)) =  [1 9] X + [0]               
                                     [0 1]     [0]               
                                  >= [1 9] X + [0]               
                                     [0 1]     [0]               
                                  =  s(mark(X))                  
      
                   mark(sieve(X)) =  [1 8] X + [8]               
                                     [0 1]     [2]               
                                  >= [1 8] X + [4]               
                                     [0 1]     [2]               
                                  =  a__sieve(mark(X))           
      
                  mark(zprimes()) =  [8]                         
                                     [2]                         
                                  >= [7]                         
                                     [2]                         
                                  =  a__zprimes()                
      
*** 1.1.1.1.1.1.1.1.1.1 Progress [(O(1),O(n^2))]  ***
    Considered Problem:
      Strict DP Rules:
        
      Strict TRS Rules:
        a__filter(X1,X2,X3) -> filter(X1,X2,X3)
        a__nats(X) -> nats(X)
        mark(cons(X1,X2)) -> cons(mark(X1),X2)
      Weak DP Rules:
        
      Weak TRS Rules:
        a__filter(cons(X,Y),0(),M) -> cons(0(),filter(Y,M,M))
        a__filter(cons(X,Y),s(N),M) -> cons(mark(X),filter(Y,N,M))
        a__nats(N) -> cons(mark(N),nats(s(N)))
        a__sieve(X) -> sieve(X)
        a__sieve(cons(0(),Y)) -> cons(0(),sieve(Y))
        a__sieve(cons(s(N),Y)) -> cons(s(mark(N)),sieve(filter(Y,N,N)))
        a__zprimes() -> a__sieve(a__nats(s(s(0()))))
        a__zprimes() -> zprimes()
        mark(0()) -> 0()
        mark(filter(X1,X2,X3)) -> a__filter(mark(X1),mark(X2),mark(X3))
        mark(nats(X)) -> a__nats(mark(X))
        mark(s(X)) -> s(mark(X))
        mark(sieve(X)) -> a__sieve(mark(X))
        mark(zprimes()) -> a__zprimes()
      Signature:
        {a__filter/3,a__nats/1,a__sieve/1,a__zprimes/0,mark/1} / {0/0,cons/2,filter/3,nats/1,s/1,sieve/1,zprimes/0}
      Obligation:
        Innermost
        basic terms: {a__filter,a__nats,a__sieve,a__zprimes,mark}/{0,cons,filter,nats,s,sieve,zprimes}
    Applied Processor:
      NaturalMI {miDimension = 2, miDegree = 2, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Just any strict-rules, greedy = NoGreedy}
    Proof:
      We apply a matrix interpretation of kind constructor based matrix interpretation:
      The following argument positions are considered usable:
        uargs(a__filter) = {1,2,3},
        uargs(a__nats) = {1},
        uargs(a__sieve) = {1},
        uargs(cons) = {1},
        uargs(s) = {1}
      
      Following symbols are considered usable:
        {a__filter,a__nats,a__sieve,a__zprimes,mark}
      TcT has computed the following interpretation:
                 p(0) = [1]                     
                        [2]                     
         p(a__filter) = [1 4] x1 + [1 0] x2 + [1
                        4] x3 + [0]             
                        [0 1]      [0 1]      [0
                        1]      [0]             
           p(a__nats) = [1 1] x1 + [0]          
                        [0 1]      [2]          
          p(a__sieve) = [1 1] x1 + [0]          
                        [0 1]      [2]          
        p(a__zprimes) = [7]                     
                        [6]                     
              p(cons) = [1 0] x1 + [0]          
                        [0 1]      [1]          
            p(filter) = [1 4] x1 + [1 0] x2 + [1
                        4] x3 + [0]             
                        [0 1]      [0 1]      [0
                        1]      [0]             
              p(mark) = [1 1] x1 + [0]          
                        [0 1]      [0]          
              p(nats) = [1 1] x1 + [0]          
                        [0 1]      [2]          
                 p(s) = [1 0] x1 + [0]          
                        [0 1]      [0]          
             p(sieve) = [1 1] x1 + [0]          
                        [0 1]      [2]          
           p(zprimes) = [2]                     
                        [6]                     
      
      Following rules are strictly oriented:
      mark(cons(X1,X2)) = [1 1] X1 + [1]   
                          [0 1]      [1]   
                        > [1 1] X1 + [0]   
                          [0 1]      [1]   
                        = cons(mark(X1),X2)
      
      
      Following rules are (at-least) weakly oriented:
              a__filter(X1,X2,X3) =  [1 4] X1 + [1 0] X2 + [1    
                                     4] X3 + [0]                 
                                     [0 1]      [0 1]      [0    
                                     1]      [0]                 
                                  >= [1 4] X1 + [1 0] X2 + [1    
                                     4] X3 + [0]                 
                                     [0 1]      [0 1]      [0    
                                     1]      [0]                 
                                  =  filter(X1,X2,X3)            
      
       a__filter(cons(X,Y),0(),M) =  [1 4] M + [1 4] X + [5]     
                                     [0 1]     [0 1]     [3]     
                                  >= [1]                         
                                     [3]                         
                                  =  cons(0(),filter(Y,M,M))     
      
      a__filter(cons(X,Y),s(N),M) =  [1 4] M + [1 0] N + [1      
                                     4] X + [4]                  
                                     [0 1]     [0 1]     [0      
                                     1]     [1]                  
                                  >= [1 1] X + [0]               
                                     [0 1]     [1]               
                                  =  cons(mark(X),filter(Y,N,M)) 
      
                       a__nats(N) =  [1 1] N + [0]               
                                     [0 1]     [2]               
                                  >= [1 1] N + [0]               
                                     [0 1]     [1]               
                                  =  cons(mark(N),nats(s(N)))    
      
                       a__nats(X) =  [1 1] X + [0]               
                                     [0 1]     [2]               
                                  >= [1 1] X + [0]               
                                     [0 1]     [2]               
                                  =  nats(X)                     
      
                      a__sieve(X) =  [1 1] X + [0]               
                                     [0 1]     [2]               
                                  >= [1 1] X + [0]               
                                     [0 1]     [2]               
                                  =  sieve(X)                    
      
            a__sieve(cons(0(),Y)) =  [4]                         
                                     [5]                         
                                  >= [1]                         
                                     [3]                         
                                  =  cons(0(),sieve(Y))          
      
           a__sieve(cons(s(N),Y)) =  [1 1] N + [1]               
                                     [0 1]     [3]               
                                  >= [1 1] N + [0]               
                                     [0 1]     [1]               
                                  =  cons(s(mark(N))             
                                         ,sieve(filter(Y,N,N)))  
      
                     a__zprimes() =  [7]                         
                                     [6]                         
                                  >= [7]                         
                                     [6]                         
                                  =  a__sieve(a__nats(s(s(0()))))
      
                     a__zprimes() =  [7]                         
                                     [6]                         
                                  >= [2]                         
                                     [6]                         
                                  =  zprimes()                   
      
                        mark(0()) =  [3]                         
                                     [2]                         
                                  >= [1]                         
                                     [2]                         
                                  =  0()                         
      
           mark(filter(X1,X2,X3)) =  [1 5] X1 + [1 1] X2 + [1    
                                     5] X3 + [0]                 
                                     [0 1]      [0 1]      [0    
                                     1]      [0]                 
                                  >= [1 5] X1 + [1 1] X2 + [1    
                                     5] X3 + [0]                 
                                     [0 1]      [0 1]      [0    
                                     1]      [0]                 
                                  =  a__filter(mark(X1)          
                                              ,mark(X2)          
                                              ,mark(X3))         
      
                    mark(nats(X)) =  [1 2] X + [2]               
                                     [0 1]     [2]               
                                  >= [1 2] X + [0]               
                                     [0 1]     [2]               
                                  =  a__nats(mark(X))            
      
                       mark(s(X)) =  [1 1] X + [0]               
                                     [0 1]     [0]               
                                  >= [1 1] X + [0]               
                                     [0 1]     [0]               
                                  =  s(mark(X))                  
      
                   mark(sieve(X)) =  [1 2] X + [2]               
                                     [0 1]     [2]               
                                  >= [1 2] X + [0]               
                                     [0 1]     [2]               
                                  =  a__sieve(mark(X))           
      
                  mark(zprimes()) =  [8]                         
                                     [6]                         
                                  >= [7]                         
                                     [6]                         
                                  =  a__zprimes()                
      
*** 1.1.1.1.1.1.1.1.1.1.1 Progress [(O(1),O(n^2))]  ***
    Considered Problem:
      Strict DP Rules:
        
      Strict TRS Rules:
        a__filter(X1,X2,X3) -> filter(X1,X2,X3)
        a__nats(X) -> nats(X)
      Weak DP Rules:
        
      Weak TRS Rules:
        a__filter(cons(X,Y),0(),M) -> cons(0(),filter(Y,M,M))
        a__filter(cons(X,Y),s(N),M) -> cons(mark(X),filter(Y,N,M))
        a__nats(N) -> cons(mark(N),nats(s(N)))
        a__sieve(X) -> sieve(X)
        a__sieve(cons(0(),Y)) -> cons(0(),sieve(Y))
        a__sieve(cons(s(N),Y)) -> cons(s(mark(N)),sieve(filter(Y,N,N)))
        a__zprimes() -> a__sieve(a__nats(s(s(0()))))
        a__zprimes() -> zprimes()
        mark(0()) -> 0()
        mark(cons(X1,X2)) -> cons(mark(X1),X2)
        mark(filter(X1,X2,X3)) -> a__filter(mark(X1),mark(X2),mark(X3))
        mark(nats(X)) -> a__nats(mark(X))
        mark(s(X)) -> s(mark(X))
        mark(sieve(X)) -> a__sieve(mark(X))
        mark(zprimes()) -> a__zprimes()
      Signature:
        {a__filter/3,a__nats/1,a__sieve/1,a__zprimes/0,mark/1} / {0/0,cons/2,filter/3,nats/1,s/1,sieve/1,zprimes/0}
      Obligation:
        Innermost
        basic terms: {a__filter,a__nats,a__sieve,a__zprimes,mark}/{0,cons,filter,nats,s,sieve,zprimes}
    Applied Processor:
      NaturalMI {miDimension = 2, miDegree = 2, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Just any strict-rules, greedy = NoGreedy}
    Proof:
      We apply a matrix interpretation of kind constructor based matrix interpretation:
      The following argument positions are considered usable:
        uargs(a__filter) = {1,2,3},
        uargs(a__nats) = {1},
        uargs(a__sieve) = {1},
        uargs(cons) = {1},
        uargs(s) = {1}
      
      Following symbols are considered usable:
        {a__filter,a__nats,a__sieve,a__zprimes,mark}
      TcT has computed the following interpretation:
                 p(0) = [0]                     
                        [0]                     
         p(a__filter) = [1 7] x1 + [1 0] x2 + [1
                        4] x3 + [0]             
                        [0 1]      [0 1]      [0
                        1]      [0]             
           p(a__nats) = [1 5] x1 + [2]          
                        [0 1]      [1]          
          p(a__sieve) = [1 4] x1 + [1]          
                        [0 1]      [2]          
        p(a__zprimes) = [7]                     
                        [3]                     
              p(cons) = [1 1] x1 + [0]          
                        [0 1]      [0]          
            p(filter) = [1 7] x1 + [1 0] x2 + [1
                        4] x3 + [0]             
                        [0 1]      [0 1]      [0
                        1]      [0]             
              p(mark) = [1 4] x1 + [0]          
                        [0 1]      [0]          
              p(nats) = [1 5] x1 + [0]          
                        [0 1]      [1]          
                 p(s) = [1 0] x1 + [0]          
                        [0 1]      [0]          
             p(sieve) = [1 4] x1 + [1]          
                        [0 1]      [2]          
           p(zprimes) = [1]                     
                        [3]                     
      
      Following rules are strictly oriented:
      a__nats(X) = [1 5] X + [2]
                   [0 1]     [1]
                 > [1 5] X + [0]
                   [0 1]     [1]
                 = nats(X)      
      
      
      Following rules are (at-least) weakly oriented:
              a__filter(X1,X2,X3) =  [1 7] X1 + [1 0] X2 + [1    
                                     4] X3 + [0]                 
                                     [0 1]      [0 1]      [0    
                                     1]      [0]                 
                                  >= [1 7] X1 + [1 0] X2 + [1    
                                     4] X3 + [0]                 
                                     [0 1]      [0 1]      [0    
                                     1]      [0]                 
                                  =  filter(X1,X2,X3)            
      
       a__filter(cons(X,Y),0(),M) =  [1 4] M + [1 8] X + [0]     
                                     [0 1]     [0 1]     [0]     
                                  >= [0]                         
                                     [0]                         
                                  =  cons(0(),filter(Y,M,M))     
      
      a__filter(cons(X,Y),s(N),M) =  [1 4] M + [1 0] N + [1      
                                     8] X + [0]                  
                                     [0 1]     [0 1]     [0      
                                     1]     [0]                  
                                  >= [1 5] X + [0]               
                                     [0 1]     [0]               
                                  =  cons(mark(X),filter(Y,N,M)) 
      
                       a__nats(N) =  [1 5] N + [2]               
                                     [0 1]     [1]               
                                  >= [1 5] N + [0]               
                                     [0 1]     [0]               
                                  =  cons(mark(N),nats(s(N)))    
      
                      a__sieve(X) =  [1 4] X + [1]               
                                     [0 1]     [2]               
                                  >= [1 4] X + [1]               
                                     [0 1]     [2]               
                                  =  sieve(X)                    
      
            a__sieve(cons(0(),Y)) =  [1]                         
                                     [2]                         
                                  >= [0]                         
                                     [0]                         
                                  =  cons(0(),sieve(Y))          
      
           a__sieve(cons(s(N),Y)) =  [1 5] N + [1]               
                                     [0 1]     [2]               
                                  >= [1 5] N + [0]               
                                     [0 1]     [0]               
                                  =  cons(s(mark(N))             
                                         ,sieve(filter(Y,N,N)))  
      
                     a__zprimes() =  [7]                         
                                     [3]                         
                                  >= [7]                         
                                     [3]                         
                                  =  a__sieve(a__nats(s(s(0()))))
      
                     a__zprimes() =  [7]                         
                                     [3]                         
                                  >= [1]                         
                                     [3]                         
                                  =  zprimes()                   
      
                        mark(0()) =  [0]                         
                                     [0]                         
                                  >= [0]                         
                                     [0]                         
                                  =  0()                         
      
                mark(cons(X1,X2)) =  [1 5] X1 + [0]              
                                     [0 1]      [0]              
                                  >= [1 5] X1 + [0]              
                                     [0 1]      [0]              
                                  =  cons(mark(X1),X2)           
      
           mark(filter(X1,X2,X3)) =  [1 11] X1 + [1 4] X2 + [1   
                                     8] X3 + [0]                 
                                     [0  1]      [0 1]      [0   
                                     1]      [0]                 
                                  >= [1 11] X1 + [1 4] X2 + [1   
                                     8] X3 + [0]                 
                                     [0  1]      [0 1]      [0   
                                     1]      [0]                 
                                  =  a__filter(mark(X1)          
                                              ,mark(X2)          
                                              ,mark(X3))         
      
                    mark(nats(X)) =  [1 9] X + [4]               
                                     [0 1]     [1]               
                                  >= [1 9] X + [2]               
                                     [0 1]     [1]               
                                  =  a__nats(mark(X))            
      
                       mark(s(X)) =  [1 4] X + [0]               
                                     [0 1]     [0]               
                                  >= [1 4] X + [0]               
                                     [0 1]     [0]               
                                  =  s(mark(X))                  
      
                   mark(sieve(X)) =  [1 8] X + [9]               
                                     [0 1]     [2]               
                                  >= [1 8] X + [1]               
                                     [0 1]     [2]               
                                  =  a__sieve(mark(X))           
      
                  mark(zprimes()) =  [13]                        
                                     [3]                         
                                  >= [7]                         
                                     [3]                         
                                  =  a__zprimes()                
      
*** 1.1.1.1.1.1.1.1.1.1.1.1 Progress [(O(1),O(n^2))]  ***
    Considered Problem:
      Strict DP Rules:
        
      Strict TRS Rules:
        a__filter(X1,X2,X3) -> filter(X1,X2,X3)
      Weak DP Rules:
        
      Weak TRS Rules:
        a__filter(cons(X,Y),0(),M) -> cons(0(),filter(Y,M,M))
        a__filter(cons(X,Y),s(N),M) -> cons(mark(X),filter(Y,N,M))
        a__nats(N) -> cons(mark(N),nats(s(N)))
        a__nats(X) -> nats(X)
        a__sieve(X) -> sieve(X)
        a__sieve(cons(0(),Y)) -> cons(0(),sieve(Y))
        a__sieve(cons(s(N),Y)) -> cons(s(mark(N)),sieve(filter(Y,N,N)))
        a__zprimes() -> a__sieve(a__nats(s(s(0()))))
        a__zprimes() -> zprimes()
        mark(0()) -> 0()
        mark(cons(X1,X2)) -> cons(mark(X1),X2)
        mark(filter(X1,X2,X3)) -> a__filter(mark(X1),mark(X2),mark(X3))
        mark(nats(X)) -> a__nats(mark(X))
        mark(s(X)) -> s(mark(X))
        mark(sieve(X)) -> a__sieve(mark(X))
        mark(zprimes()) -> a__zprimes()
      Signature:
        {a__filter/3,a__nats/1,a__sieve/1,a__zprimes/0,mark/1} / {0/0,cons/2,filter/3,nats/1,s/1,sieve/1,zprimes/0}
      Obligation:
        Innermost
        basic terms: {a__filter,a__nats,a__sieve,a__zprimes,mark}/{0,cons,filter,nats,s,sieve,zprimes}
    Applied Processor:
      NaturalMI {miDimension = 2, miDegree = 2, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Just any strict-rules, greedy = NoGreedy}
    Proof:
      We apply a matrix interpretation of kind constructor based matrix interpretation:
      The following argument positions are considered usable:
        uargs(a__filter) = {1,2,3},
        uargs(a__nats) = {1},
        uargs(a__sieve) = {1},
        uargs(cons) = {1},
        uargs(s) = {1}
      
      Following symbols are considered usable:
        {a__filter,a__nats,a__sieve,a__zprimes,mark}
      TcT has computed the following interpretation:
                 p(0) = [2]                     
                        [0]                     
         p(a__filter) = [1 2] x1 + [1 0] x2 + [1
                        0] x3 + [5]             
                        [0 1]      [0 1]      [0
                        1]      [4]             
           p(a__nats) = [1 1] x1 + [4]          
                        [0 1]      [0]          
          p(a__sieve) = [1 1] x1 + [0]          
                        [0 1]      [0]          
        p(a__zprimes) = [6]                     
                        [0]                     
              p(cons) = [1 0] x1 + [4]          
                        [0 1]      [0]          
            p(filter) = [1 2] x1 + [1 0] x2 + [1
                        0] x3 + [4]             
                        [0 1]      [0 1]      [0
                        1]      [4]             
              p(mark) = [1 1] x1 + [0]          
                        [0 1]      [0]          
              p(nats) = [1 1] x1 + [4]          
                        [0 1]      [0]          
                 p(s) = [1 0] x1 + [0]          
                        [0 1]      [0]          
             p(sieve) = [1 1] x1 + [0]          
                        [0 1]      [0]          
           p(zprimes) = [6]                     
                        [0]                     
      
      Following rules are strictly oriented:
      a__filter(X1,X2,X3) = [1 2] X1 + [1 0] X2 + [1
                            0] X3 + [5]             
                            [0 1]      [0 1]      [0
                            1]      [4]             
                          > [1 2] X1 + [1 0] X2 + [1
                            0] X3 + [4]             
                            [0 1]      [0 1]      [0
                            1]      [4]             
                          = filter(X1,X2,X3)        
      
      
      Following rules are (at-least) weakly oriented:
       a__filter(cons(X,Y),0(),M) =  [1 0] M + [1 2] X + [11]    
                                     [0 1]     [0 1]     [4]     
                                  >= [6]                         
                                     [0]                         
                                  =  cons(0(),filter(Y,M,M))     
      
      a__filter(cons(X,Y),s(N),M) =  [1 0] M + [1 0] N + [1      
                                     2] X + [9]                  
                                     [0 1]     [0 1]     [0      
                                     1]     [4]                  
                                  >= [1 1] X + [4]               
                                     [0 1]     [0]               
                                  =  cons(mark(X),filter(Y,N,M)) 
      
                       a__nats(N) =  [1 1] N + [4]               
                                     [0 1]     [0]               
                                  >= [1 1] N + [4]               
                                     [0 1]     [0]               
                                  =  cons(mark(N),nats(s(N)))    
      
                       a__nats(X) =  [1 1] X + [4]               
                                     [0 1]     [0]               
                                  >= [1 1] X + [4]               
                                     [0 1]     [0]               
                                  =  nats(X)                     
      
                      a__sieve(X) =  [1 1] X + [0]               
                                     [0 1]     [0]               
                                  >= [1 1] X + [0]               
                                     [0 1]     [0]               
                                  =  sieve(X)                    
      
            a__sieve(cons(0(),Y)) =  [6]                         
                                     [0]                         
                                  >= [6]                         
                                     [0]                         
                                  =  cons(0(),sieve(Y))          
      
           a__sieve(cons(s(N),Y)) =  [1 1] N + [4]               
                                     [0 1]     [0]               
                                  >= [1 1] N + [4]               
                                     [0 1]     [0]               
                                  =  cons(s(mark(N))             
                                         ,sieve(filter(Y,N,N)))  
      
                     a__zprimes() =  [6]                         
                                     [0]                         
                                  >= [6]                         
                                     [0]                         
                                  =  a__sieve(a__nats(s(s(0()))))
      
                     a__zprimes() =  [6]                         
                                     [0]                         
                                  >= [6]                         
                                     [0]                         
                                  =  zprimes()                   
      
                        mark(0()) =  [2]                         
                                     [0]                         
                                  >= [2]                         
                                     [0]                         
                                  =  0()                         
      
                mark(cons(X1,X2)) =  [1 1] X1 + [4]              
                                     [0 1]      [0]              
                                  >= [1 1] X1 + [4]              
                                     [0 1]      [0]              
                                  =  cons(mark(X1),X2)           
      
           mark(filter(X1,X2,X3)) =  [1 3] X1 + [1 1] X2 + [1    
                                     1] X3 + [8]                 
                                     [0 1]      [0 1]      [0    
                                     1]      [4]                 
                                  >= [1 3] X1 + [1 1] X2 + [1    
                                     1] X3 + [5]                 
                                     [0 1]      [0 1]      [0    
                                     1]      [4]                 
                                  =  a__filter(mark(X1)          
                                              ,mark(X2)          
                                              ,mark(X3))         
      
                    mark(nats(X)) =  [1 2] X + [4]               
                                     [0 1]     [0]               
                                  >= [1 2] X + [4]               
                                     [0 1]     [0]               
                                  =  a__nats(mark(X))            
      
                       mark(s(X)) =  [1 1] X + [0]               
                                     [0 1]     [0]               
                                  >= [1 1] X + [0]               
                                     [0 1]     [0]               
                                  =  s(mark(X))                  
      
                   mark(sieve(X)) =  [1 2] X + [0]               
                                     [0 1]     [0]               
                                  >= [1 2] X + [0]               
                                     [0 1]     [0]               
                                  =  a__sieve(mark(X))           
      
                  mark(zprimes()) =  [6]                         
                                     [0]                         
                                  >= [6]                         
                                     [0]                         
                                  =  a__zprimes()                
      
*** 1.1.1.1.1.1.1.1.1.1.1.1.1 Progress [(O(1),O(1))]  ***
    Considered Problem:
      Strict DP Rules:
        
      Strict TRS Rules:
        
      Weak DP Rules:
        
      Weak TRS Rules:
        a__filter(X1,X2,X3) -> filter(X1,X2,X3)
        a__filter(cons(X,Y),0(),M) -> cons(0(),filter(Y,M,M))
        a__filter(cons(X,Y),s(N),M) -> cons(mark(X),filter(Y,N,M))
        a__nats(N) -> cons(mark(N),nats(s(N)))
        a__nats(X) -> nats(X)
        a__sieve(X) -> sieve(X)
        a__sieve(cons(0(),Y)) -> cons(0(),sieve(Y))
        a__sieve(cons(s(N),Y)) -> cons(s(mark(N)),sieve(filter(Y,N,N)))
        a__zprimes() -> a__sieve(a__nats(s(s(0()))))
        a__zprimes() -> zprimes()
        mark(0()) -> 0()
        mark(cons(X1,X2)) -> cons(mark(X1),X2)
        mark(filter(X1,X2,X3)) -> a__filter(mark(X1),mark(X2),mark(X3))
        mark(nats(X)) -> a__nats(mark(X))
        mark(s(X)) -> s(mark(X))
        mark(sieve(X)) -> a__sieve(mark(X))
        mark(zprimes()) -> a__zprimes()
      Signature:
        {a__filter/3,a__nats/1,a__sieve/1,a__zprimes/0,mark/1} / {0/0,cons/2,filter/3,nats/1,s/1,sieve/1,zprimes/0}
      Obligation:
        Innermost
        basic terms: {a__filter,a__nats,a__sieve,a__zprimes,mark}/{0,cons,filter,nats,s,sieve,zprimes}
    Applied Processor:
      EmptyProcessor
    Proof:
      The problem is already closed. The intended complexity is O(1).