WORST_CASE(Omega(n^1),O(n^3))
* Step 1: Sum WORST_CASE(Omega(n^1),O(n^3))
    + Considered Problem:
        - Strict TRS:
            a__add(X1,X2) -> add(X1,X2)
            a__add(0(),X) -> mark(X)
            a__add(s(X),Y) -> s(add(X,Y))
            a__from(X) -> cons(mark(X),from(s(X)))
            a__from(X) -> from(X)
            a__fst(X1,X2) -> fst(X1,X2)
            a__fst(0(),Z) -> nil()
            a__fst(s(X),cons(Y,Z)) -> cons(mark(Y),fst(X,Z))
            a__len(X) -> len(X)
            a__len(cons(X,Z)) -> s(len(Z))
            a__len(nil()) -> 0()
            mark(0()) -> 0()
            mark(add(X1,X2)) -> a__add(mark(X1),mark(X2))
            mark(cons(X1,X2)) -> cons(mark(X1),X2)
            mark(from(X)) -> a__from(mark(X))
            mark(fst(X1,X2)) -> a__fst(mark(X1),mark(X2))
            mark(len(X)) -> a__len(mark(X))
            mark(nil()) -> nil()
            mark(s(X)) -> s(X)
        - Signature:
            {a__add/2,a__from/1,a__fst/2,a__len/1,mark/1} / {0/0,add/2,cons/2,from/1,fst/2,len/1,nil/0,s/1}
        - Obligation:
            innermost runtime complexity wrt. defined symbols {a__add,a__from,a__fst,a__len,mark} and constructors {0
            ,add,cons,from,fst,len,nil,s}
    + Applied Processor:
        Sum {left = someStrategy, right = someStrategy}
    + Details:
        ()
** Step 1.a:1: DecreasingLoops WORST_CASE(Omega(n^1),?)
    + Considered Problem:
        - Strict TRS:
            a__add(X1,X2) -> add(X1,X2)
            a__add(0(),X) -> mark(X)
            a__add(s(X),Y) -> s(add(X,Y))
            a__from(X) -> cons(mark(X),from(s(X)))
            a__from(X) -> from(X)
            a__fst(X1,X2) -> fst(X1,X2)
            a__fst(0(),Z) -> nil()
            a__fst(s(X),cons(Y,Z)) -> cons(mark(Y),fst(X,Z))
            a__len(X) -> len(X)
            a__len(cons(X,Z)) -> s(len(Z))
            a__len(nil()) -> 0()
            mark(0()) -> 0()
            mark(add(X1,X2)) -> a__add(mark(X1),mark(X2))
            mark(cons(X1,X2)) -> cons(mark(X1),X2)
            mark(from(X)) -> a__from(mark(X))
            mark(fst(X1,X2)) -> a__fst(mark(X1),mark(X2))
            mark(len(X)) -> a__len(mark(X))
            mark(nil()) -> nil()
            mark(s(X)) -> s(X)
        - Signature:
            {a__add/2,a__from/1,a__fst/2,a__len/1,mark/1} / {0/0,add/2,cons/2,from/1,fst/2,len/1,nil/0,s/1}
        - Obligation:
            innermost runtime complexity wrt. defined symbols {a__add,a__from,a__fst,a__len,mark} and constructors {0
            ,add,cons,from,fst,len,nil,s}
    + Applied Processor:
        DecreasingLoops {bound = AnyLoop, narrow = 10}
    + Details:
        The system has following decreasing Loops:
          mark(x){x -> add(x,y)} =
            mark(add(x,y)) ->^+ a__add(mark(x),mark(y))
              = C[mark(x) = mark(x){}]

** Step 1.b:1: NaturalMI WORST_CASE(?,O(n^3))
    + Considered Problem:
        - Strict TRS:
            a__add(X1,X2) -> add(X1,X2)
            a__add(0(),X) -> mark(X)
            a__add(s(X),Y) -> s(add(X,Y))
            a__from(X) -> cons(mark(X),from(s(X)))
            a__from(X) -> from(X)
            a__fst(X1,X2) -> fst(X1,X2)
            a__fst(0(),Z) -> nil()
            a__fst(s(X),cons(Y,Z)) -> cons(mark(Y),fst(X,Z))
            a__len(X) -> len(X)
            a__len(cons(X,Z)) -> s(len(Z))
            a__len(nil()) -> 0()
            mark(0()) -> 0()
            mark(add(X1,X2)) -> a__add(mark(X1),mark(X2))
            mark(cons(X1,X2)) -> cons(mark(X1),X2)
            mark(from(X)) -> a__from(mark(X))
            mark(fst(X1,X2)) -> a__fst(mark(X1),mark(X2))
            mark(len(X)) -> a__len(mark(X))
            mark(nil()) -> nil()
            mark(s(X)) -> s(X)
        - Signature:
            {a__add/2,a__from/1,a__fst/2,a__len/1,mark/1} / {0/0,add/2,cons/2,from/1,fst/2,len/1,nil/0,s/1}
        - Obligation:
            innermost runtime complexity wrt. defined symbols {a__add,a__from,a__fst,a__len,mark} and constructors {0
            ,add,cons,from,fst,len,nil,s}
    + Applied Processor:
        NaturalMI {miDimension = 1, miDegree = 1, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Just any strict-rules}
    + Details:
        We apply a matrix interpretation of kind constructor based matrix interpretation:
        The following argument positions are considered usable:
          uargs(a__add) = {1,2},
          uargs(a__from) = {1},
          uargs(a__fst) = {1,2},
          uargs(a__len) = {1},
          uargs(cons) = {1}
        
        Following symbols are considered usable:
          {a__add,a__from,a__fst,a__len,mark}
        TcT has computed the following interpretation:
                p(0) = [0]                  
           p(a__add) = [1] x1 + [1] x2 + [2]
          p(a__from) = [1] x1 + [0]         
           p(a__fst) = [1] x1 + [1] x2 + [0]
           p(a__len) = [1] x1 + [0]         
              p(add) = [1] x1 + [1] x2 + [2]
             p(cons) = [1] x1 + [0]         
             p(from) = [1] x1 + [0]         
              p(fst) = [1] x1 + [1] x2 + [0]
              p(len) = [1] x1 + [0]         
             p(mark) = [1] x1 + [0]         
              p(nil) = [0]                  
                p(s) = [0]                  
        
        Following rules are strictly oriented:
         a__add(0(),X) = [1] X + [2]
                       > [1] X + [0]
                       = mark(X)    
        
        a__add(s(X),Y) = [1] Y + [2]
                       > [0]        
                       = s(add(X,Y))
        
        
        Following rules are (at-least) weakly oriented:
                 a__add(X1,X2) =  [1] X1 + [1] X2 + [2]    
                               >= [1] X1 + [1] X2 + [2]    
                               =  add(X1,X2)               
        
                    a__from(X) =  [1] X + [0]              
                               >= [1] X + [0]              
                               =  cons(mark(X),from(s(X))) 
        
                    a__from(X) =  [1] X + [0]              
                               >= [1] X + [0]              
                               =  from(X)                  
        
                 a__fst(X1,X2) =  [1] X1 + [1] X2 + [0]    
                               >= [1] X1 + [1] X2 + [0]    
                               =  fst(X1,X2)               
        
                 a__fst(0(),Z) =  [1] Z + [0]              
                               >= [0]                      
                               =  nil()                    
        
        a__fst(s(X),cons(Y,Z)) =  [1] Y + [0]              
                               >= [1] Y + [0]              
                               =  cons(mark(Y),fst(X,Z))   
        
                     a__len(X) =  [1] X + [0]              
                               >= [1] X + [0]              
                               =  len(X)                   
        
             a__len(cons(X,Z)) =  [1] X + [0]              
                               >= [0]                      
                               =  s(len(Z))                
        
                 a__len(nil()) =  [0]                      
                               >= [0]                      
                               =  0()                      
        
                     mark(0()) =  [0]                      
                               >= [0]                      
                               =  0()                      
        
              mark(add(X1,X2)) =  [1] X1 + [1] X2 + [2]    
                               >= [1] X1 + [1] X2 + [2]    
                               =  a__add(mark(X1),mark(X2))
        
             mark(cons(X1,X2)) =  [1] X1 + [0]             
                               >= [1] X1 + [0]             
                               =  cons(mark(X1),X2)        
        
                 mark(from(X)) =  [1] X + [0]              
                               >= [1] X + [0]              
                               =  a__from(mark(X))         
        
              mark(fst(X1,X2)) =  [1] X1 + [1] X2 + [0]    
                               >= [1] X1 + [1] X2 + [0]    
                               =  a__fst(mark(X1),mark(X2))
        
                  mark(len(X)) =  [1] X + [0]              
                               >= [1] X + [0]              
                               =  a__len(mark(X))          
        
                   mark(nil()) =  [0]                      
                               >= [0]                      
                               =  nil()                    
        
                    mark(s(X)) =  [0]                      
                               >= [0]                      
                               =  s(X)                     
        
** Step 1.b:2: NaturalPI WORST_CASE(?,O(n^3))
    + Considered Problem:
        - Strict TRS:
            a__add(X1,X2) -> add(X1,X2)
            a__from(X) -> cons(mark(X),from(s(X)))
            a__from(X) -> from(X)
            a__fst(X1,X2) -> fst(X1,X2)
            a__fst(0(),Z) -> nil()
            a__fst(s(X),cons(Y,Z)) -> cons(mark(Y),fst(X,Z))
            a__len(X) -> len(X)
            a__len(cons(X,Z)) -> s(len(Z))
            a__len(nil()) -> 0()
            mark(0()) -> 0()
            mark(add(X1,X2)) -> a__add(mark(X1),mark(X2))
            mark(cons(X1,X2)) -> cons(mark(X1),X2)
            mark(from(X)) -> a__from(mark(X))
            mark(fst(X1,X2)) -> a__fst(mark(X1),mark(X2))
            mark(len(X)) -> a__len(mark(X))
            mark(nil()) -> nil()
            mark(s(X)) -> s(X)
        - Weak TRS:
            a__add(0(),X) -> mark(X)
            a__add(s(X),Y) -> s(add(X,Y))
        - Signature:
            {a__add/2,a__from/1,a__fst/2,a__len/1,mark/1} / {0/0,add/2,cons/2,from/1,fst/2,len/1,nil/0,s/1}
        - Obligation:
            innermost runtime complexity wrt. defined symbols {a__add,a__from,a__fst,a__len,mark} and constructors {0
            ,add,cons,from,fst,len,nil,s}
    + Applied Processor:
        NaturalPI {shape = Linear, restrict = Restrict, uargs = UArgs, urules = URules, selector = Just any strict-rules}
    + Details:
        We apply a polynomial interpretation of kind constructor-based(linear):
        The following argument positions are considered usable:
          uargs(a__add) = {1,2},
          uargs(a__from) = {1},
          uargs(a__fst) = {1,2},
          uargs(a__len) = {1},
          uargs(cons) = {1}
        
        Following symbols are considered usable:
          {a__add,a__from,a__fst,a__len,mark}
        TcT has computed the following interpretation:
                p(0) = 3          
           p(a__add) = x1 + x2    
          p(a__from) = 7 + x1     
           p(a__fst) = 4 + x1 + x2
           p(a__len) = 4 + x1     
              p(add) = x1 + x2    
             p(cons) = 3 + x1     
             p(from) = 7 + x1     
              p(fst) = 4 + x1 + x2
              p(len) = 4 + x1     
             p(mark) = x1         
              p(nil) = 2          
                p(s) = 4          
        
        Following rules are strictly oriented:
                    a__from(X) = 7 + X                   
                               > 3 + X                   
                               = cons(mark(X),from(s(X)))
        
                 a__fst(0(),Z) = 7 + Z                   
                               > 2                       
                               = nil()                   
        
        a__fst(s(X),cons(Y,Z)) = 11 + Y                  
                               > 3 + Y                   
                               = cons(mark(Y),fst(X,Z))  
        
             a__len(cons(X,Z)) = 7 + X                   
                               > 4                       
                               = s(len(Z))               
        
                 a__len(nil()) = 6                       
                               > 3                       
                               = 0()                     
        
        
        Following rules are (at-least) weakly oriented:
            a__add(X1,X2) =  X1 + X2                  
                          >= X1 + X2                  
                          =  add(X1,X2)               
        
            a__add(0(),X) =  3 + X                    
                          >= X                        
                          =  mark(X)                  
        
           a__add(s(X),Y) =  4 + Y                    
                          >= 4                        
                          =  s(add(X,Y))              
        
               a__from(X) =  7 + X                    
                          >= 7 + X                    
                          =  from(X)                  
        
            a__fst(X1,X2) =  4 + X1 + X2              
                          >= 4 + X1 + X2              
                          =  fst(X1,X2)               
        
                a__len(X) =  4 + X                    
                          >= 4 + X                    
                          =  len(X)                   
        
                mark(0()) =  3                        
                          >= 3                        
                          =  0()                      
        
         mark(add(X1,X2)) =  X1 + X2                  
                          >= X1 + X2                  
                          =  a__add(mark(X1),mark(X2))
        
        mark(cons(X1,X2)) =  3 + X1                   
                          >= 3 + X1                   
                          =  cons(mark(X1),X2)        
        
            mark(from(X)) =  7 + X                    
                          >= 7 + X                    
                          =  a__from(mark(X))         
        
         mark(fst(X1,X2)) =  4 + X1 + X2              
                          >= 4 + X1 + X2              
                          =  a__fst(mark(X1),mark(X2))
        
             mark(len(X)) =  4 + X                    
                          >= 4 + X                    
                          =  a__len(mark(X))          
        
              mark(nil()) =  2                        
                          >= 2                        
                          =  nil()                    
        
               mark(s(X)) =  4                        
                          >= 4                        
                          =  s(X)                     
        
