We are left with following problem, upon which TcT provides the
certificate YES(O(1),O(n^3)).

Strict Trs:
  { mul0(Cons(x, xs), y) -> add0(mul0(xs, y), y)
  , mul0(Nil(), y) -> Nil()
  , add0(Cons(x, xs), y) -> add0(xs, Cons(S(), y))
  , add0(Nil(), y) -> y
  , goal(xs, ys) -> mul0(xs, ys) }
Obligation:
  innermost runtime complexity
Answer:
  YES(O(1),O(n^3))

We add the following dependency tuples:

Strict DPs:
  { mul0^#(Cons(x, xs), y) ->
    c_1(add0^#(mul0(xs, y), y), mul0^#(xs, y))
  , mul0^#(Nil(), y) -> c_2()
  , add0^#(Cons(x, xs), y) -> c_3(add0^#(xs, Cons(S(), y)))
  , add0^#(Nil(), y) -> c_4()
  , goal^#(xs, ys) -> c_5(mul0^#(xs, ys)) }

and mark the set of starting terms.

We are left with following problem, upon which TcT provides the
certificate YES(O(1),O(n^3)).

Strict DPs:
  { mul0^#(Cons(x, xs), y) ->
    c_1(add0^#(mul0(xs, y), y), mul0^#(xs, y))
  , mul0^#(Nil(), y) -> c_2()
  , add0^#(Cons(x, xs), y) -> c_3(add0^#(xs, Cons(S(), y)))
  , add0^#(Nil(), y) -> c_4()
  , goal^#(xs, ys) -> c_5(mul0^#(xs, ys)) }
Weak Trs:
  { mul0(Cons(x, xs), y) -> add0(mul0(xs, y), y)
  , mul0(Nil(), y) -> Nil()
  , add0(Cons(x, xs), y) -> add0(xs, Cons(S(), y))
  , add0(Nil(), y) -> y
  , goal(xs, ys) -> mul0(xs, ys) }
Obligation:
  innermost runtime complexity
Answer:
  YES(O(1),O(n^3))

We estimate the number of application of {2,4} by applications of
Pre({2,4}) = {1,3,5}. Here rules are labeled as follows:

  DPs:
    { 1: mul0^#(Cons(x, xs), y) ->
         c_1(add0^#(mul0(xs, y), y), mul0^#(xs, y))
    , 2: mul0^#(Nil(), y) -> c_2()
    , 3: add0^#(Cons(x, xs), y) -> c_3(add0^#(xs, Cons(S(), y)))
    , 4: add0^#(Nil(), y) -> c_4()
    , 5: goal^#(xs, ys) -> c_5(mul0^#(xs, ys)) }

We are left with following problem, upon which TcT provides the
certificate YES(O(1),O(n^3)).

Strict DPs:
  { mul0^#(Cons(x, xs), y) ->
    c_1(add0^#(mul0(xs, y), y), mul0^#(xs, y))
  , add0^#(Cons(x, xs), y) -> c_3(add0^#(xs, Cons(S(), y)))
  , goal^#(xs, ys) -> c_5(mul0^#(xs, ys)) }
Weak DPs:
  { mul0^#(Nil(), y) -> c_2()
  , add0^#(Nil(), y) -> c_4() }
Weak Trs:
  { mul0(Cons(x, xs), y) -> add0(mul0(xs, y), y)
  , mul0(Nil(), y) -> Nil()
  , add0(Cons(x, xs), y) -> add0(xs, Cons(S(), y))
  , add0(Nil(), y) -> y
  , goal(xs, ys) -> mul0(xs, ys) }
Obligation:
  innermost runtime complexity
Answer:
  YES(O(1),O(n^3))

The following weak DPs constitute a sub-graph of the DG that is
closed under successors. The DPs are removed.

{ mul0^#(Nil(), y) -> c_2()
, add0^#(Nil(), y) -> c_4() }

We are left with following problem, upon which TcT provides the
certificate YES(O(1),O(n^3)).

Strict DPs:
  { mul0^#(Cons(x, xs), y) ->
    c_1(add0^#(mul0(xs, y), y), mul0^#(xs, y))
  , add0^#(Cons(x, xs), y) -> c_3(add0^#(xs, Cons(S(), y)))
  , goal^#(xs, ys) -> c_5(mul0^#(xs, ys)) }
Weak Trs:
  { mul0(Cons(x, xs), y) -> add0(mul0(xs, y), y)
  , mul0(Nil(), y) -> Nil()
  , add0(Cons(x, xs), y) -> add0(xs, Cons(S(), y))
  , add0(Nil(), y) -> y
  , goal(xs, ys) -> mul0(xs, ys) }
Obligation:
  innermost runtime complexity
Answer:
  YES(O(1),O(n^3))

Consider the dependency graph

  1: mul0^#(Cons(x, xs), y) ->
     c_1(add0^#(mul0(xs, y), y), mul0^#(xs, y))
     -->_1 add0^#(Cons(x, xs), y) -> c_3(add0^#(xs, Cons(S(), y))) :2
     -->_2 mul0^#(Cons(x, xs), y) ->
           c_1(add0^#(mul0(xs, y), y), mul0^#(xs, y)) :1
  
  2: add0^#(Cons(x, xs), y) -> c_3(add0^#(xs, Cons(S(), y)))
     -->_1 add0^#(Cons(x, xs), y) -> c_3(add0^#(xs, Cons(S(), y))) :2
  
  3: goal^#(xs, ys) -> c_5(mul0^#(xs, ys))
     -->_1 mul0^#(Cons(x, xs), y) ->
           c_1(add0^#(mul0(xs, y), y), mul0^#(xs, y)) :1
  

Following roots of the dependency graph are removed, as the
considered set of starting terms is closed under reduction with
respect to these rules (modulo compound contexts).

  { goal^#(xs, ys) -> c_5(mul0^#(xs, ys)) }


We are left with following problem, upon which TcT provides the
certificate YES(O(1),O(n^3)).

Strict DPs:
  { mul0^#(Cons(x, xs), y) ->
    c_1(add0^#(mul0(xs, y), y), mul0^#(xs, y))
  , add0^#(Cons(x, xs), y) -> c_3(add0^#(xs, Cons(S(), y))) }
Weak Trs:
  { mul0(Cons(x, xs), y) -> add0(mul0(xs, y), y)
  , mul0(Nil(), y) -> Nil()
  , add0(Cons(x, xs), y) -> add0(xs, Cons(S(), y))
  , add0(Nil(), y) -> y
  , goal(xs, ys) -> mul0(xs, ys) }
Obligation:
  innermost runtime complexity
Answer:
  YES(O(1),O(n^3))

We replace rewrite rules by usable rules:

  Weak Usable Rules:
    { mul0(Cons(x, xs), y) -> add0(mul0(xs, y), y)
    , mul0(Nil(), y) -> Nil()
    , add0(Cons(x, xs), y) -> add0(xs, Cons(S(), y))
    , add0(Nil(), y) -> y }

We are left with following problem, upon which TcT provides the
certificate YES(O(1),O(n^3)).

Strict DPs:
  { mul0^#(Cons(x, xs), y) ->
    c_1(add0^#(mul0(xs, y), y), mul0^#(xs, y))
  , add0^#(Cons(x, xs), y) -> c_3(add0^#(xs, Cons(S(), y))) }
Weak Trs:
  { mul0(Cons(x, xs), y) -> add0(mul0(xs, y), y)
  , mul0(Nil(), y) -> Nil()
  , add0(Cons(x, xs), y) -> add0(xs, Cons(S(), y))
  , add0(Nil(), y) -> y }
Obligation:
  innermost runtime complexity
Answer:
  YES(O(1),O(n^3))

We decompose the input problem according to the dependency graph
into the upper component

  { mul0^#(Cons(x, xs), y) ->
    c_1(add0^#(mul0(xs, y), y), mul0^#(xs, y)) }

and lower component

  { add0^#(Cons(x, xs), y) -> c_3(add0^#(xs, Cons(S(), y))) }

Further, following extension rules are added to the lower
component.

{ mul0^#(Cons(x, xs), y) -> mul0^#(xs, y)
, mul0^#(Cons(x, xs), y) -> add0^#(mul0(xs, y), y) }

TcT solves the upper component with certificate YES(O(1),O(n^1)).

Sub-proof:
----------
  We are left with following problem, upon which TcT provides the
  certificate YES(O(1),O(n^1)).
  
  Strict DPs:
    { mul0^#(Cons(x, xs), y) ->
      c_1(add0^#(mul0(xs, y), y), mul0^#(xs, y)) }
  Weak Trs:
    { mul0(Cons(x, xs), y) -> add0(mul0(xs, y), y)
    , mul0(Nil(), y) -> Nil()
    , add0(Cons(x, xs), y) -> add0(xs, Cons(S(), y))
    , add0(Nil(), y) -> y }
  Obligation:
    innermost runtime complexity
  Answer:
    YES(O(1),O(n^1))
  
  We use the processor 'Small Polynomial Path Order (PS,1-bounded)'
  to orient following rules strictly.
  
  DPs:
    { 1: mul0^#(Cons(x, xs), y) ->
         c_1(add0^#(mul0(xs, y), y), mul0^#(xs, y)) }
  
  Sub-proof:
  ----------
    The input was oriented with the instance of 'Small Polynomial Path
    Order (PS,1-bounded)' as induced by the safe mapping
    
     safe(mul0) = {2}, safe(Cons) = {1, 2}, safe(add0) = {},
     safe(S) = {}, safe(Nil) = {}, safe(mul0^#) = {2}, safe(c_1) = {},
     safe(add0^#) = {}
    
    and precedence
    
     mul0 > add0 .
    
    Following symbols are considered recursive:
    
     {mul0^#}
    
    The recursion depth is 1.
    
    Further, following argument filtering is employed:
    
     pi(mul0) = [1, 2], pi(Cons) = [2], pi(add0) = [1, 2], pi(S) = [],
     pi(Nil) = [], pi(mul0^#) = [1], pi(c_1) = [1, 2], pi(add0^#) = []
    
    Usable defined function symbols are a subset of:
    
     {mul0^#, add0^#}
    
    For your convenience, here are the satisfied ordering constraints:
    
      pi(mul0^#(Cons(x, xs), y)) = mul0^#(Cons(; xs);)                           
                                 > c_1(add0^#(),  mul0^#(xs;);)                  
                                 = pi(c_1(add0^#(mul0(xs, y), y), mul0^#(xs, y)))
                                                                                 
  
  The strictly oriented rules are moved into the weak component.
  
  We are left with following problem, upon which TcT provides the
  certificate YES(O(1),O(1)).
  
  Weak DPs:
    { mul0^#(Cons(x, xs), y) ->
      c_1(add0^#(mul0(xs, y), y), mul0^#(xs, y)) }
  Weak Trs:
    { mul0(Cons(x, xs), y) -> add0(mul0(xs, y), y)
    , mul0(Nil(), y) -> Nil()
    , add0(Cons(x, xs), y) -> add0(xs, Cons(S(), y))
    , add0(Nil(), y) -> y }
  Obligation:
    innermost runtime complexity
  Answer:
    YES(O(1),O(1))
  
  The following weak DPs constitute a sub-graph of the DG that is
  closed under successors. The DPs are removed.
  
  { mul0^#(Cons(x, xs), y) ->
    c_1(add0^#(mul0(xs, y), y), mul0^#(xs, y)) }
  
  We are left with following problem, upon which TcT provides the
  certificate YES(O(1),O(1)).
  
  Weak Trs:
    { mul0(Cons(x, xs), y) -> add0(mul0(xs, y), y)
    , mul0(Nil(), y) -> Nil()
    , add0(Cons(x, xs), y) -> add0(xs, Cons(S(), y))
    , add0(Nil(), y) -> y }
  Obligation:
    innermost runtime complexity
  Answer:
    YES(O(1),O(1))
  
  No rule is usable, rules are removed from the input problem.
  
  We are left with following problem, upon which TcT provides the
  certificate YES(O(1),O(1)).
  
  Rules: Empty
  Obligation:
    innermost runtime complexity
  Answer:
    YES(O(1),O(1))
  
  Empty rules are trivially bounded

We return to the main proof.

We are left with following problem, upon which TcT provides the
certificate YES(O(1),O(n^2)).

Strict DPs:
  { add0^#(Cons(x, xs), y) -> c_3(add0^#(xs, Cons(S(), y))) }
Weak DPs:
  { mul0^#(Cons(x, xs), y) -> mul0^#(xs, y)
  , mul0^#(Cons(x, xs), y) -> add0^#(mul0(xs, y), y) }
Weak Trs:
  { mul0(Cons(x, xs), y) -> add0(mul0(xs, y), y)
  , mul0(Nil(), y) -> Nil()
  , add0(Cons(x, xs), y) -> add0(xs, Cons(S(), y))
  , add0(Nil(), y) -> y }
Obligation:
  innermost runtime complexity
Answer:
  YES(O(1),O(n^2))

We use the processor 'custom shape polynomial interpretation' to
orient following rules strictly.

DPs:
  { 1: add0^#(Cons(x, xs), y) -> c_3(add0^#(xs, Cons(S(), y)))
  , 2: mul0^#(Cons(x, xs), y) -> mul0^#(xs, y)
  , 3: mul0^#(Cons(x, xs), y) -> add0^#(mul0(xs, y), y) }
Trs: { add0(Nil(), y) -> y }

Sub-proof:
----------
  The following argument positions are considered usable:
    Uargs(c_3) = {1}
  TcT has computed the following constructor-restricted polynomial
  interpretation.
    [mul0](x1, x2) = x1 + x1*x2 + x1^2 + x2 + x2^2
                                                  
    [Cons](x1, x2) = 1 + x2                       
                                                  
    [add0](x1, x2) = 2 + x1 + x2                  
                                                  
             [S]() = 1                            
                                                  
           [Nil]() = 0                            
                                                  
  [mul0^#](x1, x2) = 1 + 3*x1*x2 + 2*x1^2 + 3*x2^2
                                                  
  [add0^#](x1, x2) = 1 + 2*x1 + x2                
                                                  
         [c_3](x1) = x1                           
                                                  
  
  This order satisfies the following ordering constraints.
  
      [mul0(Cons(x, xs), y)] =  2 + 3*xs + 2*y + xs*y + xs^2 + y^2      
                             >= 2 + xs + xs*y + xs^2 + 2*y + y^2        
                             =  [add0(mul0(xs, y), y)]                  
                                                                        
            [mul0(Nil(), y)] =  y + y^2                                 
                             >=                                         
                             =  [Nil()]                                 
                                                                        
      [add0(Cons(x, xs), y)] =  3 + xs + y                              
                             >= 3 + xs + y                              
                             =  [add0(xs, Cons(S(), y))]                
                                                                        
            [add0(Nil(), y)] =  2 + y                                   
                             >  y                                       
                             =  [y]                                     
                                                                        
    [mul0^#(Cons(x, xs), y)] =  3 + 3*y + 3*xs*y + 4*xs + 2*xs^2 + 3*y^2
                             >  1 + 3*xs*y + 2*xs^2 + 3*y^2             
                             =  [mul0^#(xs, y)]                         
                                                                        
    [mul0^#(Cons(x, xs), y)] =  3 + 3*y + 3*xs*y + 4*xs + 2*xs^2 + 3*y^2
                             >  1 + 2*xs + 2*xs*y + 2*xs^2 + 3*y + 2*y^2
                             =  [add0^#(mul0(xs, y), y)]                
                                                                        
    [add0^#(Cons(x, xs), y)] =  3 + 2*xs + y                            
                             >  2 + 2*xs + y                            
                             =  [c_3(add0^#(xs, Cons(S(), y)))]         
                                                                        

The strictly oriented rules are moved into the weak component.

We are left with following problem, upon which TcT provides the
certificate YES(O(1),O(1)).

Weak DPs:
  { mul0^#(Cons(x, xs), y) -> mul0^#(xs, y)
  , mul0^#(Cons(x, xs), y) -> add0^#(mul0(xs, y), y)
  , add0^#(Cons(x, xs), y) -> c_3(add0^#(xs, Cons(S(), y))) }
Weak Trs:
  { mul0(Cons(x, xs), y) -> add0(mul0(xs, y), y)
  , mul0(Nil(), y) -> Nil()
  , add0(Cons(x, xs), y) -> add0(xs, Cons(S(), y))
  , add0(Nil(), y) -> y }
Obligation:
  innermost runtime complexity
Answer:
  YES(O(1),O(1))

The following weak DPs constitute a sub-graph of the DG that is
closed under successors. The DPs are removed.

{ mul0^#(Cons(x, xs), y) -> mul0^#(xs, y)
, mul0^#(Cons(x, xs), y) -> add0^#(mul0(xs, y), y)
, add0^#(Cons(x, xs), y) -> c_3(add0^#(xs, Cons(S(), y))) }

We are left with following problem, upon which TcT provides the
certificate YES(O(1),O(1)).

Weak Trs:
  { mul0(Cons(x, xs), y) -> add0(mul0(xs, y), y)
  , mul0(Nil(), y) -> Nil()
  , add0(Cons(x, xs), y) -> add0(xs, Cons(S(), y))
  , add0(Nil(), y) -> y }
Obligation:
  innermost runtime complexity
Answer:
  YES(O(1),O(1))

No rule is usable, rules are removed from the input problem.

We are left with following problem, upon which TcT provides the
certificate YES(O(1),O(1)).

Rules: Empty
Obligation:
  innermost runtime complexity
Answer:
  YES(O(1),O(1))

Empty rules are trivially bounded

Hurray, we answered YES(O(1),O(n^3))