* Step 1: Sum WORST_CASE(Omega(n^1),O(n^2))
    + 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: WeightGap WORST_CASE(?,O(n^2))
    + 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:
        WeightGap {wgDimension = 1, wgDegree = 1, wgKind = Algebraic, wgUArgs = UArgs, wgOn = WgOnAny}
    + Details:
        The weightgap principle applies using the following nonconstant growth matrix-interpretation:
          We apply a matrix interpretation of kind constructor based matrix interpretation:
          The following argument positions are considered usable:
            uargs(a__add) = {1,2},
            uargs(a__from) = {1},
            uargs(a__fst) = {1,2},
            uargs(a__len) = {1},
            uargs(cons) = {1}
          
          Following symbols are considered usable:
            all
          TcT has computed the following interpretation:
                  p(0) = [1]                  
             p(a__add) = [1] x1 + [1] x2 + [0]
            p(a__from) = [1] x1 + [0]         
             p(a__fst) = [1] x1 + [1] x2 + [0]
             p(a__len) = [1] x1 + [0]         
                p(add) = [1] x2 + [0]         
               p(cons) = [1] x1 + [0]         
               p(from) = [1] x1 + [0]         
                p(fst) = [1] x1 + [0]         
                p(len) = [1] x1 + [0]         
               p(mark) = [0]                  
                p(nil) = [0]                  
                  p(s) = [0]                  
          
          Following rules are strictly oriented:
          a__add(0(),X) = [1] X + [1]
                        > [0]        
                        = mark(X)    
          
          a__fst(0(),Z) = [1] Z + [1]
                        > [0]        
                        = nil()      
          
          
          Following rules are (at-least) weakly oriented:
                   a__add(X1,X2) =  [1] X1 + [1] X2 + [0]    
                                 >= [1] X2 + [0]             
                                 =  add(X1,X2)               
          
                  a__add(s(X),Y) =  [1] Y + [0]              
                                 >= [0]                      
                                 =  s(add(X,Y))              
          
                      a__from(X) =  [1] X + [0]              
                                 >= [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 + [0]             
                                 =  fst(X1,X2)               
          
          a__fst(s(X),cons(Y,Z)) =  [1] Y + [0]              
                                 >= [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]                      
                                 >= [1]                      
                                 =  0()                      
          
                       mark(0()) =  [0]                      
                                 >= [1]                      
                                 =  0()                      
          
                mark(add(X1,X2)) =  [0]                      
                                 >= [0]                      
                                 =  a__add(mark(X1),mark(X2))
          
               mark(cons(X1,X2)) =  [0]                      
                                 >= [0]                      
                                 =  cons(mark(X1),X2)        
          
                   mark(from(X)) =  [0]                      
                                 >= [0]                      
                                 =  a__from(mark(X))         
          
                mark(fst(X1,X2)) =  [0]                      
                                 >= [0]                      
                                 =  a__fst(mark(X1),mark(X2))
          
                    mark(len(X)) =  [0]                      
                                 >= [0]                      
                                 =  a__len(mark(X))          
          
                     mark(nil()) =  [0]                      
                                 >= [0]                      
                                 =  nil()                    
          
                      mark(s(X)) =  [0]                      
                                 >= [0]                      
                                 =  s(X)                     
          
        Further, it can be verified that all rules not oriented are covered by the weightgap condition.
** Step 1.b:2: WeightGap WORST_CASE(?,O(n^2))
    + Considered Problem:
        - Strict TRS:
            a__add(X1,X2) -> add(X1,X2)
            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(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__fst(0(),Z) -> 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:
        WeightGap {wgDimension = 1, wgDegree = 1, wgKind = Algebraic, wgUArgs = UArgs, wgOn = WgOnAny}
    + Details:
        The weightgap principle applies using the following nonconstant growth matrix-interpretation:
          We apply a matrix interpretation of kind constructor based matrix interpretation:
          The following argument positions are considered usable:
            uargs(a__add) = {1,2},
            uargs(a__from) = {1},
            uargs(a__fst) = {1,2},
            uargs(a__len) = {1},
            uargs(cons) = {1}
          
          Following symbols are considered usable:
            all
          TcT has computed the following interpretation:
                  p(0) = [4]                  
             p(a__add) = [1] x1 + [1] x2 + [1]
            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 + [0]
               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(X1,X2) = [1] X1 + [1] X2 + [1]
                         > [1] X1 + [1] X2 + [0]
                         = add(X1,X2)           
          
          a__add(s(X),Y) = [1] Y + [1]          
                         > [0]                  
                         = s(add(X,Y))          
          
          
          Following rules are (at-least) weakly oriented:
                   a__add(0(),X) =  [1] X + [5]              
                                 >= [1] X + [0]              
                                 =  mark(X)                  
          
                      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 + [4]              
                                 >= [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]                      
                                 >= [4]                      
                                 =  0()                      
          
                       mark(0()) =  [4]                      
                                 >= [4]                      
                                 =  0()                      
          
                mark(add(X1,X2)) =  [1] X1 + [1] X2 + [0]    
                                 >= [1] X1 + [1] X2 + [1]    
                                 =  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)                     
          
        Further, it can be verified that all rules not oriented are covered by the weightgap condition.
** Step 1.b:3: WeightGap WORST_CASE(?,O(n^2))
    + Considered Problem:
        - Strict TRS:
            a__from(X) -> cons(mark(X),from(s(X)))
            a__from(X) -> from(X)
            a__fst(X1,X2) -> fst(X1,X2)
            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(X1,X2) -> add(X1,X2)
            a__add(0(),X) -> mark(X)
            a__add(s(X),Y) -> s(add(X,Y))
            a__fst(0(),Z) -> 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:
        WeightGap {wgDimension = 1, wgDegree = 1, wgKind = Algebraic, wgUArgs = UArgs, wgOn = WgOnAny}
    + Details:
        The weightgap principle applies using the following nonconstant growth matrix-interpretation:
          We apply a matrix interpretation of kind constructor based matrix interpretation:
          The following argument positions are considered usable:
            uargs(a__add) = {1,2},
            uargs(a__from) = {1},
            uargs(a__fst) = {1,2},
            uargs(a__len) = {1},
            uargs(cons) = {1}
          
          Following symbols are considered usable:
            all
          TcT has computed the following interpretation:
                  p(0) = [0]                  
             p(a__add) = [1] x1 + [1] x2 + [0]
            p(a__from) = [1] x1 + [4]         
             p(a__fst) = [1] x1 + [1] x2 + [0]
             p(a__len) = [1] x1 + [0]         
                p(add) = [1] x1 + [1] x2 + [0]
               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__from(X) = [1] X + [4]             
                     > [1] X + [0]             
                     = cons(mark(X),from(s(X)))
          
          a__from(X) = [1] X + [4]             
                     > [1] X + [0]             
                     = from(X)                 
          
          
          Following rules are (at-least) weakly oriented:
                   a__add(X1,X2) =  [1] X1 + [1] X2 + [0]    
                                 >= [1] X1 + [1] X2 + [0]    
                                 =  add(X1,X2)               
          
                   a__add(0(),X) =  [1] X + [0]              
                                 >= [1] X + [0]              
                                 =  mark(X)                  
          
                  a__add(s(X),Y) =  [1] Y + [0]              
                                 >= [0]                      
                                 =  s(add(X,Y))              
          
                   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 + [0]    
                                 >= [1] X1 + [1] X2 + [0]    
                                 =  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 + [4]              
                                 =  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)                     
          
        Further, it can be verified that all rules not oriented are covered by the weightgap condition.