** Step 1.b:3: NaturalMI WORST_CASE(?,O(n^3))
    + Considered Problem:
        - Strict TRS:
            a__add(X1,X2) -> add(X1,X2)
            a__from(X) -> from(X)
            a__fst(X1,X2) -> fst(X1,X2)
            a__len(X) -> len(X)
            mark(0()) -> 0()
            mark(add(X1,X2)) -> a__add(mark(X1),mark(X2))
            mark(cons(X1,X2)) -> cons(mark(X1),X2)
            mark(from(X)) -> a__from(mark(X))
            mark(fst(X1,X2)) -> a__fst(mark(X1),mark(X2))
            mark(len(X)) -> a__len(mark(X))
            mark(nil()) -> nil()
            mark(s(X)) -> s(X)
        - Weak TRS:
            a__add(0(),X) -> mark(X)
            a__add(s(X),Y) -> s(add(X,Y))
            a__from(X) -> cons(mark(X),from(s(X)))
            a__fst(0(),Z) -> nil()
            a__fst(s(X),cons(Y,Z)) -> cons(mark(Y),fst(X,Z))
            a__len(cons(X,Z)) -> s(len(Z))
            a__len(nil()) -> 0()
        - Signature:
            {a__add/2,a__from/1,a__fst/2,a__len/1,mark/1} / {0/0,add/2,cons/2,from/1,fst/2,len/1,nil/0,s/1}
        - Obligation:
            innermost runtime complexity wrt. defined symbols {a__add,a__from,a__fst,a__len,mark} and constructors {0
            ,add,cons,from,fst,len,nil,s}
    + Applied Processor:
        NaturalMI {miDimension = 3, miDegree = 3, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Just any strict-rules}
    + Details:
        We apply a matrix interpretation of kind constructor based matrix interpretation:
        The following argument positions are considered usable:
          uargs(a__add) = {1,2},
          uargs(a__from) = {1},
          uargs(a__fst) = {1,2},
          uargs(a__len) = {1},
          uargs(cons) = {1}
        
        Following symbols are considered usable:
          {a__add,a__from,a__fst,a__len,mark}
        TcT has computed the following interpretation:
                p(0) = [0]                          
                       [0]                          
                       [0]                          
           p(a__add) = [1 1 0]      [1 1 0]      [0]
                       [0 0 1] x1 + [0 0 1] x2 + [1]
                       [0 0 1]      [0 0 1]      [1]
          p(a__from) = [1 1 0]      [0]             
                       [0 0 1] x1 + [0]             
                       [0 0 1]      [0]             
           p(a__fst) = [1 1 0]      [1 1 0]      [0]
                       [0 0 1] x1 + [0 0 1] x2 + [0]
                       [0 0 1]      [0 0 1]      [1]
           p(a__len) = [1 1 0]      [0]             
                       [0 0 1] x1 + [1]             
                       [0 0 1]      [1]             
              p(add) = [1 1 0]      [1 1 0]      [0]
                       [0 0 1] x1 + [0 0 1] x2 + [1]
                       [0 0 1]      [0 0 1]      [1]
             p(cons) = [1 0 0]      [0]             
                       [0 1 0] x1 + [0]             
                       [0 0 1]      [0]             
             p(from) = [1 1 0]      [0]             
                       [0 0 1] x1 + [0]             
                       [0 0 1]      [0]             
              p(fst) = [1 1 0]      [1 1 0]      [0]
                       [0 0 1] x1 + [0 0 1] x2 + [0]
                       [0 0 1]      [0 0 1]      [1]
              p(len) = [1 1 0]      [0]             
                       [0 0 1] x1 + [0]             
                       [0 0 1]      [1]             
             p(mark) = [1 1 0]      [0]             
                       [0 0 1] x1 + [0]             
                       [0 0 1]      [0]             
              p(nil) = [0]                          
                       [0]                          
                       [0]                          
                p(s) = [0]                          
                       [0]                          
                       [0]                          
        
        Following rules are strictly oriented:
        mark(add(X1,X2)) = [1 1 1]      [1 1 1]      [1]
                           [0 0 1] X1 + [0 0 1] X2 + [1]
                           [0 0 1]      [0 0 1]      [1]
                         > [1 1 1]      [1 1 1]      [0]
                           [0 0 1] X1 + [0 0 1] X2 + [1]
                           [0 0 1]      [0 0 1]      [1]
                         = a__add(mark(X1),mark(X2))    
        
        
        Following rules are (at-least) weakly oriented:
                 a__add(X1,X2) =  [1 1 0]      [1 1 0]      [0]
                                  [0 0 1] X1 + [0 0 1] X2 + [1]
                                  [0 0 1]      [0 0 1]      [1]
                               >= [1 1 0]      [1 1 0]      [0]
                                  [0 0 1] X1 + [0 0 1] X2 + [1]
                                  [0 0 1]      [0 0 1]      [1]
                               =  add(X1,X2)                   
        
                 a__add(0(),X) =  [1 1 0]     [0]              
                                  [0 0 1] X + [1]              
                                  [0 0 1]     [1]              
                               >= [1 1 0]     [0]              
                                  [0 0 1] X + [0]              
                                  [0 0 1]     [0]              
                               =  mark(X)                      
        
                a__add(s(X),Y) =  [1 1 0]     [0]              
                                  [0 0 1] Y + [1]              
                                  [0 0 1]     [1]              
                               >= [0]                          
                                  [0]                          
                                  [0]                          
                               =  s(add(X,Y))                  
        
                    a__from(X) =  [1 1 0]     [0]              
                                  [0 0 1] X + [0]              
                                  [0 0 1]     [0]              
                               >= [1 1 0]     [0]              
                                  [0 0 1] X + [0]              
                                  [0 0 1]     [0]              
                               =  cons(mark(X),from(s(X)))     
        
                    a__from(X) =  [1 1 0]     [0]              
                                  [0 0 1] X + [0]              
                                  [0 0 1]     [0]              
                               >= [1 1 0]     [0]              
                                  [0 0 1] X + [0]              
                                  [0 0 1]     [0]              
                               =  from(X)                      
        
                 a__fst(X1,X2) =  [1 1 0]      [1 1 0]      [0]
                                  [0 0 1] X1 + [0 0 1] X2 + [0]
                                  [0 0 1]      [0 0 1]      [1]
                               >= [1 1 0]      [1 1 0]      [0]
                                  [0 0 1] X1 + [0 0 1] X2 + [0]
                                  [0 0 1]      [0 0 1]      [1]
                               =  fst(X1,X2)                   
        
                 a__fst(0(),Z) =  [1 1 0]     [0]              
                                  [0 0 1] Z + [0]              
                                  [0 0 1]     [1]              
                               >= [0]                          
                                  [0]                          
                                  [0]                          
                               =  nil()                        
        
        a__fst(s(X),cons(Y,Z)) =  [1 1 0]     [0]              
                                  [0 0 1] Y + [0]              
                                  [0 0 1]     [1]              
                               >= [1 1 0]     [0]              
                                  [0 0 1] Y + [0]              
                                  [0 0 1]     [0]              
                               =  cons(mark(Y),fst(X,Z))       
        
                     a__len(X) =  [1 1 0]     [0]              
                                  [0 0 1] X + [1]              
                                  [0 0 1]     [1]              
                               >= [1 1 0]     [0]              
                                  [0 0 1] X + [0]              
                                  [0 0 1]     [1]              
                               =  len(X)                       
        
             a__len(cons(X,Z)) =  [1 1 0]     [0]              
                                  [0 0 1] X + [1]              
                                  [0 0 1]     [1]              
                               >= [0]                          
                                  [0]                          
                                  [0]                          
                               =  s(len(Z))                    
        
                 a__len(nil()) =  [0]                          
                                  [1]                          
                                  [1]                          
                               >= [0]                          
                                  [0]                          
                                  [0]                          
                               =  0()                          
        
                     mark(0()) =  [0]                          
                                  [0]                          
                                  [0]                          
                               >= [0]                          
                                  [0]                          
                                  [0]                          
                               =  0()                          
        
             mark(cons(X1,X2)) =  [1 1 0]      [0]             
                                  [0 0 1] X1 + [0]             
                                  [0 0 1]      [0]             
                               >= [1 1 0]      [0]             
                                  [0 0 1] X1 + [0]             
                                  [0 0 1]      [0]             
                               =  cons(mark(X1),X2)            
        
                 mark(from(X)) =  [1 1 1]     [0]              
                                  [0 0 1] X + [0]              
                                  [0 0 1]     [0]              
                               >= [1 1 1]     [0]              
                                  [0 0 1] X + [0]              
                                  [0 0 1]     [0]              
                               =  a__from(mark(X))             
        
              mark(fst(X1,X2)) =  [1 1 1]      [1 1 1]      [0]
                                  [0 0 1] X1 + [0 0 1] X2 + [1]
                                  [0 0 1]      [0 0 1]      [1]
                               >= [1 1 1]      [1 1 1]      [0]
                                  [0 0 1] X1 + [0 0 1] X2 + [0]
                                  [0 0 1]      [0 0 1]      [1]
                               =  a__fst(mark(X1),mark(X2))    
        
                  mark(len(X)) =  [1 1 1]     [0]              
                                  [0 0 1] X + [1]              
                                  [0 0 1]     [1]              
                               >= [1 1 1]     [0]              
                                  [0 0 1] X + [1]              
                                  [0 0 1]     [1]              
                               =  a__len(mark(X))              
        
                   mark(nil()) =  [0]                          
                                  [0]                          
                                  [0]                          
                               >= [0]                          
                                  [0]                          
                                  [0]                          
                               =  nil()                        
        
                    mark(s(X)) =  [0]                          
                                  [0]                          
                                  [0]                          
                               >= [0]                          
                                  [0]                          
                                  [0]                          
                               =  s(X)                         
        
** Step 1.b:4: NaturalMI WORST_CASE(?,O(n^3))
    + Considered Problem:
        - Strict TRS:
            a__add(X1,X2) -> add(X1,X2)
            a__from(X) -> from(X)
            a__fst(X1,X2) -> fst(X1,X2)
            a__len(X) -> len(X)
            mark(0()) -> 0()
            mark(cons(X1,X2)) -> cons(mark(X1),X2)
            mark(from(X)) -> a__from(mark(X))
            mark(fst(X1,X2)) -> a__fst(mark(X1),mark(X2))
            mark(len(X)) -> a__len(mark(X))
            mark(nil()) -> nil()
            mark(s(X)) -> s(X)
        - Weak TRS:
            a__add(0(),X) -> mark(X)
            a__add(s(X),Y) -> s(add(X,Y))
            a__from(X) -> cons(mark(X),from(s(X)))
            a__fst(0(),Z) -> nil()
            a__fst(s(X),cons(Y,Z)) -> cons(mark(Y),fst(X,Z))
            a__len(cons(X,Z)) -> s(len(Z))
            a__len(nil()) -> 0()
            mark(add(X1,X2)) -> a__add(mark(X1),mark(X2))
        - Signature:
            {a__add/2,a__from/1,a__fst/2,a__len/1,mark/1} / {0/0,add/2,cons/2,from/1,fst/2,len/1,nil/0,s/1}
        - Obligation:
            innermost runtime complexity wrt. defined symbols {a__add,a__from,a__fst,a__len,mark} and constructors {0
            ,add,cons,from,fst,len,nil,s}
    + Applied Processor:
        NaturalMI {miDimension = 3, miDegree = 3, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Just any strict-rules}
    + Details:
        We apply a matrix interpretation of kind constructor based matrix interpretation:
        The following argument positions are considered usable:
          uargs(a__add) = {1,2},
          uargs(a__from) = {1},
          uargs(a__fst) = {1,2},
          uargs(a__len) = {1},
          uargs(cons) = {1}
        
        Following symbols are considered usable:
          {a__add,a__from,a__fst,a__len,mark}
        TcT has computed the following interpretation:
                p(0) = [0]                          
                       [0]                          
                       [1]                          
           p(a__add) = [1 0 0]      [1 0 1]      [0]
                       [0 0 0] x1 + [0 0 0] x2 + [0]
                       [0 0 1]      [0 0 1]      [0]
          p(a__from) = [1 0 1]      [0]             
                       [0 0 0] x1 + [0]             
                       [0 0 1]      [0]             
           p(a__fst) = [1 0 0]      [1 0 1]      [0]
                       [0 0 0] x1 + [0 0 0] x2 + [0]
                       [0 0 1]      [0 0 1]      [0]
           p(a__len) = [1 0 0]      [0]             
                       [0 1 0] x1 + [0]             
                       [0 0 1]      [0]             
              p(add) = [1 0 0]      [1 0 1]      [0]
                       [0 0 0] x1 + [0 0 0] x2 + [0]
                       [0 0 1]      [0 0 1]      [0]
             p(cons) = [1 0 0]      [0]             
                       [0 0 0] x1 + [0]             
                       [0 0 1]      [0]             
             p(from) = [1 0 1]      [0]             
                       [0 0 0] x1 + [0]             
                       [0 0 1]      [0]             
              p(fst) = [1 0 0]      [1 0 1]      [0]
                       [0 0 0] x1 + [0 0 0] x2 + [0]
                       [0 0 1]      [0 0 1]      [0]
              p(len) = [1 0 0]      [0]             
                       [0 0 0] x1 + [0]             
                       [0 0 1]      [0]             
             p(mark) = [1 0 1]      [0]             
                       [0 0 0] x1 + [0]             
                       [0 0 1]      [0]             
              p(nil) = [0]                          
                       [0]                          
                       [1]                          
                p(s) = [0]                          
                       [0]                          
                       [0]                          
        
        Following rules are strictly oriented:
          mark(0()) = [1]  
                      [0]  
                      [1]  
                    > [0]  
                      [0]  
                      [1]  
                    = 0()  
        
        mark(nil()) = [1]  
                      [0]  
                      [1]  
                    > [0]  
                      [0]  
                      [1]  
                    = nil()
        
        
        Following rules are (at-least) weakly oriented:
                 a__add(X1,X2) =  [1 0 0]      [1 0 1]      [0]
                                  [0 0 0] X1 + [0 0 0] X2 + [0]
                                  [0 0 1]      [0 0 1]      [0]
                               >= [1 0 0]      [1 0 1]      [0]
                                  [0 0 0] X1 + [0 0 0] X2 + [0]
                                  [0 0 1]      [0 0 1]      [0]
                               =  add(X1,X2)                   
        
                 a__add(0(),X) =  [1 0 1]     [0]              
                                  [0 0 0] X + [0]              
                                  [0 0 1]     [1]              
                               >= [1 0 1]     [0]              
                                  [0 0 0] X + [0]              
                                  [0 0 1]     [0]              
                               =  mark(X)                      
        
                a__add(s(X),Y) =  [1 0 1]     [0]              
                                  [0 0 0] Y + [0]              
                                  [0 0 1]     [0]              
                               >= [0]                          
                                  [0]                          
                                  [0]                          
                               =  s(add(X,Y))                  
        
                    a__from(X) =  [1 0 1]     [0]              
                                  [0 0 0] X + [0]              
                                  [0 0 1]     [0]              
                               >= [1 0 1]     [0]              
                                  [0 0 0] X + [0]              
                                  [0 0 1]     [0]              
                               =  cons(mark(X),from(s(X)))     
        
                    a__from(X) =  [1 0 1]     [0]              
                                  [0 0 0] X + [0]              
                                  [0 0 1]     [0]              
                               >= [1 0 1]     [0]              
                                  [0 0 0] X + [0]              
                                  [0 0 1]     [0]              
                               =  from(X)                      
        
                 a__fst(X1,X2) =  [1 0 0]      [1 0 1]      [0]
                                  [0 0 0] X1 + [0 0 0] X2 + [0]
                                  [0 0 1]      [0 0 1]      [0]
                               >= [1 0 0]      [1 0 1]      [0]
                                  [0 0 0] X1 + [0 0 0] X2 + [0]
                                  [0 0 1]      [0 0 1]      [0]
                               =  fst(X1,X2)                   
        
                 a__fst(0(),Z) =  [1 0 1]     [0]              
                                  [0 0 0] Z + [0]              
                                  [0 0 1]     [1]              
                               >= [0]                          
                                  [0]                          
                                  [1]                          
                               =  nil()                        
        
        a__fst(s(X),cons(Y,Z)) =  [1 0 1]     [0]              
                                  [0 0 0] Y + [0]              
                                  [0 0 1]     [0]              
                               >= [1 0 1]     [0]              
                                  [0 0 0] Y + [0]              
                                  [0 0 1]     [0]              
                               =  cons(mark(Y),fst(X,Z))       
        
                     a__len(X) =  [1 0 0]     [0]              
                                  [0 1 0] X + [0]              
                                  [0 0 1]     [0]              
                               >= [1 0 0]     [0]              
                                  [0 0 0] X + [0]              
                                  [0 0 1]     [0]              
                               =  len(X)                       
        
             a__len(cons(X,Z)) =  [1 0 0]     [0]              
                                  [0 0 0] X + [0]              
                                  [0 0 1]     [0]              
                               >= [0]                          
                                  [0]                          
                                  [0]                          
                               =  s(len(Z))                    
        
                 a__len(nil()) =  [0]                          
                                  [0]                          
                                  [1]                          
                               >= [0]                          
                                  [0]                          
                                  [1]                          
                               =  0()                          
        
              mark(add(X1,X2)) =  [1 0 1]      [1 0 2]      [0]
                                  [0 0 0] X1 + [0 0 0] X2 + [0]
                                  [0 0 1]      [0 0 1]      [0]
                               >= [1 0 1]      [1 0 2]      [0]
                                  [0 0 0] X1 + [0 0 0] X2 + [0]
                                  [0 0 1]      [0 0 1]      [0]
                               =  a__add(mark(X1),mark(X2))    
        
             mark(cons(X1,X2)) =  [1 0 1]      [0]             
                                  [0 0 0] X1 + [0]             
                                  [0 0 1]      [0]             
                               >= [1 0 1]      [0]             
                                  [0 0 0] X1 + [0]             
                                  [0 0 1]      [0]             
                               =  cons(mark(X1),X2)            
        
                 mark(from(X)) =  [1 0 2]     [0]              
                                  [0 0 0] X + [0]              
                                  [0 0 1]     [0]              
                               >= [1 0 2]     [0]              
                                  [0 0 0] X + [0]              
                                  [0 0 1]     [0]              
                               =  a__from(mark(X))             
        
              mark(fst(X1,X2)) =  [1 0 1]      [1 0 2]      [0]
                                  [0 0 0] X1 + [0 0 0] X2 + [0]
                                  [0 0 1]      [0 0 1]      [0]
                               >= [1 0 1]      [1 0 2]      [0]
                                  [0 0 0] X1 + [0 0 0] X2 + [0]
                                  [0 0 1]      [0 0 1]      [0]
                               =  a__fst(mark(X1),mark(X2))    
        
                  mark(len(X)) =  [1 0 1]     [0]              
                                  [0 0 0] X + [0]              
                                  [0 0 1]     [0]              
                               >= [1 0 1]     [0]              
                                  [0 0 0] X + [0]              
                                  [0 0 1]     [0]              
                               =  a__len(mark(X))              
        
                    mark(s(X)) =  [0]                          
                                  [0]                          
                                  [0]                          
                               >= [0]                          
                                  [0]                          
                                  [0]                          
                               =  s(X)                         
        
