* Step 1: WeightGap WORST_CASE(?,O(n^3))
    + Considered Problem:
        - Strict TRS:
            eq(0(),0()) -> true()
            eq(0(),s(X)) -> false()
            eq(s(X),0()) -> false()
            eq(s(X),s(Y)) -> eq(X,Y)
            ifrm(false(),N,add(M,X)) -> add(M,rm(N,X))
            ifrm(true(),N,add(M,X)) -> rm(N,X)
            purge(add(N,X)) -> add(N,purge(rm(N,X)))
            purge(nil()) -> nil()
            rm(N,add(M,X)) -> ifrm(eq(N,M),N,add(M,X))
            rm(N,nil()) -> nil()
        - Signature:
            {eq/2,ifrm/3,purge/1,rm/2} / {0/0,add/2,false/0,nil/0,s/1,true/0}
        - Obligation:
             runtime complexity wrt. defined symbols {eq,ifrm,purge,rm} and constructors {0,add,false,nil,s,true}
    + 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(add) = {2},
            uargs(ifrm) = {1,3},
            uargs(purge) = {1},
            uargs(rm) = {2}
          
          Following symbols are considered usable:
            all
          TcT has computed the following interpretation:
                p(0) = [0]                  
              p(add) = [1] x1 + [1] x2 + [0]
               p(eq) = [5]                  
            p(false) = [0]                  
             p(ifrm) = [1] x1 + [1] x3 + [5]
              p(nil) = [0]                  
            p(purge) = [1] x1 + [5]         
               p(rm) = [1] x2 + [3]         
                p(s) = [1] x1 + [0]         
             p(true) = [0]                  
          
          Following rules are strictly oriented:
                       eq(0(),0()) = [5]                
                                   > [0]                
                                   = true()             
          
                      eq(0(),s(X)) = [5]                
                                   > [0]                
                                   = false()            
          
                      eq(s(X),0()) = [5]                
                                   > [0]                
                                   = false()            
          
          ifrm(false(),N,add(M,X)) = [1] M + [1] X + [5]
                                   > [1] M + [1] X + [3]
                                   = add(M,rm(N,X))     
          
           ifrm(true(),N,add(M,X)) = [1] M + [1] X + [5]
                                   > [1] X + [3]        
                                   = rm(N,X)            
          
                      purge(nil()) = [5]                
                                   > [0]                
                                   = nil()              
          
                       rm(N,nil()) = [3]                
                                   > [0]                
                                   = nil()              
          
          
          Following rules are (at-least) weakly oriented:
            eq(s(X),s(Y)) =  [5]                     
                          >= [5]                     
                          =  eq(X,Y)                 
          
          purge(add(N,X)) =  [1] N + [1] X + [5]     
                          >= [1] N + [1] X + [8]     
                          =  add(N,purge(rm(N,X)))   
          
           rm(N,add(M,X)) =  [1] M + [1] X + [3]     
                          >= [1] M + [1] X + [10]    
                          =  ifrm(eq(N,M),N,add(M,X))
          
        Further, it can be verified that all rules not oriented are covered by the weightgap condition.