** Step 1.b:4: WeightGap WORST_CASE(?,O(n^2))
    + Considered Problem:
        - Strict TRS:
            a__fst(X1,X2) -> fst(X1,X2)
            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(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(0(),Z) -> 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:
        WeightGap {wgDimension = 1, wgDegree = 1, wgKind = Algebraic, wgUArgs = UArgs, wgOn = WgOnAny}
    + Details:
        The weightgap principle applies using the following nonconstant growth matrix-interpretation:
          We apply a matrix interpretation of kind constructor based matrix interpretation:
          The following argument positions are considered usable:
            uargs(a__add) = {1,2},
            uargs(a__from) = {1},
            uargs(a__fst) = {1,2},
            uargs(a__len) = {1},
            uargs(cons) = {1}
          
          Following symbols are considered usable:
            all
          TcT has computed the following interpretation:
                  p(0) = [0]                  
             p(a__add) = [1] x1 + [1] x2 + [1]
            p(a__from) = [1] x1 + [3]         
             p(a__fst) = [1] x1 + [1] x2 + [1]
             p(a__len) = [1] x1 + [0]         
                p(add) = [1] x1 + [1] x2 + [1]
               p(cons) = [1] x1 + [2]         
               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__fst(X1,X2) = [1] X1 + [1] X2 + [1] 
                                 > [1] X1 + [1] X2 + [0] 
                                 = fst(X1,X2)            
          
          a__fst(s(X),cons(Y,Z)) = [1] Y + [3]           
                                 > [1] Y + [2]           
                                 = cons(mark(Y),fst(X,Z))
          
               a__len(cons(X,Z)) = [1] X + [2]           
                                 > [0]                   
                                 = s(len(Z))             
          
          
          Following rules are (at-least) weakly oriented:
              a__add(X1,X2) =  [1] X1 + [1] X2 + [1]    
                            >= [1] X1 + [1] X2 + [1]    
                            =  add(X1,X2)               
          
              a__add(0(),X) =  [1] X + [1]              
                            >= [1] X + [0]              
                            =  mark(X)                  
          
             a__add(s(X),Y) =  [1] Y + [1]              
                            >= [0]                      
                            =  s(add(X,Y))              
          
                 a__from(X) =  [1] X + [3]              
                            >= [1] X + [2]              
                            =  cons(mark(X),from(s(X))) 
          
                 a__from(X) =  [1] X + [3]              
                            >= [1] X + [0]              
                            =  from(X)                  
          
              a__fst(0(),Z) =  [1] Z + [1]              
                            >= [0]                      
                            =  nil()                    
          
                  a__len(X) =  [1] X + [0]              
                            >= [1] X + [0]              
                            =  len(X)                   
          
              a__len(nil()) =  [0]                      
                            >= [0]                      
                            =  0()                      
          
                  mark(0()) =  [0]                      
                            >= [0]                      
                            =  0()                      
          
           mark(add(X1,X2)) =  [1] X1 + [1] X2 + [1]    
                            >= [1] X1 + [1] X2 + [1]    
                            =  a__add(mark(X1),mark(X2))
          
          mark(cons(X1,X2)) =  [1] X1 + [2]             
                            >= [1] X1 + [2]             
                            =  cons(mark(X1),X2)        
          
              mark(from(X)) =  [1] X + [0]              
                            >= [1] X + [3]              
                            =  a__from(mark(X))         
          
           mark(fst(X1,X2)) =  [1] X1 + [1] X2 + [0]    
                            >= [1] X1 + [1] X2 + [1]    
                            =  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)                     
          
        Further, it can be verified that all rules not oriented are covered by the weightgap condition.