** Step 1.b:5: NaturalMI WORST_CASE(?,O(n^3))
    + Considered Problem:
        - Strict TRS:
            a__add(X1,X2) -> add(X1,X2)
            a__from(X) -> from(X)
            a__fst(X1,X2) -> fst(X1,X2)
            a__len(X) -> len(X)
            mark(cons(X1,X2)) -> cons(mark(X1),X2)
            mark(from(X)) -> a__from(mark(X))
            mark(fst(X1,X2)) -> a__fst(mark(X1),mark(X2))
            mark(len(X)) -> a__len(mark(X))
            mark(s(X)) -> s(X)
        - Weak TRS:
            a__add(0(),X) -> mark(X)
            a__add(s(X),Y) -> s(add(X,Y))
            a__from(X) -> cons(mark(X),from(s(X)))
            a__fst(0(),Z) -> nil()
            a__fst(s(X),cons(Y,Z)) -> cons(mark(Y),fst(X,Z))
            a__len(cons(X,Z)) -> s(len(Z))
            a__len(nil()) -> 0()
            mark(0()) -> 0()
            mark(add(X1,X2)) -> a__add(mark(X1),mark(X2))
            mark(nil()) -> nil()
        - Signature:
            {a__add/2,a__from/1,a__fst/2,a__len/1,mark/1} / {0/0,add/2,cons/2,from/1,fst/2,len/1,nil/0,s/1}
        - Obligation:
            innermost runtime complexity wrt. defined symbols {a__add,a__from,a__fst,a__len,mark} and constructors {0
            ,add,cons,from,fst,len,nil,s}
    + Applied Processor:
        NaturalMI {miDimension = 3, miDegree = 3, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Just any strict-rules}
    + Details:
        We apply a matrix interpretation of kind constructor based matrix interpretation:
        The following argument positions are considered usable:
          uargs(a__add) = {1,2},
          uargs(a__from) = {1},
          uargs(a__fst) = {1,2},
          uargs(a__len) = {1},
          uargs(cons) = {1}
        
        Following symbols are considered usable:
          {a__add,a__from,a__fst,a__len,mark}
        TcT has computed the following interpretation:
                p(0) = [0]                          
                       [0]                          
                       [0]                          
           p(a__add) = [1 0 1]      [1 1 0]      [0]
                       [0 1 0] x1 + [0 0 1] x2 + [0]
                       [0 0 1]      [0 0 1]      [0]
          p(a__from) = [1 1 0]      [1]             
                       [0 0 1] x1 + [1]             
                       [0 0 1]      [1]             
           p(a__fst) = [1 1 0]      [1 1 0]      [0]
                       [0 0 1] x1 + [0 0 1] x2 + [0]
                       [0 0 1]      [0 0 1]      [0]
           p(a__len) = [1 0 0]      [0]             
                       [0 1 0] x1 + [0]             
                       [0 0 1]      [0]             
              p(add) = [1 0 1]      [1 1 0]      [0]
                       [0 1 0] x1 + [0 0 1] x2 + [0]
                       [0 0 1]      [0 0 1]      [0]
             p(cons) = [1 0 0]      [0]             
                       [0 1 0] x1 + [0]             
                       [0 0 1]      [0]             
             p(from) = [1 1 0]      [0]             
                       [0 0 1] x1 + [1]             
                       [0 0 1]      [1]             
              p(fst) = [1 1 0]      [1 1 0]      [0]
                       [0 0 1] x1 + [0 0 1] x2 + [0]
                       [0 0 1]      [0 0 1]      [0]
              p(len) = [1 0 0]      [0]             
                       [0 1 0] x1 + [0]             
                       [0 0 1]      [0]             
             p(mark) = [1 1 0]      [0]             
                       [0 0 1] x1 + [0]             
                       [0 0 1]      [0]             
              p(nil) = [0]                          
                       [0]                          
                       [0]                          
                p(s) = [0]                          
                       [0]                          
                       [0]                          
        
        Following rules are strictly oriented:
        a__from(X) = [1 1 0]     [1]
                     [0 0 1] X + [1]
                     [0 0 1]     [1]
                   > [1 1 0]     [0]
                     [0 0 1] X + [1]
                     [0 0 1]     [1]
                   = from(X)        
        
        
        Following rules are (at-least) weakly oriented:
                 a__add(X1,X2) =  [1 0 1]      [1 1 0]      [0]
                                  [0 1 0] X1 + [0 0 1] X2 + [0]
                                  [0 0 1]      [0 0 1]      [0]
                               >= [1 0 1]      [1 1 0]      [0]
                                  [0 1 0] X1 + [0 0 1] X2 + [0]
                                  [0 0 1]      [0 0 1]      [0]
                               =  add(X1,X2)                   
        
                 a__add(0(),X) =  [1 1 0]     [0]              
                                  [0 0 1] X + [0]              
                                  [0 0 1]     [0]              
                               >= [1 1 0]     [0]              
                                  [0 0 1] X + [0]              
                                  [0 0 1]     [0]              
                               =  mark(X)                      
        
                a__add(s(X),Y) =  [1 1 0]     [0]              
                                  [0 0 1] Y + [0]              
                                  [0 0 1]     [0]              
                               >= [0]                          
                                  [0]                          
                                  [0]                          
                               =  s(add(X,Y))                  
        
                    a__from(X) =  [1 1 0]     [1]              
                                  [0 0 1] X + [1]              
                                  [0 0 1]     [1]              
                               >= [1 1 0]     [0]              
                                  [0 0 1] X + [0]              
                                  [0 0 1]     [0]              
                               =  cons(mark(X),from(s(X)))     
        
                 a__fst(X1,X2) =  [1 1 0]      [1 1 0]      [0]
                                  [0 0 1] X1 + [0 0 1] X2 + [0]
                                  [0 0 1]      [0 0 1]      [0]
                               >= [1 1 0]      [1 1 0]      [0]
                                  [0 0 1] X1 + [0 0 1] X2 + [0]
                                  [0 0 1]      [0 0 1]      [0]
                               =  fst(X1,X2)                   
        
                 a__fst(0(),Z) =  [1 1 0]     [0]              
                                  [0 0 1] Z + [0]              
                                  [0 0 1]     [0]              
                               >= [0]                          
                                  [0]                          
                                  [0]                          
                               =  nil()                        
        
        a__fst(s(X),cons(Y,Z)) =  [1 1 0]     [0]              
                                  [0 0 1] Y + [0]              
                                  [0 0 1]     [0]              
                               >= [1 1 0]     [0]              
                                  [0 0 1] Y + [0]              
                                  [0 0 1]     [0]              
                               =  cons(mark(Y),fst(X,Z))       
        
                     a__len(X) =  [1 0 0]     [0]              
                                  [0 1 0] X + [0]              
                                  [0 0 1]     [0]              
                               >= [1 0 0]     [0]              
                                  [0 1 0] X + [0]              
                                  [0 0 1]     [0]              
                               =  len(X)                       
        
             a__len(cons(X,Z)) =  [1 0 0]     [0]              
                                  [0 1 0] X + [0]              
                                  [0 0 1]     [0]              
                               >= [0]                          
                                  [0]                          
                                  [0]                          
                               =  s(len(Z))                    
        
                 a__len(nil()) =  [0]                          
                                  [0]                          
                                  [0]                          
                               >= [0]                          
                                  [0]                          
                                  [0]                          
                               =  0()                          
        
                     mark(0()) =  [0]                          
                                  [0]                          
                                  [0]                          
                               >= [0]                          
                                  [0]                          
                                  [0]                          
                               =  0()                          
        
              mark(add(X1,X2)) =  [1 1 1]      [1 1 1]      [0]
                                  [0 0 1] X1 + [0 0 1] X2 + [0]
                                  [0 0 1]      [0 0 1]      [0]
                               >= [1 1 1]      [1 1 1]      [0]
                                  [0 0 1] X1 + [0 0 1] X2 + [0]
                                  [0 0 1]      [0 0 1]      [0]
                               =  a__add(mark(X1),mark(X2))    
        
             mark(cons(X1,X2)) =  [1 1 0]      [0]             
                                  [0 0 1] X1 + [0]             
                                  [0 0 1]      [0]             
                               >= [1 1 0]      [0]             
                                  [0 0 1] X1 + [0]             
                                  [0 0 1]      [0]             
                               =  cons(mark(X1),X2)            
        
                 mark(from(X)) =  [1 1 1]     [1]              
                                  [0 0 1] X + [1]              
                                  [0 0 1]     [1]              
                               >= [1 1 1]     [1]              
                                  [0 0 1] X + [1]              
                                  [0 0 1]     [1]              
                               =  a__from(mark(X))             
        
              mark(fst(X1,X2)) =  [1 1 1]      [1 1 1]      [0]
                                  [0 0 1] X1 + [0 0 1] X2 + [0]
                                  [0 0 1]      [0 0 1]      [0]
                               >= [1 1 1]      [1 1 1]      [0]
                                  [0 0 1] X1 + [0 0 1] X2 + [0]
                                  [0 0 1]      [0 0 1]      [0]
                               =  a__fst(mark(X1),mark(X2))    
        
                  mark(len(X)) =  [1 1 0]     [0]              
                                  [0 0 1] X + [0]              
                                  [0 0 1]     [0]              
                               >= [1 1 0]     [0]              
                                  [0 0 1] X + [0]              
                                  [0 0 1]     [0]              
                               =  a__len(mark(X))              
        
                   mark(nil()) =  [0]                          
                                  [0]                          
                                  [0]                          
                               >= [0]                          
                                  [0]                          
                                  [0]                          
                               =  nil()                        
        
                    mark(s(X)) =  [0]                          
                                  [0]                          
                                  [0]                          
                               >= [0]                          
                                  [0]                          
                                  [0]                          
                               =  s(X)                         
        