* Step 2: MI WORST_CASE(?,O(n^3))
    + Considered Problem:
        - Strict TRS:
            eq(s(X),s(Y)) -> eq(X,Y)
            purge(add(N,X)) -> add(N,purge(rm(N,X)))
            rm(N,add(M,X)) -> ifrm(eq(N,M),N,add(M,X))
        - Weak TRS:
            eq(0(),0()) -> true()
            eq(0(),s(X)) -> false()
            eq(s(X),0()) -> false()
            ifrm(false(),N,add(M,X)) -> add(M,rm(N,X))
            ifrm(true(),N,add(M,X)) -> rm(N,X)
            purge(nil()) -> nil()
            rm(N,nil()) -> nil()
        - Signature:
            {eq/2,ifrm/3,purge/1,rm/2} / {0/0,add/2,false/0,nil/0,s/1,true/0}
        - Obligation:
             runtime complexity wrt. defined symbols {eq,ifrm,purge,rm} and constructors {0,add,false,nil,s,true}
    + Applied Processor:
        MI {miKind = MaximalMatrix (UpperTriangular (Multiplicity Nothing)), miDimension = 1, 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(add) = {2},
          uargs(ifrm) = {1,3},
          uargs(purge) = {1},
          uargs(rm) = {2}
        
        Following symbols are considered usable:
          all
        TcT has computed the following interpretation:
              p(0) = [1]                    
            p(add) = [1] x_1 + [1] x_2 + [3]
             p(eq) = [0]                    
          p(false) = [0]                    
           p(ifrm) = [8] x_1 + [1] x_3 + [1]
            p(nil) = [0]                    
          p(purge) = [2] x_1 + [0]          
             p(rm) = [1] x_2 + [1]          
              p(s) = [4]                    
           p(true) = [0]                    
        
        Following rules are strictly oriented:
        purge(add(N,X)) = [2] N + [2] X + [6]  
                        > [1] N + [2] X + [5]  
                        = add(N,purge(rm(N,X)))
        
        
        Following rules are (at-least) weakly oriented:
                     eq(0(),0()) =  [0]                     
                                 >= [0]                     
                                 =  true()                  
        
                    eq(0(),s(X)) =  [0]                     
                                 >= [0]                     
                                 =  false()                 
        
                    eq(s(X),0()) =  [0]                     
                                 >= [0]                     
                                 =  false()                 
        
                   eq(s(X),s(Y)) =  [0]                     
                                 >= [0]                     
                                 =  eq(X,Y)                 
        
        ifrm(false(),N,add(M,X)) =  [1] M + [1] X + [4]     
                                 >= [1] M + [1] X + [4]     
                                 =  add(M,rm(N,X))          
        
         ifrm(true(),N,add(M,X)) =  [1] M + [1] X + [4]     
                                 >= [1] X + [1]             
                                 =  rm(N,X)                 
        
                    purge(nil()) =  [0]                     
                                 >= [0]                     
                                 =  nil()                   
        
                  rm(N,add(M,X)) =  [1] M + [1] X + [4]     
                                 >= [1] M + [1] X + [4]     
                                 =  ifrm(eq(N,M),N,add(M,X))
        
                     rm(N,nil()) =  [1]                     
                                 >= [0]                     
                                 =  nil()                   
        
* Step 3: MI WORST_CASE(?,O(n^3))
    + Considered Problem:
        - Strict TRS:
            eq(s(X),s(Y)) -> eq(X,Y)
            rm(N,add(M,X)) -> ifrm(eq(N,M),N,add(M,X))
        - Weak TRS:
            eq(0(),0()) -> true()
            eq(0(),s(X)) -> false()
            eq(s(X),0()) -> false()
            ifrm(false(),N,add(M,X)) -> add(M,rm(N,X))
            ifrm(true(),N,add(M,X)) -> rm(N,X)
            purge(add(N,X)) -> add(N,purge(rm(N,X)))
            purge(nil()) -> nil()
            rm(N,nil()) -> nil()
        - Signature:
            {eq/2,ifrm/3,purge/1,rm/2} / {0/0,add/2,false/0,nil/0,s/1,true/0}
        - Obligation:
             runtime complexity wrt. defined symbols {eq,ifrm,purge,rm} and constructors {0,add,false,nil,s,true}
    + 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(add) = {2},
          uargs(ifrm) = {1,3},
          uargs(purge) = {1},
          uargs(rm) = {2}
        
        Following symbols are considered usable:
          all
        TcT has computed the following interpretation:
              p(0) = [0]                        
                     [0]                        
            p(add) = [1 4] x_2 + [0]            
                     [0 1]       [2]            
             p(eq) = [0]                        
                     [2]                        
          p(false) = [0]                        
                     [2]                        
           p(ifrm) = [2 1] x_1 + [1 2] x_3 + [0]
                     [0 0]       [0 1]       [0]
            p(nil) = [0]                        
                     [0]                        
          p(purge) = [2 4] x_1 + [4]            
                     [0 1]       [0]            
             p(rm) = [1 2] x_2 + [3]            
                     [0 1]       [0]            
              p(s) = [1 0] x_1 + [0]            
                     [0 1]       [0]            
           p(true) = [0]                        
                     [2]                        
        
        Following rules are strictly oriented:
        rm(N,add(M,X)) = [1 6] X + [7]           
                         [0 1]     [2]           
                       > [1 6] X + [6]           
                         [0 1]     [2]           
                       = ifrm(eq(N,M),N,add(M,X))
        
        
        Following rules are (at-least) weakly oriented:
                     eq(0(),0()) =  [0]                  
                                    [2]                  
                                 >= [0]                  
                                    [2]                  
                                 =  true()               
        
                    eq(0(),s(X)) =  [0]                  
                                    [2]                  
                                 >= [0]                  
                                    [2]                  
                                 =  false()              
        
                    eq(s(X),0()) =  [0]                  
                                    [2]                  
                                 >= [0]                  
                                    [2]                  
                                 =  false()              
        
                   eq(s(X),s(Y)) =  [0]                  
                                    [2]                  
                                 >= [0]                  
                                    [2]                  
                                 =  eq(X,Y)              
        
        ifrm(false(),N,add(M,X)) =  [1 6] X + [6]        
                                    [0 1]     [2]        
                                 >= [1 6] X + [3]        
                                    [0 1]     [2]        
                                 =  add(M,rm(N,X))       
        
         ifrm(true(),N,add(M,X)) =  [1 6] X + [6]        
                                    [0 1]     [2]        
                                 >= [1 2] X + [3]        
                                    [0 1]     [0]        
                                 =  rm(N,X)              
        
                 purge(add(N,X)) =  [2 12] X + [12]      
                                    [0  1]     [2]       
                                 >= [2 12] X + [10]      
                                    [0  1]     [2]       
                                 =  add(N,purge(rm(N,X)))
        
                    purge(nil()) =  [4]                  
                                    [0]                  
                                 >= [0]                  
                                    [0]                  
                                 =  nil()                
        
                     rm(N,nil()) =  [3]                  
                                    [0]                  
                                 >= [0]                  
                                    [0]                  
                                 =  nil()                
        
* Step 4: MI WORST_CASE(?,O(n^3))
    + Considered Problem:
        - Strict TRS:
            eq(s(X),s(Y)) -> eq(X,Y)
        - Weak TRS:
            eq(0(),0()) -> true()
            eq(0(),s(X)) -> false()
            eq(s(X),0()) -> false()
            ifrm(false(),N,add(M,X)) -> add(M,rm(N,X))
            ifrm(true(),N,add(M,X)) -> rm(N,X)
            purge(add(N,X)) -> add(N,purge(rm(N,X)))
            purge(nil()) -> nil()
            rm(N,add(M,X)) -> ifrm(eq(N,M),N,add(M,X))
            rm(N,nil()) -> nil()
        - Signature:
            {eq/2,ifrm/3,purge/1,rm/2} / {0/0,add/2,false/0,nil/0,s/1,true/0}
        - Obligation:
             runtime complexity wrt. defined symbols {eq,ifrm,purge,rm} and constructors {0,add,false,nil,s,true}
    + Applied Processor:
        MI {miKind = MaximalMatrix (UpperTriangular (Multiplicity (Just 3))), miDimension = 4, miUArgs = UArgs, miURules = URules, miSelector = Just any strict-rules}
    + Details:
        We apply a matrix interpretation of kind MaximalMatrix (UpperTriangular (Multiplicity (Just 3))):
        
        The following argument positions are considered usable:
          uargs(add) = {2},
          uargs(ifrm) = {1,3},
          uargs(purge) = {1},
          uargs(rm) = {2}
        
        Following symbols are considered usable:
          all
        TcT has computed the following interpretation:
              p(0) = [0]                                                
                     [1]                                                
                     [0]                                                
                     [1]                                                
            p(add) = [0 0 0 0]       [1 0 2 0]       [0]                
                     [0 0 0 0] x_1 + [0 0 1 0] x_2 + [0]                
                     [0 0 0 1]       [0 0 1 0]       [1]                
                     [0 0 0 0]       [0 0 0 0]       [0]                
             p(eq) = [0 0 0 0]       [0 0 0 1]       [1]                
                     [1 1 1 1] x_1 + [0 0 0 1] x_2 + [0]                
                     [0 0 0 0]       [0 0 0 0]       [0]                
                     [1 1 0 2]       [0 0 0 0]       [2]                
          p(false) = [0]                                                
                     [0]                                                
                     [0]                                                
                     [0]                                                
           p(ifrm) = [1 0 0 0]       [0 0 0 0]       [1 1 0 0]       [0]
                     [0 0 0 0] x_1 + [0 0 2 0] x_2 + [1 0 0 0] x_3 + [2]
                     [0 0 0 0]       [0 0 0 0]       [0 0 1 0]       [0]
                     [0 0 0 0]       [0 0 0 0]       [0 0 0 0]       [2]
            p(nil) = [2]                                                
                     [0]                                                
                     [0]                                                
                     [2]                                                
          p(purge) = [2 0 0 0]       [0]                                
                     [0 1 0 0] x_1 + [0]                                
                     [0 0 1 0]       [0]                                
                     [2 0 0 0]       [0]                                
             p(rm) = [0 0 0 0]       [1 0 1 0]       [0]                
                     [0 0 2 0] x_1 + [1 0 0 0] x_2 + [2]                
                     [0 0 0 0]       [0 0 1 0]       [0]                
                     [0 0 0 0]       [0 0 0 0]       [2]                
              p(s) = [1 1 2 0]       [0]                                
                     [0 0 0 0] x_1 + [2]                                
                     [0 0 0 0]       [3]                                
                     [0 0 0 1]       [1]                                
           p(true) = [0]                                                
                     [3]                                                
                     [0]                                                
                     [1]                                                
        
        Following rules are strictly oriented:
        eq(s(X),s(Y)) = [0 0 0 0]     [0 0 0 1]     [2]
                        [1 1 2 1] X + [0 0 0 1] Y + [7]
                        [0 0 0 0]     [0 0 0 0]     [0]
                        [1 1 2 2]     [0 0 0 0]     [6]
                      > [0 0 0 0]     [0 0 0 1]     [1]
                        [1 1 1 1] X + [0 0 0 1] Y + [0]
                        [0 0 0 0]     [0 0 0 0]     [0]
                        [1 1 0 2]     [0 0 0 0]     [2]
                      = eq(X,Y)                        
        
        
        Following rules are (at-least) weakly oriented:
                     eq(0(),0()) =  [2]                                          
                                    [3]                                          
                                    [0]                                          
                                    [5]                                          
                                 >= [0]                                          
                                    [3]                                          
                                    [0]                                          
                                    [1]                                          
                                 =  true()                                       
        
                    eq(0(),s(X)) =  [0 0 0 1]     [2]                            
                                    [0 0 0 1] X + [3]                            
                                    [0 0 0 0]     [0]                            
                                    [0 0 0 0]     [5]                            
                                 >= [0]                                          
                                    [0]                                          
                                    [0]                                          
                                    [0]                                          
                                 =  false()                                      
        
                    eq(s(X),0()) =  [0 0 0 0]     [2]                            
                                    [1 1 2 1] X + [7]                            
                                    [0 0 0 0]     [0]                            
                                    [1 1 2 2]     [6]                            
                                 >= [0]                                          
                                    [0]                                          
                                    [0]                                          
                                    [0]                                          
                                 =  false()                                      
        
        ifrm(false(),N,add(M,X)) =  [0 0 0 0]     [0 0 0 0]     [1 0 3 0]     [0]
                                    [0 0 0 0] M + [0 0 2 0] N + [1 0 2 0] X + [2]
                                    [0 0 0 1]     [0 0 0 0]     [0 0 1 0]     [1]
                                    [0 0 0 0]     [0 0 0 0]     [0 0 0 0]     [2]
                                 >= [0 0 0 0]     [1 0 3 0]     [0]              
                                    [0 0 0 0] M + [0 0 1 0] X + [0]              
                                    [0 0 0 1]     [0 0 1 0]     [1]              
                                    [0 0 0 0]     [0 0 0 0]     [0]              
                                 =  add(M,rm(N,X))                               
        
         ifrm(true(),N,add(M,X)) =  [0 0 0 0]     [0 0 0 0]     [1 0 3 0]     [0]
                                    [0 0 0 0] M + [0 0 2 0] N + [1 0 2 0] X + [2]
                                    [0 0 0 1]     [0 0 0 0]     [0 0 1 0]     [1]
                                    [0 0 0 0]     [0 0 0 0]     [0 0 0 0]     [2]
                                 >= [0 0 0 0]     [1 0 1 0]     [0]              
                                    [0 0 2 0] N + [1 0 0 0] X + [2]              
                                    [0 0 0 0]     [0 0 1 0]     [0]              
                                    [0 0 0 0]     [0 0 0 0]     [2]              
                                 =  rm(N,X)                                      
        
                 purge(add(N,X)) =  [0 0 0 0]     [2 0 4 0]     [0]              
                                    [0 0 0 0] N + [0 0 1 0] X + [0]              
                                    [0 0 0 1]     [0 0 1 0]     [1]              
                                    [0 0 0 0]     [2 0 4 0]     [0]              
                                 >= [0 0 0 0]     [2 0 4 0]     [0]              
                                    [0 0 0 0] N + [0 0 1 0] X + [0]              
                                    [0 0 0 1]     [0 0 1 0]     [1]              
                                    [0 0 0 0]     [0 0 0 0]     [0]              
                                 =  add(N,purge(rm(N,X)))                        
        
                    purge(nil()) =  [4]                                          
                                    [0]                                          
                                    [0]                                          
                                    [4]                                          
                                 >= [2]                                          
                                    [0]                                          
                                    [0]                                          
                                    [2]                                          
                                 =  nil()                                        
        
                  rm(N,add(M,X)) =  [0 0 0 1]     [0 0 0 0]     [1 0 3 0]     [1]
                                    [0 0 0 0] M + [0 0 2 0] N + [1 0 2 0] X + [2]
                                    [0 0 0 1]     [0 0 0 0]     [0 0 1 0]     [1]
                                    [0 0 0 0]     [0 0 0 0]     [0 0 0 0]     [2]
                                 >= [0 0 0 1]     [0 0 0 0]     [1 0 3 0]     [1]
                                    [0 0 0 0] M + [0 0 2 0] N + [1 0 2 0] X + [2]
                                    [0 0 0 1]     [0 0 0 0]     [0 0 1 0]     [1]
                                    [0 0 0 0]     [0 0 0 0]     [0 0 0 0]     [2]
                                 =  ifrm(eq(N,M),N,add(M,X))                     
        
                     rm(N,nil()) =  [0 0 0 0]     [2]                            
                                    [0 0 2 0] N + [4]                            
                                    [0 0 0 0]     [0]                            
                                    [0 0 0 0]     [2]                            
                                 >= [2]                                          
                                    [0]                                          
                                    [0]                                          
                                    [2]                                          
                                 =  nil()                                        
        
* Step 5: EmptyProcessor WORST_CASE(?,O(1))
    + Considered Problem:
        - Weak TRS:
            eq(0(),0()) -> true()
            eq(0(),s(X)) -> false()
            eq(s(X),0()) -> false()
            eq(s(X),s(Y)) -> eq(X,Y)
            ifrm(false(),N,add(M,X)) -> add(M,rm(N,X))
            ifrm(true(),N,add(M,X)) -> rm(N,X)
            purge(add(N,X)) -> add(N,purge(rm(N,X)))
            purge(nil()) -> nil()
            rm(N,add(M,X)) -> ifrm(eq(N,M),N,add(M,X))
            rm(N,nil()) -> nil()
        - Signature:
            {eq/2,ifrm/3,purge/1,rm/2} / {0/0,add/2,false/0,nil/0,s/1,true/0}
        - Obligation:
             runtime complexity wrt. defined symbols {eq,ifrm,purge,rm} and constructors {0,add,false,nil,s,true}
    + Applied Processor:
        EmptyProcessor
    + Details:
        The problem is already closed. The intended complexity is O(1).

WORST_CASE(?,O(n^3))