** Step 1.b:5: WeightGap WORST_CASE(?,O(n^2))
    + Considered Problem:
        - Strict TRS:
            a__len(X) -> len(X)
            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(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))
        - 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:
        WeightGap {wgDimension = 1, wgDegree = 1, wgKind = Algebraic, wgUArgs = UArgs, wgOn = WgOnAny}
    + Details:
        The weightgap principle applies using the following nonconstant growth matrix-interpretation:
          We apply a matrix interpretation of kind constructor based matrix interpretation:
          The following argument positions are considered usable:
            uargs(a__add) = {1,2},
            uargs(a__from) = {1},
            uargs(a__fst) = {1,2},
            uargs(a__len) = {1},
            uargs(cons) = {1}
          
          Following symbols are considered usable:
            all
          TcT has computed the following interpretation:
                  p(0) = [4]                  
             p(a__add) = [1] x1 + [1] x2 + [7]
            p(a__from) = [1] x1 + [2]         
             p(a__fst) = [1] x1 + [1] x2 + [2]
             p(a__len) = [1] x1 + [0]         
                p(add) = [1] x1 + [1] x2 + [7]
               p(cons) = [1] x1 + [0]         
               p(from) = [0]                  
                p(fst) = [0]                  
                p(len) = [0]                  
               p(mark) = [2]                  
                p(nil) = [6]                  
                  p(s) = [0]                  
          
          Following rules are strictly oriented:
          a__len(nil()) = [6] 
                        > [4] 
                        = 0() 
          
             mark(s(X)) = [2] 
                        > [0] 
                        = s(X)
          
          
          Following rules are (at-least) weakly oriented:
                   a__add(X1,X2) =  [1] X1 + [1] X2 + [7]    
                                 >= [1] X1 + [1] X2 + [7]    
                                 =  add(X1,X2)               
          
                   a__add(0(),X) =  [1] X + [11]             
                                 >= [2]                      
                                 =  mark(X)                  
          
                  a__add(s(X),Y) =  [1] Y + [7]              
                                 >= [0]                      
                                 =  s(add(X,Y))              
          
                      a__from(X) =  [1] X + [2]              
                                 >= [2]                      
                                 =  cons(mark(X),from(s(X))) 
          
                      a__from(X) =  [1] X + [2]              
                                 >= [0]                      
                                 =  from(X)                  
          
                   a__fst(X1,X2) =  [1] X1 + [1] X2 + [2]    
                                 >= [0]                      
                                 =  fst(X1,X2)               
          
                   a__fst(0(),Z) =  [1] Z + [6]              
                                 >= [6]                      
                                 =  nil()                    
          
          a__fst(s(X),cons(Y,Z)) =  [1] Y + [2]              
                                 >= [2]                      
                                 =  cons(mark(Y),fst(X,Z))   
          
                       a__len(X) =  [1] X + [0]              
                                 >= [0]                      
                                 =  len(X)                   
          
               a__len(cons(X,Z)) =  [1] X + [0]              
                                 >= [0]                      
                                 =  s(len(Z))                
          
                       mark(0()) =  [2]                      
                                 >= [4]                      
                                 =  0()                      
          
                mark(add(X1,X2)) =  [2]                      
                                 >= [11]                     
                                 =  a__add(mark(X1),mark(X2))
          
               mark(cons(X1,X2)) =  [2]                      
                                 >= [2]                      
                                 =  cons(mark(X1),X2)        
          
                   mark(from(X)) =  [2]                      
                                 >= [4]                      
                                 =  a__from(mark(X))         
          
                mark(fst(X1,X2)) =  [2]                      
                                 >= [6]                      
                                 =  a__fst(mark(X1),mark(X2))
          
                    mark(len(X)) =  [2]                      
                                 >= [2]                      
                                 =  a__len(mark(X))          
          
                     mark(nil()) =  [2]                      
                                 >= [6]                      
                                 =  nil()                    
          
        Further, it can be verified that all rules not oriented are covered by the weightgap condition.