** Step 1.b:6: NaturalMI WORST_CASE(?,O(n^3))
    + Considered Problem:
        - Strict TRS:
            a__add(X1,X2) -> add(X1,X2)
            a__fst(X1,X2) -> fst(X1,X2)
            a__len(X) -> len(X)
            mark(cons(X1,X2)) -> cons(mark(X1),X2)
            mark(from(X)) -> a__from(mark(X))
            mark(fst(X1,X2)) -> a__fst(mark(X1),mark(X2))
            mark(len(X)) -> a__len(mark(X))
            mark(s(X)) -> s(X)
        - Weak TRS:
            a__add(0(),X) -> mark(X)
            a__add(s(X),Y) -> s(add(X,Y))
            a__from(X) -> cons(mark(X),from(s(X)))
            a__from(X) -> from(X)
            a__fst(0(),Z) -> nil()
            a__fst(s(X),cons(Y,Z)) -> cons(mark(Y),fst(X,Z))
            a__len(cons(X,Z)) -> s(len(Z))
            a__len(nil()) -> 0()
            mark(0()) -> 0()
            mark(add(X1,X2)) -> a__add(mark(X1),mark(X2))
            mark(nil()) -> nil()
        - Signature:
            {a__add/2,a__from/1,a__fst/2,a__len/1,mark/1} / {0/0,add/2,cons/2,from/1,fst/2,len/1,nil/0,s/1}
        - Obligation:
            innermost runtime complexity wrt. defined symbols {a__add,a__from,a__fst,a__len,mark} and constructors {0
            ,add,cons,from,fst,len,nil,s}
    + Applied Processor:
        NaturalMI {miDimension = 3, miDegree = 3, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Just any strict-rules}
    + Details:
        We apply a matrix interpretation of kind constructor based matrix interpretation:
        The following argument positions are considered usable:
          uargs(a__add) = {1,2},
          uargs(a__from) = {1},
          uargs(a__fst) = {1,2},
          uargs(a__len) = {1},
          uargs(cons) = {1}
        
        Following symbols are considered usable:
          {a__add,a__from,a__fst,a__len,mark}
        TcT has computed the following interpretation:
                p(0) = [0]                          
                       [0]                          
                       [0]                          
           p(a__add) = [1 0 0]      [1 1 0]      [0]
                       [0 1 0] x1 + [0 0 1] x2 + [0]
                       [0 0 1]      [0 0 1]      [0]
          p(a__from) = [1 1 0]      [0]             
                       [0 0 1] x1 + [0]             
                       [0 0 1]      [1]             
           p(a__fst) = [1 1 0]      [1 1 0]      [0]
                       [0 0 1] x1 + [0 0 1] x2 + [0]
                       [0 0 1]      [0 0 1]      [0]
           p(a__len) = [1 1 0]      [0]             
                       [0 0 1] x1 + [0]             
                       [0 0 1]      [0]             
              p(add) = [1 0 0]      [1 1 0]      [0]
                       [0 1 0] x1 + [0 0 1] x2 + [0]
                       [0 0 1]      [0 0 1]      [0]
             p(cons) = [1 0 0]      [0]             
                       [0 1 0] x1 + [0]             
                       [0 0 1]      [1]             
             p(from) = [1 1 0]      [0]             
                       [0 0 1] x1 + [0]             
                       [0 0 1]      [1]             
              p(fst) = [1 1 0]      [1 1 0]      [0]
                       [0 0 1] x1 + [0 0 1] x2 + [0]
                       [0 0 1]      [0 0 1]      [0]
              p(len) = [1 1 0]      [0]             
                       [0 0 1] x1 + [0]             
                       [0 0 1]      [0]             
             p(mark) = [1 1 0]      [0]             
                       [0 0 1] x1 + [0]             
                       [0 0 1]      [0]             
              p(nil) = [0]                          
                       [0]                          
                       [0]                          
                p(s) = [0]                          
                       [1]                          
                       [1]                          
        
        Following rules are strictly oriented:
        mark(s(X)) = [1] 
                     [1] 
                     [1] 
                   > [0] 
                     [1] 
                     [1] 
                   = s(X)
        
        
        Following rules are (at-least) weakly oriented:
                 a__add(X1,X2) =  [1 0 0]      [1 1 0]      [0]
                                  [0 1 0] X1 + [0 0 1] X2 + [0]
                                  [0 0 1]      [0 0 1]      [0]
                               >= [1 0 0]      [1 1 0]      [0]
                                  [0 1 0] X1 + [0 0 1] X2 + [0]
                                  [0 0 1]      [0 0 1]      [0]
                               =  add(X1,X2)                   
        
                 a__add(0(),X) =  [1 1 0]     [0]              
                                  [0 0 1] X + [0]              
                                  [0 0 1]     [0]              
                               >= [1 1 0]     [0]              
                                  [0 0 1] X + [0]              
                                  [0 0 1]     [0]              
                               =  mark(X)                      
        
                a__add(s(X),Y) =  [1 1 0]     [0]              
                                  [0 0 1] Y + [1]              
                                  [0 0 1]     [1]              
                               >= [0]                          
                                  [1]                          
                                  [1]                          
                               =  s(add(X,Y))                  
        
                    a__from(X) =  [1 1 0]     [0]              
                                  [0 0 1] X + [0]              
                                  [0 0 1]     [1]              
                               >= [1 1 0]     [0]              
                                  [0 0 1] X + [0]              
                                  [0 0 1]     [1]              
                               =  cons(mark(X),from(s(X)))     
        
                    a__from(X) =  [1 1 0]     [0]              
                                  [0 0 1] X + [0]              
                                  [0 0 1]     [1]              
                               >= [1 1 0]     [0]              
                                  [0 0 1] X + [0]              
                                  [0 0 1]     [1]              
                               =  from(X)                      
        
                 a__fst(X1,X2) =  [1 1 0]      [1 1 0]      [0]
                                  [0 0 1] X1 + [0 0 1] X2 + [0]
                                  [0 0 1]      [0 0 1]      [0]
                               >= [1 1 0]      [1 1 0]      [0]
                                  [0 0 1] X1 + [0 0 1] X2 + [0]
                                  [0 0 1]      [0 0 1]      [0]
                               =  fst(X1,X2)                   
        
                 a__fst(0(),Z) =  [1 1 0]     [0]              
                                  [0 0 1] Z + [0]              
                                  [0 0 1]     [0]              
                               >= [0]                          
                                  [0]                          
                                  [0]                          
                               =  nil()                        
        
        a__fst(s(X),cons(Y,Z)) =  [1 1 0]     [1]              
                                  [0 0 1] Y + [2]              
                                  [0 0 1]     [2]              
                               >= [1 1 0]     [0]              
                                  [0 0 1] Y + [0]              
                                  [0 0 1]     [1]              
                               =  cons(mark(Y),fst(X,Z))       
        
                     a__len(X) =  [1 1 0]     [0]              
                                  [0 0 1] X + [0]              
                                  [0 0 1]     [0]              
                               >= [1 1 0]     [0]              
                                  [0 0 1] X + [0]              
                                  [0 0 1]     [0]              
                               =  len(X)                       
        
             a__len(cons(X,Z)) =  [1 1 0]     [0]              
                                  [0 0 1] X + [1]              
                                  [0 0 1]     [1]              
                               >= [0]                          
                                  [1]                          
                                  [1]                          
                               =  s(len(Z))                    
        
                 a__len(nil()) =  [0]                          
                                  [0]                          
                                  [0]                          
                               >= [0]                          
                                  [0]                          
                                  [0]                          
                               =  0()                          
        
                     mark(0()) =  [0]                          
                                  [0]                          
                                  [0]                          
                               >= [0]                          
                                  [0]                          
                                  [0]                          
                               =  0()                          
        
              mark(add(X1,X2)) =  [1 1 0]      [1 1 1]      [0]
                                  [0 0 1] X1 + [0 0 1] X2 + [0]
                                  [0 0 1]      [0 0 1]      [0]
                               >= [1 1 0]      [1 1 1]      [0]
                                  [0 0 1] X1 + [0 0 1] X2 + [0]
                                  [0 0 1]      [0 0 1]      [0]
                               =  a__add(mark(X1),mark(X2))    
        
             mark(cons(X1,X2)) =  [1 1 0]      [0]             
                                  [0 0 1] X1 + [1]             
                                  [0 0 1]      [1]             
                               >= [1 1 0]      [0]             
                                  [0 0 1] X1 + [0]             
                                  [0 0 1]      [1]             
                               =  cons(mark(X1),X2)            
        
                 mark(from(X)) =  [1 1 1]     [0]              
                                  [0 0 1] X + [1]              
                                  [0 0 1]     [1]              
                               >= [1 1 1]     [0]              
                                  [0 0 1] X + [0]              
                                  [0 0 1]     [1]              
                               =  a__from(mark(X))             
        
              mark(fst(X1,X2)) =  [1 1 1]      [1 1 1]      [0]
                                  [0 0 1] X1 + [0 0 1] X2 + [0]
                                  [0 0 1]      [0 0 1]      [0]
                               >= [1 1 1]      [1 1 1]      [0]
                                  [0 0 1] X1 + [0 0 1] X2 + [0]
                                  [0 0 1]      [0 0 1]      [0]
                               =  a__fst(mark(X1),mark(X2))    
        
                  mark(len(X)) =  [1 1 1]     [0]              
                                  [0 0 1] X + [0]              
                                  [0 0 1]     [0]              
                               >= [1 1 1]     [0]              
                                  [0 0 1] X + [0]              
                                  [0 0 1]     [0]              
                               =  a__len(mark(X))              
        
                   mark(nil()) =  [0]                          
                                  [0]                          
                                  [0]                          
                               >= [0]                          
                                  [0]                          
                                  [0]                          
                               =  nil()                        
        
** Step 1.b:7: NaturalMI WORST_CASE(?,O(n^3))
    + Considered Problem:
        - Strict TRS:
            a__add(X1,X2) -> add(X1,X2)
            a__fst(X1,X2) -> fst(X1,X2)
            a__len(X) -> len(X)
            mark(cons(X1,X2)) -> cons(mark(X1),X2)
            mark(from(X)) -> a__from(mark(X))
            mark(fst(X1,X2)) -> a__fst(mark(X1),mark(X2))
            mark(len(X)) -> a__len(mark(X))
        - Weak TRS:
            a__add(0(),X) -> mark(X)
            a__add(s(X),Y) -> s(add(X,Y))
            a__from(X) -> cons(mark(X),from(s(X)))
            a__from(X) -> from(X)
            a__fst(0(),Z) -> nil()
            a__fst(s(X),cons(Y,Z)) -> cons(mark(Y),fst(X,Z))
            a__len(cons(X,Z)) -> s(len(Z))
            a__len(nil()) -> 0()
            mark(0()) -> 0()
            mark(add(X1,X2)) -> a__add(mark(X1),mark(X2))
            mark(nil()) -> nil()
            mark(s(X)) -> s(X)
        - Signature:
            {a__add/2,a__from/1,a__fst/2,a__len/1,mark/1} / {0/0,add/2,cons/2,from/1,fst/2,len/1,nil/0,s/1}
        - Obligation:
            innermost runtime complexity wrt. defined symbols {a__add,a__from,a__fst,a__len,mark} and constructors {0
            ,add,cons,from,fst,len,nil,s}
    + Applied Processor:
        NaturalMI {miDimension = 3, miDegree = 3, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Just any strict-rules}
    + Details:
        We apply a matrix interpretation of kind constructor based matrix interpretation:
        The following argument positions are considered usable:
          uargs(a__add) = {1,2},
          uargs(a__from) = {1},
          uargs(a__fst) = {1,2},
          uargs(a__len) = {1},
          uargs(cons) = {1}
        
        Following symbols are considered usable:
          {a__add,a__from,a__fst,a__len,mark}
        TcT has computed the following interpretation:
                p(0) = [1]                          
                       [0]                          
                       [1]                          
           p(a__add) = [1 0 0]      [1 0 1]      [0]
                       [0 0 0] x1 + [0 0 0] x2 + [0]
                       [0 0 1]      [0 0 1]      [0]
          p(a__from) = [1 0 1]      [1]             
                       [0 0 0] x1 + [0]             
                       [0 0 1]      [0]             
           p(a__fst) = [1 0 0]      [1 1 1]      [0]
                       [0 1 0] x1 + [0 0 0] x2 + [0]
                       [0 0 1]      [0 0 1]      [0]
           p(a__len) = [1 0 0]      [0]             
                       [0 1 0] x1 + [0]             
                       [0 0 1]      [1]             
              p(add) = [1 0 0]      [1 0 1]      [0]
                       [0 0 0] x1 + [0 0 0] x2 + [0]
                       [0 0 1]      [0 0 1]      [0]
             p(cons) = [1 0 0]      [1]             
                       [0 0 0] x1 + [0]             
                       [0 0 1]      [0]             
             p(from) = [1 0 1]      [1]             
                       [0 0 0] x1 + [0]             
                       [0 0 1]      [0]             
              p(fst) = [1 0 0]      [1 0 1]      [0]
                       [0 0 0] x1 + [0 0 0] x2 + [0]
                       [0 0 1]      [0 0 1]      [0]
              p(len) = [1 0 0]      [0]             
                       [0 0 0] x1 + [0]             
                       [0 0 1]      [1]             
             p(mark) = [1 0 1]      [0]             
                       [0 0 0] x1 + [0]             
                       [0 0 1]      [0]             
              p(nil) = [1]                          
                       [0]                          
                       [1]                          
                p(s) = [1]                          
                       [0]                          
                       [0]                          
        
        Following rules are strictly oriented:
        mark(len(X)) = [1 0 1]     [1]
                       [0 0 0] X + [0]
                       [0 0 1]     [1]
                     > [1 0 1]     [0]
                       [0 0 0] X + [0]
                       [0 0 1]     [1]
                     = a__len(mark(X))
        
        
        Following rules are (at-least) weakly oriented:
                 a__add(X1,X2) =  [1 0 0]      [1 0 1]      [0]
                                  [0 0 0] X1 + [0 0 0] X2 + [0]
                                  [0 0 1]      [0 0 1]      [0]
                               >= [1 0 0]      [1 0 1]      [0]
                                  [0 0 0] X1 + [0 0 0] X2 + [0]
                                  [0 0 1]      [0 0 1]      [0]
                               =  add(X1,X2)                   
        
                 a__add(0(),X) =  [1 0 1]     [1]              
                                  [0 0 0] X + [0]              
                                  [0 0 1]     [1]              
                               >= [1 0 1]     [0]              
                                  [0 0 0] X + [0]              
                                  [0 0 1]     [0]              
                               =  mark(X)                      
        
                a__add(s(X),Y) =  [1 0 1]     [1]              
                                  [0 0 0] Y + [0]              
                                  [0 0 1]     [0]              
                               >= [1]                          
                                  [0]                          
                                  [0]                          
                               =  s(add(X,Y))                  
        
                    a__from(X) =  [1 0 1]     [1]              
                                  [0 0 0] X + [0]              
                                  [0 0 1]     [0]              
                               >= [1 0 1]     [1]              
                                  [0 0 0] X + [0]              
                                  [0 0 1]     [0]              
                               =  cons(mark(X),from(s(X)))     
        
                    a__from(X) =  [1 0 1]     [1]              
                                  [0 0 0] X + [0]              
                                  [0 0 1]     [0]              
                               >= [1 0 1]     [1]              
                                  [0 0 0] X + [0]              
                                  [0 0 1]     [0]              
                               =  from(X)                      
        
                 a__fst(X1,X2) =  [1 0 0]      [1 1 1]      [0]
                                  [0 1 0] X1 + [0 0 0] X2 + [0]
                                  [0 0 1]      [0 0 1]      [0]
                               >= [1 0 0]      [1 0 1]      [0]
                                  [0 0 0] X1 + [0 0 0] X2 + [0]
                                  [0 0 1]      [0 0 1]      [0]
                               =  fst(X1,X2)                   
        
                 a__fst(0(),Z) =  [1 1 1]     [1]              
                                  [0 0 0] Z + [0]              
                                  [0 0 1]     [1]              
                               >= [1]                          
                                  [0]                          
                                  [1]                          
                               =  nil()                        
        
        a__fst(s(X),cons(Y,Z)) =  [1 0 1]     [2]              
                                  [0 0 0] Y + [0]              
                                  [0 0 1]     [0]              
                               >= [1 0 1]     [1]              
                                  [0 0 0] Y + [0]              
                                  [0 0 1]     [0]              
                               =  cons(mark(Y),fst(X,Z))       
        
                     a__len(X) =  [1 0 0]     [0]              
                                  [0 1 0] X + [0]              
                                  [0 0 1]     [1]              
                               >= [1 0 0]     [0]              
                                  [0 0 0] X + [0]              
                                  [0 0 1]     [1]              
                               =  len(X)                       
        
             a__len(cons(X,Z)) =  [1 0 0]     [1]              
                                  [0 0 0] X + [0]              
                                  [0 0 1]     [1]              
                               >= [1]                          
                                  [0]                          
                                  [0]                          
                               =  s(len(Z))                    
        
                 a__len(nil()) =  [1]                          
                                  [0]                          
                                  [2]                          
                               >= [1]                          
                                  [0]                          
                                  [1]                          
                               =  0()                          
        
                     mark(0()) =  [2]                          
                                  [0]                          
                                  [1]                          
                               >= [1]                          
                                  [0]                          
                                  [1]                          
                               =  0()                          
        
              mark(add(X1,X2)) =  [1 0 1]      [1 0 2]      [0]
                                  [0 0 0] X1 + [0 0 0] X2 + [0]
                                  [0 0 1]      [0 0 1]      [0]
                               >= [1 0 1]      [1 0 2]      [0]
                                  [0 0 0] X1 + [0 0 0] X2 + [0]
                                  [0 0 1]      [0 0 1]      [0]
                               =  a__add(mark(X1),mark(X2))    
        
             mark(cons(X1,X2)) =  [1 0 1]      [1]             
                                  [0 0 0] X1 + [0]             
                                  [0 0 1]      [0]             
                               >= [1 0 1]      [1]             
                                  [0 0 0] X1 + [0]             
                                  [0 0 1]      [0]             
                               =  cons(mark(X1),X2)            
        
                 mark(from(X)) =  [1 0 2]     [1]              
                                  [0 0 0] X + [0]              
                                  [0 0 1]     [0]              
                               >= [1 0 2]     [1]              
                                  [0 0 0] X + [0]              
                                  [0 0 1]     [0]              
                               =  a__from(mark(X))             
        
              mark(fst(X1,X2)) =  [1 0 1]      [1 0 2]      [0]
                                  [0 0 0] X1 + [0 0 0] X2 + [0]
                                  [0 0 1]      [0 0 1]      [0]
                               >= [1 0 1]      [1 0 2]      [0]
                                  [0 0 0] X1 + [0 0 0] X2 + [0]
                                  [0 0 1]      [0 0 1]      [0]
                               =  a__fst(mark(X1),mark(X2))    
        
                   mark(nil()) =  [2]                          
                                  [0]                          
                                  [1]                          
                               >= [1]                          
                                  [0]                          
                                  [1]                          
                               =  nil()                        
        
                    mark(s(X)) =  [1]                          
                                  [0]                          
                                  [0]                          
                               >= [1]                          
                                  [0]                          
                                  [0]                          
                               =  s(X)                         
        
** Step 1.b:8: NaturalMI WORST_CASE(?,O(n^3))
    + Considered Problem:
        - Strict TRS:
            a__add(X1,X2) -> add(X1,X2)
            a__fst(X1,X2) -> fst(X1,X2)
            a__len(X) -> len(X)
            mark(cons(X1,X2)) -> cons(mark(X1),X2)
            mark(from(X)) -> a__from(mark(X))
            mark(fst(X1,X2)) -> a__fst(mark(X1),mark(X2))
        - Weak TRS:
            a__add(0(),X) -> mark(X)
            a__add(s(X),Y) -> s(add(X,Y))
            a__from(X) -> cons(mark(X),from(s(X)))
            a__from(X) -> from(X)
            a__fst(0(),Z) -> nil()
            a__fst(s(X),cons(Y,Z)) -> cons(mark(Y),fst(X,Z))
            a__len(cons(X,Z)) -> s(len(Z))
            a__len(nil()) -> 0()
            mark(0()) -> 0()
            mark(add(X1,X2)) -> a__add(mark(X1),mark(X2))
            mark(len(X)) -> a__len(mark(X))
            mark(nil()) -> nil()
            mark(s(X)) -> s(X)
        - Signature:
            {a__add/2,a__from/1,a__fst/2,a__len/1,mark/1} / {0/0,add/2,cons/2,from/1,fst/2,len/1,nil/0,s/1}
        - Obligation:
            innermost runtime complexity wrt. defined symbols {a__add,a__from,a__fst,a__len,mark} and constructors {0
            ,add,cons,from,fst,len,nil,s}
    + Applied Processor:
        NaturalMI {miDimension = 3, miDegree = 3, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Just any strict-rules}
    + Details:
        We apply a matrix interpretation of kind constructor based matrix interpretation:
        The following argument positions are considered usable:
          uargs(a__add) = {1,2},
          uargs(a__from) = {1},
          uargs(a__fst) = {1,2},
          uargs(a__len) = {1},
          uargs(cons) = {1}
        
        Following symbols are considered usable:
          {a__add,a__from,a__fst,a__len,mark}
        TcT has computed the following interpretation:
                p(0) = [0]                          
                       [0]                          
                       [0]                          
           p(a__add) = [1 0 0]      [1 1 0]      [0]
                       [0 1 0] x1 + [0 1 1] x2 + [0]
                       [0 0 1]      [0 0 1]      [0]
          p(a__from) = [1 1 0]      [1]             
                       [0 1 1] x1 + [1]             
                       [0 0 1]      [1]             
           p(a__fst) = [1 0 0]      [1 1 0]      [0]
                       [0 1 1] x1 + [0 1 1] x2 + [0]
                       [0 0 1]      [0 0 1]      [0]
           p(a__len) = [1 1 0]      [0]             
                       [0 1 1] x1 + [0]             
                       [0 0 1]      [0]             
              p(add) = [1 0 0]      [1 1 0]      [0]
                       [0 1 0] x1 + [0 1 1] x2 + [0]
                       [0 0 1]      [0 0 1]      [0]
             p(cons) = [1 0 0]      [1]             
                       [0 1 0] x1 + [1]             
                       [0 0 1]      [0]             
             p(from) = [1 1 0]      [1]             
                       [0 1 1] x1 + [0]             
                       [0 0 1]      [1]             
              p(fst) = [1 0 0]      [1 1 0]      [0]
                       [0 1 1] x1 + [0 1 1] x2 + [0]
                       [0 0 1]      [0 0 1]      [0]
              p(len) = [1 1 0]      [0]             
                       [0 1 1] x1 + [0]             
                       [0 0 1]      [0]             
             p(mark) = [1 1 0]      [0]             
                       [0 1 1] x1 + [0]             
                       [0 0 1]      [0]             
              p(nil) = [0]                          
                       [0]                          
                       [0]                          
                p(s) = [0]                          
                       [0]                          
                       [0]                          
        
        Following rules are strictly oriented:
        mark(cons(X1,X2)) = [1 1 0]      [2] 
                            [0 1 1] X1 + [1] 
                            [0 0 1]      [0] 
                          > [1 1 0]      [1] 
                            [0 1 1] X1 + [1] 
                            [0 0 1]      [0] 
                          = cons(mark(X1),X2)
        
        
        Following rules are (at-least) weakly oriented:
                 a__add(X1,X2) =  [1 0 0]      [1 1 0]      [0]
                                  [0 1 0] X1 + [0 1 1] X2 + [0]
                                  [0 0 1]      [0 0 1]      [0]
                               >= [1 0 0]      [1 1 0]      [0]
                                  [0 1 0] X1 + [0 1 1] X2 + [0]
                                  [0 0 1]      [0 0 1]      [0]
                               =  add(X1,X2)                   
        
                 a__add(0(),X) =  [1 1 0]     [0]              
                                  [0 1 1] X + [0]              
                                  [0 0 1]     [0]              
                               >= [1 1 0]     [0]              
                                  [0 1 1] X + [0]              
                                  [0 0 1]     [0]              
                               =  mark(X)                      
        
                a__add(s(X),Y) =  [1 1 0]     [0]              
                                  [0 1 1] Y + [0]              
                                  [0 0 1]     [0]              
                               >= [0]                          
                                  [0]                          
                                  [0]                          
                               =  s(add(X,Y))                  
        
                    a__from(X) =  [1 1 0]     [1]              
                                  [0 1 1] X + [1]              
                                  [0 0 1]     [1]              
                               >= [1 1 0]     [1]              
                                  [0 1 1] X + [1]              
                                  [0 0 1]     [0]              
                               =  cons(mark(X),from(s(X)))     
        
                    a__from(X) =  [1 1 0]     [1]              
                                  [0 1 1] X + [1]              
                                  [0 0 1]     [1]              
                               >= [1 1 0]     [1]              
                                  [0 1 1] X + [0]              
                                  [0 0 1]     [1]              
                               =  from(X)                      
        
                 a__fst(X1,X2) =  [1 0 0]      [1 1 0]      [0]
                                  [0 1 1] X1 + [0 1 1] X2 + [0]
                                  [0 0 1]      [0 0 1]      [0]
                               >= [1 0 0]      [1 1 0]      [0]
                                  [0 1 1] X1 + [0 1 1] X2 + [0]
                                  [0 0 1]      [0 0 1]      [0]
                               =  fst(X1,X2)                   
        
                 a__fst(0(),Z) =  [1 1 0]     [0]              
                                  [0 1 1] Z + [0]              
                                  [0 0 1]     [0]              
                               >= [0]                          
                                  [0]                          
                                  [0]                          
                               =  nil()                        
        
        a__fst(s(X),cons(Y,Z)) =  [1 1 0]     [2]              
                                  [0 1 1] Y + [1]              
                                  [0 0 1]     [0]              
                               >= [1 1 0]     [1]              
                                  [0 1 1] Y + [1]              
                                  [0 0 1]     [0]              
                               =  cons(mark(Y),fst(X,Z))       
        
                     a__len(X) =  [1 1 0]     [0]              
                                  [0 1 1] X + [0]              
                                  [0 0 1]     [0]              
                               >= [1 1 0]     [0]              
                                  [0 1 1] X + [0]              
                                  [0 0 1]     [0]              
                               =  len(X)                       
        
             a__len(cons(X,Z)) =  [1 1 0]     [2]              
                                  [0 1 1] X + [1]              
                                  [0 0 1]     [0]              
                               >= [0]                          
                                  [0]                          
                                  [0]                          
                               =  s(len(Z))                    
        
                 a__len(nil()) =  [0]                          
                                  [0]                          
                                  [0]                          
                               >= [0]                          
                                  [0]                          
                                  [0]                          
                               =  0()                          
        
                     mark(0()) =  [0]                          
                                  [0]                          
                                  [0]                          
                               >= [0]                          
                                  [0]                          
                                  [0]                          
                               =  0()                          
        
              mark(add(X1,X2)) =  [1 1 0]      [1 2 1]      [0]
                                  [0 1 1] X1 + [0 1 2] X2 + [0]
                                  [0 0 1]      [0 0 1]      [0]
                               >= [1 1 0]      [1 2 1]      [0]
                                  [0 1 1] X1 + [0 1 2] X2 + [0]
                                  [0 0 1]      [0 0 1]      [0]
                               =  a__add(mark(X1),mark(X2))    
        
                 mark(from(X)) =  [1 2 1]     [1]              
                                  [0 1 2] X + [1]              
                                  [0 0 1]     [1]              
                               >= [1 2 1]     [1]              
                                  [0 1 2] X + [1]              
                                  [0 0 1]     [1]              
                               =  a__from(mark(X))             
        
              mark(fst(X1,X2)) =  [1 1 1]      [1 2 1]      [0]
                                  [0 1 2] X1 + [0 1 2] X2 + [0]
                                  [0 0 1]      [0 0 1]      [0]
                               >= [1 1 0]      [1 2 1]      [0]
                                  [0 1 2] X1 + [0 1 2] X2 + [0]
                                  [0 0 1]      [0 0 1]      [0]
                               =  a__fst(mark(X1),mark(X2))    
        
                  mark(len(X)) =  [1 2 1]     [0]              
                                  [0 1 2] X + [0]              
                                  [0 0 1]     [0]              
                               >= [1 2 1]     [0]              
                                  [0 1 2] X + [0]              
                                  [0 0 1]     [0]              
                               =  a__len(mark(X))              
        
                   mark(nil()) =  [0]                          
                                  [0]                          
                                  [0]                          
                               >= [0]                          
                                  [0]                          
                                  [0]                          
                               =  nil()                        
        
                    mark(s(X)) =  [0]                          
                                  [0]                          
                                  [0]                          
                               >= [0]                          
                                  [0]                          
                                  [0]                          
                               =  s(X)                         
        
** Step 1.b:9: NaturalMI WORST_CASE(?,O(n^3))
    + Considered Problem:
        - Strict TRS:
            a__add(X1,X2) -> add(X1,X2)
            a__fst(X1,X2) -> fst(X1,X2)
            a__len(X) -> len(X)
            mark(from(X)) -> a__from(mark(X))
            mark(fst(X1,X2)) -> a__fst(mark(X1),mark(X2))
        - Weak TRS:
            a__add(0(),X) -> mark(X)
            a__add(s(X),Y) -> s(add(X,Y))
            a__from(X) -> cons(mark(X),from(s(X)))
            a__from(X) -> from(X)
            a__fst(0(),Z) -> nil()
            a__fst(s(X),cons(Y,Z)) -> cons(mark(Y),fst(X,Z))
            a__len(cons(X,Z)) -> s(len(Z))
            a__len(nil()) -> 0()
            mark(0()) -> 0()
            mark(add(X1,X2)) -> a__add(mark(X1),mark(X2))
            mark(cons(X1,X2)) -> cons(mark(X1),X2)
            mark(len(X)) -> a__len(mark(X))
            mark(nil()) -> nil()
            mark(s(X)) -> s(X)
        - Signature:
            {a__add/2,a__from/1,a__fst/2,a__len/1,mark/1} / {0/0,add/2,cons/2,from/1,fst/2,len/1,nil/0,s/1}
        - Obligation:
            innermost runtime complexity wrt. defined symbols {a__add,a__from,a__fst,a__len,mark} and constructors {0
            ,add,cons,from,fst,len,nil,s}
    + Applied Processor:
        NaturalMI {miDimension = 3, miDegree = 3, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Just any strict-rules}
    + Details:
        We apply a matrix interpretation of kind constructor based matrix interpretation:
        The following argument positions are considered usable:
          uargs(a__add) = {1,2},
          uargs(a__from) = {1},
          uargs(a__fst) = {1,2},
          uargs(a__len) = {1},
          uargs(cons) = {1}
        
        Following symbols are considered usable:
          {a__add,a__from,a__fst,a__len,mark}
        TcT has computed the following interpretation:
                p(0) = [0]                          
                       [0]                          
                       [0]                          
           p(a__add) = [1 0 0]      [1 1 0]      [0]
                       [0 1 0] x1 + [0 1 0] x2 + [0]
                       [0 0 1]      [0 0 0]      [0]
          p(a__from) = [1 1 1]      [0]             
                       [0 1 1] x1 + [0]             
                       [0 0 0]      [0]             
           p(a__fst) = [1 1 0]      [1 1 0]      [1]
                       [0 1 1] x1 + [0 1 1] x2 + [1]
                       [0 0 0]      [0 0 1]      [0]
           p(a__len) = [1 1 0]      [0]             
                       [0 1 0] x1 + [0]             
                       [0 0 1]      [0]             
              p(add) = [1 0 0]      [1 1 0]      [0]
                       [0 1 0] x1 + [0 1 0] x2 + [0]
                       [0 0 0]      [0 0 0]      [0]
             p(cons) = [1 0 0]      [0 1 0]      [0]
                       [0 1 0] x1 + [0 0 0] x2 + [0]
                       [0 0 0]      [0 0 0]      [0]
             p(from) = [1 1 0]      [0]             
                       [0 1 0] x1 + [0]             
                       [0 0 0]      [0]             
              p(fst) = [1 1 0]      [1 1 0]      [1]
                       [0 1 0] x1 + [0 1 0] x2 + [1]
                       [0 0 0]      [0 0 0]      [0]
              p(len) = [1 1 0]      [0]             
                       [0 1 0] x1 + [0]             
                       [0 0 0]      [0]             
             p(mark) = [1 1 0]      [0]             
                       [0 1 0] x1 + [0]             
                       [0 0 0]      [0]             
              p(nil) = [0]                          
                       [0]                          
                       [0]                          
                p(s) = [0 1 0]      [0]             
                       [0 0 1] x1 + [0]             
                       [0 0 0]      [0]             
        
        Following rules are strictly oriented:
        mark(fst(X1,X2)) = [1 2 0]      [1 2 0]      [2]
                           [0 1 0] X1 + [0 1 0] X2 + [1]
                           [0 0 0]      [0 0 0]      [0]
                         > [1 2 0]      [1 2 0]      [1]
                           [0 1 0] X1 + [0 1 0] X2 + [1]
                           [0 0 0]      [0 0 0]      [0]
                         = a__fst(mark(X1),mark(X2))    
        
        
        Following rules are (at-least) weakly oriented:
                 a__add(X1,X2) =  [1 0 0]      [1 1 0]      [0]          
                                  [0 1 0] X1 + [0 1 0] X2 + [0]          
                                  [0 0 1]      [0 0 0]      [0]          
                               >= [1 0 0]      [1 1 0]      [0]          
                                  [0 1 0] X1 + [0 1 0] X2 + [0]          
                                  [0 0 0]      [0 0 0]      [0]          
                               =  add(X1,X2)                             
        
                 a__add(0(),X) =  [1 1 0]     [0]                        
                                  [0 1 0] X + [0]                        
                                  [0 0 0]     [0]                        
                               >= [1 1 0]     [0]                        
                                  [0 1 0] X + [0]                        
                                  [0 0 0]     [0]                        
                               =  mark(X)                                
        
                a__add(s(X),Y) =  [0 1 0]     [1 1 0]     [0]            
                                  [0 0 1] X + [0 1 0] Y + [0]            
                                  [0 0 0]     [0 0 0]     [0]            
                               >= [0 1 0]     [0 1 0]     [0]            
                                  [0 0 0] X + [0 0 0] Y + [0]            
                                  [0 0 0]     [0 0 0]     [0]            
                               =  s(add(X,Y))                            
        
                    a__from(X) =  [1 1 1]     [0]                        
                                  [0 1 1] X + [0]                        
                                  [0 0 0]     [0]                        
                               >= [1 1 1]     [0]                        
                                  [0 1 0] X + [0]                        
                                  [0 0 0]     [0]                        
                               =  cons(mark(X),from(s(X)))               
        
                    a__from(X) =  [1 1 1]     [0]                        
                                  [0 1 1] X + [0]                        
                                  [0 0 0]     [0]                        
                               >= [1 1 0]     [0]                        
                                  [0 1 0] X + [0]                        
                                  [0 0 0]     [0]                        
                               =  from(X)                                
        
                 a__fst(X1,X2) =  [1 1 0]      [1 1 0]      [1]          
                                  [0 1 1] X1 + [0 1 1] X2 + [1]          
                                  [0 0 0]      [0 0 1]      [0]          
                               >= [1 1 0]      [1 1 0]      [1]          
                                  [0 1 0] X1 + [0 1 0] X2 + [1]          
                                  [0 0 0]      [0 0 0]      [0]          
                               =  fst(X1,X2)                             
        
                 a__fst(0(),Z) =  [1 1 0]     [1]                        
                                  [0 1 1] Z + [1]                        
                                  [0 0 1]     [0]                        
                               >= [0]                                    
                                  [0]                                    
                                  [0]                                    
                               =  nil()                                  
        
        a__fst(s(X),cons(Y,Z)) =  [0 1 1]     [1 1 0]     [0 1 0]     [1]
                                  [0 0 1] X + [0 1 0] Y + [0 0 0] Z + [1]
                                  [0 0 0]     [0 0 0]     [0 0 0]     [0]
                               >= [0 1 0]     [1 1 0]     [0 1 0]     [1]
                                  [0 0 0] X + [0 1 0] Y + [0 0 0] Z + [0]
                                  [0 0 0]     [0 0 0]     [0 0 0]     [0]
                               =  cons(mark(Y),fst(X,Z))                 
        
                     a__len(X) =  [1 1 0]     [0]                        
                                  [0 1 0] X + [0]                        
                                  [0 0 1]     [0]                        
                               >= [1 1 0]     [0]                        
                                  [0 1 0] X + [0]                        
                                  [0 0 0]     [0]                        
                               =  len(X)                                 
        
             a__len(cons(X,Z)) =  [1 1 0]     [0 1 0]     [0]            
                                  [0 1 0] X + [0 0 0] Z + [0]            
                                  [0 0 0]     [0 0 0]     [0]            
                               >= [0 1 0]     [0]                        
                                  [0 0 0] Z + [0]                        
                                  [0 0 0]     [0]                        
                               =  s(len(Z))                              
        
                 a__len(nil()) =  [0]                                    
                                  [0]                                    
                                  [0]                                    
                               >= [0]                                    
                                  [0]                                    
                                  [0]                                    
                               =  0()                                    
        
                     mark(0()) =  [0]                                    
                                  [0]                                    
                                  [0]                                    
                               >= [0]                                    
                                  [0]                                    
                                  [0]                                    
                               =  0()                                    
        
              mark(add(X1,X2)) =  [1 1 0]      [1 2 0]      [0]          
                                  [0 1 0] X1 + [0 1 0] X2 + [0]          
                                  [0 0 0]      [0 0 0]      [0]          
                               >= [1 1 0]      [1 2 0]      [0]          
                                  [0 1 0] X1 + [0 1 0] X2 + [0]          
                                  [0 0 0]      [0 0 0]      [0]          
                               =  a__add(mark(X1),mark(X2))              
        
             mark(cons(X1,X2)) =  [1 1 0]      [0 1 0]      [0]          
                                  [0 1 0] X1 + [0 0 0] X2 + [0]          
                                  [0 0 0]      [0 0 0]      [0]          
                               >= [1 1 0]      [0 1 0]      [0]          
                                  [0 1 0] X1 + [0 0 0] X2 + [0]          
                                  [0 0 0]      [0 0 0]      [0]          
                               =  cons(mark(X1),X2)                      
        
                 mark(from(X)) =  [1 2 0]     [0]                        
                                  [0 1 0] X + [0]                        
                                  [0 0 0]     [0]                        
                               >= [1 2 0]     [0]                        
                                  [0 1 0] X + [0]                        
                                  [0 0 0]     [0]                        
                               =  a__from(mark(X))                       
        
                  mark(len(X)) =  [1 2 0]     [0]                        
                                  [0 1 0] X + [0]                        
                                  [0 0 0]     [0]                        
                               >= [1 2 0]     [0]                        
                                  [0 1 0] X + [0]                        
                                  [0 0 0]     [0]                        
                               =  a__len(mark(X))                        
        
                   mark(nil()) =  [0]                                    
                                  [0]                                    
                                  [0]                                    
                               >= [0]                                    
                                  [0]                                    
                                  [0]                                    
                               =  nil()                                  
        
                    mark(s(X)) =  [0 1 1]     [0]                        
                                  [0 0 1] X + [0]                        
                                  [0 0 0]     [0]                        
                               >= [0 1 0]     [0]                        
                                  [0 0 1] X + [0]                        
                                  [0 0 0]     [0]                        
                               =  s(X)                                   
        