** Step 1.b:6: WeightGap WORST_CASE(?,O(n^2))
    + Considered Problem:
        - Strict TRS:
            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()
        - 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(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:
        WeightGap {wgDimension = 1, wgDegree = 1, wgKind = Algebraic, wgUArgs = UArgs, wgOn = WgOnAny}
    + Details:
        The weightgap principle applies using the following nonconstant growth matrix-interpretation:
          We apply a matrix interpretation of kind constructor based matrix interpretation:
          The following argument positions are considered usable:
            uargs(a__add) = {1,2},
            uargs(a__from) = {1},
            uargs(a__fst) = {1,2},
            uargs(a__len) = {1},
            uargs(cons) = {1}
          
          Following symbols are considered usable:
            all
          TcT has computed the following interpretation:
                  p(0) = [2]                  
             p(a__add) = [1] x1 + [1] x2 + [2]
            p(a__from) = [1] x1 + [4]         
             p(a__fst) = [1] x1 + [1] x2 + [4]
             p(a__len) = [1] x1 + [0]         
                p(add) = [0]                  
               p(cons) = [1] x1 + [0]         
               p(from) = [0]                  
                p(fst) = [0]                  
                p(len) = [0]                  
               p(mark) = [4]                  
                p(nil) = [2]                  
                  p(s) = [0]                  
          
          Following rules are strictly oriented:
            mark(0()) = [4]  
                      > [2]  
                      = 0()  
          
          mark(nil()) = [4]  
                      > [2]  
                      = nil()
          
          
          Following rules are (at-least) weakly oriented:
                   a__add(X1,X2) =  [1] X1 + [1] X2 + [2]    
                                 >= [0]                      
                                 =  add(X1,X2)               
          
                   a__add(0(),X) =  [1] X + [4]              
                                 >= [4]                      
                                 =  mark(X)                  
          
                  a__add(s(X),Y) =  [1] Y + [2]              
                                 >= [0]                      
                                 =  s(add(X,Y))              
          
                      a__from(X) =  [1] X + [4]              
                                 >= [4]                      
                                 =  cons(mark(X),from(s(X))) 
          
                      a__from(X) =  [1] X + [4]              
                                 >= [0]                      
                                 =  from(X)                  
          
                   a__fst(X1,X2) =  [1] X1 + [1] X2 + [4]    
                                 >= [0]                      
                                 =  fst(X1,X2)               
          
                   a__fst(0(),Z) =  [1] Z + [6]              
                                 >= [2]                      
                                 =  nil()                    
          
          a__fst(s(X),cons(Y,Z)) =  [1] Y + [4]              
                                 >= [4]                      
                                 =  cons(mark(Y),fst(X,Z))   
          
                       a__len(X) =  [1] X + [0]              
                                 >= [0]                      
                                 =  len(X)                   
          
               a__len(cons(X,Z)) =  [1] X + [0]              
                                 >= [0]                      
                                 =  s(len(Z))                
          
                   a__len(nil()) =  [2]                      
                                 >= [2]                      
                                 =  0()                      
          
                mark(add(X1,X2)) =  [4]                      
                                 >= [10]                     
                                 =  a__add(mark(X1),mark(X2))
          
               mark(cons(X1,X2)) =  [4]                      
                                 >= [4]                      
                                 =  cons(mark(X1),X2)        
          
                   mark(from(X)) =  [4]                      
                                 >= [8]                      
                                 =  a__from(mark(X))         
          
                mark(fst(X1,X2)) =  [4]                      
                                 >= [12]                     
                                 =  a__fst(mark(X1),mark(X2))
          
                    mark(len(X)) =  [4]                      
                                 >= [4]                      
                                 =  a__len(mark(X))          
          
                      mark(s(X)) =  [4]                      
                                 >= [0]                      
                                 =  s(X)                     
          
        Further, it can be verified that all rules not oriented are covered by the weightgap condition.
** Step 1.b:7: WeightGap WORST_CASE(?,O(n^2))
    + Considered Problem:
        - Strict TRS:
            a__len(X) -> len(X)
            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))
        - 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(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:
        WeightGap {wgDimension = 1, wgDegree = 1, wgKind = Algebraic, wgUArgs = UArgs, wgOn = WgOnAny}
    + Details:
        The weightgap principle applies using the following nonconstant growth matrix-interpretation:
          We apply a matrix interpretation of kind constructor based matrix interpretation:
          The following argument positions are considered usable:
            uargs(a__add) = {1,2},
            uargs(a__from) = {1},
            uargs(a__fst) = {1,2},
            uargs(a__len) = {1},
            uargs(cons) = {1}
          
          Following symbols are considered usable:
            all
          TcT has computed the following interpretation:
                  p(0) = [1]                  
             p(a__add) = [1] x1 + [1] x2 + [0]
            p(a__from) = [1] x1 + [5]         
             p(a__fst) = [1] x1 + [1] x2 + [1]
             p(a__len) = [1] x1 + [1]         
                p(add) = [0]                  
               p(cons) = [1] x1 + [4]         
               p(from) = [0]                  
                p(fst) = [1] x2 + [1]         
                p(len) = [0]                  
               p(mark) = [1]                  
                p(nil) = [0]                  
                  p(s) = [0]                  
          
          Following rules are strictly oriented:
          a__len(X) = [1] X + [1]
                    > [0]        
                    = len(X)     
          
          
          Following rules are (at-least) weakly oriented:
                   a__add(X1,X2) =  [1] X1 + [1] X2 + [0]    
                                 >= [0]                      
                                 =  add(X1,X2)               
          
                   a__add(0(),X) =  [1] X + [1]              
                                 >= [1]                      
                                 =  mark(X)                  
          
                  a__add(s(X),Y) =  [1] Y + [0]              
                                 >= [0]                      
                                 =  s(add(X,Y))              
          
                      a__from(X) =  [1] X + [5]              
                                 >= [5]                      
                                 =  cons(mark(X),from(s(X))) 
          
                      a__from(X) =  [1] X + [5]              
                                 >= [0]                      
                                 =  from(X)                  
          
                   a__fst(X1,X2) =  [1] X1 + [1] X2 + [1]    
                                 >= [1] X2 + [1]             
                                 =  fst(X1,X2)               
          
                   a__fst(0(),Z) =  [1] Z + [2]              
                                 >= [0]                      
                                 =  nil()                    
          
          a__fst(s(X),cons(Y,Z)) =  [1] Y + [5]              
                                 >= [5]                      
                                 =  cons(mark(Y),fst(X,Z))   
          
               a__len(cons(X,Z)) =  [1] X + [5]              
                                 >= [0]                      
                                 =  s(len(Z))                
          
                   a__len(nil()) =  [1]                      
                                 >= [1]                      
                                 =  0()                      
          
                       mark(0()) =  [1]                      
                                 >= [1]                      
                                 =  0()                      
          
                mark(add(X1,X2)) =  [1]                      
                                 >= [2]                      
                                 =  a__add(mark(X1),mark(X2))
          
               mark(cons(X1,X2)) =  [1]                      
                                 >= [5]                      
                                 =  cons(mark(X1),X2)        
          
                   mark(from(X)) =  [1]                      
                                 >= [6]                      
                                 =  a__from(mark(X))         
          
                mark(fst(X1,X2)) =  [1]                      
                                 >= [3]                      
                                 =  a__fst(mark(X1),mark(X2))
          
                    mark(len(X)) =  [1]                      
                                 >= [2]                      
                                 =  a__len(mark(X))          
          
                     mark(nil()) =  [1]                      
                                 >= [0]                      
                                 =  nil()                    
          
                      mark(s(X)) =  [1]                      
                                 >= [0]                      
                                 =  s(X)                     
          
        Further, it can be verified that all rules not oriented are covered by the weightgap condition.
** Step 1.b:8: MI WORST_CASE(?,O(n^2))
    + Considered Problem:
        - Strict TRS:
            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))
        - 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(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:
        MI {miKind = MaximalMatrix (UpperTriangular (Multiplicity Nothing)), miDimension = 2, miUArgs = UArgs, miURules = URules, miSelector = Just any strict-rules}
    + Details:
        We apply a matrix interpretation of kind MaximalMatrix (UpperTriangular (Multiplicity Nothing)):
        
        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) = [4]                        
                       [1]                        
           p(a__add) = [1 0] x_1 + [1 4] x_2 + [4]
                       [0 1]       [0 1]       [0]
          p(a__from) = [1 4] x_1 + [0]            
                       [0 1]       [0]            
           p(a__fst) = [1 0] x_1 + [1 4] x_2 + [4]
                       [0 1]       [0 1]       [2]
           p(a__len) = [1 0] x_1 + [0]            
                       [0 1]       [0]            
              p(add) = [1 0] x_1 + [1 4] x_2 + [4]
                       [0 1]       [0 1]       [0]
             p(cons) = [1 0] x_1 + [0]            
                       [0 1]       [0]            
             p(from) = [1 4] x_1 + [0]            
                       [0 1]       [0]            
              p(fst) = [1 0] x_1 + [1 4] x_2 + [0]
                       [0 1]       [0 1]       [2]
              p(len) = [1 0] x_1 + [0]            
                       [0 1]       [0]            
             p(mark) = [1 4] x_1 + [0]            
                       [0 1]       [0]            
              p(nil) = [4]                        
                       [1]                        
                p(s) = [0]                        
                       [0]                        
        
        Following rules are strictly oriented:
        mark(fst(X1,X2)) = [1 4] X1 + [1 8] X2 + [8]
                           [0 1]      [0 1]      [2]
                         > [1 4] X1 + [1 8] X2 + [4]
                           [0 1]      [0 1]      [2]
                         = a__fst(mark(X1),mark(X2))
        
        
        Following rules are (at-least) weakly oriented:
                 a__add(X1,X2) =  [1 0] X1 + [1 4] X2 + [4]
                                  [0 1]      [0 1]      [0]
                               >= [1 0] X1 + [1 4] X2 + [4]
                                  [0 1]      [0 1]      [0]
                               =  add(X1,X2)               
        
                 a__add(0(),X) =  [1 4] X + [8]            
                                  [0 1]     [1]            
                               >= [1 4] X + [0]            
                                  [0 1]     [0]            
                               =  mark(X)                  
        
                a__add(s(X),Y) =  [1 4] Y + [4]            
                                  [0 1]     [0]            
                               >= [0]                      
                                  [0]                      
                               =  s(add(X,Y))              
        
                    a__from(X) =  [1 4] X + [0]            
                                  [0 1]     [0]            
                               >= [1 4] X + [0]            
                                  [0 1]     [0]            
                               =  cons(mark(X),from(s(X))) 
        
                    a__from(X) =  [1 4] X + [0]            
                                  [0 1]     [0]            
                               >= [1 4] X + [0]            
                                  [0 1]     [0]            
                               =  from(X)                  
        
                 a__fst(X1,X2) =  [1 0] X1 + [1 4] X2 + [4]
                                  [0 1]      [0 1]      [2]
                               >= [1 0] X1 + [1 4] X2 + [0]
                                  [0 1]      [0 1]      [2]
                               =  fst(X1,X2)               
        
                 a__fst(0(),Z) =  [1 4] Z + [8]            
                                  [0 1]     [3]            
                               >= [4]                      
                                  [1]                      
                               =  nil()                    
        
        a__fst(s(X),cons(Y,Z)) =  [1 4] Y + [4]            
                                  [0 1]     [2]            
                               >= [1 4] Y + [0]            
                                  [0 1]     [0]            
                               =  cons(mark(Y),fst(X,Z))   
        
                     a__len(X) =  [1 0] X + [0]            
                                  [0 1]     [0]            
                               >= [1 0] X + [0]            
                                  [0 1]     [0]            
                               =  len(X)                   
        
             a__len(cons(X,Z)) =  [1 0] X + [0]            
                                  [0 1]     [0]            
                               >= [0]                      
                                  [0]                      
                               =  s(len(Z))                
        
                 a__len(nil()) =  [4]                      
                                  [1]                      
                               >= [4]                      
                                  [1]                      
                               =  0()                      
        
                     mark(0()) =  [8]                      
                                  [1]                      
                               >= [4]                      
                                  [1]                      
                               =  0()                      
        
              mark(add(X1,X2)) =  [1 4] X1 + [1 8] X2 + [4]
                                  [0 1]      [0 1]      [0]
                               >= [1 4] X1 + [1 8] X2 + [4]
                                  [0 1]      [0 1]      [0]
                               =  a__add(mark(X1),mark(X2))
        
             mark(cons(X1,X2)) =  [1 4] X1 + [0]           
                                  [0 1]      [0]           
                               >= [1 4] X1 + [0]           
                                  [0 1]      [0]           
                               =  cons(mark(X1),X2)        
        
                 mark(from(X)) =  [1 8] X + [0]            
                                  [0 1]     [0]            
                               >= [1 8] X + [0]            
                                  [0 1]     [0]            
                               =  a__from(mark(X))         
        
                  mark(len(X)) =  [1 4] X + [0]            
                                  [0 1]     [0]            
                               >= [1 4] X + [0]            
                                  [0 1]     [0]            
                               =  a__len(mark(X))          
        
                   mark(nil()) =  [8]                      
                                  [1]                      
                               >= [4]                      
                                  [1]                      
                               =  nil()                    
        
                    mark(s(X)) =  [0]                      
                                  [0]                      
                               >= [0]                      
                                  [0]                      
                               =  s(X)                     
        