** Step 1.b:10: NaturalMI WORST_CASE(?,O(n^3))
    + Considered Problem:
        - Strict TRS:
            a__add(X1,X2) -> add(X1,X2)
            a__fst(X1,X2) -> fst(X1,X2)
            a__len(X) -> len(X)
            mark(from(X)) -> a__from(mark(X))
        - Weak TRS:
            a__add(0(),X) -> mark(X)
            a__add(s(X),Y) -> s(add(X,Y))
            a__from(X) -> cons(mark(X),from(s(X)))
            a__from(X) -> from(X)
            a__fst(0(),Z) -> nil()
            a__fst(s(X),cons(Y,Z)) -> cons(mark(Y),fst(X,Z))
            a__len(cons(X,Z)) -> s(len(Z))
            a__len(nil()) -> 0()
            mark(0()) -> 0()
            mark(add(X1,X2)) -> a__add(mark(X1),mark(X2))
            mark(cons(X1,X2)) -> cons(mark(X1),X2)
            mark(fst(X1,X2)) -> a__fst(mark(X1),mark(X2))
            mark(len(X)) -> a__len(mark(X))
            mark(nil()) -> nil()
            mark(s(X)) -> s(X)
        - Signature:
            {a__add/2,a__from/1,a__fst/2,a__len/1,mark/1} / {0/0,add/2,cons/2,from/1,fst/2,len/1,nil/0,s/1}
        - Obligation:
            innermost runtime complexity wrt. defined symbols {a__add,a__from,a__fst,a__len,mark} and constructors {0
            ,add,cons,from,fst,len,nil,s}
    + Applied Processor:
        NaturalMI {miDimension = 3, miDegree = 3, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Just any strict-rules}
    + Details:
        We apply a matrix interpretation of kind constructor based matrix interpretation:
        The following argument positions are considered usable:
          uargs(a__add) = {1,2},
          uargs(a__from) = {1},
          uargs(a__fst) = {1,2},
          uargs(a__len) = {1},
          uargs(cons) = {1}
        
        Following symbols are considered usable:
          {a__add,a__from,a__fst,a__len,mark}
        TcT has computed the following interpretation:
                p(0) = [0]                          
                       [0]                          
                       [0]                          
           p(a__add) = [1 0 1]      [1 1 0]      [0]
                       [0 1 1] x1 + [0 1 0] x2 + [0]
                       [0 0 0]      [0 0 0]      [0]
          p(a__from) = [1 1 0]      [0]             
                       [0 1 0] x1 + [1]             
                       [0 0 1]      [0]             
           p(a__fst) = [1 1 1]      [1 1 0]      [0]
                       [0 1 1] x1 + [0 1 0] x2 + [0]
                       [0 0 1]      [0 0 0]      [0]
           p(a__len) = [1 0 0]      [0]             
                       [0 1 1] x1 + [0]             
                       [0 0 0]      [0]             
              p(add) = [1 0 1]      [1 1 0]      [0]
                       [0 1 1] x1 + [0 1 0] x2 + [0]
                       [0 0 0]      [0 0 0]      [0]
             p(cons) = [1 0 0]      [0 0 1]      [0]
                       [0 1 0] x1 + [0 0 1] x2 + [0]
                       [0 0 0]      [0 0 0]      [0]
             p(from) = [1 1 0]      [0]             
                       [0 1 0] x1 + [1]             
                       [0 0 0]      [0]             
              p(fst) = [1 1 1]      [1 1 0]      [0]
                       [0 1 1] x1 + [0 1 0] x2 + [0]
                       [0 0 0]      [0 0 0]      [0]
              p(len) = [1 0 0]      [0]             
                       [0 1 0] x1 + [0]             
                       [0 0 0]      [0]             
             p(mark) = [1 1 0]      [0]             
                       [0 1 0] x1 + [0]             
                       [0 0 0]      [0]             
              p(nil) = [0]                          
                       [0]                          
                       [0]                          
                p(s) = [0]                          
                       [0]                          
                       [0]                          
        
        Following rules are strictly oriented:
        mark(from(X)) = [1 2 0]     [1] 
                        [0 1 0] X + [1] 
                        [0 0 0]     [0] 
                      > [1 2 0]     [0] 
                        [0 1 0] X + [1] 
                        [0 0 0]     [0] 
                      = a__from(mark(X))
        
        
        Following rules are (at-least) weakly oriented:
                 a__add(X1,X2) =  [1 0 1]      [1 1 0]      [0]
                                  [0 1 1] X1 + [0 1 0] X2 + [0]
                                  [0 0 0]      [0 0 0]      [0]
                               >= [1 0 1]      [1 1 0]      [0]
                                  [0 1 1] X1 + [0 1 0] X2 + [0]
                                  [0 0 0]      [0 0 0]      [0]
                               =  add(X1,X2)                   
        
                 a__add(0(),X) =  [1 1 0]     [0]              
                                  [0 1 0] X + [0]              
                                  [0 0 0]     [0]              
                               >= [1 1 0]     [0]              
                                  [0 1 0] X + [0]              
                                  [0 0 0]     [0]              
                               =  mark(X)                      
        
                a__add(s(X),Y) =  [1 1 0]     [0]              
                                  [0 1 0] Y + [0]              
                                  [0 0 0]     [0]              
                               >= [0]                          
                                  [0]                          
                                  [0]                          
                               =  s(add(X,Y))                  
        
                    a__from(X) =  [1 1 0]     [0]              
                                  [0 1 0] X + [1]              
                                  [0 0 1]     [0]              
                               >= [1 1 0]     [0]              
                                  [0 1 0] X + [0]              
                                  [0 0 0]     [0]              
                               =  cons(mark(X),from(s(X)))     
        
                    a__from(X) =  [1 1 0]     [0]              
                                  [0 1 0] X + [1]              
                                  [0 0 1]     [0]              
                               >= [1 1 0]     [0]              
                                  [0 1 0] X + [1]              
                                  [0 0 0]     [0]              
                               =  from(X)                      
        
                 a__fst(X1,X2) =  [1 1 1]      [1 1 0]      [0]
                                  [0 1 1] X1 + [0 1 0] X2 + [0]
                                  [0 0 1]      [0 0 0]      [0]
                               >= [1 1 1]      [1 1 0]      [0]
                                  [0 1 1] X1 + [0 1 0] X2 + [0]
                                  [0 0 0]      [0 0 0]      [0]
                               =  fst(X1,X2)                   
        
                 a__fst(0(),Z) =  [1 1 0]     [0]              
                                  [0 1 0] Z + [0]              
                                  [0 0 0]     [0]              
                               >= [0]                          
                                  [0]                          
                                  [0]                          
                               =  nil()                        
        
        a__fst(s(X),cons(Y,Z)) =  [1 1 0]     [0 0 2]     [0]  
                                  [0 1 0] Y + [0 0 1] Z + [0]  
                                  [0 0 0]     [0 0 0]     [0]  
                               >= [1 1 0]     [0]              
                                  [0 1 0] Y + [0]              
                                  [0 0 0]     [0]              
                               =  cons(mark(Y),fst(X,Z))       
        
                     a__len(X) =  [1 0 0]     [0]              
                                  [0 1 1] X + [0]              
                                  [0 0 0]     [0]              
                               >= [1 0 0]     [0]              
                                  [0 1 0] X + [0]              
                                  [0 0 0]     [0]              
                               =  len(X)                       
        
             a__len(cons(X,Z)) =  [1 0 0]     [0 0 1]     [0]  
                                  [0 1 0] X + [0 0 1] Z + [0]  
                                  [0 0 0]     [0 0 0]     [0]  
                               >= [0]                          
                                  [0]                          
                                  [0]                          
                               =  s(len(Z))                    
        
                 a__len(nil()) =  [0]                          
                                  [0]                          
                                  [0]                          
                               >= [0]                          
                                  [0]                          
                                  [0]                          
                               =  0()                          
        
                     mark(0()) =  [0]                          
                                  [0]                          
                                  [0]                          
                               >= [0]                          
                                  [0]                          
                                  [0]                          
                               =  0()                          
        
              mark(add(X1,X2)) =  [1 1 2]      [1 2 0]      [0]
                                  [0 1 1] X1 + [0 1 0] X2 + [0]
                                  [0 0 0]      [0 0 0]      [0]
                               >= [1 1 0]      [1 2 0]      [0]
                                  [0 1 0] X1 + [0 1 0] X2 + [0]
                                  [0 0 0]      [0 0 0]      [0]
                               =  a__add(mark(X1),mark(X2))    
        
             mark(cons(X1,X2)) =  [1 1 0]      [0 0 2]      [0]
                                  [0 1 0] X1 + [0 0 1] X2 + [0]
                                  [0 0 0]      [0 0 0]      [0]
                               >= [1 1 0]      [0 0 1]      [0]
                                  [0 1 0] X1 + [0 0 1] X2 + [0]
                                  [0 0 0]      [0 0 0]      [0]
                               =  cons(mark(X1),X2)            
        
              mark(fst(X1,X2)) =  [1 2 2]      [1 2 0]      [0]
                                  [0 1 1] X1 + [0 1 0] X2 + [0]
                                  [0 0 0]      [0 0 0]      [0]
                               >= [1 2 0]      [1 2 0]      [0]
                                  [0 1 0] X1 + [0 1 0] X2 + [0]
                                  [0 0 0]      [0 0 0]      [0]
                               =  a__fst(mark(X1),mark(X2))    
        
                  mark(len(X)) =  [1 1 0]     [0]              
                                  [0 1 0] X + [0]              
                                  [0 0 0]     [0]              
                               >= [1 1 0]     [0]              
                                  [0 1 0] X + [0]              
                                  [0 0 0]     [0]              
                               =  a__len(mark(X))              
        
                   mark(nil()) =  [0]                          
                                  [0]                          
                                  [0]                          
                               >= [0]                          
                                  [0]                          
                                  [0]                          
                               =  nil()                        
        
                    mark(s(X)) =  [0]                          
                                  [0]                          
                                  [0]                          
                               >= [0]                          
                                  [0]                          
                                  [0]                          
                               =  s(X)                         
        
** Step 1.b:11: NaturalMI WORST_CASE(?,O(n^3))
    + Considered Problem:
        - Strict TRS:
            a__add(X1,X2) -> add(X1,X2)
            a__fst(X1,X2) -> fst(X1,X2)
            a__len(X) -> len(X)
        - Weak TRS:
            a__add(0(),X) -> mark(X)
            a__add(s(X),Y) -> s(add(X,Y))
            a__from(X) -> cons(mark(X),from(s(X)))
            a__from(X) -> from(X)
            a__fst(0(),Z) -> nil()
            a__fst(s(X),cons(Y,Z)) -> cons(mark(Y),fst(X,Z))
            a__len(cons(X,Z)) -> s(len(Z))
            a__len(nil()) -> 0()
            mark(0()) -> 0()
            mark(add(X1,X2)) -> a__add(mark(X1),mark(X2))
            mark(cons(X1,X2)) -> cons(mark(X1),X2)
            mark(from(X)) -> a__from(mark(X))
            mark(fst(X1,X2)) -> a__fst(mark(X1),mark(X2))
            mark(len(X)) -> a__len(mark(X))
            mark(nil()) -> nil()
            mark(s(X)) -> s(X)
        - Signature:
            {a__add/2,a__from/1,a__fst/2,a__len/1,mark/1} / {0/0,add/2,cons/2,from/1,fst/2,len/1,nil/0,s/1}
        - Obligation:
            innermost runtime complexity wrt. defined symbols {a__add,a__from,a__fst,a__len,mark} and constructors {0
            ,add,cons,from,fst,len,nil,s}
    + Applied Processor:
        NaturalMI {miDimension = 3, miDegree = 3, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Just any strict-rules}
    + Details:
        We apply a matrix interpretation of kind constructor based matrix interpretation:
        The following argument positions are considered usable:
          uargs(a__add) = {1,2},
          uargs(a__from) = {1},
          uargs(a__fst) = {1,2},
          uargs(a__len) = {1},
          uargs(cons) = {1}
        
        Following symbols are considered usable:
          {a__add,a__from,a__fst,a__len,mark}
        TcT has computed the following interpretation:
                p(0) = [0]                          
                       [0]                          
                       [0]                          
           p(a__add) = [1 0 1]      [1 1 0]      [0]
                       [0 1 0] x1 + [0 1 0] x2 + [1]
                       [0 0 0]      [0 0 0]      [0]
          p(a__from) = [1 1 0]      [0]             
                       [0 1 0] x1 + [1]             
                       [0 0 1]      [0]             
           p(a__fst) = [1 0 0]      [1 1 0]      [1]
                       [0 1 1] x1 + [0 1 1] x2 + [1]
                       [0 0 0]      [0 0 0]      [0]
           p(a__len) = [1 0 0]      [0]             
                       [0 1 0] x1 + [0]             
                       [0 0 0]      [0]             
              p(add) = [1 0 0]      [1 1 0]      [0]
                       [0 1 0] x1 + [0 1 0] x2 + [1]
                       [0 0 0]      [0 0 0]      [0]
             p(cons) = [1 0 1]      [0 0 1]      [0]
                       [0 1 0] x1 + [0 0 0] x2 + [1]
                       [0 0 1]      [0 0 0]      [0]
             p(from) = [1 1 0]      [0]             
                       [0 1 0] x1 + [1]             
                       [0 0 1]      [0]             
              p(fst) = [1 0 0]      [1 1 0]      [0]
                       [0 1 1] x1 + [0 1 1] x2 + [1]
                       [0 0 0]      [0 0 0]      [0]
              p(len) = [1 0 0]      [0]             
                       [0 1 0] x1 + [0]             
                       [0 0 0]      [0]             
             p(mark) = [1 1 0]      [0]             
                       [0 1 0] x1 + [0]             
                       [0 0 0]      [0]             
              p(nil) = [0]                          
                       [1]                          
                       [0]                          
                p(s) = [0 0 0]      [0]             
                       [0 0 1] x1 + [0]             
                       [0 0 0]      [0]             
        
        Following rules are strictly oriented:
        a__fst(X1,X2) = [1 0 0]      [1 1 0]      [1]
                        [0 1 1] X1 + [0 1 1] X2 + [1]
                        [0 0 0]      [0 0 0]      [0]
                      > [1 0 0]      [1 1 0]      [0]
                        [0 1 1] X1 + [0 1 1] X2 + [1]
                        [0 0 0]      [0 0 0]      [0]
                      = fst(X1,X2)                   
        
        
        Following rules are (at-least) weakly oriented:
                 a__add(X1,X2) =  [1 0 1]      [1 1 0]      [0]          
                                  [0 1 0] X1 + [0 1 0] X2 + [1]          
                                  [0 0 0]      [0 0 0]      [0]          
                               >= [1 0 0]      [1 1 0]      [0]          
                                  [0 1 0] X1 + [0 1 0] X2 + [1]          
                                  [0 0 0]      [0 0 0]      [0]          
                               =  add(X1,X2)                             
        
                 a__add(0(),X) =  [1 1 0]     [0]                        
                                  [0 1 0] X + [1]                        
                                  [0 0 0]     [0]                        
                               >= [1 1 0]     [0]                        
                                  [0 1 0] X + [0]                        
                                  [0 0 0]     [0]                        
                               =  mark(X)                                
        
                a__add(s(X),Y) =  [0 0 0]     [1 1 0]     [0]            
                                  [0 0 1] X + [0 1 0] Y + [1]            
                                  [0 0 0]     [0 0 0]     [0]            
                               >= [0]                                    
                                  [0]                                    
                                  [0]                                    
                               =  s(add(X,Y))                            
        
                    a__from(X) =  [1 1 0]     [0]                        
                                  [0 1 0] X + [1]                        
                                  [0 0 1]     [0]                        
                               >= [1 1 0]     [0]                        
                                  [0 1 0] X + [1]                        
                                  [0 0 0]     [0]                        
                               =  cons(mark(X),from(s(X)))               
        
                    a__from(X) =  [1 1 0]     [0]                        
                                  [0 1 0] X + [1]                        
                                  [0 0 1]     [0]                        
                               >= [1 1 0]     [0]                        
                                  [0 1 0] X + [1]                        
                                  [0 0 1]     [0]                        
                               =  from(X)                                
        
                 a__fst(0(),Z) =  [1 1 0]     [1]                        
                                  [0 1 1] Z + [1]                        
                                  [0 0 0]     [0]                        
                               >= [0]                                    
                                  [1]                                    
                                  [0]                                    
                               =  nil()                                  
        
        a__fst(s(X),cons(Y,Z)) =  [0 0 0]     [1 1 1]     [0 0 1]     [2]
                                  [0 0 1] X + [0 1 1] Y + [0 0 0] Z + [2]
                                  [0 0 0]     [0 0 0]     [0 0 0]     [0]
                               >= [1 1 0]     [0]                        
                                  [0 1 0] Y + [1]                        
                                  [0 0 0]     [0]                        
                               =  cons(mark(Y),fst(X,Z))                 
        
                     a__len(X) =  [1 0 0]     [0]                        
                                  [0 1 0] X + [0]                        
                                  [0 0 0]     [0]                        
                               >= [1 0 0]     [0]                        
                                  [0 1 0] X + [0]                        
                                  [0 0 0]     [0]                        
                               =  len(X)                                 
        
             a__len(cons(X,Z)) =  [1 0 1]     [0 0 1]     [0]            
                                  [0 1 0] X + [0 0 0] Z + [1]            
                                  [0 0 0]     [0 0 0]     [0]            
                               >= [0]                                    
                                  [0]                                    
                                  [0]                                    
                               =  s(len(Z))                              
        
                 a__len(nil()) =  [0]                                    
                                  [1]                                    
                                  [0]                                    
                               >= [0]                                    
                                  [0]                                    
                                  [0]                                    
                               =  0()                                    
        
                     mark(0()) =  [0]                                    
                                  [0]                                    
                                  [0]                                    
                               >= [0]                                    
                                  [0]                                    
                                  [0]                                    
                               =  0()                                    
        
              mark(add(X1,X2)) =  [1 1 0]      [1 2 0]      [1]          
                                  [0 1 0] X1 + [0 1 0] X2 + [1]          
                                  [0 0 0]      [0 0 0]      [0]          
                               >= [1 1 0]      [1 2 0]      [0]          
                                  [0 1 0] X1 + [0 1 0] X2 + [1]          
                                  [0 0 0]      [0 0 0]      [0]          
                               =  a__add(mark(X1),mark(X2))              
        
             mark(cons(X1,X2)) =  [1 1 1]      [0 0 1]      [1]          
                                  [0 1 0] X1 + [0 0 0] X2 + [1]          
                                  [0 0 0]      [0 0 0]      [0]          
                               >= [1 1 0]      [0 0 1]      [0]          
                                  [0 1 0] X1 + [0 0 0] X2 + [1]          
                                  [0 0 0]      [0 0 0]      [0]          
                               =  cons(mark(X1),X2)                      
        
                 mark(from(X)) =  [1 2 0]     [1]                        
                                  [0 1 0] X + [1]                        
                                  [0 0 0]     [0]                        
                               >= [1 2 0]     [0]                        
                                  [0 1 0] X + [1]                        
                                  [0 0 0]     [0]                        
                               =  a__from(mark(X))                       
        
              mark(fst(X1,X2)) =  [1 1 1]      [1 2 1]      [1]          
                                  [0 1 1] X1 + [0 1 1] X2 + [1]          
                                  [0 0 0]      [0 0 0]      [0]          
                               >= [1 1 0]      [1 2 0]      [1]          
                                  [0 1 0] X1 + [0 1 0] X2 + [1]          
                                  [0 0 0]      [0 0 0]      [0]          
                               =  a__fst(mark(X1),mark(X2))              
        
                  mark(len(X)) =  [1 1 0]     [0]                        
                                  [0 1 0] X + [0]                        
                                  [0 0 0]     [0]                        
                               >= [1 1 0]     [0]                        
                                  [0 1 0] X + [0]                        
                                  [0 0 0]     [0]                        
                               =  a__len(mark(X))                        
        
                   mark(nil()) =  [1]                                    
                                  [1]                                    
                                  [0]                                    
                               >= [0]                                    
                                  [1]                                    
                                  [0]                                    
                               =  nil()                                  
        
                    mark(s(X)) =  [0 0 1]     [0]                        
                                  [0 0 1] X + [0]                        
                                  [0 0 0]     [0]                        
                               >= [0 0 0]     [0]                        
                                  [0 0 1] X + [0]                        
                                  [0 0 0]     [0]                        
                               =  s(X)                                   
        
** Step 1.b:12: NaturalMI WORST_CASE(?,O(n^2))
    + Considered Problem:
        - Strict TRS:
            a__add(X1,X2) -> add(X1,X2)
            a__len(X) -> len(X)
        - Weak TRS:
            a__add(0(),X) -> mark(X)
            a__add(s(X),Y) -> s(add(X,Y))
            a__from(X) -> cons(mark(X),from(s(X)))
            a__from(X) -> from(X)
            a__fst(X1,X2) -> fst(X1,X2)
            a__fst(0(),Z) -> nil()
            a__fst(s(X),cons(Y,Z)) -> cons(mark(Y),fst(X,Z))
            a__len(cons(X,Z)) -> s(len(Z))
            a__len(nil()) -> 0()
            mark(0()) -> 0()
            mark(add(X1,X2)) -> a__add(mark(X1),mark(X2))
            mark(cons(X1,X2)) -> cons(mark(X1),X2)
            mark(from(X)) -> a__from(mark(X))
            mark(fst(X1,X2)) -> a__fst(mark(X1),mark(X2))
            mark(len(X)) -> a__len(mark(X))
            mark(nil()) -> nil()
            mark(s(X)) -> s(X)
        - Signature:
            {a__add/2,a__from/1,a__fst/2,a__len/1,mark/1} / {0/0,add/2,cons/2,from/1,fst/2,len/1,nil/0,s/1}
        - Obligation:
            innermost runtime complexity wrt. defined symbols {a__add,a__from,a__fst,a__len,mark} and constructors {0
            ,add,cons,from,fst,len,nil,s}
    + Applied Processor:
        NaturalMI {miDimension = 3, miDegree = 3, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Just any strict-rules}
    + Details:
        We apply a matrix interpretation of kind constructor based matrix interpretation:
        The following argument positions are considered usable:
          uargs(a__add) = {1,2},
          uargs(a__from) = {1},
          uargs(a__fst) = {1,2},
          uargs(a__len) = {1},
          uargs(cons) = {1}
        
        Following symbols are considered usable:
          {a__add,a__from,a__fst,a__len,mark}
        TcT has computed the following interpretation:
                p(0) = [0]                          
                       [0]                          
                       [1]                          
           p(a__add) = [1 0 0]      [1 1 0]      [1]
                       [0 1 0] x1 + [0 1 0] x2 + [1]
                       [0 0 1]      [0 0 0]      [0]
          p(a__from) = [1 1 0]      [0]             
                       [0 1 0] x1 + [0]             
                       [0 0 0]      [0]             
           p(a__fst) = [1 0 0]      [1 1 0]      [0]
                       [0 1 0] x1 + [0 1 0] x2 + [0]
                       [0 0 1]      [0 0 0]      [0]
           p(a__len) = [1 0 0]      [0]             
                       [0 1 0] x1 + [0]             
                       [0 0 0]      [1]             
              p(add) = [1 0 0]      [1 1 0]      [0]
                       [0 1 0] x1 + [0 1 0] x2 + [1]
                       [0 0 0]      [0 0 0]      [0]
             p(cons) = [1 0 0]      [0]             
                       [0 1 0] x1 + [0]             
                       [0 0 0]      [0]             
             p(from) = [1 1 0]      [0]             
                       [0 1 0] x1 + [0]             
                       [0 0 0]      [0]             
              p(fst) = [1 0 0]      [1 1 0]      [0]
                       [0 1 0] x1 + [0 1 0] x2 + [0]
                       [0 0 1]      [0 0 0]      [0]
              p(len) = [1 0 0]      [0]             
                       [0 1 0] x1 + [0]             
                       [0 0 0]      [0]             
             p(mark) = [1 1 0]      [0]             
                       [0 1 0] x1 + [0]             
                       [0 0 0]      [1]             
              p(nil) = [0]                          
                       [0]                          
                       [1]                          
                p(s) = [0]                          
                       [0]                          
                       [0]                          
        
        Following rules are strictly oriented:
        a__add(X1,X2) = [1 0 0]      [1 1 0]      [1]
                        [0 1 0] X1 + [0 1 0] X2 + [1]
                        [0 0 1]      [0 0 0]      [0]
                      > [1 0 0]      [1 1 0]      [0]
                        [0 1 0] X1 + [0 1 0] X2 + [1]
                        [0 0 0]      [0 0 0]      [0]
                      = add(X1,X2)                   
        
        
        Following rules are (at-least) weakly oriented:
                 a__add(0(),X) =  [1 1 0]     [1]              
                                  [0 1 0] X + [1]              
                                  [0 0 0]     [1]              
                               >= [1 1 0]     [0]              
                                  [0 1 0] X + [0]              
                                  [0 0 0]     [1]              
                               =  mark(X)                      
        
                a__add(s(X),Y) =  [1 1 0]     [1]              
                                  [0 1 0] Y + [1]              
                                  [0 0 0]     [0]              
                               >= [0]                          
                                  [0]                          
                                  [0]                          
                               =  s(add(X,Y))                  
        
                    a__from(X) =  [1 1 0]     [0]              
                                  [0 1 0] X + [0]              
                                  [0 0 0]     [0]              
                               >= [1 1 0]     [0]              
                                  [0 1 0] X + [0]              
                                  [0 0 0]     [0]              
                               =  cons(mark(X),from(s(X)))     
        
                    a__from(X) =  [1 1 0]     [0]              
                                  [0 1 0] X + [0]              
                                  [0 0 0]     [0]              
                               >= [1 1 0]     [0]              
                                  [0 1 0] X + [0]              
                                  [0 0 0]     [0]              
                               =  from(X)                      
        
                 a__fst(X1,X2) =  [1 0 0]      [1 1 0]      [0]
                                  [0 1 0] X1 + [0 1 0] X2 + [0]
                                  [0 0 1]      [0 0 0]      [0]
                               >= [1 0 0]      [1 1 0]      [0]
                                  [0 1 0] X1 + [0 1 0] X2 + [0]
                                  [0 0 1]      [0 0 0]      [0]
                               =  fst(X1,X2)                   
        
                 a__fst(0(),Z) =  [1 1 0]     [0]              
                                  [0 1 0] Z + [0]              
                                  [0 0 0]     [1]              
                               >= [0]                          
                                  [0]                          
                                  [1]                          
                               =  nil()                        
        
        a__fst(s(X),cons(Y,Z)) =  [1 1 0]     [0]              
                                  [0 1 0] Y + [0]              
                                  [0 0 0]     [0]              
                               >= [1 1 0]     [0]              
                                  [0 1 0] Y + [0]              
                                  [0 0 0]     [0]              
                               =  cons(mark(Y),fst(X,Z))       
        
                     a__len(X) =  [1 0 0]     [0]              
                                  [0 1 0] X + [0]              
                                  [0 0 0]     [1]              
                               >= [1 0 0]     [0]              
                                  [0 1 0] X + [0]              
                                  [0 0 0]     [0]              
                               =  len(X)                       
        
             a__len(cons(X,Z)) =  [1 0 0]     [0]              
                                  [0 1 0] X + [0]              
                                  [0 0 0]     [1]              
                               >= [0]                          
                                  [0]                          
                                  [0]                          
                               =  s(len(Z))                    
        
                 a__len(nil()) =  [0]                          
                                  [0]                          
                                  [1]                          
                               >= [0]                          
                                  [0]                          
                                  [1]                          
                               =  0()                          
        
                     mark(0()) =  [0]                          
                                  [0]                          
                                  [1]                          
                               >= [0]                          
                                  [0]                          
                                  [1]                          
                               =  0()                          
        
              mark(add(X1,X2)) =  [1 1 0]      [1 2 0]      [1]
                                  [0 1 0] X1 + [0 1 0] X2 + [1]
                                  [0 0 0]      [0 0 0]      [1]
                               >= [1 1 0]      [1 2 0]      [1]
                                  [0 1 0] X1 + [0 1 0] X2 + [1]
                                  [0 0 0]      [0 0 0]      [1]
                               =  a__add(mark(X1),mark(X2))    
        
             mark(cons(X1,X2)) =  [1 1 0]      [0]             
                                  [0 1 0] X1 + [0]             
                                  [0 0 0]      [1]             
                               >= [1 1 0]      [0]             
                                  [0 1 0] X1 + [0]             
                                  [0 0 0]      [0]             
                               =  cons(mark(X1),X2)            
        
                 mark(from(X)) =  [1 2 0]     [0]              
                                  [0 1 0] X + [0]              
                                  [0 0 0]     [1]              
                               >= [1 2 0]     [0]              
                                  [0 1 0] X + [0]              
                                  [0 0 0]     [0]              
                               =  a__from(mark(X))             
        
              mark(fst(X1,X2)) =  [1 1 0]      [1 2 0]      [0]
                                  [0 1 0] X1 + [0 1 0] X2 + [0]
                                  [0 0 0]      [0 0 0]      [1]
                               >= [1 1 0]      [1 2 0]      [0]
                                  [0 1 0] X1 + [0 1 0] X2 + [0]
                                  [0 0 0]      [0 0 0]      [1]
                               =  a__fst(mark(X1),mark(X2))    
        
                  mark(len(X)) =  [1 1 0]     [0]              
                                  [0 1 0] X + [0]              
                                  [0 0 0]     [1]              
                               >= [1 1 0]     [0]              
                                  [0 1 0] X + [0]              
                                  [0 0 0]     [1]              
                               =  a__len(mark(X))              
        
                   mark(nil()) =  [0]                          
                                  [0]                          
                                  [1]                          
                               >= [0]                          
                                  [0]                          
                                  [1]                          
                               =  nil()                        
        
                    mark(s(X)) =  [0]                          
                                  [0]                          
                                  [1]                          
                               >= [0]                          
                                  [0]                          
                                  [0]                          
                               =  s(X)                         
        