** Step 1.b:9: MI WORST_CASE(?,O(n^2))
    + Considered Problem:
        - Strict TRS:
            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(len(X)) -> a__len(mark(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(X) -> len(X)
            a__len(cons(X,Z)) -> s(len(Z))
            a__len(nil()) -> 0()
            mark(0()) -> 0()
            mark(fst(X1,X2)) -> a__fst(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:
        MI {miKind = MaximalMatrix (UpperTriangular (Multiplicity Nothing)), miDimension = 2, miUArgs = UArgs, miURules = URules, miSelector = Just any strict-rules}
    + Details:
        We apply a matrix interpretation of kind MaximalMatrix (UpperTriangular (Multiplicity Nothing)):
        
        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]                        
           p(a__add) = [1 0] x_1 + [1 4] x_2 + [0]
                       [0 1]       [0 1]       [1]
          p(a__from) = [1 6] x_1 + [2]            
                       [0 1]       [0]            
           p(a__fst) = [1 4] x_1 + [1 5] x_2 + [0]
                       [0 1]       [0 1]       [0]
           p(a__len) = [1 0] x_1 + [6]            
                       [0 1]       [0]            
              p(add) = [1 0] x_1 + [1 4] x_2 + [0]
                       [0 1]       [0 1]       [1]
             p(cons) = [1 1] x_1 + [2]            
                       [0 1]       [0]            
             p(from) = [1 6] x_1 + [2]            
                       [0 1]       [0]            
              p(fst) = [1 4] x_1 + [1 5] x_2 + [0]
                       [0 1]       [0 1]       [0]
              p(len) = [1 0] x_1 + [6]            
                       [0 1]       [0]            
             p(mark) = [1 4] x_1 + [0]            
                       [0 1]       [0]            
              p(nil) = [0]                        
                       [0]                        
                p(s) = [2]                        
                       [0]                        
        
        Following rules are strictly oriented:
        mark(add(X1,X2)) = [1 4] X1 + [1 8] X2 + [4]
                           [0 1]      [0 1]      [1]
                         > [1 4] X1 + [1 8] X2 + [0]
                           [0 1]      [0 1]      [1]
                         = a__add(mark(X1),mark(X2))
        
        
        Following rules are (at-least) weakly oriented:
                 a__add(X1,X2) =  [1 0] X1 + [1 4] X2 + [0]
                                  [0 1]      [0 1]      [1]
                               >= [1 0] X1 + [1 4] X2 + [0]
                                  [0 1]      [0 1]      [1]
                               =  add(X1,X2)               
        
                 a__add(0(),X) =  [1 4] X + [1]            
                                  [0 1]     [1]            
                               >= [1 4] X + [0]            
                                  [0 1]     [0]            
                               =  mark(X)                  
        
                a__add(s(X),Y) =  [1 4] Y + [2]            
                                  [0 1]     [1]            
                               >= [2]                      
                                  [0]                      
                               =  s(add(X,Y))              
        
                    a__from(X) =  [1 6] X + [2]            
                                  [0 1]     [0]            
                               >= [1 5] X + [2]            
                                  [0 1]     [0]            
                               =  cons(mark(X),from(s(X))) 
        
                    a__from(X) =  [1 6] X + [2]            
                                  [0 1]     [0]            
                               >= [1 6] X + [2]            
                                  [0 1]     [0]            
                               =  from(X)                  
        
                 a__fst(X1,X2) =  [1 4] X1 + [1 5] X2 + [0]
                                  [0 1]      [0 1]      [0]
                               >= [1 4] X1 + [1 5] X2 + [0]
                                  [0 1]      [0 1]      [0]
                               =  fst(X1,X2)               
        
                 a__fst(0(),Z) =  [1 5] Z + [1]            
                                  [0 1]     [0]            
                               >= [0]                      
                                  [0]                      
                               =  nil()                    
        
        a__fst(s(X),cons(Y,Z)) =  [1 6] Y + [4]            
                                  [0 1]     [0]            
                               >= [1 5] Y + [2]            
                                  [0 1]     [0]            
                               =  cons(mark(Y),fst(X,Z))   
        
                     a__len(X) =  [1 0] X + [6]            
                                  [0 1]     [0]            
                               >= [1 0] X + [6]            
                                  [0 1]     [0]            
                               =  len(X)                   
        
             a__len(cons(X,Z)) =  [1 1] X + [8]            
                                  [0 1]     [0]            
                               >= [2]                      
                                  [0]                      
                               =  s(len(Z))                
        
                 a__len(nil()) =  [6]                      
                                  [0]                      
                               >= [1]                      
                                  [0]                      
                               =  0()                      
        
                     mark(0()) =  [1]                      
                                  [0]                      
                               >= [1]                      
                                  [0]                      
                               =  0()                      
        
             mark(cons(X1,X2)) =  [1 5] X1 + [2]           
                                  [0 1]      [0]           
                               >= [1 5] X1 + [2]           
                                  [0 1]      [0]           
                               =  cons(mark(X1),X2)        
        
                 mark(from(X)) =  [1 10] X + [2]           
                                  [0  1]     [0]           
                               >= [1 10] X + [2]           
                                  [0  1]     [0]           
                               =  a__from(mark(X))         
        
              mark(fst(X1,X2)) =  [1 8] X1 + [1 9] X2 + [0]
                                  [0 1]      [0 1]      [0]
                               >= [1 8] X1 + [1 9] X2 + [0]
                                  [0 1]      [0 1]      [0]
                               =  a__fst(mark(X1),mark(X2))
        
                  mark(len(X)) =  [1 4] X + [6]            
                                  [0 1]     [0]            
                               >= [1 4] X + [6]            
                                  [0 1]     [0]            
                               =  a__len(mark(X))          
        
                   mark(nil()) =  [0]                      
                                  [0]                      
                               >= [0]                      
                                  [0]                      
                               =  nil()                    
        
                    mark(s(X)) =  [2]                      
                                  [0]                      
                               >= [2]                      
                                  [0]                      
                               =  s(X)                     
        
** Step 1.b:10: MI WORST_CASE(?,O(n^2))
    + Considered Problem:
        - Strict TRS:
            mark(cons(X1,X2)) -> cons(mark(X1),X2)
            mark(from(X)) -> a__from(mark(X))
            mark(len(X)) -> a__len(mark(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(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(fst(X1,X2)) -> a__fst(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:
        MI {miKind = MaximalMatrix (UpperTriangular (Multiplicity Nothing)), miDimension = 2, miUArgs = UArgs, miURules = URules, miSelector = Just any strict-rules}
    + Details:
        We apply a matrix interpretation of kind MaximalMatrix (UpperTriangular (Multiplicity Nothing)):
        
        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]                        
                       [2]                        
           p(a__add) = [1 4] x_1 + [1 4] x_2 + [5]
                       [0 1]       [0 1]       [4]
          p(a__from) = [1 2] x_1 + [0]            
                       [0 1]       [0]            
           p(a__fst) = [1 1] x_1 + [1 2] x_2 + [1]
                       [0 1]       [0 1]       [0]
           p(a__len) = [1 1] x_1 + [0]            
                       [0 1]       [1]            
              p(add) = [1 4] x_1 + [1 4] x_2 + [0]
                       [0 1]       [0 1]       [4]
             p(cons) = [1 0] x_1 + [0]            
                       [0 1]       [0]            
             p(from) = [1 2] x_1 + [0]            
                       [0 1]       [0]            
              p(fst) = [1 1] x_1 + [1 2] x_2 + [1]
                       [0 1]       [0 1]       [0]
              p(len) = [1 1] x_1 + [0]            
                       [0 1]       [1]            
             p(mark) = [1 2] x_1 + [0]            
                       [0 1]       [0]            
              p(nil) = [0]                        
                       [1]                        
                p(s) = [0]                        
                       [0]                        
        
        Following rules are strictly oriented:
        mark(len(X)) = [1 3] X + [2]  
                       [0 1]     [1]  
                     > [1 3] X + [0]  
                       [0 1]     [1]  
                     = a__len(mark(X))
        
        
        Following rules are (at-least) weakly oriented:
                 a__add(X1,X2) =  [1 4] X1 + [1 4] X2 + [5]
                                  [0 1]      [0 1]      [4]
                               >= [1 4] X1 + [1 4] X2 + [0]
                                  [0 1]      [0 1]      [4]
                               =  add(X1,X2)               
        
                 a__add(0(),X) =  [1 4] X + [13]           
                                  [0 1]     [6]            
                               >= [1 2] X + [0]            
                                  [0 1]     [0]            
                               =  mark(X)                  
        
                a__add(s(X),Y) =  [1 4] Y + [5]            
                                  [0 1]     [4]            
                               >= [0]                      
                                  [0]                      
                               =  s(add(X,Y))              
        
                    a__from(X) =  [1 2] X + [0]            
                                  [0 1]     [0]            
                               >= [1 2] X + [0]            
                                  [0 1]     [0]            
                               =  cons(mark(X),from(s(X))) 
        
                    a__from(X) =  [1 2] X + [0]            
                                  [0 1]     [0]            
                               >= [1 2] X + [0]            
                                  [0 1]     [0]            
                               =  from(X)                  
        
                 a__fst(X1,X2) =  [1 1] X1 + [1 2] X2 + [1]
                                  [0 1]      [0 1]      [0]
                               >= [1 1] X1 + [1 2] X2 + [1]
                                  [0 1]      [0 1]      [0]
                               =  fst(X1,X2)               
        
                 a__fst(0(),Z) =  [1 2] Z + [3]            
                                  [0 1]     [2]            
                               >= [0]                      
                                  [1]                      
                               =  nil()                    
        
        a__fst(s(X),cons(Y,Z)) =  [1 2] Y + [1]            
                                  [0 1]     [0]            
                               >= [1 2] Y + [0]            
                                  [0 1]     [0]            
                               =  cons(mark(Y),fst(X,Z))   
        
                     a__len(X) =  [1 1] X + [0]            
                                  [0 1]     [1]            
                               >= [1 1] X + [0]            
                                  [0 1]     [1]            
                               =  len(X)                   
        
             a__len(cons(X,Z)) =  [1 1] X + [0]            
                                  [0 1]     [1]            
                               >= [0]                      
                                  [0]                      
                               =  s(len(Z))                
        
                 a__len(nil()) =  [1]                      
                                  [2]                      
                               >= [0]                      
                                  [2]                      
                               =  0()                      
        
                     mark(0()) =  [4]                      
                                  [2]                      
                               >= [0]                      
                                  [2]                      
                               =  0()                      
        
              mark(add(X1,X2)) =  [1 6] X1 + [1 6] X2 + [8]
                                  [0 1]      [0 1]      [4]
                               >= [1 6] X1 + [1 6] X2 + [5]
                                  [0 1]      [0 1]      [4]
                               =  a__add(mark(X1),mark(X2))
        
             mark(cons(X1,X2)) =  [1 2] X1 + [0]           
                                  [0 1]      [0]           
                               >= [1 2] X1 + [0]           
                                  [0 1]      [0]           
                               =  cons(mark(X1),X2)        
        
                 mark(from(X)) =  [1 4] X + [0]            
                                  [0 1]     [0]            
                               >= [1 4] X + [0]            
                                  [0 1]     [0]            
                               =  a__from(mark(X))         
        
              mark(fst(X1,X2)) =  [1 3] X1 + [1 4] X2 + [1]
                                  [0 1]      [0 1]      [0]
                               >= [1 3] X1 + [1 4] X2 + [1]
                                  [0 1]      [0 1]      [0]
                               =  a__fst(mark(X1),mark(X2))
        
                   mark(nil()) =  [2]                      
                                  [1]                      
                               >= [0]                      
                                  [1]                      
                               =  nil()                    
        
                    mark(s(X)) =  [0]                      
                                  [0]                      
                               >= [0]                      
                                  [0]                      
                               =  s(X)                     
        
** Step 1.b:11: MI WORST_CASE(?,O(n^2))
    + Considered Problem:
        - Strict TRS:
            mark(cons(X1,X2)) -> cons(mark(X1),X2)
            mark(from(X)) -> a__from(mark(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(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(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:
        MI {miKind = MaximalMatrix (UpperTriangular (Multiplicity Nothing)), miDimension = 2, miUArgs = UArgs, miURules = URules, miSelector = Just any strict-rules}
    + Details:
        We apply a matrix interpretation of kind MaximalMatrix (UpperTriangular (Multiplicity Nothing)):
        
        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]                        
           p(a__add) = [1 0] x_1 + [1 4] x_2 + [1]
                       [0 1]       [0 1]       [0]
          p(a__from) = [1 4] x_1 + [1]            
                       [0 1]       [1]            
           p(a__fst) = [1 4] x_1 + [1 4] x_2 + [0]
                       [0 1]       [0 1]       [0]
           p(a__len) = [1 4] x_1 + [3]            
                       [0 1]       [1]            
              p(add) = [1 0] x_1 + [1 4] x_2 + [1]
                       [0 1]       [0 1]       [0]
             p(cons) = [1 0] x_1 + [0]            
                       [0 1]       [0]            
             p(from) = [1 4] x_1 + [0]            
                       [0 1]       [1]            
              p(fst) = [1 4] x_1 + [1 4] x_2 + [0]
                       [0 1]       [0 1]       [0]
              p(len) = [1 4] x_1 + [0]            
                       [0 1]       [1]            
             p(mark) = [1 4] x_1 + [0]            
                       [0 1]       [0]            
              p(nil) = [1]                        
                       [0]                        
                p(s) = [3]                        
                       [0]                        
        
        Following rules are strictly oriented:
        mark(from(X)) = [1 8] X + [4]   
                        [0 1]     [1]   
                      > [1 8] X + [1]   
                        [0 1]     [1]   
                      = a__from(mark(X))
        
        
        Following rules are (at-least) weakly oriented:
                 a__add(X1,X2) =  [1 0] X1 + [1 4] X2 + [1]
                                  [0 1]      [0 1]      [0]
                               >= [1 0] X1 + [1 4] X2 + [1]
                                  [0 1]      [0 1]      [0]
                               =  add(X1,X2)               
        
                 a__add(0(),X) =  [1 4] X + [2]            
                                  [0 1]     [0]            
                               >= [1 4] X + [0]            
                                  [0 1]     [0]            
                               =  mark(X)                  
        
                a__add(s(X),Y) =  [1 4] Y + [4]            
                                  [0 1]     [0]            
                               >= [3]                      
                                  [0]                      
                               =  s(add(X,Y))              
        
                    a__from(X) =  [1 4] X + [1]            
                                  [0 1]     [1]            
                               >= [1 4] X + [0]            
                                  [0 1]     [0]            
                               =  cons(mark(X),from(s(X))) 
        
                    a__from(X) =  [1 4] X + [1]            
                                  [0 1]     [1]            
                               >= [1 4] X + [0]            
                                  [0 1]     [1]            
                               =  from(X)                  
        
                 a__fst(X1,X2) =  [1 4] X1 + [1 4] X2 + [0]
                                  [0 1]      [0 1]      [0]
                               >= [1 4] X1 + [1 4] X2 + [0]
                                  [0 1]      [0 1]      [0]
                               =  fst(X1,X2)               
        
                 a__fst(0(),Z) =  [1 4] Z + [1]            
                                  [0 1]     [0]            
                               >= [1]                      
                                  [0]                      
                               =  nil()                    
        
        a__fst(s(X),cons(Y,Z)) =  [1 4] Y + [3]            
                                  [0 1]     [0]            
                               >= [1 4] Y + [0]            
                                  [0 1]     [0]            
                               =  cons(mark(Y),fst(X,Z))   
        
                     a__len(X) =  [1 4] X + [3]            
                                  [0 1]     [1]            
                               >= [1 4] X + [0]            
                                  [0 1]     [1]            
                               =  len(X)                   
        
             a__len(cons(X,Z)) =  [1 4] X + [3]            
                                  [0 1]     [1]            
                               >= [3]                      
                                  [0]                      
                               =  s(len(Z))                
        
                 a__len(nil()) =  [4]                      
                                  [1]                      
                               >= [1]                      
                                  [0]                      
                               =  0()                      
        
                     mark(0()) =  [1]                      
                                  [0]                      
                               >= [1]                      
                                  [0]                      
                               =  0()                      
        
              mark(add(X1,X2)) =  [1 4] X1 + [1 8] X2 + [1]
                                  [0 1]      [0 1]      [0]
                               >= [1 4] X1 + [1 8] X2 + [1]
                                  [0 1]      [0 1]      [0]
                               =  a__add(mark(X1),mark(X2))
        
             mark(cons(X1,X2)) =  [1 4] X1 + [0]           
                                  [0 1]      [0]           
                               >= [1 4] X1 + [0]           
                                  [0 1]      [0]           
                               =  cons(mark(X1),X2)        
        
              mark(fst(X1,X2)) =  [1 8] X1 + [1 8] X2 + [0]
                                  [0 1]      [0 1]      [0]
                               >= [1 8] X1 + [1 8] X2 + [0]
                                  [0 1]      [0 1]      [0]
                               =  a__fst(mark(X1),mark(X2))
        
                  mark(len(X)) =  [1 8] X + [4]            
                                  [0 1]     [1]            
                               >= [1 8] X + [3]            
                                  [0 1]     [1]            
                               =  a__len(mark(X))          
        
                   mark(nil()) =  [1]                      
                                  [0]                      
                               >= [1]                      
                                  [0]                      
                               =  nil()                    
        
                    mark(s(X)) =  [3]                      
                                  [0]                      
                               >= [3]                      
                                  [0]                      
                               =  s(X)                     
        
** Step 1.b:12: MI WORST_CASE(?,O(n^2))
    + Considered Problem:
        - Strict TRS:
            mark(cons(X1,X2)) -> cons(mark(X1),X2)
        - 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(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:
        MI {miKind = MaximalMatrix (UpperTriangular (Multiplicity Nothing)), miDimension = 2, miUArgs = UArgs, miURules = URules, miSelector = Just any strict-rules}
    + Details:
        We apply a matrix interpretation of kind MaximalMatrix (UpperTriangular (Multiplicity Nothing)):
        
        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) = [6]                        
                       [1]                        
           p(a__add) = [1 0] x_1 + [1 5] x_2 + [0]
                       [0 1]       [0 1]       [0]
          p(a__from) = [1 4] x_1 + [1]            
                       [0 1]       [2]            
           p(a__fst) = [1 2] x_1 + [1 6] x_2 + [0]
                       [0 1]       [0 1]       [3]
           p(a__len) = [1 0] x_1 + [5]            
                       [0 1]       [1]            
              p(add) = [1 0] x_1 + [1 5] x_2 + [0]
                       [0 1]       [0 1]       [0]
             p(cons) = [1 0] x_1 + [0]            
                       [0 1]       [2]            
             p(from) = [1 4] x_1 + [1]            
                       [0 1]       [2]            
              p(fst) = [1 2] x_1 + [1 6] x_2 + [0]
                       [0 1]       [0 1]       [3]
              p(len) = [1 0] x_1 + [5]            
                       [0 1]       [1]            
             p(mark) = [1 4] x_1 + [0]            
                       [0 1]       [0]            
              p(nil) = [4]                        
                       [0]                        
                p(s) = [0]                        
                       [1]                        
        
        Following rules are strictly oriented:
        mark(cons(X1,X2)) = [1 4] X1 + [8]   
                            [0 1]      [2]   
                          > [1 4] X1 + [0]   
                            [0 1]      [2]   
                          = cons(mark(X1),X2)
        
        
        Following rules are (at-least) weakly oriented:
                 a__add(X1,X2) =  [1 0] X1 + [1 5] X2 + [0]  
                                  [0 1]      [0 1]      [0]  
                               >= [1 0] X1 + [1 5] X2 + [0]  
                                  [0 1]      [0 1]      [0]  
                               =  add(X1,X2)                 
        
                 a__add(0(),X) =  [1 5] X + [6]              
                                  [0 1]     [1]              
                               >= [1 4] X + [0]              
                                  [0 1]     [0]              
                               =  mark(X)                    
        
                a__add(s(X),Y) =  [1 5] Y + [0]              
                                  [0 1]     [1]              
                               >= [0]                        
                                  [1]                        
                               =  s(add(X,Y))                
        
                    a__from(X) =  [1 4] X + [1]              
                                  [0 1]     [2]              
                               >= [1 4] X + [0]              
                                  [0 1]     [2]              
                               =  cons(mark(X),from(s(X)))   
        
                    a__from(X) =  [1 4] X + [1]              
                                  [0 1]     [2]              
                               >= [1 4] X + [1]              
                                  [0 1]     [2]              
                               =  from(X)                    
        
                 a__fst(X1,X2) =  [1 2] X1 + [1 6] X2 + [0]  
                                  [0 1]      [0 1]      [3]  
                               >= [1 2] X1 + [1 6] X2 + [0]  
                                  [0 1]      [0 1]      [3]  
                               =  fst(X1,X2)                 
        
                 a__fst(0(),Z) =  [1 6] Z + [8]              
                                  [0 1]     [4]              
                               >= [4]                        
                                  [0]                        
                               =  nil()                      
        
        a__fst(s(X),cons(Y,Z)) =  [1 6] Y + [14]             
                                  [0 1]     [6]              
                               >= [1 4] Y + [0]              
                                  [0 1]     [2]              
                               =  cons(mark(Y),fst(X,Z))     
        
                     a__len(X) =  [1 0] X + [5]              
                                  [0 1]     [1]              
                               >= [1 0] X + [5]              
                                  [0 1]     [1]              
                               =  len(X)                     
        
             a__len(cons(X,Z)) =  [1 0] X + [5]              
                                  [0 1]     [3]              
                               >= [0]                        
                                  [1]                        
                               =  s(len(Z))                  
        
                 a__len(nil()) =  [9]                        
                                  [1]                        
                               >= [6]                        
                                  [1]                        
                               =  0()                        
        
                     mark(0()) =  [10]                       
                                  [1]                        
                               >= [6]                        
                                  [1]                        
                               =  0()                        
        
              mark(add(X1,X2)) =  [1 4] X1 + [1 9] X2 + [0]  
                                  [0 1]      [0 1]      [0]  
                               >= [1 4] X1 + [1 9] X2 + [0]  
                                  [0 1]      [0 1]      [0]  
                               =  a__add(mark(X1),mark(X2))  
        
                 mark(from(X)) =  [1 8] X + [9]              
                                  [0 1]     [2]              
                               >= [1 8] X + [1]              
                                  [0 1]     [2]              
                               =  a__from(mark(X))           
        
              mark(fst(X1,X2)) =  [1 6] X1 + [1 10] X2 + [12]
                                  [0 1]      [0  1]      [3] 
                               >= [1 6] X1 + [1 10] X2 + [0] 
                                  [0 1]      [0  1]      [3] 
                               =  a__fst(mark(X1),mark(X2))  
        
                  mark(len(X)) =  [1 4] X + [9]              
                                  [0 1]     [1]              
                               >= [1 4] X + [5]              
                                  [0 1]     [1]              
                               =  a__len(mark(X))            
        
                   mark(nil()) =  [4]                        
                                  [0]                        
                               >= [4]                        
                                  [0]                        
                               =  nil()                      
        
                    mark(s(X)) =  [4]                        
                                  [1]                        
                               >= [0]                        
                                  [1]                        
                               =  s(X)                       
        
** Step 1.b:13: 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^2))