** Step 1.b:13: NaturalMI WORST_CASE(?,O(n^2))
    + Considered Problem:
        - Strict TRS:
            a__len(X) -> len(X)
        - Weak TRS:
            a__add(X1,X2) -> add(X1,X2)
            a__add(0(),X) -> mark(X)
            a__add(s(X),Y) -> s(add(X,Y))
            a__from(X) -> cons(mark(X),from(s(X)))
            a__from(X) -> from(X)
            a__fst(X1,X2) -> fst(X1,X2)
            a__fst(0(),Z) -> nil()
            a__fst(s(X),cons(Y,Z)) -> cons(mark(Y),fst(X,Z))
            a__len(cons(X,Z)) -> s(len(Z))
            a__len(nil()) -> 0()
            mark(0()) -> 0()
            mark(add(X1,X2)) -> a__add(mark(X1),mark(X2))
            mark(cons(X1,X2)) -> cons(mark(X1),X2)
            mark(from(X)) -> a__from(mark(X))
            mark(fst(X1,X2)) -> a__fst(mark(X1),mark(X2))
            mark(len(X)) -> a__len(mark(X))
            mark(nil()) -> nil()
            mark(s(X)) -> s(X)
        - Signature:
            {a__add/2,a__from/1,a__fst/2,a__len/1,mark/1} / {0/0,add/2,cons/2,from/1,fst/2,len/1,nil/0,s/1}
        - Obligation:
            innermost runtime complexity wrt. defined symbols {a__add,a__from,a__fst,a__len,mark} and constructors {0
            ,add,cons,from,fst,len,nil,s}
    + Applied Processor:
        NaturalMI {miDimension = 3, miDegree = 3, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Just any strict-rules}
    + Details:
        We apply a matrix interpretation of kind constructor based matrix interpretation:
        The following argument positions are considered usable:
          uargs(a__add) = {1,2},
          uargs(a__from) = {1},
          uargs(a__fst) = {1,2},
          uargs(a__len) = {1},
          uargs(cons) = {1}
        
        Following symbols are considered usable:
          {a__add,a__from,a__fst,a__len,mark}
        TcT has computed the following interpretation:
                p(0) = [1]                          
                       [0]                          
                       [0]                          
           p(a__add) = [1 0 1]      [1 1 0]      [0]
                       [0 1 0] x1 + [0 1 0] x2 + [1]
                       [0 0 1]      [0 0 0]      [0]
          p(a__from) = [1 1 0]      [1]             
                       [0 1 0] x1 + [1]             
                       [0 0 0]      [0]             
           p(a__fst) = [1 0 0]      [1 1 0]      [0]
                       [0 1 0] x1 + [0 1 1] x2 + [0]
                       [0 0 0]      [0 0 1]      [0]
           p(a__len) = [1 1 0]      [1]             
                       [0 1 0] x1 + [1]             
                       [0 0 0]      [0]             
              p(add) = [1 0 1]      [1 1 0]      [0]
                       [0 1 0] x1 + [0 1 0] x2 + [1]
                       [0 0 0]      [0 0 0]      [0]
             p(cons) = [1 0 1]      [0]             
                       [0 1 0] x1 + [1]             
                       [0 0 0]      [0]             
             p(from) = [1 1 0]      [1]             
                       [0 1 0] x1 + [1]             
                       [0 0 0]      [0]             
              p(fst) = [1 0 0]      [1 1 0]      [0]
                       [0 1 0] x1 + [0 1 0] x2 + [0]
                       [0 0 0]      [0 0 0]      [0]
              p(len) = [1 1 0]      [0]             
                       [0 1 0] x1 + [1]             
                       [0 0 0]      [0]             
             p(mark) = [1 1 0]      [0]             
                       [0 1 0] x1 + [0]             
                       [0 0 0]      [0]             
              p(nil) = [1]                          
                       [0]                          
                       [0]                          
                p(s) = [1]                          
                       [1]                          
                       [0]                          
        
        Following rules are strictly oriented:
        a__len(X) = [1 1 0]     [1]
                    [0 1 0] X + [1]
                    [0 0 0]     [0]
                  > [1 1 0]     [0]
                    [0 1 0] X + [1]
                    [0 0 0]     [0]
                  = len(X)         
        
        
        Following rules are (at-least) weakly oriented:
                 a__add(X1,X2) =  [1 0 1]      [1 1 0]      [0]
                                  [0 1 0] X1 + [0 1 0] X2 + [1]
                                  [0 0 1]      [0 0 0]      [0]
                               >= [1 0 1]      [1 1 0]      [0]
                                  [0 1 0] X1 + [0 1 0] X2 + [1]
                                  [0 0 0]      [0 0 0]      [0]
                               =  add(X1,X2)                   
        
                 a__add(0(),X) =  [1 1 0]     [1]              
                                  [0 1 0] X + [1]              
                                  [0 0 0]     [0]              
                               >= [1 1 0]     [0]              
                                  [0 1 0] X + [0]              
                                  [0 0 0]     [0]              
                               =  mark(X)                      
        
                a__add(s(X),Y) =  [1 1 0]     [1]              
                                  [0 1 0] Y + [2]              
                                  [0 0 0]     [0]              
                               >= [1]                          
                                  [1]                          
                                  [0]                          
                               =  s(add(X,Y))                  
        
                    a__from(X) =  [1 1 0]     [1]              
                                  [0 1 0] X + [1]              
                                  [0 0 0]     [0]              
                               >= [1 1 0]     [0]              
                                  [0 1 0] X + [1]              
                                  [0 0 0]     [0]              
                               =  cons(mark(X),from(s(X)))     
        
                    a__from(X) =  [1 1 0]     [1]              
                                  [0 1 0] X + [1]              
                                  [0 0 0]     [0]              
                               >= [1 1 0]     [1]              
                                  [0 1 0] X + [1]              
                                  [0 0 0]     [0]              
                               =  from(X)                      
        
                 a__fst(X1,X2) =  [1 0 0]      [1 1 0]      [0]
                                  [0 1 0] X1 + [0 1 1] X2 + [0]
                                  [0 0 0]      [0 0 1]      [0]
                               >= [1 0 0]      [1 1 0]      [0]
                                  [0 1 0] X1 + [0 1 0] X2 + [0]
                                  [0 0 0]      [0 0 0]      [0]
                               =  fst(X1,X2)                   
        
                 a__fst(0(),Z) =  [1 1 0]     [1]              
                                  [0 1 1] Z + [0]              
                                  [0 0 1]     [0]              
                               >= [1]                          
                                  [0]                          
                                  [0]                          
                               =  nil()                        
        
        a__fst(s(X),cons(Y,Z)) =  [1 1 1]     [2]              
                                  [0 1 0] Y + [2]              
                                  [0 0 0]     [0]              
                               >= [1 1 0]     [0]              
                                  [0 1 0] Y + [1]              
                                  [0 0 0]     [0]              
                               =  cons(mark(Y),fst(X,Z))       
        
             a__len(cons(X,Z)) =  [1 1 1]     [2]              
                                  [0 1 0] X + [2]              
                                  [0 0 0]     [0]              
                               >= [1]                          
                                  [1]                          
                                  [0]                          
                               =  s(len(Z))                    
        
                 a__len(nil()) =  [2]                          
                                  [1]                          
                                  [0]                          
                               >= [1]                          
                                  [0]                          
                                  [0]                          
                               =  0()                          
        
                     mark(0()) =  [1]                          
                                  [0]                          
                                  [0]                          
                               >= [1]                          
                                  [0]                          
                                  [0]                          
                               =  0()                          
        
              mark(add(X1,X2)) =  [1 1 1]      [1 2 0]      [1]
                                  [0 1 0] X1 + [0 1 0] X2 + [1]
                                  [0 0 0]      [0 0 0]      [0]
                               >= [1 1 0]      [1 2 0]      [0]
                                  [0 1 0] X1 + [0 1 0] X2 + [1]
                                  [0 0 0]      [0 0 0]      [0]
                               =  a__add(mark(X1),mark(X2))    
        
             mark(cons(X1,X2)) =  [1 1 1]      [1]             
                                  [0 1 0] X1 + [1]             
                                  [0 0 0]      [0]             
                               >= [1 1 0]      [0]             
                                  [0 1 0] X1 + [1]             
                                  [0 0 0]      [0]             
                               =  cons(mark(X1),X2)            
        
                 mark(from(X)) =  [1 2 0]     [2]              
                                  [0 1 0] X + [1]              
                                  [0 0 0]     [0]              
                               >= [1 2 0]     [1]              
                                  [0 1 0] X + [1]              
                                  [0 0 0]     [0]              
                               =  a__from(mark(X))             
        
              mark(fst(X1,X2)) =  [1 1 0]      [1 2 0]      [0]
                                  [0 1 0] X1 + [0 1 0] X2 + [0]
                                  [0 0 0]      [0 0 0]      [0]
                               >= [1 1 0]      [1 2 0]      [0]
                                  [0 1 0] X1 + [0 1 0] X2 + [0]
                                  [0 0 0]      [0 0 0]      [0]
                               =  a__fst(mark(X1),mark(X2))    
        
                  mark(len(X)) =  [1 2 0]     [1]              
                                  [0 1 0] X + [1]              
                                  [0 0 0]     [0]              
                               >= [1 2 0]     [1]              
                                  [0 1 0] X + [1]              
                                  [0 0 0]     [0]              
                               =  a__len(mark(X))              
        
                   mark(nil()) =  [1]                          
                                  [0]                          
                                  [0]                          
                               >= [1]                          
                                  [0]                          
                                  [0]                          
                               =  nil()                        
        
                    mark(s(X)) =  [2]                          
                                  [1]                          
                                  [0]                          
                               >= [1]                          
                                  [1]                          
                                  [0]                          
                               =  s(X)                         
        
** Step 1.b:14: EmptyProcessor WORST_CASE(?,O(1))
    + Considered Problem:
        - Weak TRS:
            a__add(X1,X2) -> add(X1,X2)
            a__add(0(),X) -> mark(X)
            a__add(s(X),Y) -> s(add(X,Y))
            a__from(X) -> cons(mark(X),from(s(X)))
            a__from(X) -> from(X)
            a__fst(X1,X2) -> fst(X1,X2)
            a__fst(0(),Z) -> nil()
            a__fst(s(X),cons(Y,Z)) -> cons(mark(Y),fst(X,Z))
            a__len(X) -> len(X)
            a__len(cons(X,Z)) -> s(len(Z))
            a__len(nil()) -> 0()
            mark(0()) -> 0()
            mark(add(X1,X2)) -> a__add(mark(X1),mark(X2))
            mark(cons(X1,X2)) -> cons(mark(X1),X2)
            mark(from(X)) -> a__from(mark(X))
            mark(fst(X1,X2)) -> a__fst(mark(X1),mark(X2))
            mark(len(X)) -> a__len(mark(X))
            mark(nil()) -> nil()
            mark(s(X)) -> s(X)
        - Signature:
            {a__add/2,a__from/1,a__fst/2,a__len/1,mark/1} / {0/0,add/2,cons/2,from/1,fst/2,len/1,nil/0,s/1}
        - Obligation:
            innermost runtime complexity wrt. defined symbols {a__add,a__from,a__fst,a__len,mark} and constructors {0
            ,add,cons,from,fst,len,nil,s}
    + Applied Processor:
        EmptyProcessor
    + Details:
        The problem is already closed. The intended complexity is O(1).

WORST_CASE(Omega(n^1),O(n^3))